wizards 0.5.12 → 0.6.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/apps/runtime/dist/authoring/guide.js +63 -7
- package/apps/runtime/dist/credits/estimate.js +1 -1
- package/apps/runtime/dist/db/control-schema.js +10 -0
- package/apps/runtime/dist/db/migrations/control/0010_tan_snowbird.sql +6 -0
- package/apps/runtime/dist/db/migrations/control/meta/0010_snapshot.json +600 -0
- package/apps/runtime/dist/db/migrations/control/meta/_journal.json +7 -0
- package/apps/runtime/dist/db/migrations/tenant/0016_even_trish_tilby.sql +12 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0016_snapshot.json +3326 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/_journal.json +7 -0
- package/apps/runtime/dist/db/schema.js +20 -0
- package/apps/runtime/dist/engine/requirements.js +1 -1
- package/apps/runtime/dist/engine/runner.js +72 -7
- package/apps/runtime/dist/engine/steps.js +169 -126
- package/apps/runtime/dist/model-errors.js +20 -7
- package/apps/runtime/dist/render/downloads.js +16 -3
- package/apps/runtime/dist/render/shaped.js +137 -0
- package/apps/runtime/dist/routes/runs.js +228 -25
- package/apps/runtime/dist/routes/studio.js +41 -3
- package/apps/runtime/dist/services/brand.js +2 -1
- package/apps/runtime/dist/services/cloud.js +1 -0
- package/apps/runtime/dist/services/spaces.js +1 -0
- package/apps/runtime/dist/services/translations.js +303 -0
- package/apps/runtime/dist/services/wizards.js +3 -1
- package/apps/runtime/dist/texts.js +2 -0
- package/apps/runtime/dist/widgets/runtime.js +25 -2
- package/apps/runtime/dist/widgets/step.js +2 -0
- package/apps/web/dist/assets/AboutDialog-xOyf_juP.js +1 -0
- package/apps/web/dist/assets/{ChangelogDialog-BZ8i3wt_.js → ChangelogDialog-vNG0Smoo.js} +1 -1
- package/apps/web/dist/assets/ChatView-BrDkurRe.js +10 -0
- package/apps/web/dist/assets/EditorPage-97U-JYKn.js +3 -0
- package/apps/web/dist/assets/{FlowPreview-DG23aI89.js → FlowPreview-DA0sHtr7.js} +1 -1
- package/apps/web/dist/assets/{Harness-CFh04TZ3.js → Harness-Y9E7o83r.js} +2 -2
- package/apps/web/dist/assets/{NewWizardChannels-Bmo5yRCv.js → NewWizardChannels-D6v1iDOo.js} +1 -1
- package/apps/web/dist/assets/NewWizardPage-BzaAPMUK.js +7 -0
- package/apps/web/dist/assets/OnboardingPage-9xZAkhuO.js +1 -0
- package/apps/web/dist/assets/ProjectPage-dQ7wwxD2.js +1 -0
- package/apps/web/dist/assets/PublicRunner-CKa8M0Qd.js +1 -0
- package/apps/web/dist/assets/{ReadOnly-C_jD7KjW.js → ReadOnly-Bqk14yPD.js} +1 -1
- package/apps/web/dist/assets/RunDrawer-DsfZUojZ.js +4 -0
- package/apps/web/dist/assets/RunnerView-D0JQ1fgM.js +1 -0
- package/apps/web/dist/assets/SettingsPage-Dzu6Fl6b.js +1 -0
- package/apps/web/dist/assets/SetupPage-D2Kl-8NR.js +1 -0
- package/apps/web/dist/assets/SharePage-QSZxUlPt.js +1 -0
- package/apps/web/dist/assets/changelog-XlAAw5Gv.js +1 -0
- package/apps/web/dist/assets/{esm-Dzqe3TT4.js → esm-DqRvG-PU.js} +1 -1
- package/apps/web/dist/assets/index-BhVJwBz7.css +1 -0
- package/apps/web/dist/assets/index-mwmrgVFT.js +14 -0
- package/apps/web/dist/assets/{lock-a8rDnyg5.js → lock-D_KjsGfU.js} +1 -1
- package/apps/web/dist/assets/{phone-CitA6oZn.js → phone-YRxkPQk6.js} +1 -1
- package/apps/web/dist/assets/{settings-menu-COgM8CgB.js → settings-menu-CQgehwEX.js} +1 -1
- package/apps/web/dist/assets/ui-DDUCc_4v.js +137 -0
- package/apps/web/dist/assets/{upload-CcKFwoPd.js → upload-DDo14e2p.js} +1 -1
- package/apps/web/dist/index.html +3 -3
- package/apps/web/dist/mcp/flow.html +58 -55
- package/node_modules/@engenty-wizards/plugin-sdk/dist/index.d.ts +5 -2
- package/node_modules/@engenty-wizards/shared/dist/definition.d.ts +206 -3
- package/node_modules/@engenty-wizards/shared/dist/definition.js +140 -18
- package/node_modules/@engenty-wizards/shared/dist/projects.d.ts +11 -0
- package/node_modules/@engenty-wizards/shared/dist/projects.js +54 -0
- package/node_modules/@engenty-wizards/shared/dist/run.d.ts +68 -4
- package/node_modules/@engenty-wizards/shared/dist/run.js +26 -8
- package/node_modules/@engenty-wizards/shared/dist/runner-texts.d.ts +546 -0
- package/node_modules/@engenty-wizards/shared/dist/runner-texts.js +523 -0
- package/node_modules/@engenty-wizards/shared/dist/runners.js +1 -1
- package/node_modules/@engenty-wizards/shared/dist/shape.d.ts +102 -0
- package/node_modules/@engenty-wizards/shared/dist/shape.js +318 -0
- package/node_modules/@engenty-wizards/shared/dist/surface.d.ts +33 -7
- package/node_modules/@engenty-wizards/shared/dist/surface.js +263 -20
- package/node_modules/@engenty-wizards/shared/dist/texts.d.ts +11 -2
- package/node_modules/@engenty-wizards/shared/dist/texts.js +16 -8
- package/node_modules/@engenty-wizards/shared/dist/translation.d.ts +23 -0
- package/node_modules/@engenty-wizards/shared/dist/translation.js +154 -0
- package/package.json +1 -1
- package/apps/web/dist/assets/AboutDialog-DvkE9J4h.js +0 -1
- package/apps/web/dist/assets/ChatView-DIDIR0mb.js +0 -10
- package/apps/web/dist/assets/EditorPage-BYysznX3.js +0 -3
- package/apps/web/dist/assets/NewWizardPage-4n9-ZmHt.js +0 -7
- package/apps/web/dist/assets/OnboardingPage-DpZv9qEO.js +0 -1
- package/apps/web/dist/assets/ProjectPage-IQb9RFlm.js +0 -1
- package/apps/web/dist/assets/PublicRunner-Da0klKj-.js +0 -1
- package/apps/web/dist/assets/RunDrawer-FwLK67Yn.js +0 -4
- package/apps/web/dist/assets/RunnerView-BBuphCkK.js +0 -1
- package/apps/web/dist/assets/SettingsPage-CZx52Ubk.js +0 -1
- package/apps/web/dist/assets/SetupPage-B-o7VhbI.js +0 -1
- package/apps/web/dist/assets/SharePage-k2OMGOWU.js +0 -1
- package/apps/web/dist/assets/changelog-9oSWVuP-.js +0 -1
- package/apps/web/dist/assets/index-93fPRTxr.js +0 -14
- package/apps/web/dist/assets/index-DaKjB676.css +0 -1
- package/apps/web/dist/assets/ui-CeZNNuaK.js +0 -134
|
@@ -0,0 +1,523 @@
|
|
|
1
|
+
// Wording: docs/copy-style.md (voice, glossary, EN/DE mechanics). Write each language as its
|
|
2
|
+
// own sentence, not a word-for-word copy of the other. Check with `pnpm copy:check`.
|
|
3
|
+
/**
|
|
4
|
+
* What the runner says to the person running a wizard, in German and English. The studio spreads
|
|
5
|
+
* these into its own dictionary; a host without one (the WordPress plugin) uses them as they are.
|
|
6
|
+
*/
|
|
7
|
+
const de = {
|
|
8
|
+
"result.translate": "Übersetzen",
|
|
9
|
+
"translation.working": "Wird übersetzt …",
|
|
10
|
+
"translation.machine": "Maschinell übersetzt",
|
|
11
|
+
"translation.showOriginal": "Original zeigen",
|
|
12
|
+
"translation.showTranslated": "Übersetzung zeigen",
|
|
13
|
+
"translation.failed": "Dieser Wizard lässt sich gerade nicht übersetzen.",
|
|
14
|
+
"share.copied": "Kopiert",
|
|
15
|
+
"surface.done": "{done} von {total}",
|
|
16
|
+
"surface.allDone": "Alles erledigt",
|
|
17
|
+
"surface.close": "Schließen",
|
|
18
|
+
"data.view": "Ansicht",
|
|
19
|
+
"data.edit": "Bearbeiten",
|
|
20
|
+
"data.json": "JSON",
|
|
21
|
+
"data.modes": "Daten zeigen als",
|
|
22
|
+
"data.add": "{what} hinzufügen",
|
|
23
|
+
"data.remove": "Entfernen",
|
|
24
|
+
"data.missing": "{id} fehlt",
|
|
25
|
+
"data.yes": "Ja",
|
|
26
|
+
"data.no": "Nein",
|
|
27
|
+
"data.menu": "Mehr",
|
|
28
|
+
"data.open": "Daten ansehen und bearbeiten",
|
|
29
|
+
"data.close": "Daten schließen",
|
|
30
|
+
"data.save": "Speichern",
|
|
31
|
+
"data.saved": "Gespeichert",
|
|
32
|
+
"data.schema": "JSON Schema",
|
|
33
|
+
"data.copy": "Kopieren",
|
|
34
|
+
"data.download": "Herunterladen",
|
|
35
|
+
"run.closed": "Hier gerade nicht verfügbar, dafür fehlt: {list}",
|
|
36
|
+
"slot.later": "Spätere Termine zeigen",
|
|
37
|
+
"slot.none": "Gerade sind keine Termine frei.",
|
|
38
|
+
"cards.open": "Details",
|
|
39
|
+
"cards.picked": "Ausgewählt ✓",
|
|
40
|
+
"cards.pick": "Auswählen",
|
|
41
|
+
"run.cls.text": "Text",
|
|
42
|
+
"run.cls.image": "Bilder",
|
|
43
|
+
"run.cls.video": "Videos",
|
|
44
|
+
"run.cls.speech": "Sprachausgabe",
|
|
45
|
+
"run.cls.audio": "Sprachnotizen",
|
|
46
|
+
"run.cls.account": "ein engenty-Konto",
|
|
47
|
+
"run.next": "Weiter",
|
|
48
|
+
"run.back": "Zurück",
|
|
49
|
+
"run.accept": "Passt so",
|
|
50
|
+
"run.edit": "Bearbeiten",
|
|
51
|
+
"run.pickItem": "Nr. {n}",
|
|
52
|
+
"run.pickedItem": "Nr. {n} neu",
|
|
53
|
+
"run.regeneratePicked": "Nur Nr. {n} wird neu erstellt.",
|
|
54
|
+
"run.regenerateAll": "Alle werden neu erstellt. Tippe oben auf eine Nummer, um nur einzelne zu erneuern.",
|
|
55
|
+
"check.progress": "{done} von {total} geprüft",
|
|
56
|
+
"check.onlyOpen": "Nur offene",
|
|
57
|
+
"check.noFile": "Zu dieser Zeile gibt es keine Datei.",
|
|
58
|
+
"check.noPreview": "Für diese Datei gibt es keine Vorschau – öffne sie mit dem Link oben.",
|
|
59
|
+
"check.reopen": "Wieder öffnen",
|
|
60
|
+
"run.feedbackPlaceholder": "Passt etwas nicht? Schreib, was anders sein soll …",
|
|
61
|
+
"run.feedbackTarget": "Was soll sich ändern?",
|
|
62
|
+
"run.feedbackPick": "Wähle oben, was sich ändern soll.",
|
|
63
|
+
"ai.generated": "KI-generiert",
|
|
64
|
+
"ai.modified": "Mit KI verändert",
|
|
65
|
+
"ai.publish": "Mit KI erstellt: Wer das veröffentlicht, muss es als KI-generiert kennzeichnen (EU AI Act, Art. 50). Die Datei trägt die Kennzeichnung bereits in ihren Metadaten.",
|
|
66
|
+
"run.regenerateGo": "Neu erstellen",
|
|
67
|
+
"run.retry": "Erneut versuchen",
|
|
68
|
+
"run.again": "Nochmal",
|
|
69
|
+
"run.copy": "Text kopieren",
|
|
70
|
+
"run.failed": "Da hat etwas nicht geklappt.",
|
|
71
|
+
"run.notFound": "Diesen Wizard gibt es nicht, oder er wurde gelöscht.",
|
|
72
|
+
"run.working": "Einen Moment …",
|
|
73
|
+
"run.elapsed": "{s} s",
|
|
74
|
+
"run.cancelled": "Abgebrochen.",
|
|
75
|
+
"run.addRow": "Zeile hinzufügen",
|
|
76
|
+
"run.upload": "Datei wählen oder hierher ziehen",
|
|
77
|
+
"run.uploading": "Lädt hoch …",
|
|
78
|
+
"run.net": "Netto",
|
|
79
|
+
"run.vat": "USt. {r} %",
|
|
80
|
+
"run.total": "Gesamt",
|
|
81
|
+
"run.uploadMore": "Weitere Datei",
|
|
82
|
+
"run.camera": "Kamera",
|
|
83
|
+
"camera.title": "Mit der Kamera aufnehmen",
|
|
84
|
+
"camera.hint": "Gerade und gut beleuchtet ins Bild halten.",
|
|
85
|
+
"camera.taken": "{n} aufgenommen",
|
|
86
|
+
"camera.shoot": "Aufnehmen",
|
|
87
|
+
"camera.done": "Fertig",
|
|
88
|
+
"camera.denied": "Die Kamera ist für diese Seite nicht freigegeben. Erlaube sie in den Website-Einstellungen deines Browsers (Schloss-Symbol in der Adresszeile) – oder nimm das Foto mit der Kamera-App auf.",
|
|
89
|
+
"connect.go": "Verbinden",
|
|
90
|
+
"connect.connected": "Verbunden über {name}",
|
|
91
|
+
"connect.disconnect": "Trennen",
|
|
92
|
+
"connect.none": "Auf diesem Server ist noch kein Anbieter zum Verbinden eingerichtet.",
|
|
93
|
+
"connect.openLink": "Anmeldung in neuem Tab öffnen",
|
|
94
|
+
"list.empty": "Noch keine Einträge.",
|
|
95
|
+
"list.delete": "Zeile löschen",
|
|
96
|
+
"ask.typeInto": "Text in die Seite tippen …",
|
|
97
|
+
"ask.hide": "verdeckt",
|
|
98
|
+
"ask.up": "Nach oben",
|
|
99
|
+
"ask.down": "Nach unten",
|
|
100
|
+
"ask.pictureHint": "Hier siehst du live die Seite, die der Wizard geöffnet hat. Du kannst auch direkt hineinklicken und tippen.",
|
|
101
|
+
"ask.remember": "Anmeldung für nächstes Mal merken",
|
|
102
|
+
"ask.private": "Was du eingibst, geht direkt in die Seite. Die KI bekommt es nicht zu sehen. Gemerkte Anmeldungen werden verschlüsselt gespeichert.",
|
|
103
|
+
"ask.skip": "Überspringen",
|
|
104
|
+
"ask.done": "Ich bin angemeldet",
|
|
105
|
+
"ask.signIn": "Anmelden",
|
|
106
|
+
"ask.wants": "Der Wizard möchte in {service} Folgendes ausführen:",
|
|
107
|
+
"ask.allowRest": "Für den Rest dieses Laufs erlauben",
|
|
108
|
+
"ask.allow": "Erlauben",
|
|
109
|
+
"ask.deny": "Nicht erlauben",
|
|
110
|
+
"store.open": "Was dieser Wizard sich merkt",
|
|
111
|
+
"store.title": "Für dich gemerkt",
|
|
112
|
+
"store.explain": "Dieser Wizard merkt sich Listen, Dateien und verbundene Konten für deinen nächsten Lauf. Nur du siehst sie.",
|
|
113
|
+
"store.empty": "Noch nichts gespeichert.",
|
|
114
|
+
"store.rows": { one: "{n} Eintrag", other: "{n} Einträge" },
|
|
115
|
+
"store.signIns": "Gemerkte Anmeldungen im Browser",
|
|
116
|
+
"store.files": { one: "{n} Datei · {size}", other: "{n} Dateien · {size}" },
|
|
117
|
+
"store.delete": "Alles löschen",
|
|
118
|
+
"store.confirmDelete": "Ja, alles löschen",
|
|
119
|
+
"common.close": "Schließen",
|
|
120
|
+
"run.uploadTouch": "Datei wählen",
|
|
121
|
+
"run.maxFiles": {
|
|
122
|
+
one: "Hier geht höchstens {n} Datei – die übrigen sind weggelassen.",
|
|
123
|
+
other: "Hier gehen höchstens {n} Dateien – die übrigen sind weggelassen.",
|
|
124
|
+
},
|
|
125
|
+
"run.filesMin": "{n} von mindestens {min}",
|
|
126
|
+
"run.filesOf": "{n} von höchstens {max}",
|
|
127
|
+
"run.moveFile": "Nr. {n} verschieben",
|
|
128
|
+
"run.moveFileHint": "Ziehen, um die Reihenfolge zu ändern",
|
|
129
|
+
"run.removeFile": "Entfernen",
|
|
130
|
+
"run.awake": "Der Bildschirm bleibt an, solange der Wizard arbeitet.",
|
|
131
|
+
"run.openFull": "Groß öffnen",
|
|
132
|
+
"run.yes": "Ja",
|
|
133
|
+
"run.no": "Nein",
|
|
134
|
+
"run.share": "Teilen",
|
|
135
|
+
"run.shareNow": "Jetzt teilen",
|
|
136
|
+
"run.shareFile": "Als Datei teilen oder in einer App öffnen",
|
|
137
|
+
"run.print": "Drucken",
|
|
138
|
+
"camera.asking": "Dein Browser fragt gleich nach der Kamera. Das Bild bleibt in diesem Wizard.",
|
|
139
|
+
"camera.native": "Kamera-App öffnen",
|
|
140
|
+
"camera.pick": "Foto auswählen",
|
|
141
|
+
"camera.torch": "Licht",
|
|
142
|
+
"camera.flip": "Kamera wechseln",
|
|
143
|
+
"camera.photo": "Foto",
|
|
144
|
+
"camera.video": "Video",
|
|
145
|
+
"camera.record": "Aufnahme starten",
|
|
146
|
+
"camera.stop": "Aufnahme beenden",
|
|
147
|
+
"camera.recording": "Nimmt auf – tippe zum Beenden.",
|
|
148
|
+
"camera.clipHint": "Ein kurzer Clip, höchstens {s} Sekunden.",
|
|
149
|
+
"camera.hintMany": "Seite für Seite aufnehmen, dann „Fertig“.",
|
|
150
|
+
"scan.button": "Scannen",
|
|
151
|
+
"scan.title": "Code scannen",
|
|
152
|
+
"scan.asking": "Dein Browser fragt gleich nach der Kamera – sie liest nur den Code.",
|
|
153
|
+
"scan.hint": "Halte den QR- oder Barcode in den Rahmen.",
|
|
154
|
+
"scan.hintQr": "Halte den QR-Code in den Rahmen. Barcodes kann dieses Gerät hier nicht lesen.",
|
|
155
|
+
"scan.miss": "Auf dem Foto war kein Code zu erkennen. Versuch es näher und schärfer.",
|
|
156
|
+
"scan.fromPhoto": "Foto mit dem Code wählen",
|
|
157
|
+
"scan.typeInstead": "Lieber eintippen",
|
|
158
|
+
"location.use": "Meinen Standort verwenden",
|
|
159
|
+
"location.locating": "Standort wird bestimmt …",
|
|
160
|
+
"location.refining": "wird noch genauer …",
|
|
161
|
+
"location.accuracy": "auf etwa {m} m genau",
|
|
162
|
+
"location.map": "Karte",
|
|
163
|
+
"location.remove": "Standort entfernen",
|
|
164
|
+
"location.why": "Dein Browser fragt nach deinem Standort. Er wird nur für diesen Wizard verwendet. Du kannst auch einfach die Adresse eintippen.",
|
|
165
|
+
"location.denied": "Der Standort ist für diese Seite nicht freigegeben. Erlaube ihn in den Website-Einstellungen deines Browsers (Schloss-Symbol in der Adresszeile) – oder tippe die Adresse unten ein.",
|
|
166
|
+
"location.manual": "Adresse oder Ort eintippen",
|
|
167
|
+
"location.label": "Adresse oder Beschreibung des Orts",
|
|
168
|
+
"voice.start": "Sprachnotiz aufnehmen",
|
|
169
|
+
"voice.stop": "Stopp",
|
|
170
|
+
"voice.recording": "Aufnahme läuft …",
|
|
171
|
+
"voice.left": "noch {s} s",
|
|
172
|
+
"voice.again": "Neu aufnehmen",
|
|
173
|
+
"voice.remove": "Löschen",
|
|
174
|
+
"voice.pick": "Audiodatei wählen",
|
|
175
|
+
"voice.why": "Dein Browser fragt nach dem Mikrofon. Die Aufnahme wird danach in Text umgewandelt.",
|
|
176
|
+
"voice.denied": "Das Mikrofon ist für diese Seite nicht freigegeben. Erlaube es in den Website-Einstellungen deines Browsers – oder nimm die Notiz mit der Diktier-App auf und wähle die Datei.",
|
|
177
|
+
"voice.noRecorder": "Dieser Browser kann hier nicht aufnehmen. Nimm die Notiz mit der Diktier-App auf und wähle die Datei.",
|
|
178
|
+
"sign.open": "Hier unterschreiben",
|
|
179
|
+
"sign.hint": "Mit dem Finger unterschreiben",
|
|
180
|
+
"sign.pad": "Unterschriftsfeld",
|
|
181
|
+
"sign.clear": "Löschen",
|
|
182
|
+
"sign.accept": "Übernehmen",
|
|
183
|
+
"sign.again": "Neu unterschreiben",
|
|
184
|
+
"sign.remove": "Unterschrift entfernen",
|
|
185
|
+
"notify.ask": "Bescheid geben, wenn es fertig ist",
|
|
186
|
+
"notify.on": "Du bekommst Bescheid",
|
|
187
|
+
"notify.why": "Mit Ton, Vibration oder einer Mitteilung. Dein Browser fragt dafür einmal um Erlaubnis.",
|
|
188
|
+
"notify.onHint": "Du kannst die App wechseln – eine Mitteilung holt dich zurück.",
|
|
189
|
+
"notify.quiet": "Mit Ton und Vibration, solange diese Seite offen ist.",
|
|
190
|
+
"notify.blocked": "Mitteilungen sind für diese Seite blockiert – es gibt Ton und Vibration, solange sie offen ist. Erlauben kannst du sie in den Website-Einstellungen deines Browsers.",
|
|
191
|
+
"notify.done": "Dein Ergebnis ist fertig.",
|
|
192
|
+
"notify.next": "Es geht weiter – wirf einen Blick darauf.",
|
|
193
|
+
"notify.needsYou": "Der Wizard braucht dich kurz.",
|
|
194
|
+
"common.offline": "Keine Verbindung. Prüf dein Netz und versuch es noch einmal.",
|
|
195
|
+
"common.retry": "Erneut versuchen",
|
|
196
|
+
"common.cancel": "Abbrechen",
|
|
197
|
+
"run.start": "Los geht’s",
|
|
198
|
+
"run.unavailable": "Dieser Wizard ist gerade nicht verfügbar.",
|
|
199
|
+
"run.resume": "Letzten Lauf fortsetzen",
|
|
200
|
+
"output.preview": "Vorschau",
|
|
201
|
+
"package.newer": "Diese Wizard-Datei stammt aus einer neueren Version oder ist beschädigt. Aktualisiere engenty wizards oder exportiere den Wizard neu.",
|
|
202
|
+
"package.badJson": "Das ist keine Wizard-Datei: Die wizard.json darin lässt sich nicht lesen.",
|
|
203
|
+
"package.unreadable": "Die Wizard-Datei lässt sich nicht öffnen. Exportiere den Wizard neu und versuche es noch einmal.",
|
|
204
|
+
"package.noManifest": "Das ist keine Wizard-Datei: Die wizard.json fehlt.",
|
|
205
|
+
"browser.driving": "Du steuerst den Browser – klick und tipp in die Seite. Der Wizard wartet.",
|
|
206
|
+
"browser.handBack": "Zurückgeben",
|
|
207
|
+
"browser.takeOver": "Übernehmen",
|
|
208
|
+
"chat.above": "Antworte oben im Chat",
|
|
209
|
+
"chat.badEmail": "Das sieht nicht nach einer E-Mail-Adresse aus.",
|
|
210
|
+
"chat.badNumber": "Das sieht nicht nach einer Zahl aus.",
|
|
211
|
+
"chat.badUrl": "Das sieht nicht nach einer Webadresse aus.",
|
|
212
|
+
"chat.change": "Ändern",
|
|
213
|
+
"chat.checked": "Geprüft",
|
|
214
|
+
"chat.connected": "Verbunden",
|
|
215
|
+
"chat.dictate": "Diktieren (⌘⇧M)",
|
|
216
|
+
"chat.dictateStop": "Diktat beenden",
|
|
217
|
+
"chat.file": "1 Datei",
|
|
218
|
+
"chat.files": { one: "{n} Datei", other: "{n} Dateien" },
|
|
219
|
+
"chat.listening": "Ich höre zu …",
|
|
220
|
+
"chat.micDenied": "Das Mikrofon ist für diese Seite nicht freigegeben. Erlaube es in den Website-Einstellungen deines Browsers.",
|
|
221
|
+
"chat.placeholder": "Deine Antwort …",
|
|
222
|
+
"chat.readAloud": "Vorlesen",
|
|
223
|
+
"chat.readAloudOff": "Vorlesen beenden",
|
|
224
|
+
"chat.required": "Dafür brauche ich eine Antwort.",
|
|
225
|
+
"chat.rows": { one: "{n} Zeile", other: "{n} Zeilen" },
|
|
226
|
+
"chat.send": "Senden",
|
|
227
|
+
"chat.skip": "Überspringen",
|
|
228
|
+
"chat.skipped": "Übersprungen",
|
|
229
|
+
"chat.transcribing": "Wird in Text umgewandelt …",
|
|
230
|
+
"chat.voice": "Sprachnotiz",
|
|
231
|
+
"install.add": "Zum Startbildschirm hinzufügen",
|
|
232
|
+
"install.app": "In der App öffnen",
|
|
233
|
+
"install.bookmark": "Als Lesezeichen speichern",
|
|
234
|
+
"install.bookmark.mac": "Drücke ⌘ D, dann liegt dieser Wizard in deinen Lesezeichen.",
|
|
235
|
+
"install.bookmark.pc": "Drücke Strg + D, dann liegt dieser Wizard in deinen Lesezeichen.",
|
|
236
|
+
"install.ios": "Tippe unten auf „Teilen“ und dann auf „Zum Home-Bildschirm“.",
|
|
237
|
+
"run.madeWith": "Erstellt mit engenty wizards",
|
|
238
|
+
"run.orAs": "Oder: {label}",
|
|
239
|
+
"talk.camera": "Kamera einschalten",
|
|
240
|
+
"talk.cameraDenied": "Die Kamera ist für diese Seite nicht freigegeben. Erlaube sie in den Website-Einstellungen deines Browsers.",
|
|
241
|
+
"talk.cameraOff": "Kamera ausschalten",
|
|
242
|
+
"talk.connecting": "Verbindet …",
|
|
243
|
+
"talk.failed": "Das Gespräch ließ sich nicht starten.",
|
|
244
|
+
"talk.hint": "Sprich mit dem Wizard. Auf dem Bildschirm kannst du mitlesen.",
|
|
245
|
+
"talk.joinHint": "Beim Start fragt dein Browser nach dem Mikrofon, nach der Kamera erst, wenn du sie einschaltest. Im Chat daneben kannst du mitlesen und eingeben, was sich schlecht sagen lässt.",
|
|
246
|
+
"talk.listening": "Hört zu",
|
|
247
|
+
"talk.live": "Im Gespräch",
|
|
248
|
+
"talk.speaking": "Spricht",
|
|
249
|
+
"talk.start": "Gespräch beginnen",
|
|
250
|
+
"talk.stop": "Gespräch beenden",
|
|
251
|
+
"video.cameraOff": "Kamera aus",
|
|
252
|
+
"video.ended": "Anruf beendet",
|
|
253
|
+
"video.flip": "Kamera wechseln",
|
|
254
|
+
"video.hint": "Beim Beitreten fragt dein Browser nach Mikrofon und Kamera. Im Chat daneben kannst du mitlesen und eingeben, was sich schlecht sagen lässt.",
|
|
255
|
+
"video.join": "Beitreten",
|
|
256
|
+
"video.leave": "Verlassen",
|
|
257
|
+
"video.mute": "Stummschalten",
|
|
258
|
+
"video.rejoin": "Wieder beitreten",
|
|
259
|
+
"video.unmute": "Stummschaltung aufheben",
|
|
260
|
+
"video.you": "Du",
|
|
261
|
+
"nav.language": "Sprache",
|
|
262
|
+
};
|
|
263
|
+
const en = {
|
|
264
|
+
"result.translate": "Translate",
|
|
265
|
+
"translation.working": "Translating…",
|
|
266
|
+
"translation.machine": "Machine-translated",
|
|
267
|
+
"translation.showOriginal": "Show original",
|
|
268
|
+
"translation.showTranslated": "Show translation",
|
|
269
|
+
"translation.failed": "This wizard can’t be translated right now.",
|
|
270
|
+
"share.copied": "Copied",
|
|
271
|
+
"surface.done": "{done} of {total}",
|
|
272
|
+
"surface.allDone": "All done",
|
|
273
|
+
"surface.close": "Close",
|
|
274
|
+
"data.view": "View",
|
|
275
|
+
"data.edit": "Edit",
|
|
276
|
+
"data.json": "JSON",
|
|
277
|
+
"data.modes": "Show the data as",
|
|
278
|
+
"data.add": "Add {what}",
|
|
279
|
+
"data.remove": "Remove",
|
|
280
|
+
"data.missing": "{id} is missing",
|
|
281
|
+
"data.yes": "Yes",
|
|
282
|
+
"data.no": "No",
|
|
283
|
+
"data.menu": "More",
|
|
284
|
+
"data.open": "View and edit the data",
|
|
285
|
+
"data.close": "Close the data",
|
|
286
|
+
"data.save": "Save",
|
|
287
|
+
"data.saved": "Saved",
|
|
288
|
+
"data.schema": "JSON Schema",
|
|
289
|
+
"data.copy": "Copy",
|
|
290
|
+
"data.download": "Download",
|
|
291
|
+
"run.closed": "Not available here right now. It needs {list}.",
|
|
292
|
+
"slot.later": "Show later times",
|
|
293
|
+
"slot.none": "No times are free right now.",
|
|
294
|
+
"cards.open": "Details",
|
|
295
|
+
"cards.picked": "Chosen ✓",
|
|
296
|
+
"cards.pick": "Choose",
|
|
297
|
+
"run.cls.text": "text",
|
|
298
|
+
"run.cls.image": "images",
|
|
299
|
+
"run.cls.video": "video",
|
|
300
|
+
"run.cls.speech": "speech output",
|
|
301
|
+
"run.cls.audio": "voice notes",
|
|
302
|
+
"run.cls.account": "an engenty account",
|
|
303
|
+
"run.next": "Continue",
|
|
304
|
+
"run.back": "Back",
|
|
305
|
+
"run.accept": "Looks good",
|
|
306
|
+
"run.edit": "Edit",
|
|
307
|
+
"run.pickItem": "No. {n}",
|
|
308
|
+
"run.pickedItem": "No. {n} again",
|
|
309
|
+
"run.regeneratePicked": "Only no. {n} will be redone.",
|
|
310
|
+
"run.regenerateAll": "Applies to all. Tap a number to redo just that one.",
|
|
311
|
+
"check.progress": "{done} of {total} checked",
|
|
312
|
+
"check.onlyOpen": "Open only",
|
|
313
|
+
"check.noFile": "There’s no file for this row.",
|
|
314
|
+
"check.noPreview": "This file has no preview – open it with the link above.",
|
|
315
|
+
"check.reopen": "Open again",
|
|
316
|
+
"run.feedbackPlaceholder": "Something not right? Write what should be different…",
|
|
317
|
+
"run.feedbackTarget": "What should change?",
|
|
318
|
+
"run.feedbackPick": "Choose above what should change.",
|
|
319
|
+
"ai.generated": "AI-generated",
|
|
320
|
+
"ai.modified": "AI-modified",
|
|
321
|
+
"ai.publish": "Made with AI: whoever publishes this has to label it as AI-generated (EU AI Act, Art. 50). The file already carries the marking in its metadata.",
|
|
322
|
+
"run.regenerateGo": "Recreate",
|
|
323
|
+
"run.retry": "Try again",
|
|
324
|
+
"run.again": "Start over",
|
|
325
|
+
"run.copy": "Copy text",
|
|
326
|
+
"run.failed": "Something went wrong.",
|
|
327
|
+
"run.notFound": "This wizard doesn’t exist or was deleted.",
|
|
328
|
+
"run.working": "One moment…",
|
|
329
|
+
"run.elapsed": "{s} s",
|
|
330
|
+
"run.cancelled": "Cancelled.",
|
|
331
|
+
"run.addRow": "Add row",
|
|
332
|
+
"run.upload": "Choose a file or drop it here",
|
|
333
|
+
"run.uploading": "Uploading…",
|
|
334
|
+
"run.net": "Net",
|
|
335
|
+
"run.vat": "VAT {r}%",
|
|
336
|
+
"run.total": "Total",
|
|
337
|
+
"run.uploadMore": "Another file",
|
|
338
|
+
"run.camera": "Camera",
|
|
339
|
+
"camera.title": "Take a picture",
|
|
340
|
+
"camera.hint": "Hold it flat and well lit.",
|
|
341
|
+
"camera.taken": "{n} taken",
|
|
342
|
+
"camera.shoot": "Capture",
|
|
343
|
+
"camera.done": "Done",
|
|
344
|
+
"camera.denied": "The camera isn’t allowed for this page. Allow it in your browser’s site settings (the lock icon in the address bar) – or take the photo with your camera app.",
|
|
345
|
+
"connect.go": "Connect",
|
|
346
|
+
"connect.connected": "Connected through {name}",
|
|
347
|
+
"connect.disconnect": "Disconnect",
|
|
348
|
+
"connect.none": "This server has no provider for connecting accounts yet.",
|
|
349
|
+
"connect.openLink": "Click here to open the sign-in in a new tab",
|
|
350
|
+
"list.empty": "No entries yet.",
|
|
351
|
+
"list.delete": "Delete row",
|
|
352
|
+
"ask.typeInto": "Type into the page…",
|
|
353
|
+
"ask.hide": "hidden",
|
|
354
|
+
"ask.up": "Scroll up",
|
|
355
|
+
"ask.down": "Scroll down",
|
|
356
|
+
"ask.pictureHint": "This is the page the wizard has open, live. You can also click and type right in it.",
|
|
357
|
+
"ask.remember": "Remember this sign-in for next time",
|
|
358
|
+
"ask.private": "What you enter goes straight into the page. The AI never sees it. Remembered sign-ins are stored encrypted.",
|
|
359
|
+
"ask.skip": "Skip",
|
|
360
|
+
"ask.done": "I’m signed in",
|
|
361
|
+
"ask.signIn": "Sign in",
|
|
362
|
+
"ask.wants": "The wizard wants to run this in {service}:",
|
|
363
|
+
"ask.allowRest": "Allow for the rest of this run",
|
|
364
|
+
"ask.allow": "Allow",
|
|
365
|
+
"ask.deny": "Don’t allow",
|
|
366
|
+
"store.open": "What this wizard remembers",
|
|
367
|
+
"store.title": "Kept for you",
|
|
368
|
+
"store.explain": "This wizard keeps lists, files and connected accounts for your next run. Only you see them.",
|
|
369
|
+
"store.empty": "Nothing kept yet.",
|
|
370
|
+
"store.rows": { one: "{n} entry", other: "{n} entries" },
|
|
371
|
+
"store.signIns": "Remembered sign-ins in the browser",
|
|
372
|
+
"store.files": { one: "{n} file · {size}", other: "{n} files · {size}" },
|
|
373
|
+
"store.delete": "Delete everything",
|
|
374
|
+
"store.confirmDelete": "Yes, delete everything",
|
|
375
|
+
"common.close": "Close",
|
|
376
|
+
"run.uploadTouch": "Choose a file",
|
|
377
|
+
"run.maxFiles": {
|
|
378
|
+
one: "At most {n} fits here – the rest were left out.",
|
|
379
|
+
other: "At most {n} fit here – the rest were left out.",
|
|
380
|
+
},
|
|
381
|
+
"run.filesMin": "{n} of at least {min}",
|
|
382
|
+
"run.filesOf": "{n} of at most {max}",
|
|
383
|
+
"run.moveFile": "Move no. {n}",
|
|
384
|
+
"run.moveFileHint": "Drag to change the order",
|
|
385
|
+
"run.removeFile": "Remove",
|
|
386
|
+
"run.awake": "The screen stays on while the wizard works.",
|
|
387
|
+
"run.openFull": "Open full size",
|
|
388
|
+
"run.yes": "Yes",
|
|
389
|
+
"run.no": "No",
|
|
390
|
+
"run.share": "Share",
|
|
391
|
+
"run.shareNow": "Share now",
|
|
392
|
+
"run.shareFile": "Share as a file or open in an app",
|
|
393
|
+
"run.print": "Print",
|
|
394
|
+
"camera.asking": "Your browser is about to ask for the camera. The picture stays in this wizard.",
|
|
395
|
+
"camera.native": "Open the camera app",
|
|
396
|
+
"camera.pick": "Choose a photo",
|
|
397
|
+
"camera.torch": "Light",
|
|
398
|
+
"camera.flip": "Switch camera",
|
|
399
|
+
"camera.photo": "Photo",
|
|
400
|
+
"camera.video": "Video",
|
|
401
|
+
"camera.record": "Start recording",
|
|
402
|
+
"camera.stop": "Stop recording",
|
|
403
|
+
"camera.recording": "Recording – tap to stop.",
|
|
404
|
+
"camera.clipHint": "A short clip, {s} seconds at most.",
|
|
405
|
+
"camera.hintMany": "Capture page after page, then “Done”.",
|
|
406
|
+
"scan.button": "Scan",
|
|
407
|
+
"scan.title": "Scan a code",
|
|
408
|
+
"scan.asking": "Your browser is about to ask for the camera – it only reads the code.",
|
|
409
|
+
"scan.hint": "Hold the QR code or barcode inside the frame.",
|
|
410
|
+
"scan.hintQr": "Hold the QR code inside the frame. This device doesn’t read barcodes here.",
|
|
411
|
+
"scan.miss": "No code was found in the photo. Try closer and sharper.",
|
|
412
|
+
"scan.fromPhoto": "Choose a photo of the code",
|
|
413
|
+
"scan.typeInstead": "Type it instead",
|
|
414
|
+
"location.use": "Use my location",
|
|
415
|
+
"location.locating": "Finding your location…",
|
|
416
|
+
"location.refining": "getting more accurate…",
|
|
417
|
+
"location.accuracy": "accurate to about {m} m",
|
|
418
|
+
"location.map": "Map",
|
|
419
|
+
"location.remove": "Remove location",
|
|
420
|
+
"location.why": "Your browser asks for your location. It’s only used for this wizard. You can also just type the address.",
|
|
421
|
+
"location.denied": "Location isn’t allowed for this page. Allow it in your browser’s site settings (the lock icon in the address bar) – or type the address below.",
|
|
422
|
+
"location.manual": "Type an address or place",
|
|
423
|
+
"location.label": "Address or description of the place",
|
|
424
|
+
"voice.start": "Record a voice note",
|
|
425
|
+
"voice.stop": "Stop",
|
|
426
|
+
"voice.recording": "Recording…",
|
|
427
|
+
"voice.left": "{s} s left",
|
|
428
|
+
"voice.again": "Record again",
|
|
429
|
+
"voice.remove": "Delete",
|
|
430
|
+
"voice.pick": "Choose an audio file",
|
|
431
|
+
"voice.why": "Your browser asks for the microphone. The recording is turned into text afterwards.",
|
|
432
|
+
"voice.denied": "The microphone isn’t allowed for this page. Allow it in your browser’s site settings – or record the note with your voice memo app and choose the file.",
|
|
433
|
+
"voice.noRecorder": "This browser can’t record here. Record the note with your voice memo app and choose the file.",
|
|
434
|
+
"sign.open": "Sign here",
|
|
435
|
+
"sign.hint": "Sign with your finger",
|
|
436
|
+
"sign.pad": "Signature pad",
|
|
437
|
+
"sign.clear": "Clear",
|
|
438
|
+
"sign.accept": "Use it",
|
|
439
|
+
"sign.again": "Sign again",
|
|
440
|
+
"sign.remove": "Remove signature",
|
|
441
|
+
"notify.ask": "Tell me when it’s done",
|
|
442
|
+
"notify.on": "We’ll let you know",
|
|
443
|
+
"notify.why": "With a sound, a buzz or a notification. Your browser asks once for permission.",
|
|
444
|
+
"notify.onHint": "You can switch apps – a notification brings you back.",
|
|
445
|
+
"notify.quiet": "With a sound and a buzz while this page is open.",
|
|
446
|
+
"notify.blocked": "Notifications are blocked for this page – you get a sound and a buzz while it’s open. You can allow them in your browser’s site settings.",
|
|
447
|
+
"notify.done": "Your result is ready.",
|
|
448
|
+
"notify.next": "The next step is ready – have a look.",
|
|
449
|
+
"notify.needsYou": "The wizard needs you for a moment.",
|
|
450
|
+
"common.offline": "No connection. Check your network and try again.",
|
|
451
|
+
"common.retry": "Try again",
|
|
452
|
+
"common.cancel": "Cancel",
|
|
453
|
+
"run.start": "Let’s go",
|
|
454
|
+
"run.unavailable": "This wizard isn’t available right now.",
|
|
455
|
+
"run.resume": "Continue your last run",
|
|
456
|
+
"output.preview": "Preview",
|
|
457
|
+
"package.newer": "This wizard file comes from a newer version, or it’s damaged. Update engenty wizards or export the wizard again.",
|
|
458
|
+
"package.badJson": "This isn’t a wizard file: its wizard.json can’t be read.",
|
|
459
|
+
"package.unreadable": "The wizard file can’t be opened. Export the wizard again and try once more.",
|
|
460
|
+
"package.noManifest": "This isn’t a wizard file: wizard.json is missing.",
|
|
461
|
+
"browser.driving": "You’re in control of the browser – click and type in the page. The wizard waits.",
|
|
462
|
+
"browser.handBack": "Hand back",
|
|
463
|
+
"browser.takeOver": "Take over",
|
|
464
|
+
"chat.above": "Answer above in the chat",
|
|
465
|
+
"chat.badEmail": "That doesn’t look like an email address.",
|
|
466
|
+
"chat.badNumber": "Enter a number.",
|
|
467
|
+
"chat.badUrl": "That isn’t a valid address.",
|
|
468
|
+
"chat.change": "Change",
|
|
469
|
+
"chat.checked": "Checked",
|
|
470
|
+
"chat.connected": "Connected",
|
|
471
|
+
"chat.dictate": "Dictate (⌘⇧M)",
|
|
472
|
+
"chat.dictateStop": "Stop dictating",
|
|
473
|
+
"chat.file": "1 file",
|
|
474
|
+
"chat.files": { one: "{n} file", other: "{n} files" },
|
|
475
|
+
"chat.listening": "Listening…",
|
|
476
|
+
"chat.micDenied": "The microphone isn’t allowed for this page. Allow it in your browser’s site settings.",
|
|
477
|
+
"chat.placeholder": "Your answer…",
|
|
478
|
+
"chat.readAloud": "Read aloud",
|
|
479
|
+
"chat.readAloudOff": "Stop reading aloud",
|
|
480
|
+
"chat.required": "I need an answer for this one.",
|
|
481
|
+
"chat.rows": { one: "{n} row", other: "{n} rows" },
|
|
482
|
+
"chat.send": "Send",
|
|
483
|
+
"chat.skip": "Skip",
|
|
484
|
+
"chat.skipped": "Skipped",
|
|
485
|
+
"chat.transcribing": "Writing it down…",
|
|
486
|
+
"chat.voice": "Voice note",
|
|
487
|
+
"install.add": "Add to home screen",
|
|
488
|
+
"install.app": "Open in the app",
|
|
489
|
+
"install.bookmark": "Bookmark this wizard",
|
|
490
|
+
"install.bookmark.mac": "Press ⌘ D to keep this wizard in your bookmarks.",
|
|
491
|
+
"install.bookmark.pc": "Press Ctrl + D to keep this wizard in your bookmarks.",
|
|
492
|
+
"install.ios": "Tap “Share” below, then “Add to Home Screen”.",
|
|
493
|
+
"run.madeWith": "Made with engenty wizards",
|
|
494
|
+
"run.orAs": "Or: {label}",
|
|
495
|
+
"talk.camera": "Switch the camera on",
|
|
496
|
+
"talk.cameraDenied": "The camera isn’t allowed for this page. Allow it in your browser’s site settings.",
|
|
497
|
+
"talk.cameraOff": "Switch the camera off",
|
|
498
|
+
"talk.connecting": "Connecting…",
|
|
499
|
+
"talk.failed": "The conversation couldn’t start. Check your connection and try again.",
|
|
500
|
+
"talk.hint": "Talk to the wizard – the screen follows along.",
|
|
501
|
+
"talk.joinHint": "Your browser asks for the microphone when you start, and for the camera only when you switch it on. The chat beside it follows along and handles what voice can’t.",
|
|
502
|
+
"talk.listening": "Listening",
|
|
503
|
+
"talk.live": "In conversation",
|
|
504
|
+
"talk.speaking": "Speaking",
|
|
505
|
+
"talk.start": "Start talking",
|
|
506
|
+
"talk.stop": "End the conversation",
|
|
507
|
+
"video.cameraOff": "Camera off",
|
|
508
|
+
"video.ended": "Call ended",
|
|
509
|
+
"video.flip": "Switch camera",
|
|
510
|
+
"video.hint": "Your browser asks for the microphone and camera when you join. The chat beside it follows along and handles what voice can’t.",
|
|
511
|
+
"video.join": "Join",
|
|
512
|
+
"video.leave": "Leave",
|
|
513
|
+
"video.mute": "Mute",
|
|
514
|
+
"video.rejoin": "Rejoin",
|
|
515
|
+
"video.unmute": "Unmute",
|
|
516
|
+
"video.you": "You",
|
|
517
|
+
"nav.language": "Language",
|
|
518
|
+
};
|
|
519
|
+
/**
|
|
520
|
+
* The runner's words in each language. English has every one; another language may lack some,
|
|
521
|
+
* and those are said in English.
|
|
522
|
+
*/
|
|
523
|
+
export const RUNNER_TEXTS = { en, de };
|
|
@@ -68,7 +68,7 @@ export const DEFAULT_RUNNER_SETTINGS = {
|
|
|
68
68
|
export function outputKindOf(step) {
|
|
69
69
|
switch (step.type) {
|
|
70
70
|
case "agent":
|
|
71
|
-
return step.output?.fields?.length ? "data" : "text";
|
|
71
|
+
return step.output?.fields?.length || step.output?.schema ? "data" : "text";
|
|
72
72
|
case "generate":
|
|
73
73
|
return step.asset;
|
|
74
74
|
case "widget":
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* What an agent step's json output holds, in the kinds wizards already use: `output.schema`.
|
|
4
|
+
* Text, numbers, yes/no, a choice, an entry of another list by its id (`ref`), and lists — of
|
|
5
|
+
* these or of objects (entries) with lists of their own — every one with a label. The runtime builds the model's JSON Schema from
|
|
6
|
+
* it, the admin shows and edits the data by it, downloads and views read it.
|
|
7
|
+
*
|
|
8
|
+
* `output.fields`, the short form, compiles to the same shape (`shapeOfFields`); two kinds exist
|
|
9
|
+
* only there: `score` (a decision's levels) and `table` (rows of text or numbers, columns named
|
|
10
|
+
* or picked by the model).
|
|
11
|
+
*/
|
|
12
|
+
/** Objects nest at most this deep, the step's own object counted. */
|
|
13
|
+
export declare const MAX_SHAPE_DEPTH = 4;
|
|
14
|
+
/** At most this many keys in all objects together. */
|
|
15
|
+
export declare const MAX_SHAPE_KEYS = 100;
|
|
16
|
+
interface Named {
|
|
17
|
+
/** What people read: a column's head, a part's title, "add …". Without one, the key. */
|
|
18
|
+
label?: string;
|
|
19
|
+
/** What the model is to put there. */
|
|
20
|
+
description?: string;
|
|
21
|
+
}
|
|
22
|
+
export type TextShape = Named & {
|
|
23
|
+
kind: "text";
|
|
24
|
+
long?: boolean;
|
|
25
|
+
};
|
|
26
|
+
export type NumberShape = Named & {
|
|
27
|
+
kind: "number";
|
|
28
|
+
unit?: string;
|
|
29
|
+
};
|
|
30
|
+
export type YesNoShape = Named & {
|
|
31
|
+
kind: "yesno";
|
|
32
|
+
yes?: string;
|
|
33
|
+
no?: string;
|
|
34
|
+
};
|
|
35
|
+
export type ChoiceShape = Named & {
|
|
36
|
+
kind: "choice";
|
|
37
|
+
options: string[];
|
|
38
|
+
};
|
|
39
|
+
/** An entry of a top-level list of the same output, by its `id`. */
|
|
40
|
+
export type RefShape = Named & {
|
|
41
|
+
kind: "ref";
|
|
42
|
+
to: string;
|
|
43
|
+
};
|
|
44
|
+
export type LeafShape = TextShape | NumberShape | YesNoShape | ChoiceShape | RefShape;
|
|
45
|
+
export type ListShape = Named & {
|
|
46
|
+
kind: "list";
|
|
47
|
+
of: LeafShape | ObjectShape;
|
|
48
|
+
};
|
|
49
|
+
export interface ObjectShape extends Named {
|
|
50
|
+
kind: "object";
|
|
51
|
+
fields: Record<string, FieldShape>;
|
|
52
|
+
}
|
|
53
|
+
/** `fields` only: a decision's levels, lowest first. */
|
|
54
|
+
export type ScoreShape = Named & {
|
|
55
|
+
kind: "score";
|
|
56
|
+
options: string[];
|
|
57
|
+
};
|
|
58
|
+
/** `fields` only: rows of text or numbers; without columns the model picks them. */
|
|
59
|
+
export type TableShape = Named & {
|
|
60
|
+
kind: "table";
|
|
61
|
+
columns?: string[];
|
|
62
|
+
};
|
|
63
|
+
export type FieldShape = LeafShape | ListShape | ScoreShape | TableShape;
|
|
64
|
+
/** `output.schema`: what the step returns. */
|
|
65
|
+
export declare const outputShapeSchema: z.ZodType<ObjectShape, unknown, z.core.$ZodTypeInternals<ObjectShape, unknown>>;
|
|
66
|
+
/** An output field as `output.fields` writes it. */
|
|
67
|
+
interface ShortField {
|
|
68
|
+
id: string;
|
|
69
|
+
kind: string;
|
|
70
|
+
description?: string;
|
|
71
|
+
columns?: string[];
|
|
72
|
+
options?: string[];
|
|
73
|
+
}
|
|
74
|
+
/** The short form as a shape: a field per key, a list of text, a table as it is. */
|
|
75
|
+
export declare function shapeOfFields(fields: ShortField[]): ObjectShape;
|
|
76
|
+
/** The key of an entry's title: its first short text other than its `id`. */
|
|
77
|
+
export declare function titleKey(shape: ObjectShape): string | undefined;
|
|
78
|
+
/** What people read for a key. */
|
|
79
|
+
export declare function labelOf(key: string, shape: FieldShape | ListShape["of"]): string;
|
|
80
|
+
/** The data a shape describes, as Zod: what a model's answer is checked against. */
|
|
81
|
+
export declare function shapeZod(shape: FieldShape | ListShape["of"], k?: string): z.ZodType;
|
|
82
|
+
/**
|
|
83
|
+
* The data as JSON Schema (draft 2020-12): every key required, no other keys — what a model's
|
|
84
|
+
* structured output takes, and what developers read.
|
|
85
|
+
*/
|
|
86
|
+
export declare function shapeJsonSchema(shape: ObjectShape, title?: string): Record<string, unknown>;
|
|
87
|
+
/**
|
|
88
|
+
* Data a model wrote itself, fitted to the shape before it is checked: a number where text
|
|
89
|
+
* belongs as text, a number written as text as a number; in a table a cell's list joined and a
|
|
90
|
+
* missing column empty. Lists stay lists everywhere else.
|
|
91
|
+
*/
|
|
92
|
+
export declare function fitData(shape: FieldShape | ListShape["of"], value: unknown): unknown;
|
|
93
|
+
/** Tables with free columns come back as columns + rows and are stored as records. */
|
|
94
|
+
export declare function recordsOf(shape: FieldShape | ListShape["of"], value: unknown): unknown;
|
|
95
|
+
/** The shape as lines of paths a model binds to: "/recipes[]/title (text): Titel". */
|
|
96
|
+
export declare function shapeLines(shape: ObjectShape, at?: string): string[];
|
|
97
|
+
/**
|
|
98
|
+
* The shape at a path: keys of objects, an index (digits) into a list. `any` where the data can
|
|
99
|
+
* hold anything (a table's row), undefined where the shape has nothing.
|
|
100
|
+
*/
|
|
101
|
+
export declare function shapeAt(shape: FieldShape | ListShape["of"], path: string[]): FieldShape | ListShape["of"] | "any" | undefined;
|
|
102
|
+
export {};
|