agent-afk 5.221.5 → 5.222.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -270,7 +270,7 @@ Send a message to start one, or /new for a fresh session.`}function x_(e){return
270
270
 
271
271
  ${t}`}var nG,Om=m(()=>{"use strict";nG=new Set(["script","style","noscript","template","svg"])});function sG(e,t){return new Promise((n,r)=>{if(t?.aborted){r(t.reason??new Error("aborted"));return}let o=()=>{clearTimeout(s),r(t?.reason??new Error("aborted"))},s=setTimeout(()=>{t?.removeEventListener("abort",o),n()},e);t?.addEventListener("abort",o,{once:!0})})}function N_(e,t,n){let r=Math.min(t*2**e,n);return Math.round(Math.random()*r)}function iG(e,t){let n=e.headers.get("retry-after");if(n===null)return null;let r=Number(n.trim());return!Number.isFinite(r)||r<0?null:Math.min(r*1e3,t)}async function U_(e,t,n={},r={}){let o=r.retries??3,s=r.baseDelayMs??500,i=r.maxDelayMs??1e4,a=r.sleep??sG,c=n.signal??void 0,l;for(let d=0;d<=o;d++){if(c?.aborted)throw c.reason??new Error("aborted");try{let u=await e(t,n);if(!oG.has(u.status)||d===o)return u;let p=iG(u,i)??N_(d,s,i);O("[web/retryFetch] retrying",{url:t,attempt:d,status:u.status,waitMs:p}),await u.body?.cancel().catch(()=>{}),await a(p,c)}catch(u){if(c?.aborted||(l=u,d===o))throw u;let p=N_(d,s,i);O("[web/retryFetch] retrying after error",{url:t,attempt:d,waitMs:p}),await a(p,c)}}throw l??new Error("retryFetch: exhausted without a result")}var oG,$_=m(()=>{"use strict";V();oG=new Set([429,502,503,504])});import{BlockList as aG,isIP as Fm}from"node:net";import{lookup as cG}from"node:dns/promises";import{Agent as lG}from"undici";function j_(){let e=w.AFK_WEB_ALLOW_PRIVATE_HOSTS?.trim().toLowerCase();return e==="1"||e==="true"}function fG(e){return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e}function Dm(e){let t=Fm(e);return t===0?!1:pG.check(e,t===4?"ipv4":"ipv6")}async function H_(e){return cG(e,{all:!0,verbatim:!0})}async function Yn(e,t={}){if(t.allowPrivateHosts??j_())return{allowed:!0};let n;try{n=new URL(e)}catch{return{allowed:!1,reason:`"${e}" is not a valid absolute URL`}}if(n.protocol!=="http:"&&n.protocol!=="https:")return{allowed:!1,reason:`protocol "${n.protocol}" not supported (http/https only)`};let r=fG(n.hostname),o=(a,c)=>`refusing to fetch ${c} \u2014 internal/private address ${a} (loopback, link-local, cloud metadata, or RFC1918 space). Set AFK_WEB_ALLOW_PRIVATE_HOSTS=1 to allow private-host access.`;if(Fm(r)!==0)return Dm(r)?{allowed:!1,reason:o(r,r)}:{allowed:!0};let s=t.lookupFn??H_,i;try{i=await s(r)}catch{return{allowed:!0}}for(let a of i)if(Dm(a.address))return{allowed:!1,reason:o(a.address,`${r} (resolved)`)};return{allowed:!0}}async function Vs(e,t={}){let n=await Yn(e,t);if(!n.allowed)throw new Te(n.reason)}async function ln(e,t,n={},r={}){let o={...r.lookupFn!==void 0?{lookupFn:r.lookupFn}:{},...r.allowPrivateHosts!==void 0?{allowPrivateHosts:r.allowPrivateHosts}:{}},s=t;for(let i=0;i<=B_;i++){await Vs(s,o);let a={...n,redirect:"manual",...e===globalThis.fetch&&!(r.allowPrivateHosts??j_())?{dispatcher:mG}:{}},c=await U_(e,s,a,r.retry??{});if(!gG.has(c.status))return c;let l=c.headers.get("location");if(l===null||l.trim()==="")return c;let d;try{d=new URL(l,c.url||s).toString()}catch{return c}await c.body?.cancel().catch(()=>{}),s=d}throw new Te(`too many redirects (>${B_}) starting from ${t}`)}var dG,uG,pG,Te,mG,B_,gG,Qn=m(()=>{"use strict";P();$_();dG=[["0.0.0.0",8],["10.0.0.0",8],["100.64.0.0",10],["127.0.0.0",8],["169.254.0.0",16],["172.16.0.0",12],["192.168.0.0",16]],uG=[["::",96],["64:ff9b::",96],["fc00::",7],["fe80::",10]],pG=(()=>{let e=new aG;for(let[t,n]of dG)e.addSubnet(t,n,"ipv4");for(let[t,n]of uG)e.addSubnet(t,n,"ipv6");return e})(),Te=class extends Error{constructor(t){super(t),this.name="EgressBlockedError"}};mG=new lG({connect:{lookup(e,t,n){H_(e).then(r=>{let o=r.find(i=>Dm(i.address));if(o!==void 0){n(new Te(`refusing to connect to ${e} (resolved) \u2014 internal/private address ${o.address} (loopback, link-local, cloud metadata, or RFC1918 space). Set AFK_WEB_ALLOW_PRIVATE_HOSTS=1 to allow private-host access.`),"",0);return}let s=r[0];if(s===void 0){n(new Error(`DNS lookup returned no addresses for ${e}`),"",0);return}n(null,s.address,Fm(s.address))},r=>n(r,"",0))}}});B_=20,gG=new Set([301,302,303,307,308])});var Nm={};zo(Nm,{enforceDomainPolicy:()=>ft,loadBrowserConfig:()=>Lm});import{readFileSync as hG}from"node:fs";import{join as yG}from"path";function bG(e){let n=e.replace(/[.+?()[\]{}/\\^$|]/g,"\\$&").replace(/\*/g,"[^.]*");return new RegExp(`^${n}$`,"i")}function W_(e,t){return bG(t).test(e)}function kG(e,t){if(e!==void 0){let n=e.trim().toLowerCase();if(n==="1"||n==="true"||n==="yes")return!0;if(n==="0"||n==="false"||n==="no")return!1}if(t!==void 0){if(wG.has(t))return!0;if(SG.has(t))return!1}return!1}function K_(e){return e===void 0||e.trim()===""?[]:e.split(",").map(t=>t.trim().toLowerCase()).filter(t=>t.length>0)}function vG(e){if(e===void 0||e==="")return"auto";if(e==="playwright"||e==="agent-browser"||e==="auto")return e;throw new Error(`AFK_BROWSER_BACKEND: must be "playwright", "agent-browser", or "auto", got: ${e}`)}function G_(e){let t=e===void 0||e.trim()===""?"default":e.trim();return Rp(t),t}function TG(e){if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}function _G(e){try{return hG(e,"utf8")}catch(t){if(t.code==="ENOENT")return;throw t}}function EG(e,t){let n={...e};if(typeof t.headless=="boolean"&&(n.headless=t.headless),Array.isArray(t.allowedDomains)&&(n.allowedDomains=t.allowedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),Array.isArray(t.blockedDomains)&&(n.blockedDomains=t.blockedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),typeof t.domSnapshots=="boolean"&&(n.domSnapshots=t.domSnapshots),t.backend==="playwright"||t.backend==="agent-browser"||t.backend==="auto")n.backend=t.backend;else if(t.backend!==void 0)throw new Error(`AFK_BROWSER_BACKEND: must be "playwright", "agent-browser", or "auto", got: ${String(t.backend)}`);return typeof t.defaultProfile=="string"&&(n.defaultProfile=G_(t.defaultProfile)),n}function Lm(e){let t=e?.env??w,n=e?.readFileSync??_G,r=e?.surface??t.AGENT_SURFACE,o=kG(t.AFK_BROWSER_HEADLESS,r),s=K_(t.AFK_BROWSER_ALLOWED_DOMAINS),i=K_(t.AFK_BROWSER_BLOCKED_DOMAINS),a=TG(t.AFK_BROWSER_DOM_SNAPSHOTS),c=vG(t.AFK_BROWSER_BACKEND),l=G_(t.AFK_BROWSER_DEFAULT_PROFILE),d={headless:o,allowedDomains:s,blockedDomains:i,domSnapshots:a,backend:c,configPath:null,defaultProfile:l},u=t.AFK_BROWSER_CONFIG,p=u!==void 0&&u.trim()!==""?u.trim():yG(ns(),"browser.json"),f=n(p);if(f===void 0)return d;let g;try{g=JSON.parse(f)}catch(y){throw new Error(`Failed to parse browser config at ${p}: ${String(y)}`)}if(typeof g!="object"||g===null||Array.isArray(g))throw new Error(`Browser config at ${p} must be a JSON object`);let h=EG(d,g);return h.configPath=p,h}function ft(e,t){let n;try{n=new URL(e).hostname.toLowerCase()}catch{return{allowed:!1,reason:`invalid URL: ${e}`}}for(let r of t.blockedDomains)if(W_(n,r))return{allowed:!1,reason:`blocked by AFK_BROWSER_BLOCKED_DOMAINS: ${r}`};return t.allowedDomains.length>0&&!t.allowedDomains.some(o=>W_(n,o))?{allowed:!1,reason:"not in AFK_BROWSER_ALLOWED_DOMAINS"}:{allowed:!0}}var wG,SG,dn=m(()=>{"use strict";P();M();wG=new Set(["daemon","subagent","telegram","afk"]),SG=new Set(["repl","interactive","cli"])});import{readFileSync as xG}from"node:fs";import{join as AG}from"node:path";import{homedir as RG}from"node:os";function CG(e){let t=e??IG,n;try{n=xG(t,"utf8")}catch{return null}let r;try{r=JSON.parse(n)}catch{return null}if(typeof r!="object"||r===null||Array.isArray(r))return null;let o=r;if(typeof o.url!="string"||typeof o.token!="string"||typeof o.pid!="number")return null;let s;try{s=new URL(o.url)}catch{return null}let{hostname:i,protocol:a}=s;if(!(i==="127.0.0.1"||i==="localhost"||i==="::1")||a!=="http:")throw new Error(`Agent Browser connection file contains an untrusted URL: ${o.url}. Only http://127.0.0.1 or http://localhost is permitted.`);return{url:o.url,token:o.token,pid:o.pid,version:typeof o.version=="string"?o.version:"unknown"}}function PG(e){try{return process.kill(e,0),!0}catch{return!1}}async function MG(e,t,n=2e3){try{let r=new AbortController,o=setTimeout(()=>r.abort(),n),s=await fetch(`${e}/health`,{method:"GET",headers:{Authorization:`Bearer ${t}`,Host:"127.0.0.1:8833"},signal:r.signal});return clearTimeout(o),s.ok}catch{return!1}}async function Um(e){let t=CG(e);return t===null?{available:!1,connection:null,reason:"connection file missing or invalid"}:PG(t.pid)?await MG(t.url,t.token)?{available:!0,connection:t,reason:null}:{available:!1,connection:t,reason:`health probe failed at ${t.url}`}:{available:!1,connection:t,reason:`stale connection file: PID ${t.pid} not alive`}}var IG,q_=m(()=>{"use strict";IG=AG(RG(),".config","agent-browser","connection.json")});async function X_(e){let{config:t,surface:n}=e;if(t.backend==="playwright")return{backend:"playwright",reason:"explicit config: backend=playwright",probeMs:0,availability:null};if(t.backend==="agent-browser"){let i=Date.now(),a=await Um(),c=Date.now()-i;if(!a.available)throw new Error(`AFK_BROWSER_BACKEND=agent-browser but Agent Browser is not available: ${a.reason}`);return{backend:"agent-browser",reason:"explicit config: backend=agent-browser",probeMs:c,availability:a}}if(n&&OG.has(n))return{backend:"playwright",reason:`auto: surface "${n}" excluded from Agent Browser`,probeMs:0,availability:null};if(t.headless)return{backend:"playwright",reason:"auto: headless mode requires Playwright",probeMs:0,availability:null};let r=Date.now(),o=await Um(),s=Date.now()-r;return o.available?{backend:"agent-browser",reason:"auto: Agent Browser available and preferred",probeMs:s,availability:o}:{backend:"playwright",reason:`auto: Agent Browser unavailable (${o.reason})`,probeMs:s,availability:o}}var OG,z_=m(()=>{"use strict";q_();OG=new Set(["daemon","subagent"])});import{createHash as DG}from"crypto";function J_(e){return!!(e.role==="textbox"&&e.kind==="password"||e.label&&FG.test(e.label))}function V_(e){return DG("sha256").update(e,"utf8").digest("hex").slice(0,8)}function Y_(e){let t=e.replace(/\s+/g," ").trim();return t.length<=80?t:t.slice(0,77)+"..."}var FG,Yc=m(()=>{"use strict";FG=/password|secret|token|api[_-]?key|otp|2fa/i});import{randomBytes as LG}from"crypto";import{mkdir as NG,stat as UG,writeFile as $G}from"fs/promises";import{join as $m}from"path";import{gzip as BG}from"zlib";import{promisify as jG}from"util";function HG(e){return $m(ht(e),"browser")}function WG(e){return $m(HG(e),"screenshots")}function KG(){return new Date().toISOString().replace(/[:.]/g,"-")}function GG(){return LG(3).toString("hex")}async function Vr(e,t,n){if(t.length>Q_)throw new Error(`writeScreenshotSidecar: buffer exceeds ${Q_} byte cap (received ${t.length} bytes). Refusing to write oversized screenshot.`);let r=WG(e);await NG(r,{recursive:!0});let o=`${KG()}-${GG()}-${n}.png`,s=$m(r,o);await $G(s,t);let{size:i}=await UG(s);return{path:s,bytes:i}}var ece,Q_,Bm=m(()=>{"use strict";M();Yc();ece=jG(BG);Q_=5*1024*1024});var Qc,Z_=m(()=>{"use strict";V();Qc=class{baseUrl;token;constructor(t){this.baseUrl=t.url,this.token=t.token}async call(t,n,r=3e4){let o={version:1,method:t,params:n},s=new AbortController,i=setTimeout(()=>s.abort(),r);try{let a=await fetch(`${this.baseUrl}/agent`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.token}`,Host:new URL(this.baseUrl).host},body:JSON.stringify(o),signal:s.signal});if(!a.ok){let l=await a.text().catch(()=>"");throw new Error(`Agent Browser ${t} failed (HTTP ${a.status}): ${l}`)}let c=await a.json();if(c.ok===!1){let l=c.error,d=l?.code??"UNKNOWN",u=l?.message??JSON.stringify(c);throw new Error(`Agent Browser ${t} failed: [${String(d)}] ${String(u)}`)}return c.result}finally{clearTimeout(i)}}async listTabs(){return this.call("tabs.list",null)}async openTab(t){return{tabId:(await this.call("tabs.open",{url:t},6e4)).id}}async closeTab(t){await this.call("page.eval",{id:t,script:"window.close()"}).catch(n=>{O("[browser/agent-browser] closeTab window.close() failed (tab leak expected)",{tabId:t,err:n})})}async read(t,n){return this.call("page.read",{id:t,mode:n?.mode??"main",...n?.query?{query:n.query}:{},...n?.budget?{budget:n.budget}:{}})}async inspect(t,n){return this.call("page.inspect",{id:t,mode:n?.mode??"interactive",...n?.query?{query:n.query}:{},...n?.limit?{limit:n.limit}:{}})}async click(t,n){await this.call("page.click",{id:t,elementId:n})}async fill(t,n,r){await this.call("page.fill",{id:t,elementId:n,value:r})}async press(t,n,r){await this.call("page.press",{id:t,key:n,...r?{elementId:r}:{}})}async select(t,n,r){await this.call("page.select",{id:t,elementId:n,value:r})}async waitFor(t,n,r){await this.call("page.wait",{id:t,condition:n,...r?.value?{value:r.value}:{},...r?.timeout?{timeout:r.timeout}:{}},(r?.timeout??3e4)+5e3)}async evalScript(t,n){return this.call("page.eval",{id:t,script:n})}async screenshot(t){return this.call("page.screenshot",{id:t})}}});function jm(e){return{id:e.id,role:e.role,label:e.label,kind:e.kind,value:e.value,state:{disabled:e.disabled,...e.checked!==void 0?{checked:e.checked}:{},...e.selected!==void 0?{selected:e.selected}:{},...e.expanded!==void 0?{expanded:e.expanded}:{}},bbox:e.bbox,...e.selector?{selector:e.selector}:{}}}function eE(e,t){switch(t.kind){case"element_id":if(e.has(t.elementId))return t.elementId;throw new Error(`Element ${t.elementId} not found in current observation. Call browser_observe to refresh.`);case"selector":return null;case"semantic":return null}}async function Hm(e,t,n,r,o,s){switch(n){case"click":await e.click(t,r);break;case"fill":if(o===void 0)throw new Error("fill requires a value");await e.fill(t,r,o);break;case"press":if(o===void 0)throw new Error("press requires a value (key combo)");await e.press(t,o,r);break;case"select":if(o===void 0)throw new Error("select requires a value");await e.select(t,r,o);break;case"hover":throw new Error("hover is not supported by Agent Browser; use element_id from a prior observation to target clicks instead");case"scroll_to":{let i=r.replace(/\\/g,"\\\\").replace(/"/g,'\\"');await e.evalScript(t,`document.querySelector('[data-element-id="${i}"]')?.scrollIntoView({behavior:'smooth',block:'center'})`);break}case"wait_for":await e.waitFor(t,"element",{value:r,timeout:s??1e4});break;default:throw new Error(`Unknown action: ${n}`)}}async function tE(e,t){if(t.target.kind!=="semantic")throw new Error("resolveSemanticAndAct called with non-semantic target");let{elements:n}=await e.client.inspect(e.tabId,{mode:"interactive",query:t.target.text,limit:10}),r=n;if(t.target.role){let c=t.target.role.toLowerCase();r=n.filter(l=>l.role.toLowerCase()===c)}if(r.length===0)throw new Error(`No element found matching semantic target: text="${t.target.text}"`+(t.target.role?`, role="${t.target.role}"`:""));if(r.length>1)return{outcome:"ambiguous_target",query:{text:t.target.text,...t.target.role?{role:t.target.role}:{}},candidates:r.slice(0,5).map(jm)};let s=r[0].id;await Hm(e.client,e.tabId,t.action,s,t.value,t.timeoutMs);let i=await e.client.read(e.tabId,{mode:"main"}),a=ft(i.url,e.config);return a.allowed?{elementId:s}:{outcome:"blocked_by_policy",url:i.url,reason:`action navigated to blocked domain: ${a.reason}`}}var nE=m(()=>{"use strict";dn()});var rE={};zo(rE,{AgentBrowserProvider:()=>Wm});var Wm,oE=m(()=>{"use strict";dn();Bm();Z_();nE();Wm=class{name="agent-browser";config;client;sessions=new Map;constructor(t,n){this.config=t,this.client=new Qc(n)}async open(t){let n=ft(t.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:t.url,reason:n.reason};let r=this.sessions.get(t.sessionId);if(r)await this.client.evalScript(r.tabId,`window.location.href = ${JSON.stringify(t.url)}`),await this.client.waitFor(r.tabId,"load",{timeout:t.timeoutMs??3e4});else{let{tabId:i}=await this.client.openTab(t.url);await this.client.waitFor(i,"load",{timeout:t.timeoutMs??3e4}),r={tabId:i,observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null},this.sessions.set(t.sessionId,r)}let o=await this.client.read(r.tabId,{mode:"main"}),s=ft(o.url,this.config);return s.allowed?this.buildObservation(r,t.sessionId,t.screenshot,void 0,"browser_open"):(await this.client.evalScript(r.tabId,"window.location.href = 'about:blank'").catch(()=>{}),{outcome:"blocked_by_policy",url:o.url,reason:`redirected to blocked domain: ${s.reason}`})}async observe(t){let n=this.sessions.get(t.sessionId);if(!n)throw new Error(`No Agent Browser tab open for session ${t.sessionId}. Call browser_open first.`);return this.buildObservation(n,t.sessionId,t.screenshot,t.maxElements,"browser_observe")}async act(t){let n=this.sessions.get(t.sessionId);if(!n)throw new Error(`No Agent Browser tab open for session ${t.sessionId}. Call browser_open first.`);let r=eE(n.knownElements,t.target);if(r===null){if(t.target.kind==="semantic"){let i=await tE({client:this.client,config:this.config,tabId:n.tabId},t);return"outcome"in i?i:(n.lastAction=`browser_act:${t.action}`,n.lastActionAt=new Date().toISOString(),this.buildObservation(n,t.sessionId,t.screenshot,void 0,"browser_act"))}throw t.target.kind==="selector"?new Error("selector targets are not supported by Agent Browser; use element_id or semantic targets"):new Error(`Cannot resolve target: ${JSON.stringify(t.target)}`)}await Hm(this.client,n.tabId,t.action,r,t.value,t.timeoutMs),n.lastAction=`browser_act:${t.action}`,n.lastActionAt=new Date().toISOString();let o=await this.client.read(n.tabId,{mode:"main"}),s=ft(o.url,this.config);return s.allowed?this.buildObservation(n,t.sessionId,t.screenshot,void 0,"browser_act"):(await this.client.evalScript(n.tabId,"window.location.href = 'about:blank'").catch(()=>{}),{outcome:"blocked_by_policy",url:o.url,reason:`action navigated to blocked domain: ${s.reason}`})}async render(t){throw new Error("AgentBrowserProvider does not support render(). Use PlaywrightProvider for one-shot content fetches.")}async screenshot(t){let n=this.sessions.get(t.sessionId);if(!n)throw new Error(`No Agent Browser tab open for session ${t.sessionId}. Call browser_open first.`);if(t.target!==void 0||t.fullPage)throw new Error("Agent Browser does not support element or full-page screenshots; omit target and fullPage.");let r=await this.client.screenshot(n.tabId),o=Buffer.from(r.data,"base64"),s=o.length>=24?o.readUInt32BE(16):0,i=o.length>=24?o.readUInt32BE(20):0;return{path:(await Vr(t.sessionId,o,"browser_screenshot")).path,bytes:o.length,width:s,height:i,dataBase64:r.data,mediaType:"image/png"}}async extract(t){throw new Error("AgentBrowserProvider does not support extract() yet.")}async close(t){let n=this.sessions.get(t.sessionId);if(n){try{await this.client.closeTab(n.tabId)}catch{}this.sessions.delete(t.sessionId)}}describe(t){let n=this.sessions.get(t);return n?{active:!0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:1}:null}async shutdown(){let t=Array.from(this.sessions.entries()).map(async([,n])=>{try{await this.client.closeTab(n.tabId)}catch{}});await Promise.all(t),this.sessions.clear()}async buildObservation(t,n,r,o,s="browser_open"){let[i,a]=await Promise.all([this.client.read(t.tabId,{mode:"main",budget:4e3}),this.client.inspect(t.tabId,{mode:"interactive",limit:o??80})]),c=a.elements.map(jm),l=o??80,d=c.slice(0,l);t.observationCounter+=1,t.knownElements=new Map(d.map(h=>[h.id,h])),t.currentUrl=i.url,t.currentTitle=i.title;let u=[];c.length>l&&u.push(`page has ${c.length} interactive elements; showing first ${l}`);let p=null;if(r)try{let h=await this.client.screenshot(t.tabId),y=Buffer.from(h.data,"base64");p=(await Vr(n,y,s)).path}catch{u.push("screenshot capture failed")}let f=`obs_${t.observationCounter.toString(36)}`,g={httpStatus:null,loadingState:"idle",hasDialog:!1,consoleErrors:0};return{observationId:f,url:i.url,title:i.title,textSummary:i.content.slice(0,4e3),interactive:d,status:g,warnings:u,screenshotPath:p,capturedAt:new Date().toISOString()}}}});import{existsSync as qG,readFileSync as XG}from"node:fs";import{createRequire as zG}from"node:module";import{dirname as JG,join as VG}from"node:path";function aE(e){if(typeof e=="string")return e;let t=[],n=e;for(let r=0;r<QG&&n instanceof Error;r++)t.push(n.message),n=n.cause;return t.length>0?t.join(" | "):String(e)}function Ue(e){let t=aE(e);return iE.some(n=>t.includes(n))}function ZG(){try{let t=zG(import.meta.url).resolve("playwright/package.json"),n=JSON.parse(XG(t,"utf8"));if(typeof n!="object"||n===null)return;let r=n.bin,o=typeof r=="string"?r:typeof r=="object"&&r!==null?r.playwright:void 0;if(typeof o!="string"||o.length===0)return;let s=VG(JG(t),o);return qG(s)?`node ${/\s/.test(s)?`"${s}"`:s} install chromium`:void 0}catch{return}}function Ys(){return sE??=ZG()??YG,sE}function Km(e){return e.includes("install chromium")}function rt(e,t){let n=aE(e),r=t?.latched===!0?` ${eq}`:"";if(n.includes("Executable doesn't exist")){let o="";return t?.headless===!0?o=" This launch was headless, which needs the `chromium_headless_shell-*` build.":t?.headless===!1&&(o=" This launch was headed, which needs the full `chromium-*` build \u2014 the headless shell alone does not satisfy it."),`browser tools require the Playwright chromium binary. Install via: ${Ys()}.${o}${r}`}return`browser tools require the optional \`playwright\` peer dependency. Install via: pnpm add playwright (then ${Ys()}). Or pick a different tool.${r}`}function Zc(e,t,n=!1){if(!Ue(e))return e;let r=e instanceof Error?e.message:String(e);return new Error(`${r}
272
272
 
273
- ${rt(e,{headless:t,latched:n})}`,{cause:e})}var iE,YG,QG,sE,eq,Gm=m(()=>{"use strict";iE=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],YG="pnpm exec playwright install chromium",QG=4;eq="This session already latched the failure, so browser tools keep fast-failing with this same error \u2014 after installing, call browser_close once to retry."});import Zn from"node:fs";import el from"node:path";import{randomBytes as tq}from"node:crypto";function nq(){try{return"5.221.5"}catch{}try{let e=el.resolve(import.meta.dirname,"../../../package.json"),t=Zn.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var rq,tl,cE=m(()=>{"use strict";Gm();M();V();rq=nq(),tl=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(t){this.config=t}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(t){this.launchFailure={error:t}}async ensureBrowser(){if(this.browser!==void 0&&this.browser.isConnected())return this.browser;if(this.launchFailure!==void 0)throw this.launchFailure.error;return this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=(async()=>{let t;try{({chromium:t}=await import("playwright"))}catch(n){let r=Zc(n,this.config.headless,!0);throw this.latchLaunchFailure(r),this.launchPromise=void 0,r}try{let n=await t.launch({headless:this.config.headless});return this.browser=n,this.clearLaunchFailure(),n}catch(n){let r=Zc(n,this.config.headless,!0);throw this.latchLaunchFailure(r),r}finally{this.launchPromise=void 0}})(),this.launchPromise)}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(t){let n=this.sessions.get(t);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),s=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),i={context:s,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(t,i),s}async ensurePage(t){let n=this.sessions.get(t);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(t);let r=this.sessions.get(t);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${t}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",s=>{s.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",s=>{s.isNavigationRequest()&&s.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",s=>{s.frame()===o.mainFrame()&&s.request().isNavigationRequest()&&(r.lastHttpStatus=s.status())}),o.on("dialog",s=>{r.openDialog=s}),o}getPage(t){return this.sessions.get(t)?.page}async renderHtml(t,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),s;n.requestGuard!==void 0&&await o.route("**/*",async a=>{try{await n.requestGuard(a.request().url()),await a.continue()}catch(c){s=c,await a.abort("blockedbyclient")}});let i=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",i,{once:!0});try{let a=await o.newPage(),c;try{c=await a.goto(t,{timeout:n.timeoutMs,waitUntil:n.waitUntil})}catch(p){throw s??p}if(s!==void 0)throw s;let l=await a.content();if(s!==void 0)throw s;let d=a.url(),u=c!==null?c.status():null;return{html:l,finalUrl:d,httpStatus:u}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",i),await o.close().catch(()=>{})}}getConsoleErrorCount(t){return this.sessions.get(t)?.consoleErrors??0}getLastHttpStatus(t){return this.sessions.get(t)?.lastHttpStatus??null}hasOpenDialog(t){return this.sessions.get(t)?.openDialog!==void 0}async dismissDialog(t,n=!0){let r=this.sessions.get(t);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(t){this.clearLaunchFailure();let n=this.sessions.get(t);n!==void 0&&(this.sessions.delete(t),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.clearLaunchFailure(),this.shutdownComplete)return;this.shutdownComplete=!0;let t=[...this.sessions.keys()];if(await Promise.all(t.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${rq}`}}loadStorageState(t){let n=Ip(t);try{if(!Zn.existsSync(n))return;let r=JSON.parse(Zn.readFileSync(n,"utf8"));return O("[browser/vault] restored session",{profile:t,file:n}),r}catch(r){O("[browser/vault] ignoring unreadable vault",{profile:t,file:n,err:r});return}}async saveStorageState(t,n){try{let r=Ip(t);if(!Zn.existsSync(r))return;let o=await n.storageState(),s=el.join(el.dirname(r),`.${el.basename(r)}.${process.pid}.${tq(4).toString("hex")}.tmp`);Zn.writeFileSync(s,JSON.stringify(o),{mode:384}),Zn.chmodSync(s,384),Zn.renameSync(s,r),O("[browser/vault] saved session",{profile:t,file:r})}catch(r){O("[browser/vault] save failed",{profile:t,err:r})}}}});import{createHash as oq}from"node:crypto";function sq(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function iq(e,t,n){return`el_${oq("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function aq(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function lE(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function uE(e,t){let n=e.role??"",r=e.name??"";dE.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let s of e.children??[])uE(s,t)}async function cq(e){return e.evaluate(t=>{let n=Array.from(document.querySelectorAll(t)),r=[];for(let o of n){let s=o.getBoundingClientRect(),i=o;if(s.width===0&&s.height===0){let d=window.getComputedStyle(i);if(d.display==="none"||d.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),c=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),l=a==="input"?o.type||null:o.getAttribute("type");r.push({name:c,tagName:a,type:l,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(s.left),y:Math.round(s.top),w:Math.round(s.width),h:Math.round(s.height)}})}return r},pE).catch(()=>[])}async function lq(e){return e.evaluate(t=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(t)),o=[];for(let s of r){let i=s.tagName.toLowerCase(),a=s.getAttribute("role")??"",c=s.getAttribute("aria-label")??s.getAttribute("placeholder")??(s.textContent??"").replace(/\s+/g," ").trim().slice(0,100),l=a||(n[i]??"");if(i==="input"){let h=s.type;h==="checkbox"?l="checkbox":h==="radio"?l="radio":h==="button"||h==="submit"||h==="reset"?l="button":h==="search"?l="searchbox":l="textbox"}if(!l)continue;let d="value"in s?s.value:void 0,u=d!==void 0?String(d):void 0,p=s.disabled??!1,f=i==="input"?s.checked:void 0,g={role:l,name:c,disabled:p};u!==void 0&&(g.value=u),f!==void 0&&(g.checked=f),o.push(g)}return o},pE).catch(()=>[])}function dq(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function nl(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],s=dq(e),i=s?s.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=cq(e),c=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),l=Promise.resolve(e.url()),d=e.title().catch(()=>""),[u,p,f,g,h]=await Promise.all([i,a,c,l,d]),y,b=!1;u!==null?(y=[],uE(u,y)):(o.push("observation skipped accessibility tree (returned null)"),b=!0,y=(await lq(e)).filter(C=>dE.has(C.role??"")));let S=new Map;for(let _ of p){let C=lE(_.name),N=S.get(C);(!N||N.bbox.w===0&&_.bbox.w>0)&&S.set(C,_)}let k=y.map(_=>({ax:_,dom:S.get(lE(_.name??""))})),T=r?k:k.filter(_=>_.dom?_.dom.bbox.w>0||_.dom.bbox.h>0:!0);T.sort((_,C)=>{let N=_.dom?.bbox.y??0,D=C.dom?.bbox.y??0;if(N!==D)return N-D;let U=_.dom?.bbox.x??0,L=C.dom?.bbox.x??0;return U-L}),T.length>200&&o.push("page has 200+ interactive elements; consider scoping");let R=T.slice(0,n).map((_,C)=>{let N=_.ax.role??"generic",D=_.ax.name??"",U=iq(N,D,C),L=_.dom?.bbox??{x:0,y:0,w:0,h:0},$=_.dom?.type??null,q=null;_.ax.value!==void 0&&_.ax.value!==null&&(q=String(_.ax.value)),_.ax.checked!==void 0&&(q=String(_.ax.checked)),J_({role:N,kind:$})&&(q="[redacted]");let K={disabled:_.ax.disabled??!1};_.ax.checked!==void 0&&(K.checked=_.ax.checked===!0||_.ax.checked==="mixed"),_.ax.selected!==void 0&&(K.selected=_.ax.selected),_.ax.expanded!==void 0&&(K.expanded=_.ax.expanded);let ne;_.dom?.testId?ne=`[data-testid="${_.dom.testId}"]`:_.dom?.id&&(ne=`#${_.dom.id}`);let In={id:U,role:N,label:sq(D),kind:$,value:q,state:K,bbox:L};return ne!==void 0&&(In.selector=ne),In}),x="idle";try{let _=await e.evaluate(()=>document.readyState);_==="loading"?x="loading":_==="interactive"?x="navigating":x="idle"}catch{x="navigating"}x!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),b&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let F=aq(f),v=`obs_${t.observationCounter.toString(36)}`,A=new Date().toISOString();return{observationId:v,url:g,title:h,textSummary:F,interactive:R,status:{httpStatus:t.httpStatus??null,loadingState:x,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:A}}var dE,pE,fE=m(()=>{"use strict";Yc();dE=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);pE="a[href], button, input, select, textarea, [role], [tabindex], label"});async function mE(e,t){try{let n=await e.nth(t).evaluate(i=>{let a=i,c=a.getAttribute("role")??a.tagName.toLowerCase(),l=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",d=a.getBoundingClientRect();return{role:c,label:l,x:Math.round(d.x),y:Math.round(d.y),w:Math.round(d.width),h:Math.round(d.height)}}),r=`${n.role}:${n.label}:${t}`,o=0;for(let i=0;i<r.length;i++)o=o*31+r.charCodeAt(i)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function qm(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,s)=>mE(e,s)))).filter(o=>o!==null)}async function uq(e){let t=new Set,n=[];for(let{loc:r,count:o}of e)for(let s=0;s<o;s++){let i;try{i=await r.nth(s).evaluate(a=>{let c=a,l=c.getBoundingClientRect();return`${c.tagName}@${Math.round(l.x)},${Math.round(l.y)}`})}catch{continue}t.has(i)||(t.add(i),n.push({key:i,locator:r,index:s}))}return n}async function Xm(e,t,n){switch(t.kind){case"element_id":return pq(e,t,n);case"selector":return fq(e,t);case"semantic":return mq(e,t)}}async function pq(e,t,n){let r=n.get(t.elementId);if(r===void 0)return{outcome:"not_found",query:t};if(r.selector!==void 0){let c=e.locator(r.selector);if(await c.count()===1)return{outcome:"resolved",locator:c}}let o=e.getByRole(r.role,{name:r.label,exact:!0}),s=await o.count();if(s===0)return{outcome:"not_found",query:t};if(s===1)return{outcome:"resolved",locator:o};let i=await qm(o,s);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:i}}async function fq(e,t){let n=e.locator(t.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:t};if(r===1)return{outcome:"resolved",locator:n};let o=await qm(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function mq(e,t){return t.role!==void 0?gq(e,t.text,t.role):hq(e,t.text,t)}async function gq(e,t,n){let r=e.getByRole(n,{name:t}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:t,role:n}};if(o===1)return{outcome:"resolved",locator:r};let s=await qm(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:s}}async function hq(e,t,n){let r=e.getByRole("button",{name:t}),o=e.getByRole("link",{name:t}),s=e.getByLabel(t,{exact:!1}),[i,a,c]=await Promise.all([r.count(),o.count(),s.count()]);if(i+a+c===0)return{outcome:"not_found",query:n};let d=[];i>0&&d.push({loc:r,count:i}),a>0&&d.push({loc:o,count:a}),c>0&&d.push({loc:s,count:c});let u=await uq(d);if(u.length===0)return{outcome:"not_found",query:n};if(u.length===1){let h=u[0];return h===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:h.locator.nth(h.index)}}let p=u.slice(0,5),f=[];for(let h=0;h<p.length;h++){let y=p[h];if(y===void 0)continue;let b=await mE(y.locator,y.index);if(b!==null){let S=`${b.role}:${b.label}:${h}`,k=0;for(let T=0;T<S.length;T++)k=k*31+S.charCodeAt(T)>>>0;f.push({...b,id:`el_${k.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var gE=m(()=>{"use strict"});async function zm(e,t,n,r){let o=e.url();if(o===n)return null;let s=ft(o,t);if(s.allowed)return null;try{await e.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:s.reason}}var hE=m(()=>{"use strict";dn()});var Vm={};zo(Vm,{PlaywrightProvider:()=>Jm});function yE(e){switch(e.kind){case"semantic":return e.role!==void 0?`semantic('${e.text}', role='${e.role}')`:`semantic('${e.text}')`;case"element_id":return`element_id(${e.elementId})`;case"selector":return`selector(${e.selector})`}}var Jm,Ym=m(()=>{"use strict";cE();fE();gE();dn();hE();Bm();Jm=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new tl(t)}async open(t){let n=ft(t.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:t.url,reason:n.reason};let{sessionId:r}=t,o=await this.launcher.ensurePage(r),s=this.ensureSessionState(r),i=null,a=null;try{await o.goto(t.url,{timeout:t.timeoutMs??3e4,waitUntil:t.waitFor??"load"})}catch(u){a=u}let c=o.url();if(!(a!==null&&(c===""||c==="about:blank"))){let u=await zm(o,this.config,t.url,()=>this.close({sessionId:r}));if(u!==null)return u}(t.screenshot===!0||a!==null)&&(i=await this.captureScreenshot(o,r,"browser_open")),s.observationCounter+=1;let d=await nl(o,{observationCounter:s.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(s,d.interactive,d.url,d.title,"browser_open"),a!==null)throw a;return d}async observe(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),s=null;t.screenshot===!0&&(s=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let i=await nl(r,{observationCounter:o.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:t.includeHidden,maxElements:t.maxElements});return this.updateSessionFromObservation(o,i.interactive,i.url,i.title,"browser_observe"),i}async act(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),s=r.url(),i=t.timeoutMs??3e4,a=await Xm(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${yE(t.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:c}=a,l=null,d=async()=>{switch(t.action){case"click":await c.click({timeout:i});break;case"fill":await c.fill(t.value??"");break;case"press":await c.press(t.value??"");break;case"select":await c.selectOption(t.value??"");break;case"hover":await c.hover({timeout:i});break;case"scroll_to":await c.scrollIntoViewIfNeeded({timeout:i});break;case"wait_for":await c.waitFor({timeout:i,state:"visible"});break}};try{await d()}catch(h){if(h instanceof Error&&/navigation|net::ERR/i.test(h.message))try{await d()}catch(y){l=y}else l=h}let u=await zm(r,this.config,s,()=>this.close({sessionId:n}));if(u!==null)return u;let p=null;(t.screenshot===!0||l!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await nl(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),g=`browser_act:${t.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,g),l!==null)throw l;return f}async render(t){return this.launcher.renderHtml(t.url,{timeoutMs:t.timeoutMs??3e4,waitUntil:t.waitFor??"load",signal:t.signal,requestGuard:t.requestGuard})}async screenshot(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),s;if(t.target!==void 0){let d=await Xm(r,t.target,o.knownElements);if(d.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${yE(t.target)}`);if(d.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");s=await d.locator.screenshot()}else s=await r.screenshot({fullPage:t.fullPage??!1});let{path:i,bytes:a}=await Vr(n,s,"browser_screenshot"),c=0,l=0;if(t.fullPage===!0)try{let d=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));c=d.w,l=d.h}catch{let d=r.viewportSize();c=d?.width??0,l=d?.height??0}else{let d=r.viewportSize();c=d?.width??0,l=d?.height??0}return{path:i,bytes:a,width:c,height:l,dataBase64:s.toString("base64"),mediaType:"image/png"}}async extract(t){throw new Error("browser_extract not implemented in Phase 1")}async close(t){await this.launcher.closeSession(t.sessionId),this.sessions.delete(t.sessionId)}describe(t){let n=this.sessions.get(t);if(n===void 0)return null;let r=this.launcher.getPage(t);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(t){let n=this.sessions.get(t);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(t,r),r}updateSessionFromObservation(t,n,r,o,s){t.knownElements=new Map(n.map(i=>[i.id,i])),t.currentUrl=r,t.currentTitle=o,t.lastAction=s,t.lastActionAt=new Date().toISOString()}async captureScreenshot(t,n,r){try{let o=await t.screenshot({fullPage:!1}),{path:s}=await Vr(n,o,r);return s}catch{return null}}}});var tr={};zo(tr,{__resetBrowserRegistryForTests:()=>vq,browserProviderActive:()=>wq,closeBrowserProvider:()=>Zm,getBrowserProvider:()=>bq,getLastRoutingDecision:()=>kq,peekBrowserProvider:()=>Sq});function bE(){Promise.resolve(Zm()).then(()=>{process.exit(130)})}function wE(){Promise.resolve(Zm()).then(()=>{process.exit(143)})}function SE(){Et=null}function yq(){rl||(process.on("SIGINT",bE),process.on("SIGTERM",wE),process.on("exit",SE),rl=!0)}function kE(){rl&&(process.removeListener("SIGINT",bE),process.removeListener("SIGTERM",wE),process.removeListener("exit",SE),rl=!1)}async function bq(e){return Et!==null?Et:(er!==null||(er=(async()=>{let t=Lm(e),n=e?.surface??(e?.env??{}).AGENT_SURFACE??w.AGENT_SURFACE,r=await X_({config:t,surface:n});Qm=r;let o;if(r.backend==="agent-browser"){let{AgentBrowserProvider:s}=await Promise.resolve().then(()=>(oE(),rE)),i=r.availability.connection;o=new s(t,i)}else{let{PlaywrightProvider:s}=await Promise.resolve().then(()=>(Ym(),Vm));o=new s(t)}return yq(),Et=o,er=null,o})()),er)}async function Zm(){if(Et===null)return;let e=Et;Et=null,er=null,kE(),await e.shutdown()}function wq(){return Et!==null}function Sq(){return Et}function kq(){return Qm}function vq(){Et=null,er=null,Qm=null,kE()}var Et,er,rl,Qm,nr=m(()=>{"use strict";dn();z_();P();Et=null,er=null,rl=!1,Qm=null});async function vE(e,t){try{return await D_(e,t)}catch(n){return O("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function Rq(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(nr(),tr)),r=await n();try{return await r.render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}catch(o){if(r.name==="agent-browser"){let{PlaywrightProvider:s}=await Promise.resolve().then(()=>(Ym(),Vm)),{loadBrowserConfig:i}=await Promise.resolve().then(()=>(dn(),Nm)),a=i(),c=new s(a);try{return await c.render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}finally{await c.shutdown()}}throw o}}async function TE(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??Rq,o=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},s=null,i="",a=e,c=null,l=null;try{let u=await ln(n,e,{headers:Aq,signal:t.signal},o);c=u.status,a=u.url||e;let p=u.headers.get("content-type")??"";if(u.ok){if(xq.test(p))throw new Error(`web_scrape markdown mode received binary content (${p.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let f=await u.text();if(Eq.test(p)&&!_q.test(p))return{title:"",markdown:f.trim(),finalUrl:a,usedRender:!1};if(i=f,s=await vE(f,a),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(u){if(t.signal.aborted||u instanceof Te||u instanceof Error&&u.message.startsWith("web_scrape markdown mode received binary"))throw u;l=u}if(!(s===null||s.textLength<200)&&s!==null){let u=Mm({html:i,extractedTextLength:s.textLength});return{title:s.title,markdown:s.markdown,finalUrl:a,usedRender:!1,...u!==void 0?{advisory:u}:{}}}try{await Vs(e,o);let u=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:f=>Vs(f,o)});u.finalUrl!==e&&/^https?:\/\//i.test(u.finalUrl)&&await Vs(u.finalUrl,o);let p=await vE(u.html,u.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(s===null||p.textLength>=s.textLength){let f=Mm({html:u.html,extractedTextLength:p.textLength});return{title:p.title,markdown:p.markdown,finalUrl:u.finalUrl,usedRender:!0,...f!==void 0?{advisory:f}:{}}}}catch(u){if(t.signal.aborted||u instanceof Te)throw u;if(s===null){let p=u instanceof Error?u.message:String(u),f=l instanceof Error?l.message:`HTTP ${c??"error"}`,g=new Error(`web_scrape could not retrieve ${e}: fetch failed (${f}) and render failed (${p}).`);throw g.cause=u,g}}if(s!==null)return{title:s.title,markdown:s.markdown,finalUrl:a,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${c??"error"}).`)}var _q,Eq,xq,Aq,_E=m(()=>{"use strict";F_();Om();Qn();V();_q=/(text\/html|application\/xhtml\+xml)/i,Eq=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,xq=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,Aq={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/web_scrape",Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}});function Pq(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let s=await t(Iq,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":e.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),Cq),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!s.ok){let c="";try{let d=await s.text(),u=ue(d);u&&(c=`: ${u.length>200?u.slice(0,200)+"\u2026":u}`)}catch{}let l=s.statusText?` ${s.statusText}`:"";throw new Error(`Exa Search HTTP ${s.status}${l}${c}`)}let i;try{i=await s.json()}catch(c){throw new Error(`Exa Search response was not JSON: ${c instanceof Error?c.message:String(c)}`)}return(i.results??[]).slice(0,r).map(c=>({title:(c.title??"").trim()||"(untitled)",url:c.url??"",description:(c.highlights?.[0]??"").trim()})).filter(c=>c.url.length>0)}}}function EE(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?Pq({apiKey:e.exaApiKey,fetchFn:e.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function xE(e,t){if(t.length===0)return`# Search results for "${e}"
273
+ ${rt(e,{headless:t,latched:n})}`,{cause:e})}var iE,YG,QG,sE,eq,Gm=m(()=>{"use strict";iE=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],YG="pnpm exec playwright install chromium",QG=4;eq="This session already latched the failure, so browser tools keep fast-failing with this same error \u2014 after installing, call browser_close once to retry."});import Zn from"node:fs";import el from"node:path";import{randomBytes as tq}from"node:crypto";function nq(){try{return"5.222.0"}catch{}try{let e=el.resolve(import.meta.dirname,"../../../package.json"),t=Zn.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var rq,tl,cE=m(()=>{"use strict";Gm();M();V();rq=nq(),tl=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(t){this.config=t}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(t){this.launchFailure={error:t}}async ensureBrowser(){if(this.browser!==void 0&&this.browser.isConnected())return this.browser;if(this.launchFailure!==void 0)throw this.launchFailure.error;return this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=(async()=>{let t;try{({chromium:t}=await import("playwright"))}catch(n){let r=Zc(n,this.config.headless,!0);throw this.latchLaunchFailure(r),this.launchPromise=void 0,r}try{let n=await t.launch({headless:this.config.headless});return this.browser=n,this.clearLaunchFailure(),n}catch(n){let r=Zc(n,this.config.headless,!0);throw this.latchLaunchFailure(r),r}finally{this.launchPromise=void 0}})(),this.launchPromise)}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(t){let n=this.sessions.get(t);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),s=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),i={context:s,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(t,i),s}async ensurePage(t){let n=this.sessions.get(t);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(t);let r=this.sessions.get(t);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${t}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",s=>{s.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",s=>{s.isNavigationRequest()&&s.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",s=>{s.frame()===o.mainFrame()&&s.request().isNavigationRequest()&&(r.lastHttpStatus=s.status())}),o.on("dialog",s=>{r.openDialog=s}),o}getPage(t){return this.sessions.get(t)?.page}async renderHtml(t,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),s;n.requestGuard!==void 0&&await o.route("**/*",async a=>{try{await n.requestGuard(a.request().url()),await a.continue()}catch(c){s=c,await a.abort("blockedbyclient")}});let i=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",i,{once:!0});try{let a=await o.newPage(),c;try{c=await a.goto(t,{timeout:n.timeoutMs,waitUntil:n.waitUntil})}catch(p){throw s??p}if(s!==void 0)throw s;let l=await a.content();if(s!==void 0)throw s;let d=a.url(),u=c!==null?c.status():null;return{html:l,finalUrl:d,httpStatus:u}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",i),await o.close().catch(()=>{})}}getConsoleErrorCount(t){return this.sessions.get(t)?.consoleErrors??0}getLastHttpStatus(t){return this.sessions.get(t)?.lastHttpStatus??null}hasOpenDialog(t){return this.sessions.get(t)?.openDialog!==void 0}async dismissDialog(t,n=!0){let r=this.sessions.get(t);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(t){this.clearLaunchFailure();let n=this.sessions.get(t);n!==void 0&&(this.sessions.delete(t),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.clearLaunchFailure(),this.shutdownComplete)return;this.shutdownComplete=!0;let t=[...this.sessions.keys()];if(await Promise.all(t.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${rq}`}}loadStorageState(t){let n=Ip(t);try{if(!Zn.existsSync(n))return;let r=JSON.parse(Zn.readFileSync(n,"utf8"));return O("[browser/vault] restored session",{profile:t,file:n}),r}catch(r){O("[browser/vault] ignoring unreadable vault",{profile:t,file:n,err:r});return}}async saveStorageState(t,n){try{let r=Ip(t);if(!Zn.existsSync(r))return;let o=await n.storageState(),s=el.join(el.dirname(r),`.${el.basename(r)}.${process.pid}.${tq(4).toString("hex")}.tmp`);Zn.writeFileSync(s,JSON.stringify(o),{mode:384}),Zn.chmodSync(s,384),Zn.renameSync(s,r),O("[browser/vault] saved session",{profile:t,file:r})}catch(r){O("[browser/vault] save failed",{profile:t,err:r})}}}});import{createHash as oq}from"node:crypto";function sq(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function iq(e,t,n){return`el_${oq("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function aq(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function lE(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function uE(e,t){let n=e.role??"",r=e.name??"";dE.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let s of e.children??[])uE(s,t)}async function cq(e){return e.evaluate(t=>{let n=Array.from(document.querySelectorAll(t)),r=[];for(let o of n){let s=o.getBoundingClientRect(),i=o;if(s.width===0&&s.height===0){let d=window.getComputedStyle(i);if(d.display==="none"||d.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),c=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),l=a==="input"?o.type||null:o.getAttribute("type");r.push({name:c,tagName:a,type:l,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(s.left),y:Math.round(s.top),w:Math.round(s.width),h:Math.round(s.height)}})}return r},pE).catch(()=>[])}async function lq(e){return e.evaluate(t=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(t)),o=[];for(let s of r){let i=s.tagName.toLowerCase(),a=s.getAttribute("role")??"",c=s.getAttribute("aria-label")??s.getAttribute("placeholder")??(s.textContent??"").replace(/\s+/g," ").trim().slice(0,100),l=a||(n[i]??"");if(i==="input"){let h=s.type;h==="checkbox"?l="checkbox":h==="radio"?l="radio":h==="button"||h==="submit"||h==="reset"?l="button":h==="search"?l="searchbox":l="textbox"}if(!l)continue;let d="value"in s?s.value:void 0,u=d!==void 0?String(d):void 0,p=s.disabled??!1,f=i==="input"?s.checked:void 0,g={role:l,name:c,disabled:p};u!==void 0&&(g.value=u),f!==void 0&&(g.checked=f),o.push(g)}return o},pE).catch(()=>[])}function dq(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function nl(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],s=dq(e),i=s?s.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=cq(e),c=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),l=Promise.resolve(e.url()),d=e.title().catch(()=>""),[u,p,f,g,h]=await Promise.all([i,a,c,l,d]),y,b=!1;u!==null?(y=[],uE(u,y)):(o.push("observation skipped accessibility tree (returned null)"),b=!0,y=(await lq(e)).filter(C=>dE.has(C.role??"")));let S=new Map;for(let _ of p){let C=lE(_.name),N=S.get(C);(!N||N.bbox.w===0&&_.bbox.w>0)&&S.set(C,_)}let k=y.map(_=>({ax:_,dom:S.get(lE(_.name??""))})),T=r?k:k.filter(_=>_.dom?_.dom.bbox.w>0||_.dom.bbox.h>0:!0);T.sort((_,C)=>{let N=_.dom?.bbox.y??0,D=C.dom?.bbox.y??0;if(N!==D)return N-D;let U=_.dom?.bbox.x??0,L=C.dom?.bbox.x??0;return U-L}),T.length>200&&o.push("page has 200+ interactive elements; consider scoping");let R=T.slice(0,n).map((_,C)=>{let N=_.ax.role??"generic",D=_.ax.name??"",U=iq(N,D,C),L=_.dom?.bbox??{x:0,y:0,w:0,h:0},$=_.dom?.type??null,q=null;_.ax.value!==void 0&&_.ax.value!==null&&(q=String(_.ax.value)),_.ax.checked!==void 0&&(q=String(_.ax.checked)),J_({role:N,kind:$})&&(q="[redacted]");let K={disabled:_.ax.disabled??!1};_.ax.checked!==void 0&&(K.checked=_.ax.checked===!0||_.ax.checked==="mixed"),_.ax.selected!==void 0&&(K.selected=_.ax.selected),_.ax.expanded!==void 0&&(K.expanded=_.ax.expanded);let ne;_.dom?.testId?ne=`[data-testid="${_.dom.testId}"]`:_.dom?.id&&(ne=`#${_.dom.id}`);let In={id:U,role:N,label:sq(D),kind:$,value:q,state:K,bbox:L};return ne!==void 0&&(In.selector=ne),In}),x="idle";try{let _=await e.evaluate(()=>document.readyState);_==="loading"?x="loading":_==="interactive"?x="navigating":x="idle"}catch{x="navigating"}x!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),b&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let F=aq(f),v=`obs_${t.observationCounter.toString(36)}`,A=new Date().toISOString();return{observationId:v,url:g,title:h,textSummary:F,interactive:R,status:{httpStatus:t.httpStatus??null,loadingState:x,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:A}}var dE,pE,fE=m(()=>{"use strict";Yc();dE=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);pE="a[href], button, input, select, textarea, [role], [tabindex], label"});async function mE(e,t){try{let n=await e.nth(t).evaluate(i=>{let a=i,c=a.getAttribute("role")??a.tagName.toLowerCase(),l=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",d=a.getBoundingClientRect();return{role:c,label:l,x:Math.round(d.x),y:Math.round(d.y),w:Math.round(d.width),h:Math.round(d.height)}}),r=`${n.role}:${n.label}:${t}`,o=0;for(let i=0;i<r.length;i++)o=o*31+r.charCodeAt(i)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function qm(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,s)=>mE(e,s)))).filter(o=>o!==null)}async function uq(e){let t=new Set,n=[];for(let{loc:r,count:o}of e)for(let s=0;s<o;s++){let i;try{i=await r.nth(s).evaluate(a=>{let c=a,l=c.getBoundingClientRect();return`${c.tagName}@${Math.round(l.x)},${Math.round(l.y)}`})}catch{continue}t.has(i)||(t.add(i),n.push({key:i,locator:r,index:s}))}return n}async function Xm(e,t,n){switch(t.kind){case"element_id":return pq(e,t,n);case"selector":return fq(e,t);case"semantic":return mq(e,t)}}async function pq(e,t,n){let r=n.get(t.elementId);if(r===void 0)return{outcome:"not_found",query:t};if(r.selector!==void 0){let c=e.locator(r.selector);if(await c.count()===1)return{outcome:"resolved",locator:c}}let o=e.getByRole(r.role,{name:r.label,exact:!0}),s=await o.count();if(s===0)return{outcome:"not_found",query:t};if(s===1)return{outcome:"resolved",locator:o};let i=await qm(o,s);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:i}}async function fq(e,t){let n=e.locator(t.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:t};if(r===1)return{outcome:"resolved",locator:n};let o=await qm(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function mq(e,t){return t.role!==void 0?gq(e,t.text,t.role):hq(e,t.text,t)}async function gq(e,t,n){let r=e.getByRole(n,{name:t}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:t,role:n}};if(o===1)return{outcome:"resolved",locator:r};let s=await qm(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:s}}async function hq(e,t,n){let r=e.getByRole("button",{name:t}),o=e.getByRole("link",{name:t}),s=e.getByLabel(t,{exact:!1}),[i,a,c]=await Promise.all([r.count(),o.count(),s.count()]);if(i+a+c===0)return{outcome:"not_found",query:n};let d=[];i>0&&d.push({loc:r,count:i}),a>0&&d.push({loc:o,count:a}),c>0&&d.push({loc:s,count:c});let u=await uq(d);if(u.length===0)return{outcome:"not_found",query:n};if(u.length===1){let h=u[0];return h===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:h.locator.nth(h.index)}}let p=u.slice(0,5),f=[];for(let h=0;h<p.length;h++){let y=p[h];if(y===void 0)continue;let b=await mE(y.locator,y.index);if(b!==null){let S=`${b.role}:${b.label}:${h}`,k=0;for(let T=0;T<S.length;T++)k=k*31+S.charCodeAt(T)>>>0;f.push({...b,id:`el_${k.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var gE=m(()=>{"use strict"});async function zm(e,t,n,r){let o=e.url();if(o===n)return null;let s=ft(o,t);if(s.allowed)return null;try{await e.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:s.reason}}var hE=m(()=>{"use strict";dn()});var Vm={};zo(Vm,{PlaywrightProvider:()=>Jm});function yE(e){switch(e.kind){case"semantic":return e.role!==void 0?`semantic('${e.text}', role='${e.role}')`:`semantic('${e.text}')`;case"element_id":return`element_id(${e.elementId})`;case"selector":return`selector(${e.selector})`}}var Jm,Ym=m(()=>{"use strict";cE();fE();gE();dn();hE();Bm();Jm=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new tl(t)}async open(t){let n=ft(t.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:t.url,reason:n.reason};let{sessionId:r}=t,o=await this.launcher.ensurePage(r),s=this.ensureSessionState(r),i=null,a=null;try{await o.goto(t.url,{timeout:t.timeoutMs??3e4,waitUntil:t.waitFor??"load"})}catch(u){a=u}let c=o.url();if(!(a!==null&&(c===""||c==="about:blank"))){let u=await zm(o,this.config,t.url,()=>this.close({sessionId:r}));if(u!==null)return u}(t.screenshot===!0||a!==null)&&(i=await this.captureScreenshot(o,r,"browser_open")),s.observationCounter+=1;let d=await nl(o,{observationCounter:s.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(s,d.interactive,d.url,d.title,"browser_open"),a!==null)throw a;return d}async observe(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),s=null;t.screenshot===!0&&(s=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let i=await nl(r,{observationCounter:o.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:t.includeHidden,maxElements:t.maxElements});return this.updateSessionFromObservation(o,i.interactive,i.url,i.title,"browser_observe"),i}async act(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),s=r.url(),i=t.timeoutMs??3e4,a=await Xm(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${yE(t.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:c}=a,l=null,d=async()=>{switch(t.action){case"click":await c.click({timeout:i});break;case"fill":await c.fill(t.value??"");break;case"press":await c.press(t.value??"");break;case"select":await c.selectOption(t.value??"");break;case"hover":await c.hover({timeout:i});break;case"scroll_to":await c.scrollIntoViewIfNeeded({timeout:i});break;case"wait_for":await c.waitFor({timeout:i,state:"visible"});break}};try{await d()}catch(h){if(h instanceof Error&&/navigation|net::ERR/i.test(h.message))try{await d()}catch(y){l=y}else l=h}let u=await zm(r,this.config,s,()=>this.close({sessionId:n}));if(u!==null)return u;let p=null;(t.screenshot===!0||l!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await nl(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),g=`browser_act:${t.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,g),l!==null)throw l;return f}async render(t){return this.launcher.renderHtml(t.url,{timeoutMs:t.timeoutMs??3e4,waitUntil:t.waitFor??"load",signal:t.signal,requestGuard:t.requestGuard})}async screenshot(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),s;if(t.target!==void 0){let d=await Xm(r,t.target,o.knownElements);if(d.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${yE(t.target)}`);if(d.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");s=await d.locator.screenshot()}else s=await r.screenshot({fullPage:t.fullPage??!1});let{path:i,bytes:a}=await Vr(n,s,"browser_screenshot"),c=0,l=0;if(t.fullPage===!0)try{let d=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));c=d.w,l=d.h}catch{let d=r.viewportSize();c=d?.width??0,l=d?.height??0}else{let d=r.viewportSize();c=d?.width??0,l=d?.height??0}return{path:i,bytes:a,width:c,height:l,dataBase64:s.toString("base64"),mediaType:"image/png"}}async extract(t){throw new Error("browser_extract not implemented in Phase 1")}async close(t){await this.launcher.closeSession(t.sessionId),this.sessions.delete(t.sessionId)}describe(t){let n=this.sessions.get(t);if(n===void 0)return null;let r=this.launcher.getPage(t);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(t){let n=this.sessions.get(t);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(t,r),r}updateSessionFromObservation(t,n,r,o,s){t.knownElements=new Map(n.map(i=>[i.id,i])),t.currentUrl=r,t.currentTitle=o,t.lastAction=s,t.lastActionAt=new Date().toISOString()}async captureScreenshot(t,n,r){try{let o=await t.screenshot({fullPage:!1}),{path:s}=await Vr(n,o,r);return s}catch{return null}}}});var tr={};zo(tr,{__resetBrowserRegistryForTests:()=>vq,browserProviderActive:()=>wq,closeBrowserProvider:()=>Zm,getBrowserProvider:()=>bq,getLastRoutingDecision:()=>kq,peekBrowserProvider:()=>Sq});function bE(){Promise.resolve(Zm()).then(()=>{process.exit(130)})}function wE(){Promise.resolve(Zm()).then(()=>{process.exit(143)})}function SE(){Et=null}function yq(){rl||(process.on("SIGINT",bE),process.on("SIGTERM",wE),process.on("exit",SE),rl=!0)}function kE(){rl&&(process.removeListener("SIGINT",bE),process.removeListener("SIGTERM",wE),process.removeListener("exit",SE),rl=!1)}async function bq(e){return Et!==null?Et:(er!==null||(er=(async()=>{let t=Lm(e),n=e?.surface??(e?.env??{}).AGENT_SURFACE??w.AGENT_SURFACE,r=await X_({config:t,surface:n});Qm=r;let o;if(r.backend==="agent-browser"){let{AgentBrowserProvider:s}=await Promise.resolve().then(()=>(oE(),rE)),i=r.availability.connection;o=new s(t,i)}else{let{PlaywrightProvider:s}=await Promise.resolve().then(()=>(Ym(),Vm));o=new s(t)}return yq(),Et=o,er=null,o})()),er)}async function Zm(){if(Et===null)return;let e=Et;Et=null,er=null,kE(),await e.shutdown()}function wq(){return Et!==null}function Sq(){return Et}function kq(){return Qm}function vq(){Et=null,er=null,Qm=null,kE()}var Et,er,rl,Qm,nr=m(()=>{"use strict";dn();z_();P();Et=null,er=null,rl=!1,Qm=null});async function vE(e,t){try{return await D_(e,t)}catch(n){return O("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function Rq(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(nr(),tr)),r=await n();try{return await r.render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}catch(o){if(r.name==="agent-browser"){let{PlaywrightProvider:s}=await Promise.resolve().then(()=>(Ym(),Vm)),{loadBrowserConfig:i}=await Promise.resolve().then(()=>(dn(),Nm)),a=i(),c=new s(a);try{return await c.render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}finally{await c.shutdown()}}throw o}}async function TE(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??Rq,o=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},s=null,i="",a=e,c=null,l=null;try{let u=await ln(n,e,{headers:Aq,signal:t.signal},o);c=u.status,a=u.url||e;let p=u.headers.get("content-type")??"";if(u.ok){if(xq.test(p))throw new Error(`web_scrape markdown mode received binary content (${p.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let f=await u.text();if(Eq.test(p)&&!_q.test(p))return{title:"",markdown:f.trim(),finalUrl:a,usedRender:!1};if(i=f,s=await vE(f,a),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(u){if(t.signal.aborted||u instanceof Te||u instanceof Error&&u.message.startsWith("web_scrape markdown mode received binary"))throw u;l=u}if(!(s===null||s.textLength<200)&&s!==null){let u=Mm({html:i,extractedTextLength:s.textLength});return{title:s.title,markdown:s.markdown,finalUrl:a,usedRender:!1,...u!==void 0?{advisory:u}:{}}}try{await Vs(e,o);let u=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:f=>Vs(f,o)});u.finalUrl!==e&&/^https?:\/\//i.test(u.finalUrl)&&await Vs(u.finalUrl,o);let p=await vE(u.html,u.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(s===null||p.textLength>=s.textLength){let f=Mm({html:u.html,extractedTextLength:p.textLength});return{title:p.title,markdown:p.markdown,finalUrl:u.finalUrl,usedRender:!0,...f!==void 0?{advisory:f}:{}}}}catch(u){if(t.signal.aborted||u instanceof Te)throw u;if(s===null){let p=u instanceof Error?u.message:String(u),f=l instanceof Error?l.message:`HTTP ${c??"error"}`,g=new Error(`web_scrape could not retrieve ${e}: fetch failed (${f}) and render failed (${p}).`);throw g.cause=u,g}}if(s!==null)return{title:s.title,markdown:s.markdown,finalUrl:a,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${c??"error"}).`)}var _q,Eq,xq,Aq,_E=m(()=>{"use strict";F_();Om();Qn();V();_q=/(text\/html|application\/xhtml\+xml)/i,Eq=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,xq=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,Aq={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/web_scrape",Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}});function Pq(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let s=await t(Iq,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":e.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),Cq),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!s.ok){let c="";try{let d=await s.text(),u=ue(d);u&&(c=`: ${u.length>200?u.slice(0,200)+"\u2026":u}`)}catch{}let l=s.statusText?` ${s.statusText}`:"";throw new Error(`Exa Search HTTP ${s.status}${l}${c}`)}let i;try{i=await s.json()}catch(c){throw new Error(`Exa Search response was not JSON: ${c instanceof Error?c.message:String(c)}`)}return(i.results??[]).slice(0,r).map(c=>({title:(c.title??"").trim()||"(untitled)",url:c.url??"",description:(c.highlights?.[0]??"").trim()})).filter(c=>c.url.length>0)}}}function EE(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?Pq({apiKey:e.exaApiKey,fetchFn:e.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function xE(e,t){if(t.length===0)return`# Search results for "${e}"
274
274
 
275
275
  (no results)`;let n=[`# Search results for "${e}"`,""];return t.forEach((r,o)=>{n.push(`## ${o+1}. ${r.title}`),r.url&&n.push(r.url),r.description&&n.push(r.description),n.push("")}),n.join(`
276
276
  `).trimEnd()}var Iq,Cq,AE=m(()=>{"use strict";Je();Iq="https://api.exa.ai/search",Cq=10});function ol(e){if(e instanceof Error&&e.name==="TimeoutError")return"timeout";let t=e instanceof Error?e.message:String(e);return/Timeout\s+\d+\s*ms exceeded/i.test(t)?"timeout":void 0}var rr=m(()=>{"use strict";Gm()});function Nq(e){if(!e||typeof e!="object")return{error:"Invalid input: expected an object"};let t=e,n=t.mode??"markdown";if(n!=="markdown"&&n!=="raw"&&n!=="search")return{error:`Invalid input: mode must be one of "markdown", "raw", "search" (got ${JSON.stringify(n)})`};let r=n,o,s;if(r==="search"){if(typeof t.query!="string"||t.query.length===0)return{error:'Invalid input: search mode requires a non-empty "query" string'};s=t.query}else{if(typeof t.url!="string"||t.url.length===0)return{error:`Invalid input: ${r} mode requires a non-empty "url" string`};let c;try{c=new URL(t.url)}catch{return{error:`Invalid input: "${t.url}" is not a valid absolute URL`}}if(c.protocol!=="http:"&&c.protocol!=="https:")return{error:`Invalid input: protocol "${c.protocol}" not supported (http/https only)`};o=c.toString()}let i=Mq;if(t.timeout_ms!==void 0){if(typeof t.timeout_ms!="number"||!Number.isFinite(t.timeout_ms)||t.timeout_ms<=0)return{error:"Invalid input: timeout_ms must be a positive finite number"};i=Math.min(t.timeout_ms,Oq)}let a=Dq;if(t.max_bytes!==void 0){if(typeof t.max_bytes!="number"||!Number.isFinite(t.max_bytes)||t.max_bytes<=0)return{error:"Invalid input: max_bytes must be a positive finite number"};a=Math.min(t.max_bytes,Fq)}return{mode:r,url:o,query:s,timeoutMs:i,maxBytes:a}}function eg(e,t){return Buffer.byteLength(e,"utf8")<=t?{content:e,truncated:!1}:{content:kt(e,t),truncated:!0}}function Uq(e={}){let t=e.fetchFn??globalThis.fetch,n=e.env??process.env,r=e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{};return async(o,s)=>{if(typeof t!="function")return{content:"web_scrape unavailable: global fetch() is not present in this runtime (agent-afk requires Node 20+).",isError:!0};let i=Nq(o);if("error"in i)return{content:i.error,isError:!0};if(s.aborted){let u=s.reason;return{content:`web_scrape aborted: ${u instanceof Error?u.message:String(u??"aborted")}`,isError:!0}}let a=new AbortController,c=()=>{a.abort(s.reason)},l,d=()=>{let u=a.signal.reason;return u instanceof Error?u.message:String(u??"aborted")};try{if(s.addEventListener("abort",c,{once:!0}),l=setTimeout(()=>{a.abort(new Error(`web_scrape timeout after ${i.timeoutMs}ms`))},i.timeoutMs),i.url!==void 0){let p=await Yn(i.url,r);if(a.signal.aborted)return{content:`web_scrape aborted: ${d()}`,isError:!0};if(!p.allowed)return{content:`web_scrape blocked: ${p.reason}`,isError:!0}}if(i.mode==="raw"){let p;try{let h={method:"GET",headers:{"User-Agent":"agent-afk/web_scrape",Accept:"*/*"},signal:a.signal};p=await ln(t,i.url,h,r)}catch(h){return a.signal.aborted?{content:`web_scrape aborted: ${d()}`,isError:!0}:h instanceof Te?{content:`web_scrape blocked: ${h.message}`,isError:!0}:{content:`web_scrape network error: ${h instanceof Error?h.message:String(h)}`,isError:!0}}if(!p.ok)return{content:`web_scrape HTTP ${p.status} ${p.statusText||""}`.trimEnd()+` for ${i.url}`,isError:!0};let f;try{f=await p.text()}catch(h){return{content:`web_scrape read error: ${h instanceof Error?h.message:String(h)}`,isError:!0}}let g=eg(f,i.maxBytes);return{content:g.content,...g.truncated?{truncated:!0}:{}}}if(i.mode==="markdown")try{let p=await TE(i.url,{fetchFn:t,renderFn:e.renderFn,timeoutMs:i.timeoutMs,signal:a.signal,...e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{}});if(p.markdown.trim().length===0)return{content:`web_scrape extracted no readable content from ${i.url}.`,isError:!0};let f=eg(L_(p.markdown,p.advisory),i.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(p){if(a.signal.aborted)return{content:`web_scrape aborted: ${d()}`,isError:!0};if(p instanceof Te)return{content:`web_scrape blocked: ${p.message}`,isError:!0};let f=p instanceof Error?p.message:String(p),g=Ue(p)&&!Km(f)?` (the render fallback needs the optional Playwright browser \u2014 run \`${Ys()}\`)`:"";return{content:`web_scrape markdown error: ${f}${g}`,isError:!0}}let u=EE({exaApiKey:n.EXA_API_KEY,fetchFn:t});if("error"in u)return{content:u.error,isError:!0};try{let p=await u.search(i.query,{limit:Lq,timeoutMs:i.timeoutMs,signal:a.signal}),f=eg(xE(i.query,p),i.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(p){return a.signal.aborted?{content:`web_scrape aborted: ${d()}`,isError:!0}:{content:`web_scrape search error (${u.name}): ${p instanceof Error?p.message:String(p)}`,isError:!0}}}finally{l!==void 0&&clearTimeout(l),s.removeEventListener("abort",c)}}}var Mq,Oq,Dq,Fq,Lq,RE,IE=m(()=>{"use strict";_E();AE();Qn();vt();Om();rr();Mq=3e4,Oq=12e4,Dq=1e5,Fq=1e6,Lq=10;RE=Uq()});function jq(e){return $q.has(e)?"low":e==="DELETE"?"high":"medium"}function Hq(e){return Bq.has(e)}function Gq(e){let t={};return e.forEach((n,r)=>{let o=r.toLowerCase();Kq.has(o)||Wq.some(s=>o.startsWith(s))||(t[r]=n)}),t}function qq(e,t){if(e==null)return{serialized:void 0,inferredContentType:void 0};let n=Object.keys(t).some(o=>o.toLowerCase()==="content-type");return typeof e=="string"?{serialized:e,inferredContentType:n?void 0:"text/plain"}:{serialized:JSON.stringify(e),inferredContentType:n?void 0:"application/json"}}function Xq(e,t,n){let r=Buffer.byteLength(e,"utf8"),o=e,s=!1;if(r>n&&(o=kt(e,n),s=!0),!s&&/application\/json/i.test(t))try{return{body:JSON.parse(o),truncated:!1}}catch{}return{body:o,truncated:s}}async function ME(e){let{url:t,method:n,signal:r,domainCheck:o,recordEffect:s}=e,i=Math.min(e.maxResponseBytes??tg,ng),a={...e.headers},c=e.fetchFn??globalThis.fetch,l=e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{},d=jq(n);if(o!==void 0){let v=o(t);if(!v.allowed)throw Object.assign(new Error(`web_request blocked by domain policy: ${v.reason}`),{name:"DomainPolicyError"})}let u=await Yn(t,l);if(!u.allowed)throw new Te(u.reason);let{serialized:p,inferredContentType:f}=qq(e.body,a);f!==void 0&&(a["content-type"]=f);let g={method:n,headers:Object.keys(a).length>0?a:void 0,body:p,signal:r},y=Hq(n)?{retries:2,baseDelayMs:300,maxDelayMs:5e3}:{retries:0},b=Date.now(),S;try{S=await ln(c,t,g,{...l,retry:y})}catch(v){throw v instanceof Te,v}let k=Date.now()-b,T=S.headers.get("content-type")??"",E;try{let v=S.body?.getReader();if(!v)E="";else{let A=[],_=0,C=i*2;for(;;){let{done:N,value:D}=await v.read();if(N||!D)break;if(A.push(D),_+=D.byteLength,_>=C){await v.cancel();break}}E=new TextDecoder().decode(Buffer.concat(A,_))}}catch{E=""}let{body:R,truncated:x}=Xq(E,T,i),F=Gq(S.headers);return s!==void 0&&Promise.resolve(s({url:t,method:n,status:S.status,risk:d,timing_ms:k})).catch(()=>{}),{status:S.status,headers:F,body:R,truncated:x,timing_ms:k,risk:d}}function OE(e){if(typeof e!="string"||e.trim().length===0)return{error:"method must be a non-empty string (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS)"};let t=e.trim().toUpperCase(),n=["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"];return n.includes(t)?t:{error:`method "${e}" is not supported \u2014 must be one of: ${n.join(", ")}`}}var CE,PE,tg,ng,$q,Bq,Wq,Kq,DE=m(()=>{"use strict";Qn();vt();CE=3e4,PE=12e4,tg=1e5,ng=1e6,$q=new Set(["GET","HEAD","OPTIONS"]),Bq=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]);Wq=["set-cookie","x-"],Kq=new Set(["server","via","age","vary","authorization","www-authenticate"])});function zq(e){if(!e||typeof e!="object")return{error:"Invalid input: expected an object"};let t=e;if(typeof t.url!="string"||t.url.length===0)return{error:'Invalid input: "url" must be a non-empty string'};let n;try{n=new URL(t.url)}catch{return{error:`Invalid input: "${t.url}" is not a valid absolute URL`}}if(n.protocol!=="http:"&&n.protocol!=="https:")return{error:`Invalid input: protocol "${n.protocol}" not supported (http/https only)`};n.username="",n.password="";let r=n.toString(),o=OE(t.method);if(typeof o=="object"&&"error"in o)return{error:`Invalid input: ${o.error}`};let s=o,i;if(t.body!==void 0&&t.body!==null){if(typeof t.body!="string"&&typeof t.body!="object")return{error:'Invalid input: "body" must be a string, object, or array'};i=t.body}let a={};if(t.headers!==void 0){if(typeof t.headers!="object"||t.headers===null||Array.isArray(t.headers))return{error:'Invalid input: "headers" must be a string-keyed object'};let u=t.headers;for(let[p,f]of Object.entries(u)){if(typeof f!="string")return{error:`Invalid input: header value for "${p}" must be a string`};a[p]=f}}let c=CE;if(t.timeout_ms!==void 0){if(typeof t.timeout_ms!="number"||!Number.isFinite(t.timeout_ms)||t.timeout_ms<=0)return{error:'Invalid input: "timeout_ms" must be a positive finite number'};c=Math.min(t.timeout_ms,PE)}let l=tg;if(t.max_response_bytes!==void 0){if(typeof t.max_response_bytes!="number"||!Number.isFinite(t.max_response_bytes)||t.max_response_bytes<=0)return{error:'Invalid input: "max_response_bytes" must be a positive finite number'};l=Math.min(t.max_response_bytes,ng)}let d;if(t.credential!==void 0){if(typeof t.credential!="string"||t.credential.length===0)return{error:'Invalid input: "credential" must be a non-empty string (an env var name)'};d=t.credential}return{url:r,method:s,body:i,headers:a,timeoutMs:c,maxResponseBytes:l,credential:d}}function Jq(e={}){let t=e.fetchFn??globalThis.fetch,n=e.env??process.env;async function r(){if(e.domainCheck!==void 0)return e.domainCheck;try{let{loadBrowserConfig:o,enforceDomainPolicy:s}=await Promise.resolve().then(()=>(dn(),Nm)),i=o();return a=>s(a,i)}catch{return}}return async(o,s)=>{if(typeof t!="function")return{content:"web_request unavailable: global fetch() is not present (agent-afk requires Node 20+).",isError:!0};let i=zq(o);if("error"in i)return{content:i.error,isError:!0};if(s.aborted){let p=s.reason;return{content:`web_request aborted: ${p instanceof Error?p.message:String(p??"aborted")}`,isError:!0}}let a={...i.headers};if(i.credential!==void 0){let p=n[i.credential];if(p===void 0||p.trim().length===0)return{content:`web_request credential error: environment variable "${i.credential}" is not set. Set it in afk.env or export it in the shell before starting AFK.`,isError:!0};if(Object.keys(a).some(g=>g.toLowerCase()==="authorization"))return{content:'web_request credential error: both "credential" and an explicit Authorization header were provided. Use one or the other.',isError:!0};a.Authorization=`Bearer ${p}`}let c=new AbortController,l=()=>c.abort(s.reason),d,u=()=>{let p=c.signal.reason;return p instanceof Error?p.message:String(p??"aborted")};try{s.addEventListener("abort",l,{once:!0}),d=setTimeout(()=>{c.abort(new Error(`web_request timeout after ${i.timeoutMs}ms`))},i.timeoutMs);let p=await r(),f={url:i.url,method:i.method,body:i.body,headers:a,maxResponseBytes:i.maxResponseBytes,signal:c.signal,fetchFn:t,lookupFn:e.lookupFn,domainCheck:p,recordEffect:e.recordEffect},g;try{g=await ME(f)}catch(S){if(c.signal.aborted)return{content:`web_request aborted: ${u()}`,isError:!0};if(S instanceof Te)return{content:`web_request blocked: ${S.message}`,isError:!0};let k=S instanceof Error&&S.name==="DomainPolicyError"?"blocked":"network error",T=S instanceof Error?S.message:String(S);return{content:`web_request ${k}: ${T}`,isError:!0}}if(c.signal.aborted)return{content:`web_request aborted: ${u()}`,isError:!0};let h=g.body;if(typeof h=="string")h=bt(h);else if(typeof h=="object"&&h!==null){let S=bt(JSON.stringify(h));try{h=JSON.parse(S)}catch{h=S}}let y={status:g.status,headers:g.headers,body:h,timing_ms:g.timing_ms,...g.truncated?{truncated:!0}:{}};return{content:JSON.stringify(y,null,2),...g.truncated?{truncated:!0}:{}}}finally{d!==void 0&&clearTimeout(d),s.removeEventListener("abort",l)}}}var FE,LE=m(()=>{"use strict";DE();Qn();$n();FE=Jq()});import{existsSync as UE,mkdirSync as Vq,readFileSync as Yq,renameSync as Qq,unlinkSync as Zq,writeFileSync as e2}from"node:fs";import{dirname as NE,join as t2}from"node:path";import{randomBytes as n2}from"node:crypto";function or(e){let t=e??_p();if(!UE(t))return[];try{let n=Yq(t,"utf-8");return JSON.parse(n)}catch(n){let r=n instanceof Error?n.message:String(n);return console.error(`[schedule-store] failed to parse ${t}: ${r}`),[]}}function Qs(e,t){let n=t??_p();Vq(NE(n),{recursive:!0});let r=t2(NE(n),`.schedules.json.${process.pid}.${n2(4).toString("hex")}.tmp`),o=JSON.stringify(e,null,2);try{e2(r,o,"utf-8"),Qq(r,n)}catch(s){try{UE(r)&&Zq(r)}catch{}throw s}}function $E(e,t){let n=or(t),r=n.map(c=>c.id),o=r2(e.name),s=o2(o,r),i=new Date().toISOString(),a={...e,notifyOn:e.notifyOn??"failure",id:s,createdAt:i,updatedAt:i};return n.push(a),Qs(n,t),a}function BE(e,t){let n=or(t),r=n.length,o=n.filter(s=>s.id!==e);return o.length===r?!1:(Qs(o,t),!0)}function jE(e,t){return or(t).find(n=>n.id===e)}function r2(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"")}function o2(e,t){if(!t.includes(e))return e;let n=2;for(;t.includes(`${e}-${n}`);)n+=1;return`${e}-${n}`}function HE(e){return{taskId:e.id,command:e.command,trigger:e.trigger??"cron",...e.executor!==void 0?{executor:e.executor}:{},...e.cron!==void 0?{cronExpression:e.cron}:{},...e.notifyOn!==void 0?{notifyOn:e.notifyOn}:{},...e.notifyChat!==void 0?{notifyChat:e.notifyChat}:{}}}var WE=m(()=>{"use strict";M()});import{existsSync as s2,readFileSync as i2}from"node:fs";import{join as a2}from"node:path";async function Yr(e,t,n){let r,o;try{let s=a2(Aw("default"),"port");if(!s2(s))return{synced:!1,detail:"daemon-not-detected (no port file)"};let i=i2(s,"utf-8").trim(),a=c2(i);if(!a)return{synced:!1,detail:"daemon-not-detected (invalid port file)"};({host:r,port:o}=a)}catch{return{synced:!1,detail:"daemon-not-detected (unreadable port file)"}}try{let s=r.includes(":")?`[${r}]`:r,i=await fetch(`http://${s}:${o}${t}`,{method:e,headers:{"Content-Type":"application/json"},body:n!==void 0?JSON.stringify(n):void 0,signal:AbortSignal.timeout(2e3)});return i.ok?{synced:!0,detail:"synced"}:e==="POST"&&i.status===409?{synced:!0,detail:"already-registered"}:e==="DELETE"&&i.status===404?{synced:!0,detail:"not-registered"}:{synced:!1,detail:`daemon-rejected (HTTP ${i.status})`}}catch{return{synced:!1,detail:"daemon-unreachable (stale port file or network error)"}}}function c2(e){let t=parseInt(e,10);if(String(t)===e&&!Number.isNaN(t))return t<1||t>65535?null:{host:"localhost",port:t};let n=e.lastIndexOf(":");if(n<1)return null;let r=e.slice(0,n),o=e.slice(n+1);if(!/^\d+$/.test(o))return null;let s=parseInt(o,10);return Number.isNaN(s)||s<1||s>65535||/^:+$/.test(r)?null:{host:r.startsWith("[")&&r.endsWith("]")?r.slice(1,-1):r,port:s}}var rg,KE=m(()=>{"use strict";M();rg="Change saved to schedules.json, but a running daemon (if any) did not pick it up \u2014 it will apply on the next daemon (re)start."});import{existsSync as l2}from"node:fs";import{readFile as d2}from"node:fs/promises";var GE,qE,XE,zE,JE=m(()=>{"use strict";WE();M();KE();GE=async(e,t)=>{if(!e||typeof e!="object")return{content:"Invalid input: expected object",isError:!0};let n=e;if(typeof n.name!="string"||!n.name)return{content:"Invalid input: name required",isError:!0};if(typeof n.command!="string"||!n.command)return{content:"Invalid input: command required",isError:!0};if(typeof n.cron!="string"||!n.cron)return{content:"Invalid input: cron required",isError:!0};let r=n.cron.trim().split(/\s+/);if(r.length!==5&&r.length!==6)return{content:"Invalid input: cron must be a 5 or 6-field expression",isError:!0};let o=n.notifyChat;if(o!==void 0&&typeof o!="number"&&typeof o!="string")return{content:"Invalid input: notifyChat must be a number (chat id) or string (chat id or alias name)",isError:!0};let s=n.executor;if(s!==void 0&&s!=="agent"&&s!=="shell")return{content:'Invalid input: executor must be "agent" or "shell"',isError:!0};let i=$E({name:n.name,command:n.command,cron:n.cron,...s!==void 0?{executor:s}:{},trigger:n.trigger??"cron",notifyOn:n.notifyOn,...o!==void 0?{notifyChat:o}:{},enabled:typeof n.enabled=="boolean"?n.enabled:!0}),a=i.enabled?await Yr("POST","/tasks",{taskId:i.id,command:i.command,cron:i.cron,...i.executor!==void 0?{executor:i.executor}:{},trigger:i.trigger,notifyOn:i.notifyOn,...i.notifyChat!==void 0?{notifyChat:i.notifyChat}:{}}):await Yr("DELETE",`/tasks/${i.id}`);return{content:JSON.stringify({id:i.id,name:i.name,cron:i.cron,enabled:i.enabled,daemonSynced:a.synced,syncDetail:a.detail,...a.synced?{}:{syncNote:rg}})}},qE=async(e,t)=>{let n=or();return{content:JSON.stringify(n.map(r=>({id:r.id,name:r.name,cron:r.cron,executor:r.executor??"agent",trigger:r.trigger,enabled:r.enabled,notifyOn:r.notifyOn})))}},XE=async(e,t)=>{if(!e||typeof e!="object")return{content:"Invalid input: expected object",isError:!0};let n=e;if(typeof n.taskId!="string"||!n.taskId)return{content:"Invalid input: taskId required",isError:!0};let r=n.taskId,o=typeof n.limit=="number"?Math.min(Math.max(1,n.limit),50):10,s=Ea();if(!l2(s))return{content:JSON.stringify([])};let i;try{let l=await d2(s);i=(l.length>1048576?l.subarray(l.length-1048576):l).toString("utf-8")}catch{return{content:JSON.stringify([])}}let a=i.split(`
@@ -1264,7 +1264,7 @@ ${r}`:e.text,sessionId:t.ctx.sessionId},e.text.length<=e6&&(yield{type:"suggesti
1264
1264
 
1265
1265
  ${e}`:t:[{type:"text",text:t},...e]}var Cu,gF=m(()=>{"use strict";lb();db();V();Cu=class{outerIterator;baseConfig;deps;currentModel;currentPermissionMode;currentCwd;currentSystemPrompt;systemPromptOverridden=!1;startupFamily;active;activeModel;closed=!1;shadowHistory;pendingUserText;pendingAssistantText="";lastSessionId;constructor(t,n){this.outerIterator=t.prompt[Symbol.asyncIterator](),this.baseConfig=t.config,this.deps=n,this.currentModel=typeof t.config.model=="string"?t.config.model:void 0,this.currentPermissionMode=t.config.permissionMode,this.currentCwd=t.config.cwd,this.startupFamily=n.providerNameForModel(this.currentModel),this.shadowHistory=[...t.config.resumeHistory??[]]}resolveInner(t){let n=this.deps.resolveProvider(t),r={...this.baseConfig};r.model=t??this.baseConfig.model;let o=n.name===this.startupFamily&&this.baseConfig.apiKey!==void 0?this.baseConfig.apiKey:this.deps.resolveApiKey(t);o!==void 0?r.apiKey=o:delete r.apiKey,Iu(r);let s=[n.name,r.baseUrl??"",r.openaiBaseUrl??"",r.apiKey??"",r.forceChatgptOAuth?"chatgpt-oauth":"",r.forceXaiOAuth?"xai-oauth":"",r.forceXaiApiKey?"xai-apikey":"",r.xaiBaseUrl??""].join("\0");return{provider:n,innerConfig:r,signature:s}}buildInner(t,n){let{provider:r,innerConfig:o,signature:s}=this.resolveInner(t),i=new $o(()=>this.lastSessionId);this.currentPermissionMode!==void 0&&(o.permissionMode=this.currentPermissionMode),this.currentCwd!==void 0&&(o.cwd=this.currentCwd),this.systemPromptOverridden&&(o.systemPrompt=this.currentSystemPrompt),n&&(o.resumeHistory=[...this.shadowHistory]);let a=r.query({prompt:i.createIterable(),config:o});return{family:r.name,signature:s,query:a,iterator:a[Symbol.asyncIterator](),input:i}}async closeActive(){let t=this.active;if(t){this.active=void 0;try{await t.iterator.return?.(void 0)}catch{}try{await t.query.close()}catch{}}}observeEvent(t){t.type==="assistant.message"&&(this.pendingAssistantText+=(this.pendingAssistantText?`
1266
1266
  `:"")+t.text)}commitShadowTurn(){this.pendingUserText!==void 0&&(this.shadowHistory.push({user:this.pendingUserText,assistant:this.pendingAssistantText}),this.pendingUserText=void 0,this.pendingAssistantText="")}async*[Symbol.asyncIterator](){try{for(this.active=this.buildInner(this.currentModel,!1),this.activeModel=this.currentModel,yield*this.driveUntilInit(!1);!this.closed;){let t=await this.outerIterator.next();if(t.done)break;let n=t.value;this.lastSessionId=n.sessionId;let r=this.currentModel!==this.activeModel,o=!this.active||r&&this.resolveInner(this.currentModel).signature!==this.active.signature,s=this.activeModel,i=this.active?.family;this.activeModel=this.currentModel;let a;if(o&&(await this.closeActive(),this.active=this.buildInner(this.currentModel,!0),O(`\u{1F500} ProviderRouter: switched inner provider \u2192 ${this.active.family} (model=${this.currentModel})`),s!==void 0&&s!==this.currentModel&&(a=h3(s,this.currentModel??"(unset)",i,this.active.family)),yield*this.driveUntilInit(!0)))break;for(this.pendingUserText=g3(n.content),this.pendingAssistantText="",this.active.input.pushUserMessage(a?y3(n.content,a):n.content);;){let c=await this.active.iterator.next();if(c.done){this.closed=!0;break}let l=c.value;if(this.observeEvent(l),yield l,l.type==="turn.completed"){this.commitShadowTurn();break}if(l.type==="error"){this.commitShadowTurn();break}}}}finally{await this.closeActive()}}async*driveUntilInit(t){for(;;){let n=await this.active.iterator.next();if(n.done)return yield{type:"error",error:new Error("provider ended before initialization")},this.closed=!0,!0;let r=n.value;if(r.type==="session.init")return t||(yield r),!1;if(r.type==="error")return yield r,this.closed=!0,!0;yield r}}async interrupt(t="interrupted"){await this.active?.query.interrupt(t)}async setModel(t){typeof t=="string"&&t.length>0&&(this.currentModel=t,this.active&&this.resolveInner(t).signature===this.active.signature&&await this.active.query.setModel(t))}async setPermissionMode(t){this.currentPermissionMode=t,await this.active?.query.setPermissionMode(t)}setCwd(t){this.currentCwd=t,this.active?.query.setCwd?.(t)}setSystemPrompt(t){return this.currentSystemPrompt=t,this.systemPromptOverridden=!0,this.active?.query.setSystemPrompt?.(t)??!1}async reauth(){return await this.active?.query.reauth?.()??null}async supportedCommands(){return await this.active?.query.supportedCommands()??[]}async supportedModels(){return await this.active?.query.supportedModels()??[]}async supportedAgents(){return await this.active?.query.supportedAgents()??[]}async getContextUsage(){return await this.active?.query.getContextUsage()??{}}async mcpServerStatus(){return await this.active?.query.mcpServerStatus()??[]}async accountInfo(){return await this.active?.query.accountInfo()??{}}async rewindFiles(t,n){let r=this.active;return r?r.query.rewindFiles(t,n):{canRewind:!1,error:"no active provider"}}async compact(){let t=this.active;return t?.query.compact?t.query.compact():{compacted:!1,reason:"provider does not support compaction",messagesBefore:0,messagesAfter:0}}listRewindTargets(){return this.active?.query.listRewindTargets?.()??[]}async rewindConversation(t){let n=this.active;return n?.query.rewindConversation?n.query.rewindConversation(t):{rewound:!1,reason:"not-supported",messagesBefore:0,messagesAfter:0}}async reloadPlugins(...t){let n=this.active?.query;if(n&&typeof n.reloadPlugins=="function")return n.reloadPlugins(...t)}async close(){this.closed=!0,await this.closeActive()}}});async function Pu(e,t,n){if(!e)return;if(n.kind==="blocked"){await Jt(e,{hookEvent:t,decision:"block",...n.err.reason!==void 0?{reason:n.err.reason}:{}});return}let r=n.decision;await Jt(e,{hookEvent:t,decision:r.decision,...r.reason!==void 0?{reason:r.reason}:{},...r.injectContext!==void 0?{injectedContextBytes:Buffer.byteLength(r.injectContext,"utf8")}:{}})}async function hF(e,t,n={}){if(e)try{let r=await e.dispatch(t,n.signal);return await Pu(n.traceWriter,"SessionStart",{kind:"decision",decision:r}),r.injectContext}catch(r){throw r instanceof z&&await Pu(n.traceWriter,"SessionStart",{kind:"blocked",err:r}),r}}async function yF(e,t,n={}){if(e)try{let r=await e.dispatch(t,n.signal);await Pu(n.traceWriter,"SessionEnd",{kind:"decision",decision:r})}catch(r){if(r instanceof z&&await Pu(n.traceWriter,"SessionEnd",{kind:"blocked",err:r}),r instanceof z||r instanceof je){O(`SessionEnd hook swallowed ${r.name}: ${r.message}`),n.onError?.(r);return}O(`SessionEnd hook unexpected error: ${String(r)}`),n.onError?.(r instanceof Error?r:new Error(String(r)))}}var ub=m(()=>{"use strict";V();Y();G()});function bF(e){try{let t=JSON.parse(e);if(!Array.isArray(t))return null;let n=t.length;if(n===0)return"no results";let r=0,o=0;for(let a of t)if(a&&typeof a=="object"){let c=a.type;c==="fact"?r++:c==="procedure"&&o++}let s=`${n} result${n===1?"":"s"}`;if(r+o!==n)return s;let i=[];return r>0&&i.push(`${r} fact${r===1?"":"s"}`),o>0&&i.push(`${o} procedure${o===1?"":"s"}`),i.length===0?s:`${s} (${i.join(", ")})`}catch{return null}}function wF(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t;if(n.target==="hot"&&n.saved===!0){if(n.truncated===!0)return"hot memory saved (truncated to fit cap)";let r=n.usage;if(r&&typeof r=="object"){let o=r.pct;if(typeof o=="number")return`hot memory saved (${o}% of cap)`}return"hot memory saved"}if(n.target==="fact"){if(n.action==="remove")return n.removed===!0?"fact removed":"fact not found";if(n.action==="set"&&typeof n.id=="number")return`fact #${n.id} set`;if(n.action==="supersede"&&typeof n.id=="number"&&typeof n.supersedes=="number")return`fact #${n.id} supersedes #${n.supersedes}`}return null}catch{return null}}function SF(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t;return typeof n.name=="string"&&n.written===!0?`wrote procedure '${n.name}'`:null}catch{return null}}var kF=m(()=>{"use strict"});function pb(e){let t=e.trim();if(t.length===0)return null;let n=t[0];if(n!=="{"&&n!=="[")return null;let r=t[t.length-1];if(n==="{"&&r!=="}"||n==="["&&r!=="]")return null;let o;try{o=JSON.parse(t)}catch{return null}return Array.isArray(o)?vF(b3(o)):o!==null&&typeof o=="object"?vF(w3(o)):null}function b3(e){return e.length===0?"[empty array]":e.length===1?"[1 item]":`[${e.length} items]`}function w3(e){let t=Object.keys(e);if(t.length===0)return"{empty object}";let n=t.slice(0,4),r=t.length>4?", \u2026":"";return`{${n.join(", ")}${r}}`}function vF(e){return e.length<=80?e:e.slice(0,79)+"\u2026"}var TF=m(()=>{"use strict"});function _F(e,t){if(!e)return null;let n=S3.get(e);if(!n)return null;try{let r=n(t);if(r===null)return null;let o=ue(r);return o.length>0?o:null}catch{return null}}var S3,EF=m(()=>{"use strict";kF();TF();Je();S3=new Map([["memory_search",bF],["memory_update",wF],["procedure_write",SF],["bash",pb],["Bash",pb]])});function xF(e,t){if(e===void 0||e.trim()==="")return t;let n=Number(e.trim());return!Number.isInteger(n)||n<k3||n>v3?t:n}function AF(){return{tailCount:xF(w.AFK_BASH_PREVIEW_TAIL_LINES,T3),headCount:xF(w.AFK_BASH_PREVIEW_HEAD_LINES,_3)}}function RF(e,t,n){if(e.length===0)return{head:[],tail:[]};if(t+n>=e.length){let s=e.slice(0,t),i=e.slice(t);return{head:s,tail:i}}let r=t>0?e.slice(0,t):[],o=n>0?e.slice(e.length-n):[];return{head:r,tail:o}}var k3,v3,T3,_3,IF=m(()=>{"use strict";P();k3=0,v3=200,T3=7,_3=0});function E3(e){if(e<1024)return`${e}B`;let t=e/1024;if(t<1024)return t%1===0?`${Math.floor(t)}KB`:`${t.toFixed(1)}KB`;let n=t/1024;if(n<1024)return n%1===0?`${Math.floor(n)}MB`:`${n.toFixed(1)}MB`;let r=n/1024;return r%1===0?`${Math.floor(r)}GB`:`${r.toFixed(1)}GB`}function CF(e){let t=Buffer.byteLength(e,"utf8"),n=E3(t),r=e.split(`
1267
- `);if(r.length<=1)return e.length<=80?{content:e,truncated:!1,sizeBytes:t,sizeLabel:n}:{content:e.substring(0,80)+"\u2026",truncated:!0,sizeBytes:t,sizeLabel:n};let{tailCount:o,headCount:s}=AF(),i=r.filter(h=>h.trim()!==""),{head:a,tail:c}=RF(i,s,o),l=a.length+c.length,d=r.length-l,u=[...a,...c];if(e.length<=80)return{content:e,truncated:!1,lineCount:r.length,sizeBytes:t,sizeLabel:n,tailPreview:u,hiddenLineCount:d};let p=r[0]??"",f=p;return p.length>80&&(f=p.substring(0,80)+"\u2026"),{content:f+`\u2026+${r.length} lines`,truncated:!0,lineCount:r.length,sizeBytes:t,sizeLabel:n,tailPreview:u,hiddenLineCount:d}}var PF=m(()=>{"use strict";IF()});function x3(e){let t=/Output too large \((\d+(?:\.\d+)?)\s*(B|KB|MB|GB)\)\.\s*Full output saved to:\s*(\/[^\n]+)/,n=e.match(t);if(!n||!n[1]||!n[2]||!n[3])return null;let r=n[1],o=n[2],s=n[3],i=parseFloat(r),a=i;o==="KB"?a=i*1024:o==="MB"?a=i*1024*1024:o==="GB"&&(a=i*1024*1024*1024);let c=r;return i%1===0&&(c=String(Math.floor(i))),c+=o,{sizeLabel:c,sizeBytes:Math.round(a),absolutePath:s.trim()}}function A3(e,t){let n={...e.raw??{}};return e.inputTokens!==void 0&&(n.input_tokens=e.inputTokens),e.outputTokens!==void 0&&(n.output_tokens=e.outputTokens),e.cachedInputTokens!==void 0&&(n.cache_read_input_tokens=e.cachedInputTokens),e.cacheCreationTokens!==void 0&&(n.cache_creation_input_tokens=e.cacheCreationTokens),e.totalTokens!==void 0&&(n.total_tokens=e.totalTokens),e.contextWindowTokens!==void 0&&(n.context_window_tokens=e.contextWindowTokens),{sessionId:t,stopReason:e.stopReason??void 0,resultSubtype:e.resultSubtype,durationMs:e.durationMs,durationApiMs:e.durationApiMs,totalCostUsd:e.totalCostUsd,isError:e.isError,usage:Object.keys(n).length>0?n:void 0,modelUsage:e.modelUsage,permissionDenials:e.permissionDenials,errors:e.errors}}function R3(e){let t=e.isError===!0?null:_F(e.toolName,e.content),n=t!==null?{display:t}:{},r=typeof e.batchIndex=="number"&&typeof e.batchSize=="number"?{batchIndex:e.batchIndex,batchSize:e.batchSize}:{},o=e.failureClass?{failureClass:e.failureClass}:{},s=x3(e.content);if(s)return{type:"chunk",chunk:{type:"tool_result",toolUseId:e.toolUseId,content:`Output persisted (${s.sizeLabel}) \u2192 ${s.absolutePath}`,isError:e.isError===!0,persistedPath:s.absolutePath,sizeBytes:s.sizeBytes,sizeLabel:s.sizeLabel,...n,...r,...o}};let{content:i,lineCount:a,sizeBytes:c,sizeLabel:l,tailPreview:d,hiddenLineCount:u}=CF(e.content);return{type:"chunk",chunk:{type:"tool_result",toolUseId:e.toolUseId,content:i,isError:e.isError===!0,sizeBytes:c,sizeLabel:l,...e.truncated===!0&&{truncated:!0},...e.capturePath!==void 0&&{capturePath:e.capturePath},...a!==void 0&&{lineCount:a},...d!==void 0&&d.length>0&&{tailPreview:d},...u!==void 0&&{hiddenLineCount:u},...e.exitCode!==void 0&&{exitCode:e.exitCode},...e.durationMs!==void 0&&{durationMs:e.durationMs},...n,...r,...o}}}function Mu(e,t){switch(e.type){case"session.init":{let n=e.info;return t.setSessionMetadata(r=>({...r,sessionId:n.sessionId,model:n.model??r.model,...n.permissionMode!==void 0?{permissionMode:n.permissionMode}:{},...n.cwd!==void 0?{cwd:n.cwd}:{},tools:n.tools?[...n.tools]:r.tools,slashCommands:n.slashCommands?[...n.slashCommands]:r.slashCommands,skills:n.skills?[...n.skills]:r.skills,plugins:n.plugins?n.plugins.map(o=>({...o})):r.plugins,mcpServers:n.mcpServers?n.mcpServers.map(o=>({...o})):r.mcpServers,...n.apiKeySource!==void 0?{apiKeySource:n.apiKeySource}:{},...n.version!==void 0?{claudeCodeVersion:n.version}:{},...n.outputStyle!==void 0?{outputStyle:n.outputStyle}:{}})),t.updateSessionIdentity(n.sessionId),t.resolveInitialization(),null}case"session.status":return t.setSessionMetadata(n=>({...n,sessionId:e.sessionId,...e.permissionMode!==void 0?{permissionMode:e.permissionMode}:{permissionMode:n.permissionMode},...e.status!==void 0?{status:e.status}:{}})),null;case"delta.text":return{type:"chunk",chunk:{type:"content",content:e.text,metadata:{eventType:"delta",deltaType:"text_delta"}}};case"delta.reasoning":return{type:"chunk",chunk:{type:"thinking",content:e.text,metadata:{eventType:"delta",deltaType:"thinking_delta"}}};case"assistant.message":if(e.sessionId&&t.updateSessionIdentity(e.sessionId),e.text){let n={role:"assistant",content:e.text,timestamp:new Date};return t.conversationHistory.push(n),{type:"message",message:n}}return null;case"tool.use.start":return{type:"chunk",chunk:{type:"tool_use_detail",toolUseId:e.toolUseId,toolName:e.toolName,toolInput:e.toolInput,toolInputRaw:e.toolInputRaw,toolInputCapture:e.toolInputCapture,...e.pending?{pending:!0}:{}}};case"tool.use":return{type:"chunk",chunk:{type:"tool_use",content:e.summary,metadata:{eventType:"tool_use_summary",precedingToolUseIds:e.toolUseIds}}};case"tool.output":return e.isError!==!0&&e.toolName&&(t._successfulToolNames??=[]).push(e.toolName),R3(e);case"tool.diff":return{type:"chunk",chunk:{type:"tool_diff",toolUseId:e.toolUseId,diff:e.diff}};case"progress":return{type:"progress",progress:{taskId:e.progress.taskId,description:e.progress.description,...e.progress.summary!==void 0?{summary:e.progress.summary}:{},...e.progress.lastToolName!==void 0?{lastToolName:e.progress.lastToolName}:{},totalTokens:e.progress.totalTokens,toolUses:e.progress.toolUses,durationMs:e.progress.durationMs}};case"suggestion":return{type:"suggestion",suggestion:e.suggestion};case"turn.completed":{let n=A3(e.usage,e.sessionId??t.getSessionMetadata().sessionId);t._successfulToolNames!==void 0&&t._successfulToolNames.length>0&&(n.successfulToolNames=[...t._successfulToolNames]),t.setLastResponseMetadata(n);for(let r=t.conversationHistory.length-1;r>=0;r--){let o=t.conversationHistory[r];if(o?.role==="assistant"){o.metadata=n;break}}if(t.maxBudgetUsd!==void 0&&t.abortBudget!==void 0&&typeof n.totalCostUsd=="number"&&(t._runningCostUsd=(t._runningCostUsd??0)+n.totalCostUsd,t._runningCostUsd>=t.maxBudgetUsd)){lw(t.traceWriter,{kind:"monetary",runningCostUsd:t._runningCostUsd,maxBudgetUsd:t.maxBudgetUsd,lastTurnCostUsd:n.totalCostUsd});let r=new gt(t._runningCostUsd,t.maxBudgetUsd);return t.abortBudget(r),{type:"error",error:r}}return{type:"done",metadata:n}}case"error":return{type:"error",error:e.error};case"paused":return{type:"paused",reason:e.reason,...e.resetsAt!==void 0?{resetsAt:e.resetsAt}:{},...e.accountId!==void 0?{accountId:e.accountId}:{},...e.autoResume!==void 0?{autoResume:e.autoResume}:{}};case"resumed":return{type:"resumed",hotSwapped:e.hotSwapped,...e.accountId!==void 0?{accountId:e.accountId}:{}};case"stream.retry":return{type:"stream_retry"};case"rate_limit":return{type:"rate_limit",...e.retryAfterMs!==void 0?{retryAfterMs:e.retryAfterMs}:{}};case"notice":return{type:"notice",text:e.text,kind:e.kind};case"tool.activity":return{type:"tool-activity",activeCount:e.activeCount,activeToolUseIds:e.activeToolUseIds};default:return null}}var fb=m(()=>{"use strict";Y();G();EF();PF()});var Ou,MF=m(()=>{"use strict";Ou=class{initializationPromise;resolveInitialization;rejectInitialization;initializationSettled=!1;sessionMetadata;sessionIdentity;constructor(t,n){this.sessionIdentity=t,this.sessionMetadata=n,this.initializationPromise=new Promise((r,o)=>{this.resolveInitialization=r,this.rejectInitialization=o})}waitForInitialization(){return this.initializationPromise}getSessionIdentity(){return{...this.sessionIdentity,sessionId:this.getSessionId()}}getSessionMetadata(){return{...this.sessionMetadata,sessionId:this.getSessionId()}}getSessionId(){return this.sessionMetadata.sessionId??this.sessionIdentity.sessionId}updateSessionIdentity(t){t&&(this.sessionIdentity={...this.sessionIdentity,sessionId:t},this.sessionMetadata={...this.sessionMetadata,sessionId:t})}setSessionMetadata(t){this.sessionMetadata=t(this.sessionMetadata)}resolveInitializationIfNeeded(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}resolveInitializationOnce(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}rejectInitializationOnce(t){this.initializationSettled||(this.initializationSettled=!0,this.rejectInitialization(t))}isInitializationSettled(){return this.initializationSettled}}});function OF(e){e.models&&$p(e.models),Iu(e);let t=be(e.model)??e.model,{sessionIdentity:n,metadata:r}=Xw(e,t),o=new Ou(n,r),s=new $o(()=>o.getSessionId()),i=s.createIterable(),a;if(e.provider)O(`\u{1F7E2} AgentSession: Creating query session via injected provider=${e.provider.name}`),a=e.provider.query({prompt:i,config:e});else{O("\u{1F7E2} AgentSession: Creating query session via ProviderRouter");let d=e.providerFactory?e.providerFactory:u=>Ru(u,void 0,{customTools:e.customTools,canUseTool:e.canUseTool});a=new Cu({prompt:i,config:e},{resolveProvider:d,providerNameForModel:u=>Q(u),resolveApiKey:u=>ce(u)})}let l=a[Symbol.asyncIterator]();return{stateManager:o,inputStream:s,providerQuery:a,providerIterator:l}}async function DF(e,t,n,r,o,s,i,a,c){try{let l=await hF(i,{event:"SessionStart",sessionId:r.getSessionId(),parentSessionId:e.parentSessionId},{signal:n,...e.traceWriter?{traceWriter:e.traceWriter}:{}});for(l&&e.parentSessionId===void 0&&a(l);;){let d=await t.next();if(d.done){r.resolveInitializationIfNeeded();return}let u=d.value,p=Mu(u,c());if(u.type==="session.init"){await B(e.traceWriter,{phase:"session_init_done",durationMs:Date.now()-o.sessionStartedAt});return}if(p&&p.type==="error"){o.markProviderError();return}}}catch(l){let d=l instanceof Error?l:new Error(String(l));d instanceof z&&o.markHookBlocked(),r.isInitializationSettled()||r.rejectInitializationOnce(d),await s.dispatchOnce("error").catch(()=>{})}}var FF=m(()=>{"use strict";V();G();Re();gF();Ne();ub();Y();fb();Hp();MF();He();xe();db();lb()});import{randomBytes as I3}from"node:crypto";import{mkdir as C3,writeFile as P3}from"node:fs/promises";import{join as M3}from"node:path";function D3(e){return w.AFK_CAPTURE_SUBAGENT_PROMPTS!=="1"||!e.isSubagentFork||!e.sessionId||!e.subagentId?!1:e.prompt.length>0}function mb(e,t){let n=Buffer.byteLength(e,"utf8");return n<=t?{text:e,originalBytes:n,truncated:!1}:{text:Buffer.from(e,"utf8").subarray(0,t).toString("utf8").replace(/\uFFFD+$/,""),originalBytes:n,truncated:!0}}function F3(e){return e.replace(/[^a-zA-Z0-9_-]/g,"-").slice(0,60)}function Du(e){return`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function L3(e,t){let n=["---",`subagentId: ${Du(e.subagentId??"unknown")}`,`sessionLabel: ${Du(e.sessionId??"unknown")}`,`turn: ${e.turn}`,`capturedAt: ${Du(new Date().toISOString())}`,`promptBytes: ${t.originalBytes}`,`bodyBytes: ${Buffer.byteLength(t.text,"utf8")}`,`truncated: ${t.truncated}`,"redaction: best-effort"];return e.model!==void 0&&n.push(`model: ${Du(e.model)}`),n.push("---",O3,""),n.push(t.text),t.truncated&&n.push("",`<!-- TRUNCATED at ${LF} bytes of ${t.originalBytes} -->`),`${n.join(`
1267
+ `);if(r.length<=1)return e.length<=80?{content:e,truncated:!1,sizeBytes:t,sizeLabel:n}:{content:e.substring(0,80)+"\u2026",truncated:!0,sizeBytes:t,sizeLabel:n};let{tailCount:o,headCount:s}=AF(),i=r.filter(h=>h.trim()!==""),{head:a,tail:c}=RF(i,s,o),l=a.length+c.length,d=r.length-l,u=[...a,...c];if(e.length<=80)return{content:e,truncated:!1,lineCount:r.length,sizeBytes:t,sizeLabel:n,tailPreview:u,hiddenLineCount:d};let p=r[0]??"",f=p;return p.length>80&&(f=p.substring(0,80)+"\u2026"),{content:f+`\u2026+${r.length} lines`,truncated:!0,lineCount:r.length,sizeBytes:t,sizeLabel:n,tailPreview:u,hiddenLineCount:d}}var PF=m(()=>{"use strict";IF()});function x3(e){let t=/Output too large \((\d+(?:\.\d+)?)\s*(B|KB|MB|GB)\)\.\s*Full output saved to:\s*(\/[^\n]+)/,n=e.match(t);if(!n||!n[1]||!n[2]||!n[3])return null;let r=n[1],o=n[2],s=n[3],i=parseFloat(r),a=i;o==="KB"?a=i*1024:o==="MB"?a=i*1024*1024:o==="GB"&&(a=i*1024*1024*1024);let c=r;return i%1===0&&(c=String(Math.floor(i))),c+=o,{sizeLabel:c,sizeBytes:Math.round(a),absolutePath:s.trim()}}function A3(e,t){let n={...e.raw??{}};return e.inputTokens!==void 0&&(n.input_tokens=e.inputTokens),e.outputTokens!==void 0&&(n.output_tokens=e.outputTokens),e.cachedInputTokens!==void 0&&(n.cache_read_input_tokens=e.cachedInputTokens),e.cacheCreationTokens!==void 0&&(n.cache_creation_input_tokens=e.cacheCreationTokens),e.totalTokens!==void 0&&(n.total_tokens=e.totalTokens),e.contextWindowTokens!==void 0&&(n.context_window_tokens=e.contextWindowTokens),{sessionId:t,stopReason:e.stopReason??void 0,resultSubtype:e.resultSubtype,durationMs:e.durationMs,durationApiMs:e.durationApiMs,totalCostUsd:e.totalCostUsd,isError:e.isError,usage:Object.keys(n).length>0?n:void 0,modelUsage:e.modelUsage,permissionDenials:e.permissionDenials,errors:e.errors}}function R3(e){let t=e.isError===!0?null:_F(e.toolName,e.content),n=t!==null?{display:t}:{},r=typeof e.batchIndex=="number"&&typeof e.batchSize=="number"?{batchIndex:e.batchIndex,batchSize:e.batchSize}:{},o=e.failureClass?{failureClass:e.failureClass}:{},s=x3(e.content);if(s)return{type:"chunk",chunk:{type:"tool_result",toolUseId:e.toolUseId,content:`Output persisted (${s.sizeLabel}) \u2192 ${s.absolutePath}`,isError:e.isError===!0,persistedPath:s.absolutePath,sizeBytes:s.sizeBytes,sizeLabel:s.sizeLabel,...n,...r,...o}};let{content:i,lineCount:a,sizeBytes:c,sizeLabel:l,tailPreview:d,hiddenLineCount:u}=CF(e.content);return{type:"chunk",chunk:{type:"tool_result",toolUseId:e.toolUseId,content:i,isError:e.isError===!0,sizeBytes:c,sizeLabel:l,...e.truncated===!0&&{truncated:!0},...e.capturePath!==void 0&&{capturePath:e.capturePath},...a!==void 0&&{lineCount:a},...d!==void 0&&d.length>0&&{tailPreview:d},...u!==void 0&&{hiddenLineCount:u},...e.exitCode!==void 0&&{exitCode:e.exitCode},...e.durationMs!==void 0&&{durationMs:e.durationMs},...n,...r,...o}}}function Mu(e,t){switch(e.type){case"session.init":{let n=e.info;return t.setSessionMetadata(r=>({...r,sessionId:n.sessionId,model:n.model??r.model,...n.permissionMode!==void 0?{permissionMode:n.permissionMode}:{},...n.cwd!==void 0?{cwd:n.cwd}:{},tools:n.tools?[...n.tools]:r.tools,slashCommands:n.slashCommands?[...n.slashCommands]:r.slashCommands,skills:n.skills?[...n.skills]:r.skills,plugins:n.plugins?n.plugins.map(o=>({...o})):r.plugins,mcpServers:n.mcpServers?n.mcpServers.map(o=>({...o})):r.mcpServers,...n.apiKeySource!==void 0?{apiKeySource:n.apiKeySource}:{},...n.version!==void 0?{claudeCodeVersion:n.version}:{},...n.outputStyle!==void 0?{outputStyle:n.outputStyle}:{}})),t.updateSessionIdentity(n.sessionId),t.resolveInitialization(),null}case"session.status":return t.setSessionMetadata(n=>({...n,sessionId:e.sessionId,...e.permissionMode!==void 0?{permissionMode:e.permissionMode}:{permissionMode:n.permissionMode},...e.status!==void 0?{status:e.status}:{}})),null;case"delta.text":return{type:"chunk",chunk:{type:"content",content:e.text,metadata:{eventType:"delta",deltaType:"text_delta"}}};case"delta.reasoning":return{type:"chunk",chunk:{type:"thinking",content:e.text,metadata:{eventType:"delta",deltaType:"thinking_delta"}}};case"assistant.message":if(e.sessionId&&t.updateSessionIdentity(e.sessionId),e.text){let n={role:"assistant",content:e.text,timestamp:new Date};return t.conversationHistory.push(n),{type:"message",message:n}}return null;case"tool.use.start":return{type:"chunk",chunk:{type:"tool_use_detail",toolUseId:e.toolUseId,toolName:e.toolName,toolInput:e.toolInput,toolInputRaw:e.toolInputRaw,toolInputCapture:e.toolInputCapture,...e.pending?{pending:!0}:{}}};case"tool.use":return{type:"chunk",chunk:{type:"tool_use",content:e.summary,metadata:{eventType:"tool_use_summary",precedingToolUseIds:e.toolUseIds}}};case"tool.output":return e.isError!==!0&&e.toolName&&(t._successfulToolNames??=[]).push(e.toolName),R3(e);case"tool.diff":return{type:"chunk",chunk:{type:"tool_diff",toolUseId:e.toolUseId,diff:e.diff}};case"progress":return{type:"progress",progress:{taskId:e.progress.taskId,description:e.progress.description,...e.progress.summary!==void 0?{summary:e.progress.summary}:{},...e.progress.lastToolName!==void 0?{lastToolName:e.progress.lastToolName}:{},totalTokens:e.progress.totalTokens,toolUses:e.progress.toolUses,durationMs:e.progress.durationMs}};case"suggestion":return{type:"suggestion",suggestion:e.suggestion};case"turn.completed":{let n=A3(e.usage,e.sessionId??t.getSessionMetadata().sessionId);t._successfulToolNames!==void 0&&t._successfulToolNames.length>0&&(n.successfulToolNames=[...t._successfulToolNames]),t.setLastResponseMetadata(n);for(let r=t.conversationHistory.length-1;r>=0;r--){let o=t.conversationHistory[r];if(o?.role==="assistant"){o.metadata=n;break}}if(t.maxBudgetUsd!==void 0&&t.abortBudget!==void 0&&typeof n.totalCostUsd=="number"&&(t._runningCostUsd=(t._runningCostUsd??0)+n.totalCostUsd,t._runningCostUsd>=t.maxBudgetUsd)){lw(t.traceWriter,{kind:"monetary",runningCostUsd:t._runningCostUsd,maxBudgetUsd:t.maxBudgetUsd,lastTurnCostUsd:n.totalCostUsd});let r=new gt(t._runningCostUsd,t.maxBudgetUsd);return t.abortBudget(r),{type:"error",error:r}}return{type:"done",metadata:n}}case"error":return{type:"error",error:e.error};case"paused":return{type:"paused",reason:e.reason,...e.resetsAt!==void 0?{resetsAt:e.resetsAt}:{},...e.accountId!==void 0?{accountId:e.accountId}:{},...e.autoResume!==void 0?{autoResume:e.autoResume}:{}};case"resumed":return{type:"resumed",hotSwapped:e.hotSwapped,...e.accountId!==void 0?{accountId:e.accountId}:{}};case"stream.retry":return{type:"stream_retry"};case"rate_limit":return{type:"rate_limit",...e.retryAfterMs!==void 0?{retryAfterMs:e.retryAfterMs}:{}};case"notice":return{type:"notice",text:e.text,kind:e.kind};case"tool.activity":return{type:"tool-activity",activeCount:e.activeCount,activeToolUseIds:e.activeToolUseIds};default:return null}}var fb=m(()=>{"use strict";Y();G();EF();PF()});var Ou,MF=m(()=>{"use strict";Ou=class{initializationPromise;resolveInitialization;rejectInitialization;initializationSettled=!1;sessionMetadata;sessionIdentity;constructor(t,n){this.sessionIdentity=t,this.sessionMetadata=n,this.initializationPromise=new Promise((r,o)=>{this.resolveInitialization=r,this.rejectInitialization=o})}waitForInitialization(){return this.initializationPromise}getSessionIdentity(){return{...this.sessionIdentity,sessionId:this.getSessionId()}}getSessionMetadata(){return{...this.sessionMetadata,sessionId:this.getSessionId()}}getSessionId(){return this.sessionMetadata.sessionId??this.sessionIdentity.sessionId}updateSessionIdentity(t){t&&(this.sessionIdentity={...this.sessionIdentity,sessionId:t},this.sessionMetadata={...this.sessionMetadata,sessionId:t})}setSessionMetadata(t){this.sessionMetadata=t(this.sessionMetadata)}resolveInitializationIfNeeded(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}resolveInitializationOnce(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}rejectInitializationOnce(t){this.initializationSettled||(this.initializationSettled=!0,this.rejectInitialization(t))}isInitializationSettled(){return this.initializationSettled}}});function OF(e){e.models&&$p(e.models),Iu(e);let t=be(e.model)??e.model,{sessionIdentity:n,metadata:r}=Xw(e,t),o=new Ou(n,r),s=new $o(()=>o.getSessionId()),i=s.createIterable(),a;if(e.provider)O(`\u{1F7E2} AgentSession: Creating query session via injected provider=${e.provider.name}`),a=e.provider.query({prompt:i,config:e});else{O("\u{1F7E2} AgentSession: Creating query session via ProviderRouter");let d=e.providerFactory?e.providerFactory:u=>Ru(u,void 0,{customTools:e.customTools,canUseTool:e.canUseTool});a=new Cu({prompt:i,config:e},{resolveProvider:d,providerNameForModel:u=>Q(u),resolveApiKey:u=>ce(u)})}let l=a[Symbol.asyncIterator]();return{stateManager:o,inputStream:s,providerQuery:a,providerIterator:l}}async function DF(e,t,n,r,o,s,i,a,c){try{let l=await hF(i,{event:"SessionStart",sessionId:r.getSessionId(),parentSessionId:e.parentSessionId},{signal:n,...e.traceWriter?{traceWriter:e.traceWriter}:{}});for(l&&e.parentSessionId===void 0&&a(l);;){let d=await t().next();if(d.done){r.resolveInitializationIfNeeded();return}let u=d.value,p=Mu(u,c());if(u.type==="session.init"){await B(e.traceWriter,{phase:"session_init_done",durationMs:Date.now()-o.sessionStartedAt});return}if(p&&p.type==="error"){o.markProviderError();return}}}catch(l){let d=l instanceof Error?l:new Error(String(l));d instanceof z&&o.markHookBlocked(),r.isInitializationSettled()||r.rejectInitializationOnce(d),await s.dispatchOnce("error").catch(()=>{})}}var FF=m(()=>{"use strict";V();G();Re();gF();Ne();ub();Y();fb();Hp();MF();He();xe();db();lb()});import{randomBytes as I3}from"node:crypto";import{mkdir as C3,writeFile as P3}from"node:fs/promises";import{join as M3}from"node:path";function D3(e){return w.AFK_CAPTURE_SUBAGENT_PROMPTS!=="1"||!e.isSubagentFork||!e.sessionId||!e.subagentId?!1:e.prompt.length>0}function mb(e,t){let n=Buffer.byteLength(e,"utf8");return n<=t?{text:e,originalBytes:n,truncated:!1}:{text:Buffer.from(e,"utf8").subarray(0,t).toString("utf8").replace(/\uFFFD+$/,""),originalBytes:n,truncated:!0}}function F3(e){return e.replace(/[^a-zA-Z0-9_-]/g,"-").slice(0,60)}function Du(e){return`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function L3(e,t){let n=["---",`subagentId: ${Du(e.subagentId??"unknown")}`,`sessionLabel: ${Du(e.sessionId??"unknown")}`,`turn: ${e.turn}`,`capturedAt: ${Du(new Date().toISOString())}`,`promptBytes: ${t.originalBytes}`,`bodyBytes: ${Buffer.byteLength(t.text,"utf8")}`,`truncated: ${t.truncated}`,"redaction: best-effort"];return e.model!==void 0&&n.push(`model: ${Du(e.model)}`),n.push("---",O3,""),n.push(t.text),t.truncated&&n.push("",`<!-- TRUNCATED at ${LF} bytes of ${t.originalBytes} -->`),`${n.join(`
1268
1268
  `)}
1269
1269
  `}async function NF(e){try{if(!D3(e))return;let t=mb(e.prompt,LF),n=t.truncated?t.text.replace(/\S+$/,""):t.text,r=Hi(n),o=L3(e,{...t,text:r}),s=Sp(e.sessionId);await C3(s,{recursive:!0,mode:448});let i=new Date().toISOString().replace(/[:.]/g,"-"),a=I3(3).toString("hex"),c=M3(s,`${i}-${F3(e.subagentId)}-t${e.turn}-${a}.md`);await P3(c,o,{encoding:"utf8",mode:384,flag:"wx"})}catch(t){ye("subagent-prompt-capture",e.sessionId??"unknown","captureSubagentPrompt",t)}}var LF,O3,gb=m(()=>{"use strict";P();M();va();eu();LF=8*1024,O3="<!-- Best-effort secret redaction only. Connection strings, PEM blocks, and PII are NOT caught. -->"});import{appendFile as N3,mkdir as U3}from"node:fs/promises";import{join as $3}from"node:path";function j3(e){let t=w.AFK_CAPTURE_SUBAGENT_OUTPUT;return!(!t||!Cn(t)||!e.isSubagentFork||!e.sessionId||!e.subagentId)}function H3(e){return e.replace(/[^a-zA-Z0-9_-]/g,"-").slice(0,60)}function Fu(e){return`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function BF(e){let t=mb(e,UF),n=t.truncated?t.text.replace(/\S+$/,""):t.text,r=Hi(n);return t.truncated?`${r}
1270
1270
  <!-- TRUNCATED at ${UF} bytes of ${t.originalBytes} -->`:r}function W3(e){let t=["---",`subagentId: ${Fu(e.subagentId??"unknown")}`,`sessionLabel: ${Fu(e.sessionId??"unknown")}`,`startedAt: ${Fu(new Date().toISOString())}`,"redaction: best-effort","capture: incremental (flushed at each tool-call boundary)"];return e.model!==void 0&&t.push(`model: ${Fu(e.model)}`),t.push("---",B3,""),`${t.join(`
@@ -1289,7 +1289,7 @@ ${r}
1289
1289
 
1290
1290
  ${t}`:[{type:"text",text:s},...t]}ensureLedger(){let{getConfig:t,getSessionId:n,ledger:r,getLedgerMetadata:o}=this.deps,s=t();r.ensure({depth:s.depth,parentSessionId:s.parentSessionId,sessionId:n(),fallbackModel:String(s.model),tracePath:s.traceWriter?.getTracePath(),getMetadata:o})}buildTransformDeps(){let{getConfig:t,getAbortController:n,stateManager:r,accounting:o,setLastResponseMetadata:s,conversationHistory:i}=this.deps,a=t();return{_successfulToolNames:[],conversationHistory:i,getSessionMetadata:()=>r.getSessionMetadata(),setSessionMetadata:c=>r.setSessionMetadata(c),updateSessionIdentity:c=>r.updateSessionIdentity(c),resolveInitialization:()=>r.resolveInitializationOnce(),setLastResponseMetadata:c=>{s(c),o.recordTurnMetadata(c)},maxBudgetUsd:a.maxBudgetUsd,abortBudget:c=>{let l=n();l.signal.aborted||l.abort(c)},...a.traceWriter?{traceWriter:a.traceWriter}:{}}}async*runStream(t,n){let r=this.deps.getInitPromise();r&&await r;let o=this.withPendingContext(t),s=typeof o=="string"?o:this.summarize(o),i={role:"user",content:s,timestamp:new Date};this.deps.conversationHistory.push(i),n.pushUserMessage(o),this.ensureLedger(),this.deps.ledger.recordUser(s);let a=this.deps.incInboundMessageCount(),c=this.deps.getConfig(),l=this.deps.getSessionId();NF({sessionId:Yt(c.traceWriter?.getTracePath())??l,subagentId:c.subagentId,isSubagentFork:c.isSubagentFork===!0,model:c.model===void 0?void 0:String(c.model),turn:a,prompt:s});let d=this.buildTransformDeps();this.deps.getSubagentOutputRecorder()===void 0&&this.deps.setSubagentOutputRecorder(jF({sessionId:Yt(c.traceWriter?.getTracePath())??l,subagentId:c.subagentId,isSubagentFork:c.isSubagentFork===!0,model:c.model===void 0?void 0:String(c.model)}));let u=this.deps.getSubagentOutputRecorder();try{for(;;){let p=await this.deps.getProviderIterator().next();if(p.done)break;let f=p.value,g=Mu(f,d);if(g&&(u?.observe(g),g.type==="done"?(this.deps.incTurnCount(),this.deps.accounting.clearProviderError()):g.type==="error"&&this.deps.accounting.markProviderError(),this.deps.ledger.recordEvent(g),this.deps.outputBroadcast.push(g),yield g,g.type==="done"||g.type==="error"))break}u?.end("stream_complete")}finally{this.deps.getState()==="streaming"&&(u?.end("aborted_or_incomplete"),this.deps.setState("idle"))}}queueFrameworkContext(t){let n=t.trim();if(n.length===0)return;let r=this.deps.getPendingFrameworkContext();this.deps.setPendingFrameworkContext([...r,n]),O(`AgentSession: queued framework context (${n.length} chars) for the next user message`)}}});function KF(e){switch(e){case"abort":return K3;case"iteration_cap":return G3;case"timeout":return q3;case"truncated":return X3;default:return null}}var K3,G3,q3,X3,GF=m(()=>{"use strict";K3="Session ended via abort before reaching a terminal state. The transcript and witness trace are preserved \u2014 resume with `afk --resume <sessionId>` to continue from saved state, or re-run the task if the interruption was intentional.",G3="Session hit the tool-use iteration cap before reaching a terminal state. Partial work is preserved in the transcript and witness trace. Resume with `afk --resume <sessionId>` to continue from where it stopped, or re-run with a higher budget (`--max-turns` or `max_tool_use_iterations`).",q3="Session was terminated by the wall-clock timeout before reaching a terminal state. The transcript and witness trace are preserved \u2014 resume with `afk --resume <sessionId>` to continue, or re-run with a longer timeout. Check the trace for whether the timeout hit during active work or while waiting on a slow tool call.",X3="Session output was truncated by the model provider's output-token ceiling before the response completed. The transcript and witness trace are preserved \u2014 resume with `afk --resume <sessionId>` to continue from where the output was cut off."});function qF(e){return e.maxTurnsHit?"max_turns_exceeded":e.hookBlocked?"hook_blocked":e.dispatchReason==="error"?"abort":e.abort!==null?e.abort:e.sawProviderError||e.lastStopReason===it?"abort":e.lastStopReason==="tool_use_loop_capped"?"iteration_cap":e.lastStopReason===Rt?"timeout":Kt(e.lastStopReason)?"truncated":"model_end_turn"}var XF=m(()=>{"use strict";_o();Tn();hi()});function z3(e){let t=null,n=e.signal;if(n.aborted&&n.reason!=="closed"){let r=n.reason;r instanceof gt?t="budget_exceeded":r instanceof Oe?t="timeout":typeof r=="string"&&r.startsWith("Budget ")?t="budget_exceeded":typeof r=="string"&&r.includes("timed out")?t="timeout":t="abort"}return qF({dispatchReason:e.dispatchReason,maxTurnsHit:e.maxTurnsHit,hookBlocked:e.hookBlocked,abort:t,lastStopReason:e.lastStopReason,sawProviderError:e.sawProviderError})}function J3(e){if(e.dispatchReason==="error")return"failed";let t=e.signal;return t.aborted&&t.reason!=="closed"?"cancelled":e.sawProviderError||e.lastStopReason===it?"failed":"succeeded"}async function zF(e,t){if(!e)return;let n=z3(t),r={},o=t.runningTokens;o.input>0&&(r.input=o.input),o.output>0&&(r.output=o.output),o.cacheRead>0&&(r.cacheRead=o.cacheRead),o.cacheCreation>0&&(r.cacheCreation=o.cacheCreation);let s=KF(n);await uw(e,{reason:n,finalTurnCount:t.finalTurnCount,finalCostUsd:t.finalCostUsd,finalTokens:r,...t.lastStopReason!==void 0?{lastStopReason:t.lastStopReason}:{},...s!==null?{guidance:s}:{}})}async function JF(e,t){if(!e)return;let n=J3(t),r=t.subagentCompletedCount>0?t.subagentCompletedCount:void 0,o=t.subagentRunningTokens,i=o.input>0||o.output>0||o.cacheRead>0||o.cacheCreation>0?{...o.input>0?{input:o.input}:{},...o.output>0?{output:o.output}:{},...o.cacheRead>0?{cacheRead:o.cacheRead}:{},...o.cacheCreation>0?{cacheCreation:o.cacheCreation}:{}}:void 0,a=t.subagentRunningCostUsd>0?t.subagentRunningCostUsd:void 0;await e.seal({status:n,finalCostUsd:t.finalCostUsd,finalTurnCount:t.finalTurnCount,closedAt:new Date().toISOString(),...r!==void 0?{subagentCount:r}:{},...i!==void 0?{subagentTokens:i}:{},...a!==void 0?{subagentCostUsd:a}:{}})}var VF=m(()=>{"use strict";Y();_o();G();GF();XF()});var Uu,YF=m(()=>{"use strict";ub();VF();Uu=class{dispatched=!1;deps;constructor(t){this.deps=t}reset(){this.dispatched=!1}async dispatchOnce(t){if(this.dispatched)return;this.dispatched=!0;let{getConfig:n,getAbortController:r,getHookRegistry:o,accounting:s,getTurnCount:i,getSessionId:a,ownsTraceSeal:c,ownedTraceWriter:l}=this.deps,d=n();d.drainSubagents!==void 0&&await d.drainSubagents(t).catch(()=>{});let u=s.closureSignals(r().signal,t),p=s.snapshot();if(await zF(d.traceWriter,{...u,finalTurnCount:i(),finalCostUsd:p.sessionRunningCostUsd,runningTokens:p.sessionRunningTokens}).catch(()=>{}),c){let f={...u,finalTurnCount:i(),finalCostUsd:p.sessionRunningCostUsd,subagentCompletedCount:p.subagentCompletedCount,subagentRunningTokens:p.subagentRunningTokens,subagentRunningCostUsd:p.subagentRunningCostUsd};await JF(l,f).catch(()=>{})}await yF(o(),{event:"SessionEnd",sessionId:a(),reason:t,parentSessionId:d.parentSessionId,...d.traceWriter?{tracePath:d.traceWriter.getTracePath()}:{}},d.traceWriter&&!c?{traceWriter:d.traceWriter}:{})}}});async function QF(e){if(e.getState()==="closed")throw new Error("Cannot reset: session is closed");if(e.getAbortController().signal.aborted)throw new je("Cannot reset: session aborted");let t=e.getState();if(t==="processing"||t==="streaming")try{await e.getProviderQuery().interrupt()}catch{}await e.getShutdown().dispatchOnce("reset"),await e.getLedger().seal("reset");try{await e.getProviderQuery().close()}catch{}await e.getProviderIterator().return?.();let n=e.getInitPromise();n&&await Promise.race([n,new Promise(r=>setTimeout(r,Qo))]).catch(()=>{}),e.getStateManager().resolveInitializationIfNeeded();try{e.reinitialize(r=>{let o={...r};return delete o.resume,delete o.sessionId,delete o.resumeHistory,delete o.resumeSessionAt,delete o.continue,delete o.forkSession,o})}catch(r){throw e.setState("closed"),new Error(`Session reset failed during lifecycle rebuild: ${r instanceof Error?r.message:String(r)}`,{cause:r})}}var ZF=m(()=>{"use strict";Y();mr()});function eL(e){return e.getProviderQuery().supportedCommands()}function tL(e){return e.getProviderQuery().supportedModels()}function nL(e){return e.getProviderQuery().supportedAgents()}function rL(e){return e.getProviderQuery().getContextUsage()}function oL(e){return e.getProviderQuery().mcpServerStatus()}function sL(e){return e.getProviderQuery().accountInfo()}function iL(e,t,n){return n.getProviderQuery().rewindFiles(e,t)}async function aL(e){if(e.getState()==="closed")throw new Error("Cannot compact: session is closed");if(e.getState()!=="idle")return{compacted:!1,reason:"session-busy",messagesBefore:0,messagesAfter:0};let t=e.getProviderQuery().compact?.bind(e.getProviderQuery());if(!t)return{compacted:!1,reason:"not-supported",messagesBefore:0,messagesAfter:0};e.setState("compacting");try{return await t()}finally{e.setState("idle")}}function cL(e){return e.getState()==="closed"?[]:e.getProviderQuery().listRewindTargets?.()??[]}async function lL(e,t){if(t.getState()==="closed")throw new Error("Cannot rewind: session is closed");if(t.getState()!=="idle")return{rewound:!1,reason:"session-busy",messagesBefore:0,messagesAfter:0};let n=t.getProviderQuery().rewindConversation?.bind(t.getProviderQuery());return n?n(e):{rewound:!1,reason:"not-supported",messagesBefore:0,messagesAfter:0}}var dL=m(()=>{"use strict"});import{z as Y3}from"zod";async function hb(e,t={},n){n.runner.assertCanSend();let o=n.getConfig().timeoutMs??bp,s=async()=>{let i=null,a="";n.setState(t.stream?"streaming":"processing");for await(let c of fL(e,n)){if(c.type==="chunk"&&c.chunk.type==="content"&&(a+=c.chunk.content),c.type==="message"&&c.message.role==="assistant"&&(i=c.message),c.type==="error")throw c.error;if(c.type==="done"){if(i)return{...i,metadata:c.metadata};if(a)return{role:"assistant",content:a,metadata:c.metadata,timestamp:new Date}}}if(i)return i;if(a)return{role:"assistant",content:a,timestamp:new Date};throw new Error("No assistant response received")};try{return await Zo(s(),o,{controller:n.getAbortController(),label:n.getSessionId()??"session"})}finally{n.getState()==="processing"&&n.setState("idle")}}async function uL(e,t,n={},r){let{maxRetries:o=2,injectSchemaPrompt:s=!0,...i}=n,a=s?"\n\nRespond with ONLY a JSON object (optionally in a ```json fence) that conforms to this JSON Schema:\n```json\n"+JSON.stringify(Y3.toJSONSchema(t,{target:"openapi-3.0"}))+"\n```":"",c="";for(let l=0;l<=o;l++){let d=l===0?e+a:`Your previous response did not match the required JSON schema.
1291
1291
  Validation error: ${c}
1292
- Respond again with ONLY a JSON object (optionally in a \`\`\`json fence) that satisfies the schema.`+a,u=await hb(d,i,r),p=Oi(u.content),f=t.safeParse(p);if(f.success)return f.data;c=f.error.message}throw new Error(`structured output did not match schema after ${o+1} attempt(s): ${c}`)}async function*pL(e,t){t.runner.assertCanSend(),t.setState("streaming");try{yield*fL(e,t)}finally{t.getState()==="streaming"&&t.setState("idle")}}function fL(e,t){return t.planExit.clearModeBeforeDefault(),t.runner.runStream(e,t.getInputStream())}async function mL(e){let t=e.getState();t!=="streaming"&&t!=="processing"||(e.setState("idle"),await e.getProviderQuery().interrupt())}function gL(e,t){t.getProviderQuery().setBeforeNextRound?.(e)}var hL=m(()=>{"use strict";mr();Ud()});async function yL(e,t){let n=be(e);typeof e=="string"&&e.length>0&&await t.getProviderQuery().setModel(e),n&&t.getStateManager().setSessionMetadata(r=>({...r,model:n}))}async function yb(e,t){let n=t.getStateManager().getSessionMetadata().permissionMode;t.getPlanExit().recordModeTransition(e,n),await t.getProviderQuery().setPermissionMode(e),t.getStateManager().setSessionMetadata(r=>({...r,permissionMode:e})),t.pushSidebandEvent({type:"plan_mode",mode:e==="plan"?"plan":"default"})}function bL(e,t){return t.setConfig(n=>({...n,systemPrompt:e})),t.getProviderQuery().setSystemPrompt?.(e)??!1}function wL(e,t){t.setConfig(r=>({...r,cwd:e})),t.getProviderQuery().setCwd?.(e);let n=t.getConfig().sessionId;n!==void 0&&Wk(n,e)}async function SL(e){return await e.getProviderQuery().reauth?.()??null}async function kL(e){let t=e.getPlanExit().takeSeed();if(t!==void 0){try{await yb(t.mode,e)}catch(n){O(`\u26A0\uFE0F AgentSession: deferred plan-exit mode flip to '${t.mode}' rejected; dropping implement-seed (staying in plan mode): ${n instanceof Error?n.message:String(n)}`);return}return{message:t.message,mode:t.mode}}}var vL=m(()=>{"use strict";V();He();Wn()});var qt,TL=m(()=>{"use strict";sw();G();Vt();mr();Lw();Nw();He();Ir();Hp();M();Yw();hS();TS();_S();FF();WF();YF();ZF();dL();hL();vL();qt=class{ownedTraceWriter;config;planExit=new Da;currentState="idle";providerQuery;providerIterator;conversationHistory=[];turnCount=0;inboundMessageCount=0;subagentOutputRecorder;pendingFrameworkContext=[];lastResponseMetadata=null;initPromise=null;inputStream;abortController;_hookRegistry;ownsTraceSeal;stateManager;accounting=new ja;ledger=new Oa;outputBroadcast=new Sa;shutdown;runner;constructor(t,n){this.ownsTraceSeal=n!==void 0&&t.traceWriter===n,this.ownedTraceWriter=this.ownsTraceSeal?n:void 0,this.config=t.parentSessionId===void 0&&t.planExitControls===void 0?{...t,planExitControls:{setPermissionMode:o=>this.setPermissionMode(o),requestImplementSeed:(o,s)=>this.planExit.requestImplementSeed(o,s),getPrePlanMode:()=>this.planExit.getPrePlanMode()}}:t,this.abortController=new AbortController,this._hookRegistry=t.hookRegistry,qw(t.abortSignal,this.abortController,()=>{this.onAbort()}),this.shutdown=new Uu({getConfig:()=>this.config,getAbortController:()=>this.abortController,getHookRegistry:()=>this._hookRegistry,accounting:this.accounting,getTurnCount:()=>this.turnCount,getSessionId:()=>this.sessionId,ownedTraceWriter:this.ownedTraceWriter,ownsTraceSeal:this.ownsTraceSeal});let r=String(t.model);B(t.traceWriter,{phase:"session_init_start",model:r,resolvedModel:be(t.model)??r,origin:Na(t.surface),actor:jp(t.parentSessionId)}),this.initSdkLifecycle(),this.config.parentSessionId===void 0&&(Vw(Ia(),{maxBytes:zw,keepTailLines:Jw}),setTimeout(()=>{mS({activeLabel:Yt(this.config.traceWriter?.getTracePath())??void 0})},gS).unref(),setTimeout(()=>{vS({activeSessionId:this.sessionId})},kS).unref())}initSdkLifecycle(){let{stateManager:t,inputStream:n,providerQuery:r,providerIterator:o}=OF(this.config);this.stateManager=t,this.inputStream=n,this.providerQuery=r,this.providerIterator=o,this.conversationHistory=[],this.turnCount=0,this.lastResponseMetadata=null,this.accounting.reset(),this.shutdown.reset(),this.currentState="idle",this.pendingFrameworkContext=[],this.runner=new Nu({getConfig:()=>this.config,getAbortController:()=>this.abortController,getProviderIterator:()=>this.providerIterator,stateManager:this.stateManager,accounting:this.accounting,ledger:this.ledger,outputBroadcast:this.outputBroadcast,conversationHistory:this.conversationHistory,getInitPromise:()=>this.initPromise,getSessionId:()=>this.sessionId,getState:()=>this.currentState,setState:s=>{this.currentState=s},getLastResponseMetadata:()=>this.lastResponseMetadata,setLastResponseMetadata:s=>{this.lastResponseMetadata=s},getPendingFrameworkContext:()=>this.pendingFrameworkContext,setPendingFrameworkContext:s=>{this.pendingFrameworkContext=s},getInboundMessageCount:()=>this.inboundMessageCount,incInboundMessageCount:()=>++this.inboundMessageCount,getTurnCount:()=>this.turnCount,incTurnCount:()=>{this.turnCount++},getSubagentOutputRecorder:()=>this.subagentOutputRecorder,setSubagentOutputRecorder:s=>{this.subagentOutputRecorder=s},getProviderQuery:()=>this.providerQuery,getLedgerMetadata:()=>this.stateManager.getSessionMetadata()}),this.initPromise=DF(this.config,this.providerIterator,this.abortController.signal,this.stateManager,this.accounting,this.shutdown,this._hookRegistry,s=>this.queueFrameworkContext(s),()=>this.runner.buildTransformDeps())}get state(){return this.currentState}get sessionId(){return this.stateManager.getSessionId()}get cwd(){return this.config.cwd}get abortSignal(){return this.abortController.signal}get hookRegistry(){return this._hookRegistry}abort(t){if(t==="closed"||t.startsWith("Budget ")||t.includes("timed out"))throw new Error(`AgentSession.abort: reserved reason "${t}" (use a caller-specific string like 'sigint')`);this.abortController.signal.aborted||this.abortController.abort(t)}makeSendDeps(){return{getConfig:()=>this.config,getAbortController:()=>this.abortController,getState:()=>this.currentState,setState:t=>{this.currentState=t},getSessionId:()=>this.sessionId,runner:this.runner,getInputStream:()=>this.inputStream,getProviderQuery:()=>this.providerQuery,planExit:this.planExit}}async sendMessage(t,n={}){return hb(t,n,this.makeSendDeps())}async sendMessageStructured(t,n,r={}){return uL(t,n,r,this.makeSendDeps())}async*sendMessageStream(t){yield*pL(t,this.makeSendDeps())}async interrupt(){await mL(this.makeSendDeps())}setBeforeNextRound(t){gL(t,this.makeSendDeps())}async reset(){await QF({getState:()=>this.currentState,setState:t=>{this.currentState=t},getAbortController:()=>this.abortController,getProviderQuery:()=>this.providerQuery,getProviderIterator:()=>this.providerIterator,getInitPromise:()=>this.initPromise,getShutdown:()=>this.shutdown,getLedger:()=>this.ledger,getStateManager:()=>this.stateManager,reinitialize:t=>{this.config=t(this.config),this.initSdkLifecycle()}})}async onAbort(){this.ledger.seal("abort");try{await this.providerQuery.interrupt(yp(this.abortController.signal.reason))}catch{}}makeConfigDeps(){return{getConfig:()=>this.config,setConfig:t=>{this.config=t(this.config)},getProviderQuery:()=>this.providerQuery,getStateManager:()=>this.stateManager,getPlanExit:()=>this.planExit,pushSidebandEvent:t=>this.pushSidebandEvent(t)}}async setModel(t){return yL(t,this.makeConfigDeps())}async setPermissionMode(t){return yb(t,this.makeConfigDeps())}setSystemPrompt(t){return bL(t,this.makeConfigDeps())}setCwd(t){return wL(t,this.makeConfigDeps())}async reauth(){return SL(this.makeConfigDeps())}getPrePlanMode(){return this.planExit.getPrePlanMode()}setPlanExitQueueCheck(t){this.config.planExitControls&&(this.config.planExitControls.hasPendingUserMessage=t)}async takePendingPlanExitSeed(){return kL(this.makeConfigDeps())}waitForInitialization(){return this.stateManager.waitForInitialization()}getSessionIdentity(){return this.stateManager.getSessionIdentity()}getSessionMetadata(){return this.stateManager.getSessionMetadata()}getQuery(){return this.providerQuery}supportedCommands(){return eL(this.makePassthroughDeps())}supportedModels(){return tL(this.makePassthroughDeps())}supportedAgents(){return nL(this.makePassthroughDeps())}getContextUsage(){return rL(this.makePassthroughDeps())}mcpServerStatus(){return oL(this.makePassthroughDeps())}accountInfo(){return sL(this.makePassthroughDeps())}rewindFiles(t,n){return iL(t,n,this.makePassthroughDeps())}compact(){return aL(this.makePassthroughDeps())}listRewindTargets(){return cL(this.makePassthroughDeps())}rewindConversation(t){return lL(t,this.makePassthroughDeps())}makePassthroughDeps(){return{getState:()=>this.currentState,setState:t=>{this.currentState=t},getProviderQuery:()=>this.providerQuery}}getLastResponseMetadata(){return this.lastResponseMetadata}getOutputStream(){return this.outputBroadcast.subscribe()}queueFrameworkContext(t){this.runner.queueFrameworkContext(t)}getInputStreamRef(){return{pushUserMessage:t=>this.inputStream.pushUserMessage(t),queueFrameworkContext:t=>this.queueFrameworkContext(t)}}getHistory(){return[...this.conversationHistory]}getTurnCount(){return this.turnCount}async close(){if(this.currentState!=="closed"){this.currentState="closed",this.outputBroadcast.close(),await this.ledger.seal("close"),this.abortController.signal.aborted||this.abortController.abort("closed"),this.stateManager.resolveInitializationIfNeeded();try{await this.providerQuery.close()}catch{}if(await this.providerIterator.return?.(),this.initPromise)try{await Promise.race([this.initPromise,new Promise(t=>setTimeout(t,Qo))])}catch{}await this.shutdown.dispatchOnce("close")}}recordSubagentCompletion(t,n){this.accounting.recordSubagentCompletion(t,n)}pushSidebandEvent(t){this.currentState!=="closed"&&(this.ledger.recordEvent(t),this.outputBroadcast.push(t))}recordLedgerElicitation(t,n){this.ledger.recordElicitation(t,n)}}});var zd=m(()=>{"use strict";TL()});import{mkdir as j9,readdir as rBe,readFile as H9,rename as W9,rm as K9,stat as G9,unlink as JN,writeFile as Gb}from"node:fs/promises";import{join as rp}from"node:path";import{randomBytes as q9}from"node:crypto";async function VN(e){await j9(e,{recursive:!0,mode:448})}function qb(e,t){return rp(e,`${t}.json`)}function X9(e,t){return rp(e,`${t}.lock`)}async function YN(e,t){let n=rp(e,".."),r=rp(n,`.tmp-${q9(4).toString("hex")}.json`);try{await Gb(r,JSON.stringify(t),{encoding:"utf-8",mode:384}),await W9(r,e)}catch(o){try{await K9(r,{force:!0})}catch{}throw o}}async function Xb(e,t=wr()){kr(e.taskId),await VN(t),await YN(qb(t,e.taskId),e)}async function da(e,t=wr()){kr(e);let n=qb(t,e);try{let r=await H9(n,"utf-8");return JSON.parse(r)}catch(r){if(r.code==="ENOENT")return null;throw r}}async function zb(e,t,n){let r=X9(t,e);try{await Gb(r,"",{flag:"wx",mode:384})}catch(o){if(o.code==="EEXIST"){let s;try{s=(await G9(r)).mtimeMs}catch{return null}if(Date.now()-s<=z9)return null;try{await JN(r)}catch{}try{await Gb(r,"",{flag:"wx",mode:384})}catch(i){if(i.code==="EEXIST")return null;throw i}}else throw o}try{return await n()}finally{try{await JN(r)}catch{}}}async function QN(e,t,n,r=wr()){return kr(e),await VN(r),await zb(e,r,async()=>{let s=await da(e,r);if(s===null)throw new Error(`handoff-store: no record found for taskId ${e}`);if(s.status!=="pending")return{won:!1};let i={...s,status:"answered",answer:t,answeredAt:new Date().toISOString(),answerSource:n};return await YN(qb(r,e),i),{won:!0}})??{won:!1}}var z9,Jb=m(()=>{"use strict";M();z9=3e4});var cBe,J9,ZN=m(()=>{"use strict";cBe=300*1e3,J9=600*1e3});var eU=m(()=>{"use strict";M();P();ZN()});function sp(e,t){if(!op.test(e))throw new Error(`buildElicitationCallback: invalid id ${JSON.stringify(e)}`);if(!Number.isInteger(t)||t<0)throw new Error(`buildElicitationCallback: choiceIndex must be a non-negative integer, got ${t}`);let n=`${ua}${t}:${e}`,r=Buffer.byteLength(n,"utf8");if(r>64)throw new Error(`buildElicitationCallback: payload ${r} bytes exceeds Telegram's 64-byte limit (id=${e})`);return n}function tU(e){if(!e||!e.startsWith(ua)||Buffer.byteLength(e,"utf8")>64)return null;let t=e.slice(ua.length),n=t.indexOf(":");if(n<1)return null;let r=t.slice(0,n),o=t.slice(n+1),s=parseInt(r,10);return!Number.isInteger(s)||s<0||String(s)!==r||!op.test(o)?null:{id:o,choiceIndex:s}}function nU(e){if(!op.test(e))throw new Error(`buildCustomElicitationCallback: invalid id ${JSON.stringify(e)}`);let t=`${pa}${e}`,n=Buffer.byteLength(t,"utf8");if(n>64)throw new Error(`buildCustomElicitationCallback: ${n} bytes exceeds 64-byte limit`);return t}function rU(e){if(!e||!e.startsWith(pa)||Buffer.byteLength(e,"utf8")>64)return null;let t=e.slice(pa.length);return op.test(t)?t:null}var ua,op,pa,Vb=m(()=>{"use strict";ua="afk:e:",op=/^[a-zA-Z0-9_-]{1,48}$/;pa="afk:ec:"});function ma(e,t){if(!oU.test(e))throw new Error(`buildHandoffCallback: invalid taskId ${JSON.stringify(e)}`);if(!Number.isInteger(t)||t<0)throw new Error(`buildHandoffCallback: choiceIndex must be non-negative integer, got ${t}`);let n=`${fa}${t}:${e}`,r=Buffer.byteLength(n,"utf8");if(r>64)throw new Error(`buildHandoffCallback: payload ${r} bytes exceeds Telegram's ${64}-byte limit`);return n}function sU(e){if(!e||!e.startsWith(fa)||Buffer.byteLength(e,"utf8")>64)return null;let t=e.slice(fa.length),n=t.indexOf(":");if(n<1)return null;let r=t.slice(0,n),o=t.slice(n+1),s=parseInt(r,10);return!Number.isInteger(s)||s<0||String(s)!==r||!oU.test(o)?null:{taskId:o,choiceIndex:s}}var fa,oU,Qb=m(()=>{"use strict";Vb();fa="afk:h:",oU=/^[A-Za-z0-9_-]{1,128}$/});async function Zb(e,t,n,r){let o=JSON.stringify(t);if(Buffer.byteLength(o,"utf-8")>iU)throw new Error(`[handoff-wiring] answer for task ${e} exceeds ${iU} bytes \u2014 rejected`);return(await QN(e,t,n,r)).won}var ABe,iU,aU=m(()=>{"use strict";Jb();eU();Vc();ip();Qb();ABe=1440*60*1e3,iU=64*1024});var tw={};zo(tw,{clearPendingTextHandoff:()=>lU,matchReplyToHandoff:()=>Q9,registerHandoffAnswerHandlers:()=>Y9,sendHandoffQuestion:()=>cU});import{Markup as ga}from"telegraf";function uU(e){return e.length<=dU?e:`${e.slice(0,dU)}...(truncated)`}function V9(e,t=64){if(Buffer.byteLength(e,"utf8")<=t)return e;let n=Buffer.from(e,"utf8").subarray(0,t);return new TextDecoder("utf-8",{fatal:!1}).decode(n).replace(/\uFFFD$/,"")}async function cU(e){let{bot:t,record:n,chatId:r,threadId:o,handoffsDir:s}=e,i=o?{message_thread_id:o}:{},a=n.question,c=a.type??"text",l=typeof a.message=="string"?a.message:"(question details unavailable)",d=typeof a.context=="string"?a.context:void 0,u=Array.isArray(a.choices)?a.choices:[],p=`\u{1F514} <b>Daemon task needs your answer</b>
1292
+ Respond again with ONLY a JSON object (optionally in a \`\`\`json fence) that satisfies the schema.`+a,u=await hb(d,i,r),p=Oi(u.content),f=t.safeParse(p);if(f.success)return f.data;c=f.error.message}throw new Error(`structured output did not match schema after ${o+1} attempt(s): ${c}`)}async function*pL(e,t){t.runner.assertCanSend(),t.setState("streaming");try{yield*fL(e,t)}finally{t.getState()==="streaming"&&t.setState("idle")}}function fL(e,t){return t.planExit.clearModeBeforeDefault(),t.runner.runStream(e,t.getInputStream())}async function mL(e){let t=e.getState();t!=="streaming"&&t!=="processing"||(e.setState("idle"),await e.getProviderQuery().interrupt())}function gL(e,t){t.getProviderQuery().setBeforeNextRound?.(e)}var hL=m(()=>{"use strict";mr();Ud()});async function yL(e,t){let n=be(e);typeof e=="string"&&e.length>0&&await t.getProviderQuery().setModel(e),n&&t.getStateManager().setSessionMetadata(r=>({...r,model:n}))}async function yb(e,t){let n=t.getStateManager().getSessionMetadata().permissionMode;t.getPlanExit().recordModeTransition(e,n),await t.getProviderQuery().setPermissionMode(e),t.getStateManager().setSessionMetadata(r=>({...r,permissionMode:e})),t.pushSidebandEvent({type:"plan_mode",mode:e==="plan"?"plan":"default"})}function bL(e,t){return t.setConfig(n=>({...n,systemPrompt:e})),t.getProviderQuery().setSystemPrompt?.(e)??!1}function wL(e,t){t.setConfig(r=>({...r,cwd:e})),t.getProviderQuery().setCwd?.(e);let n=t.getConfig().sessionId;n!==void 0&&Wk(n,e)}async function SL(e){return await e.getProviderQuery().reauth?.()??null}async function kL(e){let t=e.getPlanExit().takeSeed();if(t!==void 0){try{await yb(t.mode,e)}catch(n){O(`\u26A0\uFE0F AgentSession: deferred plan-exit mode flip to '${t.mode}' rejected; dropping implement-seed (staying in plan mode): ${n instanceof Error?n.message:String(n)}`);return}return{message:t.message,mode:t.mode}}}var vL=m(()=>{"use strict";V();He();Wn()});var qt,TL=m(()=>{"use strict";sw();G();Vt();mr();Lw();Nw();He();Ir();Hp();M();Yw();hS();TS();_S();FF();WF();YF();ZF();dL();hL();vL();qt=class{ownedTraceWriter;config;planExit=new Da;currentState="idle";providerQuery;providerIterator;conversationHistory=[];turnCount=0;inboundMessageCount=0;subagentOutputRecorder;pendingFrameworkContext=[];lastResponseMetadata=null;initPromise=null;inputStream;abortController;_hookRegistry;ownsTraceSeal;stateManager;accounting=new ja;ledger=new Oa;outputBroadcast=new Sa;shutdown;runner;constructor(t,n){this.ownsTraceSeal=n!==void 0&&t.traceWriter===n,this.ownedTraceWriter=this.ownsTraceSeal?n:void 0,this.config=t.parentSessionId===void 0&&t.planExitControls===void 0?{...t,planExitControls:{setPermissionMode:o=>this.setPermissionMode(o),requestImplementSeed:(o,s)=>this.planExit.requestImplementSeed(o,s),getPrePlanMode:()=>this.planExit.getPrePlanMode()}}:t,this.abortController=new AbortController,this._hookRegistry=t.hookRegistry,qw(t.abortSignal,this.abortController,()=>{this.onAbort()}),this.shutdown=new Uu({getConfig:()=>this.config,getAbortController:()=>this.abortController,getHookRegistry:()=>this._hookRegistry,accounting:this.accounting,getTurnCount:()=>this.turnCount,getSessionId:()=>this.sessionId,ownedTraceWriter:this.ownedTraceWriter,ownsTraceSeal:this.ownsTraceSeal});let r=String(t.model);B(t.traceWriter,{phase:"session_init_start",model:r,resolvedModel:be(t.model)??r,origin:Na(t.surface),actor:jp(t.parentSessionId)}),this.initSdkLifecycle(),this.config.parentSessionId===void 0&&(Vw(Ia(),{maxBytes:zw,keepTailLines:Jw}),setTimeout(()=>{mS({activeLabel:Yt(this.config.traceWriter?.getTracePath())??void 0})},gS).unref(),setTimeout(()=>{vS({activeSessionId:this.sessionId})},kS).unref())}initSdkLifecycle(){let{stateManager:t,inputStream:n,providerQuery:r,providerIterator:o}=OF(this.config);this.stateManager=t,this.inputStream=n,this.providerQuery=r,this.providerIterator=o,this.conversationHistory=[],this.turnCount=0,this.lastResponseMetadata=null,this.accounting.reset(),this.shutdown.reset(),this.currentState="idle",this.pendingFrameworkContext=[],this.runner=new Nu({getConfig:()=>this.config,getAbortController:()=>this.abortController,getProviderIterator:()=>this.providerIterator,stateManager:this.stateManager,accounting:this.accounting,ledger:this.ledger,outputBroadcast:this.outputBroadcast,conversationHistory:this.conversationHistory,getInitPromise:()=>this.initPromise,getSessionId:()=>this.sessionId,getState:()=>this.currentState,setState:s=>{this.currentState=s},getLastResponseMetadata:()=>this.lastResponseMetadata,setLastResponseMetadata:s=>{this.lastResponseMetadata=s},getPendingFrameworkContext:()=>this.pendingFrameworkContext,setPendingFrameworkContext:s=>{this.pendingFrameworkContext=s},getInboundMessageCount:()=>this.inboundMessageCount,incInboundMessageCount:()=>++this.inboundMessageCount,getTurnCount:()=>this.turnCount,incTurnCount:()=>{this.turnCount++},getSubagentOutputRecorder:()=>this.subagentOutputRecorder,setSubagentOutputRecorder:s=>{this.subagentOutputRecorder=s},getProviderQuery:()=>this.providerQuery,getLedgerMetadata:()=>this.stateManager.getSessionMetadata()}),this.initPromise=DF(this.config,()=>this.providerIterator,this.abortController.signal,this.stateManager,this.accounting,this.shutdown,this._hookRegistry,s=>this.queueFrameworkContext(s),()=>this.runner.buildTransformDeps())}get state(){return this.currentState}get sessionId(){return this.stateManager.getSessionId()}get cwd(){return this.config.cwd}get abortSignal(){return this.abortController.signal}get hookRegistry(){return this._hookRegistry}abort(t){if(t==="closed"||t.startsWith("Budget ")||t.includes("timed out"))throw new Error(`AgentSession.abort: reserved reason "${t}" (use a caller-specific string like 'sigint')`);this.abortController.signal.aborted||this.abortController.abort(t)}makeSendDeps(){return{getConfig:()=>this.config,getAbortController:()=>this.abortController,getState:()=>this.currentState,setState:t=>{this.currentState=t},getSessionId:()=>this.sessionId,runner:this.runner,getInputStream:()=>this.inputStream,getProviderQuery:()=>this.providerQuery,planExit:this.planExit}}async sendMessage(t,n={}){return hb(t,n,this.makeSendDeps())}async sendMessageStructured(t,n,r={}){return uL(t,n,r,this.makeSendDeps())}async*sendMessageStream(t){yield*pL(t,this.makeSendDeps())}async interrupt(){await mL(this.makeSendDeps())}setBeforeNextRound(t){gL(t,this.makeSendDeps())}async reset(){await QF({getState:()=>this.currentState,setState:t=>{this.currentState=t},getAbortController:()=>this.abortController,getProviderQuery:()=>this.providerQuery,getProviderIterator:()=>this.providerIterator,getInitPromise:()=>this.initPromise,getShutdown:()=>this.shutdown,getLedger:()=>this.ledger,getStateManager:()=>this.stateManager,reinitialize:t=>{this.config=t(this.config),this.initSdkLifecycle()}})}async onAbort(){this.ledger.seal("abort");try{await this.providerQuery.interrupt(yp(this.abortController.signal.reason))}catch{}}makeConfigDeps(){return{getConfig:()=>this.config,setConfig:t=>{this.config=t(this.config)},getProviderQuery:()=>this.providerQuery,getStateManager:()=>this.stateManager,getPlanExit:()=>this.planExit,pushSidebandEvent:t=>this.pushSidebandEvent(t)}}async setModel(t){return yL(t,this.makeConfigDeps())}async setPermissionMode(t){return yb(t,this.makeConfigDeps())}setSystemPrompt(t){return bL(t,this.makeConfigDeps())}setCwd(t){return wL(t,this.makeConfigDeps())}async reauth(){return SL(this.makeConfigDeps())}getPrePlanMode(){return this.planExit.getPrePlanMode()}setPlanExitQueueCheck(t){this.config.planExitControls&&(this.config.planExitControls.hasPendingUserMessage=t)}async takePendingPlanExitSeed(){return kL(this.makeConfigDeps())}waitForInitialization(){return this.stateManager.waitForInitialization()}getSessionIdentity(){return this.stateManager.getSessionIdentity()}getSessionMetadata(){return this.stateManager.getSessionMetadata()}getQuery(){return this.providerQuery}supportedCommands(){return eL(this.makePassthroughDeps())}supportedModels(){return tL(this.makePassthroughDeps())}supportedAgents(){return nL(this.makePassthroughDeps())}getContextUsage(){return rL(this.makePassthroughDeps())}mcpServerStatus(){return oL(this.makePassthroughDeps())}accountInfo(){return sL(this.makePassthroughDeps())}rewindFiles(t,n){return iL(t,n,this.makePassthroughDeps())}compact(){return aL(this.makePassthroughDeps())}listRewindTargets(){return cL(this.makePassthroughDeps())}rewindConversation(t){return lL(t,this.makePassthroughDeps())}makePassthroughDeps(){return{getState:()=>this.currentState,setState:t=>{this.currentState=t},getProviderQuery:()=>this.providerQuery}}getLastResponseMetadata(){return this.lastResponseMetadata}getOutputStream(){return this.outputBroadcast.subscribe()}queueFrameworkContext(t){this.runner.queueFrameworkContext(t)}getInputStreamRef(){return{pushUserMessage:t=>this.inputStream.pushUserMessage(t),queueFrameworkContext:t=>this.queueFrameworkContext(t)}}getHistory(){return[...this.conversationHistory]}getTurnCount(){return this.turnCount}async close(){if(this.currentState!=="closed"){this.currentState="closed",this.outputBroadcast.close(),await this.ledger.seal("close"),this.abortController.signal.aborted||this.abortController.abort("closed"),this.stateManager.resolveInitializationIfNeeded();try{await this.providerQuery.close()}catch{}if(await this.providerIterator.return?.(),this.initPromise)try{await Promise.race([this.initPromise,new Promise(t=>setTimeout(t,Qo))])}catch{}await this.shutdown.dispatchOnce("close")}}recordSubagentCompletion(t,n){this.accounting.recordSubagentCompletion(t,n)}pushSidebandEvent(t){this.currentState!=="closed"&&(this.ledger.recordEvent(t),this.outputBroadcast.push(t))}recordLedgerElicitation(t,n){this.ledger.recordElicitation(t,n)}}});var zd=m(()=>{"use strict";TL()});import{mkdir as j9,readdir as rBe,readFile as H9,rename as W9,rm as K9,stat as G9,unlink as JN,writeFile as Gb}from"node:fs/promises";import{join as rp}from"node:path";import{randomBytes as q9}from"node:crypto";async function VN(e){await j9(e,{recursive:!0,mode:448})}function qb(e,t){return rp(e,`${t}.json`)}function X9(e,t){return rp(e,`${t}.lock`)}async function YN(e,t){let n=rp(e,".."),r=rp(n,`.tmp-${q9(4).toString("hex")}.json`);try{await Gb(r,JSON.stringify(t),{encoding:"utf-8",mode:384}),await W9(r,e)}catch(o){try{await K9(r,{force:!0})}catch{}throw o}}async function Xb(e,t=wr()){kr(e.taskId),await VN(t),await YN(qb(t,e.taskId),e)}async function da(e,t=wr()){kr(e);let n=qb(t,e);try{let r=await H9(n,"utf-8");return JSON.parse(r)}catch(r){if(r.code==="ENOENT")return null;throw r}}async function zb(e,t,n){let r=X9(t,e);try{await Gb(r,"",{flag:"wx",mode:384})}catch(o){if(o.code==="EEXIST"){let s;try{s=(await G9(r)).mtimeMs}catch{return null}if(Date.now()-s<=z9)return null;try{await JN(r)}catch{}try{await Gb(r,"",{flag:"wx",mode:384})}catch(i){if(i.code==="EEXIST")return null;throw i}}else throw o}try{return await n()}finally{try{await JN(r)}catch{}}}async function QN(e,t,n,r=wr()){return kr(e),await VN(r),await zb(e,r,async()=>{let s=await da(e,r);if(s===null)throw new Error(`handoff-store: no record found for taskId ${e}`);if(s.status!=="pending")return{won:!1};let i={...s,status:"answered",answer:t,answeredAt:new Date().toISOString(),answerSource:n};return await YN(qb(r,e),i),{won:!0}})??{won:!1}}var z9,Jb=m(()=>{"use strict";M();z9=3e4});var cBe,J9,ZN=m(()=>{"use strict";cBe=300*1e3,J9=600*1e3});var eU=m(()=>{"use strict";M();P();ZN()});function sp(e,t){if(!op.test(e))throw new Error(`buildElicitationCallback: invalid id ${JSON.stringify(e)}`);if(!Number.isInteger(t)||t<0)throw new Error(`buildElicitationCallback: choiceIndex must be a non-negative integer, got ${t}`);let n=`${ua}${t}:${e}`,r=Buffer.byteLength(n,"utf8");if(r>64)throw new Error(`buildElicitationCallback: payload ${r} bytes exceeds Telegram's 64-byte limit (id=${e})`);return n}function tU(e){if(!e||!e.startsWith(ua)||Buffer.byteLength(e,"utf8")>64)return null;let t=e.slice(ua.length),n=t.indexOf(":");if(n<1)return null;let r=t.slice(0,n),o=t.slice(n+1),s=parseInt(r,10);return!Number.isInteger(s)||s<0||String(s)!==r||!op.test(o)?null:{id:o,choiceIndex:s}}function nU(e){if(!op.test(e))throw new Error(`buildCustomElicitationCallback: invalid id ${JSON.stringify(e)}`);let t=`${pa}${e}`,n=Buffer.byteLength(t,"utf8");if(n>64)throw new Error(`buildCustomElicitationCallback: ${n} bytes exceeds 64-byte limit`);return t}function rU(e){if(!e||!e.startsWith(pa)||Buffer.byteLength(e,"utf8")>64)return null;let t=e.slice(pa.length);return op.test(t)?t:null}var ua,op,pa,Vb=m(()=>{"use strict";ua="afk:e:",op=/^[a-zA-Z0-9_-]{1,48}$/;pa="afk:ec:"});function ma(e,t){if(!oU.test(e))throw new Error(`buildHandoffCallback: invalid taskId ${JSON.stringify(e)}`);if(!Number.isInteger(t)||t<0)throw new Error(`buildHandoffCallback: choiceIndex must be non-negative integer, got ${t}`);let n=`${fa}${t}:${e}`,r=Buffer.byteLength(n,"utf8");if(r>64)throw new Error(`buildHandoffCallback: payload ${r} bytes exceeds Telegram's ${64}-byte limit`);return n}function sU(e){if(!e||!e.startsWith(fa)||Buffer.byteLength(e,"utf8")>64)return null;let t=e.slice(fa.length),n=t.indexOf(":");if(n<1)return null;let r=t.slice(0,n),o=t.slice(n+1),s=parseInt(r,10);return!Number.isInteger(s)||s<0||String(s)!==r||!oU.test(o)?null:{taskId:o,choiceIndex:s}}var fa,oU,Qb=m(()=>{"use strict";Vb();fa="afk:h:",oU=/^[A-Za-z0-9_-]{1,128}$/});async function Zb(e,t,n,r){let o=JSON.stringify(t);if(Buffer.byteLength(o,"utf-8")>iU)throw new Error(`[handoff-wiring] answer for task ${e} exceeds ${iU} bytes \u2014 rejected`);return(await QN(e,t,n,r)).won}var ABe,iU,aU=m(()=>{"use strict";Jb();eU();Vc();ip();Qb();ABe=1440*60*1e3,iU=64*1024});var tw={};zo(tw,{clearPendingTextHandoff:()=>lU,matchReplyToHandoff:()=>Q9,registerHandoffAnswerHandlers:()=>Y9,sendHandoffQuestion:()=>cU});import{Markup as ga}from"telegraf";function uU(e){return e.length<=dU?e:`${e.slice(0,dU)}...(truncated)`}function V9(e,t=64){if(Buffer.byteLength(e,"utf8")<=t)return e;let n=Buffer.from(e,"utf8").subarray(0,t);return new TextDecoder("utf-8",{fatal:!1}).decode(n).replace(/\uFFFD$/,"")}async function cU(e){let{bot:t,record:n,chatId:r,threadId:o,handoffsDir:s}=e,i=o?{message_thread_id:o}:{},a=n.question,c=a.type??"text",l=typeof a.message=="string"?a.message:"(question details unavailable)",d=typeof a.context=="string"?a.context:void 0,u=Array.isArray(a.choices)?a.choices:[],p=`\u{1F514} <b>Daemon task needs your answer</b>
1293
1293
  `;p+=`\u{1F4CB} <code>${pe(n.taskId)}</code>
1294
1294
 
1295
1295
  `,d&&(p+=`<i>${pe(uU(d))}</i>