expect-cli 0.0.14 → 0.0.15

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/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{n as e,r as t,t as n}from"./chunk-wdO_pP5q.js";import{a as r,i}from"./server-D776aGSk.js";import{createRequire as a}from"node:module";import{Array as o,Cause as s,Config as c,DateTime as l,Duration as u,Effect as d,Exit as f,FiberMap as p,FileSystem as m,Layer as h,Logger as g,Match as _,Option as v,Predicate as y,PubSub as b,Queue as x,Ref as S,References as C,Schema as w,ServiceMap as T,Stream as E,String as D}from"effect";import{Command as O}from"commander";import{Box as k,Static as A,Text as j,render as ee,useApp as te,useInput as ne,useStdout as M}from"ink";import{QueryClient as N,QueryClientProvider as re,useMutation as ie,useQuery as P}from"@tanstack/react-query";import{c as ae}from"react/compiler-runtime";import{createContext as F,useCallback as oe,useContext as I,useEffect as se,useMemo as ce,useRef as L,useState as R}from"react";import*as le from"node:child_process";import{exec as ue,execFile as z,execSync as de,spawnSync as fe}from"node:child_process";import{Fragment as pe,jsx as B,jsxs as V}from"react/jsx-runtime";import H from"figures";import U from"picocolors";import*as W from"node:path";import me,{join as he,normalize as ge}from"node:path";import*as _e from"node:url";import{fileURLToPath as ve,pathToFileURL as ye}from"node:url";import{z as be}from"zod";import{z as G}from"zod/v4";import{ChildProcess as xe,ChildProcessSpawner as Se}from"effect/unstable/process";import*as K from"@effect/platform-node/NodeServices";import*as Ce from"effect/Array";import*as q from"effect/String";import*as we from"effect/Function";import*as Te from"node:crypto";import{createHash as Ee}from"node:crypto";import{Buffer as De}from"node:buffer";import{execSync as Oe,spawn as ke}from"child_process";import{EventEmitter as Ae}from"node:events";import{FileSystem as je}from"effect/FileSystem";import*as Me from"node:os";import{platform as Ne}from"node:os";import*as Pe from"@effect/platform-node/NodeHttpClient";import*as Fe from"@effect/platform-node/NodeSocket";import{ChildProcessSpawner as Ie}from"effect/unstable/process/ChildProcessSpawner";import{request as Le}from"node:http";import*as Re from"node:fs/promises";import ze from"ink-spinner";import Be from"cli-truncate";import Ve from"string-width";import{create as He}from"zustand";import*as Ue from"effect/Data";import*as We from"@effect/platform-node/NodeFileSystem";import{dirname as Ge,posix as Ke,sep as qe}from"path";import*as Je from"node:fs";import{appendFileSync as Ye,createReadStream as Xe}from"node:fs";import{createInterface as Ze}from"node:readline";import{AsyncLocalStorage as Qe}from"node:async_hooks";import{DevTools as $e}from"effect/unstable/devtools";import*as et from"effect/unstable/observability/Otlp";import{createJSONStorage as tt,persist as nt}from"zustand/middleware";import*as rt from"effect/unstable/reactivity/AsyncResult";import*as it from"effect/unstable/reactivity/Atom";import{RegistryProvider as at,useAtom as ot,useAtomSet as st,useAtomValue as ct}from"@effect/atom-react";import lt from"pretty-ms";import{detectTerminal as ut}from"detect-terminal";import dt from"supports-terminal-graphics";import ft from"ink-link";import{Hono as pt}from"hono";import{proxy as mt}from"hono/proxy";import{serve as ht}from"@hono/node-server";import"node-notifier";import gt from"prompts";import _t from"ora";const vt=`0.0.14`,yt=`\x1B[?1049l`,bt=process.env.SUPPORT_CLICK===`true`||process.env.SUPPORT_CLICK===`1`,xt=[`lint`,`check`,`format`,`typecheck`,`type-check`],St=`expect-cli`,Ct={"pnpm-lock.yaml":`pnpm`,"pnpm-workspace.yaml":`pnpm`,"yarn.lock":`yarn`,"package-lock.json":`npm`,"npm-shrinkwrap.json":`npm`,"bun.lock":`bun`,"bun.lockb":`bun`,"deno.lock":`deno`},wt=()=>{},Tt=F({subscribeClick:()=>wt}),Et=/\x1b\[<(\d+);(\d+);(\d+)([Mm])|\x1b\[[\d;?<>=]*[A-Za-z~]|\[<[\d;]+[Mm]|\[\d+;\d+R|\[\?[\d;]+[a-z]/g,Dt=({children:e})=>{if(!bt)return B(pe,{children:e});let t=L(new Set),n=L(!1);if(!n.current){n.current=!0,process.stdout.write(`\x1B[?1003l\x1B[?1002l\x1B[?1000h\x1B[?1006h`);let e=process.stdin.emit.bind(process.stdin);process.stdin.emit=function(n,...r){if(n===`data`){let i=(typeof r[0]==`string`?r[0]:String(r[0])).replace(Et,(e,n,r,i,a)=>{if(n===`0`)for(let e of t.current)e({x:Number(r),y:Number(i)},a===`M`?`press`:`release`);return``});return i.length===0?!0:e(n,i)}return e(n,...r)}}let r=oe(e=>(t.current.add(e),()=>{t.current.delete(e)}),[]);return B(Tt.Provider,{value:{subscribeClick:r},children:e})},Ot=()=>{let e=ae(1);if(e[0]!==`35703fbc37b9d963e330527161df9fe36b70875a77771f1d737994ab88cecbb3`){for(let t=0;t<1;t+=1)e[t]=Symbol.for(`react.memo_cache_sentinel`);e[0]=`35703fbc37b9d963e330527161df9fe36b70875a77771f1d737994ab88cecbb3`}return I(Tt)},kt=/\x1b\[[\d;?<>=]*[A-Za-z~]|\[<[\d;]+[Mm]|\[\?[\d;]+[a-z]|\[\d+;\d+R/g,At=e=>bt?e.replace(kt,``):e,jt=e=>e&&e>0?e:80,Mt=e=>e&&e>0?e:24,Nt=()=>{let{stdout:e}=M(),[t,n]=R([jt(e.columns),Mt(e.rows)]),r=L(!1);return r.current||(r.current=!0,e.on(`resize`,()=>n([jt(e.columns),Mt(e.rows)]))),t},Pt=`NO_COLOR`in process.env,J={primary:Pt?``:`whiteBright`,secondary:Pt?``:`gray`,accent:Pt?``:`white`,error:Pt?``:`red`,warning:Pt?``:`yellow`,success:Pt?``:`green`,info:Pt?``:`gray`,text:Pt?``:`white`,textMuted:Pt?``:`gray`,border:Pt?``:`gray`,borderActive:Pt?``:`white`,borderSubtle:Pt?``:`blackBright`,shimmerBase:Pt?``:`#555555`,shimmerHighlight:Pt?``:`#ffffff`,inputBg:Pt?``:`#1e1e1e`,bannerBg:Pt?``:`#332b00`,errorBg:Pt?``:`#330b0b`},Ft={TEXT:J.text,DIM:J.textMuted,GREEN:J.success,PRIMARY:J.primary,SELECTION:J.accent,RED:J.error,BORDER:J.border,DIVIDER:J.borderSubtle,YELLOW:J.warning,PURPLE:J.secondary,CYAN:J.info,INPUT_BG:J.inputBg,BANNER_BG:J.bannerBg,ERROR_BG:J.errorBg},It=()=>Ft,Lt=e=>{let t=ae(21);if(t[0]!==`c91257771a99332d5805ee6c49b36d74b00fa9357a1ef3353879ee4c78179ae7`){for(let e=0;e<21;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`c91257771a99332d5805ee6c49b36d74b00fa9357a1ef3353879ee4c78179ae7`}let{color:n,children:r,marginTop:i,marginBottom:a,paddingX:o,ref:s}=e,c=o===void 0?1:o,[l]=Nt(),u;t[1]===l?u=t[2]:(u=`─`.repeat(l),t[1]=l,t[2]=u);let d;t[3]!==n||t[4]!==u?(d=B(j,{color:n,wrap:`truncate`,children:u}),t[3]=n,t[4]=u,t[5]=d):d=t[5];let f;t[6]!==r||t[7]!==c?(f=B(k,{flexDirection:`column`,paddingX:c,children:r}),t[6]=r,t[7]=c,t[8]=f):f=t[8];let p;t[9]===l?p=t[10]:(p=`─`.repeat(l),t[9]=l,t[10]=p);let m;t[11]!==n||t[12]!==p?(m=B(j,{color:n,wrap:`truncate`,children:p}),t[11]=n,t[12]=p,t[13]=m):m=t[13];let h;return t[14]!==a||t[15]!==i||t[16]!==s||t[17]!==d||t[18]!==f||t[19]!==m?(h=V(k,{flexDirection:`column`,width:`100%`,marginTop:i,marginBottom:a,ref:s,children:[d,f,m]}),t[14]=a,t[15]=i,t[16]=s,t[17]=d,t[18]=f,t[19]=m,t[20]=h):h=t[20],h},Rt=e=>{let t=e,n=1,r=1;for(;t;){if(!t.yogaNode)return{left:n,top:r};let e=t.yogaNode.getComputedLayout();n+=e.left,r+=e.top,t=t.parentNode}return{left:n,top:r}},zt=({onClick:e,children:t,fullWidth:n=!0})=>{let{subscribeClick:r}=Ot(),i=L(e);return i.current=e,B(k,{ref:oe(e=>{if(e)return r((t,n)=>{if(n!==`press`||!e.yogaNode)return;let r=Rt(e),a=e.yogaNode.getComputedLayout(),o=t.x<r.left||t.x>=r.left+a.width,s=t.y<r.top||t.y>=r.top+a.height;!o&&!s&&i.current?.()})},[r]),width:n?`100%`:void 0,children:t})},Bt=e=>/\w/.test(e),Vt=(e,t)=>{let n=t-1;for(;n>0&&!Bt(e[n]);)n--;for(;n>0&&Bt(e[n-1]);)n--;return n},Ht=(e,t)=>{let n=t;for(;n<e.length&&Bt(e[n]);)n++;for(;n<e.length&&!Bt(e[n]);)n++;return n},Ut=(e,t)=>{let n=e.split(`
2
+ import{n as e,r as t,t as n}from"./chunk-wdO_pP5q.js";import{a as r,i}from"./server-D776aGSk.js";import{createRequire as a}from"node:module";import{Array as o,Cause as s,Config as c,DateTime as l,Duration as u,Effect as d,Exit as f,FiberMap as p,FileSystem as m,Layer as h,Logger as g,Match as _,Option as v,Predicate as y,PubSub as b,Queue as x,Ref as S,References as C,Schema as w,ServiceMap as T,Stream as E,String as D}from"effect";import{Command as O}from"commander";import{Box as k,Static as A,Text as j,render as ee,useApp as te,useInput as ne,useStdout as M}from"ink";import{QueryClient as N,QueryClientProvider as re,useMutation as ie,useQuery as P}from"@tanstack/react-query";import{c as ae}from"react/compiler-runtime";import{createContext as F,useCallback as oe,useContext as I,useEffect as se,useMemo as ce,useRef as L,useState as R}from"react";import*as le from"node:child_process";import{exec as ue,execFile as z,execSync as de,spawnSync as fe}from"node:child_process";import{Fragment as pe,jsx as B,jsxs as V}from"react/jsx-runtime";import H from"figures";import U from"picocolors";import*as W from"node:path";import me,{join as he,normalize as ge}from"node:path";import*as _e from"node:url";import{fileURLToPath as ve,pathToFileURL as ye}from"node:url";import{z as be}from"zod";import{z as G}from"zod/v4";import{ChildProcess as xe,ChildProcessSpawner as Se}from"effect/unstable/process";import*as K from"@effect/platform-node/NodeServices";import*as Ce from"effect/Array";import*as q from"effect/String";import*as we from"effect/Function";import*as Te from"node:crypto";import{createHash as Ee}from"node:crypto";import{Buffer as De}from"node:buffer";import{execSync as Oe,spawn as ke}from"child_process";import{EventEmitter as Ae}from"node:events";import{FileSystem as je}from"effect/FileSystem";import*as Me from"node:os";import{platform as Ne}from"node:os";import*as Pe from"@effect/platform-node/NodeHttpClient";import*as Fe from"@effect/platform-node/NodeSocket";import{ChildProcessSpawner as Ie}from"effect/unstable/process/ChildProcessSpawner";import{request as Le}from"node:http";import*as Re from"node:fs/promises";import ze from"ink-spinner";import Be from"cli-truncate";import Ve from"string-width";import{create as He}from"zustand";import*as Ue from"effect/Data";import*as We from"@effect/platform-node/NodeFileSystem";import{dirname as Ge,posix as Ke,sep as qe}from"path";import*as Je from"node:fs";import{appendFileSync as Ye,createReadStream as Xe}from"node:fs";import{createInterface as Ze}from"node:readline";import{AsyncLocalStorage as Qe}from"node:async_hooks";import{DevTools as $e}from"effect/unstable/devtools";import*as et from"effect/unstable/observability/Otlp";import{createJSONStorage as tt,persist as nt}from"zustand/middleware";import*as rt from"effect/unstable/reactivity/AsyncResult";import*as it from"effect/unstable/reactivity/Atom";import{RegistryProvider as at,useAtom as ot,useAtomSet as st,useAtomValue as ct}from"@effect/atom-react";import lt from"pretty-ms";import{detectTerminal as ut}from"detect-terminal";import dt from"supports-terminal-graphics";import ft from"ink-link";import{Hono as pt}from"hono";import{proxy as mt}from"hono/proxy";import{serve as ht}from"@hono/node-server";import"node-notifier";import gt from"prompts";import _t from"ora";const vt=`0.0.15`,yt=`\x1B[?1049l`,bt=process.env.SUPPORT_CLICK===`true`||process.env.SUPPORT_CLICK===`1`,xt=[`lint`,`check`,`format`,`typecheck`,`type-check`],St=`expect-cli`,Ct={"pnpm-lock.yaml":`pnpm`,"pnpm-workspace.yaml":`pnpm`,"yarn.lock":`yarn`,"package-lock.json":`npm`,"npm-shrinkwrap.json":`npm`,"bun.lock":`bun`,"bun.lockb":`bun`,"deno.lock":`deno`},wt=()=>{},Tt=F({subscribeClick:()=>wt}),Et=/\x1b\[<(\d+);(\d+);(\d+)([Mm])|\x1b\[[\d;?<>=]*[A-Za-z~]|\[<[\d;]+[Mm]|\[\d+;\d+R|\[\?[\d;]+[a-z]/g,Dt=({children:e})=>{if(!bt)return B(pe,{children:e});let t=L(new Set),n=L(!1);if(!n.current){n.current=!0,process.stdout.write(`\x1B[?1003l\x1B[?1002l\x1B[?1000h\x1B[?1006h`);let e=process.stdin.emit.bind(process.stdin);process.stdin.emit=function(n,...r){if(n===`data`){let i=(typeof r[0]==`string`?r[0]:String(r[0])).replace(Et,(e,n,r,i,a)=>{if(n===`0`)for(let e of t.current)e({x:Number(r),y:Number(i)},a===`M`?`press`:`release`);return``});return i.length===0?!0:e(n,i)}return e(n,...r)}}let r=oe(e=>(t.current.add(e),()=>{t.current.delete(e)}),[]);return B(Tt.Provider,{value:{subscribeClick:r},children:e})},Ot=()=>{let e=ae(1);if(e[0]!==`35703fbc37b9d963e330527161df9fe36b70875a77771f1d737994ab88cecbb3`){for(let t=0;t<1;t+=1)e[t]=Symbol.for(`react.memo_cache_sentinel`);e[0]=`35703fbc37b9d963e330527161df9fe36b70875a77771f1d737994ab88cecbb3`}return I(Tt)},kt=/\x1b\[[\d;?<>=]*[A-Za-z~]|\[<[\d;]+[Mm]|\[\?[\d;]+[a-z]|\[\d+;\d+R/g,At=e=>bt?e.replace(kt,``):e,jt=e=>e&&e>0?e:80,Mt=e=>e&&e>0?e:24,Nt=()=>{let{stdout:e}=M(),[t,n]=R([jt(e.columns),Mt(e.rows)]),r=L(!1);return r.current||(r.current=!0,e.on(`resize`,()=>n([jt(e.columns),Mt(e.rows)]))),t},Pt=`NO_COLOR`in process.env,J={primary:Pt?``:`whiteBright`,secondary:Pt?``:`gray`,accent:Pt?``:`white`,error:Pt?``:`red`,warning:Pt?``:`yellow`,success:Pt?``:`green`,info:Pt?``:`gray`,text:Pt?``:`white`,textMuted:Pt?``:`gray`,border:Pt?``:`gray`,borderActive:Pt?``:`white`,borderSubtle:Pt?``:`blackBright`,shimmerBase:Pt?``:`#555555`,shimmerHighlight:Pt?``:`#ffffff`,inputBg:Pt?``:`#1e1e1e`,bannerBg:Pt?``:`#332b00`,errorBg:Pt?``:`#330b0b`},Ft={TEXT:J.text,DIM:J.textMuted,GREEN:J.success,PRIMARY:J.primary,SELECTION:J.accent,RED:J.error,BORDER:J.border,DIVIDER:J.borderSubtle,YELLOW:J.warning,PURPLE:J.secondary,CYAN:J.info,INPUT_BG:J.inputBg,BANNER_BG:J.bannerBg,ERROR_BG:J.errorBg},It=()=>Ft,Lt=e=>{let t=ae(21);if(t[0]!==`c91257771a99332d5805ee6c49b36d74b00fa9357a1ef3353879ee4c78179ae7`){for(let e=0;e<21;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`c91257771a99332d5805ee6c49b36d74b00fa9357a1ef3353879ee4c78179ae7`}let{color:n,children:r,marginTop:i,marginBottom:a,paddingX:o,ref:s}=e,c=o===void 0?1:o,[l]=Nt(),u;t[1]===l?u=t[2]:(u=`─`.repeat(l),t[1]=l,t[2]=u);let d;t[3]!==n||t[4]!==u?(d=B(j,{color:n,wrap:`truncate`,children:u}),t[3]=n,t[4]=u,t[5]=d):d=t[5];let f;t[6]!==r||t[7]!==c?(f=B(k,{flexDirection:`column`,paddingX:c,children:r}),t[6]=r,t[7]=c,t[8]=f):f=t[8];let p;t[9]===l?p=t[10]:(p=`─`.repeat(l),t[9]=l,t[10]=p);let m;t[11]!==n||t[12]!==p?(m=B(j,{color:n,wrap:`truncate`,children:p}),t[11]=n,t[12]=p,t[13]=m):m=t[13];let h;return t[14]!==a||t[15]!==i||t[16]!==s||t[17]!==d||t[18]!==f||t[19]!==m?(h=V(k,{flexDirection:`column`,width:`100%`,marginTop:i,marginBottom:a,ref:s,children:[d,f,m]}),t[14]=a,t[15]=i,t[16]=s,t[17]=d,t[18]=f,t[19]=m,t[20]=h):h=t[20],h},Rt=e=>{let t=e,n=1,r=1;for(;t;){if(!t.yogaNode)return{left:n,top:r};let e=t.yogaNode.getComputedLayout();n+=e.left,r+=e.top,t=t.parentNode}return{left:n,top:r}},zt=({onClick:e,children:t,fullWidth:n=!0})=>{let{subscribeClick:r}=Ot(),i=L(e);return i.current=e,B(k,{ref:oe(e=>{if(e)return r((t,n)=>{if(n!==`press`||!e.yogaNode)return;let r=Rt(e),a=e.yogaNode.getComputedLayout(),o=t.x<r.left||t.x>=r.left+a.width,s=t.y<r.top||t.y>=r.top+a.height;!o&&!s&&i.current?.()})},[r]),width:n?`100%`:void 0,children:t})},Bt=e=>/\w/.test(e),Vt=(e,t)=>{let n=t-1;for(;n>0&&!Bt(e[n]);)n--;for(;n>0&&Bt(e[n-1]);)n--;return n},Ht=(e,t)=>{let n=t;for(;n<e.length&&Bt(e[n]);)n++;for(;n<e.length&&!Bt(e[n]);)n++;return n},Ut=(e,t)=>{let n=e.split(`
3
3
  `),r=0;for(let e=0;e<n.length;e++){let i=n[e].length;if(t<=r+i)return{lineIndex:e,column:t-r,lines:n};r+=i+1}let i=n.length-1;return{lineIndex:i,column:n[i].length,lines:n}},Wt=(e,t,n)=>{let r=0;for(let n=0;n<t;n++)r+=e[n].length+1;return r+Math.min(n,e[t].length)},Gt=({value:e,placeholder:t=``,focus:n=!0,mask:r,highlightPastedText:i=!1,showCursor:a=!0,multiline:o=!1,onChange:s,onSubmit:c,onUpArrowAtTop:l,onDownArrowAtBottom:u})=>{let[d,f]=R({cursorOffset:(e||``).length,cursorWidth:0}),{cursorOffset:p,cursorWidth:m}=d,h=L({originalValue:e,focus:n,showCursor:a});(h.current.originalValue!==e||h.current.focus!==n||h.current.showCursor!==a)&&(h.current={originalValue:e,focus:n,showCursor:a},f(t=>{if(!n||!a)return t;let r=e||``;return t.cursorOffset>r.length-1?{cursorOffset:r.length,cursorWidth:0}:t}));let g=i?m:0,_=r?r.repeat(e.length):e,v=_,y=t?U.gray(t):void 0;if(a&&n){y=t.length>0?U.inverse(t[0])+U.gray(t.slice(1)):U.inverse(` `),v=_.length>0?``:U.inverse(` `);let e=0;for(let t of _){let n=e>=p-g&&e<=p;n&&t===`
4
4
  `?v+=U.inverse(` `)+`
5
5
  `:v+=n?U.inverse(t):t,e++}_.length>0&&p===_.length&&(v+=U.inverse(` `))}return ne((t,n)=>{if(!o&&(n.upArrow||n.downArrow)||n.ctrl&&t===`c`||n.tab||n.shift&&n.tab)return;let r=p,i=e,d=0,m=!1;if(o&&n.upArrow&&a){let{lineIndex:t,column:n,lines:i}=Ut(e,p);t>0?r=Wt(i,t-1,n):l?.(),m=!0}else if(o&&n.downArrow&&a){let{lineIndex:t,column:n,lines:i}=Ut(e,p);t<i.length-1?r=Wt(i,t+1,n):u?.(),m=!0}else if(n.ctrl&&t===`a`&&a)r=0,m=!0;else if(n.ctrl&&t===`e`&&a)r=e.length,m=!0;else if(n.ctrl&&t===`f`&&a)r=p+1,m=!0;else if(n.ctrl&&t===`b`&&a)r=p-1,m=!0;else if(n.ctrl&&t===`k`)i=e.slice(0,p),m=!0;else if(n.ctrl&&t===`u`)p>0&&(i=e.slice(p),r=0),m=!0;else if(n.ctrl&&t===`w`){if(p>0){let t=Vt(e,p);i=e.slice(0,t)+e.slice(p),r=t}m=!0}else if(n.ctrl&&t===`d`)p<e.length&&(i=e.slice(0,p)+e.slice(p+1)),m=!0;else if(n.ctrl&&t===`t`)p>0&&p<e.length&&(i=e.slice(0,p-1)+e[p]+e[p-1]+e.slice(p+1),r=p+1),m=!0;else if(n.meta&&t===`b`&&a)r=Vt(e,p),m=!0;else if(n.meta&&t===`f`&&a)r=Ht(e,p),m=!0;else if(n.meta&&(n.backspace||n.delete)){if(p>0){let t=Vt(e,p);i=e.slice(0,t)+e.slice(p),r=t}m=!0}else if(n.meta)return;if(!m)if(n.return)if(o&&n.shift)i=e.slice(0,p)+`
@@ -7,7 +7,7 @@ import{n as e,r as t,t as n}from"./chunk-wdO_pP5q.js";import{a as r,i}from"./ser
7
7
  `).map(Hn).filter(y.isNotUndefined);if(n.length===0)return this;let r=new e({...this,events:[...this.events,...n]});for(let e of n)r=r.applyMarker(e);return r}applyMarker(t){return t._tag===`StepStarted`?this.steps.some(e=>e.id===t.stepId)?new e({...this,steps:this.steps.map(e=>e.id===t.stepId?e.update({status:`active`,title:t.title,startedAt:v.some(l.nowUnsafe())}):e)}):new e({...this,steps:[...this.steps,new wn({id:t.stepId,title:t.title,instruction:t.title,expectedOutcome:``,routeHint:v.none(),status:`active`,summary:v.none(),startedAt:v.some(l.nowUnsafe()),endedAt:v.none()})]}):t._tag===`StepCompleted`?new e({...this,steps:this.steps.map(e=>e.id===t.stepId?e.update({status:`passed`,summary:v.some(t.summary),expectedOutcome:t.summary,endedAt:v.some(l.nowUnsafe())}):e)}):t._tag===`StepFailed`?new e({...this,steps:this.steps.map(e=>e.id===t.stepId?e.update({status:`failed`,summary:v.some(t.message),expectedOutcome:t.message,endedAt:v.some(l.nowUnsafe())}):e)}):t._tag===`StepSkipped`?new e({...this,steps:this.steps.map(e=>e.id===t.stepId?e.update({status:`skipped`,summary:v.some(t.reason),endedAt:v.some(l.nowUnsafe())}):e)}):this}get activeStep(){return this.steps.find(e=>e.status===`active`)}get completedStepCount(){return this.steps.filter(e=>e.status===`passed`||e.status===`failed`||e.status===`skipped`).length}get lastToolCallDisplayText(){let e=this.events.findLast(e=>e._tag===`ToolCall`);if(!(!e||e._tag!==`ToolCall`))return e.displayText}},tr=class extends er.extend(`@supervisor/TestReport`)({summary:w.String,screenshotPaths:w.Array(w.String),pullRequest:w.Option(w.suspend(()=>qn)),testCoverageReport:w.Option(En)}){get stepStatuses(){let e=new Map(this.steps.map(e=>[e.id,{status:`not-run`,summary:``}]));for(let t of this.events)t._tag===`StepCompleted`?e.set(t.stepId,{status:`passed`,summary:t.summary}):t._tag===`StepFailed`?e.set(t.stepId,{status:`failed`,summary:t.message}):t._tag===`StepSkipped`&&e.set(t.stepId,{status:`skipped`,summary:t.reason});return e}get status(){let e=this.stepStatuses;for(let{status:t}of e.values())if(t===`failed`)return`failed`;return`passed`}get toPlainText(){let e=this.stepStatuses,t=this.steps.filter(t=>e.get(t.id)?.status===`passed`).length,n=this.steps.filter(t=>e.get(t.id)?.status===`failed`).length,r=this.steps.filter(t=>e.get(t.id)?.status===`skipped`).length,i=this.status===`passed`?`✅`:`❌`,a=[`${t} passed`,`${n} failed`];r>0&&a.push(`${r} skipped`);let o=[`${i} ${this.title} \u2014 ${this.status.toUpperCase()}`,``,this.summary,``,`${a.join(`, `)} out of ${this.steps.length} steps`,``];for(let t of this.steps){let n=e.get(t.id),r=n?.status??`not-run`,i=r===`passed`?`✓`:r===`failed`?`✗`:r===`skipped`?`→`:`–`;o.push(` ${i} ${t.title}`),n?.summary&&o.push(` ${n.summary}`)}if(v.isSome(this.testCoverageReport)){let e=this.testCoverageReport.value;o.push(``),o.push(`Test coverage: ${e.percent}% (${e.coveredCount}/${e.totalCount} changed files have tests)`);let t=e.entries.filter(e=>!e.covered);if(t.length>0){o.push(` Untested files:`);for(let e of t)o.push(` - ${e.path}`)}}return o.join(`
8
8
  `)}},nr=class extends T.Service()(`@supervisor/Updates`,{make:d.gen(function*(){let e=yield*b.unbounded();return{publish:d.fn(`Updates.publish`)(function*(t){yield*b.publish(e,new Kn({content:t,receivedAt:l.nowUnsafe()}))}),stream:d.fn(`Updates.stream`)(function*(){return E.fromPubSub(e)})}})}){static layer=h.effect(this)(this.make)};const rr=w.Struct({name:w.String,value:w.String});var ir=class extends w.Class(`AgentStreamOptions`)({cwd:w.String,sessionId:w.Option(w.String),prompt:w.String,systemPrompt:w.Option(w.String),mcpEnv:w.optional(w.Array(rr))}){};const ar={authenticate:`authenticate`,initialize:`initialize`,session_cancel:`session/cancel`,session_close:`session/close`,session_fork:`session/fork`,session_list:`session/list`,session_load:`session/load`,session_new:`session/new`,session_prompt:`session/prompt`,session_resume:`session/resume`,session_set_config_option:`session/set_config_option`,session_set_mode:`session/set_mode`,session_set_model:`session/set_model`},or={fs_read_text_file:`fs/read_text_file`,fs_write_text_file:`fs/write_text_file`,session_request_permission:`session/request_permission`,session_update:`session/update`,terminal_create:`terminal/create`,terminal_kill:`terminal/kill`,terminal_output:`terminal/output`,terminal_release:`terminal/release`,terminal_wait_for_exit:`terminal/wait_for_exit`},sr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),terminal:G.boolean().optional().default(!1)}),cr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),label:G.string().nullish(),name:G.string(),optional:G.boolean().optional().default(!1),secret:G.boolean().optional().default(!0)}),lr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),description:G.string().nullish(),id:G.string(),name:G.string()}),ur=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),description:G.string().nullish(),id:G.string(),link:G.string().nullish(),name:G.string(),vars:G.array(cr)}),dr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),args:G.array(G.string()).optional(),description:G.string().nullish(),env:G.record(G.string(),G.string()).optional(),id:G.string(),name:G.string()}),fr=G.union([ur.and(G.object({type:G.literal(`env_var`)})),dr.and(G.object({type:G.literal(`terminal`)})),lr]),pr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),methodId:G.string()}),mr=G.object({_meta:G.record(G.string(),G.unknown()).nullish()}),hr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),blob:G.string(),mimeType:G.string().nullish(),uri:G.string()}),gr=G.object({_meta:G.record(G.string(),G.unknown()).nullish()}),_r=G.object({amount:G.number(),currency:G.string()}),vr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),terminalId:G.string()}),yr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),newText:G.string(),oldText:G.string().nullish(),path:G.string()}),br=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),name:G.string(),value:G.string()}),xr=G.union([G.literal(-32700),G.literal(-32600),G.literal(-32601),G.literal(-32602),G.literal(-32603),G.literal(-32800),G.literal(-32e3),G.literal(-32002),G.number().int().min(-2147483648,{message:`Invalid value: Expected int32 to be >= -2147483648`}).max(2147483647,{message:`Invalid value: Expected int32 to be <= 2147483647`})]),Sr=G.object({code:xr,data:G.unknown().optional(),message:G.string()}),Cr=G.unknown(),wr=G.unknown(),Tr=G.unknown(),Er=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),readTextFile:G.boolean().optional().default(!1),writeTextFile:G.boolean().optional().default(!1)}),Dr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),auth:sr.optional().default({terminal:!1}),fs:Er.optional().default({readTextFile:!1,writeTextFile:!1}),terminal:G.boolean().optional().default(!1)}),Or=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),name:G.string(),value:G.string()}),kr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),name:G.string(),title:G.string().nullish(),version:G.string()}),Ar=G.object({_meta:G.record(G.string(),G.unknown()).nullish()}),jr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),cursor:G.string().nullish(),cwd:G.string().nullish()}),Mr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),http:G.boolean().optional().default(!1),sse:G.boolean().optional().default(!1)}),Nr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),headers:G.array(Or),name:G.string(),url:G.string()}),Pr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),headers:G.array(Or),name:G.string(),url:G.string()}),Fr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),args:G.array(G.string()),command:G.string(),env:G.array(br),name:G.string()}),Ir=G.union([Nr.and(G.object({type:G.literal(`http`)})),Pr.and(G.object({type:G.literal(`sse`)})),Fr]),Lr=G.string(),Rr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),description:G.string().nullish(),modelId:Lr,name:G.string()}),zr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),cwd:G.string(),mcpServers:G.array(Ir)}),Br=G.string(),Vr=G.union([G.literal(`allow_once`),G.literal(`allow_always`),G.literal(`reject_once`),G.literal(`reject_always`)]),Hr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),kind:Vr,name:G.string(),optionId:Br}),Ur=G.union([G.literal(`high`),G.literal(`medium`),G.literal(`low`)]),Wr=G.union([G.literal(`pending`),G.literal(`in_progress`),G.literal(`completed`)]),Gr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),content:G.string(),priority:Ur,status:Wr}),Kr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),entries:G.array(Gr)}),qr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),audio:G.boolean().optional().default(!1),embeddedContext:G.boolean().optional().default(!1),image:G.boolean().optional().default(!1)}),Jr=G.number().int().gte(0).lte(65535),Yr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),clientCapabilities:Dr.optional().default({auth:{terminal:!1},fs:{readTextFile:!1,writeTextFile:!1},terminal:!1}),clientInfo:kr.nullish(),protocolVersion:Jr}),Xr=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),content:G.string()}),Zr=G.object({_meta:G.record(G.string(),G.unknown()).nullish()}),Qr=G.union([G.number(),G.string()]).nullable();G.object({_meta:G.record(G.string(),G.unknown()).nullish(),requestId:Qr});const $r=G.enum([`assistant`,`user`]),ei=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),audience:G.array($r).nullish(),lastModified:G.string().nullish(),priority:G.number().nullish()}),ti=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),annotations:ei.nullish(),data:G.string(),mimeType:G.string()}),ni=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),annotations:ei.nullish(),data:G.string(),mimeType:G.string(),uri:G.string().nullish()}),ri=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),annotations:ei.nullish(),description:G.string().nullish(),mimeType:G.string().nullish(),name:G.string(),size:G.number().nullish(),title:G.string().nullish(),uri:G.string()}),ii=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),optionId:Br}),ai=G.union([G.object({outcome:G.literal(`cancelled`)}),ii.and(G.object({outcome:G.literal(`selected`)}))]),oi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),outcome:ai}),si=G.object({_meta:G.record(G.string(),G.unknown()).nullish()}),ci=G.object({currentValue:G.boolean()}),li=G.string(),ui=G.string(),di=G.union([G.literal(`mode`),G.literal(`model`),G.literal(`thought_level`),G.string()]),fi=G.string(),pi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),description:G.string().nullish(),name:G.string(),value:fi}),mi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),group:li,name:G.string(),options:G.array(pi)}),hi=G.union([G.array(pi),G.array(mi)]),gi=G.object({currentValue:fi,options:hi}),_i=G.intersection(G.union([gi.and(G.object({type:G.literal(`select`)})),ci.and(G.object({type:G.literal(`boolean`)}))]),G.object({_meta:G.record(G.string(),G.unknown()).nullish(),category:di.nullish(),description:G.string().nullish(),id:ui,name:G.string()})),vi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),configOptions:G.array(_i)}),yi=G.object({_meta:G.record(G.string(),G.unknown()).nullish()}),bi=G.string(),xi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),sessionId:bi});G.object({method:G.string(),params:G.union([xi,Cr]).nullish()});const Si=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),sessionId:bi}),Ci=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),args:G.array(G.string()).optional(),command:G.string(),cwd:G.string().nullish(),env:G.array(br).optional(),outputByteLimit:G.number().nullish(),sessionId:bi}),wi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),cwd:G.string(),mcpServers:G.array(Ir).optional(),sessionId:bi}),Ti=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),sessionId:bi,terminalId:G.string()}),Ei=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),cwd:G.string(),mcpServers:G.array(Ir),sessionId:bi}),Di=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),limit:G.number().int().gte(0).max(4294967295,{message:`Invalid value: Expected uint32 to be <= 4294967295`}).nullish(),line:G.number().int().gte(0).max(4294967295,{message:`Invalid value: Expected uint32 to be <= 4294967295`}).nullish(),path:G.string(),sessionId:bi}),Oi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),sessionId:bi,terminalId:G.string()}),ki=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),cwd:G.string(),mcpServers:G.array(Ir).optional(),sessionId:bi}),Ai=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),cwd:G.string(),sessionId:bi,title:G.string().nullish(),updatedAt:G.string().nullish()}),ji=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),nextCursor:G.string().nullish(),sessions:G.array(Ai)}),Mi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),title:G.string().nullish(),updatedAt:G.string().nullish()}),Ni=G.object({_meta:G.record(G.string(),G.unknown()).nullish()}),Pi=G.string(),Fi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),currentModeId:Pi}),Ii=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),description:G.string().nullish(),id:Pi,name:G.string()}),Li=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),availableModes:G.array(Ii),currentModeId:Pi}),Ri=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),availableModels:G.array(Rr),currentModelId:Lr}),zi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),configOptions:G.array(_i).nullish(),models:Ri.nullish(),modes:Li.nullish(),sessionId:bi}),Bi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),configOptions:G.array(_i).nullish(),models:Ri.nullish(),modes:Li.nullish()}),Vi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),configOptions:G.array(_i).nullish(),models:Ri.nullish(),modes:Li.nullish(),sessionId:bi}),Hi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),configOptions:G.array(_i).nullish(),models:Ri.nullish(),modes:Li.nullish()}),Ui=G.object({_meta:G.record(G.string(),G.unknown()).nullish()}),Wi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),close:si.nullish(),fork:yi.nullish(),list:Ni.nullish(),resume:Ui.nullish()}),Gi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),loadSession:G.boolean().optional().default(!1),mcpCapabilities:Mr.optional().default({http:!1,sse:!1}),promptCapabilities:qr.optional().default({audio:!1,embeddedContext:!1,image:!1}),sessionCapabilities:Wi.optional().default({})}),Ki=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),agentCapabilities:Gi.optional().default({loadSession:!1,mcpCapabilities:{http:!1,sse:!1},promptCapabilities:{audio:!1,embeddedContext:!1,image:!1},sessionCapabilities:{}}),agentInfo:kr.nullish(),authMethods:G.array(fr).optional().default([]),protocolVersion:Jr}),qi=G.intersection(G.union([G.object({type:G.literal(`boolean`),value:G.boolean()}),G.object({value:fi})]),G.object({_meta:G.record(G.string(),G.unknown()).nullish(),configId:ui,sessionId:bi})),Ji=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),configOptions:G.array(_i)}),Yi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),modeId:Pi,sessionId:bi}),Xi=G.object({_meta:G.record(G.string(),G.unknown()).nullish()}),Zi=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),modelId:Lr,sessionId:bi}),Qi=G.object({_meta:G.record(G.string(),G.unknown()).nullish()}),$i=G.union([G.literal(`end_turn`),G.literal(`max_tokens`),G.literal(`max_turn_requests`),G.literal(`refusal`),G.literal(`cancelled`)]),ea=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),terminalId:G.string()}),ta=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),exitCode:G.number().int().gte(0).max(4294967295,{message:`Invalid value: Expected uint32 to be <= 4294967295`}).nullish(),signal:G.string().nullish()}),na=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),sessionId:bi,terminalId:G.string()}),ra=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),exitStatus:ta.nullish(),output:G.string(),truncated:G.boolean()}),ia=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),annotations:ei.nullish(),text:G.string()}),aa=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),mimeType:G.string().nullish(),text:G.string(),uri:G.string()}),oa=G.union([aa,hr]),sa=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),annotations:ei.nullish(),resource:oa}),ca=G.union([ia.and(G.object({type:G.literal(`text`)})),ni.and(G.object({type:G.literal(`image`)})),ti.and(G.object({type:G.literal(`audio`)})),ri.and(G.object({type:G.literal(`resource_link`)})),sa.and(G.object({type:G.literal(`resource`)}))]),la=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),content:ca}),ua=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),content:ca,messageId:G.string().nullish()}),da=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),messageId:G.string().nullish(),prompt:G.array(ca),sessionId:bi});G.object({id:Qr,method:G.string(),params:G.union([Yr,pr,zr,Ei,jr,wi,ki,Si,Yi,qi,da,Zi,wr]).nullish()});const fa=G.union([la.and(G.object({type:G.literal(`content`)})),yr.and(G.object({type:G.literal(`diff`)})),ea.and(G.object({type:G.literal(`terminal`)}))]),pa=G.string(),ma=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),line:G.number().int().gte(0).max(4294967295,{message:`Invalid value: Expected uint32 to be <= 4294967295`}).nullish(),path:G.string()}),ha=G.union([G.literal(`pending`),G.literal(`in_progress`),G.literal(`completed`),G.literal(`failed`)]),ga=G.union([G.literal(`read`),G.literal(`edit`),G.literal(`delete`),G.literal(`move`),G.literal(`search`),G.literal(`execute`),G.literal(`think`),G.literal(`fetch`),G.literal(`switch_mode`),G.literal(`other`)]),_a=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),content:G.array(fa).optional(),kind:ga.optional(),locations:G.array(ma).optional(),rawInput:G.unknown().optional(),rawOutput:G.unknown().optional(),status:ha.optional(),title:G.string(),toolCallId:pa}),va=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),content:G.array(fa).nullish(),kind:ga.nullish(),locations:G.array(ma).nullish(),rawInput:G.unknown().optional(),rawOutput:G.unknown().optional(),status:ha.nullish(),title:G.string().nullish(),toolCallId:pa}),ya=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),options:G.array(Hr),sessionId:bi,toolCall:va}),ba=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),hint:G.string()}),xa=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),description:G.string(),input:ba.nullish(),name:G.string()}),Sa=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),availableCommands:G.array(xa)}),Ca=G.object({cachedReadTokens:G.number().nullish(),cachedWriteTokens:G.number().nullish(),inputTokens:G.number(),outputTokens:G.number(),thoughtTokens:G.number().nullish(),totalTokens:G.number()}),wa=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),stopReason:$i,usage:Ca.nullish(),userMessageId:G.string().nullish()});G.union([G.object({id:Qr,result:G.union([Ki,mr,Vi,Bi,ji,zi,Hi,gr,Xi,Ji,wa,Qi,Tr])}),G.object({error:Sr,id:Qr})]);const Ta=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),cost:_r.nullish(),size:G.number(),used:G.number()}),Ea=G.union([ua.and(G.object({sessionUpdate:G.literal(`user_message_chunk`)})),ua.and(G.object({sessionUpdate:G.literal(`agent_message_chunk`)})),ua.and(G.object({sessionUpdate:G.literal(`agent_thought_chunk`)})),_a.and(G.object({sessionUpdate:G.literal(`tool_call`)})),va.and(G.object({sessionUpdate:G.literal(`tool_call_update`)})),Kr.and(G.object({sessionUpdate:G.literal(`plan`)})),Sa.and(G.object({sessionUpdate:G.literal(`available_commands_update`)})),Fi.and(G.object({sessionUpdate:G.literal(`current_mode_update`)})),vi.and(G.object({sessionUpdate:G.literal(`config_option_update`)})),Mi.and(G.object({sessionUpdate:G.literal(`session_info_update`)})),Ta.and(G.object({sessionUpdate:G.literal(`usage_update`)}))]),Da=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),sessionId:bi,update:Ea});G.object({method:G.string(),params:G.union([Da,Cr]).nullish()});const Oa=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),sessionId:bi,terminalId:G.string()}),ka=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),exitCode:G.number().int().gte(0).max(4294967295,{message:`Invalid value: Expected uint32 to be <= 4294967295`}).nullish(),signal:G.string().nullish()}),Aa=G.object({_meta:G.record(G.string(),G.unknown()).nullish(),content:G.string(),path:G.string(),sessionId:bi});G.object({id:Qr,method:G.string(),params:G.union([Aa,Di,ya,Ci,na,Oi,Oa,Ti,wr]).nullish()});const ja=G.object({_meta:G.record(G.string(),G.unknown()).nullish()});G.union([G.object({id:Qr,result:G.union([ja,Xr,oi,vr,ra,Zr,ka,Ar,Tr])}),G.object({error:Sr,id:Qr})]);function Ma(e,t){let n=new TextEncoder,r=new TextDecoder;return{readable:new ReadableStream({async start(e){let n=``,i=t.getReader();try{for(;;){let{value:t,done:a}=await i.read();if(a)break;if(!t)continue;n+=r.decode(t,{stream:!0});let o=n.split(`
9
9
  `);n=o.pop()||``;for(let t of o){let n=t.trim();if(n)try{let t=JSON.parse(n);e.enqueue(t)}catch(e){console.error(`Failed to parse JSON message:`,n,e)}}}}finally{i.releaseLock(),e.close()}}}),writable:new WritableStream({async write(t){let r=JSON.stringify(t)+`
10
- `,i=e.getWriter();try{await i.write(n.encode(r))}finally{i.releaseLock()}}})}}Symbol.asyncDispose;var Na=class{#e;constructor(e,t){let n=e(this);this.#e=new Pa(async(e,t)=>{switch(e){case or.fs_write_text_file:{let e=Aa.parse(t);return n.writeTextFile?.(e)}case or.fs_read_text_file:{let e=Di.parse(t);return n.readTextFile?.(e)}case or.session_request_permission:{let e=ya.parse(t);return n.requestPermission(e)}case or.terminal_create:{let e=Ci.parse(t);return n.createTerminal?.(e)}case or.terminal_output:{let e=na.parse(t);return n.terminalOutput?.(e)}case or.terminal_release:{let e=Oi.parse(t);return await n.releaseTerminal?.(e)??{}}case or.terminal_wait_for_exit:{let e=Oa.parse(t);return n.waitForTerminalExit?.(e)}case or.terminal_kill:{let e=Ti.parse(t);return await n.killTerminal?.(e)??{}}default:if(n.extMethod)return n.extMethod(e,t);throw Fa.methodNotFound(e)}},async(e,t)=>{switch(e){case or.session_update:{let e=Da.parse(t);return n.sessionUpdate(e)}default:if(n.extNotification)return n.extNotification(e,t);throw Fa.methodNotFound(e)}},t)}async initialize(e){return await this.#e.sendRequest(ar.initialize,e)}async newSession(e){return await this.#e.sendRequest(ar.session_new,e)}async loadSession(e){return await this.#e.sendRequest(ar.session_load,e)??{}}async unstable_forkSession(e){return await this.#e.sendRequest(ar.session_fork,e)}async listSessions(e){return await this.#e.sendRequest(ar.session_list,e)}async unstable_resumeSession(e){return await this.#e.sendRequest(ar.session_resume,e)}async unstable_closeSession(e){return await this.#e.sendRequest(ar.session_close,e)}async setSessionMode(e){return await this.#e.sendRequest(ar.session_set_mode,e)??{}}async unstable_setSessionModel(e){return await this.#e.sendRequest(ar.session_set_model,e)??{}}async setSessionConfigOption(e){return await this.#e.sendRequest(ar.session_set_config_option,e)}async authenticate(e){return await this.#e.sendRequest(ar.authenticate,e)??{}}async prompt(e){return await this.#e.sendRequest(ar.session_prompt,e)}async cancel(e){return await this.#e.sendNotification(ar.session_cancel,e)}async extMethod(e,t){return await this.#e.sendRequest(e,t)}async extNotification(e,t){return await this.#e.sendNotification(e,t)}get signal(){return this.#e.signal}get closed(){return this.#e.closed}},Pa=class{#e=new Map;#t=0;#n;#r;#i;#a=Promise.resolve();#o=new AbortController;#s;constructor(e,t,n){this.#n=e,this.#r=t,this.#i=n,this.#s=new Promise(e=>{this.#o.signal.addEventListener(`abort`,()=>e())}),this.#c()}get signal(){return this.#o.signal}get closed(){return this.#s}async#c(){let e=this.#i.readable.getReader();try{for(;;){let{value:t,done:n}=await e.read();if(n)break;if(t)try{this.#l(t)}catch(e){console.error(`Unexpected error during message processing:`,t,e),`id`in t&&t.id!==void 0&&this.#p({jsonrpc:`2.0`,id:t.id,error:{code:-32700,message:`Parse error`}})}}}finally{e.releaseLock(),this.#o.abort()}}async#l(e){if(`method`in e&&`id`in e){let t=await this.#u(e.method,e.params);`error`in t&&console.error(`Error handling request`,e,t.error),await this.#p({jsonrpc:`2.0`,id:e.id,...t})}else if(`method`in e){let t=await this.#d(e.method,e.params);`error`in t&&console.error(`Error handling notification`,e,t.error)}else `id`in e?this.#f(e):console.error(`Invalid message`,{message:e})}async#u(e,t){try{return{result:await this.#n(e,t)??null}}catch(e){if(e instanceof Fa)return e.toResult();if(e instanceof be.ZodError)return Fa.invalidParams(e.format()).toResult();let t;(e instanceof Error||typeof e==`object`&&e&&`message`in e&&typeof e.message==`string`)&&(t=e.message);try{return Fa.internalError(t?JSON.parse(t):{}).toResult()}catch{return Fa.internalError({details:t}).toResult()}}}async#d(e,t){try{return await this.#r(e,t),{result:null}}catch(e){if(e instanceof Fa)return e.toResult();if(e instanceof be.ZodError)return Fa.invalidParams(e.format()).toResult();let t;(e instanceof Error||typeof e==`object`&&e&&`message`in e&&typeof e.message==`string`)&&(t=e.message);try{return Fa.internalError(t?JSON.parse(t):{}).toResult()}catch{return Fa.internalError({details:t}).toResult()}}}#f(e){let t=this.#e.get(e.id);t?(`result`in e?t.resolve(e.result):`error`in e&&t.reject(e.error),this.#e.delete(e.id)):console.error(`Got response to unknown request`,e.id)}async sendRequest(e,t){let n=this.#t++,r=new Promise((e,t)=>{this.#e.set(n,{resolve:e,reject:t})});return await this.#p({jsonrpc:`2.0`,id:n,method:e,params:t}),r}async sendNotification(e,t){await this.#p({jsonrpc:`2.0`,method:e,params:t})}async#p(e){return this.#a=this.#a.then(async()=>{let t=this.#i.writable.getWriter();try{await t.write(e)}finally{t.releaseLock()}}).catch(e=>{console.error(`ACP write error:`,e)}),this.#a}},Fa=class e extends Error{code;data;constructor(e,t,n){super(t),this.code=e,this.name=`RequestError`,this.data=n}static parseError(t,n){return new e(-32700,`Parse error${n?`: ${n}`:``}`,t)}static invalidRequest(t,n){return new e(-32600,`Invalid request${n?`: ${n}`:``}`,t)}static methodNotFound(t){return new e(-32601,`"Method not found": ${t}`,{method:t})}static invalidParams(t,n){return new e(-32602,`Invalid params${n?`: ${n}`:``}`,t)}static internalError(t,n){return new e(-32603,`Internal error${n?`: ${n}`:``}`,t)}static authRequired(t,n){return new e(-32e3,`Authentication required${n?`: ${n}`:``}`,t)}static resourceNotFound(t){return new e(-32002,`Resource not found${t?`: ${t}`:``}`,t&&{uri:t})}toResult(){return{error:{code:this.code,message:this.message,data:this.data}}}toErrorResponse(){return{code:this.code,message:this.message,data:this.data}}};const Ia=y.compose(y.isObject,y.compose(y.hasProperty(`message`),y.Struct({message:y.isString}))),La=w.String.pipe(w.brand(`SessionId`)),Ra=180*1e3;var za=class extends w.ErrorClass(`AcpStreamError`)({_tag:w.tag(`AcpStreamError`),cause:w.Unknown}){displayName=`An unexpected error occurred while streaming`;message=`Streaming failed: ${this.cause}`},Ba=class extends w.ErrorClass(`AcpProviderNotInstalledError`)({_tag:w.tag(`AcpProviderNotInstalledError`),provider:pn}){displayName=`${D.capitalize(this.provider)} is not installed`;message=_.value(this.provider).pipe(_.when(`claude`,()=>"Claude Code is not installed. Install it from https://code.claude.com/docs/en/overview#native-install-recommended, or use codex agent with `expect -a codex`."),_.when(`codex`,()=>"Codex CLI is not installed. Install it with `npm install -g @openai/codex`, or use Claude Code by removing the `--agent codex` option."),_.orElse(()=>`Your coding agent CLI is not installed. Please install it and then re-run expect.`))},Va=class extends w.ErrorClass(`AcpProviderUnauthenticatedError`)({_tag:w.tag(`AcpProviderUnauthenticatedError`),provider:pn}){displayName=`Your ${this.provider} agent is not authenticated`;message=_.value(this.provider).pipe(_.when(`claude`,()=>"Please log in using `claude login`, and then re-run expect."),_.when(`codex`,()=>"Please log in using `codex login`, and then re-run expect."),_.orElse(()=>`Please sign in to your coding agent, and then re-run expect.`))},Ha=class extends w.ErrorClass(`AcpProviderUsageLimitError`)({_tag:w.tag(`AcpProviderUsageLimitError`),provider:pn}){displayName=`Your ${this.provider} agent has exceeded its usage limits`;message=`Usage limits exceeded for ${this.provider}. Please check your plan and billing.`},Ua=class extends w.ErrorClass(`AcpSessionCreateError`)({_tag:w.tag(`AcpSessionCreateError`),cause:w.Unknown}){displayName=`Creating a chat session failed`;message=`Creating session failed: ${s.pretty(s.fail(this.cause))}`},Wa=class extends w.ErrorClass(`AcpConnectionInitError`)({_tag:w.tag(`AcpConnectionInitError`),cause:w.Unknown}){message=`Init connection failed: ${this.cause}`},Ga=class extends w.ErrorClass(`AcpAdapterNotFoundError`)({_tag:w.tag(`AcpAdapterNotFoundError`),packageName:w.String,cause:w.Unknown}){message=`ACP adapter not found: ${this.packageName}. Error: ${s.pretty(s.fail(this.cause))}`},Ka=class e extends T.Service()(`@expect/AcpAdapter`){static layerCodex=h.effect(e)(d.try({try:()=>{let t=a(typeof __filename<`u`?__filename:import.meta.url).resolve(`@zed-industries/codex-acp/bin/codex-acp.js`);return e.of({provider:`codex`,bin:process.execPath,args:[t],env:{}})},catch:e=>new Ga({packageName:`@zed-industries/codex-acp`,cause:e})}));static layerClaude=h.effect(e)(d.gen(function*(){let t=yield*Se.ChildProcessSpawner,n=w.Struct({loggedIn:w.Boolean});return yield*xe.make(`claude`,[`auth`,`status`]).pipe(t.string,d.flatMap(w.decodeEffect(w.fromJsonString(n))),d.flatMap(({loggedIn:e})=>e?d.void:new Va({provider:`claude`}).asEffect()),d.catchReason(`PlatformError`,`NotFound`,()=>new Ba({provider:`claude`}).asEffect())),yield*d.try({try:()=>{let t=a(typeof __filename<`u`?__filename:import.meta.url).resolve(`@zed-industries/claude-agent-acp/dist/index.js`);return e.of({provider:`claude`,bin:process.execPath,args:[t],env:{}})},catch:e=>new Ga({packageName:`@zed-industries/claude-agent-acp`,cause:e})})})).pipe(h.provide(K.layer))},qa=class extends T.Service()(`@expect/AcpClient`,{make:d.gen(function*(){let e=yield*Ka;yield*d.annotateLogsScoped({adapter:e.args[0]}),yield*d.logInfo(`Initializing AcpClient`);let t=yield*Se.ChildProcessSpawner,n=yield*p.make(),r=yield*x.unbounded(),i=new Map,a={requestPermission:e=>Promise.resolve({outcome:{outcome:`selected`,optionId:e.options.find(e=>e.kind===`allow_always`||e.kind===`allow_once`)?.optionId??e.options[0].optionId}}),sessionUpdate:async({sessionId:e,update:t})=>{let n=i.get(La.makeUnsafe(e));if(n===void 0)return console.warn(`updates queue not found for session ${e}`);let r=w.decodeUnknownSync(fn)(t);x.offerUnsafe(n,r)}},o=yield*xe.make(e.bin,e.args,{env:e.env}).pipe(t.spawn);yield*d.annotateLogsScoped({pid:o.pid}),yield*d.logDebug(`ACP adapter subprocess spawned`),yield*E.fromQueue(r).pipe(E.run(o.stdin),d.forkScoped);let s=E.toReadableStream(o.stdout),c=new Na(e=>a,Ma(new WritableStream({write:e=>void x.offerUnsafe(r,e)}),s)),l=ve(new URL(`./browser-mcp.js`,import.meta.url)),f=e=>[{command:process.execPath,args:[l],env:[...e],name:`browser`}],m=yield*d.tryPromise({try:()=>c.initialize({protocolVersion:1}),catch:e=>new Wa({cause:e})});yield*d.logInfo(`ACP connection initialized`,{capabilities:m.agentCapabilities});let h=d.fn(`AcpClient.createSession`)(function*(t,n=[]){yield*d.annotateCurrentSpan({cwd:t});let r=f(n);return yield*d.tryPromise({try:()=>c.newSession({cwd:t,mcpServers:r}),catch:t=>{let n=Ia(t)?t.message:String(t);return[`authentication`].some(e=>n.toLowerCase().includes(e))?new Va({provider:e.provider}):[`out of usage`,`limits exceeded`,`usage exceeded`].some(e=>n.toLowerCase().includes(e))?new Ha({provider:e.provider}):new Ua({cause:t})}}).pipe(d.map(({sessionId:e})=>La.makeUnsafe(e)),d.tap(e=>d.gen(function*(){let t=yield*x.unbounded();i.set(e,t),yield*d.logInfo(`ACP session created`,{sessionId:e})})))}),g=d.fn(`AcpClient.getQueueBySessionId`)(function*(e){if(!i.has(e))return yield*d.die(`Session ${e} not initialized, did you forget to call createSession?`);let t=yield*x.unbounded();return i.set(e,t),t});return{createSession:h,stream:d.fn(`AcpClient.stream`)(function*({prompt:e,sessionId:t,cwd:r,mcpEnv:i=[]}){let a=v.isSome(t)?t.value:yield*h(r,i);yield*d.logDebug(`ACP stream starting`,{sessionId:a});let o=yield*g(a),s=yield*S.make(Date.now());yield*d.tryPromise({try:()=>c.prompt({sessionId:a,prompt:[{type:`text`,text:e}]}),catch:e=>new za({cause:e})}).pipe(d.tap(()=>d.logDebug(`ACP prompt completed`)),d.tap(()=>x.end(o)),p.run(n,a,{startImmediately:!0}));let l=d.gen(function*(){yield*d.sleep(u.millis(Ra));let e=yield*S.get(s);return Date.now()-e>=Ra});return yield*d.gen(function*(){(yield*d.repeat(l,{while:e=>!e}))&&(yield*d.logWarning(`ACP stream inactivity timeout`,{sessionId:a}),yield*x.fail(o,new za({cause:`Agent produced no output for ${Ra/1e3}s — the agent may be stalled`})))}).pipe(d.forkScoped),E.fromQueue(o).pipe(E.tap(()=>S.set(s,Date.now())))},E.unwrap)}})}){static layer=h.effect(this)(this.make).pipe(h.provide(K.layer));static layerCodex=this.layer.pipe(h.provide(Ka.layerCodex));static layerClaude=this.layer.pipe(h.provide(Ka.layerClaude))},Ja=class e extends T.Service()(`@expect/Agent`){static layerAcp=h.effect(e)(d.gen(function*(){let t=yield*qa;return e.of({createSession:e=>t.createSession(e),stream:e=>t.stream({cwd:e.cwd,sessionId:v.map(e.sessionId,e=>e),prompt:e.prompt,mcpEnv:e.mcpEnv})})})).pipe(h.provide(qa.layer));static layerCodex=e.layerAcp.pipe(h.provide(Ka.layerCodex));static layerClaude=e.layerAcp.pipe(h.provide(Ka.layerClaude));static layerFor=t=>t===`claude`?e.layerClaude:e.layerCodex;static layerTest=t=>h.effect(e,d.gen(function*(){let n=yield*m.FileSystem,r=w.decodeSync(fn);return e.of({stream:()=>n.stream(t).pipe(E.decodeText(),E.splitLines,E.map(e=>r(JSON.parse(e))),E.orDie),createSession:()=>d.die(`createSession not supported for test layer`)})})).pipe(h.provide(K.layer))};const Ya=[`claude`,`codex`,`cursor`],Xa=process.platform===`win32`?`where`:`which`,Za=e=>{try{return de(`${Xa} ${e}`,{stdio:`pipe`}),!0}catch{return!1}},Qa=()=>Ya.filter(Za),$a=12e3,eo=e=>e?[`Saved flow guidance:`,`You are replaying a previously saved flow. Follow these steps as guidance, but adapt if the UI has changed.`,`Saved flow title: ${e.title}`,`Saved flow request: ${e.userInstruction}`,``,...e.steps.flatMap((e,t)=>[`Step ${t+1}: ${e.title}`,`Instruction: ${e.instruction}`,`Expected: ${e.expectedOutcome}`,``])]:[],to=e=>{switch(e){case`Commit`:return[`- Start narrow and prove the selected commit's intended change works first.`,`- Treat the selected commit and its touched files as the primary testing hypothesis.`,`- After the primary flow, test 2-4 adjacent flows that could regress from the same change. Think about what else touches the same components, routes, or data.`,`- For UI changes, verify related views that render the same data or share the same components.`];case`WorkingTree`:return[`- Start with the exact user-requested flow against the local in-progress changes.`,`- After the primary flow, test related flows that exercise the same code paths — aim for 2-3 follow-ups.`,`- Pay extra attention to partially-implemented features: check that incomplete states don't break existing behavior.`];case`Changes`:return[`- Treat committed and uncommitted work as one body of change.`,`- Cover the requested flow first, then the highest-risk adjacent flows.`,`- Test 2-4 follow-up flows, prioritizing paths that share components or data with the changed files.`,`- If the changes touch shared utilities or layouts, verify multiple pages that use them.`];default:return[`- This is a branch-level review — be thorough. The goal is to catch regressions before merge, not to do a quick spot-check.`,`- Cover the requested flow first, then systematically test each area affected by the changed files.`,`- Aim for 5-8 total tested flows. Derive them from the changed files: each changed route, component, or data path should get its own verification.`,`- Test cross-cutting concerns: if shared components, layouts, or utilities changed, verify them on multiple pages that consume them.`,`- Include at least one negative/edge-case flow (e.g. invalid input, empty state, unauthorized access, broken link) relevant to the changes.`,`- Do not stop after the happy path passes. The value of a branch review is catching what the developer might have missed.`]}},no=e=>{if(!e||e.totalCount===0)return[];let t=[`Test coverage of changed files: ${e.percent}% (${e.coveredCount}/${e.totalCount} files have tests)`],n=e.entries.filter(e=>e.covered),r=e.entries.filter(e=>!e.covered);for(let e of n)t.push(` [covered] ${e.path} (tested by: ${e.testFiles.slice(0,3).join(`, `)})`);for(let e of r)t.push(` [no test] ${e.path}`);return r.length>0&&t.push(`Prioritize browser-testing files WITHOUT existing test coverage.`),t.push(``),t},ro=e=>{let t=e.browserMcpServerName??`browser`,n=e.changedFiles.slice(0,12),r=e.recentCommits.slice(0,5),i=e.diffPreview||``,a=i.length>$a?i.slice(0,$a)+`
10
+ `,i=e.getWriter();try{await i.write(n.encode(r))}finally{i.releaseLock()}}})}}Symbol.asyncDispose;var Na=class{#e;constructor(e,t){let n=e(this);this.#e=new Pa(async(e,t)=>{switch(e){case or.fs_write_text_file:{let e=Aa.parse(t);return n.writeTextFile?.(e)}case or.fs_read_text_file:{let e=Di.parse(t);return n.readTextFile?.(e)}case or.session_request_permission:{let e=ya.parse(t);return n.requestPermission(e)}case or.terminal_create:{let e=Ci.parse(t);return n.createTerminal?.(e)}case or.terminal_output:{let e=na.parse(t);return n.terminalOutput?.(e)}case or.terminal_release:{let e=Oi.parse(t);return await n.releaseTerminal?.(e)??{}}case or.terminal_wait_for_exit:{let e=Oa.parse(t);return n.waitForTerminalExit?.(e)}case or.terminal_kill:{let e=Ti.parse(t);return await n.killTerminal?.(e)??{}}default:if(n.extMethod)return n.extMethod(e,t);throw Fa.methodNotFound(e)}},async(e,t)=>{switch(e){case or.session_update:{let e=Da.parse(t);return n.sessionUpdate(e)}default:if(n.extNotification)return n.extNotification(e,t);throw Fa.methodNotFound(e)}},t)}async initialize(e){return await this.#e.sendRequest(ar.initialize,e)}async newSession(e){return await this.#e.sendRequest(ar.session_new,e)}async loadSession(e){return await this.#e.sendRequest(ar.session_load,e)??{}}async unstable_forkSession(e){return await this.#e.sendRequest(ar.session_fork,e)}async listSessions(e){return await this.#e.sendRequest(ar.session_list,e)}async unstable_resumeSession(e){return await this.#e.sendRequest(ar.session_resume,e)}async unstable_closeSession(e){return await this.#e.sendRequest(ar.session_close,e)}async setSessionMode(e){return await this.#e.sendRequest(ar.session_set_mode,e)??{}}async unstable_setSessionModel(e){return await this.#e.sendRequest(ar.session_set_model,e)??{}}async setSessionConfigOption(e){return await this.#e.sendRequest(ar.session_set_config_option,e)}async authenticate(e){return await this.#e.sendRequest(ar.authenticate,e)??{}}async prompt(e){return await this.#e.sendRequest(ar.session_prompt,e)}async cancel(e){return await this.#e.sendNotification(ar.session_cancel,e)}async extMethod(e,t){return await this.#e.sendRequest(e,t)}async extNotification(e,t){return await this.#e.sendNotification(e,t)}get signal(){return this.#e.signal}get closed(){return this.#e.closed}},Pa=class{#e=new Map;#t=0;#n;#r;#i;#a=Promise.resolve();#o=new AbortController;#s;constructor(e,t,n){this.#n=e,this.#r=t,this.#i=n,this.#s=new Promise(e=>{this.#o.signal.addEventListener(`abort`,()=>e())}),this.#c()}get signal(){return this.#o.signal}get closed(){return this.#s}async#c(){let e=this.#i.readable.getReader();try{for(;;){let{value:t,done:n}=await e.read();if(n)break;if(t)try{this.#l(t)}catch(e){console.error(`Unexpected error during message processing:`,t,e),`id`in t&&t.id!==void 0&&this.#p({jsonrpc:`2.0`,id:t.id,error:{code:-32700,message:`Parse error`}})}}}finally{e.releaseLock(),this.#o.abort()}}async#l(e){if(`method`in e&&`id`in e){let t=await this.#u(e.method,e.params);`error`in t&&console.error(`Error handling request`,e,t.error),await this.#p({jsonrpc:`2.0`,id:e.id,...t})}else if(`method`in e){let t=await this.#d(e.method,e.params);`error`in t&&console.error(`Error handling notification`,e,t.error)}else `id`in e?this.#f(e):console.error(`Invalid message`,{message:e})}async#u(e,t){try{return{result:await this.#n(e,t)??null}}catch(e){if(e instanceof Fa)return e.toResult();if(e instanceof be.ZodError)return Fa.invalidParams(e.format()).toResult();let t;(e instanceof Error||typeof e==`object`&&e&&`message`in e&&typeof e.message==`string`)&&(t=e.message);try{return Fa.internalError(t?JSON.parse(t):{}).toResult()}catch{return Fa.internalError({details:t}).toResult()}}}async#d(e,t){try{return await this.#r(e,t),{result:null}}catch(e){if(e instanceof Fa)return e.toResult();if(e instanceof be.ZodError)return Fa.invalidParams(e.format()).toResult();let t;(e instanceof Error||typeof e==`object`&&e&&`message`in e&&typeof e.message==`string`)&&(t=e.message);try{return Fa.internalError(t?JSON.parse(t):{}).toResult()}catch{return Fa.internalError({details:t}).toResult()}}}#f(e){let t=this.#e.get(e.id);t?(`result`in e?t.resolve(e.result):`error`in e&&t.reject(e.error),this.#e.delete(e.id)):console.error(`Got response to unknown request`,e.id)}async sendRequest(e,t){let n=this.#t++,r=new Promise((e,t)=>{this.#e.set(n,{resolve:e,reject:t})});return await this.#p({jsonrpc:`2.0`,id:n,method:e,params:t}),r}async sendNotification(e,t){await this.#p({jsonrpc:`2.0`,method:e,params:t})}async#p(e){return this.#a=this.#a.then(async()=>{let t=this.#i.writable.getWriter();try{await t.write(e)}finally{t.releaseLock()}}).catch(e=>{console.error(`ACP write error:`,e)}),this.#a}},Fa=class e extends Error{code;data;constructor(e,t,n){super(t),this.code=e,this.name=`RequestError`,this.data=n}static parseError(t,n){return new e(-32700,`Parse error${n?`: ${n}`:``}`,t)}static invalidRequest(t,n){return new e(-32600,`Invalid request${n?`: ${n}`:``}`,t)}static methodNotFound(t){return new e(-32601,`"Method not found": ${t}`,{method:t})}static invalidParams(t,n){return new e(-32602,`Invalid params${n?`: ${n}`:``}`,t)}static internalError(t,n){return new e(-32603,`Internal error${n?`: ${n}`:``}`,t)}static authRequired(t,n){return new e(-32e3,`Authentication required${n?`: ${n}`:``}`,t)}static resourceNotFound(t){return new e(-32002,`Resource not found${t?`: ${t}`:``}`,t&&{uri:t})}toResult(){return{error:{code:this.code,message:this.message,data:this.data}}}toErrorResponse(){return{code:this.code,message:this.message,data:this.data}}};const Ia=y.compose(y.isObject,y.compose(y.hasProperty(`message`),y.Struct({message:y.isString}))),La=w.String.pipe(w.brand(`SessionId`)),Ra=180*1e3;var za=class extends w.ErrorClass(`AcpStreamError`)({_tag:w.tag(`AcpStreamError`),cause:w.Unknown}){displayName=`An unexpected error occurred while streaming`;message=`Streaming failed: ${this.cause}`},Ba=class extends w.ErrorClass(`AcpProviderNotInstalledError`)({_tag:w.tag(`AcpProviderNotInstalledError`),provider:pn}){displayName=`${D.capitalize(this.provider)} is not installed`;message=_.value(this.provider).pipe(_.when(`claude`,()=>"Claude Code is not installed. Install it from https://code.claude.com/docs/en/overview#native-install-recommended, or use codex agent with `expect -a codex`."),_.when(`codex`,()=>"Codex CLI is not installed. Install it with `npm install -g @openai/codex`, or use Claude Code by removing the `--agent codex` option."),_.orElse(()=>`Your coding agent CLI is not installed. Please install it and then re-run expect.`))},Va=class extends w.ErrorClass(`AcpProviderUnauthenticatedError`)({_tag:w.tag(`AcpProviderUnauthenticatedError`),provider:pn}){displayName=`Your ${this.provider} agent is not authenticated`;message=_.value(this.provider).pipe(_.when(`claude`,()=>"Please log in using `claude login`, and then re-run expect."),_.when(`codex`,()=>"Please log in using `codex login`, and then re-run expect."),_.orElse(()=>`Please sign in to your coding agent, and then re-run expect.`))},Ha=class extends w.ErrorClass(`AcpProviderUsageLimitError`)({_tag:w.tag(`AcpProviderUsageLimitError`),provider:pn}){displayName=`Your ${this.provider} agent has exceeded its usage limits`;message=`Usage limits exceeded for ${this.provider}. Please check your plan and billing.`},Ua=class extends w.ErrorClass(`AcpSessionCreateError`)({_tag:w.tag(`AcpSessionCreateError`),cause:w.Unknown}){displayName=`Creating a chat session failed`;message=`Creating session failed: ${s.pretty(s.fail(this.cause))}`},Wa=class extends w.ErrorClass(`AcpConnectionInitError`)({_tag:w.tag(`AcpConnectionInitError`),cause:w.Unknown}){message=`Init connection failed: ${this.cause}`},Ga=class extends w.ErrorClass(`AcpAdapterNotFoundError`)({_tag:w.tag(`AcpAdapterNotFoundError`),packageName:w.String,cause:w.Unknown}){message=`ACP adapter not found: ${this.packageName}. Error: ${s.pretty(s.fail(this.cause))}`},Ka=class e extends T.Service()(`@expect/AcpAdapter`){static layerCodex=h.effect(e)(d.try({try:()=>{let t=a(typeof __filename<`u`?__filename:import.meta.url).resolve(`@zed-industries/codex-acp/bin/codex-acp.js`);return e.of({provider:`codex`,bin:process.execPath,args:[t],env:{}})},catch:e=>new Ga({packageName:`@zed-industries/codex-acp`,cause:e})}));static layerClaude=h.effect(e)(d.gen(function*(){let t=yield*Se.ChildProcessSpawner,n=w.Struct({loggedIn:w.Boolean});return yield*xe.make(`claude`,[`auth`,`status`]).pipe(t.string,d.flatMap(w.decodeEffect(w.fromJsonString(n))),d.flatMap(({loggedIn:e})=>e?d.void:new Va({provider:`claude`}).asEffect()),d.catchReason(`PlatformError`,`NotFound`,()=>new Ba({provider:`claude`}).asEffect())),yield*d.try({try:()=>{let t=a(typeof __filename<`u`?__filename:import.meta.url).resolve(`@zed-industries/claude-agent-acp/dist/index.js`);return e.of({provider:`claude`,bin:process.execPath,args:[t],env:{}})},catch:e=>new Ga({packageName:`@zed-industries/claude-agent-acp`,cause:e})})})).pipe(h.provide(K.layer))},qa=class extends T.Service()(`@expect/AcpClient`,{make:d.gen(function*(){let e=yield*Ka;yield*d.annotateLogsScoped({adapter:e.args[0]}),yield*d.logInfo(`Initializing AcpClient`);let t=yield*Se.ChildProcessSpawner,n=yield*p.make(),r=yield*x.unbounded(),i=new Map,a={requestPermission:e=>Promise.resolve({outcome:{outcome:`selected`,optionId:e.options.find(e=>e.kind===`allow_always`||e.kind===`allow_once`)?.optionId??e.options[0].optionId}}),sessionUpdate:async({sessionId:e,update:t})=>{let n=i.get(La.makeUnsafe(e));if(n===void 0)return console.warn(`updates queue not found for session ${e}`);let r=w.decodeUnknownSync(fn)(t);x.offerUnsafe(n,r)}},o=yield*xe.make(e.bin,e.args,{env:e.env,extendEnv:!0}).pipe(t.spawn);yield*d.annotateLogsScoped({pid:o.pid}),yield*d.logDebug(`ACP adapter subprocess spawned`),yield*E.fromQueue(r).pipe(E.run(o.stdin),d.forkScoped),yield*o.stderr.pipe(E.decodeText(),E.splitLines,E.tap(e=>d.logDebug(`ACP adapter stderr`,{line:e})),E.runDrain,d.forkScoped);let s=E.toReadableStream(o.stdout),c=new Na(e=>a,Ma(new WritableStream({write:e=>void x.offerUnsafe(r,e)}),s)),l=ve(new URL(`./browser-mcp.js`,import.meta.url)),f=e=>[{command:process.execPath,args:[l],env:[...e],name:`browser`}],m=yield*d.tryPromise({try:()=>c.initialize({protocolVersion:1}),catch:e=>new Wa({cause:e})});yield*d.logInfo(`ACP connection initialized`,{capabilities:m.agentCapabilities});let h=d.fn(`AcpClient.createSession`)(function*(t,n=[]){yield*d.annotateCurrentSpan({cwd:t});let r=f(n);return yield*d.tryPromise({try:()=>c.newSession({cwd:t,mcpServers:r}),catch:t=>{let n=Ia(t)?t.message:String(t);return[`authentication`].some(e=>n.toLowerCase().includes(e))?new Va({provider:e.provider}):[`out of usage`,`limits exceeded`,`usage exceeded`].some(e=>n.toLowerCase().includes(e))?new Ha({provider:e.provider}):new Ua({cause:t})}}).pipe(d.map(({sessionId:e})=>La.makeUnsafe(e)),d.tap(e=>d.gen(function*(){let t=yield*x.unbounded();i.set(e,t),yield*d.logInfo(`ACP session created`,{sessionId:e})})))}),g=d.fn(`AcpClient.getQueueBySessionId`)(function*(e){if(!i.has(e))return yield*d.die(`Session ${e} not initialized, did you forget to call createSession?`);let t=yield*x.unbounded();return i.set(e,t),t});return{createSession:h,stream:d.fn(`AcpClient.stream`)(function*({prompt:e,sessionId:t,cwd:r,mcpEnv:i=[]}){let a=v.isSome(t)?t.value:yield*h(r,i);yield*d.logDebug(`ACP stream starting`,{sessionId:a});let o=yield*g(a),s=yield*S.make(Date.now());yield*d.tryPromise({try:()=>c.prompt({sessionId:a,prompt:[{type:`text`,text:e}]}),catch:e=>new za({cause:e})}).pipe(d.tap(()=>d.logDebug(`ACP prompt completed`)),d.tap(()=>x.end(o)),p.run(n,a,{startImmediately:!0}));let l=d.gen(function*(){yield*d.sleep(u.millis(Ra));let e=yield*S.get(s);return Date.now()-e>=Ra});return yield*d.gen(function*(){(yield*d.repeat(l,{while:e=>!e}))&&(yield*d.logWarning(`ACP stream inactivity timeout`,{sessionId:a}),yield*x.fail(o,new za({cause:`Agent produced no output for ${Ra/1e3}s — the agent may be stalled`})))}).pipe(d.forkScoped),E.fromQueue(o).pipe(E.tap(()=>S.set(s,Date.now())))},E.unwrap)}})}){static layer=h.effect(this)(this.make).pipe(h.provide(K.layer));static layerCodex=this.layer.pipe(h.provide(Ka.layerCodex));static layerClaude=this.layer.pipe(h.provide(Ka.layerClaude))},Ja=class e extends T.Service()(`@expect/Agent`){static layerAcp=h.effect(e)(d.gen(function*(){let t=yield*qa;return e.of({createSession:e=>t.createSession(e),stream:e=>t.stream({cwd:e.cwd,sessionId:v.map(e.sessionId,e=>e),prompt:e.prompt,mcpEnv:e.mcpEnv})})})).pipe(h.provide(qa.layer));static layerCodex=e.layerAcp.pipe(h.provide(Ka.layerCodex));static layerClaude=e.layerAcp.pipe(h.provide(Ka.layerClaude));static layerFor=t=>t===`claude`?e.layerClaude:e.layerCodex;static layerTest=t=>h.effect(e,d.gen(function*(){let n=yield*m.FileSystem,r=w.decodeSync(fn);return e.of({stream:()=>n.stream(t).pipe(E.decodeText(),E.splitLines,E.map(e=>r(JSON.parse(e))),E.orDie),createSession:()=>d.die(`createSession not supported for test layer`)})})).pipe(h.provide(K.layer))};const Ya=[`claude`,`codex`,`cursor`],Xa=process.platform===`win32`?`where`:`which`,Za=e=>{try{return de(`${Xa} ${e}`,{stdio:`pipe`}),!0}catch{return!1}},Qa=()=>Ya.filter(Za),$a=12e3,eo=e=>e?[`Saved flow guidance:`,`You are replaying a previously saved flow. Follow these steps as guidance, but adapt if the UI has changed.`,`Saved flow title: ${e.title}`,`Saved flow request: ${e.userInstruction}`,``,...e.steps.flatMap((e,t)=>[`Step ${t+1}: ${e.title}`,`Instruction: ${e.instruction}`,`Expected: ${e.expectedOutcome}`,``])]:[],to=e=>{switch(e){case`Commit`:return[`- Start narrow and prove the selected commit's intended change works first.`,`- Treat the selected commit and its touched files as the primary testing hypothesis.`,`- After the primary flow, test 2-4 adjacent flows that could regress from the same change. Think about what else touches the same components, routes, or data.`,`- For UI changes, verify related views that render the same data or share the same components.`];case`WorkingTree`:return[`- Start with the exact user-requested flow against the local in-progress changes.`,`- After the primary flow, test related flows that exercise the same code paths — aim for 2-3 follow-ups.`,`- Pay extra attention to partially-implemented features: check that incomplete states don't break existing behavior.`];case`Changes`:return[`- Treat committed and uncommitted work as one body of change.`,`- Cover the requested flow first, then the highest-risk adjacent flows.`,`- Test 2-4 follow-up flows, prioritizing paths that share components or data with the changed files.`,`- If the changes touch shared utilities or layouts, verify multiple pages that use them.`];default:return[`- This is a branch-level review — be thorough. The goal is to catch regressions before merge, not to do a quick spot-check.`,`- Cover the requested flow first, then systematically test each area affected by the changed files.`,`- Aim for 5-8 total tested flows. Derive them from the changed files: each changed route, component, or data path should get its own verification.`,`- Test cross-cutting concerns: if shared components, layouts, or utilities changed, verify them on multiple pages that consume them.`,`- Include at least one negative/edge-case flow (e.g. invalid input, empty state, unauthorized access, broken link) relevant to the changes.`,`- Do not stop after the happy path passes. The value of a branch review is catching what the developer might have missed.`]}},no=e=>{if(!e||e.totalCount===0)return[];let t=[`Test coverage of changed files: ${e.percent}% (${e.coveredCount}/${e.totalCount} files have tests)`],n=e.entries.filter(e=>e.covered),r=e.entries.filter(e=>!e.covered);for(let e of n)t.push(` [covered] ${e.path} (tested by: ${e.testFiles.slice(0,3).join(`, `)})`);for(let e of r)t.push(` [no test] ${e.path}`);return r.length>0&&t.push(`Prioritize browser-testing files WITHOUT existing test coverage.`),t.push(``),t},ro=e=>{let t=e.browserMcpServerName??`browser`,n=e.changedFiles.slice(0,12),r=e.recentCommits.slice(0,5),i=e.diffPreview||``,a=i.length>$a?i.slice(0,$a)+`
11
11
  ... (truncated)`:i;return[`You are executing a browser regression test directly from repository context.`,`You have browser tools via the MCP server named "${t}":`,``,`1. open — Launch a browser and navigate to a URL.`,`2. playwright — Execute Playwright code in Node. Globals: page (Page), context (BrowserContext), browser (Browser), ref(id) (resolves a snapshot ref like 'e4' to a Playwright Locator). Supports await. Return a value to get it back as JSON.`,`3. screenshot — Capture page state. Set mode: 'snapshot' (ARIA accessibility tree, default and preferred), 'screenshot' (PNG image), or 'annotated' (PNG with numbered labels on interactive elements).`,`4. console_logs — Get browser console messages. Filter by type ('error', 'warning', 'log'). Use after navigation or interactions to catch errors.`,`5. network_requests — Get captured network requests. Filter by method, URL substring, or resource type ('xhr', 'fetch', 'document').`,`6. close — Close the browser and end the session.`,``,`Strongly prefer screenshot with mode 'snapshot' for observing page state — the ARIA tree is fast, cheap, and sufficient for almost all assertions.`,`Only use mode 'screenshot' or 'annotated' when you need to verify something purely visual (layout, colors, images) that the accessibility tree cannot capture.`,`After each step, check console_logs with type 'error' to catch unexpected errors.`,``,`Snapshot-driven workflow:`,`1. Call screenshot with mode 'snapshot' to get the ARIA tree with refs.`,`2. Read the tree to find your target elements. Every interactive element has a ref like [ref=e4].`,`3. Use ref() in one playwright call to perform multiple actions using the refs from the snapshot — fill forms, click buttons, wait, and return results all in one block.`,`4. Only take a new snapshot when the page structure has changed significantly (navigation, modal open, new content loaded) and you need fresh refs.`,``,`Example snapshot tree:`,` - navigation`,` - link "Home" [ref=e1]`,` - link "About" [ref=e2]`,` - main`,` - heading "Welcome"`,` - textbox "Email" [ref=e3]`,` - button "Submit" [ref=e4]`,``,`Acting on refs — use ref() to get a Locator directly from the snapshot ref ID:`,` await ref('e3').fill('test@example.com');`,` await ref('e4').click();`,` await ref('e1').click();`,``,`Always snapshot first, then use ref() to act. Never guess CSS selectors.`,``,`Batch as many actions as possible into a single playwright call to minimize round trips:`,` playwright: await ref('e3').fill('test@example.com'); await ref('e5').fill('secret'); await ref('e6').click(); await page.waitForLoadState('networkidle'); return await page.innerText('.result');`,` playwright: await ref('e1').click(); await page.waitForURL('**/about');`,` playwright: return { url: page.url(), title: await page.title() };`,``,`Execution strategy:`,`- First master the primary flow the developer asked for. Verify it thoroughly before moving on.`,`- Once the primary flow passes, test additional related flows suggested by the changed files and route context. The scope strategy below specifies how many — follow it.`,`- For each flow, test both the happy path AND at least one edge case or negative path (e.g. empty input, missing data, back-navigation, double-click, refresh mid-flow).`,`- Use the same browser session throughout unless the app forces you into a different path.`,`- Execution style is assertion-first: navigate, act, validate, recover once, then fail with evidence if still blocked.`,`- Create your own step structure while executing. Use stable sequential IDs like step-01, step-02, step-03.`,`- Take your time. A thorough run that catches real issues is more valuable than a fast run that misses them. Do not rush to RUN_COMPLETED.`,``,`Assertion depth — do not just confirm the page loaded. For each step, verify that the action produced the expected state change:`,`- Before acting, note what should change. After acting, confirm it actually changed.`,`- Check at least two independent signals per step (e.g. URL changed AND new content appeared, or item was added AND count updated).`,`- Verify absence when relevant: after a delete, the item is gone; after dismissing a modal, it no longer appears in the tree.`,`- Use playwright to return structured evidence rather than eyeballing snapshots: return { url: page.url(), title: await page.title(), visible: await ref('e5').isVisible() };`,`- If the changed files suggest specific behavior (e.g. a validation rule, a redirect, a computed value), test that specific behavior rather than just the surrounding UI.`,``,`Before and after each step, emit these exact status lines on their own lines:`,`STEP_START|<step-id>|<step-title>`,`STEP_DONE|<step-id>|<short-summary>`,`ASSERTION_FAILED|<step-id>|<why-it-failed>`,`STEP_SKIPPED|<step-id>|<reason-it-was-skipped>`,`RUN_COMPLETED|passed|<final-summary>`,`RUN_COMPLETED|failed|<final-summary>`,``,`Use STEP_SKIPPED when a step cannot be executed due to missing prerequisites (e.g. test credentials not available, required test data missing, auth-blocked). Never use STEP_DONE for steps that were not actually tested.`,``,`Allowed failure categories: app-bug, env-issue, auth-blocked, missing-test-data, selector-drift, agent-misread.`,`When a step fails, gather structured evidence before emitting ASSERTION_FAILED:`,`- Call screenshot with mode 'snapshot' to capture the ARIA tree.`,`- Use playwright to gather diagnostics: return { url: page.url(), title: await page.title(), text: await page.innerText('body').then(t => t.slice(0, 500)) };`,`- Only take a visual screenshot if the failure might be layout/rendering related.`,`- Summarize the failure category and the most important evidence inside <why-it-failed>.`,``,`Stability heuristics:`,`- After navigation or major UI changes, use playwright to wait for the page to settle (e.g. await page.waitForLoadState('networkidle')).`,`- Use screenshot with mode 'snapshot' to inspect the accessibility tree before interactions that depend on current UI state.`,`- Avoid interacting while the UI is visibly loading or transitioning.`,`- Confirm you reached the expected page or route before continuing.`,`- When waiting for page changes (navigation, content loading, animations), prefer short incremental waits (1-3 seconds) with snapshot checks in between rather than a single long wait. For example, instead of waiting 10 seconds: wait 2s, take a snapshot, check if ready, if not wait 2s more and snapshot again. This lets you proceed as soon as the page is ready.`,``,`Recovery policy for each blocked step:`,`- Take a new snapshot to re-inspect the page and get fresh refs.`,`- Use playwright with ref() to scroll the target into view or retry the interaction once.`,`- If still blocked, classify the blocker with one allowed failure category and include that classification in ASSERTION_FAILED.`,``,`Avoid rabbit holes:`,`- Do not repeat the same failing action more than once without new evidence such as a fresh snapshot, a different ref, a changed page state, or a clear new hypothesis.`,`- If four attempts fail or progress stalls, stop acting and report what you observed, what blocked progress, and the most likely next step.`,`- Prefer gathering evidence over brute force. If the page is confusing, use screenshot with mode 'snapshot', playwright for console or network diagnostics, or a visual screenshot to understand it before trying more actions.`,`- If you encounter a blocker such as login, passkey/manual user interaction, permissions, captchas, destructive confirmations, missing data, or an unexpected state, stop and report it instead of improvising repeated actions.`,`- Do not get stuck in wait-action-wait loops. Every retry should be justified by something newly observed.`,``,`Before emitting RUN_COMPLETED, call the close tool exactly once so the browser session flushes the video to disk.`,``,`Environment:`,`- Base URL: ${e.baseUrl??`not provided`}`,`- Headed mode preference: ${e.isHeadless?`headless`:`headed`}`,`- Reuse browser cookies: ${e.requiresCookies?`yes`:`no`}`,``,`Testing target context:`,`- Scope: ${e.scope}`,`- Current branch: ${e.currentBranch}`,`- Main branch: ${e.mainBranch??`unknown`}`,``,`Developer request:`,e.userInstruction,``,...eo(e.savedFlow),`Project learnings from previous runs:`,e.learnings?.trim()||`No learnings yet.`,``,`Changed files:`,n.length>0?n.map(e=>`- [${e.status}] ${e.path}`).join(`
12
12
  `):`- No changed files detected`,``,...no(e.testCoverage),`Recent commits:`,r.length>0?r.map(e=>`- ${e.shortHash} ${e.subject}`).join(`
13
13
  `):`- No recent commits available`,``,`Diff preview:`,a||`No diff preview available`,``,`Scope strategy:`,...to(e.scope)].join(`
@@ -40,7 +40,7 @@ import{n as e,r as t,t as n}from"./chunk-wdO_pP5q.js";import{a as r,i}from"./ser
40
40
  `).map(e=>e.trim()).filter(e=>e.length>0),r=n.find(e=>e.startsWith(py))?.replace(py,``),i=n.find(e=>e.startsWith(my))?.replace(my,``);return{localReplayUrl:r&&r.trim().length>0?ye(r.trim()).href:void 0,videoUrl:i&&i.trim().length>0?ye(i.trim()).href:void 0}},_y=it.make([]),vy=d.fnUntraced(function*(e,t){let n=yield*nm,r=yield*tm,i=yield*Z_,a=yield*$p,o=Date.now(),s=`http://localhost:${hy()}`,c;e.replayHost&&(c=`${(yield*cy({replayHost:e.replayHost,liveViewUrl:s})).url}/replay?live=true`,yield*d.logInfo(`Replay viewer available`,{replayUrl:c}),yield*d.sync(()=>e.onReplayUrl?.(c)));let l={...e.options,liveViewUrl:s};yield*i.capture(`run:started`,{plan_id:`direct`});let u=yield*r.execute(l).pipe(E.tap(t=>d.gen(function*(){e.onUpdate(t),yield*fy(s,dy(t))})),E.runLast,d.map(t=>(t._tag===`Some`?t.value:new er({...e.options,id:``,changesFor:e.options.changesFor,currentBranch:``,diffPreview:``,fileStats:[],instruction:e.options.instruction,baseUrl:void 0,isHeadless:e.options.isHeadless,requiresCookies:e.options.requiresCookies,testCoverage:v.none(),title:e.options.instruction,rationale:`Direct execution`,steps:[],events:[]})).finalizeTextBlock())),f=gy(u.events);if(c){let e=c.split(`/replay`)[0];yield*d.tryPromise(()=>fetch(`${s}/latest.json`).then(async t=>{if(!t.ok)return;let n=await t.json();await fetch(`${e}/latest.json`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)})})).pipe(d.catchCause(()=>d.void)),yield*fy(e,dy(u))}let p=yield*n.report(u),m=p.steps.filter(e=>p.stepStatuses.get(e.id)?.status===`passed`).length,h=p.steps.filter(e=>p.stepStatuses.get(e.id)?.status===`failed`).length;return yield*i.capture(`run:completed`,{plan_id:u.id??`direct`,passed:m,failed:h,step_count:u.steps.length,file_count:0,duration_ms:Date.now()-o}),p.status===`passed`&&(yield*a.saveTestedFingerprint()),{executedPlan:u,report:p,replayUrl:c??f.localReplayUrl,localReplayUrl:f.localReplayUrl,videoUrl:f.videoUrl}},d.annotateLogs({fn:`executeFn`})),yy=iy.fn()((e,t)=>ay(vy(e,t)).pipe(d.tapError(e=>d.gen(function*(){let t=yield*Z_,n=e instanceof Error?e.constructor.name:`UnknownError`;yield*t.capture(`run:failed`,{plan_id:`direct`,error_tag:n})}).pipe(d.catchCause(()=>d.void))),d.provide(K.layer)));iy.fn(d.fnUntraced(function*(e,t){let n=yield*nm,r=yield*tm,i=yield*Z_,a=yield*$p,o=Date.now(),s=`http://localhost:${hy()}`,c;e.replayHost&&(c=`${(yield*cy({replayHost:e.replayHost,liveViewUrl:s})).url}/replay?live=true`,yield*d.logInfo(`Replay viewer available`,{replayUrl:c}),yield*d.sync(()=>e.onReplayUrl?.(c)));let l={...e.options,liveViewUrl:s};yield*i.capture(`run:started`,{plan_id:`direct`});let u=yield*r.execute(l).pipe(E.tap(t=>d.gen(function*(){e.onUpdate(t),yield*fy(s,dy(t))})),E.runLast,d.map(t=>(t._tag===`Some`?t.value:new er({...e.options,id:``,changesFor:e.options.changesFor,currentBranch:``,diffPreview:``,fileStats:[],instruction:e.options.instruction,baseUrl:void 0,isHeadless:e.options.isHeadless,requiresCookies:e.options.requiresCookies,testCoverage:v.none(),title:e.options.instruction,rationale:`Direct execution`,steps:[],events:[]})).finalizeTextBlock())),f=gy(u.events);if(c){let e=c.split(`/replay`)[0];yield*d.tryPromise(()=>fetch(`${s}/latest.json`).then(async t=>{if(!t.ok)return;let n=await t.json();await fetch(`${e}/latest.json`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)})})).pipe(d.catchCause(()=>d.void)),yield*fy(e,dy(u))}let p=yield*n.report(u),m=p.steps.filter(e=>p.stepStatuses.get(e.id)?.status===`passed`).length,h=p.steps.filter(e=>p.stepStatuses.get(e.id)?.status===`failed`).length;return yield*i.capture(`run:completed`,{plan_id:u.id??`direct`,passed:m,failed:h,step_count:u.steps.length,file_count:0,duration_ms:Date.now()-o}),p.status===`passed`&&(yield*a.saveTestedFingerprint()),{executedPlan:u,report:p,replayUrl:c??f.localReplayUrl,localReplayUrl:f.localReplayUrl,videoUrl:f.videoUrl}},d.annotateLogs({fn:`executeAtomFn`})));const by=e=>{if(typeof e==`string`)try{let t=JSON.parse(e);if(y.isObject(t))return t}catch{return{}}return y.isObject(e)?e:{}},xy=e=>e.replace(/\s+/g,` `).trim(),Sy=e=>{let t=e.match(/^mcp__.+__(.+)$/);return t?t[1]:e},Cy=(e,t)=>{let n=Sy(e),r=typeof t==`string`?t:JSON.stringify(t??{}),i=by(t),a=_.value(n).pipe(_.when(`open`,()=>i.url?`"${i.url}"`:``),_.when(`screenshot`,()=>{let e=i.mode??`screenshot`;return e===`screenshot`?``:e}),_.when(`playwright`,()=>Be(xy(i.code??r),100)),_.when(`console_logs`,()=>i.type?`type: "${i.type}"`:``),_.when(`network_requests`,()=>{let e=[];return i.method&&e.push(i.method),i.url&&e.push(`"${i.url}"`),e.join(`, `)}),_.when(`performance_metrics`,()=>``),_.when(`close`,()=>``),_.orElse(()=>wy(i))),o=(i.code??r).trim();return{name:n,args:a,multilineArgs:n===`playwright`&&o.includes(`
41
41
  `)?o:void 0}},wy=e=>{let t=Object.values(e).filter(e=>typeof e==`string`&&e.length>0);return t.length===0?``:Be(xy(t.join(`, `)),100)},Ty=e=>e>=1e3?`${(e/1e3).toFixed(1)}k`:`${e}`,Ey=(e,t,n=e.length)=>{let r=[];for(let i=t;i<n;i++){let t=e[i];if(t._tag===`ToolCall`&&r.push({tool:Cy(t.toolName,t.input),isRunning:!1,resultTokens:void 0}),t._tag===`ToolProgress`&&r.length>0){let e=r[r.length-1];r[r.length-1]={...e,resultTokens:Math.round(t.outputSize/4)}}if(t._tag===`ToolResult`&&r.length>0){let e=r[r.length-1];r[r.length-1]={...e,resultTokens:Math.round(t.result.length/4)}}}return r},Dy=(e,t)=>{if(e.length===0)return e;let n=t.at(-1)?._tag===`ToolResult`,r=[...e];return r[r.length-1]={...r[r.length-1],isRunning:!n},r},Oy=(e,t=!1)=>{let n=-1;for(let t=e.length-1;t>=0;t--)if(e[t]._tag===`StepStarted`){n=t;break}if(n===-1)return[];let r=Dy(Ey(e,n+1),e);return t?r:r.slice(-5)},ky=(e,t=!1)=>{let n=Dy(Ey(e,0),e);return t?n:n.slice(-5)},Ay=(e,t)=>{let n=-1,r=0;for(let i=0;i<e.length;i++)if(e[i]._tag===`StepStarted`&&(n++,n===t&&(r=i+1),n===t+1))return[r,i];return[r,e.length]},jy=(e,t)=>{let[n,r]=Ay(e,t);return Ey(e,n,r)},My=e=>{let t=ae(15);if(t[0]!==`1d0983dd3879f9a5a019acea17cc4fd75140d170e89f34badca2fe82be71c373`){for(let e=0;e<15;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`1d0983dd3879f9a5a019acea17cc4fd75140d170e89f34badca2fe82be71c373`}let{display:n,indent:r}=e,i=It(),a;t[1]!==i.TEXT||t[2]!==n.tool.name?(a=B(j,{color:i.TEXT,children:n.tool.name}),t[1]=i.TEXT,t[2]=n.tool.name,t[3]=a):a=t[3];let o;t[4]===n.isRunning?o=t[5]:(o=n.isRunning&&V(j,{children:[` `,B(ze,{type:`line`})]}),t[4]=n.isRunning,t[5]=o);let s;t[6]===n.resultTokens?s=t[7]:(s=n.resultTokens!==void 0&&` ${H.arrowDown} ${Ty(n.resultTokens)} tokens`,t[6]=n.resultTokens,t[7]=s);let c;return t[8]!==i.DIM||t[9]!==n.tool.args||t[10]!==r||t[11]!==a||t[12]!==o||t[13]!==s?(c=V(j,{color:i.DIM,wrap:`truncate`,children:[r,H.lineVertical,` `,a,`(`,n.tool.args,`)`,o,s]}),t[8]=i.DIM,t[9]=n.tool.args,t[10]=r,t[11]=a,t[12]=o,t[13]=s,t[14]=c):c=t[14],c},Ny=e=>{if(!v.isNone(e.startedAt))return(v.isSome(e.endedAt)?l.toEpochMillis(e.endedAt.value):Date.now())-l.toEpochMillis(e.startedAt.value)},Py=(e,t,n,r)=>{let i=[];for(let a=0;a<e.length;a++){let o=e[a],s=`${n}-t${a}`;if(o.tool.multilineArgs){let e=o.tool.multilineArgs.split(`
42
42
  `);i.push(V(j,{color:r.DIM,wrap:`truncate`,children:[t,H.lineVertical,` `,B(j,{color:r.TEXT,children:o.tool.name}),`(`,o.isRunning&&V(j,{children:[` `,B(ze,{type:`line`})]}),o.resultTokens!==void 0&&` ${H.arrowDown} ${Ty(o.resultTokens)} tokens`]},`${s}-h`));for(let n=0;n<e.length;n++)i.push(V(j,{color:r.DIM,children:[t,H.lineVertical,` `,` `,B(j,{color:r.TEXT,children:e[n]})]},`${s}-${n}`));i.push(V(j,{color:r.DIM,children:[t,H.lineVertical,` )`]},`${s}-c`))}else i.push(V(j,{color:r.DIM,wrap:`truncate`,children:[t,H.lineVertical,` `,B(j,{color:r.TEXT,children:o.tool.name}),`(`,o.tool.args,`)`,o.isRunning&&V(j,{children:[` `,B(ze,{type:`line`})]}),o.resultTokens!==void 0&&` ${H.arrowDown} ${Ty(o.resultTokens)} tokens`]},s))}return i},Fy=t=>{let n=ae(113);if(n[0]!==`1d0983dd3879f9a5a019acea17cc4fd75140d170e89f34badca2fe82be71c373`){for(let e=0;e<113;e+=1)n[e]=Symbol.for(`react.memo_cache_sentinel`);n[0]=`1d0983dd3879f9a5a019acea17cc4fd75140d170e89f34badca2fe82be71c373`}let{changesFor:r,instruction:i,savedFlow:a,requiresCookies:o,baseUrls:s}=t,c=o===void 0?!1:o,l=eh(Iy),u=It(),[,d]=Nt(),f=ev(Ly),p=ev(Ry),m=ev(zy),h=ev(By),g;n[1]===Symbol.for(`react.memo_cache_sentinel`)?(g={mode:`promiseExit`},n[1]=g):g=n[1];let[_,y]=ot(yy,g),b=ct(_y),[x,S]=R(void 0),C;n[2]===_?C=n[3]:(C=rt.isWaiting(_),n[2]=_,n[3]=C);let w=C,T;n[4]===_?T=n[5]:(T=rt.isSuccess(_),n[4]=_,n[5]=T);let E=T,D=E?_.value.report:void 0,[O,ee]=R(void 0),[te,M]=R(void 0),[N,re]=R(0),[ie,P]=R(!1),F=Iv(Vy),oe=Iv(Hy),I=Iv(Uy),ce;n[6]===N?ce=n[7]:(ce=Lv(N),n[6]=N,n[7]=ce);let le=ce,ue=O?.steps?O.steps.length:0,z;if(n[8]!==u||n[9]!==le||n[10]!==O||n[11]!==F||n[12]!==w){if(z=[],F&&O){let e=O.steps??[];if(e.length===0&&w){let e=ky(O.events,!0);z.push(...Py(e,` `,`planning`,u))}for(let t=0;t<e.length;t++){let n=e[t],r=v.isSome(n.summary)?n.summary.value:n.title,i=Ny(n),a=i===void 0?void 0:Lv(i),o=`${t+1}.`;if(n.status===`active`){z.push(V(k,{children:[V(j,{color:u.DIM,children:[` `,o,` `]}),B(qm,{}),B(j,{children:` `}),B(Fv,{text:`${n.title} ${le}`,baseColor:J.shimmerBase,highlightColor:J.shimmerHighlight})]},`step-${t}`));let e=Oy(O.events,!0);z.push(...Py(e,` `,`s${t}`,u))}else if(n.status===`passed`){z.push(V(j,{children:[V(j,{color:u.DIM,children:[` `,o]}),V(j,{color:u.GREEN,children:[` `,H.tick,` `,Be(r,100)]}),a&&V(j,{color:u.DIM,children:[` `,a]})]},`step-${t}`));let e=jy(O.events,t);z.push(...Py(e,` `,`s${t}`,u))}else if(n.status===`failed`){z.push(V(j,{children:[V(j,{color:u.DIM,children:[` `,o]}),V(j,{color:u.RED,children:[` `,H.cross,` `,Be(r,100)]}),a&&V(j,{color:u.DIM,children:[` `,a]})]},`step-${t}`));let e=jy(O.events,t);z.push(...Py(e,` `,`s${t}`,u))}else n.status===`skipped`?z.push(V(j,{children:[V(j,{color:u.DIM,children:[` `,o]}),V(j,{color:u.YELLOW,children:[` `,H.arrowRight,` `,Be(r,100)]}),a&&V(j,{color:u.DIM,children:[` `,a]})]},`step-${t}`)):z.push(V(j,{color:u.DIM,children:[` `,o,` `,H.circle,` `,n.title]},`step-${t}`))}}n[8]=u,n[9]=le,n[10]=O,n[11]=F,n[12]=w,n[13]=z}else z=n[13];let de=Math.max(1,d-6),fe;n[14]!==z.length||n[15]!==de?(fe={itemCount:z.length,visibleCount:de},n[14]=z.length,n[15]=de,n[16]=fe):fe=n[16];let U=Ym(fe),W=L(!1),me,he;n[17]!==F||n[18]!==z.length||n[19]!==U?(me=()=>{F&&!W.current&&z.length>0&&U.setHighlightedIndex(z.length-1),W.current=F},he=[F,z.length,U],n[17]=F,n[18]=z.length,n[19]=U,n[20]=me,n[21]=he):(me=n[20],he=n[21]),se(me,he);let ge,_e;n[22]!==f||n[23]!==s||n[24]!==p||n[25]!==r||n[26]!==i||n[27]!==m||n[28]!==c||n[29]!==a||n[30]!==y?(_e=()=>{M(Date.now());let e=s&&s.length>0?s.join(`, `):void 0,t=s?s.map(Wy).join(` `):void 0;return y({options:{changesFor:r,instruction:t?`${i} ${t}`:i,isHeadless:!p,requiresCookies:c,savedFlow:a,baseUrl:e},agentBackend:f,replayHost:m,onUpdate:ee,onReplayUrl:S}),()=>{y(it.Interrupt)}},ge=[y,f,p,r,i,a,c,s,m],n[22]=f,n[23]=s,n[24]=p,n[25]=r,n[26]=i,n[27]=m,n[28]=c,n[29]=a,n[30]=y,n[31]=ge,n[32]=_e):(ge=n[31],_e=n[32]),se(_e,ge);let ve=E?_.value.replayUrl:void 0,ye=E?_.value.localReplayUrl:void 0,be=E?_.value.videoUrl:void 0,G,xe;n[33]!==O||n[34]!==E||n[35]!==ye||n[36]!==ve||n[37]!==D||n[38]!==l||n[39]!==be?(G=()=>{E&&O&&D&&(Iv.getState().setExecutedPlan(O),l(Qm.Results({report:D,replayUrl:ve,localReplayUrl:ye,videoUrl:be})))},xe=[E,O,D,ve,ye,be,l],n[33]=O,n[34]=E,n[35]=ye,n[36]=ve,n[37]=D,n[38]=l,n[39]=be,n[40]=G,n[41]=xe):(G=n[40],xe=n[41]),se(G,xe);let Se;n[42]===l?Se=n[43]:(Se=()=>{Iv.getState().setExecutedPlan(void 0),l(Qm.Main())},n[42]=l,n[43]=Se);let K=Se,Ce,q;n[44]!==w||n[45]!==te?(Ce=()=>{if(te===void 0||!w)return;let e=setInterval(()=>{re(Date.now()-te)},1e3);return()=>clearInterval(e)},q=[te,w],n[44]=w,n[45]=te,n[46]=Ce,n[47]=q):(Ce=n[46],q=n[47]),se(Ce,q);let we;n[48]!==O||n[49]!==_||n[50]!==F||n[51]!==U||n[52]!==K||n[53]!==w||n[54]!==x||n[55]!==ye||n[56]!==ve||n[57]!==D||n[58]!==oe||n[59]!==l||n[60]!==ie||n[61]!==I||n[62]!==h||n[63]!==be?(we=(t,n)=>{let r=t.toLowerCase();if(ie){if(n.return||r===`y`){P(!1),nv(`run:cancelled`),K();return}(n.escape||r===`n`)&&P(!1);return}if(r===`o`&&!n.ctrl&&!n.meta&&x){let{exec:t}=e(`node:child_process`);t(`open "${x.replace(/"/g,`\\"`)}"`),nv(`live_preview:opened`);return}if(n.ctrl&&t===`o`){I();return}if(n.ctrl&&t===`n`){h();return}if(F){if(U.handleNavigation(t,n))return;if(n.escape){oe(!1);return}return}if(n.escape){if(rt.isFailure(_)){K();return}if(w){P(!0);return}if(O&&D){Iv.getState().setExecutedPlan(O),l(Qm.Results({report:D,replayUrl:ve,localReplayUrl:ye,videoUrl:be}));return}K()}},n[48]=O,n[49]=_,n[50]=F,n[51]=U,n[52]=K,n[53]=w,n[54]=x,n[55]=ye,n[56]=ve,n[57]=D,n[58]=oe,n[59]=l,n[60]=ie,n[61]=I,n[62]=h,n[63]=be,n[64]=we):we=n[64],ne(we);let Te;n[65]!==z||n[66]!==U.scrollOffset||n[67]!==de?(Te=z.slice(U.scrollOffset,U.scrollOffset+de),n[65]=z,n[66]=U.scrollOffset,n[67]=de,n[68]=Te):Te=n[68];let Ee=Te,De;n[69]===b?De=n[70]:(De=B(A,{items:[...b],children:Gy}),n[69]=b,n[70]=De);let Oe;n[71]===Symbol.for(`react.memo_cache_sentinel`)?(Oe=B(av,{}),n[71]=Oe):Oe=n[71];let ke;n[72]===u.DIM?ke=n[73]:(ke=B(j,{color:u.DIM,children:H.pointerSmall}),n[72]=u.DIM,n[73]=ke);let Ae;n[74]!==u.TEXT||n[75]!==i?(Ae=B(j,{color:u.TEXT,children:i}),n[74]=u.TEXT,n[75]=i,n[76]=Ae):Ae=n[76];let je;n[77]!==ke||n[78]!==Ae?(je=V(k,{children:[Oe,V(j,{wrap:`truncate`,children:[` `,ke,` `,Ae]})]}),n[77]=ke,n[78]=Ae,n[79]=je):je=n[79];let Me;n[80]!==u.DIM||n[81]!==u.PRIMARY||n[82]!==w||n[83]!==x?(Me=x&&w&&B(k,{marginTop:0,children:V(j,{color:u.DIM,children:[` `,`Press `,B(j,{color:u.PRIMARY,children:`o`}),` to open live preview`]})}),n[80]=u.DIM,n[81]=u.PRIMARY,n[82]=w,n[83]=x,n[84]=Me):Me=n[84];let Ne;n[85]!==u.DIM||n[86]!==u.GREEN||n[87]!==u.RED||n[88]!==u.YELLOW||n[89]!==le||n[90]!==O||n[91]!==F||n[92]!==w||n[93]!==ue||n[94]!==Ee?(Ne=F?B(k,{flexDirection:`column`,marginTop:1,children:Ee}):V(pe,{children:[ue===0&&w&&(()=>{let e=O?ky(O.events,!1):[];return V(k,{marginTop:1,flexDirection:`column`,children:[V(k,{children:[B(qm,{}),B(j,{children:` `}),B(Fv,{text:`Starting${H.ellipsis} ${le}`,baseColor:J.shimmerBase,highlightColor:J.shimmerHighlight})]}),e.map(Ky)]})})(),B(k,{flexDirection:`column`,marginTop:1,children:(O?.steps??[]).map((e,t)=>{let n=v.isSome(e.summary)?e.summary.value:e.title,r=Ny(e),i=r===void 0?void 0:Lv(r),a=`${t+1}.`;if(e.status===`active`){let t=O?Oy(O.events,!1):[];return V(k,{flexDirection:`column`,children:[V(k,{children:[V(j,{color:u.DIM,children:[` `,a,` `]}),B(qm,{}),B(j,{children:` `}),B(Fv,{text:`${e.title} ${le}`,baseColor:J.shimmerBase,highlightColor:J.shimmerHighlight})]}),t.map(qy)]},e.id)}return e.status===`passed`?V(j,{children:[V(j,{color:u.DIM,children:[` `,a]}),V(j,{color:u.GREEN,children:[` `,H.tick,` `,Be(n,100)]}),i&&V(j,{color:u.DIM,children:[` `,i]})]},e.id):e.status===`failed`?V(j,{children:[V(j,{color:u.DIM,children:[` `,a]}),V(j,{color:u.RED,children:[` `,H.cross,` `,Be(n,100)]}),i&&V(j,{color:u.DIM,children:[` `,i]})]},e.id):e.status===`skipped`?V(j,{children:[V(j,{color:u.DIM,children:[` `,a]}),V(j,{color:u.YELLOW,children:[` `,H.arrowRight,` `,Be(n,100)]}),i&&V(j,{color:u.DIM,children:[` `,i]})]},e.id):V(j,{color:u.DIM,children:[` `,a,` `,H.circle,` `,e.title]},e.id)})})]}),n[85]=u.DIM,n[86]=u.GREEN,n[87]=u.RED,n[88]=u.YELLOW,n[89]=le,n[90]=O,n[91]=F,n[92]=w,n[93]=ue,n[94]=Ee,n[95]=Ne):Ne=n[95];let Pe;n[96]!==u.PRIMARY||n[97]!==u.YELLOW||n[98]!==ie?(Pe=ie&&B(k,{marginTop:1,children:V(j,{color:u.YELLOW,children:[`Stop run? `,B(j,{color:u.PRIMARY,children:`enter`}),` to stop,`,` `,B(j,{color:u.PRIMARY,children:`esc`}),` to dismiss`]})}),n[96]=u.PRIMARY,n[97]=u.YELLOW,n[98]=ie,n[99]=Pe):Pe=n[99];let Fe;n[100]!==je||n[101]!==Me||n[102]!==Ne||n[103]!==Pe?(Fe=V(k,{flexDirection:`column`,width:`100%`,paddingY:1,paddingX:1,children:[je,Me,Ne,Pe]}),n[100]=je,n[101]=Me,n[102]=Ne,n[103]=Pe,n[104]=Fe):Fe=n[104];let Ie;n[105]===_?Ie=n[106]:(Ie=rt.builder(_).onError(Jy).onDefect(Yy).orNull(),n[105]=_,n[106]=Ie);let Le;n[107]!==Fe||n[108]!==Ie?(Le=V(k,{flexDirection:`column`,width:`100%`,children:[Fe,Ie]}),n[107]=Fe,n[108]=Ie,n[109]=Le):Le=n[109];let Re;return n[110]!==De||n[111]!==Le?(Re=V(pe,{children:[De,Le]}),n[110]=De,n[111]=Le,n[112]=Re):Re=n[112],Re};function Iy(e){return e.setScreen}function Ly(e){return e.agentBackend}function Ry(e){return e.browserHeaded}function zy(e){return e.replayHost}function By(e){return e.toggleNotifications}function Vy(e){return e.expanded}function Hy(e){return e.setExpanded}function Uy(e){return e.toggleExpanded}function Wy(e){return`[url: ${e}]`}function Gy(e){return B(k,{paddingX:1,children:B($v,{src:e,alt:e})},e)}function Ky(e,t){return B(My,{display:e,indent:` `},t)}function qy(e,t){return B(My,{display:e,indent:` `},t)}function Jy(e){return B(ey,{type:`error`,error:e})}function Yy(e){return B(ey,{type:`defect`,error:{_tag:`Defect`,message:s.pretty(s.fail(e))}})}const Xy=e=>{try{return le.execSync(`pbcopy`,{input:e,stdio:[`pipe`,`ignore`,`ignore`]}),!0}catch{return!1}},Zy=(e,t)=>d.runPromise(gm.use(n=>n.addComment(process.cwd(),e,t)).pipe(d.provide(gm.layer))),Qy=()=>ie({mutationFn:({pullRequest:e,body:t})=>Zy(e,t)}),$y=iy.fn(d.fnUntraced(function*(e,t){return yield*(yield*pm).save(e.plan)},d.annotateLogs({fn:`saveFlowFn`}),d.provide(K.layer))),eb=e=>{if(!(v.isNone(e.startedAt)||v.isNone(e.endedAt)))return l.toEpochMillis(e.endedAt.value)-l.toEpochMillis(e.startedAt.value)},tb=e=>{let t=0;for(let n of e){let e=eb(n);e!==void 0&&(t+=e)}return t},nb=e=>{let t=ae(141);if(t[0]!==`b7e547f8ebc01ced52659efc05613f9ccf6a352b61760b052762a2223144f2e9`){for(let e=0;e<141;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`b7e547f8ebc01ced52659efc05613f9ccf6a352b61760b052762a2223144f2e9`}let{report:n,replayUrl:r,localReplayUrl:i,videoUrl:a}=e,o=It(),s=eh(rb),[c,l]=R(void 0),u=Qy(),d;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(d={mode:`promiseExit`},t[1]=d):d=t[1];let[f,p]=ot($y,d),m=f.waiting,h;t[2]===f?h=t[3]:(h=rt.isSuccess(f),t[2]=f,t[3]=h);let g=h,_;t[4]!==u||t[5]!==n.pullRequest||t[6]!==n.toPlainText?(_=()=>{v.isSome(n.pullRequest)&&(nv(`results:posted_to_pr`),u.mutate({pullRequest:n.pullRequest.value,body:n.toPlainText}))},t[4]=u,t[5]=n.pullRequest,t[6]=n.toPlainText,t[7]=_):_=t[7];let y=_,b;t[8]!==o.GREEN||t[9]!==o.RED||t[10]!==n.toPlainText?(b=()=>{Xy(n.toPlainText)?(nv(`results:copied_to_clipboard`),l({text:`${H.tick} Copied to clipboard`,color:o.GREEN})):l({text:`${H.cross} Failed to copy to clipboard`,color:o.RED})},t[8]=o.GREEN,t[9]=o.RED,t[10]=n.toPlainText,t[11]=b):b=t[11];let x=b,S;t[12]!==n||t[13]!==m||t[14]!==g||t[15]!==p?(S=async()=>{m||g||(nv(`flow:saved`,{step_count:n.steps.length}),await p({plan:n}))},t[12]=n,t[13]=m,t[14]=g,t[15]=p,t[16]=S):S=t[16];let C=S,w;t[17]!==n.changesFor||t[18]!==n.instruction||t[19]!==s?(w=()=>{nv(`results:restarted`),Iv.getState().setExecutedPlan(void 0),s($m({changesFor:n.changesFor,instruction:n.instruction}))},t[17]=n.changesFor,t[18]=n.instruction,t[19]=s,t[20]=w):w=t[20];let T=w,E;t[21]!==x||t[22]!==y||t[23]!==T||t[24]!==C?(E=e=>{let t=e.toLowerCase();t===`y`&&x(),t===`p`&&y(),t===`s`&&C(),t===`r`&&T()},t[21]=x,t[22]=y,t[23]=T,t[24]=C,t[25]=E):E=t[25],ne(E);let D=n.status===`passed`,O=D?o.GREEN:o.RED,A=D?H.tick:H.cross,ee=D?`Passed`:`Failed`,te,M,N,re,ie,P,F,oe,I,se,ce;if(t[26]!==o.DIM||t[27]!==o.GREEN||t[28]!==o.RED||t[29]!==o.TEXT||t[30]!==o.YELLOW||t[31]!==i||t[32]!==r||t[33]!==n.instruction||t[34]!==n.stepStatuses||t[35]!==n.steps||t[36]!==O||t[37]!==A||t[38]!==ee){let e=tb(n.steps);M=r??i,N=!!r&&!!i&&r!==i&&i!==void 0,te=k,se=`column`,ce=`100%`,re=1,ie=1;let a;t[50]===Symbol.for(`react.memo_cache_sentinel`)?(a=B(av,{}),t[50]=a):a=t[50];let s;t[51]===o.DIM?s=t[52]:(s=B(j,{color:o.DIM,children:H.pointerSmall}),t[51]=o.DIM,t[52]=s);let c;t[53]!==o.TEXT||t[54]!==n.instruction?(c=B(j,{color:o.TEXT,children:n.instruction}),t[53]=o.TEXT,t[54]=n.instruction,t[55]=c):c=t[55],t[56]!==s||t[57]!==c?(P=V(k,{children:[a,V(j,{wrap:`truncate`,children:[` `,s,` `,c]})]}),t[56]=s,t[57]=c,t[58]=P):P=t[58];let l;t[59]!==O||t[60]!==A||t[61]!==ee?(l=V(j,{color:O,bold:!0,children:[A,` `,ee]}),t[59]=O,t[60]=A,t[61]=ee,t[62]=l):l=t[62];let u=n.steps.length===1?``:`s`,d;t[63]!==o.DIM||t[64]!==n.steps.length||t[65]!==u?(d=V(j,{color:o.DIM,children:[` `,n.steps.length,` step`,u]}),t[63]=o.DIM,t[64]=n.steps.length,t[65]=u,t[66]=d):d=t[66],t[67]!==l||t[68]!==d?(F=V(k,{marginTop:1,children:[l,d]}),t[67]=l,t[68]=d,t[69]=F):F=t[69];let f;if(t[70]!==o.DIM||t[71]!==o.GREEN||t[72]!==o.RED||t[73]!==o.YELLOW||t[74]!==n.stepStatuses||t[75]!==n.steps){let e;t[77]!==o.DIM||t[78]!==o.GREEN||t[79]!==o.RED||t[80]!==o.YELLOW||t[81]!==n.stepStatuses?(e=(e,t)=>{let r=eb(e),i=r===void 0?void 0:Lv(r),a=n.stepStatuses.get(e.id),s=a?.status===`failed`,c=a?.status===`skipped`,l=s?o.RED:c?o.YELLOW:o.GREEN,u=s?H.cross:c?H.arrowRight:H.tick,d=`${t+1}.`;return V(k,{flexDirection:`column`,children:[V(j,{children:[V(j,{color:o.DIM,children:[` `,d]}),V(j,{color:l,children:[` `,u,` `,e.title]}),i&&V(j,{color:o.DIM,children:[` `,i]})]}),(s||c)&&a?.summary&&V(j,{color:o.DIM,children:[` `,a.summary]})]},e.id)},t[77]=o.DIM,t[78]=o.GREEN,t[79]=o.RED,t[80]=o.YELLOW,t[81]=n.stepStatuses,t[82]=e):e=t[82],f=n.steps.map(e),t[70]=o.DIM,t[71]=o.GREEN,t[72]=o.RED,t[73]=o.YELLOW,t[74]=n.stepStatuses,t[75]=n.steps,t[76]=f}else f=t[76];t[83]===f?oe=t[84]:(oe=B(k,{flexDirection:`column`,marginTop:1,children:f}),t[83]=f,t[84]=oe),I=e>0&&B(k,{marginTop:1,children:V(j,{color:o.DIM,children:[`Worked for `,Lv(e)]})}),t[26]=o.DIM,t[27]=o.GREEN,t[28]=o.RED,t[29]=o.TEXT,t[30]=o.YELLOW,t[31]=i,t[32]=r,t[33]=n.instruction,t[34]=n.stepStatuses,t[35]=n.steps,t[36]=O,t[37]=A,t[38]=ee,t[39]=te,t[40]=M,t[41]=N,t[42]=re,t[43]=ie,t[44]=P,t[45]=F,t[46]=oe,t[47]=I,t[48]=se,t[49]=ce}else te=t[39],M=t[40],N=t[41],re=t[42],ie=t[43],P=t[44],F=t[45],oe=t[46],I=t[47],se=t[48],ce=t[49];let L;t[85]===c?L=t[86]:(L=c&&B(k,{marginTop:1,children:B(j,{color:c.color,children:c.text})}),t[85]=c,t[86]=L);let le;t[87]!==o.DIM||t[88]!==u.isPending?(le=u.isPending&&B(k,{marginTop:1,children:V(j,{color:o.DIM,children:[`Posting to PR`,H.ellipsis]})}),t[87]=o.DIM,t[88]=u.isPending,t[89]=le):le=t[89];let ue;t[90]!==o.GREEN||t[91]!==u.isSuccess?(ue=u.isSuccess&&B(k,{marginTop:1,children:V(j,{color:o.GREEN,children:[H.tick,` Posted to PR`]})}),t[90]=o.GREEN,t[91]=u.isSuccess,t[92]=ue):ue=t[92];let z;t[93]!==o.RED||t[94]!==u.isError?(z=u.isError&&B(k,{marginTop:1,children:V(j,{color:o.RED,children:[H.cross,` Failed to post to PR`]})}),t[93]=o.RED,t[94]=u.isError,t[95]=z):z=t[95];let de;t[96]!==o.DIM||t[97]!==m?(de=m&&B(k,{marginTop:1,children:V(j,{color:o.DIM,children:[`Saving flow`,H.ellipsis]})}),t[96]=o.DIM,t[97]=m,t[98]=de):de=t[98];let fe;t[99]!==o.GREEN||t[100]!==g?(fe=g&&B(k,{marginTop:1,children:V(j,{color:o.GREEN,children:[H.tick,` Flow saved`]})}),t[99]=o.GREEN,t[100]=g,t[101]=fe):fe=t[101];let pe;t[102]!==o.RED||t[103]!==f?(pe=rt.isFailure(f)&&B(k,{marginTop:1,children:V(j,{color:o.RED,children:[H.cross,` Failed to save flow`]})}),t[102]=o.RED,t[103]=f,t[104]=pe):pe=t[104];let U;t[105]!==o.DIM||t[106]!==o.PRIMARY||t[107]!==M?(U=M&&B(k,{flexDirection:`column`,paddingX:1,marginTop:1,children:V(j,{color:o.DIM,children:[`Replay:`,` `,B(j,{color:o.PRIMARY,bold:!0,children:M})]})}),t[105]=o.DIM,t[106]=o.PRIMARY,t[107]=M,t[108]=U):U=t[108];let W;t[109]!==o.DIM||t[110]!==o.PRIMARY||t[111]!==i||t[112]!==N?(W=N&&B(k,{flexDirection:`column`,paddingX:1,children:V(j,{color:o.DIM,children:[`Local Replay:`,` `,B(j,{color:o.PRIMARY,bold:!0,children:i})]})}),t[109]=o.DIM,t[110]=o.PRIMARY,t[111]=i,t[112]=N,t[113]=W):W=t[113];let me;t[114]!==o.DIM||t[115]!==o.PRIMARY||t[116]!==a?(me=a&&B(k,{flexDirection:`column`,paddingX:1,children:V(j,{color:o.DIM,children:[`Video:`,` `,B(j,{color:o.PRIMARY,bold:!0,children:a})]})}),t[114]=o.DIM,t[115]=o.PRIMARY,t[116]=a,t[117]=me):me=t[117];let he;t[118]===n.screenshotPaths?he=t[119]:(he=n.screenshotPaths.map(ib),t[118]=n.screenshotPaths,t[119]=he);let ge;return t[120]!==te||t[121]!==re||t[122]!==ie||t[123]!==P||t[124]!==F||t[125]!==oe||t[126]!==I||t[127]!==L||t[128]!==le||t[129]!==ue||t[130]!==z||t[131]!==de||t[132]!==fe||t[133]!==pe||t[134]!==U||t[135]!==W||t[136]!==me||t[137]!==he||t[138]!==se||t[139]!==ce?(ge=V(te,{flexDirection:se,width:ce,paddingY:re,paddingX:ie,children:[P,F,oe,I,L,le,ue,z,de,fe,pe,U,W,me,he]}),t[120]=te,t[121]=re,t[122]=ie,t[123]=P,t[124]=F,t[125]=oe,t[126]=I,t[127]=L,t[128]=le,t[129]=ue,t[130]=z,t[131]=de,t[132]=fe,t[133]=pe,t[134]=U,t[135]=W,t[136]=me,t[137]=he,t[138]=se,t[139]=ce,t[140]=ge):ge=t[140],ge};function rb(e){return e.setScreen}function ib(e){return B(k,{marginTop:1,children:B($v,{src:e,alt:`Screenshot: ${e}`})},e)}const ab=h.mergeAll(pm.layer,$p.withRepoRoot(process.cwd())),ob=()=>P({queryKey:[`saved-flows`],queryFn:()=>d.gen(function*(){return yield*(yield*pm).list()}).pipe(d.provide(ab),d.provide(K.layer),d.catchTag(`FindRepoRootError`,()=>d.succeed([])),d.runPromise)}),sb=new hn({isGitRepo:!1,currentBranch:`HEAD`,mainBranch:void 0,isOnMain:!1,hasChangesFromMain:!1,hasUnstagedChanges:!1,hasBranchCommits:!1,branchCommitCount:0,fileStats:[],workingTreeFileStats:[],fingerprint:void 0,savedFingerprint:void 0}),cb=()=>P({queryKey:[`git-state`],queryFn:async()=>{let e=await d.runPromiseExit(d.gen(function*(){return yield*(yield*$p).getState()}).pipe(d.provide($p.withRepoRoot(process.cwd())),d.catchTag(`FindRepoRootError`,()=>d.succeed(sb)),d.timeoutOrElse({duration:1e4,onTimeout:()=>d.succeed(sb)}),d.provide(K.layer)));return f.isSuccess(e)?e.value:sb}}),lb=e=>Array.isArray(e.flow?.steps)?e.flow.steps:[],ub=(e,t)=>{let n=vn.makeUnsafe({_tag:`Changes`,mainBranch:t}),r=lb(e),i={title:e.flow.title,userInstruction:e.flow.userInstruction,steps:r},a=e.environment.cookies;nv(`flow:reused`,{slug:e.slug,step_count:r.length}),eh.getState().setScreen($m({changesFor:n,instruction:e.flow.userInstruction,savedFlow:i,requiresCookies:a}))},db=()=>{let e=ae(11);if(e[0]!==`53939b05c229418d7d52eba403172d78da52d4f06481f5625a9cf002fc443ae8`){for(let t=0;t<11;t+=1)e[t]=Symbol.for(`react.memo_cache_sentinel`);e[0]=`53939b05c229418d7d52eba403172d78da52d4f06481f5625a9cf002fc443ae8`}let t=It(),[n]=Nt(),r=eh(fb),{data:i}=cb(),{data:a,isLoading:o}=ob(),s=a===void 0?[]:a,{highlightedIndex:c,setHighlightedIndex:l,scrollOffset:u,handleNavigation:d}=Ym({itemCount:s.length,visibleCount:15}),f=Math.min(40,Math.floor(n*.35)),p=Math.max(20,n-f-8),m=s.slice(u,u+15);ne((e,t)=>{if(!d(e,t)){if(t.return){let e=s[c];e&&ub(e,i?.mainBranch??`main`)}t.escape&&r(Qm.Main())}});let h=k,g=`${s.length} flow${s.length===1?``:`s`}`,_;e[1]===g?_=e[2]:(_=B(k,{paddingX:1,children:B(nh,{title:`Saved flows`,subtitle:g})}),e[1]=g,e[2]=_);let v;e[3]===o?v=e[4]:(v=o&&B(k,{marginTop:1,paddingX:1,children:B(qm,{message:`Loading saved flows...`})}),e[3]=o,e[4]=v);let y=!o&&s.length===0&&B(k,{marginTop:1,paddingX:1,flexDirection:`column`,children:V(j,{color:t.DIM,children:[`No saved flows yet. Run a test and press `,B(j,{color:t.PRIMARY,children:`s`}),` on the results screen to save a flow.`]})}),b=!o&&s.length>0&&B(k,{marginTop:1,flexDirection:`column`,height:15,overflow:`hidden`,paddingX:1,children:m.map((e,n)=>{let r=n+u,a=r===c,o=lb(e).length;return V(zt,{onClick:()=>{l(r),ub(e,i?.mainBranch??`main`)},children:[B(j,{color:a?t.PRIMARY:t.DIM,children:a?`${H.pointer} `:` `}),B(j,{color:a?t.PRIMARY:t.TEXT,bold:a,children:Jm(Be(e.title,f-1),f)}),B(j,{color:t.DIM,children:Jm(`${o} step${o===1?``:`s`}`,10)}),B(j,{color:t.DIM,children:Be(e.description,p)})]},e.slug)})}),x;return e[5]!==h||e[6]!==_||e[7]!==v||e[8]!==y||e[9]!==b?(x=V(h,{flexDirection:`column`,width:`100%`,paddingY:1,children:[_,v,y,b]}),e[5]=h,e[6]=_,e[7]=v,e[8]=y,e[9]=b,e[10]=x):x=e[10],x};function fb(e){return e.setScreen}const pb=e=>{let t=ae(7);if(t[0]!==`4fad32b1608f5dc4d90407ad58143bc83cfcba6f2b87af31eb3b6ad187111fee`){for(let e=0;e<7;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`4fad32b1608f5dc4d90407ad58143bc83cfcba6f2b87af31eb3b6ad187111fee`}let{status:n}=e,r=It();if(n===`open`){let e;return t[1]===r.GREEN?e=t[2]:(e=V(j,{color:r.GREEN,children:[H.bullet,` `]}),t[1]=r.GREEN,t[2]=e),e}if(n===`merged`){let e;return t[3]===r.PURPLE?e=t[4]:(e=V(j,{color:r.PURPLE,children:[H.bullet,` `]}),t[3]=r.PURPLE,t[4]=e),e}if(n===`draft`){let e;return t[5]===r.DIM?e=t[6]:(e=V(j,{color:r.DIM,children:[H.bullet,` `]}),t[5]=r.DIM,t[6]=e),e}return null},mb=e=>{let t=ae(30);if(t[0]!==`4fad32b1608f5dc4d90407ad58143bc83cfcba6f2b87af31eb3b6ad187111fee`){for(let e=0;e<30;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`4fad32b1608f5dc4d90407ad58143bc83cfcba6f2b87af31eb3b6ad187111fee`}let{options:n,selectedIndex:r,isLoading:i,gitState:a}=e,o=It(),s;bb0:{if(n.length<=8){s=0;break bb0}let e=n.length-8;s=Math.min(e,Math.max(0,r-4))}let c=s,l,u,d,f;if(t[1]!==o||t[2]!==a||t[3]!==i||t[4]!==n||t[5]!==c||t[6]!==r){f=Symbol.for(`react.early_return_sentinel`);bb1:{let e=n.slice(c,c+8);if(n.length===0&&!i){let e;t[11]===o.DIM?e=t[12]:(e=B(k,{flexDirection:`column`,children:B(j,{color:o.DIM,children:`No matching results`})}),t[11]=o.DIM,t[12]=e),f=e;break bb1}l=k,u=`column`;let s;t[13]!==o||t[14]!==a||t[15]!==c||t[16]!==r?(s=(e,t)=>{let n=t+c===r,i=Hm(e,a),s=Um(e,a),l=e._tag===`PullRequest`||e._tag===`Branch`?e.branch.prNumber:null,u=e._tag===`PullRequest`||e._tag===`Branch`?e.branch.prStatus:null;return V(j,{wrap:`truncate`,children:[B(j,{color:n?o.PRIMARY:o.DIM,children:n?`${H.pointer} `:` `}),e._tag===`WorkingTree`?V(j,{color:o.GREEN,children:[H.bullet,` `]}):null,u?B(pb,{status:u}):null,B(j,{color:n?o.PRIMARY:o.TEXT,bold:n,children:i}),l?V(j,{children:[` `,V(j,{color:u===`open`?o.GREEN:u===`merged`?o.PURPLE:o.DIM,children:[`#`,l]}),u?V(j,{color:o.DIM,children:[` `,u]}):null]}):null,s&&!l?V(j,{color:o.DIM,children:[` `,s]}):null]},Yn(e))},t[13]=o,t[14]=a,t[15]=c,t[16]=r,t[17]=s):s=t[17],d=e.map(s)}t[1]=o,t[2]=a,t[3]=i,t[4]=n,t[5]=c,t[6]=r,t[7]=l,t[8]=u,t[9]=d,t[10]=f}else l=t[7],u=t[8],d=t[9],f=t[10];if(f!==Symbol.for(`react.early_return_sentinel`))return f;let p;t[18]!==o||t[19]!==i?(p=i?B(k,{children:V(j,{color:o.DIM,children:[` Loading PRs and branches`,H.ellipsis]})}):null,t[18]=o,t[19]=i,t[20]=p):p=t[20];let m;t[21]!==o||t[22]!==n.length?(m=n.length>8?B(k,{children:V(j,{color:o.DIM,children:[` `,n.length-8,` more `,H.arrowUp,`/`,H.arrowDown]})}):null,t[21]=o,t[22]=n.length,t[23]=m):m=t[23];let h;return t[24]!==l||t[25]!==u||t[26]!==d||t[27]!==p||t[28]!==m?(h=V(l,{flexDirection:u,children:[d,p,m]}),t[24]=l,t[25]=u,t[26]=d,t[27]=p,t[28]=m,t[29]=h):h=t[29],h},hb=({gitState:e,onSelect:t})=>{let[n,r]=R(!1),[i,a]=R(``),[o,s]=R(0),{data:c=[]}=P({queryKey:[`local-context-options`,e?.currentBranch],queryFn:()=>zm(e),enabled:!!e}),{data:l=[],isLoading:u}=P({queryKey:[`remote-context-options`,e?.currentBranch],queryFn:()=>Vm(e),enabled:n&&!!e}),d=ce(()=>[...c,...l],[c,l]),f=ce(()=>Gm(d,i,e),[d,i,e]);se(()=>{s(0)},[i]);let p=oe(()=>{r(!0),a(``),s(0)},[]),m=oe(()=>{r(!1),a(``)},[]);return{pickerOpen:n,pickerQuery:i,pickerIndex:o,filteredOptions:f,localOptions:c,remoteLoading:u,openPicker:p,closePicker:m,handleContextSelect:oe(e=>{t(e),m()},[t,m]),setPickerQuery:a,setPickerIndex:s,createInputChangeHandler:(e,t)=>r=>{let i=At(r),o=e.current;if(i.length>o.length&&i[i.length-1]===`@`&&(o.length===0||i[i.length-2]===` `)){t(i.slice(0,-1)),p();return}if(n){i.length-o.length<0?(m(),t(i)):a(e=>{let n=i.slice(o.length);return n.includes(` `)?(m(),t(i),``):e+n});return}t(i)}}},gb=e=>{let t=new Set;return e.filter(e=>t.has(e.path)?!1:(t.add(e.path),!0))},_b=e=>P({queryKey:[`test-coverage`,e?.fingerprint],queryFn:async()=>{if(!e?.isGitRepo||!e.hasChangesFromMain&&!e.hasUnstagedChanges)return;let t=e.mainBranch??`main`,n=await d.runPromiseExit(d.gen(function*(){let e=yield*$p,n=yield*Lm,r=yield*e.getChangedFiles(vn.makeUnsafe({_tag:`WorkingTree`})),i=yield*e.getChangedFiles(vn.makeUnsafe({_tag:`Changes`,mainBranch:t})),a=gb([...r,...i]);if(a.length!==0)return yield*n.analyze(a)}).pipe(d.provide($p.withRepoRoot(process.cwd())),d.provide(Lm.layer),d.timeoutOrElse({duration:15e3,onTimeout:()=>d.succeed(void 0)}),d.provide(K.layer)));if(f.isSuccess(n))return n.value},enabled:!!(e?.isGitRepo&&(e.hasChangesFromMain||e.hasUnstagedChanges)),staleTime:3e4}),vb=[`Test the main user flow end to end`,`Smoke test the homepage and key pages`,`Check authentication and protected routes`],yb=[`Verify my recent changes work as expected`,`Check for regressions in related features`,`Test the main user flow end to end`],bb=[`Test the changes on this branch`,`Smoke test this branch end to end`,`Check for regressions on this branch`],xb=[`Test the changes in this pull request`,`Check for regressions introduced by this PR`,`Verify the PR works end to end`],Sb=[`Test the changes from this commit`,`Check if this commit introduces regressions`,`Verify this commit works as expected`],Cb=(e,t)=>{if(!e)return vb;switch(e._tag){case`WorkingTree`:return yb;case`Branch`:return bb;case`PullRequest`:return xb;case`Commit`:return Sb;default:return vb}},wb=e=>e>=70?Ft.GREEN:e>=40?Ft.YELLOW:Ft.RED,Tb=e=>e>=70?`#0a2b0a`:e>=40?`#332b00`:`#331510`,Eb=e=>`Use Expect to test your changes.`,Db=e=>{let t=Math.round(e/100*10),n=10-t;return{filled:`█`.repeat(t),empty:`░`.repeat(n)}},Ob=({gitState:e})=>{let t=It(),[n]=Nt(),r=ev(e=>e.instructionHistory),i=eh(e=>e.setScreen),[a,o]=R(void 0),[s,c]=R(``),[l,u]=R(0),[d,f]=R(0),[p,m]=R(!1),[h,g]=R(void 0),[_,v]=R(-1),[y,b]=R(``),x=dv(e=>e.cookiesEnabled),S=dv(e=>e.toggleCookies),{data:C}=_b(e),w=()=>{if(r.length===0)return;let e=_+1;e>=r.length||(_===-1&&b(s),v(e),c(r[e]),u(e=>e+1))},T=()=>{if(_<=-1)return;let e=_-1;v(e),c(e===-1?y:r[e]),u(e=>e+1)},E=hb({gitState:e??null,onSelect:e=>{o(e),nv(`context:selected`,{context_type:{WorkingTree:`working_tree`,Branch:`branch`,PullRequest:`pull_request`,Commit:`commit`}[e._tag]})}}),D=E.localOptions.find(e=>e._tag===`WorkingTree`)??void 0,O=a??D??null,A=Cb(O,e??null);se(()=>{f(0)},[O,e]);let ee=t=>{let n=(t??s).trim();if(!n){g(`Describe what you want the browser agent to test.`);return}if(!e)return;let r=e.mainBranch??`main`,a;O?._tag===`Commit`?a=vn.makeUnsafe({_tag:`Commit`,hash:O.hash}):O?._tag===`Branch`||O?._tag===`PullRequest`?(O.branch.name&&(mm(process.cwd(),O.branch.name),th.invalidateQueries({queryKey:[`git-state`]})),a=vn.makeUnsafe({_tag:`Branch`,mainBranch:r})):a=vn.makeUnsafe({_tag:`Changes`,mainBranch:r}),ev.getState().rememberInstruction(n),x||Zm(n)?i($m({changesFor:a,instruction:n,requiresCookies:x})):i(Qm.CookieSyncConfirm({changesFor:a,instruction:n}))},te=L(s);te.current=s;let M=E.createInputChangeHandler(te,e=>{c(e),h&&g(void 0)}),N=!s.includes(`
43
- `),re=s===``&&!E.pickerOpen&&A.length>0,ie=re&&!p&&n>=80,P=A[d%A.length];return ne((e,t)=>{if(E.pickerOpen){if(t.escape){E.closePicker();return}if(t.downArrow||t.ctrl&&e===`n`){E.setPickerIndex(Math.min(E.filteredOptions.length-1,E.pickerIndex+1));return}if(t.upArrow||t.ctrl&&e===`p`){E.setPickerIndex(Math.max(0,E.pickerIndex-1));return}if(t.return||t.tab){let e=E.filteredOptions[E.pickerIndex];e&&E.handleContextSelect(e);return}if(t.backspace||t.delete){E.pickerQuery.length===0?E.closePicker():E.setPickerQuery(E.pickerQuery.slice(0,-1));return}e&&!t.ctrl&&!t.meta&&E.setPickerQuery(E.pickerQuery+e);return}if(N&&t.upArrow){w();return}if(N&&t.downArrow){T();return}if(t.ctrl&&e===`k`){S(),nv(`cookies:toggled`,{enabled:!x});return}if(t.tab&&!t.shift&&re&&P){c(P),u(e=>e+1),nv(`suggestion:accepted`);return}if(!(t.tab&&t.shift)&&re){if(t.rightArrow){f(e=>(e+1)%A.length),m(!0);return}if(t.leftArrow){f(e=>(e-1+A.length)%A.length),m(!0);return}}},{isActive:!0}),V(k,{flexDirection:`column`,width:`100%`,paddingY:1,children:[B(k,{flexDirection:`column`,marginBottom:1,paddingX:1,children:B(av,{})}),(e?.hasUntestedChanges||C&&C.totalCount>0)&&!(C&&C.totalCount>0&&C.percent>=90)&&V(k,{paddingX:1,paddingY:1,marginBottom:1,backgroundColor:C&&C.totalCount>0?Tb(C.percent):t.BANNER_BG,width:`100%`,flexDirection:`column`,gap:0,children:[(()=>{if(C&&C.totalCount>0)return V(k,{children:[V(j,{color:wb(C.percent),bold:!0,children:[H.warning,` Untested changes`]}),B(j,{children:` `}),B(j,{color:wb(C.percent),children:Db(C.percent).filled}),B(j,{color:t.DIM,children:Db(C.percent).empty}),V(j,{color:wb(C.percent),children:[` `,C.percent,`% test coverage`]})]});if(!e)return null;let n=e.workingTreeFileStats,r=n.reduce((e,t)=>e+t.added,0),i=n.reduce((e,t)=>e+t.removed,0);return V(k,{children:[V(j,{color:t.YELLOW,bold:!0,children:[H.warning,` Untested changes detected`]}),n.length>0&&V(pe,{children:[V(j,{color:t.DIM,children:[` `,n.length,` file`,n.length===1?``:`s`,` `]}),r>0&&V(j,{color:t.GREEN,children:[`+`,r]}),r>0&&i>0&&B(j,{color:t.DIM,children:` `}),i>0&&V(j,{color:t.RED,children:[`-`,i]})]})]})})(),B(j,{color:t.DIM,children:C&&C.totalCount>0?Eb(C.percent):`Describe what to test and hit enter to verify your changes.`})]}),V(k,{flexDirection:`column`,width:`100%`,children:[V(k,{paddingX:1,children:[!e&&B(qm,{message:`loading context`}),e&&e.isGitRepo&&O&&B(zt,{fullWidth:!1,onClick:()=>{E.pickerOpen?E.closePicker():E.openPicker()},children:V(j,{color:t.DIM,children:[H.bullet,` `,V(j,{color:t.PRIMARY,children:[`@`,Wm(O,e)]}),Um(O,e)&&` (${Um(O,e)})`]})})]}),B(zt,{children:B(k,{flexDirection:`column`,marginTop:1,backgroundColor:t.INPUT_BG,width:`100%`,paddingX:1,paddingY:1,children:V(k,{children:[B(j,{color:t.PRIMARY,children:`❯ `}),B(k,{flexGrow:1,children:B(Gt,{focus:!E.pickerOpen,multiline:!0,placeholder:P?`${P} [tab]`:``,value:s,onSubmit:ee,onUpArrowAtTop:N?void 0:w,onDownArrowAtBottom:N?void 0:T,onChange:M},l)}),ie?B(j,{color:t.DIM,children:` ←→ cycle test suggestions`}):null]})})}),e?.isGitRepo&&E.pickerOpen&&V(Lt,{color:t.BORDER,children:[V(k,{marginBottom:0,children:[B(j,{color:t.DIM,children:`@ `}),B(j,{color:t.PRIMARY,children:E.pickerQuery}),B(j,{color:t.DIM,children:E.pickerQuery?``:`type to filter`})]}),B(mb,{options:E.filteredOptions,selectedIndex:E.pickerIndex,isLoading:E.remoteLoading,gitState:e})]}),e?.isGitRepo&&!E.pickerOpen&&B(k,{marginTop:1,paddingX:1,children:V(j,{color:t.DIM,children:[B(j,{color:t.PRIMARY,children:`@`}),` add context`]})})]}),B(ty,{message:h})]})},kb=e=>{let t=ae(10);if(t[0]!==`e8c3ad7624de558f1292f5717cd6dbce82fb6c0767dc4ab19348dc7a7975d8f5`){for(let e=0;e<10;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`e8c3ad7624de558f1292f5717cd6dbce82fb6c0767dc4ab19348dc7a7975d8f5`}let{segment:n,mutedColor:r}=e,i=n.color??r,a;t[1]!==n.label||t[2]!==i?(a=V(j,{color:i,children:[n.label,` `]}),t[1]=n.label,t[2]=i,t[3]=a):a=t[3];let o=n.color??r,s;t[4]!==n.key||t[5]!==o?(s=V(j,{color:o,children:[`[`,n.key,`]`]}),t[4]=n.key,t[5]=o,t[6]=s):s=t[6];let c;return t[7]!==a||t[8]!==s?(c=V(pe,{children:[a,s]}),t[7]=a,t[8]=s,t[9]=c):c=t[9],c},Ab=e=>{let t=ae(12);if(t[0]!==`e8c3ad7624de558f1292f5717cd6dbce82fb6c0767dc4ab19348dc7a7975d8f5`){for(let e=0;e<12;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`e8c3ad7624de558f1292f5717cd6dbce82fb6c0767dc4ab19348dc7a7975d8f5`}let{segments:n,color:r,mutedColor:i}=e,a;t[1]===r?a=t[2]:(a=B(j,{color:r,children:` `}),t[1]=r,t[2]=a);let o;if(t[3]!==i||t[4]!==n){let e;t[6]!==i||t[7]!==n.length?(e=(e,t)=>V(k,{children:[e.onClick?B(zt,{fullWidth:!1,onClick:e.onClick,children:B(kb,{segment:e,mutedColor:i})}):B(kb,{segment:e,mutedColor:i}),t<n.length-1&&B(j,{color:i,children:` `})]},e.key+e.label),t[6]=i,t[7]=n.length,t[8]=e):e=t[8],o=n.map(e),t[3]=i,t[4]=n,t[5]=o}else o=t[5];let s;return t[9]!==a||t[10]!==o?(s=V(k,{children:[a,o]}),t[9]=a,t[10]=o,t[11]=s):s=t[11],s},jb=w.Struct({version:w.String}),Mb=(e,t)=>{let n=e.split(`.`).map(Number),r=t.split(`.`).map(Number);for(let e=0;e<3;e++){if((n[e]??0)>(r[e]??0))return!0;if((n[e]??0)<(r[e]??0))return!1}return!1},Nb=d.gen(function*(){let e=yield*d.tryPromise({try:()=>fetch(`https://registry.npmjs.org/${St}/latest`).then(e=>e.json()),catch:e=>Error(`npm registry fetch failed: ${e}`)});return(yield*d.try({try:()=>w.decodeUnknownSync(jb)(e),catch:e=>Error(`npm response decode failed: ${e}`)})).version}).pipe(d.timeoutOrElse({duration:5e3,onTimeout:()=>d.succeed(void 0)})),Pb=()=>{let{data:e}=P({queryKey:[`update-check`],queryFn:async()=>{let e=await d.runPromiseExit(Nb);if(f.isSuccess(e))return e.value},staleTime:36e5,retry:!1,refetchOnWindowFocus:!1});return{latestVersion:e,updateAvailable:e!==void 0&&Mb(e,`0.0.14`)}},Fb=(e,t)=>{let n=ae(87);if(n[0]!==`0545e7691866a2045c1228f27b801065cf39232a2a018c782c9ae2928aa6e0a5`){for(let e=0;e<87;e+=1)n[e]=Symbol.for(`react.memo_cache_sentinel`);n[0]=`0545e7691866a2045c1228f27b801065cf39232a2a018c782c9ae2928aa6e0a5`}let r=It(),i=eh(Rb),a=dv(zb),o=dv(Bb),s=ev(Vb),c=ev(Hb),l=Iv(Ub);switch(e._tag){case`Main`:{let e=a?`cookies on`:`cookies off`,r;n[1]!==e||n[2]!==o?(r={key:`ctrl+k`,label:e,cta:!0,onClick:o},n[1]=e,n[2]=o,n[3]=r):r=n[3];let s;n[4]===i?s=n[5]:(s={key:`ctrl+r`,label:`saved flows`,cta:!0,onClick:()=>i(Qm.SavedFlowPicker())},n[4]=i,n[5]=s);let c;if(n[6]!==t?.isGitRepo||n[7]!==i||n[8]!==r||n[9]!==s){if(c=[r,s],t?.isGitRepo){let e;n[11]===i?e=n[12]:(e={key:`ctrl+p`,label:`pick pr`,cta:!0,onClick:()=>i(Qm.SelectPr())},n[11]=i,n[12]=e),c.push(e)}n[6]=t?.isGitRepo,n[7]=i,n[8]=r,n[9]=s,n[10]=c}else c=n[10];return c}case`SelectPr`:{let e,t,a;n[13]===Symbol.for(`react.memo_cache_sentinel`)?(e={key:`↑↓`,label:`nav`},t={key:`←→`,label:`filter`},a={key:`/`,label:`search`},n[13]=e,n[14]=t,n[15]=a):(e=n[13],t=n[14],a=n[15]);let o;n[16]===i?o=n[17]:(o={key:`esc`,label:`back`,cta:!0,onClick:()=>i(Qm.Main())},n[16]=i,n[17]=o);let s;n[18]===r.PRIMARY?s=n[19]:(s={key:`enter`,label:`select`,color:r.PRIMARY,cta:!0},n[18]=r.PRIMARY,n[19]=s);let c;return n[20]!==o||n[21]!==s?(c=[e,t,a,o,s],n[20]=o,n[21]=s,n[22]=c):c=n[22],c}case`SavedFlowPicker`:{let e;n[23]===Symbol.for(`react.memo_cache_sentinel`)?(e={key:`↑↓`,label:`nav`},n[23]=e):e=n[23];let t;n[24]===i?t=n[25]:(t={key:`esc`,label:`back`,cta:!0,onClick:()=>i(Qm.Main())},n[24]=i,n[25]=t);let a;n[26]===r.PRIMARY?a=n[27]:(a={key:`enter`,label:`select`,color:r.PRIMARY,cta:!0},n[26]=r.PRIMARY,n[27]=a);let o;return n[28]!==t||n[29]!==a?(o=[e,t,a],n[28]=t,n[29]=a,n[30]=o):o=n[30],o}case`CookieSyncConfirm`:{let t;n[31]===Symbol.for(`react.memo_cache_sentinel`)?(t={key:`↑↓`,label:`nav`},n[31]=t):t=n[31];let a;n[32]===i?a=n[33]:(a={key:`esc`,label:`back`,onClick:()=>i(Qm.Main())},n[32]=i,n[33]=a);let o;n[34]!==e.changesFor||n[35]!==e.instruction||n[36]!==e.savedFlow||n[37]!==i?(o={key:`c`,label:`enable sync`,cta:!0,onClick:()=>{i($m({changesFor:e.changesFor,instruction:e.instruction,savedFlow:e.savedFlow,requiresCookies:!0}))}},n[34]=e.changesFor,n[35]=e.instruction,n[36]=e.savedFlow,n[37]=i,n[38]=o):o=n[38];let s;n[39]!==e.changesFor||n[40]!==e.instruction||n[41]!==e.savedFlow||n[42]!==i?(s=()=>{i($m({changesFor:e.changesFor,instruction:e.instruction,savedFlow:e.savedFlow,requiresCookies:!1}))},n[39]=e.changesFor,n[40]=e.instruction,n[41]=e.savedFlow,n[42]=i,n[43]=s):s=n[43];let c;n[44]!==r.PRIMARY||n[45]!==s?(c={key:`a`,label:`run anyway`,color:r.PRIMARY,cta:!0,onClick:s},n[44]=r.PRIMARY,n[45]=s,n[46]=c):c=n[46];let l;return n[47]!==a||n[48]!==o||n[49]!==c?(l=[t,a,o,c],n[47]=a,n[48]=o,n[49]=c,n[50]=l):l=n[50],l}case`PortPicker`:{let e,t,a;n[51]===Symbol.for(`react.memo_cache_sentinel`)?(e={key:`↑↓`,label:`nav`},t={key:`space`,label:`toggle`},a={key:`/`,label:`custom port`},n[51]=e,n[52]=t,n[53]=a):(e=n[51],t=n[52],a=n[53]);let o;n[54]===i?o=n[55]:(o={key:`esc`,label:`back`,cta:!0,onClick:()=>i(Qm.Main())},n[54]=i,n[55]=o);let s;n[56]===r.PRIMARY?s=n[57]:(s={key:`enter`,label:`confirm`,color:r.PRIMARY,cta:!0},n[56]=r.PRIMARY,n[57]=s);let c;return n[58]!==o||n[59]!==s?(c=[e,t,a,o,s],n[58]=o,n[59]=s,n[60]=c):c=n[60],c}case`Testing`:{let e=s===!0?`notify on`:`notify off`,t=l?`collapse`:`expand`,r;n[61]!==e||n[62]!==c?(r={key:`ctrl+n`,label:e,cta:!0,onClick:c},n[61]=e,n[62]=c,n[63]=r):r=n[63];let i;n[64]===t?i=n[65]:(i={key:`ctrl+o`,label:t,cta:!0},n[64]=t,n[65]=i);let a=l?`collapse`:`cancel`,o;n[66]===a?o=n[67]:(o={key:`esc`,label:a},n[66]=a,n[67]=o);let u;return n[68]!==r||n[69]!==i||n[70]!==o?(u=[r,i,o],n[68]=r,n[69]=i,n[70]=o,n[71]=u):u=n[71],u}case`Results`:{let t;n[72]===Symbol.for(`react.memo_cache_sentinel`)?(t={key:`y`,label:`copy`,cta:!0},n[72]=t):t=n[72];let r;if(n[73]!==e.report.changesFor||n[74]!==e.report.instruction||n[75]!==e.report.pullRequest||n[76]!==i){if(r=[t],v.isSome(e.report.pullRequest)){let e;n[78]===Symbol.for(`react.memo_cache_sentinel`)?(e={key:`p`,label:`post to PR`,cta:!0},n[78]=e):e=n[78],r.push(e)}let a;n[79]===Symbol.for(`react.memo_cache_sentinel`)?(a={key:`s`,label:`save flow`,cta:!0},n[79]=a):a=n[79],r.push(a);let o;n[80]!==e.report.changesFor||n[81]!==e.report.instruction||n[82]!==i?(o={key:`r`,label:`restart`,cta:!0,onClick:()=>{Iv.getState().setExecutedPlan(void 0),i($m({changesFor:e.report.changesFor,instruction:e.report.instruction}))}},n[80]=e.report.changesFor,n[81]=e.report.instruction,n[82]=i,n[83]=o):o=n[83],r.push(o);let s;n[84]===i?s=n[85]:(s={key:`esc`,label:`main menu`,cta:!0,onClick:()=>{Iv.getState().setExecutedPlan(void 0),i(Qm.Main())}},n[84]=i,n[85]=s),r.push(s),n[73]=e.report.changesFor,n[74]=e.report.instruction,n[75]=e.report.pullRequest,n[76]=i,n[77]=r}else r=n[77];return r}default:{let e;return n[86]===Symbol.for(`react.memo_cache_sentinel`)?(e=[],n[86]=e):e=n[86],e}}},Ib=e=>e.length>0?` ${e.map(e=>`${e.label} [${e.key}]`).join(` `)}`:``,Lb=()=>{let e=ae(34);if(e[0]!==`0545e7691866a2045c1228f27b801065cf39232a2a018c782c9ae2928aa6e0a5`){for(let t=0;t<34;t+=1)e[t]=Symbol.for(`react.memo_cache_sentinel`);e[0]=`0545e7691866a2045c1228f27b801065cf39232a2a018c782c9ae2928aa6e0a5`}let[t]=Nt(),{data:n}=cb(),r=eh(Wb),{latestVersion:i,updateAvailable:a}=Pb(),o=Fb(r,n),s,c,l,u,d,f,p,m;if(e[1]!==o||e[2]!==t||e[3]!==i||e[4]!==r._tag||e[5]!==a){let n=a?[...o,{key:`ctrl+u`,label:`v${i} available`,cta:!0,color:J.warning}]:o;u=n.filter(Gb);let h=Ve(Ib(u)),g=qb,_=n.filter(Jb),v=g(_)+h+2>t?_.filter(Yb):_,y=g(v);l=Math.max(0,t-y-h-2),c=k,p=`column`,e[14]!==t||e[15]!==r._tag?(m=r._tag===`Testing`?B(Fv,{text:`─`.repeat(t),baseColor:J.shimmerBase,highlightColor:J.shimmerHighlight,speed:3}):B(j,{color:J.border,children:`─`.repeat(t)}),e[14]=t,e[15]=r._tag,e[16]=m):m=e[16],s=k,d=1,f=v.map(Xb),e[1]=o,e[2]=t,e[3]=i,e[4]=r._tag,e[5]=a,e[6]=s,e[7]=c,e[8]=l,e[9]=u,e[10]=d,e[11]=f,e[12]=p,e[13]=m}else s=e[6],c=e[7],l=e[8],u=e[9],d=e[10],f=e[11],p=e[12],m=e[13];let h;e[17]===l?h=e[18]:(h=` `.repeat(l),e[17]=l,e[18]=h);let g;e[19]===h?g=e[20]:(g=B(j,{children:h}),e[19]=h,e[20]=g);let _;e[21]===u?_=e[22]:(_=u.length>0?B(Ab,{segments:u,color:J.primary,mutedColor:J.textMuted}):null,e[21]=u,e[22]=_);let v;e[23]!==s||e[24]!==d||e[25]!==f||e[26]!==g||e[27]!==_?(v=V(s,{paddingX:d,children:[f,g,_]}),e[23]=s,e[24]=d,e[25]=f,e[26]=g,e[27]=_,e[28]=v):v=e[28];let y;return e[29]!==c||e[30]!==p||e[31]!==m||e[32]!==v?(y=V(c,{flexDirection:p,children:[m,v]}),e[29]=c,e[30]=p,e[31]=m,e[32]=v,e[33]=y):y=e[33],y};function Rb(e){return e.setScreen}function zb(e){return e.cookiesEnabled}function Bb(e){return e.toggleCookies}function Vb(e){return e.notifications}function Hb(e){return e.toggleNotifications}function Ub(e){return e.expanded}function Wb(e){return e.screen}function Gb(e){return!e.cta}function Kb(e){return e.color?` ${e.label} [${e.key}] `:`${e.label} [${e.key}]`}function qb(e){return Ve(e.map(Kb).join(` `))}function Jb(e){return e.cta}function Yb(e){return e.key!==`ctrl+p`}function Xb(e,t){let n=V(j,{children:[t>0?` `:``,e.color?V(j,{backgroundColor:e.color,color:`black`,children:[` `,B(j,{bold:!0,children:e.label}),` `,V(j,{children:[`[`,e.key,`]`]}),` `]}):V(j,{children:[V(j,{color:J.textMuted,children:[e.label,` `]}),V(j,{color:J.textMuted,children:[`[`,e.key,`]`]})]})]},e.key+e.label);return e.onClick?B(zt,{onClick:e.onClick,fullWidth:!1,children:n},e.key+e.label):n}let Zb=null;const Qb=e=>{Zb=e},$b=()=>Zb?.clear(),ex=e=>{let t=ae(34);if(t[0]!==`e6ac87aa0f631766a38fac7cfbcee5d6c83ce6fd1edd967a6457097df0e89416`){for(let e=0;e<34;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`e6ac87aa0f631766a38fac7cfbcee5d6c83ce6fd1edd967a6457097df0e89416`}let{agent:n}=e,r=eh(tx),i=eh(nx),a=eh(rx),{data:o}=cb(),s=st(ry),c,l;t[1]!==n||t[2]!==s?(c=()=>{s(v.some(n))},l=[n,s],t[1]=n,t[2]=s,t[3]=c,t[4]=l):(c=t[3],l=t[4]),se(c,l);let u;t[5]!==r._tag||t[6]!==i?(u=()=>{if(r._tag===`CookieSyncConfirm`){i(Qm.Main());return}if(r._tag===`PortPicker`){i(Qm.Main());return}if(r._tag===`Results`){Iv.getState().setExecutedPlan(void 0),i(Qm.Main());return}r._tag!==`Testing`&&i(Qm.Main())},t[5]=r._tag,t[6]=i,t[7]=u):u=t[7];let d=u,{updateAvailable:f}=Pb(),{exit:p}=te(),[,m]=R(0),[,h]=Nt(),g;t[8]!==p||t[9]!==o?.isGitRepo||t[10]!==d||t[11]!==a||t[12]!==r._tag||t[13]!==m||t[14]!==f?(g=(e,t)=>{if(t.ctrl&&e===`l`){$b(),m(ix);return}if(t.ctrl&&e===`u`&&f){p(),process.stdout.write(yt),fe(`npm`,[`install`,`-g`,`${St}@latest`],{stdio:`inherit`});return}t.escape&&r._tag!==`Main`&&d(),t.ctrl&&e===`p`&&r._tag===`Main`&&o?.isGitRepo&&a(Qm.SelectPr()),t.ctrl&&e===`r`&&r._tag===`Main`&&a(Qm.SavedFlowPicker())},t[8]=p,t[9]=o?.isGitRepo,t[10]=d,t[11]=a,t[12]=r._tag,t[13]=m,t[14]=f,t[15]=g):g=t[15],ne(g);let _;t[16]!==o||t[17]!==r._tag||t[18]!==r.baseUrls||t[19]!==r.changesFor||t[20]!==r.instruction||t[21]!==r.localReplayUrl||t[22]!==r.replayUrl||t[23]!==r.report||t[24]!==r.requiresCookies||t[25]!==r.savedFlow||t[26]!==r.videoUrl?(_=()=>{if(!o)return B(Ob,{gitState:void 0});switch(r._tag){case`PortPicker`:return B(Cv,{changesFor:r.changesFor,instruction:r.instruction,savedFlow:r.savedFlow,requiresCookies:r.requiresCookies});case`Testing`:return B(Fy,{changesFor:r.changesFor,instruction:r.instruction,savedFlow:r.savedFlow,requiresCookies:r.requiresCookies,baseUrls:r.baseUrls});case`Results`:return B(nb,{report:r.report,replayUrl:r.replayUrl,localReplayUrl:r.localReplayUrl,videoUrl:r.videoUrl});case`SelectPr`:return B(rh,{});case`CookieSyncConfirm`:return B(sv,{changesFor:r.changesFor,instruction:r.instruction,savedFlow:r.savedFlow});case`SavedFlowPicker`:return B(db,{});default:return B(Ob,{gitState:o})}},t[16]=o,t[17]=r._tag,t[18]=r.baseUrls,t[19]=r.changesFor,t[20]=r.instruction,t[21]=r.localReplayUrl,t[22]=r.replayUrl,t[23]=r.report,t[24]=r.requiresCookies,t[25]=r.savedFlow,t[26]=r.videoUrl,t[27]=_):_=t[27];let y=_,b;t[28]===y?b=t[29]:(b=B(k,{flexGrow:1,children:y()}),t[28]=y,t[29]=b);let x;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(x=B(Lb,{}),t[30]=x):x=t[30];let S;return t[31]!==h||t[32]!==b?(S=B(Dt,{children:V(k,{flexDirection:`column`,width:`100%`,height:h,children:[b,x]})}),t[31]=h,t[32]=b,t[33]=S):S=t[33],S};function tx(e){return e.screen}function nx(e){return e.setScreen}function rx(e){return e.navigateTo}function ix(e){return e+1}const ax=()=>{let e=Ne();return e===`darwin`?`afplay /System/Library/Sounds/Glass.aiff`:e===`win32`?`powershell -c (New-Object Media.SoundPlayer 'C:\\Windows\\Media\\chimes.wav').PlaySync()`:`paplay /usr/share/sounds/freedesktop/stereo/complete.oga 2>/dev/null || aplay /usr/share/sounds/freedesktop/stereo/complete.oga 2>/dev/null`},ox=()=>new Promise(e=>{ue(ax(),()=>e())});var sx=class extends w.ErrorClass(`ExecutionTimeoutError`)({_tag:w.tag(`ExecutionTimeoutError`),timeoutMs:w.Number}){message=`expect execution timed out after ${this.timeoutMs}ms`};const cx=e=>`[${((Date.now()-e)/1e3).toFixed(1)}s]`,lx=e=>e.replace(/\r?\n/g,` `).replace(/::/g,`: :`),ux=e=>d.runPromise(ay(d.gen(function*(){let t=yield*tm,n=yield*nm,r=yield*Z_,i=Date.now();yield*r.capture(`session:started`,{mode:`headless`,skip_planning:!1,browser_headed:e.headed});let a=(yield*c.string(`GITHUB_ACTIONS`).pipe(c.withDefault(``)))!==``,o=e.ci?` [CI mode]`:``;console.log(`expect v${vt}${o}`),v.isSome(e.timeoutMs)&&console.log(`Timeout: ${e.timeoutMs.value}ms`),console.log(`Agent: ${e.agent}`),console.log(`Target: ${yn(e.changesFor)}`),console.log(`Starting browser test...`),a&&console.log(`::group::expect test execution`);let s=Date.now(),l=Date.now(),u=e.ci?setInterval(()=>{let e=Date.now();if(e-l>=6e4){let t=Math.floor((e-s)/6e4);console.log(`${cx(s)} Still running... (${t} minute${t===1?``:`s`} elapsed)`),l=e}},6e4):void 0;yield*r.capture(`run:started`,{plan_id:`direct`});let f=new Set,p=e=>{for(let t of e.events){if(f.has(t.id))continue;f.add(t.id),l=Date.now();let e=cx(s);switch(t._tag){case`RunStarted`:console.log(`${e} Starting ${t.plan.title}`);break;case`StepStarted`:console.log(`${e} ${H.arrowRight} ${t.stepId} ${t.title}`);break;case`StepCompleted`:console.log(`${e} ${H.tick} ${t.stepId} ${t.summary}`);break;case`StepFailed`:console.log(`${e} ${H.cross} ${t.stepId} ${t.message}`),a&&console.log(`::error title=${lx(t.stepId)} failed::${lx(t.message)}`);break;case`StepSkipped`:console.log(`${e} ${H.arrowRight} ${t.stepId} [skipped] ${t.reason}`);break}}},m=t.execute({changesFor:e.changesFor,instruction:e.instruction,isHeadless:!e.headed,requiresCookies:!1}).pipe(E.tap(e=>d.sync(()=>p(e))),E.runLast,d.map(t=>(t._tag===`Some`?t.value:new er({id:``,changesFor:e.changesFor,currentBranch:``,diffPreview:``,fileStats:[],instruction:e.instruction,baseUrl:void 0,isHeadless:!e.headed,requiresCookies:!1,testCoverage:v.none(),title:e.instruction,rationale:`Direct execution`,steps:[],events:[]})).finalizeTextBlock())),h=v.getOrUndefined(e.timeoutMs),g=yield*(h===void 0?m:m.pipe(d.timeoutOrElse({duration:`${h} millis`,onTimeout:()=>d.fail(new sx({timeoutMs:h}))}))).pipe(d.tapError(()=>d.sync(()=>{u&&clearInterval(u),a&&console.log(`::endgroup::`)})),d.catchTag(`ExecutionTimeoutError`,e=>d.sync(()=>{a&&console.log(`::error title=Execution timed out::${lx(e.message)}`),console.error(`\n${e.message}`),process.exit(1)})));u&&clearInterval(u),p(g),a&&console.log(`::endgroup::`);let _=yield*n.report(g),y=_.steps.filter(e=>_.stepStatuses.get(e.id)?.status===`passed`).length,b=_.steps.filter(e=>_.stepStatuses.get(e.id)?.status===`failed`).length;yield*r.capture(`run:completed`,{plan_id:g.id??`direct`,passed:y,failed:b,step_count:g.steps.length,file_count:0,duration_ms:Date.now()-s}),yield*r.capture(`session:ended`,{session_ms:Date.now()-i}),yield*r.flush;let x=_.toPlainText;console.error(`\n${x}`);let S=yield*c.option(c.string(`GITHUB_STEP_SUMMARY`));if(v.isSome(S)){let e=`## expect test results\n\n${_.status===`passed`?`**Result: PASSED**`:`**Result: FAILED**`}\n\n\`\`\`\n${x}\n\`\`\`\n`;yield*d.sync(()=>Ye(S.value,e))}yield*d.promise(()=>ox()),process.exit(_.status===`passed`?0:1)}).pipe(d.provide(ny({verbose:e.verbose,agent:e.agent}))))),dx={error:U.red,warn:U.yellow,info:U.cyan,success:U.green,dim:U.dim},$={error:(...e)=>{console.log(dx.error(e.join(` `)))},warn:(...e)=>{console.log(dx.warn(e.join(` `)))},info:(...e)=>{console.log(dx.info(e.join(` `)))},success:(...e)=>{console.log(dx.success(e.join(` `)))},dim:(...e)=>{console.log(dx.dim(e.join(` `)))},log:(...e)=>{console.log(e.join(` `))},break:()=>{console.log(``)}},fx=()=>{$.break(),$.log(`Cancelled.`),$.break(),process.exit(0)},px=e=>gt(e,{onCancel:fx}),mx=(e,t)=>_t({text:e,isSilent:t?.silent}),hx=[`CI`,`CLAUDECODE`,`CURSOR_AGENT`,`CODEX_CI`,`OPENCODE`,`AMP_HOME`,`AMI`],gx=()=>hx.some(e=>!!process.env[e]),_x=()=>!process.stdin.isTTY,vx={npm:`npm install -g expect-cli@latest`,pnpm:`pnpm add -g expect-cli@latest`,yarn:`yarn global add expect-cli@latest`,bun:`bun add -g expect-cli@latest`,vp:`vp install -g expect-cli@latest`},yx={npm:`npx -y skills add https://github.com/millionco/expect --skill expect -y`,pnpm:`pnpm dlx skills add https://github.com/millionco/expect --skill expect -y`,yarn:`npx -y skills add https://github.com/millionco/expect --skill expect -y`,bun:`bunx skills add https://github.com/millionco/expect --skill expect -y`,vp:`npx -y skills add https://github.com/millionco/expect --skill expect -y`},bx=()=>{if(process.env.VITE_PLUS_CLI_BIN)return`vp`;let e=process.env.npm_config_user_agent;if(e){if(e.startsWith(`pnpm`))return`pnpm`;if(e.startsWith(`yarn`))return`yarn`;if(e.startsWith(`bun`))return`bun`;if(e.startsWith(`npm`))return`npm`}return`npm`},xx=e=>e||gx()||_x(),Sx=e=>new Promise(t=>{ue(e,{timeout:1e4},e=>{t(!e)}).stdin?.end()}),Cx=async(e={})=>{let t=xx(e.yes??!1),n=bx(),r=vx[n];$.break(),$.log(` ${U.red(H.cross)}${U.green(H.tick)} ${U.bold(`Expect`)} ${dx.dim(`v${vt}`)}`),$.dim(` Let agents test your code in a real browser.`),$.break(),Qa().length===0&&($.error(`No supported coding agent found. expect requires one of: Claude Code, Codex, or Cursor.`),$.break(),$.log(` Install one to get started:`),$.log(` ${dx.info(`Claude Code`)} ${dx.dim(`https://docs.anthropic.com/en/docs/claude-code`)}`),$.log(` ${dx.info(`Codex`)} ${dx.dim(`https://github.com/openai/codex`)}`),$.log(` ${dx.info(`Cursor`)} ${dx.dim(`https://cursor.com`)}`),$.break(),process.exit(1));let i=mx(`Installing expect-cli globally...`).start();await Sx(r)?i.succeed(`Installed! ${dx.info(`expect-cli`)} is now available globally.`):(i.fail(`Failed to install globally.`),$.dim(` Run manually: ${dx.info(r)}`)),$.break();let a=t;if(t||(a=(await px({type:`confirm`,name:`installSkill`,message:`Install the ${dx.info(`expect`)} skill for your coding agent?`,initial:!0})).installSkill),a){let e=yx[n],t=mx(`Installing skill...`).start();await Sx(e)?t.succeed(`Skill installed.`):(t.fail(`Failed to install skill.`),$.dim(` Run manually: ${dx.info(e)}`))}$.break(),$.success(`Setup complete! Here's how to get started:`),$.break(),$.log(` 1. ${dx.info(`cd`)} into your project directory`),$.log(` 2. Start your dev server (e.g. ${dx.dim(`npm run dev`)})`),$.log(` 3. Run ${dx.info(`expect-cli`)} to open the interactive test runner`),$.break(),$.log(` Or run headlessly from your coding agent:`),$.break(),$.log(` ${dx.dim(`$`)} ${dx.info(`expect-cli -m "test the login flow" -y`)}`),$.break(),$.log(` Set ${dx.info(`EXPECT_BASE_URL`)} if your app is not on localhost:3000:`),$.break(),$.log(` ${dx.dim(`$`)} ${dx.info(`EXPECT_BASE_URL=http://localhost:5173 expect-cli -m "test the homepage" -y`)}`),$.break()},wx=[`packages/*`,`apps/*`],Tx=e=>xt.some(t=>e.includes(t)),Ex=d.fn(`detectAgent`)(function*(e){let t=yield*m.FileSystem;for(let[n,r]of Object.entries(Ct)){let i=W.join(e,n);if(yield*t.exists(i).pipe(d.catchTag(`PlatformError`,()=>d.succeed(!1))))return r}let n=W.join(e,`package.json`),r=yield*t.readFileString(n).pipe(d.catchTag(`PlatformError`,()=>d.succeed(``)));if(r){let e=yield*d.try({try:()=>JSON.parse(r),catch:()=>({_tag:`JsonParseError`})}).pipe(d.catchTag(`JsonParseError`,()=>d.succeed(void 0)));if(e?.packageManager){let t=e.packageManager.split(`@`)[0];if(t)return t}}return`npm`}),Dx=d.fn(`readPackageJson`)(function*(e){let t=yield*m.FileSystem,n=W.join(e,`package.json`),r=yield*t.readFileString(n);return yield*d.try({try:()=>JSON.parse(r),catch:()=>({_tag:`JsonParseError`})})}),Ox=d.fn(`listWorkspaceDirectories`)(function*(e){let t=yield*m.FileSystem,n=[];for(let r of wx){let i=W.join(e,W.dirname(r)),a=yield*t.readDirectory(i).pipe(d.catchTag(`PlatformError`,()=>d.succeed([])));for(let e of a){let r=W.join(i,e);(yield*t.stat(r).pipe(d.catchTag(`PlatformError`,()=>d.succeed(void 0))))?.type===`Directory`&&n.push(r)}}return n}),kx=(e,t,n)=>new Promise(r=>{z(e,[`run`,n],{cwd:t,timeout:12e4,maxBuffer:5*1024*1024},(e,t,i)=>{let a=(t+`
43
+ `),re=s===``&&!E.pickerOpen&&A.length>0,ie=re&&!p&&n>=80,P=A[d%A.length];return ne((e,t)=>{if(E.pickerOpen){if(t.escape){E.closePicker();return}if(t.downArrow||t.ctrl&&e===`n`){E.setPickerIndex(Math.min(E.filteredOptions.length-1,E.pickerIndex+1));return}if(t.upArrow||t.ctrl&&e===`p`){E.setPickerIndex(Math.max(0,E.pickerIndex-1));return}if(t.return||t.tab){let e=E.filteredOptions[E.pickerIndex];e&&E.handleContextSelect(e);return}if(t.backspace||t.delete){E.pickerQuery.length===0?E.closePicker():E.setPickerQuery(E.pickerQuery.slice(0,-1));return}e&&!t.ctrl&&!t.meta&&E.setPickerQuery(E.pickerQuery+e);return}if(N&&t.upArrow){w();return}if(N&&t.downArrow){T();return}if(t.ctrl&&e===`k`){S(),nv(`cookies:toggled`,{enabled:!x});return}if(t.tab&&!t.shift&&re&&P){c(P),u(e=>e+1),nv(`suggestion:accepted`);return}if(!(t.tab&&t.shift)&&re){if(t.rightArrow){f(e=>(e+1)%A.length),m(!0);return}if(t.leftArrow){f(e=>(e-1+A.length)%A.length),m(!0);return}}},{isActive:!0}),V(k,{flexDirection:`column`,width:`100%`,paddingY:1,children:[B(k,{flexDirection:`column`,marginBottom:1,paddingX:1,children:B(av,{})}),(e?.hasUntestedChanges||C&&C.totalCount>0)&&!(C&&C.totalCount>0&&C.percent>=90)&&V(k,{paddingX:1,paddingY:1,marginBottom:1,backgroundColor:C&&C.totalCount>0?Tb(C.percent):t.BANNER_BG,width:`100%`,flexDirection:`column`,gap:0,children:[(()=>{if(C&&C.totalCount>0)return V(k,{children:[V(j,{color:wb(C.percent),bold:!0,children:[H.warning,` Untested changes`]}),B(j,{children:` `}),B(j,{color:wb(C.percent),children:Db(C.percent).filled}),B(j,{color:t.DIM,children:Db(C.percent).empty}),V(j,{color:wb(C.percent),children:[` `,C.percent,`% test coverage`]})]});if(!e)return null;let n=e.workingTreeFileStats,r=n.reduce((e,t)=>e+t.added,0),i=n.reduce((e,t)=>e+t.removed,0);return V(k,{children:[V(j,{color:t.YELLOW,bold:!0,children:[H.warning,` Untested changes detected`]}),n.length>0&&V(pe,{children:[V(j,{color:t.DIM,children:[` `,n.length,` file`,n.length===1?``:`s`,` `]}),r>0&&V(j,{color:t.GREEN,children:[`+`,r]}),r>0&&i>0&&B(j,{color:t.DIM,children:` `}),i>0&&V(j,{color:t.RED,children:[`-`,i]})]})]})})(),B(j,{color:t.DIM,children:C&&C.totalCount>0?Eb(C.percent):`Describe what to test and hit enter to verify your changes.`})]}),V(k,{flexDirection:`column`,width:`100%`,children:[V(k,{paddingX:1,children:[!e&&B(qm,{message:`loading context`}),e&&e.isGitRepo&&O&&B(zt,{fullWidth:!1,onClick:()=>{E.pickerOpen?E.closePicker():E.openPicker()},children:V(j,{color:t.DIM,children:[H.bullet,` `,V(j,{color:t.PRIMARY,children:[`@`,Wm(O,e)]}),Um(O,e)&&` (${Um(O,e)})`]})})]}),B(zt,{children:B(k,{flexDirection:`column`,marginTop:1,backgroundColor:t.INPUT_BG,width:`100%`,paddingX:1,paddingY:1,children:V(k,{children:[B(j,{color:t.PRIMARY,children:`❯ `}),B(k,{flexGrow:1,children:B(Gt,{focus:!E.pickerOpen,multiline:!0,placeholder:P?`${P} [tab]`:``,value:s,onSubmit:ee,onUpArrowAtTop:N?void 0:w,onDownArrowAtBottom:N?void 0:T,onChange:M},l)}),ie?B(j,{color:t.DIM,children:` ←→ cycle test suggestions`}):null]})})}),e?.isGitRepo&&E.pickerOpen&&V(Lt,{color:t.BORDER,children:[V(k,{marginBottom:0,children:[B(j,{color:t.DIM,children:`@ `}),B(j,{color:t.PRIMARY,children:E.pickerQuery}),B(j,{color:t.DIM,children:E.pickerQuery?``:`type to filter`})]}),B(mb,{options:E.filteredOptions,selectedIndex:E.pickerIndex,isLoading:E.remoteLoading,gitState:e})]}),e?.isGitRepo&&!E.pickerOpen&&B(k,{marginTop:1,paddingX:1,children:V(j,{color:t.DIM,children:[B(j,{color:t.PRIMARY,children:`@`}),` add context`]})})]}),B(ty,{message:h})]})},kb=e=>{let t=ae(10);if(t[0]!==`e8c3ad7624de558f1292f5717cd6dbce82fb6c0767dc4ab19348dc7a7975d8f5`){for(let e=0;e<10;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`e8c3ad7624de558f1292f5717cd6dbce82fb6c0767dc4ab19348dc7a7975d8f5`}let{segment:n,mutedColor:r}=e,i=n.color??r,a;t[1]!==n.label||t[2]!==i?(a=V(j,{color:i,children:[n.label,` `]}),t[1]=n.label,t[2]=i,t[3]=a):a=t[3];let o=n.color??r,s;t[4]!==n.key||t[5]!==o?(s=V(j,{color:o,children:[`[`,n.key,`]`]}),t[4]=n.key,t[5]=o,t[6]=s):s=t[6];let c;return t[7]!==a||t[8]!==s?(c=V(pe,{children:[a,s]}),t[7]=a,t[8]=s,t[9]=c):c=t[9],c},Ab=e=>{let t=ae(12);if(t[0]!==`e8c3ad7624de558f1292f5717cd6dbce82fb6c0767dc4ab19348dc7a7975d8f5`){for(let e=0;e<12;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`e8c3ad7624de558f1292f5717cd6dbce82fb6c0767dc4ab19348dc7a7975d8f5`}let{segments:n,color:r,mutedColor:i}=e,a;t[1]===r?a=t[2]:(a=B(j,{color:r,children:` `}),t[1]=r,t[2]=a);let o;if(t[3]!==i||t[4]!==n){let e;t[6]!==i||t[7]!==n.length?(e=(e,t)=>V(k,{children:[e.onClick?B(zt,{fullWidth:!1,onClick:e.onClick,children:B(kb,{segment:e,mutedColor:i})}):B(kb,{segment:e,mutedColor:i}),t<n.length-1&&B(j,{color:i,children:` `})]},e.key+e.label),t[6]=i,t[7]=n.length,t[8]=e):e=t[8],o=n.map(e),t[3]=i,t[4]=n,t[5]=o}else o=t[5];let s;return t[9]!==a||t[10]!==o?(s=V(k,{children:[a,o]}),t[9]=a,t[10]=o,t[11]=s):s=t[11],s},jb=w.Struct({version:w.String}),Mb=(e,t)=>{let n=e.split(`.`).map(Number),r=t.split(`.`).map(Number);for(let e=0;e<3;e++){if((n[e]??0)>(r[e]??0))return!0;if((n[e]??0)<(r[e]??0))return!1}return!1},Nb=d.gen(function*(){let e=yield*d.tryPromise({try:()=>fetch(`https://registry.npmjs.org/${St}/latest`).then(e=>e.json()),catch:e=>Error(`npm registry fetch failed: ${e}`)});return(yield*d.try({try:()=>w.decodeUnknownSync(jb)(e),catch:e=>Error(`npm response decode failed: ${e}`)})).version}).pipe(d.timeoutOrElse({duration:5e3,onTimeout:()=>d.succeed(void 0)})),Pb=()=>{let{data:e}=P({queryKey:[`update-check`],queryFn:async()=>{let e=await d.runPromiseExit(Nb);if(f.isSuccess(e))return e.value},staleTime:36e5,retry:!1,refetchOnWindowFocus:!1});return{latestVersion:e,updateAvailable:e!==void 0&&Mb(e,`0.0.15`)}},Fb=(e,t)=>{let n=ae(87);if(n[0]!==`0545e7691866a2045c1228f27b801065cf39232a2a018c782c9ae2928aa6e0a5`){for(let e=0;e<87;e+=1)n[e]=Symbol.for(`react.memo_cache_sentinel`);n[0]=`0545e7691866a2045c1228f27b801065cf39232a2a018c782c9ae2928aa6e0a5`}let r=It(),i=eh(Rb),a=dv(zb),o=dv(Bb),s=ev(Vb),c=ev(Hb),l=Iv(Ub);switch(e._tag){case`Main`:{let e=a?`cookies on`:`cookies off`,r;n[1]!==e||n[2]!==o?(r={key:`ctrl+k`,label:e,cta:!0,onClick:o},n[1]=e,n[2]=o,n[3]=r):r=n[3];let s;n[4]===i?s=n[5]:(s={key:`ctrl+r`,label:`saved flows`,cta:!0,onClick:()=>i(Qm.SavedFlowPicker())},n[4]=i,n[5]=s);let c;if(n[6]!==t?.isGitRepo||n[7]!==i||n[8]!==r||n[9]!==s){if(c=[r,s],t?.isGitRepo){let e;n[11]===i?e=n[12]:(e={key:`ctrl+p`,label:`pick pr`,cta:!0,onClick:()=>i(Qm.SelectPr())},n[11]=i,n[12]=e),c.push(e)}n[6]=t?.isGitRepo,n[7]=i,n[8]=r,n[9]=s,n[10]=c}else c=n[10];return c}case`SelectPr`:{let e,t,a;n[13]===Symbol.for(`react.memo_cache_sentinel`)?(e={key:`↑↓`,label:`nav`},t={key:`←→`,label:`filter`},a={key:`/`,label:`search`},n[13]=e,n[14]=t,n[15]=a):(e=n[13],t=n[14],a=n[15]);let o;n[16]===i?o=n[17]:(o={key:`esc`,label:`back`,cta:!0,onClick:()=>i(Qm.Main())},n[16]=i,n[17]=o);let s;n[18]===r.PRIMARY?s=n[19]:(s={key:`enter`,label:`select`,color:r.PRIMARY,cta:!0},n[18]=r.PRIMARY,n[19]=s);let c;return n[20]!==o||n[21]!==s?(c=[e,t,a,o,s],n[20]=o,n[21]=s,n[22]=c):c=n[22],c}case`SavedFlowPicker`:{let e;n[23]===Symbol.for(`react.memo_cache_sentinel`)?(e={key:`↑↓`,label:`nav`},n[23]=e):e=n[23];let t;n[24]===i?t=n[25]:(t={key:`esc`,label:`back`,cta:!0,onClick:()=>i(Qm.Main())},n[24]=i,n[25]=t);let a;n[26]===r.PRIMARY?a=n[27]:(a={key:`enter`,label:`select`,color:r.PRIMARY,cta:!0},n[26]=r.PRIMARY,n[27]=a);let o;return n[28]!==t||n[29]!==a?(o=[e,t,a],n[28]=t,n[29]=a,n[30]=o):o=n[30],o}case`CookieSyncConfirm`:{let t;n[31]===Symbol.for(`react.memo_cache_sentinel`)?(t={key:`↑↓`,label:`nav`},n[31]=t):t=n[31];let a;n[32]===i?a=n[33]:(a={key:`esc`,label:`back`,onClick:()=>i(Qm.Main())},n[32]=i,n[33]=a);let o;n[34]!==e.changesFor||n[35]!==e.instruction||n[36]!==e.savedFlow||n[37]!==i?(o={key:`c`,label:`enable sync`,cta:!0,onClick:()=>{i($m({changesFor:e.changesFor,instruction:e.instruction,savedFlow:e.savedFlow,requiresCookies:!0}))}},n[34]=e.changesFor,n[35]=e.instruction,n[36]=e.savedFlow,n[37]=i,n[38]=o):o=n[38];let s;n[39]!==e.changesFor||n[40]!==e.instruction||n[41]!==e.savedFlow||n[42]!==i?(s=()=>{i($m({changesFor:e.changesFor,instruction:e.instruction,savedFlow:e.savedFlow,requiresCookies:!1}))},n[39]=e.changesFor,n[40]=e.instruction,n[41]=e.savedFlow,n[42]=i,n[43]=s):s=n[43];let c;n[44]!==r.PRIMARY||n[45]!==s?(c={key:`a`,label:`run anyway`,color:r.PRIMARY,cta:!0,onClick:s},n[44]=r.PRIMARY,n[45]=s,n[46]=c):c=n[46];let l;return n[47]!==a||n[48]!==o||n[49]!==c?(l=[t,a,o,c],n[47]=a,n[48]=o,n[49]=c,n[50]=l):l=n[50],l}case`PortPicker`:{let e,t,a;n[51]===Symbol.for(`react.memo_cache_sentinel`)?(e={key:`↑↓`,label:`nav`},t={key:`space`,label:`toggle`},a={key:`/`,label:`custom port`},n[51]=e,n[52]=t,n[53]=a):(e=n[51],t=n[52],a=n[53]);let o;n[54]===i?o=n[55]:(o={key:`esc`,label:`back`,cta:!0,onClick:()=>i(Qm.Main())},n[54]=i,n[55]=o);let s;n[56]===r.PRIMARY?s=n[57]:(s={key:`enter`,label:`confirm`,color:r.PRIMARY,cta:!0},n[56]=r.PRIMARY,n[57]=s);let c;return n[58]!==o||n[59]!==s?(c=[e,t,a,o,s],n[58]=o,n[59]=s,n[60]=c):c=n[60],c}case`Testing`:{let e=s===!0?`notify on`:`notify off`,t=l?`collapse`:`expand`,r;n[61]!==e||n[62]!==c?(r={key:`ctrl+n`,label:e,cta:!0,onClick:c},n[61]=e,n[62]=c,n[63]=r):r=n[63];let i;n[64]===t?i=n[65]:(i={key:`ctrl+o`,label:t,cta:!0},n[64]=t,n[65]=i);let a=l?`collapse`:`cancel`,o;n[66]===a?o=n[67]:(o={key:`esc`,label:a},n[66]=a,n[67]=o);let u;return n[68]!==r||n[69]!==i||n[70]!==o?(u=[r,i,o],n[68]=r,n[69]=i,n[70]=o,n[71]=u):u=n[71],u}case`Results`:{let t;n[72]===Symbol.for(`react.memo_cache_sentinel`)?(t={key:`y`,label:`copy`,cta:!0},n[72]=t):t=n[72];let r;if(n[73]!==e.report.changesFor||n[74]!==e.report.instruction||n[75]!==e.report.pullRequest||n[76]!==i){if(r=[t],v.isSome(e.report.pullRequest)){let e;n[78]===Symbol.for(`react.memo_cache_sentinel`)?(e={key:`p`,label:`post to PR`,cta:!0},n[78]=e):e=n[78],r.push(e)}let a;n[79]===Symbol.for(`react.memo_cache_sentinel`)?(a={key:`s`,label:`save flow`,cta:!0},n[79]=a):a=n[79],r.push(a);let o;n[80]!==e.report.changesFor||n[81]!==e.report.instruction||n[82]!==i?(o={key:`r`,label:`restart`,cta:!0,onClick:()=>{Iv.getState().setExecutedPlan(void 0),i($m({changesFor:e.report.changesFor,instruction:e.report.instruction}))}},n[80]=e.report.changesFor,n[81]=e.report.instruction,n[82]=i,n[83]=o):o=n[83],r.push(o);let s;n[84]===i?s=n[85]:(s={key:`esc`,label:`main menu`,cta:!0,onClick:()=>{Iv.getState().setExecutedPlan(void 0),i(Qm.Main())}},n[84]=i,n[85]=s),r.push(s),n[73]=e.report.changesFor,n[74]=e.report.instruction,n[75]=e.report.pullRequest,n[76]=i,n[77]=r}else r=n[77];return r}default:{let e;return n[86]===Symbol.for(`react.memo_cache_sentinel`)?(e=[],n[86]=e):e=n[86],e}}},Ib=e=>e.length>0?` ${e.map(e=>`${e.label} [${e.key}]`).join(` `)}`:``,Lb=()=>{let e=ae(34);if(e[0]!==`0545e7691866a2045c1228f27b801065cf39232a2a018c782c9ae2928aa6e0a5`){for(let t=0;t<34;t+=1)e[t]=Symbol.for(`react.memo_cache_sentinel`);e[0]=`0545e7691866a2045c1228f27b801065cf39232a2a018c782c9ae2928aa6e0a5`}let[t]=Nt(),{data:n}=cb(),r=eh(Wb),{latestVersion:i,updateAvailable:a}=Pb(),o=Fb(r,n),s,c,l,u,d,f,p,m;if(e[1]!==o||e[2]!==t||e[3]!==i||e[4]!==r._tag||e[5]!==a){let n=a?[...o,{key:`ctrl+u`,label:`v${i} available`,cta:!0,color:J.warning}]:o;u=n.filter(Gb);let h=Ve(Ib(u)),g=qb,_=n.filter(Jb),v=g(_)+h+2>t?_.filter(Yb):_,y=g(v);l=Math.max(0,t-y-h-2),c=k,p=`column`,e[14]!==t||e[15]!==r._tag?(m=r._tag===`Testing`?B(Fv,{text:`─`.repeat(t),baseColor:J.shimmerBase,highlightColor:J.shimmerHighlight,speed:3}):B(j,{color:J.border,children:`─`.repeat(t)}),e[14]=t,e[15]=r._tag,e[16]=m):m=e[16],s=k,d=1,f=v.map(Xb),e[1]=o,e[2]=t,e[3]=i,e[4]=r._tag,e[5]=a,e[6]=s,e[7]=c,e[8]=l,e[9]=u,e[10]=d,e[11]=f,e[12]=p,e[13]=m}else s=e[6],c=e[7],l=e[8],u=e[9],d=e[10],f=e[11],p=e[12],m=e[13];let h;e[17]===l?h=e[18]:(h=` `.repeat(l),e[17]=l,e[18]=h);let g;e[19]===h?g=e[20]:(g=B(j,{children:h}),e[19]=h,e[20]=g);let _;e[21]===u?_=e[22]:(_=u.length>0?B(Ab,{segments:u,color:J.primary,mutedColor:J.textMuted}):null,e[21]=u,e[22]=_);let v;e[23]!==s||e[24]!==d||e[25]!==f||e[26]!==g||e[27]!==_?(v=V(s,{paddingX:d,children:[f,g,_]}),e[23]=s,e[24]=d,e[25]=f,e[26]=g,e[27]=_,e[28]=v):v=e[28];let y;return e[29]!==c||e[30]!==p||e[31]!==m||e[32]!==v?(y=V(c,{flexDirection:p,children:[m,v]}),e[29]=c,e[30]=p,e[31]=m,e[32]=v,e[33]=y):y=e[33],y};function Rb(e){return e.setScreen}function zb(e){return e.cookiesEnabled}function Bb(e){return e.toggleCookies}function Vb(e){return e.notifications}function Hb(e){return e.toggleNotifications}function Ub(e){return e.expanded}function Wb(e){return e.screen}function Gb(e){return!e.cta}function Kb(e){return e.color?` ${e.label} [${e.key}] `:`${e.label} [${e.key}]`}function qb(e){return Ve(e.map(Kb).join(` `))}function Jb(e){return e.cta}function Yb(e){return e.key!==`ctrl+p`}function Xb(e,t){let n=V(j,{children:[t>0?` `:``,e.color?V(j,{backgroundColor:e.color,color:`black`,children:[` `,B(j,{bold:!0,children:e.label}),` `,V(j,{children:[`[`,e.key,`]`]}),` `]}):V(j,{children:[V(j,{color:J.textMuted,children:[e.label,` `]}),V(j,{color:J.textMuted,children:[`[`,e.key,`]`]})]})]},e.key+e.label);return e.onClick?B(zt,{onClick:e.onClick,fullWidth:!1,children:n},e.key+e.label):n}let Zb=null;const Qb=e=>{Zb=e},$b=()=>Zb?.clear(),ex=e=>{let t=ae(34);if(t[0]!==`e6ac87aa0f631766a38fac7cfbcee5d6c83ce6fd1edd967a6457097df0e89416`){for(let e=0;e<34;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`e6ac87aa0f631766a38fac7cfbcee5d6c83ce6fd1edd967a6457097df0e89416`}let{agent:n}=e,r=eh(tx),i=eh(nx),a=eh(rx),{data:o}=cb(),s=st(ry),c,l;t[1]!==n||t[2]!==s?(c=()=>{s(v.some(n))},l=[n,s],t[1]=n,t[2]=s,t[3]=c,t[4]=l):(c=t[3],l=t[4]),se(c,l);let u;t[5]!==r._tag||t[6]!==i?(u=()=>{if(r._tag===`CookieSyncConfirm`){i(Qm.Main());return}if(r._tag===`PortPicker`){i(Qm.Main());return}if(r._tag===`Results`){Iv.getState().setExecutedPlan(void 0),i(Qm.Main());return}r._tag!==`Testing`&&i(Qm.Main())},t[5]=r._tag,t[6]=i,t[7]=u):u=t[7];let d=u,{updateAvailable:f}=Pb(),{exit:p}=te(),[,m]=R(0),[,h]=Nt(),g;t[8]!==p||t[9]!==o?.isGitRepo||t[10]!==d||t[11]!==a||t[12]!==r._tag||t[13]!==m||t[14]!==f?(g=(e,t)=>{if(t.ctrl&&e===`l`){$b(),m(ix);return}if(t.ctrl&&e===`u`&&f){p(),process.stdout.write(yt),fe(`npm`,[`install`,`-g`,`${St}@latest`],{stdio:`inherit`});return}t.escape&&r._tag!==`Main`&&d(),t.ctrl&&e===`p`&&r._tag===`Main`&&o?.isGitRepo&&a(Qm.SelectPr()),t.ctrl&&e===`r`&&r._tag===`Main`&&a(Qm.SavedFlowPicker())},t[8]=p,t[9]=o?.isGitRepo,t[10]=d,t[11]=a,t[12]=r._tag,t[13]=m,t[14]=f,t[15]=g):g=t[15],ne(g);let _;t[16]!==o||t[17]!==r._tag||t[18]!==r.baseUrls||t[19]!==r.changesFor||t[20]!==r.instruction||t[21]!==r.localReplayUrl||t[22]!==r.replayUrl||t[23]!==r.report||t[24]!==r.requiresCookies||t[25]!==r.savedFlow||t[26]!==r.videoUrl?(_=()=>{if(!o)return B(Ob,{gitState:void 0});switch(r._tag){case`PortPicker`:return B(Cv,{changesFor:r.changesFor,instruction:r.instruction,savedFlow:r.savedFlow,requiresCookies:r.requiresCookies});case`Testing`:return B(Fy,{changesFor:r.changesFor,instruction:r.instruction,savedFlow:r.savedFlow,requiresCookies:r.requiresCookies,baseUrls:r.baseUrls});case`Results`:return B(nb,{report:r.report,replayUrl:r.replayUrl,localReplayUrl:r.localReplayUrl,videoUrl:r.videoUrl});case`SelectPr`:return B(rh,{});case`CookieSyncConfirm`:return B(sv,{changesFor:r.changesFor,instruction:r.instruction,savedFlow:r.savedFlow});case`SavedFlowPicker`:return B(db,{});default:return B(Ob,{gitState:o})}},t[16]=o,t[17]=r._tag,t[18]=r.baseUrls,t[19]=r.changesFor,t[20]=r.instruction,t[21]=r.localReplayUrl,t[22]=r.replayUrl,t[23]=r.report,t[24]=r.requiresCookies,t[25]=r.savedFlow,t[26]=r.videoUrl,t[27]=_):_=t[27];let y=_,b;t[28]===y?b=t[29]:(b=B(k,{flexGrow:1,children:y()}),t[28]=y,t[29]=b);let x;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(x=B(Lb,{}),t[30]=x):x=t[30];let S;return t[31]!==h||t[32]!==b?(S=B(Dt,{children:V(k,{flexDirection:`column`,width:`100%`,height:h,children:[b,x]})}),t[31]=h,t[32]=b,t[33]=S):S=t[33],S};function tx(e){return e.screen}function nx(e){return e.setScreen}function rx(e){return e.navigateTo}function ix(e){return e+1}const ax=()=>{let e=Ne();return e===`darwin`?`afplay /System/Library/Sounds/Glass.aiff`:e===`win32`?`powershell -c (New-Object Media.SoundPlayer 'C:\\Windows\\Media\\chimes.wav').PlaySync()`:`paplay /usr/share/sounds/freedesktop/stereo/complete.oga 2>/dev/null || aplay /usr/share/sounds/freedesktop/stereo/complete.oga 2>/dev/null`},ox=()=>new Promise(e=>{ue(ax(),()=>e())});var sx=class extends w.ErrorClass(`ExecutionTimeoutError`)({_tag:w.tag(`ExecutionTimeoutError`),timeoutMs:w.Number}){message=`expect execution timed out after ${this.timeoutMs}ms`};const cx=e=>`[${((Date.now()-e)/1e3).toFixed(1)}s]`,lx=e=>e.replace(/\r?\n/g,` `).replace(/::/g,`: :`),ux=e=>d.runPromise(ay(d.gen(function*(){let t=yield*tm,n=yield*nm,r=yield*Z_,i=Date.now();yield*r.capture(`session:started`,{mode:`headless`,skip_planning:!1,browser_headed:e.headed});let a=(yield*c.string(`GITHUB_ACTIONS`).pipe(c.withDefault(``)))!==``,o=e.ci?` [CI mode]`:``;console.log(`expect v${vt}${o}`),v.isSome(e.timeoutMs)&&console.log(`Timeout: ${e.timeoutMs.value}ms`),console.log(`Agent: ${e.agent}`),console.log(`Target: ${yn(e.changesFor)}`),console.log(`Starting browser test...`),a&&console.log(`::group::expect test execution`);let s=Date.now(),l=Date.now(),u=e.ci?setInterval(()=>{let e=Date.now();if(e-l>=6e4){let t=Math.floor((e-s)/6e4);console.log(`${cx(s)} Still running... (${t} minute${t===1?``:`s`} elapsed)`),l=e}},6e4):void 0;yield*r.capture(`run:started`,{plan_id:`direct`});let f=new Set,p=e=>{for(let t of e.events){if(f.has(t.id))continue;f.add(t.id),l=Date.now();let e=cx(s);switch(t._tag){case`RunStarted`:console.log(`${e} Starting ${t.plan.title}`);break;case`StepStarted`:console.log(`${e} ${H.arrowRight} ${t.stepId} ${t.title}`);break;case`StepCompleted`:console.log(`${e} ${H.tick} ${t.stepId} ${t.summary}`);break;case`StepFailed`:console.log(`${e} ${H.cross} ${t.stepId} ${t.message}`),a&&console.log(`::error title=${lx(t.stepId)} failed::${lx(t.message)}`);break;case`StepSkipped`:console.log(`${e} ${H.arrowRight} ${t.stepId} [skipped] ${t.reason}`);break}}},m=t.execute({changesFor:e.changesFor,instruction:e.instruction,isHeadless:!e.headed,requiresCookies:!1}).pipe(E.tap(e=>d.sync(()=>p(e))),E.runLast,d.map(t=>(t._tag===`Some`?t.value:new er({id:``,changesFor:e.changesFor,currentBranch:``,diffPreview:``,fileStats:[],instruction:e.instruction,baseUrl:void 0,isHeadless:!e.headed,requiresCookies:!1,testCoverage:v.none(),title:e.instruction,rationale:`Direct execution`,steps:[],events:[]})).finalizeTextBlock())),h=v.getOrUndefined(e.timeoutMs),g=yield*(h===void 0?m:m.pipe(d.timeoutOrElse({duration:`${h} millis`,onTimeout:()=>d.fail(new sx({timeoutMs:h}))}))).pipe(d.tapError(()=>d.sync(()=>{u&&clearInterval(u),a&&console.log(`::endgroup::`)})),d.catchTag(`ExecutionTimeoutError`,e=>d.sync(()=>{a&&console.log(`::error title=Execution timed out::${lx(e.message)}`),console.error(`\n${e.message}`),process.exit(1)})));u&&clearInterval(u),p(g),a&&console.log(`::endgroup::`);let _=yield*n.report(g),y=_.steps.filter(e=>_.stepStatuses.get(e.id)?.status===`passed`).length,b=_.steps.filter(e=>_.stepStatuses.get(e.id)?.status===`failed`).length;yield*r.capture(`run:completed`,{plan_id:g.id??`direct`,passed:y,failed:b,step_count:g.steps.length,file_count:0,duration_ms:Date.now()-s}),yield*r.capture(`session:ended`,{session_ms:Date.now()-i}),yield*r.flush;let x=_.toPlainText;console.error(`\n${x}`);let S=yield*c.option(c.string(`GITHUB_STEP_SUMMARY`));if(v.isSome(S)){let e=`## expect test results\n\n${_.status===`passed`?`**Result: PASSED**`:`**Result: FAILED**`}\n\n\`\`\`\n${x}\n\`\`\`\n`;yield*d.sync(()=>Ye(S.value,e))}yield*d.promise(()=>ox()),process.exit(_.status===`passed`?0:1)}).pipe(d.provide(ny({verbose:e.verbose,agent:e.agent}))))),dx={error:U.red,warn:U.yellow,info:U.cyan,success:U.green,dim:U.dim},$={error:(...e)=>{console.log(dx.error(e.join(` `)))},warn:(...e)=>{console.log(dx.warn(e.join(` `)))},info:(...e)=>{console.log(dx.info(e.join(` `)))},success:(...e)=>{console.log(dx.success(e.join(` `)))},dim:(...e)=>{console.log(dx.dim(e.join(` `)))},log:(...e)=>{console.log(e.join(` `))},break:()=>{console.log(``)}},fx=()=>{$.break(),$.log(`Cancelled.`),$.break(),process.exit(0)},px=e=>gt(e,{onCancel:fx}),mx=(e,t)=>_t({text:e,isSilent:t?.silent}),hx=[`CI`,`CLAUDECODE`,`CURSOR_AGENT`,`CODEX_CI`,`OPENCODE`,`AMP_HOME`,`AMI`],gx=()=>hx.some(e=>!!process.env[e]),_x=()=>!process.stdin.isTTY,vx={npm:`npm install -g expect-cli@latest`,pnpm:`pnpm add -g expect-cli@latest`,yarn:`yarn global add expect-cli@latest`,bun:`bun add -g expect-cli@latest`,vp:`vp install -g expect-cli@latest`},yx={npm:`npx -y skills add https://github.com/millionco/expect --skill expect -y`,pnpm:`pnpm dlx skills add https://github.com/millionco/expect --skill expect -y`,yarn:`npx -y skills add https://github.com/millionco/expect --skill expect -y`,bun:`bunx skills add https://github.com/millionco/expect --skill expect -y`,vp:`npx -y skills add https://github.com/millionco/expect --skill expect -y`},bx=()=>{if(process.env.VITE_PLUS_CLI_BIN)return`vp`;let e=process.env.npm_config_user_agent;if(e){if(e.startsWith(`pnpm`))return`pnpm`;if(e.startsWith(`yarn`))return`yarn`;if(e.startsWith(`bun`))return`bun`;if(e.startsWith(`npm`))return`npm`}return`npm`},xx=e=>e||gx()||_x(),Sx=e=>new Promise(t=>{ue(e,{timeout:1e4},e=>{t(!e)}).stdin?.end()}),Cx=async(e={})=>{let t=xx(e.yes??!1),n=bx(),r=vx[n];$.break(),$.log(` ${U.red(H.cross)}${U.green(H.tick)} ${U.bold(`Expect`)} ${dx.dim(`v${vt}`)}`),$.dim(` Let agents test your code in a real browser.`),$.break(),Qa().length===0&&($.error(`No supported coding agent found. expect requires one of: Claude Code, Codex, or Cursor.`),$.break(),$.log(` Install one to get started:`),$.log(` ${dx.info(`Claude Code`)} ${dx.dim(`https://docs.anthropic.com/en/docs/claude-code`)}`),$.log(` ${dx.info(`Codex`)} ${dx.dim(`https://github.com/openai/codex`)}`),$.log(` ${dx.info(`Cursor`)} ${dx.dim(`https://cursor.com`)}`),$.break(),process.exit(1));let i=mx(`Installing expect-cli globally...`).start();await Sx(r)?i.succeed(`Installed! ${dx.info(`expect-cli`)} is now available globally.`):(i.fail(`Failed to install globally.`),$.dim(` Run manually: ${dx.info(r)}`)),$.break();let a=t;if(t||(a=(await px({type:`confirm`,name:`installSkill`,message:`Install the ${dx.info(`expect`)} skill for your coding agent?`,initial:!0})).installSkill),a){let e=yx[n],t=mx(`Installing skill...`).start();await Sx(e)?t.succeed(`Skill installed.`):(t.fail(`Failed to install skill.`),$.dim(` Run manually: ${dx.info(e)}`))}$.break(),$.success(`Setup complete! Here's how to get started:`),$.break(),$.log(` 1. ${dx.info(`cd`)} into your project directory`),$.log(` 2. Start your dev server (e.g. ${dx.dim(`npm run dev`)})`),$.log(` 3. Run ${dx.info(`expect-cli`)} to open the interactive test runner`),$.break(),$.log(` Or run headlessly from your coding agent:`),$.break(),$.log(` ${dx.dim(`$`)} ${dx.info(`expect-cli -m "test the login flow" -y`)}`),$.break(),$.log(` Set ${dx.info(`EXPECT_BASE_URL`)} if your app is not on localhost:3000:`),$.break(),$.log(` ${dx.dim(`$`)} ${dx.info(`EXPECT_BASE_URL=http://localhost:5173 expect-cli -m "test the homepage" -y`)}`),$.break()},wx=[`packages/*`,`apps/*`],Tx=e=>xt.some(t=>e.includes(t)),Ex=d.fn(`detectAgent`)(function*(e){let t=yield*m.FileSystem;for(let[n,r]of Object.entries(Ct)){let i=W.join(e,n);if(yield*t.exists(i).pipe(d.catchTag(`PlatformError`,()=>d.succeed(!1))))return r}let n=W.join(e,`package.json`),r=yield*t.readFileString(n).pipe(d.catchTag(`PlatformError`,()=>d.succeed(``)));if(r){let e=yield*d.try({try:()=>JSON.parse(r),catch:()=>({_tag:`JsonParseError`})}).pipe(d.catchTag(`JsonParseError`,()=>d.succeed(void 0)));if(e?.packageManager){let t=e.packageManager.split(`@`)[0];if(t)return t}}return`npm`}),Dx=d.fn(`readPackageJson`)(function*(e){let t=yield*m.FileSystem,n=W.join(e,`package.json`),r=yield*t.readFileString(n);return yield*d.try({try:()=>JSON.parse(r),catch:()=>({_tag:`JsonParseError`})})}),Ox=d.fn(`listWorkspaceDirectories`)(function*(e){let t=yield*m.FileSystem,n=[];for(let r of wx){let i=W.join(e,W.dirname(r)),a=yield*t.readDirectory(i).pipe(d.catchTag(`PlatformError`,()=>d.succeed([])));for(let e of a){let r=W.join(i,e);(yield*t.stat(r).pipe(d.catchTag(`PlatformError`,()=>d.succeed(void 0))))?.type===`Directory`&&n.push(r)}}return n}),kx=(e,t,n)=>new Promise(r=>{z(e,[`run`,n],{cwd:t,timeout:12e4,maxBuffer:5*1024*1024},(e,t,i)=>{let a=(t+`
44
44
  `+i).trim();r({script:n,passed:!e,output:a})})}),Ax=d.fn(`discoverPackages`)(function*(e){let t=yield*Ox(e),n=[];for(let e of t){let t=yield*Dx(e).pipe(d.catchTag(`PlatformError`,()=>d.succeed(void 0)),d.catchTag(`JsonParseError`,()=>d.succeed(void 0)));if(!t?.scripts)continue;let r=Object.keys(t.scripts).filter(Tx);r.length!==0&&n.push({packageName:t.name??W.basename(e),directory:e,scripts:r})}return n}),jx=async(e,t)=>{let n=d.gen(function*(){let n=yield*Ex(e),r=yield*Ax(e);return yield*d.forEach(r,e=>d.gen(function*(){t.onPackageStart(e.packageName,e.scripts);let r=[];for(let i of e.scripts){let a=yield*d.promise(()=>kx(n,e.directory,i));t.onScriptDone(e.packageName,a),r.push(a)}return{packageName:e.packageName,directory:e.directory,results:r}}),{concurrency:4})});return d.runPromise(n.pipe(d.provide(K.layer)))},Mx=e=>{let t=ae(5);if(t[0]!==`aef0f8bb7ade6156f95a0a2a02eb67442b17c5cae1cd627958814a31c95c65dd`){for(let e=0;e<5;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`aef0f8bb7ade6156f95a0a2a02eb67442b17c5cae1cd627958814a31c95c65dd`}let{statusMap:n}=e,r;if(t[1]!==n){let e=Array.from(n.entries()),i,a;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(i=B(j,{bold:!0,children:`expect audit`}),a=B(j,{children:` `}),t[3]=i,t[4]=a):(i=t[3],a=t[4]),r=V(k,{flexDirection:`column`,paddingY:1,children:[i,a,e.map(Bx)]}),t[1]=n,t[2]=r}else r=t[2];return r},Nx=e=>{let t=ae(12);if(t[0]!==`aef0f8bb7ade6156f95a0a2a02eb67442b17c5cae1cd627958814a31c95c65dd`){for(let e=0;e<12;e+=1)t[e]=Symbol.for(`react.memo_cache_sentinel`);t[0]=`aef0f8bb7ade6156f95a0a2a02eb67442b17c5cae1cd627958814a31c95c65dd`}let{results:n}=e,r=0,i=0;for(let e of n)for(let t of e.results)t.passed?r++:i++;let a=`${r} passed, ${i} failed`,o=i>0?Ft.RED:Ft.GREEN,s;t[1]!==a||t[2]!==o?(s=B(j,{bold:!0,color:o,children:a}),t[1]=a,t[2]=o,t[3]=s):s=t[3];let c;t[4]===i?c=t[5]:(c=i>0&&V(j,{color:Ft.YELLOW,children:[`Run `,B(j,{bold:!0,children:`expect`}),` to test your changes in a real browser and catch issues before they ship.`]}),t[4]=i,t[5]=c);let l;t[6]===i?l=t[7]:(l=i===0&&V(j,{color:Ft.GREEN,children:[`Looking good! Run `,B(j,{bold:!0,children:`expect`}),` to verify your changes work end-to-end in the browser.`]}),t[6]=i,t[7]=l);let u;return t[8]!==s||t[9]!==c||t[10]!==l?(u=V(k,{flexDirection:`column`,gap:1,children:[s,c,l]}),t[8]=s,t[9]=c,t[10]=l,t[11]=u):u=t[11],u},Px=async()=>{let e=process.cwd(),t={current:new Map},n,r,i=ee(B(()=>{let[e,t]=R(new Map),[i,a]=R();return n=e=>t(new Map(e)),r=a,V(k,{flexDirection:`column`,children:[B(Mx,{statusMap:e}),i&&B(Nx,{results:i})]})},{})),a=await jx(e,{onPackageStart:(e,r)=>{t.current.set(e,{scripts:r,completed:[],done:!1}),n?.(t.current)},onScriptDone:(e,r)=>{let i=t.current.get(e);i&&(i.completed.push(r),i.done=i.completed.length===i.scripts.length),n?.(t.current)}});r?.(a),setTimeout(()=>{i.unmount(),a.reduce((e,t)=>e+t.results.filter(e=>!e.passed).length,0)>0&&process.exit(1)},100)},Fx=async()=>{let e=process.cwd();console.log(``),console.log(U.bold(`expect audit`)),console.log(``);let t=await jx(e,{onPackageStart:(e,t)=>{console.log(`${H.arrowRight} ${U.bold(e)} (${t.join(`, `)})`)},onScriptDone:(e,t)=>{let n=t.passed?U.green(H.tick):U.red(H.cross);if(console.log(` ${n} ${t.script}`),!t.passed){let e=t.output.split(`
45
45
  `).slice(-3).join(`
46
46
  `);console.log(U.dim(` ${e.split(`