wizards 0.5.7 → 0.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/apps/runtime/dist/agents/architect.js +13 -26
  2. package/apps/runtime/dist/agents/studio-assistant.js +19 -22
  3. package/apps/runtime/dist/agents/subscription.js +10 -9
  4. package/apps/runtime/dist/app.js +6 -6
  5. package/apps/runtime/dist/assistant/knows.js +10 -9
  6. package/apps/runtime/dist/connectors/external.js +3 -3
  7. package/apps/runtime/dist/connectors/index.js +23 -23
  8. package/apps/runtime/dist/connectors/via-account.js +6 -6
  9. package/apps/runtime/dist/documents/parse.js +3 -3
  10. package/apps/runtime/dist/engine/input.js +11 -11
  11. package/apps/runtime/dist/engine/requirements.js +7 -8
  12. package/apps/runtime/dist/engine/runner.js +10 -14
  13. package/apps/runtime/dist/engine/steps.js +6 -6
  14. package/apps/runtime/dist/engine/surface.js +2 -2
  15. package/apps/runtime/dist/film/step.js +5 -5
  16. package/apps/runtime/dist/harness/apple.js +2 -1
  17. package/apps/runtime/dist/harness/claude.js +2 -2
  18. package/apps/runtime/dist/harness/codex.js +2 -2
  19. package/apps/runtime/dist/harness/model.js +4 -5
  20. package/apps/runtime/dist/harness/terminal.js +4 -4
  21. package/apps/runtime/dist/media/conversation.js +18 -35
  22. package/apps/runtime/dist/media/transcribe.js +2 -1
  23. package/apps/runtime/dist/model-errors.js +1 -1
  24. package/apps/runtime/dist/models.js +32 -40
  25. package/apps/runtime/dist/plugins/runs.js +3 -5
  26. package/apps/runtime/dist/routes/api.js +9 -9
  27. package/apps/runtime/dist/routes/lang.js +14 -9
  28. package/apps/runtime/dist/routes/runs.js +5 -5
  29. package/apps/runtime/dist/routes/studio.js +38 -37
  30. package/apps/runtime/dist/services/access.js +4 -4
  31. package/apps/runtime/dist/services/architect.js +3 -12
  32. package/apps/runtime/dist/services/assistant-chats.js +2 -2
  33. package/apps/runtime/dist/services/brand.js +3 -3
  34. package/apps/runtime/dist/services/cloud.js +5 -5
  35. package/apps/runtime/dist/services/errors.js +2 -2
  36. package/apps/runtime/dist/services/knowledge-model.js +3 -3
  37. package/apps/runtime/dist/services/marketplace.js +3 -3
  38. package/apps/runtime/dist/services/package-file.js +9 -11
  39. package/apps/runtime/dist/services/package.js +8 -9
  40. package/apps/runtime/dist/services/profile.js +2 -1
  41. package/apps/runtime/dist/services/project-files.js +13 -13
  42. package/apps/runtime/dist/services/projects.js +7 -11
  43. package/apps/runtime/dist/services/runners.js +4 -4
  44. package/apps/runtime/dist/services/runs.js +7 -10
  45. package/apps/runtime/dist/services/shares.js +2 -2
  46. package/apps/runtime/dist/services/site.js +8 -11
  47. package/apps/runtime/dist/services/space-categories.js +7 -7
  48. package/apps/runtime/dist/services/space-data.js +20 -20
  49. package/apps/runtime/dist/services/spaces.js +7 -9
  50. package/apps/runtime/dist/services/wizards.js +11 -13
  51. package/apps/runtime/dist/store/index.js +2 -2
  52. package/apps/runtime/dist/texts.js +195 -0
  53. package/apps/runtime/dist/tools/plugin.js +7 -3
  54. package/apps/runtime/dist/widgets/step.js +2 -2
  55. package/apps/web/dist/assets/AboutDialog-CpI-cGpz.js +1 -0
  56. package/apps/web/dist/assets/{ChangelogDialog-rAtYZjxz.js → ChangelogDialog-BW56Y5UR.js} +1 -1
  57. package/apps/web/dist/assets/ChatView-CH8U-tRy.js +10 -0
  58. package/apps/web/dist/assets/EditorPage-Be5J_y4F.js +3 -0
  59. package/apps/web/dist/assets/{FlowPreview--3-yI51e.js → FlowPreview-CzmH4JUQ.js} +1 -1
  60. package/apps/web/dist/assets/{Harness-B9tvFe0U.js → Harness-CJKWO3AK.js} +2 -2
  61. package/apps/web/dist/assets/{NewWizardChannels-BxrBhC9U.js → NewWizardChannels-Ca2niMTY.js} +1 -1
  62. package/apps/web/dist/assets/NewWizardPage-D5gi4TYE.js +7 -0
  63. package/apps/web/dist/assets/{OnboardingPage-DPdH9sSj.js → OnboardingPage-Bm-c-D21.js} +1 -1
  64. package/apps/web/dist/assets/ProjectPage-C8nJCBZP.js +1 -0
  65. package/apps/web/dist/assets/{PublicRunner-Bv3TMKw4.js → PublicRunner-anxg3Rxz.js} +1 -1
  66. package/apps/web/dist/assets/{ReadOnly-CmqIrOAR.js → ReadOnly-i-6WBMSE.js} +1 -1
  67. package/apps/web/dist/assets/RunDrawer-4yvfW_2c.js +4 -0
  68. package/apps/web/dist/assets/{RunnerView-Cd1VAlIA.js → RunnerView-BkWQBa_M.js} +1 -1
  69. package/apps/web/dist/assets/SettingsPage-NL8r9S6R.js +1 -0
  70. package/apps/web/dist/assets/SetupPage-Crcfx4-p.js +1 -0
  71. package/apps/web/dist/assets/{SharePage-BT80wI1I.js → SharePage-CDEAtmBC.js} +1 -1
  72. package/apps/web/dist/assets/changelog-BGBuldNF.js +1 -0
  73. package/apps/web/dist/assets/{esm-BTVd6EFo.js → esm-BF1nonbH.js} +1 -1
  74. package/apps/web/dist/assets/index-C74LSJ-W.js +14 -0
  75. package/apps/web/dist/assets/{lock-ByHFI96G.js → lock-DVvM6IsA.js} +1 -1
  76. package/apps/web/dist/assets/{phone-KPwxAM1R.js → phone-3fG1okFs.js} +1 -1
  77. package/apps/web/dist/assets/{settings-menu-K5bg3QE3.js → settings-menu-D9fbi1Z0.js} +1 -1
  78. package/apps/web/dist/assets/ui-EuR3jezP.js +134 -0
  79. package/apps/web/dist/assets/{upload-BsIL8tNR.js → upload-BsMUhEfX.js} +1 -1
  80. package/apps/web/dist/index.html +2 -2
  81. package/apps/web/dist/mcp/flow.html +77 -77
  82. package/bin/wizards.mjs +15 -2
  83. package/node_modules/@engenty-wizards/shared/dist/definition.d.ts +26 -9
  84. package/node_modules/@engenty-wizards/shared/dist/definition.js +125 -3
  85. package/node_modules/@engenty-wizards/shared/dist/marketplace-entry.d.ts +1 -1
  86. package/node_modules/@engenty-wizards/shared/dist/marketplace-entry.js +9 -8
  87. package/node_modules/@engenty-wizards/shared/dist/marketplace-search.js +6 -6
  88. package/node_modules/@engenty-wizards/shared/dist/marketplace.d.ts +78 -205
  89. package/node_modules/@engenty-wizards/shared/dist/marketplace.js +167 -68
  90. package/node_modules/@engenty-wizards/shared/dist/projects.d.ts +3 -6
  91. package/node_modules/@engenty-wizards/shared/dist/projects.js +9 -9
  92. package/node_modules/@engenty-wizards/shared/dist/providers.d.ts +33 -7
  93. package/node_modules/@engenty-wizards/shared/dist/providers.js +88 -37
  94. package/node_modules/@engenty-wizards/shared/dist/run.d.ts +298 -365
  95. package/node_modules/@engenty-wizards/shared/dist/run.js +582 -240
  96. package/node_modules/@engenty-wizards/shared/dist/texts.d.ts +36 -0
  97. package/node_modules/@engenty-wizards/shared/dist/texts.js +46 -0
  98. package/package.json +5 -1
  99. package/apps/web/dist/assets/AboutDialog-t9bayaIs.js +0 -1
  100. package/apps/web/dist/assets/ChatView-C3VqLT98.js +0 -10
  101. package/apps/web/dist/assets/EditorPage-D3Ef24b9.js +0 -3
  102. package/apps/web/dist/assets/NewWizardPage-C1_hsQPr.js +0 -7
  103. package/apps/web/dist/assets/ProjectPage-P40R1cPE.js +0 -1
  104. package/apps/web/dist/assets/RunDrawer-9qG1G-OY.js +0 -4
  105. package/apps/web/dist/assets/SettingsPage-DFz4UMfo.js +0 -1
  106. package/apps/web/dist/assets/SetupPage-B0UBNMB9.js +0 -1
  107. package/apps/web/dist/assets/changelog-BpSBMjpm.js +0 -1
  108. package/apps/web/dist/assets/index-D8vwgldH.js +0 -14
  109. package/apps/web/dist/assets/ui-4bQx9I1f.js +0 -134
@@ -1,6 +1,7 @@
1
- import type { CardOption, Format, ModelClass, Step, WizardDefinition } from "./definition.js";
1
+ import type { CardOption, Format, Lang, ModelClass, Step, WizardDefinition } from "./definition.js";
2
2
  import type { ConnectionView, ListDef, ListRow } from "./store.js";
3
3
  import type { Surface } from "./surface.js";
4
+ import { type Gap, type Texts } from "./texts.js";
4
5
  export type RunStatus = "waiting_input" | "running" | "done" | "failed" | "cancelled";
5
6
  export interface AssetRef {
6
7
  id: string;
@@ -158,382 +159,314 @@ export interface ShownList {
158
159
  * answers to the person running a shared wizard (a refusal, a failure) are notes too: it answers
159
160
  * them in the wizard's language.
160
161
  */
161
- export declare const RUN_NOTES: {
162
- readonly text: {
163
- readonly de: "{de}";
164
- readonly en: "{en}";
165
- };
166
- readonly entry: {
167
- readonly de: "Eintrag {n} von {total}";
168
- readonly en: "Entry {n} of {total}";
169
- };
170
- readonly deciding: {
171
- readonly de: "Entscheidet, wie es weitergeht …";
172
- readonly en: "Deciding what to do next…";
173
- };
174
- readonly choosingFields: {
175
- readonly de: "Wählt die passenden Fragen …";
176
- readonly en: "Choosing the right questions…";
177
- };
178
- readonly batchDone: {
179
- readonly de: "{done} von {total} fertig";
180
- readonly en: "{done} of {total} done";
181
- };
182
- readonly editing: {
183
- readonly de: "Bearbeitet {n} von {total}";
184
- readonly en: "Editing {n} of {total}";
185
- };
186
- readonly filming: {
187
- readonly de: "Dreht {n} von {total}";
188
- readonly en: "Filming {n} of {total}";
189
- };
162
+ declare const NOTES_EN: {
163
+ readonly entry: "Entry {n} of {total}";
164
+ readonly deciding: "Deciding what to do next…";
165
+ readonly choosingFields: "Choosing the right questions…";
166
+ readonly batchDone: "{done} of {total} done";
167
+ readonly editing: "Editing {n} of {total}";
168
+ readonly filming: "Filming {n} of {total}";
190
169
  readonly clipsRendering: {
191
- readonly de: "{count} Clips werden gerendert – das dauert einige Minuten.";
192
- readonly en: "Rendering {count} clips – this takes a few minutes.";
193
- };
194
- readonly videoRendering: {
195
- readonly de: "Das Video wird gerendert – das dauert meist 1–3 Minuten.";
196
- readonly en: "Rendering the video – this usually takes 1–3 minutes.";
197
- };
198
- readonly photo: {
199
- readonly de: "Sieht sich Foto {n} von {total} an";
200
- readonly en: "Looking at photo {n} of {total}";
201
- };
202
- readonly listen: {
203
- readonly de: "Hört „{label}“ an …";
204
- readonly en: "Listening to “{label}”…";
205
- };
206
- readonly listenFailed: {
207
- readonly de: "„{label}“ konnte nicht verschriftlicht werden.";
208
- readonly en: "“{label}” couldn’t be transcribed.";
209
- };
210
- readonly filmCutting: {
211
- readonly de: "Der Film wird geschnitten – das dauert etwa eine Minute.";
212
- readonly en: "Cutting the film – this takes about a minute.";
213
- };
214
- readonly filmProgress: {
215
- readonly de: "{pct} % geschnitten";
216
- readonly en: "{pct} % cut";
217
- };
218
- readonly filmError: {
219
- readonly de: "Der Film meldet: {detail}";
220
- readonly en: "The film reports: {detail}";
221
- };
222
- readonly widgetError: {
223
- readonly de: "Das Widget meldet einen Fehler: {detail}";
224
- readonly en: "The widget reports an error: {detail}";
225
- };
226
- readonly mcpConnected: {
227
- readonly de: "Verbunden mit {names}";
228
- readonly en: "Connected to {names}";
229
- };
230
- readonly mcpUnreachable: {
231
- readonly de: "MCP-Server nicht erreichbar: {detail}";
232
- readonly en: "MCP server unreachable: {detail}";
233
- };
234
- readonly reads: {
235
- readonly de: "Liest {name}";
236
- readonly en: "Reading {name}";
237
- };
170
+ readonly one: "Rendering {count} clip – this takes a few minutes.";
171
+ readonly other: "Rendering {count} clips – this takes a few minutes.";
172
+ };
173
+ readonly videoRendering: "Rendering the video – this usually takes 1–3 minutes.";
174
+ readonly photo: "Looking at photo {n} of {total}";
175
+ readonly listen: "Listening to “{label}”…";
176
+ readonly listenFailed: "“{label}” couldn’t be transcribed.";
177
+ readonly filmCutting: "Cutting the film – this takes about a minute.";
178
+ readonly filmProgress: "{pct} % cut";
179
+ readonly filmError: "The film reports: {detail}";
180
+ readonly widgetError: "The widget reports an error: {detail}";
181
+ readonly mcpConnected: "Connected to {names}";
182
+ readonly mcpUnreachable: "MCP server unreachable: {detail}";
183
+ readonly reads: "Reading {name}";
238
184
  readonly readsMany: {
239
- readonly de: "Liest {count} Dokumente";
240
- readonly en: "Reading {count} documents";
241
- };
242
- readonly opens: {
243
- readonly de: "Öffnet {name}";
244
- readonly en: "Opening {name}";
245
- };
246
- readonly clicks: {
247
- readonly de: "Klickt im Browser";
248
- readonly en: "Clicking in the browser";
249
- };
250
- readonly clicksOn: {
251
- readonly de: "Klickt auf „{name}“";
252
- readonly en: "Clicking “{name}”";
253
- };
254
- readonly types: {
255
- readonly de: "Tippt im Browser";
256
- readonly en: "Typing in the browser";
257
- };
258
- readonly typesText: {
259
- readonly de: "Tippt „{text}“";
260
- readonly en: "Typing “{text}”";
261
- };
262
- readonly selects: {
263
- readonly de: "Wählt „{option}“";
264
- readonly en: "Choosing “{option}”";
265
- };
266
- readonly scrolls: {
267
- readonly de: "Scrollt";
268
- readonly en: "Scrolling";
269
- };
270
- readonly presses: {
271
- readonly de: "Drückt {key}";
272
- readonly en: "Pressing {key}";
273
- };
274
- readonly goesBack: {
275
- readonly de: "Geht eine Seite zurück";
276
- readonly en: "Going back a page";
277
- };
278
- readonly waitsForPage: {
279
- readonly de: "Wartet auf die Seite";
280
- readonly en: "Waiting for the page";
281
- };
282
- readonly fastLoop: {
283
- readonly de: "Erledigt im Browser: {goal}";
284
- readonly en: "Doing in the browser: {goal}";
285
- };
286
- readonly personDrives: {
287
- readonly de: "Du steuerst den Browser – der Wizard wartet";
288
- readonly en: "You’re driving the browser – the wizard waits";
289
- };
290
- readonly agentDrives: {
291
- readonly de: "Der Wizard macht im Browser weiter";
292
- readonly en: "The wizard carries on in the browser";
293
- };
294
- readonly looksAtPage: {
295
- readonly de: "Sieht sich die Seite an";
296
- readonly en: "Looking at the page";
297
- };
298
- readonly waitsForSignIn: {
299
- readonly de: "Wartet auf deine Anmeldung bei {name}";
300
- readonly en: "Waiting for you to sign in to {name}";
301
- };
302
- readonly downloads: {
303
- readonly de: "Lädt {name} herunter";
304
- readonly en: "Downloading {name}";
305
- };
306
- readonly runs: {
307
- readonly de: "Führt aus: {command}";
308
- readonly en: "Running: {command}";
309
- };
310
- readonly python: {
311
- readonly de: "Führt Python aus";
312
- readonly en: "Running Python";
313
- };
314
- readonly drawing: {
315
- readonly de: "Zeichnet ein Bild";
316
- readonly en: "Drawing an image";
317
- };
318
- readonly writesPage: {
319
- readonly de: "Schreibt die Seite „{title}“";
320
- readonly en: "Writing the page “{title}”";
321
- };
322
- readonly searchesDocuments: {
323
- readonly de: "Sucht in den Dokumenten: {query}";
324
- readonly en: "Searching the documents: {query}";
325
- };
326
- readonly searchesKnowledge: {
327
- readonly de: "Sucht in Wissen: {query} – {relevant} von {candidates} passen";
328
- readonly en: "Searching knowledge: {query} – {relevant} of {candidates} fit";
329
- };
330
- readonly listsKnowledge: {
331
- readonly de: "Listet Wissen";
332
- readonly en: "Listing knowledge";
333
- };
334
- readonly searchesMail: {
335
- readonly de: "Durchsucht {label}";
336
- readonly en: "Searching {label}";
337
- };
185
+ readonly one: "Reading {count} document";
186
+ readonly other: "Reading {count} documents";
187
+ };
188
+ readonly opens: "Opening {name}";
189
+ readonly clicks: "Clicking in the browser";
190
+ readonly clicksOn: "Clicking “{name}”";
191
+ readonly types: "Typing in the browser";
192
+ readonly typesText: "Typing “{text}”";
193
+ readonly selects: "Choosing “{option}”";
194
+ readonly scrolls: "Scrolling";
195
+ readonly presses: "Pressing {key}";
196
+ readonly goesBack: "Going back a page";
197
+ readonly waitsForPage: "Waiting for the page";
198
+ readonly fastLoop: "Doing in the browser: {goal}";
199
+ readonly personDrives: "You’re driving the browser – the wizard waits";
200
+ readonly agentDrives: "The wizard carries on in the browser";
201
+ readonly looksAtPage: "Looking at the page";
202
+ readonly waitsForSignIn: "Waiting for you to sign in to {name}";
203
+ readonly downloads: "Downloading {name}";
204
+ readonly runs: "Running: {command}";
205
+ readonly python: "Running Python";
206
+ readonly drawing: "Drawing an image";
207
+ readonly writesPage: "Writing the page “{title}”";
208
+ readonly searchesDocuments: "Searching the documents: {query}";
209
+ readonly searchesKnowledge: "Searching knowledge: {query} – {relevant} of {candidates} fit";
210
+ readonly listsKnowledge: "Listing knowledge";
211
+ readonly searchesMail: "Searching {label}";
338
212
  readonly savesReceipts: {
339
- readonly de: "Speichert {count} Belege aus {label}";
340
- readonly en: "Saving {count} receipts from {label}";
341
- };
342
- readonly remembers: {
343
- readonly de: "Merkt sich {title}";
344
- readonly en: "Remembering {title}";
213
+ readonly one: "Saving {count} receipt from {label}";
214
+ readonly other: "Saving {count} receipts from {label}";
345
215
  };
216
+ readonly remembers: "Remembering {title}";
346
217
  readonly files: {
347
- readonly de: "Legt {count} Dateien ab";
348
- readonly en: "Filing {count} files";
349
- };
350
- readonly filmSetup: {
351
- readonly de: "Richtet den Arbeitsordner für den Film ein";
352
- readonly en: "Setting up the folder for the film";
353
- };
354
- readonly filmClient: {
355
- readonly de: "{client} arbeitet am Film – das dauert meist 10–40 Minuten.";
356
- readonly en: "{client} is working on the film – this usually takes 10–40 minutes.";
357
- };
358
- readonly filmTask: {
359
- readonly de: "Am Film: {task}";
360
- readonly en: "On the film: {task}";
361
- };
362
- readonly filmLooks: {
363
- readonly de: "Sieht sich Bilder des Films an";
364
- readonly en: "Looking at frames of the film";
365
- };
366
- readonly filmFix: {
367
- readonly de: "Der Film ließ sich nicht rendern – Claude Code bessert nach";
368
- readonly en: "The film didn’t render – Claude Code is fixing it";
369
- };
370
- readonly filmResume: {
371
- readonly de: "Macht dort weiter, wo der Film stehen geblieben ist";
372
- readonly en: "Picking the film up where it stopped";
373
- };
374
- readonly wizardUnavailable: {
375
- readonly de: "Dieser Wizard ist gerade nicht verfügbar.";
376
- readonly en: "This wizard isn’t available right now.";
377
- };
378
- readonly wizardLimit: {
379
- readonly de: "Für heute ist das Limit dieses Wizards erreicht. Versuch es morgen wieder.";
380
- readonly en: "This wizard has reached its limit for today. Try again tomorrow.";
381
- };
382
- readonly confirmHuman: {
383
- readonly de: "Bestätige kurz, dass du ein Mensch bist.";
384
- readonly en: "Confirm that you’re a person.";
385
- };
386
- readonly tooManyRuns: {
387
- readonly de: "Du hast gerade viele Läufe gestartet. Versuch es in einer Stunde wieder.";
388
- readonly en: "You’ve started a lot of runs just now. Try again in an hour.";
389
- };
390
- readonly runOver: {
391
- readonly de: "Der Lauf ist beendet.";
392
- readonly en: "The run is over.";
393
- };
394
- readonly runBusy: {
395
- readonly de: "Der Wizard arbeitet gerade.";
396
- readonly en: "The wizard is working right now.";
397
- };
398
- readonly pageOutdated: {
399
- readonly de: "Diese Seite ist nicht mehr aktuell.";
400
- readonly en: "This page is out of date.";
401
- };
402
- readonly noStepBefore: {
403
- readonly de: "Kein vorheriger Schritt.";
404
- readonly en: "There is no step before this one.";
405
- };
406
- readonly checkFields: {
407
- readonly de: "Prüf die markierten Felder.";
408
- readonly en: "Check the marked fields.";
409
- };
410
- readonly talkOff: {
411
- readonly de: "Live-Gespräche sind für diesen Wizard nicht eingeschaltet.";
412
- readonly en: "Live conversations aren’t turned on for this wizard.";
413
- };
414
- readonly talkKeyRefused: {
415
- readonly de: "Das Gespräch ließ sich nicht starten: Der OpenAI-API-Key wurde abgelehnt.";
416
- readonly en: "The conversation couldn’t start: the OpenAI API key was refused.";
417
- };
418
- readonly talkFailed: {
419
- readonly de: "Das Gespräch ließ sich nicht starten ({status}).";
420
- readonly en: "The conversation couldn’t start ({status}).";
421
- };
422
- readonly talkNoSecret: {
423
- readonly de: "Das Gespräch ließ sich nicht starten: Es kam kein Zugang zurück.";
424
- readonly en: "The conversation couldn’t start: no access key came back.";
425
- };
426
- readonly tryLater: {
427
- readonly de: "Versuch es später noch einmal.";
428
- readonly en: "Try again later.";
429
- };
430
- readonly recordingTooLarge: {
431
- readonly de: "Die Aufnahme darf höchstens 10 MB groß sein.";
432
- readonly en: "The recording can be 10 MB at most.";
433
- };
434
- readonly fileTooLarge: {
435
- readonly de: "Wähl eine Datei bis {mb} MB.";
436
- readonly en: "Choose a file of {mb} MB or less.";
437
- };
438
- readonly askClosed: {
439
- readonly de: "Diese Frage ist nicht mehr offen.";
440
- readonly en: "This question is no longer open.";
441
- };
442
- readonly noBrowser: {
443
- readonly de: "Der Wizard hat gerade keinen Browser offen.";
444
- readonly en: "The wizard has no browser open right now.";
445
- };
446
- readonly notWaiting: {
447
- readonly de: "Der Wizard wartet gerade nicht auf dich.";
448
- readonly en: "The wizard isn’t waiting for you right now.";
449
- };
450
- readonly pageActFailed: {
451
- readonly de: "Das hat auf der Seite nicht geklappt.";
452
- readonly en: "That didn’t work on the page.";
453
- };
454
- readonly linkGone: {
455
- readonly de: "Dieser Link ist abgelaufen oder wurde zurückgezogen.";
456
- readonly en: "This link has expired or was withdrawn.";
457
- };
458
- readonly connected: {
459
- readonly de: "Verbunden. Du kannst dieses Fenster schließen.";
460
- readonly en: "Connected. You can close this window.";
461
- };
462
- readonly connectFailed: {
463
- readonly de: "Verbinden hat nicht geklappt. Versuch es noch einmal.";
464
- readonly en: "Connecting didn’t work. Try again.";
465
- };
466
- readonly connectCancelled: {
467
- readonly de: "Verbinden wurde abgebrochen.";
468
- readonly en: "Connecting was cancelled.";
469
- };
470
- readonly appleOff: {
471
- readonly de: "Apple Intelligence ist auf diesem Mac ausgeschaltet. Schalte es unter Systemeinstellungen → Apple Intelligence & Siri ein.";
472
- readonly en: "Apple Intelligence is turned off on this Mac. Turn it on in System Settings → Apple Intelligence & Siri.";
473
- };
474
- readonly appleLoading: {
475
- readonly de: "Apple lädt das Modell für Apple Intelligence noch auf diesen Mac. Versuch es gleich noch einmal.";
476
- readonly en: "Apple is still loading the model for Apple Intelligence onto this Mac. Try again in a moment.";
477
- };
478
- readonly appleMissing: {
479
- readonly de: "Der Helfer für Apple Intelligence (wizards-apple) fehlt in dieser Installation.";
480
- readonly en: "The helper for Apple Intelligence (wizards-apple) is missing from this install.";
481
- };
482
- readonly appleOs: {
483
- readonly de: "Apple Intelligence braucht macOS 26 oder neuer.";
484
- readonly en: "Apple Intelligence needs macOS 26 or later.";
485
- };
486
- readonly appleDevice: {
487
- readonly de: "Apple Intelligence gibt es nur auf einem Mac mit Apple Silicon.";
488
- readonly en: "Apple Intelligence only works on a Mac with Apple silicon.";
489
- };
490
- readonly appleBusy: {
491
- readonly de: "Apple Intelligence nimmt gerade keine weiteren Anfragen an. Versuch es gleich noch einmal.";
492
- readonly en: "Apple Intelligence isn’t taking more requests right now. Try again in a moment.";
493
- };
494
- readonly appleTooLong: {
495
- readonly de: "Der Text ist zu lang für Apple Intelligence auf diesem Mac (4.096 Tokens für Frage und Antwort). Wähle unter Einstellungen → Modelle ein anderes Modell für diese Klasse.";
496
- readonly en: "The text is too long for Apple Intelligence on this Mac (4,096 tokens for question and answer). Choose another model for this class under Settings → Models.";
497
- };
498
- readonly appleRefused: {
499
- readonly de: "Apple Intelligence hat die Anfrage abgelehnt: Apples Inhaltsregeln lassen sie nicht zu.";
500
- readonly en: "Apple Intelligence turned the request down: Apple’s content rules don’t allow it.";
501
- };
502
- readonly appleLanguage: {
503
- readonly de: "Apple Intelligence versteht die Sprache dieser Anfrage nicht.";
504
- readonly en: "Apple Intelligence doesn’t understand the language of this request.";
505
- };
506
- readonly appleFormat: {
507
- readonly de: "Apple Intelligence kann dieses Antwortformat nicht liefern: {detail}";
508
- readonly en: "Apple Intelligence can’t answer in this format: {detail}";
509
- };
510
- readonly appleFailed: {
511
- readonly de: "Apple Intelligence: {detail}";
512
- readonly en: "Apple Intelligence: {detail}";
513
- };
514
- readonly appleNoFfmpeg: {
515
- readonly de: "Apple Intelligence liest {type} nicht, und ohne ffmpeg lässt sich die Aufnahme nicht umwandeln. Installiere ffmpeg oder nimm im Browser als MP4 auf.";
516
- readonly en: "Apple Intelligence can’t read {type}, and without ffmpeg the recording can’t be converted. Install ffmpeg or record as MP4 in the browser.";
517
- };
518
- readonly appleNotConverted: {
519
- readonly de: "Apple Intelligence konnte die Aufnahme nicht umwandeln: {detail}";
520
- readonly en: "Apple Intelligence couldn’t convert the recording: {detail}";
521
- };
218
+ readonly one: "Filing {count} file";
219
+ readonly other: "Filing {count} files";
220
+ };
221
+ readonly filmSetup: "Setting up the folder for the film";
222
+ readonly filmClient: "{client} is working on the film – this usually takes 10–40 minutes.";
223
+ readonly filmTask: "On the film: {task}";
224
+ readonly filmLooks: "Looking at frames of the film";
225
+ readonly filmFix: "The film didn’t render – Claude Code is fixing it";
226
+ readonly filmResume: "Picking the film up where it stopped";
227
+ readonly wizardUnavailable: "This wizard isn’t available right now.";
228
+ readonly wizardLimit: "This wizard has reached its limit for today. Try again tomorrow.";
229
+ readonly confirmHuman: "Confirm that you’re a person.";
230
+ readonly tooManyRuns: "You’ve started a lot of runs just now. Try again in an hour.";
231
+ readonly runOver: "The run is over.";
232
+ readonly runBusy: "The wizard is working right now.";
233
+ readonly pageOutdated: "This page is out of date.";
234
+ readonly noStepBefore: "There is no step before this one.";
235
+ readonly checkFields: "Check the marked fields.";
236
+ readonly talkOff: "Live conversations aren’t turned on for this wizard.";
237
+ readonly talkKeyRefused: "The conversation couldn’t start: the OpenAI API key was refused.";
238
+ readonly talkFailed: "The conversation couldn’t start ({status}).";
239
+ readonly talkNoSecret: "The conversation couldn’t start: no access key came back.";
240
+ readonly tryLater: "Try again later.";
241
+ readonly recordingTooLarge: "The recording can be 10 MB at most.";
242
+ readonly fileTooLarge: "Choose a file of {mb} MB or less.";
243
+ readonly askClosed: "This question is no longer open.";
244
+ readonly noBrowser: "The wizard has no browser open right now.";
245
+ readonly notWaiting: "The wizard isn’t waiting for you right now.";
246
+ readonly pageActFailed: "That didn’t work on the page.";
247
+ readonly linkGone: "This link has expired or was withdrawn.";
248
+ readonly connected: "Connected. You can close this window.";
249
+ readonly connectFailed: "Connecting didn’t work. Try again.";
250
+ readonly connectCancelled: "Connecting was cancelled.";
251
+ readonly appleOff: "Apple Intelligence is turned off on this Mac. Turn it on in System Settings → Apple Intelligence & Siri.";
252
+ readonly appleLoading: "Apple is still loading the model for Apple Intelligence onto this Mac. Try again in a moment.";
253
+ readonly appleMissing: "The helper for Apple Intelligence (wizards-apple) is missing from this install.";
254
+ readonly appleOs: "Apple Intelligence needs macOS 26 or later.";
255
+ readonly appleDevice: "Apple Intelligence only works on a Mac with Apple silicon.";
256
+ readonly appleBusy: "Apple Intelligence isn’t taking more requests right now. Try again in a moment.";
257
+ readonly appleTooLong: "The text is too long for Apple Intelligence on this Mac (4,096 tokens for question and answer). Choose another model for this class under Settings → Models.";
258
+ readonly appleRefused: "Apple Intelligence turned the request down: Apple’s content rules don’t allow it.";
259
+ readonly appleLanguage: "Apple Intelligence doesn’t understand the language of this request.";
260
+ readonly appleFormat: "Apple Intelligence can’t answer in this format: {detail}";
261
+ readonly appleFailed: "Apple Intelligence: {detail}";
262
+ readonly appleNoFfmpeg: "Apple Intelligence can’t read {type}, and without ffmpeg the recording can’t be converted. Install ffmpeg or record as MP4 in the browser.";
263
+ readonly appleNotConverted: "Apple Intelligence couldn’t convert the recording: {detail}";
264
+ readonly connectorAlreadyExistsSpace: "The connector “{id}” already exists in this space.";
265
+ readonly connectorNotExist: "This connector doesn’t exist.";
266
+ readonly fieldMissing: "“{label}” is missing.";
267
+ readonly mailServerNotExist: "The mail server{host} doesn’t exist. Enter the IMAP server. For Gmail and Google Workspace, it’s imap.gmail.com.";
268
+ readonly mailServerNotResponding: "The mail server{host} isn’t responding. Check the IMAP server and port.";
269
+ readonly connectingNotWork: "Connecting didn’t work{host}: {detail}";
270
+ readonly connectEngentyAccountFirst: "Connect your engenty account first (Settings → Account). Then you can connect Google here.";
271
+ readonly engentyAccountNotReached: "Your engenty account can’t be reached right now. Try again later.";
272
+ readonly googleNoLongerAccepts: "Google no longer accepts this connection. Connect the account again.";
273
+ readonly googleNotConnectedThrough: "Google can’t be connected through your engenty account right now.";
274
+ readonly stepNeedsToolPlugin: "This step needs the tool “{id}”. The plugin “{plugin}” isn’t installed here.";
275
+ readonly clientNotSignedIn: "{name} isn’t signed in on this computer. Sign in under Settings → Models.";
276
+ readonly clientNotInstalled: "{name} isn’t installed on this computer. Install it under Settings → Models.";
277
+ readonly clientNoCredit: "The account {name} is signed in with has no credit or quota left.";
278
+ readonly anthropicAccountClaudeCode: "The Anthropic account Claude Code is signed in with has no credit. Sign Claude Code in with your subscription under Settings → Models.";
279
+ readonly chatgptAccountCodexSigned: "The ChatGPT account Codex is signed in with has used up its quota. Try again later or choose another client.";
280
+ readonly builtTerminalNotAvailable: "The built-in terminal isn’t available on this computer. Run the command in your own terminal.";
281
+ readonly terminalNoLongerExists: "This terminal no longer exists.";
282
+ readonly imageTypeNotReadable: "Images of type {mime} can’t be read (PNG, JPEG and WebP work).";
283
+ readonly fileNotReadable: "“{name}” ({mime}) can’t be read.";
284
+ readonly creditsNotSignedIn: "This is set to run on credits, but you’re not signed in to an account.";
285
+ readonly accountNoLongerSigned: "The account is no longer signed in. Sign in again under Settings → Account.";
286
+ readonly modelNotUsedYet: "The model “{ref}” can’t be used yet. Add an API key under Settings → Models, or sign in to an account.";
287
+ readonly noModelForImages: "No model is set up for images.";
288
+ readonly noModelForVideos: "No model is set up for videos.";
289
+ readonly noModelForSpeech: "No model is set up for speech.";
290
+ readonly noOpenaiApiKey: "No OpenAI API key is set for voice conversations (Settings → Models).";
291
+ readonly modelNotAvailableAccount: "This model isn’t available with your account.";
292
+ readonly accountNoModelSet: "Your account has no model set up for this.";
293
+ readonly claudeCodeMakesFilms: "Claude Code makes films on this computer, using your subscription. Set it up as an AI subscription under Settings → Models.";
294
+ readonly macNeedsFfmpegTranscribe: "This Mac needs ffmpeg to transcribe recordings from Chrome or Firefox (WebM, Ogg). Safari and the app don’t. Install ffmpeg, e.g. with “brew install ffmpeg”.";
295
+ readonly fieldRequired: "Required";
296
+ readonly chooseAtLeast: "Choose at least {min}";
297
+ readonly chooseAtMost: "At most {max} – remove some";
298
+ readonly enterNumber: "Enter a number";
299
+ readonly invalidChoice: "Invalid choice";
300
+ readonly timeNotOffered: "This time isn’t offered";
301
+ readonly notValidEmailAddress: "Not a valid email address";
302
+ readonly notValidUrl: "Not a valid URL";
303
+ readonly wizardRunOutCredits: "This wizard has run out of credits for now. Try again later.";
304
+ readonly providerCreditLow: "Your credit with the model provider isn’t enough for this (videos need a minimum balance there). Top up there and try again.";
305
+ readonly aiServiceBusyRight: "The AI service is busy right now. Try again in a moment.";
306
+ readonly stepTookTooLong: "The step took too long. Try again.";
307
+ readonly aiServiceNotReached: "The AI service can’t be reached right now. Try again later.";
308
+ readonly notAvailableNow: "That isn’t available here right now.";
309
+ readonly fileNotFound: "File not found";
310
+ readonly connectFirst: "Connect first";
311
+ readonly noEntriesStepWork: "There are no entries for this step to work on.";
312
+ readonly stepNotReturnResult: "The step didn’t return a result.";
313
+ readonly documentNotCreated: "The document couldn’t be created.";
314
+ readonly stepMissingSourcesImages: "This step is missing its sources (images or scenes).";
315
+ readonly noTextReadAloud: "There is no text to read aloud.";
316
+ readonly wizardStillErrors: "The wizard still has errors.";
317
+ readonly noLanguageModelSet: "No language model is set up here.";
318
+ readonly creditsUsedUp: "Your credits are used up.";
319
+ readonly chooseFile: "Choose a file.";
320
+ readonly pageNotReached: "The page can’t be reached.";
321
+ readonly unknownEntry: "Unknown entry.";
322
+ readonly chooseWizardFileMb: "Choose a wizard file ({PACKAGE_EXTENSION}) of 30 MB or less.";
323
+ readonly recordingMbMost: "The recording can be 10 MB at most.";
324
+ readonly onlyFinishedResultsShared: "Only finished results can be shared.";
325
+ readonly gradientFailed: "Couldn’t make a gradient from that. Try describing it differently.";
326
+ readonly onlyOneSpaceAllowed: "Only one space is allowed here.";
327
+ readonly mostSpaces: {
328
+ readonly one: "You can have at most {count} space here.";
329
+ readonly other: "You can have at most {count} spaces here.";
330
+ };
331
+ readonly twoEntriesSameKey: "Two entries have the same key.";
332
+ readonly notDeleteLastSpace: "You can’t delete the last space.";
333
+ readonly notFound: "This doesn’t exist or was deleted.";
334
+ readonly categoryNeedsName: "A category needs a name.";
335
+ readonly unknownCategoryType: "Unknown type “{type}”.";
336
+ readonly spaceMostCategories: {
337
+ readonly one: "A space can have at most {count} category.";
338
+ readonly other: "A space can have at most {count} categories.";
339
+ };
340
+ readonly categoryAlreadyExists: "The category “{name}” already exists.";
341
+ readonly onlyChoiceCategoriesValues: "Only choice categories have values.";
342
+ readonly onlyValuesOneCategory: "Only values of one category can be merged.";
343
+ readonly templateNeedsNewerVersion: "This template needs a newer version of engenty wizards. Update engenty wizards first.";
344
+ readonly chatNotExist: "This chat doesn’t exist.";
345
+ readonly unknownRunner: "There’s no runner “{unknown}” here.";
346
+ readonly leastOneRunnerStay: "At least one runner has to stay on.";
347
+ readonly linkOpenRunnerTurned: "The link has to open a runner that’s turned on.";
348
+ readonly jobNotExistAlready: "This job doesn’t exist or has already finished.";
349
+ readonly accountAlreadySpace: "This account already has a space here.";
350
+ readonly accountAlreadySpaces: {
351
+ readonly one: "This account already has {count} space here.";
352
+ readonly other: "This account already has {count} spaces here.";
353
+ };
354
+ readonly roomMostPublishedWizards: {
355
+ readonly one: "There’s room for at most {count} published wizard here.";
356
+ readonly other: "There’s room for at most {count} published wizards here.";
357
+ };
358
+ readonly spaceIdAlreadyExists: "A space with this ID already exists here and didn’t come from your computer.";
359
+ readonly wizardIdAlreadyBelongs: "A wizard with this ID already belongs to another space here.";
360
+ readonly idAlreadyUse: "This ID is already in use here.";
361
+ readonly wizardNotSpace: "This wizard isn’t in the space.";
362
+ readonly invalidColumns: "Invalid columns.";
363
+ readonly spaceMostTables: {
364
+ readonly one: "A space can have at most {count} table.";
365
+ readonly other: "A space can have at most {count} tables.";
366
+ };
367
+ readonly tableBelongsOneWizard: "This table belongs to one of the wizard’s lists. Its columns come from the wizard.";
368
+ readonly entryAlreadyExists: "This entry already exists.";
369
+ readonly tableMostRows: {
370
+ readonly one: "A table can have at most {count} row.";
371
+ readonly other: "A table can have at most {count} rows.";
372
+ };
373
+ readonly spaceMostPages: {
374
+ readonly one: "A space can have at most {count} page.";
375
+ readonly other: "A space can have at most {count} pages.";
376
+ };
377
+ readonly pageNotSubpages: "This page can’t have subpages.";
378
+ readonly pageNotOwnSubpage: "A page can’t be its own subpage.";
379
+ readonly pageNeedsTitle: "A page needs a title.";
380
+ readonly unknownSpace: "There’s no space “{space}”.";
381
+ readonly noParentPage: "There’s no page with the key “{parent}” to put this page under.";
382
+ readonly onlyTeamAdmins: "Only team admins can do that. As a member, you can edit the wizards that already exist.";
383
+ readonly spaceEditedLocally: "You edit this space in engenty wizards on your computer, not here.";
384
+ readonly wizardsRunOncePublished: "Wizards run here once you publish them in engenty wizards on your computer. You build and edit them there.";
385
+ readonly logoImagePngSvg: "A logo is an image (PNG, SVG, JPEG, WebP).";
386
+ readonly patternImageSvgPng: "A pattern is an image (SVG, PNG, JPEG, WebP).";
387
+ readonly filesGoHere: "Images, videos, audio, PDFs, fonts, Lottie and 3D models go here. Texts to look things up in go under knowledge.";
388
+ readonly addressNotReached: "The address can’t be reached.";
389
+ readonly addressResponded: "The address responded with {status}.";
390
+ readonly addressLeadsWebPage: "The address leads to a web page, not an image.";
391
+ readonly addressFileTooLarge: "The file is too large.";
392
+ readonly onlyDocumentsIndex: "Only documents are in the index.";
393
+ readonly emptyTooLargeDocument: "“{name}” is empty or too large for a document.";
394
+ readonly spaceMostDocuments: {
395
+ readonly one: "A space can have at most {count} document.";
396
+ readonly other: "A space can have at most {count} documents.";
397
+ };
398
+ readonly accountSignedOut: "The account is signed out. Sign in again.";
399
+ readonly cloudNotReachedRight: "The cloud can’t be reached right now.";
400
+ readonly publishWizardFirst: "Publish the wizard first.";
401
+ readonly wizardJsonUnreadable: "This isn’t a wizard file: its wizard.json can’t be read.";
402
+ readonly wizardFileComesNewer: "This wizard file comes from a newer version, or it’s damaged. Update engenty wizards or export the wizard again.";
403
+ readonly fileOver5Mb: "{name} is larger than 5 MB.";
404
+ readonly wizardFileTooLarge: "The wizard file is too large: a workspace holds at most 200 files and 25 MB.";
405
+ readonly wizardFileNotOpened: "The wizard file can’t be opened. Export the wizard again and try once more.";
406
+ readonly wizardJsonMissing: "This isn’t a wizard file: wizard.json is missing.";
407
+ readonly notValidFilePath: "“{name}” isn’t a valid file path.";
408
+ readonly workspaceWizardFileLarger: "The workspace in the wizard file is larger than 25 MB.";
409
+ readonly unknownTemplate: "There’s no template “{starterId}”.";
410
+ readonly wizardChangedMeantime: "The wizard was changed in the meantime.";
411
+ readonly valueNotExist: "This value doesn’t exist.";
412
+ readonly nothingFiledUnderValue: "Nothing is filed under this value yet.";
413
+ readonly filmNotRenderedNeeds: "The film couldn’t be rendered. It needs ffmpeg and a timeline in the widget.";
414
+ readonly signInRefused: "The sign-in was refused{host}. Are the address and (app) password right? Gmail and Google Workspace need an app password and IMAP turned on.{answer}";
415
+ readonly serverSaid: " The server said: {answer}";
416
+ readonly viaAccountFailed: "Connecting through your engenty account didn’t work ({code}).";
417
+ readonly pluginInvalidInput: "“{id}” got invalid input: {path} – {problem}";
418
+ readonly filmClientStopped: "{name} stopped working on the film: {detail}. The work is saved. A new try carries on from there.";
419
+ readonly filmWorkSaved: "{problem} The work is saved. A new try carries on from there.";
420
+ readonly filmRenderFailed: "The film couldn’t be rendered: {detail}";
421
+ readonly commandNotStarted: "The command couldn’t start: {detail}";
422
+ readonly providerKeyMissing: "{provider} is chosen for {makes}, but no API key is set.";
423
+ readonly noModelFor: "No model is set up for {makes}.";
424
+ readonly noApiKeyFor: "No API key is set for {provider}.";
425
+ readonly freeTier: "Your AI Gateway key is on Vercel’s free tier, which doesn’t include {model}. Top up at Vercel ({url}) or choose another model under Settings → Models.";
426
+ readonly thisModel: "this model";
427
+ readonly quoted: "“{text}”";
428
+ readonly viewErrors: "The view has errors: {detail}";
429
+ readonly blockedSteps: "{steps}: {problem}";
430
+ readonly joined: "{first} {second}";
431
+ readonly stepFailed: "This step failed: {detail}";
432
+ readonly answersMissing: "Answers are missing or don’t fit: {answers}";
433
+ readonly fieldError: "{field} – {message}";
434
+ readonly templateNeedsPlugins: {
435
+ readonly one: "This template needs the plugin {plugins}: included with Pro on engenty.ai.";
436
+ readonly other: "This template needs the plugins {plugins}: included with Pro on engenty.ai.";
437
+ };
438
+ readonly pageMostChars: {
439
+ readonly one: "A page can have at most {count} character.";
440
+ readonly other: "A page can have at most {count} characters.";
441
+ };
442
+ readonly chooseFileUpTo: "Choose a file of {mb} MB or less.";
443
+ readonly roomMostFiles: {
444
+ readonly one: "There’s room for at most {count} file here.";
445
+ readonly other: "There’s room for at most {count} files here.";
446
+ };
447
+ readonly makesText: "text";
448
+ readonly makesImages: "images";
449
+ readonly makesVideos: "videos";
450
+ readonly makesSpeech: "speech";
451
+ readonly makesVoiceNotes: "voice notes";
522
452
  };
523
- export type RunNoteCode = keyof typeof RUN_NOTES;
453
+ export type RunNoteCode = keyof typeof NOTES_EN;
454
+ export declare const RUN_NOTES: Texts<RunNoteCode>;
455
+ /** What fills a note's gaps: words, numbers, other notes (said in the same language), lists. */
456
+ export type NoteGap = Gap | RunNote | readonly NoteGap[];
524
457
  /** A line of `RUN_NOTES` with what goes into its gaps. */
525
458
  export interface RunNote {
526
459
  code: RunNoteCode;
527
- params?: Record<string, string | number>;
460
+ params?: Record<string, NoteGap | undefined>;
528
461
  }
529
462
  /** What the person reads: plain words, or a note that has a line for each language. */
530
463
  export type Said = string | RunNote;
464
+ /** A note: a line of `RUN_NOTES`, said in whichever language the reader reads. */
465
+ export declare function note(code: RunNoteCode, params?: Record<string, NoteGap | undefined>): RunNote;
531
466
  /** What is said, in a language. */
532
- export declare function saidText(said: Said, lang: "de" | "en"): string;
533
- /** Free text in both languages, carried as a note: a runner or a response picks the line. */
534
- export declare function bilingual(de: string, en: string): RunNote;
535
- /** A note in a language, its gaps filled. */
536
- export declare function noteText(note: RunNote, lang: "de" | "en"): string;
467
+ export declare function saidText(said: Said, lang: Lang): string;
468
+ /** A note in a language, its gaps filled; English where the language lacks the line. */
469
+ export declare function noteText(note: RunNote, lang: Lang): string;
537
470
  export interface RunEvent {
538
471
  id: number;
539
472
  at: string;
@@ -552,7 +485,7 @@ export interface RunView {
552
485
  mode: "test" | "live";
553
486
  wizard: Pick<WizardDefinition, "title" | "description" | "avatar" | "intro">;
554
487
  /** The language the wizard speaks: what is read aloud, and in which voice. */
555
- lang: "de" | "en";
488
+ lang: Lang;
556
489
  /** A live conversation can be started on this run: the runtime has a model for it and the wizard has live voice or video on (always in a test). */
557
490
  talk: boolean;
558
491
  /** The step the person is on (interactive) or the one running. */