wizards 0.5.11 → 0.5.13
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/browser/fast/action-space.js +0 -2
- package/apps/runtime/dist/cli/mcp.js +2 -15
- package/apps/runtime/dist/cli/report.js +2 -15
- package/apps/runtime/dist/cli/start.js +28 -14
- package/apps/runtime/dist/cli/status.js +1 -1
- package/apps/runtime/dist/credits/credits.js +0 -3
- package/apps/runtime/dist/db/client.js +0 -7
- package/apps/runtime/dist/db/control-schema.js +10 -0
- package/apps/runtime/dist/db/migrations/control/0010_tan_snowbird.sql +6 -0
- package/apps/runtime/dist/db/migrations/control/meta/0010_snapshot.json +600 -0
- package/apps/runtime/dist/db/migrations/control/meta/_journal.json +7 -0
- package/apps/runtime/dist/db/migrations/tenant/0016_even_trish_tilby.sql +12 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/0016_snapshot.json +3326 -0
- package/apps/runtime/dist/db/migrations/tenant/meta/_journal.json +7 -0
- package/apps/runtime/dist/db/schema.js +20 -0
- package/apps/runtime/dist/docs/user/build-a-wizard.md +1 -1
- package/apps/runtime/dist/engine/runner.js +31 -10
- package/apps/runtime/dist/engine/steps.js +15 -4
- package/apps/runtime/dist/harness/index.js +0 -4
- package/apps/runtime/dist/manage.js +7 -7
- package/apps/runtime/dist/model-errors.js +20 -7
- package/apps/runtime/dist/plugins/pro.js +0 -6
- package/apps/runtime/dist/render/convert.js +0 -3
- package/apps/runtime/dist/routes/runs.js +170 -23
- package/apps/runtime/dist/routes/studio.js +83 -9
- package/apps/runtime/dist/services/api.js +8 -6
- package/apps/runtime/dist/services/cloud.js +1 -0
- package/apps/runtime/dist/services/spaces.js +1 -0
- package/apps/runtime/dist/services/translations.js +303 -0
- package/apps/runtime/dist/services/wizards.js +3 -1
- package/apps/runtime/dist/store/index.js +0 -11
- package/apps/runtime/dist/texts.js +47 -39
- package/apps/web/dist/assets/{AboutDialog-L1hcshAX.js → AboutDialog-CkE7uZNL.js} +1 -1
- package/apps/web/dist/assets/{ChangelogDialog-DZLYVOkl.js → ChangelogDialog-BCS3WIRA.js} +1 -1
- package/apps/web/dist/assets/ChatView-DClGzMte.js +10 -0
- package/apps/web/dist/assets/EditorPage-Dg27sIZ7.js +3 -0
- package/apps/web/dist/assets/{FlowPreview-CTEJi5TQ.js → FlowPreview-D2haAZwo.js} +1 -1
- package/apps/web/dist/assets/{Harness-CApAHvJE.js → Harness-CGI6ZMTA.js} +2 -2
- package/apps/web/dist/assets/{NewWizardChannels-tst10rkV.js → NewWizardChannels-C4b_phHw.js} +1 -1
- package/apps/web/dist/assets/{NewWizardPage-BAKaUY1g.js → NewWizardPage-DhDXrjKX.js} +2 -2
- package/apps/web/dist/assets/OnboardingPage-DgySdBgo.js +1 -0
- package/apps/web/dist/assets/ProjectPage-dvtJn_3c.js +1 -0
- package/apps/web/dist/assets/PublicRunner-lP4sVF1q.js +1 -0
- package/apps/web/dist/assets/{ReadOnly-Bb8khbuH.js → ReadOnly-B-4l3bVt.js} +1 -1
- package/apps/web/dist/assets/RunDrawer-B2bsB9Z6.js +4 -0
- package/apps/web/dist/assets/RunnerView-BZ83HUnO.js +1 -0
- package/apps/web/dist/assets/SettingsPage-C0_wAa_j.js +1 -0
- package/apps/web/dist/assets/SetupPage-kuvBk0G0.js +1 -0
- package/apps/web/dist/assets/{SharePage-Bb-BIvAX.js → SharePage-COLVxXMI.js} +1 -1
- package/apps/web/dist/assets/changelog-CIYdRaa5.js +1 -0
- package/apps/web/dist/assets/{esm-pbWES-Cu.js → esm-BqbWrbsa.js} +1 -1
- package/apps/web/dist/assets/index-Da9Pvzpj.js +14 -0
- package/apps/web/dist/assets/index-DaKjB676.css +1 -0
- package/apps/web/dist/assets/{lock-C6LaSCq_.js → lock-BkN0Fai6.js} +1 -1
- package/apps/web/dist/assets/{phone-BUWpzNWn.js → phone-Dip_wSUZ.js} +1 -1
- package/apps/web/dist/assets/{settings-menu-yO8b8LjQ.js → settings-menu-B7eXkvba.js} +1 -1
- package/apps/web/dist/assets/ui-B9AOCT0v.js +134 -0
- package/apps/web/dist/assets/{upload-D89fyY2-.js → upload-DPQ4pwnl.js} +1 -1
- package/apps/web/dist/index.html +3 -3
- package/apps/web/dist/mcp/flow.html +54 -54
- package/node_modules/@engenty-wizards/plugin-sdk/dist/thread.js +34 -34
- package/node_modules/@engenty-wizards/shared/dist/definition.d.ts +19 -6
- package/node_modules/@engenty-wizards/shared/dist/definition.js +51 -10
- package/node_modules/@engenty-wizards/shared/dist/features.d.ts +0 -1
- package/node_modules/@engenty-wizards/shared/dist/features.js +0 -1
- package/node_modules/@engenty-wizards/shared/dist/marketplace.d.ts +0 -5
- package/node_modules/@engenty-wizards/shared/dist/marketplace.js +0 -5
- package/node_modules/@engenty-wizards/shared/dist/providers.d.ts +1 -1
- package/node_modules/@engenty-wizards/shared/dist/providers.js +1 -1
- package/node_modules/@engenty-wizards/shared/dist/run.d.ts +46 -4
- package/node_modules/@engenty-wizards/shared/dist/run.js +24 -9
- package/node_modules/@engenty-wizards/shared/dist/runner-texts.d.ts +506 -0
- package/node_modules/@engenty-wizards/shared/dist/runner-texts.js +483 -0
- package/node_modules/@engenty-wizards/shared/dist/texts.d.ts +11 -2
- package/node_modules/@engenty-wizards/shared/dist/texts.js +16 -8
- package/node_modules/@engenty-wizards/shared/dist/translation.d.ts +23 -0
- package/node_modules/@engenty-wizards/shared/dist/translation.js +154 -0
- package/package.json +1 -1
- package/apps/web/dist/assets/ChatView-GNHi9ZnZ.js +0 -10
- package/apps/web/dist/assets/EditorPage-COJunH8K.js +0 -3
- package/apps/web/dist/assets/OnboardingPage-Di8AuZj_.js +0 -1
- package/apps/web/dist/assets/ProjectPage-DaerYm8A.js +0 -1
- package/apps/web/dist/assets/PublicRunner-Hms0Vi88.js +0 -1
- package/apps/web/dist/assets/RunDrawer-DWaC_ryo.js +0 -4
- package/apps/web/dist/assets/RunnerView-D5BQ99ah.js +0 -1
- package/apps/web/dist/assets/SettingsPage-CQX6fKsa.js +0 -1
- package/apps/web/dist/assets/SetupPage-BZkbpN_V.js +0 -1
- package/apps/web/dist/assets/changelog-BUHje4CT.js +0 -1
- package/apps/web/dist/assets/index-BVWLhiGX.js +0 -14
- package/apps/web/dist/assets/index-DmQEcSlY.css +0 -1
- package/apps/web/dist/assets/ui-i5saQjmD.js +0 -134
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A wizard translated for its viewer, on request: what the person reads is written in their
|
|
3
|
+
* language, what the wizard runs on stays as the author wrote it. Never translated: ids,
|
|
4
|
+
* branches and their statements, the instructions of AI steps, `{{…}}` placeholders, and the
|
|
5
|
+
* values of choices — a choice shows a translated label and keeps its value.
|
|
6
|
+
*/
|
|
7
|
+
/** Fields whose `options` are choices the person reads (a slot's are dates, written by the runner). */
|
|
8
|
+
function choiceField(field) {
|
|
9
|
+
return field.kind === "select" || field.kind === "multiselect";
|
|
10
|
+
}
|
|
11
|
+
/** Every text of a definition the person reads, with the way to write it back. */
|
|
12
|
+
function visitTexts(def, visit, choices) {
|
|
13
|
+
visit(def.title, (t) => {
|
|
14
|
+
def.title = t;
|
|
15
|
+
});
|
|
16
|
+
visit(def.description, (t) => {
|
|
17
|
+
def.description = t;
|
|
18
|
+
});
|
|
19
|
+
visit(def.intro, (t) => {
|
|
20
|
+
def.intro = t;
|
|
21
|
+
});
|
|
22
|
+
for (const list of def.lists ?? []) {
|
|
23
|
+
visit(list.title, (t) => {
|
|
24
|
+
list.title = t;
|
|
25
|
+
});
|
|
26
|
+
visit(list.description, (t) => {
|
|
27
|
+
list.description = t;
|
|
28
|
+
});
|
|
29
|
+
for (const column of list.columns ?? []) {
|
|
30
|
+
visit(column.name, (t) => {
|
|
31
|
+
column.name = t;
|
|
32
|
+
});
|
|
33
|
+
const options = ("format" in column
|
|
34
|
+
? column.format
|
|
35
|
+
: undefined)?.options;
|
|
36
|
+
for (const option of options ?? []) {
|
|
37
|
+
visit(option.label, (t) => {
|
|
38
|
+
option.label = t;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
for (const connection of def.connections ?? []) {
|
|
44
|
+
visit(connection.title, (t) => {
|
|
45
|
+
connection.title = t;
|
|
46
|
+
});
|
|
47
|
+
visit(connection.description, (t) => {
|
|
48
|
+
connection.description = t;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
for (const step of def.steps) {
|
|
52
|
+
visit(step.title, (t) => {
|
|
53
|
+
step.title = t;
|
|
54
|
+
});
|
|
55
|
+
visit(step.description, (t) => {
|
|
56
|
+
step.description = t;
|
|
57
|
+
});
|
|
58
|
+
if ("working" in step) {
|
|
59
|
+
visit(step.working, (t) => {
|
|
60
|
+
step.working = t;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
// What an AI step's output fields hold: the headings a review and the result show them under.
|
|
64
|
+
if (step.type === "agent") {
|
|
65
|
+
for (const field of step.output?.fields ?? []) {
|
|
66
|
+
visit(field.description, (t) => {
|
|
67
|
+
field.description = t;
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (step.type === "page") {
|
|
72
|
+
visit(step.cta, (t) => {
|
|
73
|
+
step.cta = t;
|
|
74
|
+
});
|
|
75
|
+
for (const field of step.fields) {
|
|
76
|
+
visit(field.label, (t) => {
|
|
77
|
+
field.label = t;
|
|
78
|
+
});
|
|
79
|
+
visit(field.help, (t) => {
|
|
80
|
+
field.help = t;
|
|
81
|
+
});
|
|
82
|
+
visit(field.placeholder, (t) => {
|
|
83
|
+
field.placeholder = t;
|
|
84
|
+
});
|
|
85
|
+
for (const column of field.columns ?? []) {
|
|
86
|
+
visit(column.label, (t) => {
|
|
87
|
+
column.label = t;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (choiceField(field)) {
|
|
91
|
+
for (const option of field.options ?? []) {
|
|
92
|
+
choices(option, () => undefined);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (step.type === "result") {
|
|
98
|
+
visit(step.message, (t) => {
|
|
99
|
+
step.message = t;
|
|
100
|
+
});
|
|
101
|
+
for (const deliverable of step.deliverables) {
|
|
102
|
+
visit(deliverable.label, (t) => {
|
|
103
|
+
deliverable.label = t;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** The texts of a definition the person reads, each once, in the order they appear. */
|
|
110
|
+
export function wizardTexts(def) {
|
|
111
|
+
const seen = new Set();
|
|
112
|
+
const add = (text) => {
|
|
113
|
+
if (text?.trim()) {
|
|
114
|
+
seen.add(text);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
visitTexts(structuredClone(def), add, add);
|
|
118
|
+
return [...seen];
|
|
119
|
+
}
|
|
120
|
+
/** `{{…}}` placeholders and `{name}` gaps: what a translation keeps exactly. */
|
|
121
|
+
const KEPT = /\{\{[^}]*\}\}|\{\w+\}/g;
|
|
122
|
+
/** Whether a translated text keeps every placeholder and gap of its original, no more, no fewer. */
|
|
123
|
+
export function keepsPlaceholders(original, translated) {
|
|
124
|
+
const of = (text) => (text.match(KEPT) ?? []).sort().join("\u0000");
|
|
125
|
+
return of(original) === of(translated);
|
|
126
|
+
}
|
|
127
|
+
/** The texts of a definition a translation does not have yet. */
|
|
128
|
+
export function missingTexts(def, memory) {
|
|
129
|
+
return wizardTexts(def).filter((text) => !memory[text]);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* The definition in the viewer's language: a copy with every text the memory has written in,
|
|
133
|
+
* and the labels of the choices beside it (`labels[value]`), the values untouched.
|
|
134
|
+
*/
|
|
135
|
+
export function translateDefinition(def, memory) {
|
|
136
|
+
const copy = structuredClone(def);
|
|
137
|
+
const labels = {};
|
|
138
|
+
visitTexts(copy, (text, write) => {
|
|
139
|
+
const entry = text ? memory[text] : undefined;
|
|
140
|
+
if (entry) {
|
|
141
|
+
write(entry.text);
|
|
142
|
+
}
|
|
143
|
+
}, (value) => {
|
|
144
|
+
const entry = value ? memory[value] : undefined;
|
|
145
|
+
if (value && entry) {
|
|
146
|
+
labels[value] = entry.text;
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
return { def: copy, labels };
|
|
150
|
+
}
|
|
151
|
+
/** Whether every text of the memory came from the author, or some from a model. */
|
|
152
|
+
export function machineTranslated(memory, def) {
|
|
153
|
+
return wizardTexts(def).some((text) => memory[text]?.by !== "author");
|
|
154
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wizards",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.13",
|
|
4
4
|
"description": "Make a wish. Get your wizard. It guides you step by step. Let AI do the work. Runs on your machine, on the AI subscription you already have.",
|
|
5
5
|
"license": "FSL-1.1-MIT",
|
|
6
6
|
"homepage": "https://engenty.ai",
|
|
@@ -1,10 +0,0 @@
|
|
|
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,An as i,Cn as a,En as o,Ft as s,Gt as c,Ht as l,In as u,Mn as d,Mt as f,On as p,Rt as m,Ut as h,Vn as g,W as _,Wt as v,Yt as y,_t as b,cr as x,dt as S,ft as C,gn as w,gt as T,ht as E,ir as D,kn as O,lt as k,mt as A,nr as j,nt as M,p as N,pt as P,rn as F,rt as I,st as L,tt as R,ut as ee,vt as z,yr as B,zn as te}from"./ui-i5saQjmD.js";import{t as ne}from"./phone-BUWpzNWn.js";import{Pt as re,Q as ie,X as ae,Z as oe,jt as se,mt as ce,t as le,xt as ue}from"./index-BVWLhiGX.js";import{n as de}from"./RunnerView-D5BQ99ah.js";var fe={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`}]]};fe.node;var pe=x(fe),me={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`}]]};me.node;var he=x(me),ge={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`}]]};ge.node;var _e=x(ge),ve={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`}]]};ve.node;var ye=x(ve),be=B(),V=e(t(),1),H=e(n(),1),xe=typeof window<`u`&&window.matchMedia(`(pointer: coarse)`).matches;function Se({since:e}){let[t,n]=(0,V.useState)(Date.now());if((0,V.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,H.jsxs)(`span`,{className:`font-mono text-[0.8125rem] text-white/60 tabular-nums`,children:[i,`:`,a]})}function U({label:e,on:t,danger:n,busy:r,onClick:i,children:a}){return(0,H.jsx)(`button`,{type:`button`,"aria-label":e,title:e,"aria-pressed":t,disabled:r,onClick:i,className:h(`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,H.jsx)(m,{className:`size-5`}):a})}function Ce({voice:e}){let t=(0,V.useRef)(null),{captions:n}=e;return(0,V.useEffect)(()=>{n.length&&t.current?.scrollIntoView({block:`end`})},[n]),n.length?(0,H.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-4 sm:px-5`,children:(0,H.jsxs)(`ol`,{className:`mx-auto flex max-w-[720px] flex-col gap-2 py-2`,children:[n.map(e=>(0,H.jsx)(`li`,{className:h(`text-[0.9375rem] leading-snug`,e.who===`bot`?`text-white/95`:`text-right text-white/50`),children:e.text},e.id)),(0,H.jsx)(`div`,{ref:t})]})}):null}function we({voice:e,view:t,video:n,className:r}){let i=e.state===`live`,a=e.state===`connecting`,[s,c]=(0,V.useState)(null),[l,u]=(0,V.useState)(!1);(0,V.useEffect)(()=>{c(i?Date.now():null)},[i]);let d=async()=>{u(!1),await e.start(),n&&await e.startCamera()},f=()=>{e.stop(),u(!0)},_=n||e.camera,v=[...e.captions].reverse().find(e=>e.who===`bot`),b=[...e.captions].reverse().find(e=>e.who===`me`),x=e.speaking?y(`talk.speaking`):e.listening?y(`talk.listening`):i?y(`talk.live`):a?y(`talk.connecting`):l?y(`video.ended`):``;return(0,H.jsxs)(`section`,{className:h(`relative flex min-h-0 flex-col bg-neutral-950 text-white`,`safe-top`,r),children:[(0,H.jsxs)(`div`,{className:`flex h-14 shrink-0 items-center gap-3 px-4 sm:px-5`,children:[(0,H.jsx)(`div`,{className:`min-w-0 flex-1 truncate font-display font-semibold text-[1rem] tracking-tight`,children:t?.wizard.title??``}),x?(0,H.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[0.8125rem] text-white/70`,children:[i?(0,H.jsx)(`span`,{className:h(`size-2 rounded-full`,e.speaking?`animate-pulse-dot bg-emerald-400`:`bg-rose`)}):null,x]}):null,(0,H.jsx)(Se,{since:s})]}),(0,H.jsxs)(`div`,{className:h(`grid min-h-0 gap-2 px-3 pb-2 sm:px-4`,_?`flex-1 grid-cols-1 sm:grid-cols-2`:`shrink-0 grid-cols-1`,!_&&i&&e.captions.length?`h-[38%]`:_?``:`flex-1`),children:[(0,H.jsxs)(`div`,{className:h(`relative min-h-0 overflow-hidden rounded-2xl bg-neutral-900`,!_&&`hidden`),children:[(0,H.jsx)(`video`,{ref:e.video,muted:!0,playsInline:!0,autoPlay:!0,className:h(`absolute inset-0 h-full w-full object-cover`,e.facing===`user`&&`-scale-x-100`,e.camera?`block`:`hidden`)}),e.camera?null:(0,H.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-2 text-white/50`,children:[(0,H.jsx)(_e,{className:`size-8`}),(0,H.jsx)(`span`,{className:`text-[0.8125rem]`,children:y(`video.cameraOff`)})]}),(0,H.jsxs)(`span`,{className:`absolute bottom-2 left-3 rounded-md bg-black/50 px-2 py-0.5 text-[0.75rem]`,children:[y(`video.you`),e.muted?(0,H.jsx)(re,{className:`ml-1.5 inline size-3`}):null]})]}),(0,H.jsxs)(`div`,{className:h(`relative flex min-h-0 items-center justify-center overflow-hidden rounded-2xl transition-shadow`,_?`bg-neutral-900`:`bg-transparent`,_&&e.speaking&&`ring-2 ring-emerald-400/70`),children:[(0,H.jsx)(`div`,{className:h(`rounded-full transition-shadow duration-500`,!_&&e.listening&&`shadow-[0_0_80px_20px_rgba(244,63,94,0.25)]`,!_&&e.speaking&&`shadow-[0_0_80px_20px_rgba(52,211,153,0.3)]`,e.speaking&&`animate-breathe`),children:(0,H.jsx)(ce,{kind:t?.wizard.avatar??`round`,size:_?140:200,fluffy:!0,interactive:!1})}),_?(0,H.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]})]}),i&&!_?(0,H.jsx)(Ce,{voice:e}):i&&(v||b)?(0,H.jsx)(`div`,{className:`shrink-0 px-4 pb-2 sm:px-5`,children:(0,H.jsxs)(`div`,{className:`mx-auto max-w-[720px] space-y-1 text-center`,children:[b?(0,H.jsx)(`p`,{className:`line-clamp-1 text-[0.8125rem] text-white/50`,children:b.text}):null,v?(0,H.jsx)(`p`,{className:`line-clamp-3 text-[0.9375rem] text-white/95 leading-snug`,children:v.text}):null]})}):null,e.error?(0,H.jsx)(`p`,{className:`shrink-0 px-5 pb-2 text-center text-[0.8125rem] text-rose`,children:e.error}):null,(0,H.jsx)(`div`,{className:`flex shrink-0 items-center justify-center gap-3 px-4 pt-1 pb-4`,children:i?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(U,{label:y(e.muted?`video.unmute`:`video.mute`),on:!e.muted,onClick:e.toggleMute,children:e.muted?(0,H.jsx)(re,{className:`size-5`}):(0,H.jsx)(g,{className:`size-5`})}),(0,H.jsx)(U,{label:y(e.camera?`talk.cameraOff`:`talk.camera`),on:e.camera,onClick:()=>e.camera?e.stopCamera():void e.startCamera(),children:e.camera?(0,H.jsx)(o,{className:`size-5`}):(0,H.jsx)(_e,{className:`size-5`})}),e.camera&&xe?(0,H.jsx)(U,{label:y(`video.flip`),onClick:()=>void e.flipCamera(),children:(0,H.jsx)(p,{className:`size-5`})}):null,(0,H.jsx)(U,{label:y(`video.leave`),danger:!0,onClick:f,children:(0,H.jsx)(se,{className:`size-5`})})]}):(0,H.jsxs)(`div`,{className:`flex flex-col items-center gap-2`,children:[(0,H.jsxs)(`button`,{type:`button`,disabled:a||!t?.talk,onClick:()=>void d(),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:[a?(0,H.jsx)(m,{className:`size-4`}):n?(0,H.jsx)(o,{className:`size-5`}):(0,H.jsx)(g,{className:`size-5`}),y(l?`video.rejoin`:n?`video.join`:`talk.start`)]}),!l&&!e.error?(0,H.jsx)(`p`,{className:`max-w-sm text-center text-[0.75rem] text-white/50`,children:y(n?`video.hint`:`talk.joinHint`)}):null]})})]})}var Te=e=>F[e.kind]!==`device`,Ee=1024,De=4e3;function W(e,t){return e?e.length>t?`${e.slice(0,t)} …`:e:``}function Oe(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: ${v(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}: ${W(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=Te(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?` = ${W(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}": ${W(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 ke(e,t,n,r){let[i,a]=(0,V.useState)(`off`),[o,s]=(0,V.useState)(null),[c,l]=(0,V.useState)(!1),[u,d]=(0,V.useState)(!1),[f,p]=(0,V.useState)(!1),[m,h]=(0,V.useState)(`environment`),[g,v]=(0,V.useState)(!1),[b,x]=(0,V.useState)([]),S=(0,V.useRef)(null),C=(0,V.useRef)(null),w=(0,V.useRef)(0),T=(0,V.useRef)(!1);T.current=f;let E=(0,V.useRef)(null),D=(0,V.useRef)(null),O=(0,V.useRef)(null),k=(0,V.useRef)(null),A=(0,V.useRef)(t);A.current=t;let j=(0,V.useRef)(r);j.current=r;let M=(0,V.useRef)(n);M.current=n;let N=(0,V.useRef)(``),P=(0,V.useCallback)(e=>{let t=D.current;t&&t.readyState===`open`&&t.send(JSON.stringify(e))},[]),F=(0,V.useCallback)(()=>{let e=S.current;if(!T.current||!e||e.videoWidth===0)return null;let t=Math.min(1,Ee/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,V.useCallback)(()=>{for(let e of C.current?.getTracks()??[])e.stop();C.current=null,S.current&&(S.current.srcObject=null),p(!1)},[]),L=(0,V.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;h(n===`user`||n===`environment`?n:t),S.current&&(S.current.srcObject=e,await S.current.play().catch(()=>void 0)),p(!0)}catch(e){s(e.name===`NotAllowedError`?y(`talk.cameraDenied`):e.message)}},[]),R=(0,V.useCallback)(async()=>{let e=m===`user`?`environment`:`user`;I(),await L(e)},[m,I,L]),ee=(0,V.useCallback)(()=>{v(e=>{for(let t of k.current?.getAudioTracks()??[])t.enabled=e;return!e})},[]),z=(0,V.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=``,l(!1),d(!1),v(!1),a(`off`)},[I]);(0,V.useEffect)(()=>()=>z(),[z]);let B=(0,V.useCallback)(async(t,n)=>{let r=A.current,i=j.current,a=M.current;switch(t){case`get_state`:return r?Oe(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 _.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&&Te(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 _.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]),te=(0,V.useCallback)(async()=>{if(!E.current){s(null),x([]),a(`connecting`);try{let t=await _.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 i=document.createElement(`audio`);i.autoplay=!0,i.setAttribute(`playsinline`,``),document.body.append(i),O.current=i,r.ontrack=e=>{i.srcObject=e.streams[0]};for(let e of n.getTracks())r.addTrack(e,n);let o=r.createDataChannel(`oai-events`);D.current=o,o.onmessage=e=>{let t;try{t=JSON.parse(e.data)}catch{return}switch(t.type){case`output_audio_buffer.started`:l(!0);break;case`output_audio_buffer.stopped`:case`output_audio_buffer.cleared`:l(!1);break;case`input_audio_buffer.speech_started`:{d(!0);let e=Date.now()-w.current>De?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`:d(!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{}B(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`:s(String(t.error?.message??`error`))}},o.onopen=()=>{a(`live`);let e=A.current;e&&(N.current=Oe(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`}))},o.onclose=()=>{E.current===r&&z()};let c=await r.createOffer();await r.setLocalDescription(c);let u=await fetch(t.endpoint,{method:`POST`,headers:{authorization:`Bearer ${t.clientSecret}`,"content-type":`application/sdp`},body:c.sdp});if(!u.ok)throw Error(`${y(`talk.failed`)} (${u.status})`);await r.setRemoteDescription({type:`answer`,sdp:await u.text()})}catch(e){z(),s(e.name===`NotAllowedError`?y(`chat.micDenied`):e.message),a(`error`)}}},[e,B,F,P,z]);return(0,V.useEffect)(()=>{if(i!==`live`||!t)return;let e=Oe(t,r,f);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`})},[i,t,r,f,P]),{state:i,error:o,speaking:c,listening:u,start:te,stop:z,camera:f,facing:m,startCamera:L,stopCamera:I,flipCamera:R,muted:g,toggleMute:ee,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}),Ae=(0,V.createContext)(null),q=(0,V.createContext)(null);function je(){return(0,V.useContext)(q)?.voice??null}function Me({children:e}){let t=(0,V.useContext)(Ae);return t?(0,be.createPortal)(e,t):null}function Ne({header:e,footer:t,children:n}){let[r,i]=(0,V.useState)(null),a=(0,V.useRef)(null),o=(0,V.useRef)(null),s=(0,V.useRef)(!0);return(0,V.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,H.jsx)(Ae.Provider,{value:r,children:(0,H.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[e,(0,H.jsx)(`div`,{ref:a,className:`min-h-0 flex-1 overflow-y-auto overscroll-contain`,children:(0,H.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,H.jsxs)(`div`,{className:`shrink-0 border-border-soft border-t bg-background`,onPointerDownCapture:()=>{s.current=!0},onKeyDownCapture:()=>{s.current=!0},children:[(0,H.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,V.useContext)(q),r=(0,V.useMemo)(()=>t.map(e=>({key:e.key,who:e.who,spoken:!e.bare&&!e.wide})),[t]),i=(0,V.useCallback)(e=>{let t=document.querySelector(`[data-say="${CSS.escape(e)}"]`);return t?.querySelector(`[data-say-text]`)?.getAttribute(`data-say-text`)??t?.innerText??null},[]);ie(!!n?.readAloud,n?.lang??c,r,i);let a=[];for(let e of t){let t=a.at(-1);t&&t.who===`bot`&&e.who===`bot`?t.lines.push(e):a.push({who:e.who,lines:[e]})}return a.map((t,n)=>t.who===`bot`?(0,H.jsxs)(`div`,{className:`flex items-start gap-2.5`,children:[(0,H.jsx)(`div`,{className:`sticky top-1 shrink-0 pt-0.5`,children:(0,H.jsx)(ce,{kind:e,size:30,interactive:n>=a.length-2})}),(0,H.jsx)(`div`,{className:`flex min-w-0 flex-1 flex-col items-start gap-1.5`,children:t.lines.map(e=>(0,H.jsx)(`div`,{"data-anchor":e.anchor?``:void 0,"data-say":e.key,className:h(`animate-rise`,e.bare?`w-full pt-1`:`rounded-2xl rounded-tl-md text-[0.9375rem] text-ink leading-relaxed`,!e.bare&&(e.wide?h(`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,H.jsxs)(`div`,{className:`flex animate-rise flex-col items-end gap-1 pl-10`,children:[(0,H.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,H.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,H.jsx)(u,{className:`size-3`}),` `,y(`chat.change`)]}):null]},e.key)))}function Pe(){return(0,H.jsx)(`span`,{className:`inline-flex items-center gap-1 py-1.5`,role:`status`,"aria-label":y(`run.working`),children:[0,1,2].map(e=>(0,H.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,H.jsx)(`div`,{className:`flex flex-wrap items-center gap-2`,children:e})}var X=(e,t)=>G(e,(0,H.jsx)(Y,{children:t}),{bare:!0});function Z({onClick:e,children:t,primary:n,on:r,disabled:i,busy:a}){return(0,H.jsxs)(`button`,{type:`button`,"aria-pressed":r,disabled:i||a,onClick:e,className:h(`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,H.jsx)(m,{className:`size-4`}):null,t]})}function Fe({initial:e=``,placeholder:t,multiline:n,inputProps:r,busy:i,disabled:a,inputRef:s,onSend:c}){let[u,d]=(0,V.useState)(e),p=(0,V.useRef)(null),_=s??p,v=(0,V.useContext)(q),b=N(u,d,{endpoint:v?`/api/runs/${v.runId}/transcribe`:void 0}),x=!!v&&b.supported&&!a;(0,V.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,V.useEffect)(()=>{!E&&!a&&_.current?.focus()},[a,_]);let S=()=>{i||a||(b.listening&&b.toggle(),c(u)!==!1&&d(``))},C=b.listening?y(`chat.listening`):b.processing?y(`chat.transcribing`):t,w=v?.voice??null,T=!!v?.call,k=v&&!T&&(ae||x||w)?(0,H.jsxs)(`div`,{className:`mb-1 flex shrink-0 items-center`,children:[w?(0,H.jsx)(f,{label:y(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:h(`size-9`,w.state===`live`&&`bg-rose-tint text-rose hover:bg-rose-tint hover:text-rose`,w.state===`off`&&v.talk&&`bg-primary text-primary-foreground hover:bg-primary`),children:w.state===`connecting`?(0,H.jsx)(m,{className:`size-4`}):w.state===`live`?(0,H.jsx)(se,{className:`size-4`}):(0,H.jsx)(ne,{className:`size-4`})}):null,w?.state===`live`?(0,H.jsx)(f,{label:y(w.camera?`talk.cameraOff`:`talk.camera`),"aria-pressed":w.camera,onClick:()=>w.camera?w.stopCamera():void w.startCamera(),className:h(`size-9`,w.camera&&`text-ink`),children:w.camera?(0,H.jsx)(o,{className:`size-4`}):(0,H.jsx)(_e,{className:`size-4`})}):null,ae?(0,H.jsx)(f,{label:y(v.readAloud?`chat.readAloudOff`:`chat.readAloud`),"aria-pressed":v.readAloud,onClick:()=>v.setReadAloud(!v.readAloud),className:h(`size-9`,v.readAloud&&`text-ink`),children:v.readAloud?(0,H.jsx)(ue,{className:`size-4`}):(0,H.jsx)(ye,{className:`size-4`})}):null,x?(0,H.jsx)(f,{label:y(b.listening?`chat.dictateStop`:`chat.dictate`),"aria-pressed":b.listening,disabled:b.processing,onClick:b.toggle,className:h(`size-9`,b.listening&&`bg-rose-tint text-rose hover:bg-rose-tint hover:text-rose`),children:b.processing?(0,H.jsx)(m,{className:`size-4`}):b.listening?(0,H.jsx)(O,{className:`size-3.5 animate-pulse-dot fill-current`}):(0,H.jsx)(g,{className:`size-4`})}):null]}):null;return(0,H.jsxs)(`form`,{className:`pb-3`,onSubmit:e=>{e.preventDefault(),S()},children:[w&&!T?(0,H.jsx)(`video`,{ref:w.video,muted:!0,playsInline:!0,autoPlay:!0,className:h(`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,H.jsxs)(`div`,{className:h(`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`,a&&`opacity-60`),children:[k,n?(0,H.jsx)(l,{ref:_,minRows:1,maxRows:6,value:u,disabled:a,placeholder:C,autoCapitalize:`sentences`,onChange:e=>d(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!E&&!e.nativeEvent.isComposing&&(e.preventDefault(),S())},className:`min-h-11 border-0 bg-transparent py-2.5 shadow-none focus:ring-0`}):(0,H.jsx)(`input`,{ref:_,...r,value:u,disabled:a,placeholder:C,enterKeyHint:`send`,onChange:e=>d(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,H.jsx)(`button`,{type:`submit`,"aria-label":y(`chat.send`),title:y(`chat.send`),disabled:i||a,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:i?(0,H.jsx)(m,{className:`size-4`}):(0,H.jsx)(D,{className:`size-4`})})]}),b.error?(0,H.jsx)(`p`,{className:`mt-1.5 px-3 text-[0.75rem] text-rose`,children:b.error===`denied`?y(`chat.micDenied`):b.error}):T?null:w?.error?(0,H.jsx)(`p`,{className:`mt-1.5 px-3 text-[0.75rem] text-rose`,children:w.error}):w?.state===`live`?(0,H.jsx)(`p`,{className:`mt-1.5 px-3 text-[0.75rem] text-ink-3`,children:w.speaking?y(`talk.speaking`):w.listening?y(`talk.listening`):y(`talk.live`)}):v?.talk&&w?.state===`off`?(0,H.jsx)(`p`,{className:`mt-1.5 px-3 text-[0.75rem] text-ink-3`,children:y(`talk.hint`)}):null]})}function Q({placeholder:e=y(`chat.above`)}){return(0,H.jsx)(Me,{children:(0,H.jsx)(Fe,{disabled:!0,placeholder:e,onSend:()=>!1})})}function Ie(e){let t=F[e.kind];return t===`typed`&&!e.scan?`typed`:t===`tapped`?`tapped`:`control`}var Le=e=>e==null||e===``||Array.isArray(e)&&e.length===0;function Re(e,t){let n=e.kind===`toggle`||e.kind===`connection`||e.kind===`list`;if(Le(t))return e.required&&!n?y(`chat.required`):null;let r=String(t).trim();if(e.kind===`email`&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r))return y(`chat.badEmail`);if(e.kind===`url`)try{new URL(r)}catch{return y(`chat.badUrl`)}return e.kind===`number`&&!Number.isFinite(Number(r.replace(`,`,`.`)))?y(`chat.badNumber`):Array.isArray(t)&&e.multiple&&e.min&&t.length<e.min?y(`run.filesMin`,{n:t.length,min:e.min}):null}function ze(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 Be({field:e}){return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`span`,{className:`font-medium`,children:e.label}),e.help?(0,H.jsx)(`span`,{className:`mt-0.5 block text-[0.8125rem] text-ink-3`,children:e.help}):null]})}function Ve({step:e,only:t}){return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`span`,{className:`font-medium`,children:e.title}),e.description?(0,H.jsx)(`span`,{className:`mt-0.5 block text-ink-2`,children:e.description}):null,t?.help?(0,H.jsx)(`span`,{className:`mt-1 block text-[0.8125rem] text-ink-3`,children:t.help}):null]})}function He({field:e,value:t,runId:n}){if(e.kind===`connection`)return(0,H.jsx)(H.Fragment,{children:typeof t==`string`&&t?t:y(`chat.connected`)});if(e.kind===`list`)return(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,H.jsx)(j,{className:`size-4`}),` `,y(`chat.checked`)]});if(e.kind===`toggle`)return(0,H.jsx)(H.Fragment,{children:y(t===!0?`run.yes`:`run.no`)});if(Le(t))return(0,H.jsx)(`span`,{className:`italic opacity-80`,children:y(`chat.skipped`)});switch(e.kind){case`multiselect`:return(0,H.jsx)(H.Fragment,{children:t.join(`, `)});case`date`:{let e=new Date(`${String(t)}T00:00`);return(0,H.jsx)(H.Fragment,{children:Number.isNaN(e.getTime())?String(t):new Intl.DateTimeFormat(c,{dateStyle:`long`}).format(e)})}case`color`:return(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[(0,H.jsx)(`span`,{className:`size-4 rounded-full ring-1 ring-white/50`,style:{background:String(t)}}),String(t)]});case`image`:case`signature`:return(0,H.jsx)(`span`,{className:`-mx-1.5 flex flex-wrap gap-1.5`,children:(Array.isArray(t)?t:[String(t)]).map(t=>(0,H.jsx)(`img`,{src:r(`/api/runs/${n}/assets/${t}`),alt:``,className:h(`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,H.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,H.jsx)(te,{className:`size-4`}),` `,y(e===1?`chat.file`:`chat.files`,{n:e})]})}case`audio`:{let e=t.seconds;return(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,H.jsx)(g,{className:`size-4`}),` `,y(`chat.voice`),e?` · ${Math.round(e)} s`:``]})}case`location`:{let e=t;return(0,H.jsx)(H.Fragment,{children:e.label||`${e.lat?.toFixed(5)}, ${e.lng?.toFixed(5)}`})}case`items`:return(0,H.jsx)(H.Fragment,{children:y(`chat.rows`,{n:Array.isArray(t)?t.length:0})});default:return(0,H.jsx)(H.Fragment,{children:String(t)})}}function Ue(e,t,n,r,i,a){let o=[G(t,(0,H.jsx)(Ve,{step:e,only:a}))];for(let e of i)a||o.push(G(`${t}:${e.id}`,(0,H.jsx)(Be,{field:e}))),o.push(K(`${t}:${e.id}:a`,(0,H.jsx)(He,{field:e,value:n[e.id],runId:r})));return o}var We=(e,t)=>e.fields.filter(e=>!e.when&&!w(e)||t[e.id]!==void 0&&t[e.id]!==null);function Ge(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 i=`${t}:${r.id}`;if(r.type===`page`){let t=r.fields.length===1?r.fields[0]:void 0;n.push(...Ue(r,i,e.values,e.id,We(r,e.values),t))}else r.type===`review`&&(n.push(G(i,(0,H.jsx)(`span`,{className:`font-medium`,children:r.title}))),n.push(K(`${i}:a`,y(`run.accept`))))}let r=n.at(-1);return t&&r?.who===`me`&&(n[n.length-1]={...r,onEdit:t}),n}function Ke(e,t){return e.fields.filter(e=>!w(e)||t.decidedFields?.includes(e.id)).map(e=>t.options?.[e.id]?.length?{...e,options:t.options[e.id]}:e)}function qe({view:e,run:t,step:n,before:r}){let i=(0,V.useMemo)(()=>Ke(n,e),[n,e]),o=e.known??{},[s,c]=(0,V.useState)(()=>R(n,e)),[l,u]=(0,V.useState)(()=>n.fields.some(t=>e.values[t.id]!==void 0)?a(Ke(n,e),e.known??{},R(n,e)).slice(0,-1).map(e=>e.id):[]),[d,f]=(0,V.useState)({}),[p,m]=(0,V.useState)(!1),[h,g]=(0,V.useState)(!1),_=a(i,o,s),v=_.filter(e=>l.includes(e.id)),b=_.find(e=>!l.includes(e.id)),x=i.length===1?i[0]:void 0,S=v.at(-1),C=S?()=>u(e=>e.filter(e=>e!==S.id)):void 0;(0,V.useEffect)(()=>{let e=Object.keys(t.fieldErrors),n=a(i,o,s),r=n.findIndex(t=>e.includes(t.id));r>=0&&(u(n.slice(0,r).map(e=>e.id)),f(t.fieldErrors))},[t.fieldErrors]);let w=e=>{t.submitPage(n.id,e).then(g)},T=(0,V.useContext)(q),E=(0,V.useRef)(s);E.current=s;let D=T?.bindPage,O=(0,V.useRef)(w);O.current=w,(0,V.useEffect)(()=>{if(!D)return;let e=a(i,o,s);return D({step:n,fields:e,values:s,setField:(t,n)=>{let r=e.find(e=>e.id===t);return r?Re(r,n)||(c(e=>({...e,[t]:n})),u(e=>e.includes(t)?e:[...e,t]),f({}),null):`no such field on this page`},submit:()=>O.current(E.current)}),()=>D(null)},[D,n,i,o,s]);let A=e=>{if(!b)return!1;let t=Re(b,e);if(t)return f({[b.id]:t}),!1;let n={...s,[b.id]:e},r=[...l,b.id];return c(n),u(r),f({}),a(i,o,n).some(e=>!r.includes(e.id))||w(n),!0},j=[...r.map(e=>l.length?{...e,onEdit:void 0}:e),...Ue(n,`now:${n.id}`,s,e.id,v,x).map((e,t,n)=>t===n.length-1&&e.who===`me`&&b?{...e,onEdit:C}:e)];b?(Ie(b)===`control`?j.push(G(`now:${n.id}:${b.id}:control`,(0,H.jsx)(k,{field:b,value:s[b.id],values:s,runId:e.id,view:e,closed:e.closed?.[b.id],onChange:e=>c(t=>({...t,[b.id]:e})),onBusy:m}),{wide:!0})):x||j.push(G(`now:${n.id}:${b.id}`,(0,H.jsx)(Be,{field:b}))),d[b.id]&&j.push(G(`now:${n.id}:${b.id}:error`,d[b.id],{tone:`error`}))):t.busy||h?j.push(G(`sending`,(0,H.jsx)(Pe,{}))):t.error&&j.push(G(`send-error`,t.error,{tone:`error`}));let M=(0,H.jsx)(Q,{});if(h||!b&&l.length>0&&t.busy)M=(0,H.jsx)(Q,{placeholder:y(`run.working`)});else if(!b)j.push(X(`now:${n.id}:go`,(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(Z,{primary:!0,busy:t.busy,onClick:()=>w(s),children:n.cta||y(`run.next`)}),C?(0,H.jsx)(Z,{onClick:C,disabled:t.busy,children:y(`run.back`)}):null]})));else{let r=Ie(b),i=!b.required&&b.kind!==`connection`&&b.kind!==`list`?(0,H.jsx)(Z,{onClick:()=>A(void 0),children:y(`chat.skip`)}):null;if(r===`typed`){i&&j.push(X(`now:${n.id}:${b.id}:replies`,i));let e=s[b.id];M=(0,H.jsx)(Me,{children:(0,H.jsx)(Fe,{initial:Le(e)?``:String(e),multiline:b.kind===`textarea`,placeholder:b.placeholder||(x?b.label:y(`chat.placeholder`)),inputProps:Je(b),busy:t.busy,onSend:e=>A(ze(b,e))},b.id)})}else if(r===`tapped`)j.push(G(`now:${n.id}:${b.id}:replies`,(0,H.jsx)(Ye,{field:b,view:e,value:s[b.id],onAnswer:A}),{bare:!0}));else{let e=_.filter(e=>!l.includes(e.id)).length===1;j.push(X(`now:${n.id}:${b.id}:replies`,(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(Z,{primary:!0,disabled:p,onClick:()=>A(s[b.id]),children:e&&n.cta?n.cta:y(`chat.send`)}),i]})))}}return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(J,{avatar:e.wizard.avatar,lines:j}),M]})}function Je(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 Ye({field:e,view:t,value:n,onAnswer:r}){let i=new Set(t.closed?.[e.id]?.values.map(String)),[a,o]=(0,V.useState)(Array.isArray(n)?n:[]);if(e.kind===`toggle`)return(0,H.jsxs)(Y,{children:[(0,H.jsx)(Z,{on:n===!1,disabled:i.has(`false`),onClick:()=>r(!1),children:y(`run.no`)}),(0,H.jsx)(Z,{on:n===!0,disabled:i.has(`true`),onClick:()=>r(!0),children:y(`run.yes`)})]});let s=e.options??[];return e.kind===`multiselect`?(0,H.jsxs)(Y,{children:[s.map(e=>(0,H.jsx)(Z,{on:a.includes(e),onClick:()=>o(t=>t.includes(e)?t.filter(t=>t!==e):s.filter(n=>n===e||t.includes(n))),children:e},e)),(0,H.jsx)(Z,{primary:!0,disabled:e.required&&!a.length,onClick:()=>r(a),children:a.length||e.required?y(`chat.send`):y(`chat.skip`)})]}):(0,H.jsxs)(Y,{children:[s.map(e=>(0,H.jsx)(Z,{on:n===e,disabled:i.has(e),onClick:()=>r(e),children:e},e)),e.required?null:(0,H.jsx)(Z,{onClick:()=>r(void 0),children:y(`chat.skip`)})]})}function Xe({view:e}){let t=(0,V.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,V.useState)(Date.now());(0,V.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(Qe),u=[...new Set(s.map(e=>e.asset).filter(e=>!!e))];return(0,H.jsxs)(`div`,{className:h(`flex max-w-full flex-col gap-1`,l?`w-full`:`w-96`),"data-say-text":t?.message??e.step?.title??y(`run.working`),children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,H.jsx)(Pe,{}),(0,H.jsx)(`span`,{className:`font-medium`,children:t?.message??e.step?.title??y(`run.working`)}),(0,H.jsx)(`span`,{className:`text-[0.75rem] text-ink-4 tabular-nums`,children:y(`run.elapsed`,{s:Math.max(0,Math.round((a-n)/1e3))})})]}),c&&c!==l?(0,H.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[0.8125rem] text-ink-3`,children:[(0,H.jsx)(i,{className:`size-3.5 shrink-0 animate-breathe text-ember`}),(0,H.jsx)(`span`,{className:`truncate`,children:v(c)})]}):null,l&&e.status===`running`?(0,H.jsx)(et,{runId:e.id,event:l}):null,u.length?(0,H.jsx)(`div`,{className:`mt-1.5 flex flex-wrap gap-1.5`,children:u.slice(-6).map(t=>(0,H.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 Ze=new Set([`opens`,`clicks`,`clicksOn`,`types`,`typesText`,`selects`,`scrolls`,`presses`,`goesBack`,`waitsForPage`,`fastLoop`,`looksAtPage`,`personDrives`,`agentDrives`]);function Qe(e){return!!e.note&&Ze.has(e.note.code)}var $e=1e4;function et({runId:e,event:t}){let[n,r]=(0,V.useState)(null),[i,a]=(0,V.useState)(`agent`),[o,s]=(0,V.useState)(!1),c=t.note?.code;if((0,V.useEffect)(()=>{c===`personDrives`?a(`person`):c===`agentDrives`&&a(`agent`)},[c]),(0,V.useEffect)(()=>{let t=()=>_.get(`/api/runs/${e}/browser/seat`).then(e=>a(e.seat)).catch(()=>void 0);if(t(),i!==`person`)return;let n=setInterval(t,$e);return()=>clearInterval(n)},[e,i]),n!==null&&n>=t.id)return null;let l=i===`person`,u=async()=>{s(!0);try{let t=await _.post(`/api/runs/${e}/browser/seat`,{to:l?`agent`:`person`});a(t.seat)}catch{}finally{s(!1)}};return(0,H.jsx)(z,{runId:e,driving:l,caption:v(t),hint:y(`browser.driving`),onBroken:()=>r(t.id),className:`mt-1.5`,action:(0,H.jsxs)(`button`,{type:`button`,disabled:o,onClick:()=>void u(),className:h(`flex h-8 items-center gap-1.5 rounded-full px-3 font-medium text-[0.8125rem] shadow-soft transition-colors disabled:opacity-60`,l?`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:[l?(0,H.jsx)(he,{className:`size-3.5`}):(0,H.jsx)(pe,{className:`size-3.5`}),y(l?`browser.handBack`:`browser.takeOver`)]})},n??0)}function $({children:e,end:t}){return(0,H.jsxs)(`div`,{className:`mb-3 flex flex-wrap items-center justify-between gap-2`,children:[(0,H.jsx)(`h3`,{className:`font-display font-semibold text-[1rem]`,children:e}),t]})}function tt({view:e,run:t,step:n,before:r,asked:i,onNote:a}){let o=e.shown.filter(e=>e.output),[s,c]=(0,V.useState)(o.length===1?o[0].step.id:null),l=(0,V.useRef)(null),u=[...r,...i.map((e,t)=>K(`review:${n.id}:asked:${t}`,e)),G(`review:${n.id}`,(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`span`,{className:`font-medium`,children:n.title}),n.description?(0,H.jsx)(`span`,{className:`mt-0.5 block text-ink-2`,children:n.description}):null]}),{anchor:!0}),...o.map(({step:t,output:r})=>G(`review:${n.id}:${t.id}`,(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)($,{children:t.title}),(0,H.jsx)(L,{base:`/api/runs/${e.id}`,step:t,output:r,onSurfaceAction:n.regenerate?()=>{c(t.id),l.current?.focus()}:void 0})]}),{wide:!0})),...e.lists.map(t=>G(`review:${n.id}:list:${t.def.id}`,(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)($,{children:t.def.title}),t.def.check?(0,H.jsx)(S,{runId:e.id,list:t}):(0,H.jsx)(P,{runId:e.id,list:t,editable:!0})]}),{wide:!0}))];t.error&&u.push(G(`review-error`,t.error,{tone:`error`}));let d=n.regenerate&&o.length>0;return u.push(X(`review:${n.id}:replies`,(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(Z,{primary:!0,busy:t.busy,onClick:()=>void t.accept(n.id),children:[(0,H.jsx)(j,{className:`size-4`}),` `,y(`run.accept`)]}),d&&o.length>1?o.map(({step:e})=>(0,H.jsx)(Z,{on:s===e.id,onClick:()=>c(e.id),children:e.title},e.id)):null]}))),(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(J,{avatar:e.wizard.avatar,lines:u}),d?(0,H.jsx)(Me,{children:(0,H.jsx)(Fe,{multiline:!0,inputRef:l,busy:t.busy,placeholder:o.length>1&&!s?y(`run.feedbackPick`):y(`run.feedbackPlaceholder`),disabled:!s,onSend:e=>{let r=e.trim();return!r||!s?!1:(a(r),t.regenerate(n.id,s,r),!0)}})}):(0,H.jsx)(Q,{})]})}function nt({view:e,run:t,step:n,before:r,onRestart:i}){let a=e.shown.filter(e=>e.output),o=`/api/runs/${e.id}`,s=[...r,G(`result:${n.id}`,(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`span`,{className:`font-display font-semibold text-[1.0625rem]`,children:n.title}),n.message?(0,H.jsx)(`span`,{className:`mt-0.5 block text-ink-2`,children:n.message}):null]}),{anchor:!0}),...a.map(({step:e,output:t,formats:n,label:r})=>G(`result:${e.id}`,(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)($,{end:(0,H.jsx)(I,{base:o,stepId:e.id,formats:n,title:r??e.title}),children:r??e.title}),(0,H.jsx)(L,{base:o,step:e,output:t}),t?.assets?.some(e=>e.ai)?(0,H.jsx)(`p`,{className:`mt-3 text-[0.75rem] text-ink-3 leading-relaxed`,children:y(`ai.publish`)}):null]}),{wide:!0})),...e.lists.map(t=>G(`result:list:${t.def.id}`,(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)($,{end:(0,H.jsx)(C,{runId:e.id,list:t}),children:t.label??t.def.title}),(0,H.jsx)(P,{runId:e.id,list:t,editable:!0})]}),{wide:!0}))];return s.push(X(`result:replies`,(0,H.jsxs)(H.Fragment,{children:[a.length?(0,H.jsx)(le,{runId:e.id,title:`${n.title} · ${e.wizard.title}`,initial:e.shareUrl?{url:e.shareUrl,expiresAt:e.expiresAt}:null}):null,i?(0,H.jsxs)(Z,{onClick:i,children:[(0,H.jsx)(d,{className:`size-4`}),` `,y(`run.again`)]}):null,e.canBack?(0,H.jsx)(Z,{onClick:()=>void t.back(),disabled:t.busy,children:y(`run.back`)}):null,e.keeps?(0,H.jsx)(`span`,{className:`ml-1`,children:(0,H.jsx)(A,{runId:e.id})}):null]}))),(0,H.jsx)(J,{avatar:e.wizard.avatar,lines:s})}function rt({runId:e,onRestart:t,onView:n,header:r,footer:i,talk:a=!1,call:o=!1}){let l=de(e),{view:u}=l,[f,p]=(0,V.useState)(null),h=ke(e,u,l,f);(0,V.useEffect)(()=>{n?.(u)},[u,n]);let[g,_]=oe(),v=(0,V.useMemo)(()=>({runId:e,lang:u?.lang??c,readAloud:g,setReadAloud:_,voice:u?.talk?h:null,talk:a,call:!!o,bindPage:p}),[e,u?.lang,u?.talk,g,_,h,a,o]);T(u?.status===`running`&&!u.ask),M(u);let[x,S]=(0,V.useState)({}),[C,w]=(0,V.useState)(null);(0,V.useEffect)(()=>{u&&u.status!==`running`&&w(null)},[u]);let E;if(l.notFound)E=(0,H.jsx)(`div`,{className:`py-24 text-center text-ink-3`,children:y(`run.notFound`)});else if(!u)E=(0,H.jsx)(`div`,{className:`flex justify-center py-24 text-ink-4`,children:(0,H.jsx)(m,{})});else{let e=u.step,n=u.status===`waiting_input`,r=Ge(u,u.canBack&&n&&!l.busy?()=>void l.back():void 0);if(u.status===`running`&&u.ask)E=(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(J,{avatar:u.wizard.avatar,lines:[...r,G(`ask:${u.ask.id}`,(0,H.jsx)(b,{runId:u.id,ask:u.ask}),{wide:!0})]}),(0,H.jsx)(Q,{})]});else if(u.status===`running`)E=(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(J,{avatar:u.wizard.avatar,lines:[...r,...C?[K(`note`,C)]:[],G(`working:${e?.id}`,(0,H.jsx)(Xe,{view:u}),{wide:u.events.some(t=>t.stepId===e?.id&&Qe(t))?`most`:void 0})]}),(0,H.jsx)(Q,{placeholder:y(`run.working`)})]});else if(u.status===`failed`)E=(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(J,{avatar:u.wizard.avatar,lines:[...r,G(`failed`,(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`span`,{className:`font-medium`,children:y(`run.failed`)}),u.error?(0,H.jsx)(`span`,{className:`mt-0.5 block`,children:(0,H.jsx)(s,{text:u.error})}):null]}),{tone:`error`}),X(`failed:replies`,(0,H.jsxs)(H.Fragment,{children:[(0,H.jsxs)(Z,{primary:!0,busy:l.busy,onClick:()=>void l.retry(),children:[(0,H.jsx)(d,{className:`size-4`}),` `,y(`run.retry`)]}),u.canBack?(0,H.jsx)(Z,{onClick:()=>void l.back(),disabled:l.busy,children:y(`run.back`)}):null]}))]}),(0,H.jsx)(Q,{})]});else if(u.status===`cancelled`)E=(0,H.jsx)(J,{avatar:u.wizard.avatar,lines:[...r,G(`cancelled`,y(`run.cancelled`)),...t?[X(`cancelled:replies`,(0,H.jsxs)(Z,{primary:!0,onClick:t,children:[(0,H.jsx)(d,{className:`size-4`}),` `,y(`run.again`)]}))]:[]]});else if(e?.type===`page`)E=(0,H.jsx)(qe,{view:u,run:l,step:e,before:r},e.id);else if(e?.type===`review`){let t=u.shown.map(e=>e.output?.at??``).join(`|`);E=(0,H.jsx)(tt,{view:u,run:l,step:e,before:r,asked:x[e.id]??[],onNote:t=>{w(t),S(n=>({...n,[e.id]:[...n[e.id]??[],t]}))}},`${e.id}:${t}`)}else E=e?.type===`result`?(0,H.jsx)(nt,{view:u,run:l,step:e,before:r,onRestart:t}):(0,H.jsx)(J,{avatar:u.wizard.avatar,lines:r})}return o?(0,H.jsx)(q.Provider,{value:v,children:(0,H.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col lg:flex-row`,children:[(0,H.jsx)(we,{voice:h,view:u,video:o===`video`,className:`h-[46dvh] shrink-0 lg:h-auto lg:min-h-0 lg:flex-1`}),(0,H.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,H.jsx)(Ne,{footer:i,children:E})})]})}):(0,H.jsx)(q.Provider,{value:v,children:(0,H.jsx)(Ne,{header:r,footer:i,children:E})})}export{J as a,Z as i,Ne as n,X as o,Q as r,je as s,rt as t};
|