wizards 0.6.1 → 0.6.2
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 +1 -1
- package/apps/runtime/dist/docs/dev/wizard-format.md +6 -4
- package/apps/runtime/dist/engine/runner.js +5 -5
- package/apps/runtime/dist/engine/steps.js +2 -2
- package/apps/runtime/dist/engine/template.js +2 -2
- package/apps/runtime/dist/media/conversation.js +2 -2
- package/apps/runtime/dist/plugins/runs.js +4 -4
- package/apps/runtime/dist/routes/runs.js +4 -2
- package/apps/runtime/dist/services/api.js +2 -2
- package/apps/runtime/dist/services/runners.js +2 -2
- package/apps/runtime/dist/services/translations.js +7 -4
- package/apps/web/dist/assets/{AboutDialog-CTuI-l3p.js → AboutDialog-BrfbtjmR.js} +1 -1
- package/apps/web/dist/assets/{ChangelogDialog-jQk_bQpP.js → ChangelogDialog-BRiSYyIn.js} +1 -1
- package/apps/web/dist/assets/ChatView-_dYvuuUY.js +10 -0
- package/apps/web/dist/assets/EditorPage-CkRjTRMg.js +3 -0
- package/apps/web/dist/assets/{FlowPreview-DA0sHtr7.js → FlowPreview-CUOEzoeJ.js} +1 -1
- package/apps/web/dist/assets/{Harness-DmYkwU4x.js → Harness-D3kTVsF5.js} +1 -1
- package/apps/web/dist/assets/{NewWizardChannels-BLS9sKhT.js → NewWizardChannels-C3PGe_Zd.js} +1 -1
- package/apps/web/dist/assets/NewWizardPage-B3ol4K43.js +7 -0
- package/apps/web/dist/assets/{OnboardingPage-CREvCCdX.js → OnboardingPage-pOPB5TVZ.js} +1 -1
- package/apps/web/dist/assets/ProjectPage-Boyptzz_.js +1 -0
- package/apps/web/dist/assets/PublicRunner-DcETj9_E.js +1 -0
- package/apps/web/dist/assets/{ReadOnly-b7TjjRAk.js → ReadOnly-CCxZvYrT.js} +1 -1
- package/apps/web/dist/assets/RunDrawer-hwruVTDG.js +4 -0
- package/apps/web/dist/assets/{RunnerView-CLfZzbKn.js → RunnerView-pKik3sdE.js} +1 -1
- package/apps/web/dist/assets/SettingsPage-BOe6NgFg.js +1 -0
- package/apps/web/dist/assets/SetupPage-81QxPnfE.js +1 -0
- package/apps/web/dist/assets/{SharePage-B21QI97K.js → SharePage-CZQqp5JM.js} +1 -1
- package/apps/web/dist/assets/changelog-CtyrKHAc.js +1 -0
- package/apps/web/dist/assets/{esm-DqRvG-PU.js → esm-D4pSRQgT.js} +1 -1
- package/apps/web/dist/assets/index-DnIvQFIg.js +14 -0
- package/apps/web/dist/assets/{lock-D_KjsGfU.js → lock-DYnHCyRg.js} +1 -1
- package/apps/web/dist/assets/{phone-YRxkPQk6.js → phone-DJawY1RF.js} +1 -1
- package/apps/web/dist/assets/{settings-menu-CQgehwEX.js → settings-menu-B_-_EAmK.js} +1 -1
- package/apps/web/dist/assets/ui-rh8TaWvT.js +137 -0
- package/apps/web/dist/assets/{upload-DDo14e2p.js → upload-DL6NRa4h.js} +1 -1
- package/apps/web/dist/index.html +2 -2
- package/apps/web/dist/mcp/flow.html +1 -1
- package/node_modules/@engenty-wizards/shared/dist/definition.d.ts +18 -7
- package/node_modules/@engenty-wizards/shared/dist/definition.js +44 -4
- package/node_modules/@engenty-wizards/shared/dist/run.d.ts +4 -4
- package/package.json +1 -1
- package/apps/web/dist/assets/ChatView-9TLi0B7K.js +0 -10
- package/apps/web/dist/assets/EditorPage-BVrzOfF3.js +0 -3
- package/apps/web/dist/assets/NewWizardPage-DWYZYiBF.js +0 -7
- package/apps/web/dist/assets/ProjectPage-BQkd55xR.js +0 -1
- package/apps/web/dist/assets/PublicRunner-sOlOC0zD.js +0 -1
- package/apps/web/dist/assets/RunDrawer-BPIVaan7.js +0 -4
- package/apps/web/dist/assets/SettingsPage-BO6TPmoj.js +0 -1
- package/apps/web/dist/assets/SetupPage-DlJHBYWH.js +0 -1
- package/apps/web/dist/assets/changelog-DeSoCsai.js +0 -1
- package/apps/web/dist/assets/index-CAUeJXCg.js +0 -14
- package/apps/web/dist/assets/ui-DDUCc_4v.js +0 -137
|
@@ -13,7 +13,7 @@ type Wizard = {
|
|
|
13
13
|
description: string // one sentence
|
|
14
14
|
avatar: "round"|"drop"|"dome"|"flame"|"oval"|"bean"|"pebble"|"sprout"|"tower"|"wedge" // the engenty mascot shown to end users
|
|
15
15
|
intro?: string // one friendly sentence above the first page
|
|
16
|
-
lang?:
|
|
16
|
+
lang?: string // two-letter code of the language the wizard's texts are in ("en", "de", "it", "fr") — ALWAYS set it to the language you write them in
|
|
17
17
|
lists?: List[] // tabular data the wizard KEEPS between runs — separately for each person who runs it, or for all with "shared"
|
|
18
18
|
connections?: Connection[] // accounts the PERSON connects during a run (their mailbox); kept for their next run
|
|
19
19
|
steps: Step[] // run top to bottom; the LAST step is always a "result"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: The wizard format
|
|
3
3
|
description: A wizard as JSON and as a .wizard file, its JSON Schema, and checking it with wizards validate.
|
|
4
|
-
version: 0.5.
|
|
4
|
+
version: 0.5.13
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
A wizard is one JSON document, its **definition**. The studio exports it as a `.wizard` file
|
|
@@ -30,9 +30,11 @@ tool may read and write wizards.
|
|
|
30
30
|
lists the step types and their fields. The studio’s MCP tool `get_authoring_guide` explains them
|
|
31
31
|
with a complete example.
|
|
32
32
|
|
|
33
|
-
`lang` is the language the wizard speaks to people
|
|
34
|
-
and
|
|
35
|
-
|
|
33
|
+
`lang` is the language the wizard speaks to people, as a two-letter code: `en`, `de`, `it`, `fr`
|
|
34
|
+
and so on. The schema checks the shape of the code; `wizards validate` and the studio check that
|
|
35
|
+
it names a real language. It sets the runner’s own words and how numbers and dates are written.
|
|
36
|
+
Without it, the language is read from the wizard’s own words, and English is the default where
|
|
37
|
+
they are not clearly German.
|
|
36
38
|
|
|
37
39
|
`version` is the definition’s version. It changes only with a breaking change; the schemas of
|
|
38
40
|
each version stay online in their own folder (`/schema/v1/`, `/schema/v2/`, …).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { marginOf, } from "@engenty-wizards/shared/decision";
|
|
2
|
-
import { branchValues, cardsFromData, conditionsOf, dataRef, followRules, formatsFor, isDecidedField, LIST_FORMATS, listRef, loopKey, MAX_SHOWN_FIELDS, optionsFromData, otherwiseOf, pageNeeds, whenHolds, wizardLang, } from "@engenty-wizards/shared/definition";
|
|
2
|
+
import { branchValues, cardsFromData, conditionsOf, dataRef, followRules, formatsFor, isDecidedField, LIST_FORMATS, listRef, loopKey, MAX_SHOWN_FIELDS, optionsFromData, otherwiseOf, pageNeeds, textLang, whenHolds, wizardLang, } from "@engenty-wizards/shared/definition";
|
|
3
3
|
import { note, saidText, } from "@engenty-wizards/shared/run";
|
|
4
4
|
import { CONVERSATION_RUNNERS, DEFAULT_RUNNER_SETTINGS } from "@engenty-wizards/shared/runners";
|
|
5
5
|
import { fitData } from "@engenty-wizards/shared/shape";
|
|
@@ -140,7 +140,7 @@ function friendly(err) {
|
|
|
140
140
|
*/
|
|
141
141
|
async function failRun(run, stepId, err) {
|
|
142
142
|
const said = noteOf(err) ?? friendly(err);
|
|
143
|
-
const message = saidText(said, wizardLang(run.definition));
|
|
143
|
+
const message = saidText(said, textLang(wizardLang(run.definition)));
|
|
144
144
|
await emitEvent(run.id, stepId, "error", said);
|
|
145
145
|
await updateRun(run.id, { status: "failed", error: message });
|
|
146
146
|
}
|
|
@@ -229,7 +229,7 @@ async function take(runId, tenant) {
|
|
|
229
229
|
console.error(`[run ${runId}]`, err);
|
|
230
230
|
await withTenant(tenant, async () => {
|
|
231
231
|
const run = await loadRun(runId);
|
|
232
|
-
const lang = run ? wizardLang(run.definition) : "en";
|
|
232
|
+
const lang = run ? textLang(wizardLang(run.definition)) : "en";
|
|
233
233
|
await updateRun(runId, { status: "failed", error: saidText(friendly(err), lang) });
|
|
234
234
|
}).catch((e) => console.error(`[run ${runId}] marking it failed:`, e));
|
|
235
235
|
})
|
|
@@ -655,7 +655,7 @@ export async function submitPage(runId, stepId, input) {
|
|
|
655
655
|
throw new RunInputError(errors);
|
|
656
656
|
}
|
|
657
657
|
const connections = step.fields.some((f) => f.kind === "connection")
|
|
658
|
-
? await connectionViews(run.definition.connections ?? [], scopeOf(run), await projectIdOf(run), wizardLang(run.definition))
|
|
658
|
+
? await connectionViews(run.definition.connections ?? [], scopeOf(run), await projectIdOf(run), textLang(wizardLang(run.definition)))
|
|
659
659
|
: [];
|
|
660
660
|
for (const field of step.fields) {
|
|
661
661
|
if (field.kind === "image" || field.kind === "file") {
|
|
@@ -961,7 +961,7 @@ export async function runView(run, brand) {
|
|
|
961
961
|
ask: run.status === "running" ? run.ask : null,
|
|
962
962
|
lists,
|
|
963
963
|
connections: step?.type === "page" && step.fields.some((f) => f.kind === "connection")
|
|
964
|
-
? await connectionViews(def.connections ?? [], scopeOf(run), await projectIdOf(run), wizardLang(def))
|
|
964
|
+
? await connectionViews(def.connections ?? [], scopeOf(run), await projectIdOf(run), textLang(wizardLang(def)))
|
|
965
965
|
: [],
|
|
966
966
|
keeps: Boolean(def.lists?.length || def.connections?.length),
|
|
967
967
|
shareUrl: run.shareToken ? `${env.publicUrl}/s/${run.shareToken}` : null,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { pOf } from "@engenty-wizards/shared/decision";
|
|
2
|
-
import { allFields, dataRef, isDecisionStep,
|
|
2
|
+
import { allFields, dataRef, isDecisionStep, langNameEn, localeOf, stepShape, templateRefs, wizardLang, } from "@engenty-wizards/shared/definition";
|
|
3
3
|
import { mainLogo, ruleLines, runTheme } from "@engenty-wizards/shared/projects";
|
|
4
4
|
import { note as runNote } from "@engenty-wizards/shared/run";
|
|
5
5
|
import { fitData, labelOf, recordsOf, shapeJsonSchema, shapeLines, shapeZod, titleKey, } from "@engenty-wizards/shared/shape";
|
|
@@ -24,7 +24,7 @@ import { answersAsText, assetSectionLine, colorLine, factLines, logoSectionLine,
|
|
|
24
24
|
import { StepError } from "./types.js";
|
|
25
25
|
/** Today's date as the wizard's people write it. */
|
|
26
26
|
function today(ctx) {
|
|
27
|
-
return new Date().toLocaleDateString(
|
|
27
|
+
return new Date().toLocaleDateString(localeOf(wizardLang(ctx.def)), {
|
|
28
28
|
year: "numeric",
|
|
29
29
|
month: "long",
|
|
30
30
|
day: "numeric",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { allFields, isAudioValue, isLocationValue, itemsTotals,
|
|
1
|
+
import { allFields, isAudioValue, isLocationValue, itemsTotals, localeOf, locationText, wizardLang, } from "@engenty-wizards/shared/definition";
|
|
2
2
|
import { fontLicenseWords, gradientCss, textStyleLine, } from "@engenty-wizards/shared/projects";
|
|
3
3
|
import { listAsMarkdown } from "@engenty-wizards/shared/store";
|
|
4
4
|
const TEMPLATE_RE = /\{\{\s*([^}]+?)\s*\}\}/g;
|
|
@@ -12,7 +12,7 @@ function money(n, currency, locale) {
|
|
|
12
12
|
}
|
|
13
13
|
/** Line items as a Markdown table with their totals — what a model needs to write a document. */
|
|
14
14
|
export function itemsAsMarkdown(field, value, values, lang = "en") {
|
|
15
|
-
const locale =
|
|
15
|
+
const locale = localeOf(lang);
|
|
16
16
|
const totals = itemsTotals(field, value, values);
|
|
17
17
|
const cols = field.columns ?? [];
|
|
18
18
|
if (!totals.rows.length) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { langNameEn } from "@engenty-wizards/shared/definition";
|
|
2
2
|
import { NotedError } from "../model-errors.js";
|
|
3
3
|
import { conversationAccess } from "../models.js";
|
|
4
4
|
/**
|
|
@@ -105,7 +105,7 @@ export function conversationInstructions(view) {
|
|
|
105
105
|
.join(" ");
|
|
106
106
|
const rules = [
|
|
107
107
|
"You hold a conversation that fills in a wizard step by step. The person also sees the wizard on the screen.",
|
|
108
|
-
`Speak ${
|
|
108
|
+
`Speak ${langNameEn(view.lang)} (${view.lang}), short and friendly, as on the phone. One sentence, then the next question.`,
|
|
109
109
|
"Ask one field at a time, in the order of the state. After each answer call set_field. When every field you can fill by voice is answered, call submit_page.",
|
|
110
110
|
"For a choice, name the options (at most four at a time) and pass exactly one of them on.",
|
|
111
111
|
"Read e-mail addresses, links and numbers back before passing them on.",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import { LANGS, wizardLang } from "@engenty-wizards/shared/definition";
|
|
2
|
+
import { LANGS, textLang, wizardLang } from "@engenty-wizards/shared/definition";
|
|
3
3
|
import { noteText } from "@engenty-wizards/shared/run";
|
|
4
4
|
import { and, asc, eq, inArray, isNotNull } from "drizzle-orm";
|
|
5
5
|
import { db, schema, withTenant } from "../db/client.js";
|
|
@@ -64,7 +64,7 @@ export function runsApiFor(pluginId) {
|
|
|
64
64
|
runner: input.runner ?? pluginId,
|
|
65
65
|
}).catch((err) => {
|
|
66
66
|
if (err instanceof ModelUnavailableError) {
|
|
67
|
-
throw new ServiceError("refused", errorText(err, wizardLang(version.definition)));
|
|
67
|
+
throw new ServiceError("refused", errorText(err, textLang(wizardLang(version.definition))));
|
|
68
68
|
}
|
|
69
69
|
if (err instanceof NoCreditsError) {
|
|
70
70
|
throw new ServiceError("no_credits", noteText({ code: "wizardRunOutCredits" }, wizardLang(version.definition)));
|
|
@@ -112,7 +112,7 @@ export function runsApiFor(pluginId) {
|
|
|
112
112
|
wizardId: w.id,
|
|
113
113
|
token: w.shareToken,
|
|
114
114
|
title: version.definition.title,
|
|
115
|
-
lang: wizardLang(version.definition),
|
|
115
|
+
lang: textLang(wizardLang(version.definition)),
|
|
116
116
|
},
|
|
117
117
|
]
|
|
118
118
|
: [];
|
|
@@ -200,7 +200,7 @@ export function runsApiFor(pluginId) {
|
|
|
200
200
|
call: { runId: run.id },
|
|
201
201
|
}).catch((err) => {
|
|
202
202
|
if (err instanceof ModelUnavailableError) {
|
|
203
|
-
throw new ServiceError("refused", errorText(err, wizardLang(run.definition)));
|
|
203
|
+
throw new ServiceError("refused", errorText(err, textLang(wizardLang(run.definition))));
|
|
204
204
|
}
|
|
205
205
|
throw err;
|
|
206
206
|
});
|
|
@@ -302,14 +302,16 @@ export const publicRoutes = new Hono()
|
|
|
302
302
|
throw err;
|
|
303
303
|
}
|
|
304
304
|
})
|
|
305
|
-
// The runner's own words in a language outside LANGS
|
|
305
|
+
// The runner's own words in a language outside LANGS (the wizard's own or a viewer's), booked
|
|
306
|
+
// to this wizard's owner when new.
|
|
306
307
|
.get("/wizards/:token/texts/:lang", async (c) => {
|
|
307
308
|
const found = await publishedWizard(c.req.param("token"));
|
|
308
309
|
const lang = c.req.param("lang");
|
|
309
310
|
if (!found || !isLangCode(lang) || isLang(lang)) {
|
|
310
311
|
return c.json(notFoundAnswer(c), 404);
|
|
311
312
|
}
|
|
312
|
-
|
|
313
|
+
// The wizard's own language needs the runner's words too, translation offered or not.
|
|
314
|
+
if (lang !== wizardLang(found.def) && !wantsTranslation(found.w, found.def, lang)) {
|
|
313
315
|
return refuse(c, { code: "translationOff" }, 403);
|
|
314
316
|
}
|
|
315
317
|
try {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { wizardLang, } from "@engenty-wizards/shared/definition";
|
|
1
|
+
import { textLang, wizardLang, } from "@engenty-wizards/shared/definition";
|
|
2
2
|
import { standaloneEntry } from "@engenty-wizards/shared/fit";
|
|
3
3
|
import { pluginsOf } from "@engenty-wizards/shared/marketplace";
|
|
4
4
|
import { noteText } from "@engenty-wizards/shared/run";
|
|
@@ -141,7 +141,7 @@ function answerText(field, value, lang) {
|
|
|
141
141
|
/** What the person answered on the run's pages, by the fields' labels, in the order asked. */
|
|
142
142
|
function answersOf(run) {
|
|
143
143
|
const answers = [];
|
|
144
|
-
const lang = wizardLang(run.definition);
|
|
144
|
+
const lang = textLang(wizardLang(run.definition));
|
|
145
145
|
for (const step of run.definition.steps) {
|
|
146
146
|
if (step.type !== "page") {
|
|
147
147
|
continue;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { wizardLang } from "@engenty-wizards/shared/definition";
|
|
1
|
+
import { textLang, wizardLang } from "@engenty-wizards/shared/definition";
|
|
2
2
|
import { note } from "@engenty-wizards/shared/run";
|
|
3
3
|
import { BUILT_IN_RUNNERS, CONVERSATION_RUNNERS, DEFAULT_RUNNER, DEFAULT_RUNNER_SETTINGS, runnerFit, } from "@engenty-wizards/shared/runners";
|
|
4
4
|
import { env } from "../env.js";
|
|
@@ -164,7 +164,7 @@ export async function servePageRunner(w, def, runnerId, rest, request) {
|
|
|
164
164
|
export async function publicRunners(w, def) {
|
|
165
165
|
const available = await runnersOf();
|
|
166
166
|
const settings = runnerSettingsOf(w, available);
|
|
167
|
-
const lang = wizardLang(def);
|
|
167
|
+
const lang = textLang(wizardLang(def));
|
|
168
168
|
return settings.enabled
|
|
169
169
|
.map((id) => available.find((r) => r.id === id))
|
|
170
170
|
.filter((r) => Boolean(r) && !r?.problem)
|
|
@@ -48,11 +48,14 @@ async function translate(texts, opts) {
|
|
|
48
48
|
chunks.push(keys.slice(i, i + size));
|
|
49
49
|
}
|
|
50
50
|
const model = await textModel("standard", { effort: "low" });
|
|
51
|
+
// The model sees short keys (t0, t1, …): some providers allow only letters, digits, "_", "."
|
|
52
|
+
// and "-" in a schema's property names, and a text's own key may hold anything.
|
|
51
53
|
const call = async (chunk) => {
|
|
54
|
+
const ids = chunk.map((_, i) => `t${i}`);
|
|
52
55
|
const schema = jsonSchema({
|
|
53
56
|
type: "object",
|
|
54
|
-
properties: Object.fromEntries(
|
|
55
|
-
required:
|
|
57
|
+
properties: Object.fromEntries(ids.map((id) => [id, { type: "string" }])),
|
|
58
|
+
required: ids,
|
|
56
59
|
additionalProperties: false,
|
|
57
60
|
});
|
|
58
61
|
const result = await generateText({
|
|
@@ -67,9 +70,9 @@ async function translate(texts, opts) {
|
|
|
67
70
|
]
|
|
68
71
|
.filter(Boolean)
|
|
69
72
|
.join("\n"),
|
|
70
|
-
prompt: JSON.stringify(Object.fromEntries(chunk.map((k) => [
|
|
73
|
+
prompt: JSON.stringify(Object.fromEntries(chunk.map((k, i) => [ids[i], texts[k]])), null, 1),
|
|
71
74
|
});
|
|
72
|
-
return result.output;
|
|
75
|
+
return Object.fromEntries(chunk.map((k, i) => [k, result.output[ids[i]]]));
|
|
73
76
|
};
|
|
74
77
|
const out = {};
|
|
75
78
|
const answers = await Promise.all(chunks.map(call));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-BNakU3Ej.js";import{$t as r,Ft as i,
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-BNakU3Ej.js";import{$t as r,Ft as i,It as a,Kt as o,Nt as s,Pt as c,Vt as l,Wt as u,hr as d,lr as f,zn as p}from"./ui-rh8TaWvT.js";import{t as m}from"./preload-helper-CNEI7N0N.js";import{G as h,U as g,W as _,bt as v}from"./index-DnIvQFIg.js";import{c as y,f as b}from"./settings-menu-B_-_EAmK.js";import{ReleaseNotes as x,loadReleases as S,releaseDate as C,releaseLabel as w}from"./ChangelogDialog-BRiSYyIn.js";var T=e(t(),1),E=[{name:`engenty wizards`,description:`credit.engenty-wizards`,homepage:`https://github.com/engenty/wizards`,license:`FSL-1.1-MIT`},{name:`engenty`,description:`credit.engenty`,homepage:`https://github.com/engenty/engenty`,license:`FSL-1.1-MIT`}],D=[{name:`Mastra`,description:`credit.mastra`,homepage:`https://github.com/mastra-ai/mastra`,license:`Apache-2.0`},{name:`AI SDK`,description:`credit.ai-sdk`,homepage:`https://github.com/vercel/ai`,license:`Apache-2.0`},{name:`Model Context Protocol`,description:`credit.model-context-protocol`,homepage:`https://github.com/modelcontextprotocol/typescript-sdk`,license:`MIT`},{name:`Hono`,description:`credit.hono`,homepage:`https://github.com/honojs/hono`,license:`MIT`},{name:`Drizzle ORM`,description:`credit.drizzle-orm`,homepage:`https://github.com/drizzle-team/drizzle-orm`,license:`Apache-2.0`},{name:`libSQL`,description:`credit.libsql`,homepage:`https://github.com/tursodatabase/libsql`,license:`MIT`},{name:`Playwright`,description:`credit.playwright`,homepage:`https://github.com/microsoft/playwright`,license:`Apache-2.0`},{name:`agentOS`,description:`credit.agentos`,homepage:`https://github.com/rivet-dev/agentos`,license:`Apache-2.0`},{name:`React`,description:`credit.react`,homepage:`https://github.com/facebook/react`,license:`MIT`},{name:`Vite`,description:`credit.vite`,homepage:`https://github.com/vitejs/vite`,license:`MIT`},{name:`Tailwind CSS`,description:`credit.tailwind-css`,homepage:`https://github.com/tailwindlabs/tailwindcss`,license:`MIT`},{name:`React Flow`,description:`credit.react-flow`,homepage:`https://github.com/xyflow/xyflow`,license:`MIT`},{name:`TanStack Query`,description:`credit.tanstack-query`,homepage:`https://github.com/TanStack/query`,license:`MIT`},{name:`xterm.js`,description:`credit.xterm-js`,homepage:`https://github.com/xtermjs/xterm.js`,license:`MIT`},{name:`Lucide`,description:`credit.lucide`,homepage:`https://github.com/lucide-icons/lucide`,license:`ISC`},{name:`Geist & Geist Mono`,description:`credit.geist-geist-mono`,homepage:`https://github.com/vercel/geist-font`,license:`OFL-1.1`},{name:`Space Grotesk`,description:`credit.space-grotesk`,homepage:`https://github.com/floriankarsten/space-grotesk`,license:`OFL-1.1`},{name:`git-cliff`,description:`credit.git-cliff`,homepage:`https://github.com/orhun/git-cliff`,license:`MIT OR Apache-2.0`}],O=e(n(),1),k=(e,...t)=>t.some(t=>t?.toLowerCase().includes(e));function A({name:e,homepage:t,version:n,license:r,description:i}){return(0,O.jsxs)(`li`,{className:`py-2.5`,children:[(0,O.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2.5 gap-y-0.5`,children:[t?(0,O.jsxs)(`a`,{href:t,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 font-medium text-[0.875rem] text-ink underline-offset-4 hover:underline`,children:[e,(0,O.jsx)(f,{"aria-hidden":!0,className:`size-3 text-ink-4`})]}):(0,O.jsx)(`span`,{className:`font-medium text-[0.875rem] text-ink`,children:e}),n?(0,O.jsx)(`span`,{className:`text-[0.75rem] text-ink-3 tabular-nums`,children:n}):null,(0,O.jsx)(`span`,{className:`text-[0.75rem] text-ink-3`,children:r})]}),i?(0,O.jsx)(`p`,{className:`mt-0.5 text-[0.8125rem] text-ink-3`,children:i}):null]})}function j({title:e,hint:t,children:n}){return(0,O.jsxs)(`section`,{className:`mt-6`,children:[(0,O.jsx)(`h3`,{className:`border-border-soft border-b pb-2 font-display font-semibold text-[1rem]`,children:e}),t?(0,O.jsx)(`p`,{className:`mt-2 text-[0.8125rem] text-ink-3`,children:t}):null,n]})}function M({credits:e}){return(0,O.jsx)(`ul`,{className:`divide-y divide-border-soft`,children:e.map(e=>(0,O.jsx)(A,{name:e.name,homepage:e.homepage,license:e.license,description:r(e.description)},e.name))})}function N({label:e,packages:t}){return(0,O.jsxs)(`div`,{className:`mt-4`,children:[(0,O.jsx)(`h4`,{className:`font-medium text-[0.75rem] text-ink-3 tracking-wide`,children:e}),(0,O.jsx)(`ul`,{className:`divide-y divide-border-soft`,children:t.map(e=>(0,O.jsx)(A,{...e},e.name))})]})}function P({active:e}){let[t,n]=(0,T.useState)(null),[i,o]=(0,T.useState)(``);(0,T.useEffect)(()=>{if(!e||t)return;let r=!1;return m(()=>import(`./oss-credits-BJrR7BR1.js`).then(e=>{r||n(e.default)}),[]),()=>{r=!0}},[e,t]),(0,T.useEffect)(()=>{e||o(``)},[e]);let s=i.trim().toLowerCase(),u=e=>s?e.filter(e=>k(s,e.name,e.license,r(e.description))):e,d=e=>s?e.filter(e=>k(s,e.name,e.license,e.version)):e,f=u(E),p=u(D),h=t?[{id:`shared`,label:r(`about.creditsShared`),packages:d(t.shared)},...t.groups.map(e=>({id:e.id,label:e.label,packages:d(e.packages)}))].filter(e=>e.packages.length>0):[],g=f.length===0&&p.length===0&&h.length===0;return(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(`p`,{className:`mb-4 text-[0.875rem] text-ink-3`,children:r(`about.creditsHint`)}),(0,O.jsx)(a,{type:`search`,value:i,placeholder:r(`about.search`),onChange:e=>o(e.target.value)}),f.length>0?(0,O.jsx)(j,{title:r(`about.creditsProduct`),children:(0,O.jsx)(M,{credits:f})}):null,p.length>0?(0,O.jsx)(j,{title:r(`about.creditsBuiltWith`),children:(0,O.jsx)(M,{credits:p})}):null,t===null?(0,O.jsx)(`div`,{className:`flex justify-center py-10 text-ink-3`,children:(0,O.jsx)(l,{})}):h.length>0?(0,O.jsx)(j,{title:r(`about.creditsDeps`),hint:s?void 0:r(`about.creditsDepsHint`),children:h.map(e=>(0,O.jsx)(N,{label:e.label,packages:e.packages},e.id))}):null,t!==null&&g?(0,O.jsx)(c,{children:r(`about.noMatches`)}):null]})}var F=[`new`,`earlier`,`credits`],I=e=>r(e===`new`?`about.tab.new`:e===`earlier`?`about.tab.earlier`:`about.credits`),L=e=>e===1?r(`about.change`):r(`about.changes`,{n:e});function R({open:e,onClose:t,me:n}){let a=n?.mode===`local`,{data:c,latest:f}=h(a&&e),[m,E]=(0,T.useState)(null),[D,k]=(0,T.useState)(`new`),A=b(F.indexOf(D)),j=c?.newer&&f?f:_;(0,T.useEffect)(()=>{if(!e)return;let t=!1;return E(null),S(j===`0.6.2`?void 0:j).then(e=>{t||E(e)}),()=>{t=!0}},[e,j]);let M=m?.find(e=>e.version===`v${j}`)??m?.[0]??null,N=m?.filter(e=>e!==M)??[],R=a?c?.kind??null:`cloud`;return(0,O.jsxs)(s,{open:e,onClose:t,wide:!0,height:`tall`,children:[(0,O.jsx)(`div`,{className:`-mt-2 -mr-2 sticky top-0 z-10 flex h-0 justify-end`,children:(0,O.jsx)(i,{label:r(`common.close`),onClick:t,children:(0,O.jsx)(p,{className:`size-4`})})}),(0,O.jsxs)(`div`,{className:`flex flex-col items-center pt-4 text-center`,children:[(0,O.jsx)(v,{size:96}),(0,O.jsxs)(`div`,{className:`mt-4 font-display font-semibold text-[1.5rem] tracking-tight`,children:[`engenty`,(0,O.jsx)(`span`,{className:`text-ember`,children:`.`}),(0,O.jsx)(`span`,{className:`ml-1.5 font-normal text-ink-3`,children:`wizards`})]}),(0,O.jsxs)(`div`,{className:`mt-1 text-[0.9375rem] text-ink-3 tabular-nums`,children:[r(`about.version`,{v:_}),R?` · ${r(`about.kind.${R}`)}`:``]})]}),a?(0,O.jsx)(`div`,{className:`mt-5`,children:(0,O.jsx)(g,{enabled:e})}):null,(0,O.jsx)(`div`,{className:`mt-6 flex justify-center`,children:(0,O.jsx)(u,{value:D,onChange:k,options:F.map(e=>({id:e,label:I(e)})),label:r(`about.title`)})}),(0,O.jsxs)(`div`,{className:o(`mt-5`,y(A)),children:[D===`new`?m===null?(0,O.jsx)(`div`,{className:`flex justify-center py-6 text-ink-3`,children:(0,O.jsx)(l,{})}):M?(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)(`h3`,{className:`flex items-baseline gap-3 border-border-soft border-b pb-2 font-display font-semibold text-[1rem]`,children:[w(M),(0,O.jsx)(`span`,{className:`font-normal font-sans text-[0.8125rem] text-ink-3 tabular-nums`,children:C(M)})]}),(0,O.jsx)(`div`,{className:`mt-3`,children:(0,O.jsx)(x,{release:M})})]}):(0,O.jsx)(`p`,{className:`text-[0.875rem] text-ink-3`,children:r(`about.changelogEmpty`)}):null,D===`earlier`?(0,O.jsx)(`div`,{className:`flex flex-col divide-y divide-border-soft`,children:N.map(e=>(0,O.jsxs)(`details`,{className:`group/r py-2`,children:[(0,O.jsxs)(`summary`,{className:`flex cursor-pointer list-none items-baseline gap-3 text-[0.875rem] [&::-webkit-details-marker]:hidden`,children:[(0,O.jsx)(d,{className:`size-3.5 shrink-0 self-center text-ink-4 transition group-open/r:rotate-90`}),(0,O.jsx)(`span`,{className:`font-medium text-ink tabular-nums`,children:w(e)}),(0,O.jsx)(`span`,{className:`text-[0.8125rem] text-ink-3 tabular-nums`,children:C(e)}),(0,O.jsx)(`span`,{className:`ml-auto text-[0.8125rem] text-ink-4`,children:L(e.commits.length)})]}),(0,O.jsx)(`div`,{className:`mt-2 pl-6`,children:(0,O.jsx)(x,{release:e})})]},e.version??`unreleased`))}):null,D===`credits`?(0,O.jsx)(P,{active:!0}):null]},D)]})}export{R as AboutDialog};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-BNakU3Ej.js";import{$t as r,It as i,Kt as a,Nt as o,Pt as s,Vt as c}from"./ui-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-BNakU3Ej.js";import{$t as r,It as i,Kt as a,Nt as o,Pt as s,Vt as c}from"./ui-rh8TaWvT.js";import{t as l}from"./preload-helper-CNEI7N0N.js";var u=e(t(),1),d=e(n(),1);function f(e){switch(e.group){case`Added`:return{label:`NEW`,dot:`bg-moss`};case`Fixed`:return{label:`FIXED`,dot:`bg-amber`};case`Changed`:return{label:`CHANGED`,dot:`bg-cobalt`};case`Performance`:return{label:`PERFORMANCE`,dot:`bg-ember`};case`Deploy`:return{label:`DEPLOY`,dot:`bg-ink-4`};case`Docs`:return{label:`DOCS`,dot:`bg-ink-4`};default:return{label:`OTHER`,dot:`bg-ink-4`}}}var p=e=>e.version?e.version.replace(/^v/,``):r(`about.unreleased`),m=e=>e.timestamp?new Date(e.timestamp*1e3).toISOString().slice(0,10):``,h=e=>e.charAt(0).toUpperCase()+e.slice(1);function g(e,t){let n=t.trim().toLowerCase();if(!n)return e;let r=[];for(let t of e){if(`${p(t)} ${m(t)}`.toLowerCase().includes(n)){r.push(t);continue}let e=t.commits.filter(e=>`${f(e).label} ${e.scope??``} ${e.message}`.toLowerCase().includes(n));e.length>0&&r.push({...t,commits:e})}return r}async function _(e){if(e)try{let t=await fetch(`https://raw.githubusercontent.com/engenty/engenty-wizards/v${e}/apps/web/src/about/changelog.json`,{signal:AbortSignal.timeout(5e3)});if(t.ok)return await t.json()}catch{}return(await l(async()=>{let{default:e}=await import(`./changelog-CtyrKHAc.js`);return{default:e}},[])).default}function v({release:e}){return(0,d.jsx)(`ul`,{className:`flex flex-col gap-2`,children:e.commits.map(e=>{let t=f(e);return(0,d.jsxs)(`li`,{className:`flex items-start gap-2.5 text-[0.875rem]`,children:[(0,d.jsx)(`span`,{className:a(`mt-[7px] size-1.5 shrink-0 rounded-full`,t.dot)}),(0,d.jsxs)(`span`,{className:`min-w-0 text-ink-2`,children:[(0,d.jsxs)(`span`,{className:`font-semibold text-[0.75rem] text-ink tracking-wide`,children:[t.label,e.scope?` [${e.scope}]`:``]}),` `,h(e.message),e.breaking?(0,d.jsx)(`span`,{className:`ml-1.5 rounded-full bg-rose-tint px-1.5 py-0.5 font-medium text-[0.75rem] text-rose`,children:r(`about.breaking`)}):null]})]},e.id)})})}function y({open:e,onClose:t,version:n}){let[a,l]=(0,u.useState)(null),[f,h]=(0,u.useState)(``);(0,u.useEffect)(()=>{if(!e||a)return;let t=!1;return _(n).then(e=>{t||l(e)}),()=>{t=!0}},[e,a,n]),(0,u.useEffect)(()=>{e||h(``)},[e]);let y=a?g(a,f):[];return(0,d.jsxs)(o,{open:e,onClose:t,title:r(`about.changelog`),wide:!0,height:`tall`,children:[(0,d.jsx)(`p`,{className:`-mt-3 mb-4 text-[0.875rem] text-ink-3`,children:r(`about.changelogHint`)}),a===null?(0,d.jsx)(`div`,{className:`flex justify-center py-10 text-ink-3`,children:(0,d.jsx)(c,{})}):a.length===0?(0,d.jsx)(s,{children:r(`about.changelogEmpty`)}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(i,{type:`search`,value:f,placeholder:r(`about.search`),onChange:e=>h(e.target.value)}),y.length===0?(0,d.jsx)(s,{children:r(`about.noMatches`)}):null,y.map(e=>(0,d.jsxs)(`section`,{className:`mt-6`,children:[(0,d.jsxs)(`h3`,{className:`flex items-baseline gap-3 border-border-soft border-b pb-2 font-display font-semibold text-[1rem]`,children:[p(e),(0,d.jsx)(`span`,{className:`font-normal font-sans text-[0.8125rem] text-ink-3 tabular-nums`,children:m(e)})]}),(0,d.jsx)(`div`,{className:`mt-3`,children:(0,d.jsx)(v,{release:e})})]},e.version??`unreleased`))]})]})}export{y as ChangelogDialog,v as ReleaseNotes,_ as loadReleases,m as releaseDate,p as releaseLabel};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,t as n}from"./jsx-runtime-BNakU3Ej.js";import{$ as r,$t as i,Bn as a,Fn as o,Ft as s,Gt as c,Hn as l,Ir as u,Jt as d,Kt as f,Rt as p,Tn as m,Tr as h,Un as g,Vt as _,W as v,Wn as y,Zn as b,bt as x,dt as S,er as C,ft as w,lt as T,mt as E,nn as D,nr as O,nt as k,p as A,pt as j,qn as M,qt as N,rt as P,st as F,tt as I,un as L,ut as ee,vr as R,vt as z,xr as te,xt as ne,yt as re}from"./ui-rh8TaWvT.js";import{t as ie}from"./phone-DJawY1RF.js";import{$ as ae,Pt as oe,Q as se,St as ce,Z as le,ht as ue,jt as de,t as fe}from"./index-DnIvQFIg.js";import{n as pe}from"./RunnerView-pKik3sdE.js";var me={name:`hand`,size:24,node:[[`path`,{d:`M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2`,key:`1fvzgz`}],[`path`,{d:`M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2`,key:`1kc0my`}],[`path`,{d:`M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8`,key:`10h0bg`}],[`path`,{d:`M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15`,key:`1s1gnw`}]]};me.node;var he=h(me),ge={name:`undo-2`,size:24,node:[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]};ge.node;var _e=h(ge),ve={name:`video-off`,size:24,node:[[`path`,{d:`M10.66 6H14a2 2 0 0 1 2 2v2.5l5.248-3.062A.5.5 0 0 1 22 7.87v8.196`,key:`w8jjjt`}],[`path`,{d:`M16 16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2`,key:`1xawa7`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]};ve.node;var ye=h(ve),be={name:`volume-x`,size:24,node:[[`path`,{d:`M11 4.702a.7.7 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.7.7 0 0 0 11 19.298z`,key:`1p7khw`}],[`path`,{d:`m16.5 14.5 5-5`,key:`cul3yw`}],[`path`,{d:`m16.5 9.5 5 5`,key:`1akey5`}]]};be.node;var xe=h(be),Se=u(),B=e(t(),1),V=e(n(),1),Ce=typeof window<`u`&&window.matchMedia(`(pointer: coarse)`).matches;function we({since:e}){let[t,n]=(0,B.useState)(Date.now());if((0,B.useEffect)(()=>{if(!e)return;let t=setInterval(()=>n(Date.now()),1e3);return()=>clearInterval(t)},[e]),!e)return null;let r=Math.max(0,Math.floor((t-e)/1e3)),i=String(Math.floor(r/60)).padStart(2,`0`),a=String(r%60).padStart(2,`0`);return(0,V.jsxs)(`span`,{className:`font-mono text-[0.8125rem] text-white/60 tabular-nums`,children:[i,`:`,a]})}function H({label:e,on:t,danger:n,busy:r,onClick:i,children:a}){return(0,V.jsx)(`button`,{type:`button`,"aria-label":e,title:e,"aria-pressed":t,disabled:r,onClick:i,className:f(`flex size-12 items-center justify-center rounded-full transition disabled:opacity-50`,n?`bg-rose text-white hover:brightness-110`:t===!1?`bg-white text-neutral-900 hover:bg-white/90`:`bg-white/15 text-white hover:bg-white/25`),children:r?(0,V.jsx)(_,{className:`size-5`}):a})}function Te({voice:e}){let t=(0,B.useRef)(null),{captions:n}=e;return(0,B.useEffect)(()=>{n.length&&t.current?.scrollIntoView({block:`end`})},[n]),n.length?(0,V.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-4 sm:px-5`,children:(0,V.jsxs)(`ol`,{className:`mx-auto flex max-w-[720px] flex-col gap-2 py-2`,children:[n.map(e=>(0,V.jsx)(`li`,{className:f(`text-[0.9375rem] leading-snug`,e.who===`bot`?`text-white/95`:`text-right text-white/50`),children:e.text},e.id)),(0,V.jsx)(`div`,{ref:t})]})}):null}function Ee({voice:e,view:t,video:n,className:r}){let o=e.state===`live`,s=e.state===`connecting`,[c,u]=(0,B.useState)(null),[d,p]=(0,B.useState)(!1);(0,B.useEffect)(()=>{u(o?Date.now():null)},[o]);let m=async()=>{p(!1),await e.start(),n&&await e.startCamera()},h=()=>{e.stop(),p(!0)},g=n||e.camera,v=[...e.captions].reverse().find(e=>e.who===`bot`),y=[...e.captions].reverse().find(e=>e.who===`me`),b=e.speaking?i(`talk.speaking`):e.listening?i(`talk.listening`):o?i(`talk.live`):s?i(`talk.connecting`):d?i(`video.ended`):``;return(0,V.jsxs)(`section`,{className:f(`relative flex min-h-0 flex-col bg-neutral-950 text-white`,`safe-top`,r),children:[(0,V.jsxs)(`div`,{className:`flex h-14 shrink-0 items-center gap-3 px-4 sm:px-5`,children:[(0,V.jsx)(`div`,{className:`min-w-0 flex-1 truncate font-display font-semibold text-[1rem] tracking-tight`,children:t?.wizard.title??``}),b?(0,V.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[0.8125rem] text-white/70`,children:[o?(0,V.jsx)(`span`,{className:f(`size-2 rounded-full`,e.speaking?`animate-pulse-dot bg-emerald-400`:`bg-rose`)}):null,b]}):null,(0,V.jsx)(we,{since:c})]}),(0,V.jsxs)(`div`,{className:f(`grid min-h-0 gap-2 px-3 pb-2 sm:px-4`,g?`flex-1 grid-cols-1 sm:grid-cols-2`:`shrink-0 grid-cols-1`,!g&&o&&e.captions.length?`h-[38%]`:g?``:`flex-1`),children:[(0,V.jsxs)(`div`,{className:f(`relative min-h-0 overflow-hidden rounded-2xl bg-neutral-900`,!g&&`hidden`),children:[(0,V.jsx)(`video`,{ref:e.video,muted:!0,playsInline:!0,autoPlay:!0,className:f(`absolute inset-0 h-full w-full object-cover`,e.facing===`user`&&`-scale-x-100`,e.camera?`block`:`hidden`)}),e.camera?null:(0,V.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-2 text-white/50`,children:[(0,V.jsx)(ye,{className:`size-8`}),(0,V.jsx)(`span`,{className:`text-[0.8125rem]`,children:i(`video.cameraOff`)})]}),(0,V.jsxs)(`span`,{className:`absolute bottom-2 left-3 rounded-md bg-black/50 px-2 py-0.5 text-[0.75rem]`,children:[i(`video.you`),e.muted?(0,V.jsx)(oe,{className:`ml-1.5 inline size-3`}):null]})]}),(0,V.jsxs)(`div`,{className:f(`relative flex min-h-0 items-center justify-center overflow-hidden rounded-2xl transition-shadow`,g?`bg-neutral-900`:`bg-transparent`,g&&e.speaking&&`ring-2 ring-emerald-400/70`),children:[(0,V.jsx)(`div`,{className:f(`rounded-full transition-shadow duration-500`,!g&&e.listening&&`shadow-[0_0_80px_20px_rgba(244,63,94,0.25)]`,!g&&e.speaking&&`shadow-[0_0_80px_20px_rgba(52,211,153,0.3)]`,e.speaking&&`animate-breathe`),children:(0,V.jsx)(ue,{kind:t?.wizard.avatar??`round`,size:g?140:200,fluffy:!0,interactive:!1})}),g?(0,V.jsx)(`span`,{className:`absolute bottom-2 left-3 max-w-[85%] truncate rounded-md bg-black/50 px-2 py-0.5 text-[0.75rem]`,children:t?.wizard.title??``}):null]})]}),o&&!g?(0,V.jsx)(Te,{voice:e}):o&&(v||y)?(0,V.jsx)(`div`,{className:`shrink-0 px-4 pb-2 sm:px-5`,children:(0,V.jsxs)(`div`,{className:`mx-auto max-w-[720px] space-y-1 text-center`,children:[y?(0,V.jsx)(`p`,{className:`line-clamp-1 text-[0.8125rem] text-white/50`,children:y.text}):null,v?(0,V.jsx)(`p`,{className:`line-clamp-3 text-[0.9375rem] text-white/95 leading-snug`,children:v.text}):null]})}):null,e.error?(0,V.jsx)(`p`,{className:`shrink-0 px-5 pb-2 text-center text-[0.8125rem] text-rose`,children:e.error}):null,(0,V.jsx)(`div`,{className:`flex shrink-0 items-center justify-center gap-3 px-4 pt-1 pb-4`,children:o?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(H,{label:i(e.muted?`video.unmute`:`video.mute`),on:!e.muted,onClick:e.toggleMute,children:e.muted?(0,V.jsx)(oe,{className:`size-5`}):(0,V.jsx)(O,{className:`size-5`})}),(0,V.jsx)(H,{label:i(e.camera?`talk.cameraOff`:`talk.camera`),on:e.camera,onClick:()=>e.camera?e.stopCamera():void e.startCamera(),children:e.camera?(0,V.jsx)(a,{className:`size-5`}):(0,V.jsx)(ye,{className:`size-5`})}),e.camera&&Ce?(0,V.jsx)(H,{label:i(`video.flip`),onClick:()=>void e.flipCamera(),children:(0,V.jsx)(l,{className:`size-5`})}):null,(0,V.jsx)(H,{label:i(`video.leave`),danger:!0,onClick:h,children:(0,V.jsx)(de,{className:`size-5`})})]}):(0,V.jsxs)(`div`,{className:`flex flex-col items-center gap-2`,children:[(0,V.jsxs)(`button`,{type:`button`,disabled:s||!t?.talk,onClick:()=>void m(),className:`flex h-12 items-center gap-2 rounded-full bg-emerald-500 px-6 font-medium text-[0.9375rem] text-white transition hover:brightness-110 disabled:opacity-50`,children:[s?(0,V.jsx)(_,{className:`size-4`}):n?(0,V.jsx)(a,{className:`size-5`}):(0,V.jsx)(O,{className:`size-5`}),i(d?`video.rejoin`:n?`video.join`:`talk.start`)]}),!d&&!e.error?(0,V.jsx)(`p`,{className:`max-w-sm text-center text-[0.75rem] text-white/50`,children:i(n?`video.hint`:`talk.joinHint`)}):null]})})]})}var De=e=>L[e.kind]!==`device`,Oe=1024,ke=4e3;function U(e,t){return e?e.length>t?`${e.slice(0,t)} …`:e:``}function W(e,t,n=!1){let r=[`status: ${e.status}`,`camera: ${n?`on`:`off`}`];if(e.ask)return r.push(e.ask.kind===`confirm`?`question: the step wants to "${e.ask.action.summary}" in ${e.ask.service}; answer_ask allows or skips it`:`question: a sign-in at ${e.ask.site.host}; the person types it on the screen, wait`),r.join(`
|
|
2
|
+
`);if(e.status===`running`){let t=[...e.events].reverse().find(e=>e.type===`tool`||e.type===`info`||e.type===`step_started`);return r.push(`working on: ${e.step?.title??``}`),t&&r.push(`doing: ${N(t)}`),r.join(`
|
|
3
|
+
`)}if(e.status===`done`){r.push(`done. made:`);for(let{step:t,output:n}of e.shown)r.push(`- ${t.title}: ${U(n?.text,400)||`(a file, on the screen)`}`);return r.join(`
|
|
4
|
+
`)}if(e.status===`failed`)return r.push(`failed: ${e.error??``}; go_back or the person retries on the screen`),r.join(`
|
|
5
|
+
`);if(t){r.push(`page: ${t.step.title}`);for(let e of t.fields){let n=t.values[e.id],i=n!=null&&n!==``,a=De(e)?`by voice`:e.kind===`image`?`with the camera (take_photo) or on the screen`:`on the screen only`,o=e.options?.length?`; options: ${e.options.join(` | `)}`:``;r.push(`- field ${e.id} (${e.kind}${e.required?`, required`:``}, ${a}): ${e.label}${e.help?` – ${e.help}`:``}${o}${i?` = ${U(String(Array.isArray(n)?n.join(`, `):n),120)}`:` = (open)`}`)}return r.join(`
|
|
6
|
+
`)}if(e.step?.type===`review`){r.push(`review: ${e.step.title}`);for(let{step:t,output:n}of e.shown)r.push(`- ${t.id} "${t.title}": ${U(n?.text,600)||`(a picture or file, on the screen)`}`);return r.push(`regenerate allowed: ${e.step.regenerate?`yes`:`no`}`),r.join(`
|
|
7
|
+
`)}return r.push(`step: ${e.step?.title??``}`),r.join(`
|
|
8
|
+
`)}function Ae(e,t,n,r){let[a,o]=(0,B.useState)(`off`),[s,c]=(0,B.useState)(null),[l,u]=(0,B.useState)(!1),[d,f]=(0,B.useState)(!1),[p,m]=(0,B.useState)(!1),[h,g]=(0,B.useState)(`environment`),[_,y]=(0,B.useState)(!1),[b,x]=(0,B.useState)([]),S=(0,B.useRef)(null),C=(0,B.useRef)(null),w=(0,B.useRef)(0),T=(0,B.useRef)(!1);T.current=p;let E=(0,B.useRef)(null),D=(0,B.useRef)(null),O=(0,B.useRef)(null),k=(0,B.useRef)(null),A=(0,B.useRef)(t);A.current=t;let j=(0,B.useRef)(r);j.current=r;let M=(0,B.useRef)(n);M.current=n;let N=(0,B.useRef)(``),P=(0,B.useCallback)(e=>{let t=D.current;t&&t.readyState===`open`&&t.send(JSON.stringify(e))},[]),F=(0,B.useCallback)(()=>{let e=S.current;if(!T.current||!e||e.videoWidth===0)return null;let t=Math.min(1,Oe/e.videoWidth),n=document.createElement(`canvas`);return n.width=Math.round(e.videoWidth*t),n.height=Math.round(e.videoHeight*t),n.getContext(`2d`)?.drawImage(e,0,0,n.width,n.height),n.toDataURL(`image/jpeg`,.75)},[]),I=(0,B.useCallback)(()=>{for(let e of C.current?.getTracks()??[])e.stop();C.current=null,S.current&&(S.current.srcObject=null),m(!1)},[]),L=(0,B.useCallback)(async e=>{if(C.current)return;let t=e??`environment`;try{let e=await navigator.mediaDevices.getUserMedia({video:{facingMode:{ideal:t},width:{ideal:1280}},audio:!1});C.current=e;let n=e.getVideoTracks()[0]?.getSettings().facingMode;g(n===`user`||n===`environment`?n:t),S.current&&(S.current.srcObject=e,await S.current.play().catch(()=>void 0)),m(!0)}catch(e){c(e.name===`NotAllowedError`?i(`talk.cameraDenied`):e.message)}},[]),ee=(0,B.useCallback)(async()=>{let e=h===`user`?`environment`:`user`;I(),await L(e)},[h,I,L]),R=(0,B.useCallback)(()=>{y(e=>{for(let t of k.current?.getAudioTracks()??[])t.enabled=e;return!e})},[]),z=(0,B.useCallback)(()=>{I(),D.current?.close(),D.current=null,E.current?.close(),E.current=null;for(let e of k.current?.getTracks()??[])e.stop();k.current=null,O.current&&=(O.current.srcObject=null,O.current.remove(),null),N.current=``,u(!1),f(!1),y(!1),o(`off`)},[I]);(0,B.useEffect)(()=>()=>z(),[z]);let te=(0,B.useCallback)(async(t,n)=>{let r=A.current,i=j.current,a=M.current;switch(t){case`get_state`:return r?W(r,i,T.current):`no run`;case`look`:{let e=F();return e?(P({type:`conversation.item.create`,item:{type:`message`,role:`user`,content:[{type:`input_text`,text:`[camera] what the person shows right now`},{type:`input_image`,image_url:e}]}}),`a picture arrived as the next message`):`the camera is off; ask the person to switch it on`}case`take_photo`:{if(!i)return`no page is open`;let t=i.fields.find(e=>e.id===String(n.field??``));if(t?.kind!==`image`)return`no such photo field on this page`;let r=F();if(!r)return`the camera is off; ask the person to switch it on`;try{let n=await(await fetch(r)).blob(),a=new File([n],`photo-${Date.now()}.jpg`,{type:`image/jpeg`}),o=await v.upload(`/api/runs/${e}/uploads`,a),s=i.values[t.id],c=t.multiple?[...Array.isArray(s)?s:s?[s]:[],o.id]:o.id,l=i.setField(t.id,c);return l?`refused: ${l}`:`the photo is in the field`}catch(e){return`failed: ${e.message}`}}case`set_field`:{if(!i)return`no page is open`;let e=i.setField(String(n.field??``),n.value);return e?`refused: ${e}`:`kept`}case`submit_page`:{if(!i)return`no page is open`;let e=i.fields.filter(e=>e.required&&De(e)&&e.kind!==`toggle`&&(i.values[e.id]===void 0||i.values[e.id]===null||i.values[e.id]===``));return e.length?`still open: ${e.map(e=>e.id).join(`, `)}`:(i.submit(),`sent; wait for the next state`)}case`accept_review`:return r?.step?.type===`review`?await a.accept(r.step.id)?`accepted`:a.error??`refused`:`no review is open`;case`regenerate`:return r?.step?.type===`review`?await a.regenerate(r.step.id,String(n.target??``),String(n.note??``))?`the wizard makes it again; wait`:a.error??`refused`:`no review is open`;case`answer_ask`:if(!r?.ask)return`no question is open`;try{return await v.post(`/api/runs/${e}/ask/${r.ask.id}`,{type:n.allow?`done`:`skip`}),n.allow?`allowed`:`skipped`}catch(e){return`refused: ${e.message}`}case`go_back`:return await a.back()?`went back; wait for the state`:a.error??`refused`;default:return`unknown tool ${t}`}},[e,F,P]),ne=(0,B.useCallback)(async()=>{if(!E.current){c(null),x([]),o(`connecting`);try{let t=await v.post(`/api/runs/${e}/talk`),n=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}});k.current=n;let r=new RTCPeerConnection;E.current=r;let a=document.createElement(`audio`);a.autoplay=!0,a.setAttribute(`playsinline`,``),document.body.append(a),O.current=a,r.ontrack=e=>{a.srcObject=e.streams[0]};for(let e of n.getTracks())r.addTrack(e,n);let s=r.createDataChannel(`oai-events`);D.current=s,s.onmessage=e=>{let t;try{t=JSON.parse(e.data)}catch{return}switch(t.type){case`output_audio_buffer.started`:u(!0);break;case`output_audio_buffer.stopped`:case`output_audio_buffer.cleared`:u(!1);break;case`input_audio_buffer.speech_started`:{f(!0);let e=Date.now()-w.current>ke?F():null;e&&(w.current=Date.now(),P({type:`conversation.item.create`,item:{type:`message`,role:`user`,content:[{type:`input_text`,text:`[camera] what the person shows while speaking`},{type:`input_image`,image_url:e}]}}));break}case`input_audio_buffer.speech_stopped`:f(!1);break;case`response.output_audio_transcript.done`:case`conversation.item.input_audio_transcription.completed`:{let e=String(t.transcript??``).trim();if(e){let n=t.type===`response.output_audio_transcript.done`?`bot`:`me`;x(t=>[...t.slice(-199),{id:`${Date.now()}:${n}`,who:n,text:e}])}break}case`response.function_call_arguments.done`:{let e=String(t.name??``),n=String(t.call_id??``),r={};try{r=JSON.parse(String(t.arguments??`{}`))}catch{}te(e,r).then(e=>{P({type:`conversation.item.create`,item:{type:`function_call_output`,call_id:n,output:e}}),P({type:`response.create`})});break}case`error`:c(String(t.error?.message??`error`))}},s.onopen=()=>{o(`live`);let e=A.current;e&&(N.current=W(e,j.current,T.current),P({type:`conversation.item.create`,item:{type:`message`,role:`user`,content:[{type:`input_text`,text:`[state]\n${N.current}\n\nGreet the person in one sentence and ask the first open field.`}]}}),P({type:`response.create`}))},s.onclose=()=>{E.current===r&&z()};let l=await r.createOffer();await r.setLocalDescription(l);let d=await fetch(t.endpoint,{method:`POST`,headers:{authorization:`Bearer ${t.clientSecret}`,"content-type":`application/sdp`},body:l.sdp});if(!d.ok)throw Error(`${i(`talk.failed`)} (${d.status})`);await r.setRemoteDescription({type:`answer`,sdp:await d.text()})}catch(e){z(),c(e.name===`NotAllowedError`?i(`chat.micDenied`):e.message),o(`error`)}}},[e,te,F,P,z]);return(0,B.useEffect)(()=>{if(a!==`live`||!t)return;let e=W(t,r,p);if(e===N.current)return;let n=N.current;N.current=e,P({type:`conversation.item.create`,item:{type:`message`,role:`user`,content:[{type:`input_text`,text:`[state]\n${e}`}]}}),(t.status===`running`&&n.startsWith(`status: running`)&&!n.includes(`working on: `)||t.status!==`running`||n.split(`
|
|
9
|
+
`)[1]!==e.split(`
|
|
10
|
+
`)[1])&&P({type:`response.create`})},[a,t,r,p,P]),{state:a,error:s,speaking:l,listening:d,start:ne,stop:z,camera:p,facing:h,startCamera:L,stopCamera:I,flipCamera:ee,muted:_,toggleMute:R,captions:b,video:S}}var G=(e,t,n)=>({key:e,who:`bot`,node:t,...n}),K=(e,t,n)=>({key:e,who:`me`,node:t,...n}),je=(0,B.createContext)(null),q=(0,B.createContext)(null);function Me(){return(0,B.useContext)(q)?.voice??null}function Ne({children:e}){let t=(0,B.useContext)(je);return t?(0,Se.createPortal)(e,t):null}function Pe({header:e,footer:t,children:n}){let[r,i]=(0,B.useState)(null),a=(0,B.useRef)(null),o=(0,B.useRef)(null),s=(0,B.useRef)(!0);return(0,B.useLayoutEffect)(()=>{let e=a.current,t=o.current;if(!e||!t)return;let n=e.scrollTop,r=()=>{e.scrollHeight-e.scrollTop-e.clientHeight<120?s.current=!0:e.scrollTop<n&&(s.current=!1),n=e.scrollTop},i=null,c=new ResizeObserver(()=>{let r=t.querySelector(`[data-anchor]`);r&&r!==i?(i=r,e.scrollTop+=r.getBoundingClientRect().top-e.getBoundingClientRect().top-12,s.current=!1,n=e.scrollTop):s.current&&(e.scrollTop=e.scrollHeight)});return e.scrollTop=e.scrollHeight,e.addEventListener(`scroll`,r,{passive:!0}),c.observe(t),c.observe(e),()=>{c.disconnect(),e.removeEventListener(`scroll`,r)}},[]),(0,V.jsx)(je.Provider,{value:r,children:(0,V.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[e,(0,V.jsx)(`div`,{ref:a,className:`min-h-0 flex-1 overflow-y-auto overscroll-contain`,children:(0,V.jsx)(`div`,{ref:o,className:`mx-auto flex w-full max-w-[760px] flex-col gap-3 px-3 pt-5 pb-4 sm:px-6`,children:n})}),(0,V.jsxs)(`div`,{className:`shrink-0 border-border-soft border-t bg-background`,onPointerDownCapture:()=>{s.current=!0},onKeyDownCapture:()=>{s.current=!0},children:[(0,V.jsx)(`div`,{ref:i,className:`mx-auto w-full max-w-[760px] px-3 pt-3 sm:px-6`}),t]})]})})}function J({avatar:e,lines:t}){let n=(0,B.useContext)(q),r=(0,B.useMemo)(()=>t.map(e=>({key:e.key,who:e.who,spoken:!e.bare&&!e.wide})),[t]),a=(0,B.useCallback)(e=>{let t=document.querySelector(`[data-say="${CSS.escape(e)}"]`);return t?.querySelector(`[data-say-text]`)?.getAttribute(`data-say-text`)??t?.innerText??null},[]);ae(!!n?.readAloud,n?.lang??d,r,a);let o=[];for(let e of t){let t=o.at(-1);t&&t.who===`bot`&&e.who===`bot`?t.lines.push(e):o.push({who:e.who,lines:[e]})}return o.map((t,n)=>t.who===`bot`?(0,V.jsxs)(`div`,{className:`flex items-start gap-2.5`,children:[(0,V.jsx)(`div`,{className:`sticky top-1 shrink-0 pt-0.5`,children:(0,V.jsx)(ue,{kind:e,size:30,interactive:n>=o.length-2})}),(0,V.jsx)(`div`,{className:`flex min-w-0 flex-1 flex-col items-start gap-1.5`,children:t.lines.map(e=>(0,V.jsx)(`div`,{"data-anchor":e.anchor?``:void 0,"data-say":e.key,className:f(`animate-rise`,e.bare?`w-full pt-1`:`rounded-2xl rounded-tl-md text-[0.9375rem] text-ink leading-relaxed`,!e.bare&&(e.wide?f(`w-full bg-card p-4 shadow-soft ring-1 ring-border-soft`,e.wide===`most`&&`md:w-4/5`):`max-w-[min(36rem,100%)] bg-card px-4 py-2.5 shadow-soft ring-1 ring-border-soft`),e.tone===`error`&&`bg-rose-tint text-rose shadow-none ring-0`),children:e.node},e.key))})]},t.lines[0].key):t.lines.map(e=>(0,V.jsxs)(`div`,{className:`flex animate-rise flex-col items-end gap-1 pl-10`,children:[(0,V.jsx)(`div`,{className:`max-w-[min(32rem,100%)] whitespace-pre-wrap break-words rounded-2xl rounded-br-md bg-primary px-4 py-2.5 text-[0.9375rem] text-primary-foreground leading-relaxed`,children:e.node}),e.onEdit?(0,V.jsxs)(`button`,{type:`button`,onClick:e.onEdit,className:`inline-flex items-center gap-1 px-1 text-[0.75rem] text-ink-4 transition hover:text-ink-2 coarse:min-h-9`,children:[(0,V.jsx)(b,{className:`size-3`}),` `,i(`chat.change`)]}):null]},e.key)))}function Fe(){return(0,V.jsx)(`span`,{className:`inline-flex items-center gap-1 py-1.5`,role:`status`,"aria-label":i(`run.working`),children:[0,1,2].map(e=>(0,V.jsx)(`span`,{className:`size-1.5 animate-typing rounded-full bg-ink-3`,style:{animationDelay:`${e*160}ms`}},e))})}function Y({children:e}){return(0,V.jsx)(`div`,{className:`flex flex-wrap items-center gap-2`,children:e})}var X=(e,t)=>G(e,(0,V.jsx)(Y,{children:t}),{bare:!0});function Z({onClick:e,children:t,primary:n,on:r,disabled:i,busy:a}){return(0,V.jsxs)(`button`,{type:`button`,"aria-pressed":r,disabled:i||a,onClick:e,className:f(`inline-flex h-10 items-center gap-1.5 rounded-full px-4 font-medium text-[0.875rem] transition active:scale-[0.98] disabled:pointer-events-none disabled:opacity-50 coarse:h-11`,n?`bg-primary text-primary-foreground hover:brightness-[1.06]`:r?`bg-ember-tint text-ink ring-1 ring-ember`:`bg-card text-ink-2 ring-1 ring-input hover:text-ink hover:ring-ink-4`),children:[a?(0,V.jsx)(_,{className:`size-4`}):null,t]})}function Ie({initial:e=``,placeholder:t,multiline:n,inputProps:r,busy:o,disabled:l,inputRef:u,onSend:d}){let[p,m]=(0,B.useState)(e),h=(0,B.useRef)(null),v=u??h,y=(0,B.useContext)(q),b=A(p,m,{endpoint:y?`/api/runs/${y.runId}/transcribe`:void 0}),x=!!y&&b.supported&&!l;(0,B.useEffect)(()=>{if(!x)return;let e=e=>{(e.metaKey||e.ctrlKey)&&e.shiftKey&&e.key.toLowerCase()===`m`&&(e.preventDefault(),b.toggle())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[x,b.toggle]),(0,B.useEffect)(()=>{!z&&!l&&v.current?.focus()},[l,v]);let S=()=>{o||l||(b.listening&&b.toggle(),d(p)!==!1&&m(``))},C=b.listening?i(`chat.listening`):b.processing?i(`chat.transcribing`):t,w=y?.voice??null,T=!!y?.call,E=y&&!T&&(le||x||w)?(0,V.jsxs)(`div`,{className:`mb-1 flex shrink-0 items-center`,children:[w?(0,V.jsx)(s,{label:i(w.state===`live`?`talk.stop`:w.state===`connecting`?`talk.connecting`:`talk.start`),"aria-pressed":w.state===`live`,disabled:w.state===`connecting`,onClick:()=>w.state===`live`?w.stop():void w.start(),className:f(`size-9`,w.state===`live`&&`bg-rose-tint text-rose hover:bg-rose-tint hover:text-rose`,w.state===`off`&&y.talk&&`bg-primary text-primary-foreground hover:bg-primary`),children:w.state===`connecting`?(0,V.jsx)(_,{className:`size-4`}):w.state===`live`?(0,V.jsx)(de,{className:`size-4`}):(0,V.jsx)(ie,{className:`size-4`})}):null,w?.state===`live`?(0,V.jsx)(s,{label:i(w.camera?`talk.cameraOff`:`talk.camera`),"aria-pressed":w.camera,onClick:()=>w.camera?w.stopCamera():void w.startCamera(),className:f(`size-9`,w.camera&&`text-ink`),children:w.camera?(0,V.jsx)(a,{className:`size-4`}):(0,V.jsx)(ye,{className:`size-4`})}):null,le?(0,V.jsx)(s,{label:i(y.readAloud?`chat.readAloudOff`:`chat.readAloud`),"aria-pressed":y.readAloud,onClick:()=>y.setReadAloud(!y.readAloud),className:f(`size-9`,y.readAloud&&`text-ink`),children:y.readAloud?(0,V.jsx)(ce,{className:`size-4`}):(0,V.jsx)(xe,{className:`size-4`})}):null,x?(0,V.jsx)(s,{label:i(b.listening?`chat.dictateStop`:`chat.dictate`),"aria-pressed":b.listening,disabled:b.processing,onClick:b.toggle,className:f(`size-9`,b.listening&&`bg-rose-tint text-rose hover:bg-rose-tint hover:text-rose`),children:b.processing?(0,V.jsx)(_,{className:`size-4`}):b.listening?(0,V.jsx)(g,{className:`size-3.5 animate-pulse-dot fill-current`}):(0,V.jsx)(O,{className:`size-4`})}):null]}):null;return(0,V.jsxs)(`form`,{className:`pb-3`,onSubmit:e=>{e.preventDefault(),S()},children:[w&&!T?(0,V.jsx)(`video`,{ref:w.video,muted:!0,playsInline:!0,autoPlay:!0,className:f(`mb-2 ml-auto w-32 rounded-xl bg-black object-cover shadow-soft ring-1 ring-border-soft`,w.camera?`block`:`hidden`)}):null,(0,V.jsxs)(`div`,{className:f(`flex items-end gap-1 rounded-[1.375rem] border border-input bg-card pr-1.5 pl-1 transition focus-within:border-focus focus-within:ring-4 focus-within:ring-focus-glow`,l&&`opacity-60`),children:[E,n?(0,V.jsx)(c,{ref:v,minRows:1,maxRows:6,value:p,disabled:l,placeholder:C,autoCapitalize:`sentences`,onChange:e=>m(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!z&&!e.nativeEvent.isComposing&&(e.preventDefault(),S())},className:`min-h-11 border-0 bg-transparent py-2.5 shadow-none focus:ring-0`}):(0,V.jsx)(`input`,{ref:v,...r,value:p,disabled:l,placeholder:C,enterKeyHint:`send`,onChange:e=>m(e.target.value),className:`h-11 min-w-0 flex-1 bg-transparent px-3 text-[0.9375rem] text-ink outline-none placeholder:text-ink-4`}),(0,V.jsx)(`button`,{type:`submit`,"aria-label":i(`chat.send`),title:i(`chat.send`),disabled:o||l,className:`mb-1 flex size-9 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground transition hover:brightness-[1.06] disabled:opacity-40`,children:o?(0,V.jsx)(_,{className:`size-4`}):(0,V.jsx)(te,{className:`size-4`})})]}),b.error?(0,V.jsx)(`p`,{className:`mt-1.5 px-3 text-[0.75rem] text-rose`,children:b.error===`denied`?i(`chat.micDenied`):b.error}):T?null:w?.error?(0,V.jsx)(`p`,{className:`mt-1.5 px-3 text-[0.75rem] text-rose`,children:w.error}):w?.state===`live`?(0,V.jsx)(`p`,{className:`mt-1.5 px-3 text-[0.75rem] text-ink-3`,children:w.speaking?i(`talk.speaking`):w.listening?i(`talk.listening`):i(`talk.live`)}):y?.talk&&w?.state===`off`?(0,V.jsx)(`p`,{className:`mt-1.5 px-3 text-[0.75rem] text-ink-3`,children:i(`talk.hint`)}):null]})}function Q({placeholder:e=i(`chat.above`)}){return(0,V.jsx)(Ne,{children:(0,V.jsx)(Ie,{disabled:!0,placeholder:e,onSend:()=>!1})})}function Le(e){let t=L[e.kind];return t===`typed`&&!e.scan?`typed`:t===`tapped`?`tapped`:`control`}var Re=e=>e==null||e===``||Array.isArray(e)&&e.length===0;function ze(e,t){let n=e.kind===`toggle`||e.kind===`connection`||e.kind===`list`;if(Re(t))return e.required&&!n?i(`chat.required`):null;let r=String(t).trim();if(e.kind===`email`&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r))return i(`chat.badEmail`);if(e.kind===`url`)try{new URL(r)}catch{return i(`chat.badUrl`)}return e.kind===`number`&&!Number.isFinite(Number(r.replace(`,`,`.`)))?i(`chat.badNumber`):Array.isArray(t)&&e.multiple&&e.min&&t.length<e.min?i(`run.filesMin`,{n:t.length,min:e.min}):null}function Be(e,t){let n=e.kind===`textarea`?t.replace(/\s+$/,``):t.trim();if(n)return e.kind===`url`&&!/^[a-z][a-z0-9+.-]*:/i.test(n)?`https://${n}`:n}function Ve({field:e}){return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`font-medium`,children:e.label}),e.help?(0,V.jsx)(`span`,{className:`mt-0.5 block text-[0.8125rem] text-ink-3`,children:e.help}):null]})}function He({step:e,only:t}){return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`font-medium`,children:e.title}),e.description?(0,V.jsx)(`span`,{className:`mt-0.5 block text-ink-2`,children:e.description}):null,t?.help?(0,V.jsx)(`span`,{className:`mt-1 block text-[0.8125rem] text-ink-3`,children:t.help}):null]})}function Ue({field:e,value:t,runId:n}){if(e.kind===`connection`)return(0,V.jsx)(V.Fragment,{children:typeof t==`string`&&t?t:i(`chat.connected`)});if(e.kind===`list`)return(0,V.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,V.jsx)(R,{className:`size-4`}),` `,i(`chat.checked`)]});if(e.kind===`toggle`)return(0,V.jsx)(V.Fragment,{children:i(t===!0?`run.yes`:`run.no`)});if(Re(t))return(0,V.jsx)(`span`,{className:`italic opacity-80`,children:i(`chat.skipped`)});switch(e.kind){case`multiselect`:return(0,V.jsx)(V.Fragment,{children:t.map(D).join(`, `)});case`select`:return(0,V.jsx)(V.Fragment,{children:D(String(t))});case`date`:{let e=new Date(`${String(t)}T00:00`);return(0,V.jsx)(V.Fragment,{children:Number.isNaN(e.getTime())?String(t):new Intl.DateTimeFormat(d,{dateStyle:`long`}).format(e)})}case`color`:return(0,V.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[(0,V.jsx)(`span`,{className:`size-4 rounded-full ring-1 ring-white/50`,style:{background:String(t)}}),String(t)]});case`image`:case`signature`:return(0,V.jsx)(`span`,{className:`-mx-1.5 flex flex-wrap gap-1.5`,children:(Array.isArray(t)?t:[String(t)]).map(t=>(0,V.jsx)(`img`,{src:r(`/api/runs/${n}/assets/${t}`),alt:``,className:f(`h-16 rounded-lg bg-white`,e.kind===`image`?`w-16 object-cover`:`object-contain px-1`)},t))});case`file`:{let e=Array.isArray(t)?t.length:1;return(0,V.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,V.jsx)(C,{className:`size-4`}),` `,i(e===1?`chat.file`:`chat.files`,{n:e})]})}case`audio`:{let e=t.seconds;return(0,V.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,V.jsx)(O,{className:`size-4`}),` `,i(`chat.voice`),e?` · ${Math.round(e)} s`:``]})}case`location`:{let e=t;return(0,V.jsx)(V.Fragment,{children:e.label||`${e.lat?.toFixed(5)}, ${e.lng?.toFixed(5)}`})}case`items`:return(0,V.jsx)(V.Fragment,{children:i(`chat.rows`,{n:Array.isArray(t)?t.length:0})});default:return(0,V.jsx)(V.Fragment,{children:String(t)})}}function We(e,t,n,r,i,a){let o=[G(t,(0,V.jsx)(He,{step:e,only:a}))];for(let e of i)a||o.push(G(`${t}:${e.id}`,(0,V.jsx)(Ve,{field:e}))),o.push(K(`${t}:${e.id}:a`,(0,V.jsx)(Ue,{field:e,value:n[e.id],runId:r})));return o}var Ge=(e,t)=>e.fields.filter(e=>!e.when&&!m(e)||t[e.id]!==void 0&&t[e.id]!==null);function Ke(e,t){let n=[];e.wizard.description&&n.push(G(`hello`,e.wizard.description)),e.wizard.intro&&n.push(G(`intro`,e.wizard.intro));for(let[t,r]of e.answered.entries()){let a=`${t}:${r.id}`;if(r.type===`page`){let t=r.fields.length===1?r.fields[0]:void 0;n.push(...We(r,a,e.values,e.id,Ge(r,e.values),t))}else r.type===`review`&&(n.push(G(a,(0,V.jsx)(`span`,{className:`font-medium`,children:r.title}))),n.push(K(`${a}:a`,i(`run.accept`))))}let r=n.at(-1);return t&&r?.who===`me`&&(n[n.length-1]={...r,onEdit:t}),n}function qe(e,t){return e.fields.filter(e=>!m(e)||t.decidedFields?.includes(e.id)).map(e=>t.options?.[e.id]?.length?{...e,options:t.options[e.id]}:e)}function Je({view:e,run:t,step:n,before:r}){let a=(0,B.useMemo)(()=>qe(n,e),[n,e]),s=e.known??{},[c,l]=(0,B.useState)(()=>I(n,e)),[u,d]=(0,B.useState)(()=>n.fields.some(t=>e.values[t.id]!==void 0)?o(qe(n,e),e.known??{},I(n,e)).slice(0,-1).map(e=>e.id):[]),[f,p]=(0,B.useState)({}),[m,h]=(0,B.useState)(!1),[g,_]=(0,B.useState)(!1),v=o(a,s,c),y=v.filter(e=>u.includes(e.id)),b=v.find(e=>!u.includes(e.id)),x=a.length===1?a[0]:void 0,S=y.at(-1),C=S?()=>d(e=>e.filter(e=>e!==S.id)):void 0;(0,B.useEffect)(()=>{let e=Object.keys(t.fieldErrors),n=o(a,s,c),r=n.findIndex(t=>e.includes(t.id));r>=0&&(d(n.slice(0,r).map(e=>e.id)),p(t.fieldErrors))},[t.fieldErrors]);let w=e=>{t.submitPage(n.id,e).then(_)},E=(0,B.useContext)(q),D=(0,B.useRef)(c);D.current=c;let O=E?.bindPage,k=(0,B.useRef)(w);k.current=w,(0,B.useEffect)(()=>{if(!O)return;let e=o(a,s,c);return O({step:n,fields:e,values:c,setField:(t,n)=>{let r=e.find(e=>e.id===t);return r?ze(r,n)||(l(e=>({...e,[t]:n})),d(e=>e.includes(t)?e:[...e,t]),p({}),null):`no such field on this page`},submit:()=>k.current(D.current)}),()=>O(null)},[O,n,a,s,c]);let A=e=>{if(!b)return!1;let t=ze(b,e);if(t)return p({[b.id]:t}),!1;let n={...c,[b.id]:e},r=[...u,b.id];return l(n),d(r),p({}),o(a,s,n).some(e=>!r.includes(e.id))||w(n),!0},j=[...r.map(e=>u.length?{...e,onEdit:void 0}:e),...We(n,`now:${n.id}`,c,e.id,y,x).map((e,t,n)=>t===n.length-1&&e.who===`me`&&b?{...e,onEdit:C}:e)];b?(Le(b)===`control`?j.push(G(`now:${n.id}:${b.id}:control`,(0,V.jsx)(T,{field:b,value:c[b.id],values:c,runId:e.id,view:e,closed:e.closed?.[b.id],onChange:e=>l(t=>({...t,[b.id]:e})),onBusy:h}),{wide:!0})):x||j.push(G(`now:${n.id}:${b.id}`,(0,V.jsx)(Ve,{field:b}))),f[b.id]&&j.push(G(`now:${n.id}:${b.id}:error`,f[b.id],{tone:`error`}))):t.busy||g?j.push(G(`sending`,(0,V.jsx)(Fe,{}))):t.error&&j.push(G(`send-error`,t.error,{tone:`error`}));let M=(0,V.jsx)(Q,{});if(g||!b&&u.length>0&&t.busy)M=(0,V.jsx)(Q,{placeholder:i(`run.working`)});else if(!b)j.push(X(`now:${n.id}:go`,(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Z,{primary:!0,busy:t.busy,onClick:()=>w(c),children:n.cta||i(`run.next`)}),C?(0,V.jsx)(Z,{onClick:C,disabled:t.busy,children:i(`run.back`)}):null]})));else{let r=Le(b),a=!b.required&&b.kind!==`connection`&&b.kind!==`list`?(0,V.jsx)(Z,{onClick:()=>A(void 0),children:i(`chat.skip`)}):null;if(r===`typed`){a&&j.push(X(`now:${n.id}:${b.id}:replies`,a));let e=c[b.id];M=(0,V.jsx)(Ne,{children:(0,V.jsx)(Ie,{initial:Re(e)?``:String(e),multiline:b.kind===`textarea`,placeholder:b.placeholder||(x?b.label:i(`chat.placeholder`)),inputProps:Ye(b),busy:t.busy,onSend:e=>A(Be(b,e))},b.id)})}else if(r===`tapped`)j.push(G(`now:${n.id}:${b.id}:replies`,(0,V.jsx)(Xe,{field:b,view:e,value:c[b.id],onAnswer:A}),{bare:!0}));else{let e=v.filter(e=>!u.includes(e.id)).length===1;j.push(X(`now:${n.id}:${b.id}:replies`,(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Z,{primary:!0,disabled:m,onClick:()=>A(c[b.id]),children:e&&n.cta?n.cta:i(`chat.send`)}),a]})))}}return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(J,{avatar:e.wizard.avatar,lines:j}),M]})}function Ye(e){switch(e.kind){case`number`:return{inputMode:`decimal`,autoComplete:`off`};case`email`:return{type:`email`,inputMode:`email`,autoComplete:`email`,autoCapitalize:`off`,autoCorrect:`off`,spellCheck:!1};case`url`:return{inputMode:`url`,autoComplete:`url`,autoCapitalize:`off`,autoCorrect:`off`,spellCheck:!1};case`date`:return{type:`date`};default:return ee(e)}}function Xe({field:e,view:t,value:n,onAnswer:r}){let a=new Set(t.closed?.[e.id]?.values.map(String)),[o,s]=(0,B.useState)(Array.isArray(n)?n:[]);if(e.kind===`toggle`)return(0,V.jsxs)(Y,{children:[(0,V.jsx)(Z,{on:n===!1,disabled:a.has(`false`),onClick:()=>r(!1),children:i(`run.no`)}),(0,V.jsx)(Z,{on:n===!0,disabled:a.has(`true`),onClick:()=>r(!0),children:i(`run.yes`)})]});let c=e.options??[];return e.kind===`multiselect`?(0,V.jsxs)(Y,{children:[c.map(e=>(0,V.jsx)(Z,{on:o.includes(e),onClick:()=>s(t=>t.includes(e)?t.filter(t=>t!==e):c.filter(n=>n===e||t.includes(n))),children:D(e)},e)),(0,V.jsx)(Z,{primary:!0,disabled:e.required&&!o.length,onClick:()=>r(o),children:o.length||e.required?i(`chat.send`):i(`chat.skip`)})]}):(0,V.jsxs)(Y,{children:[c.map(e=>(0,V.jsx)(Z,{on:n===e,disabled:a.has(e),onClick:()=>r(e),children:D(e)},e)),e.required?null:(0,V.jsx)(Z,{onClick:()=>r(void 0),children:i(`chat.skip`)})]})}function Ze({view:e}){let t=(0,B.useMemo)(()=>[...e.events].reverse().find(t=>t.type===`step_started`&&t.stepId===e.step?.id),[e.events,e.step?.id]),n=t?new Date(t.at).getTime():Date.now(),[a,o]=(0,B.useState)(Date.now());(0,B.useEffect)(()=>{let e=setInterval(()=>o(Date.now()),1e3);return()=>clearInterval(e)},[]);let s=e.events.filter(e=>(e.type===`tool`||e.type===`info`)&&new Date(e.at).getTime()>=n-500),c=s.at(-1),l=[...s].reverse().find($e),u=[...new Set(s.map(e=>e.asset).filter(e=>!!e))];return(0,V.jsxs)(`div`,{className:f(`flex max-w-full flex-col gap-1`,l?`w-full`:`w-96`),"data-say-text":t?.message??e.step?.title??i(`run.working`),children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)(Fe,{}),(0,V.jsx)(`span`,{className:`font-medium`,children:t?.message??e.step?.title??i(`run.working`)}),(0,V.jsx)(`span`,{className:`text-[0.75rem] text-ink-4 tabular-nums`,children:i(`run.elapsed`,{s:Math.max(0,Math.round((a-n)/1e3))})})]}),c&&c!==l?(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[0.8125rem] text-ink-3`,children:[(0,V.jsx)(y,{className:`size-3.5 shrink-0 animate-breathe text-ember`}),(0,V.jsx)(`span`,{className:`truncate`,children:N(c)})]}):null,l&&e.status===`running`?(0,V.jsx)(tt,{runId:e.id,event:l}):null,u.length?(0,V.jsx)(`div`,{className:`mt-1.5 flex flex-wrap gap-1.5`,children:u.slice(-6).map(t=>(0,V.jsx)(`img`,{src:r(`/api/runs/${e.id}/assets/${t}`),alt:``,className:`size-14 rounded-lg bg-paper-2 object-cover ring-1 ring-border-soft`},t))}):null]})}var Qe=new Set([`opens`,`clicks`,`clicksOn`,`types`,`typesText`,`selects`,`scrolls`,`presses`,`goesBack`,`waitsForPage`,`fastLoop`,`looksAtPage`,`personDrives`,`agentDrives`]);function $e(e){return!!e.note&&Qe.has(e.note.code)}var et=1e4;function tt({runId:e,event:t}){let[n,r]=(0,B.useState)(null),[a,o]=(0,B.useState)(`agent`),[s,c]=(0,B.useState)(!1),l=t.note?.code;if((0,B.useEffect)(()=>{l===`personDrives`?o(`person`):l===`agentDrives`&&o(`agent`)},[l]),(0,B.useEffect)(()=>{let t=()=>v.get(`/api/runs/${e}/browser/seat`).then(e=>o(e.seat)).catch(()=>void 0);if(t(),a!==`person`)return;let n=setInterval(t,et);return()=>clearInterval(n)},[e,a]),n!==null&&n>=t.id)return null;let u=a===`person`,d=async()=>{c(!0);try{let t=await v.post(`/api/runs/${e}/browser/seat`,{to:u?`agent`:`person`});o(t.seat)}catch{}finally{c(!1)}};return(0,V.jsx)(ne,{runId:e,driving:u,caption:N(t),hint:i(`browser.driving`),onBroken:()=>r(t.id),className:`mt-1.5`,action:(0,V.jsxs)(`button`,{type:`button`,disabled:s,onClick:()=>void d(),className:f(`flex h-8 items-center gap-1.5 rounded-full px-3 font-medium text-[0.8125rem] shadow-soft transition-colors disabled:opacity-60`,u?`bg-primary text-primary-foreground hover:bg-primary/90`:`bg-card/90 text-ink ring-1 ring-border-soft backdrop-blur hover:bg-card`),children:[u?(0,V.jsx)(_e,{className:`size-3.5`}):(0,V.jsx)(he,{className:`size-3.5`}),i(u?`browser.handBack`:`browser.takeOver`)]})},n??0)}function $({children:e,end:t}){return(0,V.jsxs)(`div`,{className:`mb-3 flex flex-wrap items-center justify-between gap-2`,children:[(0,V.jsx)(`h3`,{className:`font-display font-semibold text-[1rem]`,children:e}),t]})}function nt({view:e,run:t,step:n,before:r,asked:a,onNote:o}){let s=e.shown.filter(e=>e.output),[c,l]=(0,B.useState)(s.length===1?s[0].step.id:null),u=(0,B.useRef)(null),d=[...r,...a.map((e,t)=>K(`review:${n.id}:asked:${t}`,e)),G(`review:${n.id}`,(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`font-medium`,children:n.title}),n.description?(0,V.jsx)(`span`,{className:`mt-0.5 block text-ink-2`,children:n.description}):null]}),{anchor:!0}),...s.map(({step:t,output:r})=>G(`review:${n.id}:${t.id}`,(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)($,{children:t.title}),(0,V.jsx)(F,{base:`/api/runs/${e.id}`,step:t,output:r,onSurfaceAction:n.regenerate?()=>{l(t.id),u.current?.focus()}:void 0})]}),{wide:!0})),...e.lists.map(t=>G(`review:${n.id}:list:${t.def.id}`,(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)($,{children:t.def.title}),t.def.check?(0,V.jsx)(S,{runId:e.id,list:t}):(0,V.jsx)(j,{runId:e.id,list:t,editable:!0})]}),{wide:!0}))];t.error&&d.push(G(`review-error`,t.error,{tone:`error`}));let f=n.regenerate&&s.length>0;return d.push(X(`review:${n.id}:replies`,(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(Z,{primary:!0,busy:t.busy,onClick:()=>void t.accept(n.id),children:[(0,V.jsx)(R,{className:`size-4`}),` `,i(`run.accept`)]}),f&&s.length>1?s.map(({step:e})=>(0,V.jsx)(Z,{on:c===e.id,onClick:()=>l(e.id),children:e.title},e.id)):null]}))),(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(J,{avatar:e.wizard.avatar,lines:d}),f?(0,V.jsx)(Ne,{children:(0,V.jsx)(Ie,{multiline:!0,inputRef:u,busy:t.busy,placeholder:s.length>1&&!c?i(`run.feedbackPick`):i(`run.feedbackPlaceholder`),disabled:!c,onSend:e=>{let r=e.trim();return!r||!c?!1:(o(r),t.regenerate(n.id,c,r),!0)}})}):(0,V.jsx)(Q,{})]})}function rt({view:e,run:t,step:n,before:r,onRestart:a}){let o=e.shown.filter(e=>e.output),s=`/api/runs/${e.id}`,c=[...r,G(`result:${n.id}`,(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`font-display font-semibold text-[1.0625rem]`,children:n.title}),n.message?(0,V.jsx)(`span`,{className:`mt-0.5 block text-ink-2`,children:n.message}):null]}),{anchor:!0}),...o.map(({step:e,output:t,formats:n,label:r})=>G(`result:${e.id}`,(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)($,{end:(0,V.jsx)(P,{base:s,stepId:e.id,formats:n,title:r??e.title}),children:r??e.title}),(0,V.jsx)(F,{base:s,step:e,output:t}),t?.assets?.some(e=>e.ai)?(0,V.jsx)(`p`,{className:`mt-3 text-[0.75rem] text-ink-3 leading-relaxed`,children:i(`ai.publish`)}):null]}),{wide:!0})),...e.lists.map(t=>G(`result:list:${t.def.id}`,(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)($,{end:(0,V.jsx)(w,{runId:e.id,list:t}),children:t.label??t.def.title}),(0,V.jsx)(j,{runId:e.id,list:t,editable:!0})]}),{wide:!0}))];return c.push(X(`result:replies`,(0,V.jsxs)(V.Fragment,{children:[o.length?(0,V.jsx)(fe,{runId:e.id,title:`${n.title} · ${e.wizard.title}`,initial:e.shareUrl?{url:e.shareUrl,expiresAt:e.expiresAt}:null}):null,a?(0,V.jsxs)(Z,{onClick:a,children:[(0,V.jsx)(M,{className:`size-4`}),` `,i(`run.again`)]}):null,e.canBack?(0,V.jsx)(Z,{onClick:()=>void t.back(),disabled:t.busy,children:i(`run.back`)}):null,e.keeps?(0,V.jsx)(`span`,{className:`ml-1`,children:(0,V.jsx)(E,{runId:e.id})}):null]}))),(0,V.jsx)(J,{avatar:e.wizard.avatar,lines:c})}function it({runId:e,onRestart:t,onView:n,header:r,footer:a,talk:o=!1,call:s=!1}){let c=pe(e),{view:l}=c,[u,f]=(0,B.useState)(null),m=Ae(e,l,c,u);(0,B.useEffect)(()=>{n?.(l)},[l,n]);let[h,g]=se(),v=(0,B.useMemo)(()=>({runId:e,lang:l?.lang??d,readAloud:h,setReadAloud:g,voice:l?.talk?m:null,talk:o,call:!!s,bindPage:f}),[e,l?.lang,l?.talk,h,g,m,o,s]);re(l?.status===`running`&&!l.ask),k(l);let[y,b]=(0,B.useState)({}),[S,C]=(0,B.useState)(null);(0,B.useEffect)(()=>{l&&l.status!==`running`&&C(null)},[l]);let w;if(c.notFound)w=(0,V.jsx)(`div`,{className:`py-24 text-center text-ink-3`,children:i(`run.notFound`)});else if(!l)w=(0,V.jsx)(`div`,{className:`flex justify-center py-24 text-ink-4`,children:(0,V.jsx)(_,{})});else{let e=l.step,n=l.status===`waiting_input`,r=Ke(l,l.canBack&&n&&!c.busy?()=>void c.back():void 0);if(l.status===`running`&&l.ask)w=(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(J,{avatar:l.wizard.avatar,lines:[...r,G(`ask:${l.ask.id}`,(0,V.jsx)(x,{runId:l.id,ask:l.ask}),{wide:!0})]}),(0,V.jsx)(Q,{})]});else if(l.status===`running`)w=(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(J,{avatar:l.wizard.avatar,lines:[...r,...S?[K(`note`,S)]:[],G(`working:${e?.id}`,(0,V.jsx)(Ze,{view:l}),{wide:l.events.some(t=>t.stepId===e?.id&&$e(t))?`most`:void 0})]}),(0,V.jsx)(Q,{placeholder:i(`run.working`)})]});else if(l.status===`failed`)w=(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(J,{avatar:l.wizard.avatar,lines:[...r,G(`failed`,(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`font-medium`,children:i(`run.failed`)}),l.error?(0,V.jsx)(`span`,{className:`mt-0.5 block`,children:(0,V.jsx)(p,{text:l.error})}):null]}),{tone:`error`}),X(`failed:replies`,(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(Z,{primary:!0,busy:c.busy,onClick:()=>void c.retry(),children:[(0,V.jsx)(M,{className:`size-4`}),` `,i(`run.retry`)]}),l.canBack?(0,V.jsx)(Z,{onClick:()=>void c.back(),disabled:c.busy,children:i(`run.back`)}):null]}))]}),(0,V.jsx)(Q,{})]});else if(l.status===`cancelled`)w=(0,V.jsx)(J,{avatar:l.wizard.avatar,lines:[...r,G(`cancelled`,i(`run.cancelled`)),...t?[X(`cancelled:replies`,(0,V.jsxs)(Z,{primary:!0,onClick:t,children:[(0,V.jsx)(M,{className:`size-4`}),` `,i(`run.again`)]}))]:[]]});else if(e?.type===`page`)w=(0,V.jsx)(Je,{view:l,run:c,step:e,before:r},e.id);else if(e?.type===`review`){let t=l.shown.map(e=>e.output?.at??``).join(`|`);w=(0,V.jsx)(nt,{view:l,run:c,step:e,before:r,asked:y[e.id]??[],onNote:t=>{C(t),b(n=>({...n,[e.id]:[...n[e.id]??[],t]}))}},`${e.id}:${t}`)}else w=e?.type===`result`?(0,V.jsx)(rt,{view:l,run:c,step:e,before:r,onRestart:t}):(0,V.jsx)(J,{avatar:l.wizard.avatar,lines:r})}return s?(0,V.jsx)(q.Provider,{value:v,children:(0,V.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col lg:flex-row`,children:[(0,V.jsx)(Ee,{voice:m,view:l,video:s===`video`,className:`h-[46dvh] shrink-0 lg:h-auto lg:min-h-0 lg:flex-1`}),(0,V.jsx)(`aside`,{className:`flex min-h-0 flex-1 flex-col border-border-soft border-t lg:w-[420px] lg:flex-none lg:border-t-0 lg:border-l`,children:(0,V.jsx)(Pe,{footer:a,children:w})})]})}):(0,V.jsx)(q.Provider,{value:v,children:(0,V.jsx)(Pe,{header:r,footer:a,children:w})})}export{J as a,Z as i,Pe as n,X as o,Q as r,Me as s,it as t};
|