agent-afk 5.221.5 → 5.221.6

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/telegram.mjs CHANGED
@@ -395,7 +395,7 @@ ${o}`,paths:[e,n]}:o!==null?s={content:o,paths:[n]}:r!==null?s={content:r,paths:
395
395
 
396
396
  ${e}`}var b4,fy=h(()=>{"use strict";b4=new Set(["script","style","noscript","template","svg"])});function k4(t,e){return new Promise((n,r)=>{if(e?.aborted){r(e.reason??new Error("aborted"));return}let o=()=>{clearTimeout(s),r(e?.reason??new Error("aborted"))},s=setTimeout(()=>{e?.removeEventListener("abort",o),n()},t);e?.addEventListener("abort",o,{once:!0})})}function xR(t,e,n){let r=Math.min(e*2**t,n);return Math.round(Math.random()*r)}function v4(t,e){let n=t.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,e)}async function AR(t,e,n={},r={}){let o=r.retries??3,s=r.baseDelayMs??500,i=r.maxDelayMs??1e4,a=r.sleep??k4,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 t(e,n);if(!S4.has(u.status)||d===o)return u;let p=v4(u,i)??xR(d,s,i);O("[web/retryFetch] retrying",{url:e,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=xR(d,s,i);O("[web/retryFetch] retrying after error",{url:e,attempt:d,waitMs:p}),await a(p,c)}}throw l??new Error("retryFetch: exhausted without a result")}var S4,RR=h(()=>{"use strict";ne();S4=new Set([429,502,503,504])});import{BlockList as T4,isIP as gy}from"node:net";import{lookup as E4}from"node:dns/promises";import{Agent as _4}from"undici";function PR(){let t=k.AFK_WEB_ALLOW_PRIVATE_HOSTS?.trim().toLowerCase();return t==="1"||t==="true"}function I4(t){return t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):t}function my(t){let e=gy(t);return e===0?!1:R4.check(t,e===4?"ipv4":"ipv6")}async function CR(t){return E4(t,{all:!0,verbatim:!0})}async function Nr(t,e={}){if(e.allowPrivateHosts??PR())return{allowed:!0};let n;try{n=new URL(t)}catch{return{allowed:!1,reason:`"${t}" 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=I4(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(gy(r)!==0)return my(r)?{allowed:!1,reason:o(r,r)}:{allowed:!0};let s=e.lookupFn??CR,i;try{i=await s(r)}catch{return{allowed:!0}}for(let a of i)if(my(a.address))return{allowed:!1,reason:o(a.address,`${r} (resolved)`)};return{allowed:!0}}async function ia(t,e={}){let n=await Nr(t,e);if(!n.allowed)throw new Pe(n.reason)}async function Bn(t,e,n={},r={}){let o={...r.lookupFn!==void 0?{lookupFn:r.lookupFn}:{},...r.allowPrivateHosts!==void 0?{allowPrivateHosts:r.allowPrivateHosts}:{}},s=e;for(let i=0;i<=IR;i++){await ia(s,o);let a={...n,redirect:"manual",...t===globalThis.fetch&&!(r.allowPrivateHosts??PR())?{dispatcher:P4}:{}},c=await AR(t,s,a,r.retry??{});if(!C4.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 Pe(`too many redirects (>${IR}) starting from ${e}`)}var x4,A4,R4,Pe,P4,IR,C4,$r=h(()=>{"use strict";F();RR();x4=[["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]],A4=[["::",96],["64:ff9b::",96],["fc00::",7],["fe80::",10]],R4=(()=>{let t=new T4;for(let[e,n]of x4)t.addSubnet(e,n,"ipv4");for(let[e,n]of A4)t.addSubnet(e,n,"ipv6");return t})(),Pe=class extends Error{constructor(e){super(e),this.name="EgressBlockedError"}};P4=new _4({connect:{lookup(t,e,n){CR(t).then(r=>{let o=r.find(i=>my(i.address));if(o!==void 0){n(new Pe(`refusing to connect to ${t} (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 ${t}`),"",0);return}n(null,s.address,gy(s.address))},r=>n(r,"",0))}}});IR=20,C4=new Set([301,302,303,307,308])});var yy={};yo(yy,{enforceDomainPolicy:()=>It,loadBrowserConfig:()=>hy});import{readFileSync as M4}from"node:fs";import{join as O4}from"path";function D4(t){let n=t.replace(/[.+?()[\]{}/\\^$|]/g,"\\$&").replace(/\*/g,"[^.]*");return new RegExp(`^${n}$`,"i")}function MR(t,e){return D4(e).test(t)}function N4(t,e){if(t!==void 0){let n=t.trim().toLowerCase();if(n==="1"||n==="true"||n==="yes")return!0;if(n==="0"||n==="false"||n==="no")return!1}if(e!==void 0){if(F4.has(e))return!0;if(L4.has(e))return!1}return!1}function OR(t){return t===void 0||t.trim()===""?[]:t.split(",").map(e=>e.trim().toLowerCase()).filter(e=>e.length>0)}function $4(t){if(t===void 0||t==="")return"auto";if(t==="playwright"||t==="agent-browser"||t==="auto")return t;throw new Error(`AFK_BROWSER_BACKEND: must be "playwright", "agent-browser", or "auto", got: ${t}`)}function DR(t){let e=t===void 0||t.trim()===""?"default":t.trim();return Ym(e),e}function U4(t){if(t===void 0)return!1;let e=t.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function B4(t){try{return M4(t,"utf8")}catch(e){if(e.code==="ENOENT")return;throw e}}function j4(t,e){let n={...t};if(typeof e.headless=="boolean"&&(n.headless=e.headless),Array.isArray(e.allowedDomains)&&(n.allowedDomains=e.allowedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),Array.isArray(e.blockedDomains)&&(n.blockedDomains=e.blockedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),typeof e.domSnapshots=="boolean"&&(n.domSnapshots=e.domSnapshots),e.backend==="playwright"||e.backend==="agent-browser"||e.backend==="auto")n.backend=e.backend;else if(e.backend!==void 0)throw new Error(`AFK_BROWSER_BACKEND: must be "playwright", "agent-browser", or "auto", got: ${String(e.backend)}`);return typeof e.defaultProfile=="string"&&(n.defaultProfile=DR(e.defaultProfile)),n}function hy(t){let e=t?.env??k,n=t?.readFileSync??B4,r=t?.surface??e.AGENT_SURFACE,o=N4(e.AFK_BROWSER_HEADLESS,r),s=OR(e.AFK_BROWSER_ALLOWED_DOMAINS),i=OR(e.AFK_BROWSER_BLOCKED_DOMAINS),a=U4(e.AFK_BROWSER_DOM_SNAPSHOTS),c=$4(e.AFK_BROWSER_BACKEND),l=DR(e.AFK_BROWSER_DEFAULT_PROFILE),d={headless:o,allowedDomains:s,blockedDomains:i,domSnapshots:a,backend:c,configPath:null,defaultProfile:l},u=e.AFK_BROWSER_CONFIG,p=u!==void 0&&u.trim()!==""?u.trim():O4(sn(),"browser.json"),f=n(p);if(f===void 0)return d;let m;try{m=JSON.parse(f)}catch(y){throw new Error(`Failed to parse browser config at ${p}: ${String(y)}`)}if(typeof m!="object"||m===null||Array.isArray(m))throw new Error(`Browser config at ${p} must be a JSON object`);let g=j4(d,m);return g.configPath=p,g}function It(t,e){let n;try{n=new URL(t).hostname.toLowerCase()}catch{return{allowed:!1,reason:`invalid URL: ${t}`}}for(let r of e.blockedDomains)if(MR(n,r))return{allowed:!1,reason:`blocked by AFK_BROWSER_BLOCKED_DOMAINS: ${r}`};return e.allowedDomains.length>0&&!e.allowedDomains.some(o=>MR(n,o))?{allowed:!1,reason:"not in AFK_BROWSER_ALLOWED_DOMAINS"}:{allowed:!0}}var F4,L4,jn=h(()=>{"use strict";F();N();F4=new Set(["daemon","subagent","telegram","afk"]),L4=new Set(["repl","interactive","cli"])});import{readFileSync as H4}from"node:fs";import{join as W4}from"node:path";import{homedir as K4}from"node:os";function q4(t){let e=t??G4,n;try{n=H4(e,"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 X4(t){try{return process.kill(t,0),!0}catch{return!1}}async function z4(t,e,n=2e3){try{let r=new AbortController,o=setTimeout(()=>r.abort(),n),s=await fetch(`${t}/health`,{method:"GET",headers:{Authorization:`Bearer ${e}`,Host:"127.0.0.1:8833"},signal:r.signal});return clearTimeout(o),s.ok}catch{return!1}}async function by(t){let e=q4(t);return e===null?{available:!1,connection:null,reason:"connection file missing or invalid"}:X4(e.pid)?await z4(e.url,e.token)?{available:!0,connection:e,reason:null}:{available:!1,connection:e,reason:`health probe failed at ${e.url}`}:{available:!1,connection:e,reason:`stale connection file: PID ${e.pid} not alive`}}var G4,FR=h(()=>{"use strict";G4=W4(K4(),".config","agent-browser","connection.json")});async function LR(t){let{config:e,surface:n}=t;if(e.backend==="playwright")return{backend:"playwright",reason:"explicit config: backend=playwright",probeMs:0,availability:null};if(e.backend==="agent-browser"){let i=Date.now(),a=await by(),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&&J4.has(n))return{backend:"playwright",reason:`auto: surface "${n}" excluded from Agent Browser`,probeMs:0,availability:null};if(e.headless)return{backend:"playwright",reason:"auto: headless mode requires Playwright",probeMs:0,availability:null};let r=Date.now(),o=await by(),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 J4,NR=h(()=>{"use strict";FR();J4=new Set(["daemon","subagent"])});import{createHash as V4}from"crypto";function $R(t){return!!(t.role==="textbox"&&t.kind==="password"||t.label&&Y4.test(t.label))}function UR(t){return V4("sha256").update(t,"utf8").digest("hex").slice(0,8)}function BR(t){let e=t.replace(/\s+/g," ").trim();return e.length<=80?e:e.slice(0,77)+"..."}var Y4,jd=h(()=>{"use strict";Y4=/password|secret|token|api[_-]?key|otp|2fa/i});import{randomBytes as Q4}from"crypto";import{mkdir as Z4,stat as eY,writeFile as tY}from"fs/promises";import{join as wy}from"path";import{gzip as nY}from"zlib";import{promisify as rY}from"util";function oY(t){return wy(at(t),"browser")}function sY(t){return wy(oY(t),"screenshots")}function iY(){return new Date().toISOString().replace(/[:.]/g,"-")}function aY(){return Q4(3).toString("hex")}async function Qo(t,e,n){if(e.length>jR)throw new Error(`writeScreenshotSidecar: buffer exceeds ${jR} byte cap (received ${e.length} bytes). Refusing to write oversized screenshot.`);let r=sY(t);await Z4(r,{recursive:!0});let o=`${iY()}-${aY()}-${n}.png`,s=wy(r,o);await tY(s,e);let{size:i}=await eY(s);return{path:s,bytes:i}}var _Se,jR,Sy=h(()=>{"use strict";N();jd();_Se=rY(nY);jR=5*1024*1024});var Hd,HR=h(()=>{"use strict";ne();Hd=class{baseUrl;token;constructor(e){this.baseUrl=e.url,this.token=e.token}async call(e,n,r=3e4){let o={version:1,method:e,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 ${e} 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 ${e} failed: [${String(d)}] ${String(u)}`)}return c.result}finally{clearTimeout(i)}}async listTabs(){return this.call("tabs.list",null)}async openTab(e){return{tabId:(await this.call("tabs.open",{url:e},6e4)).id}}async closeTab(e){await this.call("page.eval",{id:e,script:"window.close()"}).catch(n=>{O("[browser/agent-browser] closeTab window.close() failed (tab leak expected)",{tabId:e,err:n})})}async read(e,n){return this.call("page.read",{id:e,mode:n?.mode??"main",...n?.query?{query:n.query}:{},...n?.budget?{budget:n.budget}:{}})}async inspect(e,n){return this.call("page.inspect",{id:e,mode:n?.mode??"interactive",...n?.query?{query:n.query}:{},...n?.limit?{limit:n.limit}:{}})}async click(e,n){await this.call("page.click",{id:e,elementId:n})}async fill(e,n,r){await this.call("page.fill",{id:e,elementId:n,value:r})}async press(e,n,r){await this.call("page.press",{id:e,key:n,...r?{elementId:r}:{}})}async select(e,n,r){await this.call("page.select",{id:e,elementId:n,value:r})}async waitFor(e,n,r){await this.call("page.wait",{id:e,condition:n,...r?.value?{value:r.value}:{},...r?.timeout?{timeout:r.timeout}:{}},(r?.timeout??3e4)+5e3)}async evalScript(e,n){return this.call("page.eval",{id:e,script:n})}async screenshot(e){return this.call("page.screenshot",{id:e})}}});function ky(t){return{id:t.id,role:t.role,label:t.label,kind:t.kind,value:t.value,state:{disabled:t.disabled,...t.checked!==void 0?{checked:t.checked}:{},...t.selected!==void 0?{selected:t.selected}:{},...t.expanded!==void 0?{expanded:t.expanded}:{}},bbox:t.bbox,...t.selector?{selector:t.selector}:{}}}function WR(t,e){switch(e.kind){case"element_id":if(t.has(e.elementId))return e.elementId;throw new Error(`Element ${e.elementId} not found in current observation. Call browser_observe to refresh.`);case"selector":return null;case"semantic":return null}}async function vy(t,e,n,r,o,s){switch(n){case"click":await t.click(e,r);break;case"fill":if(o===void 0)throw new Error("fill requires a value");await t.fill(e,r,o);break;case"press":if(o===void 0)throw new Error("press requires a value (key combo)");await t.press(e,o,r);break;case"select":if(o===void 0)throw new Error("select requires a value");await t.select(e,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 t.evalScript(e,`document.querySelector('[data-element-id="${i}"]')?.scrollIntoView({behavior:'smooth',block:'center'})`);break}case"wait_for":await t.waitFor(e,"element",{value:r,timeout:s??1e4});break;default:throw new Error(`Unknown action: ${n}`)}}async function KR(t,e){if(e.target.kind!=="semantic")throw new Error("resolveSemanticAndAct called with non-semantic target");let{elements:n}=await t.client.inspect(t.tabId,{mode:"interactive",query:e.target.text,limit:10}),r=n;if(e.target.role){let c=e.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="${e.target.text}"`+(e.target.role?`, role="${e.target.role}"`:""));if(r.length>1)return{outcome:"ambiguous_target",query:{text:e.target.text,...e.target.role?{role:e.target.role}:{}},candidates:r.slice(0,5).map(ky)};let s=r[0].id;await vy(t.client,t.tabId,e.action,s,e.value,e.timeoutMs);let i=await t.client.read(t.tabId,{mode:"main"}),a=It(i.url,t.config);return a.allowed?{elementId:s}:{outcome:"blocked_by_policy",url:i.url,reason:`action navigated to blocked domain: ${a.reason}`}}var GR=h(()=>{"use strict";jn()});var qR={};yo(qR,{AgentBrowserProvider:()=>Ty});var Ty,XR=h(()=>{"use strict";jn();Sy();HR();GR();Ty=class{name="agent-browser";config;client;sessions=new Map;constructor(e,n){this.config=e,this.client=new Hd(n)}async open(e){let n=It(e.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:e.url,reason:n.reason};let r=this.sessions.get(e.sessionId);if(r)await this.client.evalScript(r.tabId,`window.location.href = ${JSON.stringify(e.url)}`),await this.client.waitFor(r.tabId,"load",{timeout:e.timeoutMs??3e4});else{let{tabId:i}=await this.client.openTab(e.url);await this.client.waitFor(i,"load",{timeout:e.timeoutMs??3e4}),r={tabId:i,observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null},this.sessions.set(e.sessionId,r)}let o=await this.client.read(r.tabId,{mode:"main"}),s=It(o.url,this.config);return s.allowed?this.buildObservation(r,e.sessionId,e.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(e){let n=this.sessions.get(e.sessionId);if(!n)throw new Error(`No Agent Browser tab open for session ${e.sessionId}. Call browser_open first.`);return this.buildObservation(n,e.sessionId,e.screenshot,e.maxElements,"browser_observe")}async act(e){let n=this.sessions.get(e.sessionId);if(!n)throw new Error(`No Agent Browser tab open for session ${e.sessionId}. Call browser_open first.`);let r=WR(n.knownElements,e.target);if(r===null){if(e.target.kind==="semantic"){let i=await KR({client:this.client,config:this.config,tabId:n.tabId},e);return"outcome"in i?i:(n.lastAction=`browser_act:${e.action}`,n.lastActionAt=new Date().toISOString(),this.buildObservation(n,e.sessionId,e.screenshot,void 0,"browser_act"))}throw e.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(e.target)}`)}await vy(this.client,n.tabId,e.action,r,e.value,e.timeoutMs),n.lastAction=`browser_act:${e.action}`,n.lastActionAt=new Date().toISOString();let o=await this.client.read(n.tabId,{mode:"main"}),s=It(o.url,this.config);return s.allowed?this.buildObservation(n,e.sessionId,e.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(e){throw new Error("AgentBrowserProvider does not support render(). Use PlaywrightProvider for one-shot content fetches.")}async screenshot(e){let n=this.sessions.get(e.sessionId);if(!n)throw new Error(`No Agent Browser tab open for session ${e.sessionId}. Call browser_open first.`);if(e.target!==void 0||e.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 Qo(e.sessionId,o,"browser_screenshot")).path,bytes:o.length,width:s,height:i,dataBase64:r.data,mediaType:"image/png"}}async extract(e){throw new Error("AgentBrowserProvider does not support extract() yet.")}async close(e){let n=this.sessions.get(e.sessionId);if(n){try{await this.client.closeTab(n.tabId)}catch{}this.sessions.delete(e.sessionId)}}describe(e){let n=this.sessions.get(e);return n?{active:!0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:1}:null}async shutdown(){let e=Array.from(this.sessions.entries()).map(async([,n])=>{try{await this.client.closeTab(n.tabId)}catch{}});await Promise.all(e),this.sessions.clear()}async buildObservation(e,n,r,o,s="browser_open"){let[i,a]=await Promise.all([this.client.read(e.tabId,{mode:"main",budget:4e3}),this.client.inspect(e.tabId,{mode:"interactive",limit:o??80})]),c=a.elements.map(ky),l=o??80,d=c.slice(0,l);e.observationCounter+=1,e.knownElements=new Map(d.map(g=>[g.id,g])),e.currentUrl=i.url,e.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 g=await this.client.screenshot(e.tabId),y=Buffer.from(g.data,"base64");p=(await Qo(n,y,s)).path}catch{u.push("screenshot capture failed")}let f=`obs_${e.observationCounter.toString(36)}`,m={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:m,warnings:u,screenshotPath:p,capturedAt:new Date().toISOString()}}}});import{existsSync as cY,readFileSync as lY}from"node:fs";import{createRequire as dY}from"node:module";import{dirname as uY,join as pY}from"node:path";function VR(t){if(typeof t=="string")return t;let e=[],n=t;for(let r=0;r<mY&&n instanceof Error;r++)e.push(n.message),n=n.cause;return e.length>0?e.join(" | "):String(t)}function Ve(t){let e=VR(t);return JR.some(n=>e.includes(n))}function gY(){try{let e=dY(import.meta.url).resolve("playwright/package.json"),n=JSON.parse(lY(e,"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=pY(uY(e),o);return cY(s)?`node ${/\s/.test(s)?`"${s}"`:s} install chromium`:void 0}catch{return}}function aa(){return zR??=gY()??fY,zR}function Ey(t){return t.includes("install chromium")}function gt(t,e){let n=VR(t),r=e?.latched===!0?` ${hY}`:"";if(n.includes("Executable doesn't exist")){let o="";return e?.headless===!0?o=" This launch was headless, which needs the `chromium_headless_shell-*` build.":e?.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: ${aa()}.${o}${r}`}return`browser tools require the optional \`playwright\` peer dependency. Install via: pnpm add playwright (then ${aa()}). Or pick a different tool.${r}`}function Wd(t,e,n=!1){if(!Ve(t))return t;let r=t instanceof Error?t.message:String(t);return new Error(`${r}
397
397
 
398
- ${gt(t,{headless:e,latched:n})}`,{cause:t})}var JR,fY,mY,zR,hY,_y=h(()=>{"use strict";JR=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],fY="pnpm exec playwright install chromium",mY=4;hY="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 Ur from"node:fs";import Kd from"node:path";import{randomBytes as yY}from"node:crypto";function bY(){try{return"5.221.5"}catch{}try{let t=Kd.resolve(import.meta.dirname,"../../../package.json"),e=Ur.readFileSync(t,"utf8"),n=JSON.parse(e);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var wY,Gd,YR=h(()=>{"use strict";_y();N();ne();wY=bY(),Gd=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(e){this.config=e}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(e){this.launchFailure={error:e}}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 e;try{({chromium:e}=await import("playwright"))}catch(n){let r=Wd(n,this.config.headless,!0);throw this.latchLaunchFailure(r),this.launchPromise=void 0,r}try{let n=await e.launch({headless:this.config.headless});return this.browser=n,this.clearLaunchFailure(),n}catch(n){let r=Wd(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(e){let n=this.sessions.get(e);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(e,i),s}async ensurePage(e){let n=this.sessions.get(e);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(e);let r=this.sessions.get(e);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${e}`);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(e){return this.sessions.get(e)?.page}async renderHtml(e,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(e,{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(e){return this.sessions.get(e)?.consoleErrors??0}getLastHttpStatus(e){return this.sessions.get(e)?.lastHttpStatus??null}hasOpenDialog(e){return this.sessions.get(e)?.openDialog!==void 0}async dismissDialog(e,n=!0){let r=this.sessions.get(e);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(e){this.clearLaunchFailure();let n=this.sessions.get(e);n!==void 0&&(this.sessions.delete(e),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 e=[...this.sessions.keys()];if(await Promise.all(e.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/${wY}`}}loadStorageState(e){let n=Qm(e);try{if(!Ur.existsSync(n))return;let r=JSON.parse(Ur.readFileSync(n,"utf8"));return O("[browser/vault] restored session",{profile:e,file:n}),r}catch(r){O("[browser/vault] ignoring unreadable vault",{profile:e,file:n,err:r});return}}async saveStorageState(e,n){try{let r=Qm(e);if(!Ur.existsSync(r))return;let o=await n.storageState(),s=Kd.join(Kd.dirname(r),`.${Kd.basename(r)}.${process.pid}.${yY(4).toString("hex")}.tmp`);Ur.writeFileSync(s,JSON.stringify(o),{mode:384}),Ur.chmodSync(s,384),Ur.renameSync(s,r),O("[browser/vault] saved session",{profile:e,file:r})}catch(r){O("[browser/vault] save failed",{profile:e,err:r})}}}});import{createHash as SY}from"node:crypto";function kY(t){return t?t.replace(/\s+/g," ").trim().slice(0,200):""}function vY(t,e,n){return`el_${SY("sha256").update(`${t}:${e}:${n}`).digest("hex").slice(0,6)}`}function TY(t){let e=t.replace(/\s+/g," ").trim(),n=4e3;return e.length<=n?e:e.slice(0,n)+"\u2026[truncated]"}function QR(t){return t.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function eI(t,e){let n=t.role??"",r=t.name??"";ZR.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&e.push(t);for(let s of t.children??[])eI(s,e)}async function EY(t){return t.evaluate(e=>{let n=Array.from(document.querySelectorAll(e)),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},tI).catch(()=>[])}async function _Y(t){return t.evaluate(e=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(e)),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 g=s.type;g==="checkbox"?l="checkbox":g==="radio"?l="radio":g==="button"||g==="submit"||g==="reset"?l="button":g==="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,m={role:l,name:c,disabled:p};u!==void 0&&(m.value=u),f!==void 0&&(m.checked=f),o.push(m)}return o},tI).catch(()=>[])}function xY(t){let n=t.accessibility;return n!==null&&typeof n=="object"?n:null}async function qd(t,e){let n=e.maxElements??80,r=e.includeHidden??!1,o=[],s=xY(t),i=s?s.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=EY(t),c=t.evaluate(()=>document.body?.innerText??"").catch(()=>""),l=Promise.resolve(t.url()),d=t.title().catch(()=>""),[u,p,f,m,g]=await Promise.all([i,a,c,l,d]),y,b=!1;u!==null?(y=[],eI(u,y)):(o.push("observation skipped accessibility tree (returned null)"),b=!0,y=(await _Y(t)).filter(C=>ZR.has(C.role??"")));let w=new Map;for(let E of p){let C=QR(E.name),H=w.get(C);(!H||H.bbox.w===0&&E.bbox.w>0)&&w.set(C,E)}let v=y.map(E=>({ax:E,dom:w.get(QR(E.name??""))})),x=r?v:v.filter(E=>E.dom?E.dom.bbox.w>0||E.dom.bbox.h>0:!0);x.sort((E,C)=>{let H=E.dom?.bbox.y??0,M=C.dom?.bbox.y??0;if(H!==M)return H-M;let $=E.dom?.bbox.x??0,U=C.dom?.bbox.x??0;return $-U}),x.length>200&&o.push("page has 200+ interactive elements; consider scoping");let _=x.slice(0,n).map((E,C)=>{let H=E.ax.role??"generic",M=E.ax.name??"",$=vY(H,M,C),U=E.dom?.bbox??{x:0,y:0,w:0,h:0},B=E.dom?.type??null,j=null;E.ax.value!==void 0&&E.ax.value!==null&&(j=String(E.ax.value)),E.ax.checked!==void 0&&(j=String(E.ax.checked)),$R({role:H,kind:B})&&(j="[redacted]");let K={disabled:E.ax.disabled??!1};E.ax.checked!==void 0&&(K.checked=E.ax.checked===!0||E.ax.checked==="mixed"),E.ax.selected!==void 0&&(K.selected=E.ax.selected),E.ax.expanded!==void 0&&(K.expanded=E.ax.expanded);let Y;E.dom?.testId?Y=`[data-testid="${E.dom.testId}"]`:E.dom?.id&&(Y=`#${E.dom.id}`);let Ft={id:$,role:H,label:kY(M),kind:B,value:j,state:K,bbox:U};return Y!==void 0&&(Ft.selector=Y),Ft}),I="idle";try{let E=await t.evaluate(()=>document.readyState);E==="loading"?I="loading":E==="interactive"?I="navigating":I="idle"}catch{I="navigating"}I!=="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 P=TY(f),T=`obs_${e.observationCounter.toString(36)}`,R=new Date().toISOString();return{observationId:T,url:m,title:g,textSummary:P,interactive:_,status:{httpStatus:e.httpStatus??null,loadingState:I,hasDialog:e.hasDialog??!1,consoleErrors:e.consoleErrors??0},warnings:o,screenshotPath:e.screenshotPath??null,capturedAt:R}}var ZR,tI,nI=h(()=>{"use strict";jd();ZR=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);tI="a[href], button, input, select, textarea, [role], [tabindex], label"});async function rI(t,e){try{let n=await t.nth(e).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}:${e}`,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 xy(t,e){let n=Math.min(e,5);return(await Promise.all(Array.from({length:n},(o,s)=>rI(t,s)))).filter(o=>o!==null)}async function AY(t){let e=new Set,n=[];for(let{loc:r,count:o}of t)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}e.has(i)||(e.add(i),n.push({key:i,locator:r,index:s}))}return n}async function Ay(t,e,n){switch(e.kind){case"element_id":return RY(t,e,n);case"selector":return IY(t,e);case"semantic":return PY(t,e)}}async function RY(t,e,n){let r=n.get(e.elementId);if(r===void 0)return{outcome:"not_found",query:e};if(r.selector!==void 0){let c=t.locator(r.selector);if(await c.count()===1)return{outcome:"resolved",locator:c}}let o=t.getByRole(r.role,{name:r.label,exact:!0}),s=await o.count();if(s===0)return{outcome:"not_found",query:e};if(s===1)return{outcome:"resolved",locator:o};let i=await xy(o,s);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:i}}async function IY(t,e){let n=t.locator(e.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:e};if(r===1)return{outcome:"resolved",locator:n};let o=await xy(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${e.selector}]`},candidates:o}}async function PY(t,e){return e.role!==void 0?CY(t,e.text,e.role):MY(t,e.text,e)}async function CY(t,e,n){let r=t.getByRole(n,{name:e}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:e,role:n}};if(o===1)return{outcome:"resolved",locator:r};let s=await xy(r,o);return{outcome:"ambiguous_target",query:{text:e,role:n},candidates:s}}async function MY(t,e,n){let r=t.getByRole("button",{name:e}),o=t.getByRole("link",{name:e}),s=t.getByLabel(e,{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 AY(d);if(u.length===0)return{outcome:"not_found",query:n};if(u.length===1){let g=u[0];return g===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:g.locator.nth(g.index)}}let p=u.slice(0,5),f=[];for(let g=0;g<p.length;g++){let y=p[g];if(y===void 0)continue;let b=await rI(y.locator,y.index);if(b!==null){let w=`${b.role}:${b.label}:${g}`,v=0;for(let x=0;x<w.length;x++)v=v*31+w.charCodeAt(x)>>>0;f.push({...b,id:`el_${v.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:e},candidates:f}}var oI=h(()=>{"use strict"});async function Ry(t,e,n,r){let o=t.url();if(o===n)return null;let s=It(o,e);if(s.allowed)return null;try{await t.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:s.reason}}var sI=h(()=>{"use strict";jn()});var Py={};yo(Py,{PlaywrightProvider:()=>Iy});function iI(t){switch(t.kind){case"semantic":return t.role!==void 0?`semantic('${t.text}', role='${t.role}')`:`semantic('${t.text}')`;case"element_id":return`element_id(${t.elementId})`;case"selector":return`selector(${t.selector})`}}var Iy,Cy=h(()=>{"use strict";YR();nI();oI();jn();sI();Sy();Iy=class{name="playwright";config;launcher;sessions=new Map;constructor(e){this.config=e,this.launcher=new Gd(e)}async open(e){let n=It(e.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:e.url,reason:n.reason};let{sessionId:r}=e,o=await this.launcher.ensurePage(r),s=this.ensureSessionState(r),i=null,a=null;try{await o.goto(e.url,{timeout:e.timeoutMs??3e4,waitUntil:e.waitFor??"load"})}catch(u){a=u}let c=o.url();if(!(a!==null&&(c===""||c==="about:blank"))){let u=await Ry(o,this.config,e.url,()=>this.close({sessionId:r}));if(u!==null)return u}(e.screenshot===!0||a!==null)&&(i=await this.captureScreenshot(o,r,"browser_open")),s.observationCounter+=1;let d=await qd(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(e){let{sessionId:n}=e,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;e.screenshot===!0&&(s=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let i=await qd(r,{observationCounter:o.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:e.includeHidden,maxElements:e.maxElements});return this.updateSessionFromObservation(o,i.interactive,i.url,i.title,"browser_observe"),i}async act(e){let{sessionId:n}=e,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=e.timeoutMs??3e4,a=await Ay(r,e.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${iI(e.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:c}=a,l=null,d=async()=>{switch(e.action){case"click":await c.click({timeout:i});break;case"fill":await c.fill(e.value??"");break;case"press":await c.press(e.value??"");break;case"select":await c.selectOption(e.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(g){if(g instanceof Error&&/navigation|net::ERR/i.test(g.message))try{await d()}catch(y){l=y}else l=g}let u=await Ry(r,this.config,s,()=>this.close({sessionId:n}));if(u!==null)return u;let p=null;(e.screenshot===!0||l!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await qd(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),m=`browser_act:${e.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,m),l!==null)throw l;return f}async render(e){return this.launcher.renderHtml(e.url,{timeoutMs:e.timeoutMs??3e4,waitUntil:e.waitFor??"load",signal:e.signal,requestGuard:e.requestGuard})}async screenshot(e){let{sessionId:n}=e,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(e.target!==void 0){let d=await Ay(r,e.target,o.knownElements);if(d.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${iI(e.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:e.fullPage??!1});let{path:i,bytes:a}=await Qo(n,s,"browser_screenshot"),c=0,l=0;if(e.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(e){throw new Error("browser_extract not implemented in Phase 1")}async close(e){await this.launcher.closeSession(e.sessionId),this.sessions.delete(e.sessionId)}describe(e){let n=this.sessions.get(e);if(n===void 0)return null;let r=this.launcher.getPage(e);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(e){let n=this.sessions.get(e);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(e,r),r}updateSessionFromObservation(e,n,r,o,s){e.knownElements=new Map(n.map(i=>[i.id,i])),e.currentUrl=r,e.currentTitle=o,e.lastAction=s,e.lastActionAt=new Date().toISOString()}async captureScreenshot(e,n,r){try{let o=await e.screenshot({fullPage:!1}),{path:s}=await Qo(n,o,r);return s}catch{return null}}}});var jr={};yo(jr,{__resetBrowserRegistryForTests:()=>$Y,browserProviderActive:()=>FY,closeBrowserProvider:()=>Oy,getBrowserProvider:()=>DY,getLastRoutingDecision:()=>NY,peekBrowserProvider:()=>LY});function aI(){Promise.resolve(Oy()).then(()=>{process.exit(130)})}function cI(){Promise.resolve(Oy()).then(()=>{process.exit(143)})}function lI(){Jt=null}function OY(){Xd||(process.on("SIGINT",aI),process.on("SIGTERM",cI),process.on("exit",lI),Xd=!0)}function dI(){Xd&&(process.removeListener("SIGINT",aI),process.removeListener("SIGTERM",cI),process.removeListener("exit",lI),Xd=!1)}async function DY(t){return Jt!==null?Jt:(Br!==null||(Br=(async()=>{let e=hy(t),n=t?.surface??(t?.env??{}).AGENT_SURFACE??k.AGENT_SURFACE,r=await LR({config:e,surface:n});My=r;let o;if(r.backend==="agent-browser"){let{AgentBrowserProvider:s}=await Promise.resolve().then(()=>(XR(),qR)),i=r.availability.connection;o=new s(e,i)}else{let{PlaywrightProvider:s}=await Promise.resolve().then(()=>(Cy(),Py));o=new s(e)}return OY(),Jt=o,Br=null,o})()),Br)}async function Oy(){if(Jt===null)return;let t=Jt;Jt=null,Br=null,dI(),await t.shutdown()}function FY(){return Jt!==null}function LY(){return Jt}function NY(){return My}function $Y(){Jt=null,Br=null,My=null,dI()}var Jt,Br,Xd,My,Hr=h(()=>{"use strict";jn();NR();F();Jt=null,Br=null,Xd=!1,My=null});async function uI(t,e){try{return await TR(t,e)}catch(n){return O("[web/scrape] extraction failed",{url:e,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function KY(t,e){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Hr(),jr)),r=await n();try{return await r.render({url:t,timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:e.requestGuard})}catch(o){if(r.name==="agent-browser"){let{PlaywrightProvider:s}=await Promise.resolve().then(()=>(Cy(),Py)),{loadBrowserConfig:i}=await Promise.resolve().then(()=>(jn(),yy)),a=i(),c=new s(a);try{return await c.render({url:t,timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:e.requestGuard})}finally{await c.shutdown()}}throw o}}async function pI(t,e){let n=e.fetchFn??globalThis.fetch,r=e.renderFn??KY,o=e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{},s=null,i="",a=t,c=null,l=null;try{let u=await Bn(n,t,{headers:WY,signal:e.signal},o);c=u.status,a=u.url||t;let p=u.headers.get("content-type")??"";if(u.ok){if(HY.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(jY.test(p)&&!BY.test(p))return{title:"",markdown:f.trim(),finalUrl:a,usedRender:!1};if(i=f,s=await uI(f,a),e.signal.aborted)throw e.signal.reason??new Error("aborted")}}catch(u){if(e.signal.aborted||u instanceof Pe||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=py({html:i,extractedTextLength:s.textLength});return{title:s.title,markdown:s.markdown,finalUrl:a,usedRender:!1,...u!==void 0?{advisory:u}:{}}}try{await ia(t,o);let u=await r(t,{timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:f=>ia(f,o)});u.finalUrl!==t&&/^https?:\/\//i.test(u.finalUrl)&&await ia(u.finalUrl,o);let p=await uI(u.html,u.finalUrl);if(e.signal.aborted)throw e.signal.reason??new Error("aborted");if(s===null||p.textLength>=s.textLength){let f=py({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(e.signal.aborted||u instanceof Pe)throw u;if(s===null){let p=u instanceof Error?u.message:String(u),f=l instanceof Error?l.message:`HTTP ${c??"error"}`,m=new Error(`web_scrape could not retrieve ${t}: fetch failed (${f}) and render failed (${p}).`);throw m.cause=u,m}}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 ${t} (HTTP ${c??"error"}).`)}var BY,jY,HY,WY,fI=h(()=>{"use strict";ER();fy();$r();ne();BY=/(text\/html|application\/xhtml\+xml)/i,jY=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,HY=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,WY={"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 XY(t){let e=t.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let s=await e(GY,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":t.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),qY),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!s.ok){let c="";try{let d=await s.text(),u=Z(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 mI(t){return t.exaApiKey!==void 0&&t.exaApiKey.trim()!==""?XY({apiKey:t.exaApiKey,fetchFn:t.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 gI(t,e){if(e.length===0)return`# Search results for "${t}"
398
+ ${gt(t,{headless:e,latched:n})}`,{cause:t})}var JR,fY,mY,zR,hY,_y=h(()=>{"use strict";JR=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],fY="pnpm exec playwright install chromium",mY=4;hY="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 Ur from"node:fs";import Kd from"node:path";import{randomBytes as yY}from"node:crypto";function bY(){try{return"5.221.6"}catch{}try{let t=Kd.resolve(import.meta.dirname,"../../../package.json"),e=Ur.readFileSync(t,"utf8"),n=JSON.parse(e);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var wY,Gd,YR=h(()=>{"use strict";_y();N();ne();wY=bY(),Gd=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(e){this.config=e}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(e){this.launchFailure={error:e}}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 e;try{({chromium:e}=await import("playwright"))}catch(n){let r=Wd(n,this.config.headless,!0);throw this.latchLaunchFailure(r),this.launchPromise=void 0,r}try{let n=await e.launch({headless:this.config.headless});return this.browser=n,this.clearLaunchFailure(),n}catch(n){let r=Wd(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(e){let n=this.sessions.get(e);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(e,i),s}async ensurePage(e){let n=this.sessions.get(e);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(e);let r=this.sessions.get(e);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${e}`);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(e){return this.sessions.get(e)?.page}async renderHtml(e,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(e,{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(e){return this.sessions.get(e)?.consoleErrors??0}getLastHttpStatus(e){return this.sessions.get(e)?.lastHttpStatus??null}hasOpenDialog(e){return this.sessions.get(e)?.openDialog!==void 0}async dismissDialog(e,n=!0){let r=this.sessions.get(e);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(e){this.clearLaunchFailure();let n=this.sessions.get(e);n!==void 0&&(this.sessions.delete(e),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 e=[...this.sessions.keys()];if(await Promise.all(e.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/${wY}`}}loadStorageState(e){let n=Qm(e);try{if(!Ur.existsSync(n))return;let r=JSON.parse(Ur.readFileSync(n,"utf8"));return O("[browser/vault] restored session",{profile:e,file:n}),r}catch(r){O("[browser/vault] ignoring unreadable vault",{profile:e,file:n,err:r});return}}async saveStorageState(e,n){try{let r=Qm(e);if(!Ur.existsSync(r))return;let o=await n.storageState(),s=Kd.join(Kd.dirname(r),`.${Kd.basename(r)}.${process.pid}.${yY(4).toString("hex")}.tmp`);Ur.writeFileSync(s,JSON.stringify(o),{mode:384}),Ur.chmodSync(s,384),Ur.renameSync(s,r),O("[browser/vault] saved session",{profile:e,file:r})}catch(r){O("[browser/vault] save failed",{profile:e,err:r})}}}});import{createHash as SY}from"node:crypto";function kY(t){return t?t.replace(/\s+/g," ").trim().slice(0,200):""}function vY(t,e,n){return`el_${SY("sha256").update(`${t}:${e}:${n}`).digest("hex").slice(0,6)}`}function TY(t){let e=t.replace(/\s+/g," ").trim(),n=4e3;return e.length<=n?e:e.slice(0,n)+"\u2026[truncated]"}function QR(t){return t.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function eI(t,e){let n=t.role??"",r=t.name??"";ZR.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&e.push(t);for(let s of t.children??[])eI(s,e)}async function EY(t){return t.evaluate(e=>{let n=Array.from(document.querySelectorAll(e)),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},tI).catch(()=>[])}async function _Y(t){return t.evaluate(e=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(e)),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 g=s.type;g==="checkbox"?l="checkbox":g==="radio"?l="radio":g==="button"||g==="submit"||g==="reset"?l="button":g==="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,m={role:l,name:c,disabled:p};u!==void 0&&(m.value=u),f!==void 0&&(m.checked=f),o.push(m)}return o},tI).catch(()=>[])}function xY(t){let n=t.accessibility;return n!==null&&typeof n=="object"?n:null}async function qd(t,e){let n=e.maxElements??80,r=e.includeHidden??!1,o=[],s=xY(t),i=s?s.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=EY(t),c=t.evaluate(()=>document.body?.innerText??"").catch(()=>""),l=Promise.resolve(t.url()),d=t.title().catch(()=>""),[u,p,f,m,g]=await Promise.all([i,a,c,l,d]),y,b=!1;u!==null?(y=[],eI(u,y)):(o.push("observation skipped accessibility tree (returned null)"),b=!0,y=(await _Y(t)).filter(C=>ZR.has(C.role??"")));let w=new Map;for(let E of p){let C=QR(E.name),H=w.get(C);(!H||H.bbox.w===0&&E.bbox.w>0)&&w.set(C,E)}let v=y.map(E=>({ax:E,dom:w.get(QR(E.name??""))})),x=r?v:v.filter(E=>E.dom?E.dom.bbox.w>0||E.dom.bbox.h>0:!0);x.sort((E,C)=>{let H=E.dom?.bbox.y??0,M=C.dom?.bbox.y??0;if(H!==M)return H-M;let $=E.dom?.bbox.x??0,U=C.dom?.bbox.x??0;return $-U}),x.length>200&&o.push("page has 200+ interactive elements; consider scoping");let _=x.slice(0,n).map((E,C)=>{let H=E.ax.role??"generic",M=E.ax.name??"",$=vY(H,M,C),U=E.dom?.bbox??{x:0,y:0,w:0,h:0},B=E.dom?.type??null,j=null;E.ax.value!==void 0&&E.ax.value!==null&&(j=String(E.ax.value)),E.ax.checked!==void 0&&(j=String(E.ax.checked)),$R({role:H,kind:B})&&(j="[redacted]");let K={disabled:E.ax.disabled??!1};E.ax.checked!==void 0&&(K.checked=E.ax.checked===!0||E.ax.checked==="mixed"),E.ax.selected!==void 0&&(K.selected=E.ax.selected),E.ax.expanded!==void 0&&(K.expanded=E.ax.expanded);let Y;E.dom?.testId?Y=`[data-testid="${E.dom.testId}"]`:E.dom?.id&&(Y=`#${E.dom.id}`);let Ft={id:$,role:H,label:kY(M),kind:B,value:j,state:K,bbox:U};return Y!==void 0&&(Ft.selector=Y),Ft}),I="idle";try{let E=await t.evaluate(()=>document.readyState);E==="loading"?I="loading":E==="interactive"?I="navigating":I="idle"}catch{I="navigating"}I!=="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 P=TY(f),T=`obs_${e.observationCounter.toString(36)}`,R=new Date().toISOString();return{observationId:T,url:m,title:g,textSummary:P,interactive:_,status:{httpStatus:e.httpStatus??null,loadingState:I,hasDialog:e.hasDialog??!1,consoleErrors:e.consoleErrors??0},warnings:o,screenshotPath:e.screenshotPath??null,capturedAt:R}}var ZR,tI,nI=h(()=>{"use strict";jd();ZR=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);tI="a[href], button, input, select, textarea, [role], [tabindex], label"});async function rI(t,e){try{let n=await t.nth(e).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}:${e}`,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 xy(t,e){let n=Math.min(e,5);return(await Promise.all(Array.from({length:n},(o,s)=>rI(t,s)))).filter(o=>o!==null)}async function AY(t){let e=new Set,n=[];for(let{loc:r,count:o}of t)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}e.has(i)||(e.add(i),n.push({key:i,locator:r,index:s}))}return n}async function Ay(t,e,n){switch(e.kind){case"element_id":return RY(t,e,n);case"selector":return IY(t,e);case"semantic":return PY(t,e)}}async function RY(t,e,n){let r=n.get(e.elementId);if(r===void 0)return{outcome:"not_found",query:e};if(r.selector!==void 0){let c=t.locator(r.selector);if(await c.count()===1)return{outcome:"resolved",locator:c}}let o=t.getByRole(r.role,{name:r.label,exact:!0}),s=await o.count();if(s===0)return{outcome:"not_found",query:e};if(s===1)return{outcome:"resolved",locator:o};let i=await xy(o,s);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:i}}async function IY(t,e){let n=t.locator(e.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:e};if(r===1)return{outcome:"resolved",locator:n};let o=await xy(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${e.selector}]`},candidates:o}}async function PY(t,e){return e.role!==void 0?CY(t,e.text,e.role):MY(t,e.text,e)}async function CY(t,e,n){let r=t.getByRole(n,{name:e}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:e,role:n}};if(o===1)return{outcome:"resolved",locator:r};let s=await xy(r,o);return{outcome:"ambiguous_target",query:{text:e,role:n},candidates:s}}async function MY(t,e,n){let r=t.getByRole("button",{name:e}),o=t.getByRole("link",{name:e}),s=t.getByLabel(e,{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 AY(d);if(u.length===0)return{outcome:"not_found",query:n};if(u.length===1){let g=u[0];return g===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:g.locator.nth(g.index)}}let p=u.slice(0,5),f=[];for(let g=0;g<p.length;g++){let y=p[g];if(y===void 0)continue;let b=await rI(y.locator,y.index);if(b!==null){let w=`${b.role}:${b.label}:${g}`,v=0;for(let x=0;x<w.length;x++)v=v*31+w.charCodeAt(x)>>>0;f.push({...b,id:`el_${v.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:e},candidates:f}}var oI=h(()=>{"use strict"});async function Ry(t,e,n,r){let o=t.url();if(o===n)return null;let s=It(o,e);if(s.allowed)return null;try{await t.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:s.reason}}var sI=h(()=>{"use strict";jn()});var Py={};yo(Py,{PlaywrightProvider:()=>Iy});function iI(t){switch(t.kind){case"semantic":return t.role!==void 0?`semantic('${t.text}', role='${t.role}')`:`semantic('${t.text}')`;case"element_id":return`element_id(${t.elementId})`;case"selector":return`selector(${t.selector})`}}var Iy,Cy=h(()=>{"use strict";YR();nI();oI();jn();sI();Sy();Iy=class{name="playwright";config;launcher;sessions=new Map;constructor(e){this.config=e,this.launcher=new Gd(e)}async open(e){let n=It(e.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:e.url,reason:n.reason};let{sessionId:r}=e,o=await this.launcher.ensurePage(r),s=this.ensureSessionState(r),i=null,a=null;try{await o.goto(e.url,{timeout:e.timeoutMs??3e4,waitUntil:e.waitFor??"load"})}catch(u){a=u}let c=o.url();if(!(a!==null&&(c===""||c==="about:blank"))){let u=await Ry(o,this.config,e.url,()=>this.close({sessionId:r}));if(u!==null)return u}(e.screenshot===!0||a!==null)&&(i=await this.captureScreenshot(o,r,"browser_open")),s.observationCounter+=1;let d=await qd(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(e){let{sessionId:n}=e,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;e.screenshot===!0&&(s=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let i=await qd(r,{observationCounter:o.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:e.includeHidden,maxElements:e.maxElements});return this.updateSessionFromObservation(o,i.interactive,i.url,i.title,"browser_observe"),i}async act(e){let{sessionId:n}=e,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=e.timeoutMs??3e4,a=await Ay(r,e.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${iI(e.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:c}=a,l=null,d=async()=>{switch(e.action){case"click":await c.click({timeout:i});break;case"fill":await c.fill(e.value??"");break;case"press":await c.press(e.value??"");break;case"select":await c.selectOption(e.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(g){if(g instanceof Error&&/navigation|net::ERR/i.test(g.message))try{await d()}catch(y){l=y}else l=g}let u=await Ry(r,this.config,s,()=>this.close({sessionId:n}));if(u!==null)return u;let p=null;(e.screenshot===!0||l!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await qd(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),m=`browser_act:${e.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,m),l!==null)throw l;return f}async render(e){return this.launcher.renderHtml(e.url,{timeoutMs:e.timeoutMs??3e4,waitUntil:e.waitFor??"load",signal:e.signal,requestGuard:e.requestGuard})}async screenshot(e){let{sessionId:n}=e,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(e.target!==void 0){let d=await Ay(r,e.target,o.knownElements);if(d.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${iI(e.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:e.fullPage??!1});let{path:i,bytes:a}=await Qo(n,s,"browser_screenshot"),c=0,l=0;if(e.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(e){throw new Error("browser_extract not implemented in Phase 1")}async close(e){await this.launcher.closeSession(e.sessionId),this.sessions.delete(e.sessionId)}describe(e){let n=this.sessions.get(e);if(n===void 0)return null;let r=this.launcher.getPage(e);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(e){let n=this.sessions.get(e);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(e,r),r}updateSessionFromObservation(e,n,r,o,s){e.knownElements=new Map(n.map(i=>[i.id,i])),e.currentUrl=r,e.currentTitle=o,e.lastAction=s,e.lastActionAt=new Date().toISOString()}async captureScreenshot(e,n,r){try{let o=await e.screenshot({fullPage:!1}),{path:s}=await Qo(n,o,r);return s}catch{return null}}}});var jr={};yo(jr,{__resetBrowserRegistryForTests:()=>$Y,browserProviderActive:()=>FY,closeBrowserProvider:()=>Oy,getBrowserProvider:()=>DY,getLastRoutingDecision:()=>NY,peekBrowserProvider:()=>LY});function aI(){Promise.resolve(Oy()).then(()=>{process.exit(130)})}function cI(){Promise.resolve(Oy()).then(()=>{process.exit(143)})}function lI(){Jt=null}function OY(){Xd||(process.on("SIGINT",aI),process.on("SIGTERM",cI),process.on("exit",lI),Xd=!0)}function dI(){Xd&&(process.removeListener("SIGINT",aI),process.removeListener("SIGTERM",cI),process.removeListener("exit",lI),Xd=!1)}async function DY(t){return Jt!==null?Jt:(Br!==null||(Br=(async()=>{let e=hy(t),n=t?.surface??(t?.env??{}).AGENT_SURFACE??k.AGENT_SURFACE,r=await LR({config:e,surface:n});My=r;let o;if(r.backend==="agent-browser"){let{AgentBrowserProvider:s}=await Promise.resolve().then(()=>(XR(),qR)),i=r.availability.connection;o=new s(e,i)}else{let{PlaywrightProvider:s}=await Promise.resolve().then(()=>(Cy(),Py));o=new s(e)}return OY(),Jt=o,Br=null,o})()),Br)}async function Oy(){if(Jt===null)return;let t=Jt;Jt=null,Br=null,dI(),await t.shutdown()}function FY(){return Jt!==null}function LY(){return Jt}function NY(){return My}function $Y(){Jt=null,Br=null,My=null,dI()}var Jt,Br,Xd,My,Hr=h(()=>{"use strict";jn();NR();F();Jt=null,Br=null,Xd=!1,My=null});async function uI(t,e){try{return await TR(t,e)}catch(n){return O("[web/scrape] extraction failed",{url:e,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function KY(t,e){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Hr(),jr)),r=await n();try{return await r.render({url:t,timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:e.requestGuard})}catch(o){if(r.name==="agent-browser"){let{PlaywrightProvider:s}=await Promise.resolve().then(()=>(Cy(),Py)),{loadBrowserConfig:i}=await Promise.resolve().then(()=>(jn(),yy)),a=i(),c=new s(a);try{return await c.render({url:t,timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:e.requestGuard})}finally{await c.shutdown()}}throw o}}async function pI(t,e){let n=e.fetchFn??globalThis.fetch,r=e.renderFn??KY,o=e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{},s=null,i="",a=t,c=null,l=null;try{let u=await Bn(n,t,{headers:WY,signal:e.signal},o);c=u.status,a=u.url||t;let p=u.headers.get("content-type")??"";if(u.ok){if(HY.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(jY.test(p)&&!BY.test(p))return{title:"",markdown:f.trim(),finalUrl:a,usedRender:!1};if(i=f,s=await uI(f,a),e.signal.aborted)throw e.signal.reason??new Error("aborted")}}catch(u){if(e.signal.aborted||u instanceof Pe||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=py({html:i,extractedTextLength:s.textLength});return{title:s.title,markdown:s.markdown,finalUrl:a,usedRender:!1,...u!==void 0?{advisory:u}:{}}}try{await ia(t,o);let u=await r(t,{timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:f=>ia(f,o)});u.finalUrl!==t&&/^https?:\/\//i.test(u.finalUrl)&&await ia(u.finalUrl,o);let p=await uI(u.html,u.finalUrl);if(e.signal.aborted)throw e.signal.reason??new Error("aborted");if(s===null||p.textLength>=s.textLength){let f=py({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(e.signal.aborted||u instanceof Pe)throw u;if(s===null){let p=u instanceof Error?u.message:String(u),f=l instanceof Error?l.message:`HTTP ${c??"error"}`,m=new Error(`web_scrape could not retrieve ${t}: fetch failed (${f}) and render failed (${p}).`);throw m.cause=u,m}}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 ${t} (HTTP ${c??"error"}).`)}var BY,jY,HY,WY,fI=h(()=>{"use strict";ER();fy();$r();ne();BY=/(text\/html|application\/xhtml\+xml)/i,jY=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,HY=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,WY={"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 XY(t){let e=t.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let s=await e(GY,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":t.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),qY),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!s.ok){let c="";try{let d=await s.text(),u=Z(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 mI(t){return t.exaApiKey!==void 0&&t.exaApiKey.trim()!==""?XY({apiKey:t.exaApiKey,fetchFn:t.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 gI(t,e){if(e.length===0)return`# Search results for "${t}"
399
399
 
400
400
  (no results)`;let n=[`# Search results for "${t}"`,""];return e.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(`
401
401
  `).trimEnd()}var GY,qY,hI=h(()=>{"use strict";nt();GY="https://api.exa.ai/search",qY=10});function zd(t){if(t instanceof Error&&t.name==="TimeoutError")return"timeout";let e=t instanceof Error?t.message:String(t);return/Timeout\s+\d+\s*ms exceeded/i.test(e)?"timeout":void 0}var Wr=h(()=>{"use strict";_y()});function ZY(t){if(!t||typeof t!="object")return{error:"Invalid input: expected an object"};let e=t,n=e.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 e.query!="string"||e.query.length===0)return{error:'Invalid input: search mode requires a non-empty "query" string'};s=e.query}else{if(typeof e.url!="string"||e.url.length===0)return{error:`Invalid input: ${r} mode requires a non-empty "url" string`};let c;try{c=new URL(e.url)}catch{return{error:`Invalid input: "${e.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=zY;if(e.timeout_ms!==void 0){if(typeof e.timeout_ms!="number"||!Number.isFinite(e.timeout_ms)||e.timeout_ms<=0)return{error:"Invalid input: timeout_ms must be a positive finite number"};i=Math.min(e.timeout_ms,JY)}let a=VY;if(e.max_bytes!==void 0){if(typeof e.max_bytes!="number"||!Number.isFinite(e.max_bytes)||e.max_bytes<=0)return{error:"Invalid input: max_bytes must be a positive finite number"};a=Math.min(e.max_bytes,YY)}return{mode:r,url:o,query:s,timeoutMs:i,maxBytes:a}}function Dy(t,e){return Buffer.byteLength(t,"utf8")<=e?{content:t,truncated:!1}:{content:At(t,e),truncated:!0}}function e5(t={}){let e=t.fetchFn??globalThis.fetch,n=t.env??process.env,r=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{};return async(o,s)=>{if(typeof e!="function")return{content:"web_scrape unavailable: global fetch() is not present in this runtime (agent-afk requires Node 20+).",isError:!0};let i=ZY(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 Nr(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 g={method:"GET",headers:{"User-Agent":"agent-afk/web_scrape",Accept:"*/*"},signal:a.signal};p=await Bn(e,i.url,g,r)}catch(g){return a.signal.aborted?{content:`web_scrape aborted: ${d()}`,isError:!0}:g instanceof Pe?{content:`web_scrape blocked: ${g.message}`,isError:!0}:{content:`web_scrape network error: ${g instanceof Error?g.message:String(g)}`,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(g){return{content:`web_scrape read error: ${g instanceof Error?g.message:String(g)}`,isError:!0}}let m=Dy(f,i.maxBytes);return{content:m.content,...m.truncated?{truncated:!0}:{}}}if(i.mode==="markdown")try{let p=await pI(i.url,{fetchFn:e,renderFn:t.renderFn,timeoutMs:i.timeoutMs,signal:a.signal,...t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{}});if(p.markdown.trim().length===0)return{content:`web_scrape extracted no readable content from ${i.url}.`,isError:!0};let f=Dy(_R(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 Pe)return{content:`web_scrape blocked: ${p.message}`,isError:!0};let f=p instanceof Error?p.message:String(p),m=Ve(p)&&!Ey(f)?` (the render fallback needs the optional Playwright browser \u2014 run \`${aa()}\`)`:"";return{content:`web_scrape markdown error: ${f}${m}`,isError:!0}}let u=mI({exaApiKey:n.EXA_API_KEY,fetchFn:e});if("error"in u)return{content:u.error,isError:!0};try{let p=await u.search(i.query,{limit:QY,timeoutMs:i.timeoutMs,signal:a.signal}),f=Dy(gI(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 zY,JY,VY,YY,QY,yI,bI=h(()=>{"use strict";fI();hI();$r();Kt();fy();Wr();zY=3e4,JY=12e4,VY=1e5,YY=1e6,QY=10;yI=e5()});function r5(t){return t5.has(t)?"low":t==="DELETE"?"high":"medium"}function o5(t){return n5.has(t)}function a5(t){let e={};return t.forEach((n,r)=>{let o=r.toLowerCase();i5.has(o)||s5.some(s=>o.startsWith(s))||(e[r]=n)}),e}function c5(t,e){if(t==null)return{serialized:void 0,inferredContentType:void 0};let n=Object.keys(e).some(o=>o.toLowerCase()==="content-type");return typeof t=="string"?{serialized:t,inferredContentType:n?void 0:"text/plain"}:{serialized:JSON.stringify(t),inferredContentType:n?void 0:"application/json"}}function l5(t,e,n){let r=Buffer.byteLength(t,"utf8"),o=t,s=!1;if(r>n&&(o=At(t,n),s=!0),!s&&/application\/json/i.test(e))try{return{body:JSON.parse(o),truncated:!1}}catch{}return{body:o,truncated:s}}async function kI(t){let{url:e,method:n,signal:r,domainCheck:o,recordEffect:s}=t,i=Math.min(t.maxResponseBytes??Fy,Ly),a={...t.headers},c=t.fetchFn??globalThis.fetch,l=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},d=r5(n);if(o!==void 0){let T=o(e);if(!T.allowed)throw Object.assign(new Error(`web_request blocked by domain policy: ${T.reason}`),{name:"DomainPolicyError"})}let u=await Nr(e,l);if(!u.allowed)throw new Pe(u.reason);let{serialized:p,inferredContentType:f}=c5(t.body,a);f!==void 0&&(a["content-type"]=f);let m={method:n,headers:Object.keys(a).length>0?a:void 0,body:p,signal:r},y=o5(n)?{retries:2,baseDelayMs:300,maxDelayMs:5e3}:{retries:0},b=Date.now(),w;try{w=await Bn(c,e,m,{...l,retry:y})}catch(T){throw T instanceof Pe,T}let v=Date.now()-b,x=w.headers.get("content-type")??"",A;try{let T=w.body?.getReader();if(!T)A="";else{let R=[],E=0,C=i*2;for(;;){let{done:H,value:M}=await T.read();if(H||!M)break;if(R.push(M),E+=M.byteLength,E>=C){await T.cancel();break}}A=new TextDecoder().decode(Buffer.concat(R,E))}}catch{A=""}let{body:_,truncated:I}=l5(A,x,i),P=a5(w.headers);return s!==void 0&&Promise.resolve(s({url:e,method:n,status:w.status,risk:d,timing_ms:v})).catch(()=>{}),{status:w.status,headers:P,body:_,truncated:I,timing_ms:v,risk:d}}function vI(t){if(typeof t!="string"||t.trim().length===0)return{error:"method must be a non-empty string (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS)"};let e=t.trim().toUpperCase(),n=["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"];return n.includes(e)?e:{error:`method "${t}" is not supported \u2014 must be one of: ${n.join(", ")}`}}var wI,SI,Fy,Ly,t5,n5,s5,i5,TI=h(()=>{"use strict";$r();Kt();wI=3e4,SI=12e4,Fy=1e5,Ly=1e6,t5=new Set(["GET","HEAD","OPTIONS"]),n5=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]);s5=["set-cookie","x-"],i5=new Set(["server","via","age","vary","authorization","www-authenticate"])});function d5(t){if(!t||typeof t!="object")return{error:"Invalid input: expected an object"};let e=t;if(typeof e.url!="string"||e.url.length===0)return{error:'Invalid input: "url" must be a non-empty string'};let n;try{n=new URL(e.url)}catch{return{error:`Invalid input: "${e.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=vI(e.method);if(typeof o=="object"&&"error"in o)return{error:`Invalid input: ${o.error}`};let s=o,i;if(e.body!==void 0&&e.body!==null){if(typeof e.body!="string"&&typeof e.body!="object")return{error:'Invalid input: "body" must be a string, object, or array'};i=e.body}let a={};if(e.headers!==void 0){if(typeof e.headers!="object"||e.headers===null||Array.isArray(e.headers))return{error:'Invalid input: "headers" must be a string-keyed object'};let u=e.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=wI;if(e.timeout_ms!==void 0){if(typeof e.timeout_ms!="number"||!Number.isFinite(e.timeout_ms)||e.timeout_ms<=0)return{error:'Invalid input: "timeout_ms" must be a positive finite number'};c=Math.min(e.timeout_ms,SI)}let l=Fy;if(e.max_response_bytes!==void 0){if(typeof e.max_response_bytes!="number"||!Number.isFinite(e.max_response_bytes)||e.max_response_bytes<=0)return{error:'Invalid input: "max_response_bytes" must be a positive finite number'};l=Math.min(e.max_response_bytes,Ly)}let d;if(e.credential!==void 0){if(typeof e.credential!="string"||e.credential.length===0)return{error:'Invalid input: "credential" must be a non-empty string (an env var name)'};d=e.credential}return{url:r,method:s,body:i,headers:a,timeoutMs:c,maxResponseBytes:l,credential:d}}function u5(t={}){let e=t.fetchFn??globalThis.fetch,n=t.env??process.env;async function r(){if(t.domainCheck!==void 0)return t.domainCheck;try{let{loadBrowserConfig:o,enforceDomainPolicy:s}=await Promise.resolve().then(()=>(jn(),yy)),i=o();return a=>s(a,i)}catch{return}}return async(o,s)=>{if(typeof e!="function")return{content:"web_request unavailable: global fetch() is not present (agent-afk requires Node 20+).",isError:!0};let i=d5(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(m=>m.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:e,lookupFn:t.lookupFn,domainCheck:p,recordEffect:t.recordEffect},m;try{m=await kI(f)}catch(w){if(c.signal.aborted)return{content:`web_request aborted: ${u()}`,isError:!0};if(w instanceof Pe)return{content:`web_request blocked: ${w.message}`,isError:!0};let v=w instanceof Error&&w.name==="DomainPolicyError"?"blocked":"network error",x=w instanceof Error?w.message:String(w);return{content:`web_request ${v}: ${x}`,isError:!0}}if(c.signal.aborted)return{content:`web_request aborted: ${u()}`,isError:!0};let g=m.body;if(typeof g=="string")g=Ge(g);else if(typeof g=="object"&&g!==null){let w=Ge(JSON.stringify(g));try{g=JSON.parse(w)}catch{g=w}}let y={status:m.status,headers:m.headers,body:g,timing_ms:m.timing_ms,...m.truncated?{truncated:!0}:{}};return{content:JSON.stringify(y,null,2),...m.truncated?{truncated:!0}:{}}}finally{d!==void 0&&clearTimeout(d),s.removeEventListener("abort",l)}}}var EI,_I=h(()=>{"use strict";TI();$r();xn();EI=u5()});import{existsSync as AI,mkdirSync as p5,readFileSync as f5,renameSync as m5,unlinkSync as g5,writeFileSync as h5}from"node:fs";import{dirname as xI,join as y5}from"node:path";import{randomBytes as b5}from"node:crypto";function Kr(t){let e=t??Xm();if(!AI(e))return[];try{let n=f5(e,"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 ${e}: ${r}`),[]}}function ca(t,e){let n=e??Xm();p5(xI(n),{recursive:!0});let r=y5(xI(n),`.schedules.json.${process.pid}.${b5(4).toString("hex")}.tmp`),o=JSON.stringify(t,null,2);try{h5(r,o,"utf-8"),m5(r,n)}catch(s){try{AI(r)&&g5(r)}catch{}throw s}}function RI(t,e){let n=Kr(e),r=n.map(c=>c.id),o=w5(t.name),s=S5(o,r),i=new Date().toISOString(),a={...t,notifyOn:t.notifyOn??"failure",id:s,createdAt:i,updatedAt:i};return n.push(a),ca(n,e),a}function II(t,e){let n=Kr(e),r=n.length,o=n.filter(s=>s.id!==t);return o.length===r?!1:(ca(o,e),!0)}function PI(t,e){return Kr(e).find(n=>n.id===t)}function w5(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"")}function S5(t,e){if(!e.includes(t))return t;let n=2;for(;e.includes(`${t}-${n}`);)n+=1;return`${t}-${n}`}function CI(t){return{taskId:t.id,command:t.command,trigger:t.trigger??"cron",...t.executor!==void 0?{executor:t.executor}:{},...t.cron!==void 0?{cronExpression:t.cron}:{},...t.notifyOn!==void 0?{notifyOn:t.notifyOn}:{},...t.notifyChat!==void 0?{notifyChat:t.notifyChat}:{}}}var MI=h(()=>{"use strict";N()});import{existsSync as k5,readFileSync as v5}from"node:fs";import{join as T5}from"node:path";async function Zo(t,e,n){let r,o;try{let s=T5(nT("default"),"port");if(!k5(s))return{synced:!1,detail:"daemon-not-detected (no port file)"};let i=v5(s,"utf-8").trim(),a=E5(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}${e}`,{method:t,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"}:t==="POST"&&i.status===409?{synced:!0,detail:"already-registered"}:t==="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 E5(t){let e=parseInt(t,10);if(String(e)===t&&!Number.isNaN(e))return e<1||e>65535?null:{host:"localhost",port:e};let n=t.lastIndexOf(":");if(n<1)return null;let r=t.slice(0,n),o=t.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 Ny,OI=h(()=>{"use strict";N();Ny="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 _5}from"node:fs";import{readFile as x5}from"node:fs/promises";var DI,FI,LI,NI,$I=h(()=>{"use strict";MI();N();OI();DI=async(t,e)=>{if(!t||typeof t!="object")return{content:"Invalid input: expected object",isError:!0};let n=t;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=RI({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 Zo("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 Zo("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:Ny}})}},FI=async(t,e)=>{let n=Kr();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})))}},LI=async(t,e)=>{if(!t||typeof t!="object")return{content:"Invalid input: expected object",isError:!0};let n=t;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=Xc();if(!_5(s))return{content:JSON.stringify([])};let i;try{let l=await x5(s);i=(l.length>1048576?l.subarray(l.length-1048576):l).toString("utf-8")}catch{return{content:JSON.stringify([])}}let a=i.split(`
@@ -1091,7 +1091,7 @@ Available skills: ${n.join(", ")}`:"";throw new Error(`Skill not found: ${t}${r}
1091
1091
 
1092
1092
  ${t}`:e:[{type:"text",text:e},...t]}var Ku,jO=h(()=>{"use strict";Vb();Yb();ne();Ku=class{outerIterator;baseConfig;deps;currentModel;currentPermissionMode;currentCwd;currentSystemPrompt;systemPromptOverridden=!1;startupFamily;active;activeModel;closed=!1;shadowHistory;pendingUserText;pendingAssistantText="";lastSessionId;constructor(e,n){this.outerIterator=e.prompt[Symbol.asyncIterator](),this.baseConfig=e.config,this.deps=n,this.currentModel=typeof e.config.model=="string"?e.config.model:void 0,this.currentPermissionMode=e.config.permissionMode,this.currentCwd=e.config.cwd,this.startupFamily=n.providerNameForModel(this.currentModel),this.shadowHistory=[...e.config.resumeHistory??[]]}resolveInner(e){let n=this.deps.resolveProvider(e),r={...this.baseConfig};r.model=e??this.baseConfig.model;let o=n.name===this.startupFamily&&this.baseConfig.apiKey!==void 0?this.baseConfig.apiKey:this.deps.resolveApiKey(e);o!==void 0?r.apiKey=o:delete r.apiKey,Wu(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(e,n){let{provider:r,innerConfig:o,signature:s}=this.resolveInner(e),i=new ss(()=>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 e=this.active;if(e){this.active=void 0;try{await e.iterator.return?.(void 0)}catch{}try{await e.query.close()}catch{}}}observeEvent(e){e.type==="assistant.message"&&(this.pendingAssistantText+=(this.pendingAssistantText?`
1093
1093
  `:"")+e.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 e=await this.outerIterator.next();if(e.done)break;let n=e.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=o9(s,this.currentModel??"(unset)",i,this.active.family)),yield*this.driveUntilInit(!0)))break;for(this.pendingUserText=r9(n.content),this.pendingAssistantText="",this.active.input.pushUserMessage(a?s9(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(e){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 e||(yield r),!1;if(r.type==="error")return yield r,this.closed=!0,!0;yield r}}async interrupt(e="interrupted"){await this.active?.query.interrupt(e)}async setModel(e){typeof e=="string"&&e.length>0&&(this.currentModel=e,this.active&&this.resolveInner(e).signature===this.active.signature&&await this.active.query.setModel(e))}async setPermissionMode(e){this.currentPermissionMode=e,await this.active?.query.setPermissionMode(e)}setCwd(e){this.currentCwd=e,this.active?.query.setCwd?.(e)}setSystemPrompt(e){return this.currentSystemPrompt=e,this.systemPromptOverridden=!0,this.active?.query.setSystemPrompt?.(e)??!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(e,n){let r=this.active;return r?r.query.rewindFiles(e,n):{canRewind:!1,error:"no active provider"}}async compact(){let e=this.active;return e?.query.compact?e.query.compact():{compacted:!1,reason:"provider does not support compaction",messagesBefore:0,messagesAfter:0}}listRewindTargets(){return this.active?.query.listRewindTargets?.()??[]}async rewindConversation(e){let n=this.active;return n?.query.rewindConversation?n.query.rewindConversation(e):{rewound:!1,reason:"not-supported",messagesBefore:0,messagesAfter:0}}async reloadPlugins(...e){let n=this.active?.query;if(n&&typeof n.reloadPlugins=="function")return n.reloadPlugins(...e)}async close(){this.closed=!0,await this.closeActive()}}});async function Gu(t,e,n){if(!t)return;if(n.kind==="blocked"){await ut(t,{hookEvent:e,decision:"block",...n.err.reason!==void 0?{reason:n.err.reason}:{}});return}let r=n.decision;await ut(t,{hookEvent:e,decision:r.decision,...r.reason!==void 0?{reason:r.reason}:{},...r.injectContext!==void 0?{injectedContextBytes:Buffer.byteLength(r.injectContext,"utf8")}:{}})}async function HO(t,e,n={}){if(t)try{let r=await t.dispatch(e,n.signal);return await Gu(n.traceWriter,"SessionStart",{kind:"decision",decision:r}),r.injectContext}catch(r){throw r instanceof te&&await Gu(n.traceWriter,"SessionStart",{kind:"blocked",err:r}),r}}async function WO(t,e,n={}){if(t)try{let r=await t.dispatch(e,n.signal);await Gu(n.traceWriter,"SessionEnd",{kind:"decision",decision:r})}catch(r){if(r instanceof te&&await Gu(n.traceWriter,"SessionEnd",{kind:"blocked",err:r}),r instanceof te||r instanceof Xe){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 Qb=h(()=>{"use strict";ne();ie();J()});function KO(t){try{let e=JSON.parse(t);if(!Array.isArray(e))return null;let n=e.length;if(n===0)return"no results";let r=0,o=0;for(let a of e)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 GO(t){try{let e=JSON.parse(t);if(!e||typeof e!="object")return null;let n=e;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 qO(t){try{let e=JSON.parse(t);if(!e||typeof e!="object")return null;let n=e;return typeof n.name=="string"&&n.written===!0?`wrote procedure '${n.name}'`:null}catch{return null}}var XO=h(()=>{"use strict"});function Zb(t){let e=t.trim();if(e.length===0)return null;let n=e[0];if(n!=="{"&&n!=="[")return null;let r=e[e.length-1];if(n==="{"&&r!=="}"||n==="["&&r!=="]")return null;let o;try{o=JSON.parse(e)}catch{return null}return Array.isArray(o)?zO(i9(o)):o!==null&&typeof o=="object"?zO(a9(o)):null}function i9(t){return t.length===0?"[empty array]":t.length===1?"[1 item]":`[${t.length} items]`}function a9(t){let e=Object.keys(t);if(e.length===0)return"{empty object}";let n=e.slice(0,4),r=e.length>4?", \u2026":"";return`{${n.join(", ")}${r}}`}function zO(t){return t.length<=80?t:t.slice(0,79)+"\u2026"}var JO=h(()=>{"use strict"});function VO(t,e){if(!t)return null;let n=c9.get(t);if(!n)return null;try{let r=n(e);if(r===null)return null;let o=Z(r);return o.length>0?o:null}catch{return null}}var c9,YO=h(()=>{"use strict";XO();JO();nt();c9=new Map([["memory_search",KO],["memory_update",GO],["procedure_write",qO],["bash",Zb],["Bash",Zb]])});function QO(t,e){if(t===void 0||t.trim()==="")return e;let n=Number(t.trim());return!Number.isInteger(n)||n<l9||n>d9?e:n}function ZO(){return{tailCount:QO(k.AFK_BASH_PREVIEW_TAIL_LINES,u9),headCount:QO(k.AFK_BASH_PREVIEW_HEAD_LINES,p9)}}function e0(t,e,n){if(t.length===0)return{head:[],tail:[]};if(e+n>=t.length){let s=t.slice(0,e),i=t.slice(e);return{head:s,tail:i}}let r=e>0?t.slice(0,e):[],o=n>0?t.slice(t.length-n):[];return{head:r,tail:o}}var l9,d9,u9,p9,t0=h(()=>{"use strict";F();l9=0,d9=200,u9=7,p9=0});function f9(t){if(t<1024)return`${t}B`;let e=t/1024;if(e<1024)return e%1===0?`${Math.floor(e)}KB`:`${e.toFixed(1)}KB`;let n=e/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 n0(t){let e=Buffer.byteLength(t,"utf8"),n=f9(e),r=t.split(`
1094
- `);if(r.length<=1)return t.length<=80?{content:t,truncated:!1,sizeBytes:e,sizeLabel:n}:{content:t.substring(0,80)+"\u2026",truncated:!0,sizeBytes:e,sizeLabel:n};let{tailCount:o,headCount:s}=ZO(),i=r.filter(g=>g.trim()!==""),{head:a,tail:c}=e0(i,s,o),l=a.length+c.length,d=r.length-l,u=[...a,...c];if(t.length<=80)return{content:t,truncated:!1,lineCount:r.length,sizeBytes:e,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:e,sizeLabel:n,tailPreview:u,hiddenLineCount:d}}var r0=h(()=>{"use strict";t0()});function m9(t){let e=/Output too large \((\d+(?:\.\d+)?)\s*(B|KB|MB|GB)\)\.\s*Full output saved to:\s*(\/[^\n]+)/,n=t.match(e);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 g9(t,e){let n={...t.raw??{}};return t.inputTokens!==void 0&&(n.input_tokens=t.inputTokens),t.outputTokens!==void 0&&(n.output_tokens=t.outputTokens),t.cachedInputTokens!==void 0&&(n.cache_read_input_tokens=t.cachedInputTokens),t.cacheCreationTokens!==void 0&&(n.cache_creation_input_tokens=t.cacheCreationTokens),t.totalTokens!==void 0&&(n.total_tokens=t.totalTokens),t.contextWindowTokens!==void 0&&(n.context_window_tokens=t.contextWindowTokens),{sessionId:e,stopReason:t.stopReason??void 0,resultSubtype:t.resultSubtype,durationMs:t.durationMs,durationApiMs:t.durationApiMs,totalCostUsd:t.totalCostUsd,isError:t.isError,usage:Object.keys(n).length>0?n:void 0,modelUsage:t.modelUsage,permissionDenials:t.permissionDenials,errors:t.errors}}function h9(t){let e=t.isError===!0?null:VO(t.toolName,t.content),n=e!==null?{display:e}:{},r=typeof t.batchIndex=="number"&&typeof t.batchSize=="number"?{batchIndex:t.batchIndex,batchSize:t.batchSize}:{},o=t.failureClass?{failureClass:t.failureClass}:{},s=m9(t.content);if(s)return{type:"chunk",chunk:{type:"tool_result",toolUseId:t.toolUseId,content:`Output persisted (${s.sizeLabel}) \u2192 ${s.absolutePath}`,isError:t.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}=n0(t.content);return{type:"chunk",chunk:{type:"tool_result",toolUseId:t.toolUseId,content:i,isError:t.isError===!0,sizeBytes:c,sizeLabel:l,...t.truncated===!0&&{truncated:!0},...t.capturePath!==void 0&&{capturePath:t.capturePath},...a!==void 0&&{lineCount:a},...d!==void 0&&d.length>0&&{tailPreview:d},...u!==void 0&&{hiddenLineCount:u},...t.exitCode!==void 0&&{exitCode:t.exitCode},...t.durationMs!==void 0&&{durationMs:t.durationMs},...n,...r,...o}}}function qu(t,e){switch(t.type){case"session.init":{let n=t.info;return e.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}:{}})),e.updateSessionIdentity(n.sessionId),e.resolveInitialization(),null}case"session.status":return e.setSessionMetadata(n=>({...n,sessionId:t.sessionId,...t.permissionMode!==void 0?{permissionMode:t.permissionMode}:{permissionMode:n.permissionMode},...t.status!==void 0?{status:t.status}:{}})),null;case"delta.text":return{type:"chunk",chunk:{type:"content",content:t.text,metadata:{eventType:"delta",deltaType:"text_delta"}}};case"delta.reasoning":return{type:"chunk",chunk:{type:"thinking",content:t.text,metadata:{eventType:"delta",deltaType:"thinking_delta"}}};case"assistant.message":if(t.sessionId&&e.updateSessionIdentity(t.sessionId),t.text){let n={role:"assistant",content:t.text,timestamp:new Date};return e.conversationHistory.push(n),{type:"message",message:n}}return null;case"tool.use.start":return{type:"chunk",chunk:{type:"tool_use_detail",toolUseId:t.toolUseId,toolName:t.toolName,toolInput:t.toolInput,toolInputRaw:t.toolInputRaw,toolInputCapture:t.toolInputCapture,...t.pending?{pending:!0}:{}}};case"tool.use":return{type:"chunk",chunk:{type:"tool_use",content:t.summary,metadata:{eventType:"tool_use_summary",precedingToolUseIds:t.toolUseIds}}};case"tool.output":return t.isError!==!0&&t.toolName&&(e._successfulToolNames??=[]).push(t.toolName),h9(t);case"tool.diff":return{type:"chunk",chunk:{type:"tool_diff",toolUseId:t.toolUseId,diff:t.diff}};case"progress":return{type:"progress",progress:{taskId:t.progress.taskId,description:t.progress.description,...t.progress.summary!==void 0?{summary:t.progress.summary}:{},...t.progress.lastToolName!==void 0?{lastToolName:t.progress.lastToolName}:{},totalTokens:t.progress.totalTokens,toolUses:t.progress.toolUses,durationMs:t.progress.durationMs}};case"suggestion":return{type:"suggestion",suggestion:t.suggestion};case"turn.completed":{let n=g9(t.usage,t.sessionId??e.getSessionMetadata().sessionId);e._successfulToolNames!==void 0&&e._successfulToolNames.length>0&&(n.successfulToolNames=[...e._successfulToolNames]),e.setLastResponseMetadata(n);for(let r=e.conversationHistory.length-1;r>=0;r--){let o=e.conversationHistory[r];if(o?.role==="assistant"){o.metadata=n;break}}if(e.maxBudgetUsd!==void 0&&e.abortBudget!==void 0&&typeof n.totalCostUsd=="number"&&(e._runningCostUsd=(e._runningCostUsd??0)+n.totalCostUsd,e._runningCostUsd>=e.maxBudgetUsd)){cx(e.traceWriter,{kind:"monetary",runningCostUsd:e._runningCostUsd,maxBudgetUsd:e.maxBudgetUsd,lastTurnCostUsd:n.totalCostUsd});let r=new In(e._runningCostUsd,e.maxBudgetUsd);return e.abortBudget(r),{type:"error",error:r}}return{type:"done",metadata:n}}case"error":return{type:"error",error:t.error};case"paused":return{type:"paused",reason:t.reason,...t.resetsAt!==void 0?{resetsAt:t.resetsAt}:{},...t.accountId!==void 0?{accountId:t.accountId}:{},...t.autoResume!==void 0?{autoResume:t.autoResume}:{}};case"resumed":return{type:"resumed",hotSwapped:t.hotSwapped,...t.accountId!==void 0?{accountId:t.accountId}:{}};case"stream.retry":return{type:"stream_retry"};case"rate_limit":return{type:"rate_limit",...t.retryAfterMs!==void 0?{retryAfterMs:t.retryAfterMs}:{}};case"notice":return{type:"notice",text:t.text,kind:t.kind};case"tool.activity":return{type:"tool-activity",activeCount:t.activeCount,activeToolUseIds:t.activeToolUseIds};default:return null}}var ew=h(()=>{"use strict";ie();J();YO();r0()});var Xu,o0=h(()=>{"use strict";Xu=class{initializationPromise;resolveInitialization;rejectInitialization;initializationSettled=!1;sessionMetadata;sessionIdentity;constructor(e,n){this.sessionIdentity=e,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(e){e&&(this.sessionIdentity={...this.sessionIdentity,sessionId:e},this.sessionMetadata={...this.sessionMetadata,sessionId:e})}setSessionMetadata(e){this.sessionMetadata=e(this.sessionMetadata)}resolveInitializationIfNeeded(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}resolveInitializationOnce(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}rejectInitializationOnce(e){this.initializationSettled||(this.initializationSettled=!0,this.rejectInitialization(e))}isInitializationSettled(){return this.initializationSettled}}});function s0(t){t.models&&Ml(t.models),Wu(t);let e=me(t.model)??t.model,{sessionIdentity:n,metadata:r}=wO(t,e),o=new Xu(n,r),s=new ss(()=>o.getSessionId()),i=s.createIterable(),a;if(t.provider)O(`\u{1F7E2} AgentSession: Creating query session via injected provider=${t.provider.name}`),a=t.provider.query({prompt:i,config:t});else{O("\u{1F7E2} AgentSession: Creating query session via ProviderRouter");let d=t.providerFactory?t.providerFactory:u=>c0(u,void 0,{customTools:t.customTools,canUseTool:t.canUseTool});a=new Ku({prompt:i,config:t},{resolveProvider:d,providerNameForModel:u=>z(u),resolveApiKey:u=>oe(u)})}let l=a[Symbol.asyncIterator]();return{stateManager:o,inputStream:s,providerQuery:a,providerIterator:l}}async function i0(t,e,n,r,o,s,i,a,c){try{let l=await HO(i,{event:"SessionStart",sessionId:r.getSessionId(),parentSessionId:t.parentSessionId},{signal:n,...t.traceWriter?{traceWriter:t.traceWriter}:{}});for(l&&t.parentSessionId===void 0&&a(l);;){let d=await e.next();if(d.done){r.resolveInitializationIfNeeded();return}let u=d.value,p=qu(u,c());if(u.type==="session.init"){await G(t.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 te&&o.markHookBlocked(),r.isInitializationSettled()||r.rejectInitializationOnce(d),await s.dispatchOnce("error").catch(()=>{})}}var a0=h(()=>{"use strict";ne();J();fe();jO();ge();Qb();ie();ew();qb();o0();ze();Fe();Yb();Vb()});import{mkdirSync as y9,appendFileSync as b9,existsSync as w9}from"fs";import{resolve as S9,dirname as k9,isAbsolute as v9}from"path";function l0(t){let e=t[1],n=t[2],r=n[0],o=(r==='"'||r==="'")&&n.at(-1)===r?n.slice(1,-1):n,s=/(?:^|_)(?:PATH|FILE)(?:_|$)/i.test(e),i=v9(o)||o.startsWith("~/"),c=o.split(/[\\/]/).filter(Boolean).some(l=>/[A-Z0-9.\-]/.test(l));return s&&i&&c&&fg(o)?`${e}=${n}`:`${e}=<REDACTED length=${n.length}>`}function Qr(t){let e=t;for(let[n,r]of _9)e=e.replace(n,(...o)=>{let s=o.slice(0,o.length-2);return r(s)});return e}function tw(t){return typeof t=="string"?Qr(t):Array.isArray(t)?t.map(tw):t}function x9(t){if(t===null||typeof t!="object")return t;let e=t,n={...e},r=e.env;if(r&&typeof r=="object"){let o={};for(let[s,i]of Object.entries(r))E9.test(s)&&typeof i=="string"?o[s]=`<REDACTED length=${i.length}>`:o[s]=i;n.env=o}return"system"in e&&(n.system=tw(e.system)),"systemPrompt"in e&&(n.systemPrompt=tw(e.systemPrompt)),n}function A9(t){if(t==null)return{kind:"undefined",note:"SDK uses minimal prompt; claude_code preset NOT loaded"};if(typeof t=="string")return{kind:"custom-string",note:"SDK uses this string as full system prompt; claude_code preset NOT loaded"};if(Array.isArray(t))return{kind:"custom-string-array",note:"SDK uses array as full system prompt with cache boundaries; claude_code preset NOT loaded"};if(typeof t=="object"){let e=t;if(e.type==="preset"&&e.preset==="claude_code"){let n={kind:"preset-claude-code",note:"claude_code preset loaded"};return typeof e.append=="string"&&(n.append={length:e.append.length}),e.excludeDynamicSections===!0&&(n.excludeDynamicSections=!0),n}return{kind:"custom-string",note:"Unrecognized systemPrompt shape; treated as opaque"}}return{kind:"custom-string",note:"Unrecognized systemPrompt shape; treated as opaque"}}function d0(t){let e=k.AFK_DUMP_PROMPT;if(!e||e===""||e==="0"||e.toLowerCase()==="false")return;process.stderr.write(`[--dump-prompt] WARNING: dump may contain secrets from system prompt or messages. Inspect before sharing.
1094
+ `);if(r.length<=1)return t.length<=80?{content:t,truncated:!1,sizeBytes:e,sizeLabel:n}:{content:t.substring(0,80)+"\u2026",truncated:!0,sizeBytes:e,sizeLabel:n};let{tailCount:o,headCount:s}=ZO(),i=r.filter(g=>g.trim()!==""),{head:a,tail:c}=e0(i,s,o),l=a.length+c.length,d=r.length-l,u=[...a,...c];if(t.length<=80)return{content:t,truncated:!1,lineCount:r.length,sizeBytes:e,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:e,sizeLabel:n,tailPreview:u,hiddenLineCount:d}}var r0=h(()=>{"use strict";t0()});function m9(t){let e=/Output too large \((\d+(?:\.\d+)?)\s*(B|KB|MB|GB)\)\.\s*Full output saved to:\s*(\/[^\n]+)/,n=t.match(e);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 g9(t,e){let n={...t.raw??{}};return t.inputTokens!==void 0&&(n.input_tokens=t.inputTokens),t.outputTokens!==void 0&&(n.output_tokens=t.outputTokens),t.cachedInputTokens!==void 0&&(n.cache_read_input_tokens=t.cachedInputTokens),t.cacheCreationTokens!==void 0&&(n.cache_creation_input_tokens=t.cacheCreationTokens),t.totalTokens!==void 0&&(n.total_tokens=t.totalTokens),t.contextWindowTokens!==void 0&&(n.context_window_tokens=t.contextWindowTokens),{sessionId:e,stopReason:t.stopReason??void 0,resultSubtype:t.resultSubtype,durationMs:t.durationMs,durationApiMs:t.durationApiMs,totalCostUsd:t.totalCostUsd,isError:t.isError,usage:Object.keys(n).length>0?n:void 0,modelUsage:t.modelUsage,permissionDenials:t.permissionDenials,errors:t.errors}}function h9(t){let e=t.isError===!0?null:VO(t.toolName,t.content),n=e!==null?{display:e}:{},r=typeof t.batchIndex=="number"&&typeof t.batchSize=="number"?{batchIndex:t.batchIndex,batchSize:t.batchSize}:{},o=t.failureClass?{failureClass:t.failureClass}:{},s=m9(t.content);if(s)return{type:"chunk",chunk:{type:"tool_result",toolUseId:t.toolUseId,content:`Output persisted (${s.sizeLabel}) \u2192 ${s.absolutePath}`,isError:t.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}=n0(t.content);return{type:"chunk",chunk:{type:"tool_result",toolUseId:t.toolUseId,content:i,isError:t.isError===!0,sizeBytes:c,sizeLabel:l,...t.truncated===!0&&{truncated:!0},...t.capturePath!==void 0&&{capturePath:t.capturePath},...a!==void 0&&{lineCount:a},...d!==void 0&&d.length>0&&{tailPreview:d},...u!==void 0&&{hiddenLineCount:u},...t.exitCode!==void 0&&{exitCode:t.exitCode},...t.durationMs!==void 0&&{durationMs:t.durationMs},...n,...r,...o}}}function qu(t,e){switch(t.type){case"session.init":{let n=t.info;return e.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}:{}})),e.updateSessionIdentity(n.sessionId),e.resolveInitialization(),null}case"session.status":return e.setSessionMetadata(n=>({...n,sessionId:t.sessionId,...t.permissionMode!==void 0?{permissionMode:t.permissionMode}:{permissionMode:n.permissionMode},...t.status!==void 0?{status:t.status}:{}})),null;case"delta.text":return{type:"chunk",chunk:{type:"content",content:t.text,metadata:{eventType:"delta",deltaType:"text_delta"}}};case"delta.reasoning":return{type:"chunk",chunk:{type:"thinking",content:t.text,metadata:{eventType:"delta",deltaType:"thinking_delta"}}};case"assistant.message":if(t.sessionId&&e.updateSessionIdentity(t.sessionId),t.text){let n={role:"assistant",content:t.text,timestamp:new Date};return e.conversationHistory.push(n),{type:"message",message:n}}return null;case"tool.use.start":return{type:"chunk",chunk:{type:"tool_use_detail",toolUseId:t.toolUseId,toolName:t.toolName,toolInput:t.toolInput,toolInputRaw:t.toolInputRaw,toolInputCapture:t.toolInputCapture,...t.pending?{pending:!0}:{}}};case"tool.use":return{type:"chunk",chunk:{type:"tool_use",content:t.summary,metadata:{eventType:"tool_use_summary",precedingToolUseIds:t.toolUseIds}}};case"tool.output":return t.isError!==!0&&t.toolName&&(e._successfulToolNames??=[]).push(t.toolName),h9(t);case"tool.diff":return{type:"chunk",chunk:{type:"tool_diff",toolUseId:t.toolUseId,diff:t.diff}};case"progress":return{type:"progress",progress:{taskId:t.progress.taskId,description:t.progress.description,...t.progress.summary!==void 0?{summary:t.progress.summary}:{},...t.progress.lastToolName!==void 0?{lastToolName:t.progress.lastToolName}:{},totalTokens:t.progress.totalTokens,toolUses:t.progress.toolUses,durationMs:t.progress.durationMs}};case"suggestion":return{type:"suggestion",suggestion:t.suggestion};case"turn.completed":{let n=g9(t.usage,t.sessionId??e.getSessionMetadata().sessionId);e._successfulToolNames!==void 0&&e._successfulToolNames.length>0&&(n.successfulToolNames=[...e._successfulToolNames]),e.setLastResponseMetadata(n);for(let r=e.conversationHistory.length-1;r>=0;r--){let o=e.conversationHistory[r];if(o?.role==="assistant"){o.metadata=n;break}}if(e.maxBudgetUsd!==void 0&&e.abortBudget!==void 0&&typeof n.totalCostUsd=="number"&&(e._runningCostUsd=(e._runningCostUsd??0)+n.totalCostUsd,e._runningCostUsd>=e.maxBudgetUsd)){cx(e.traceWriter,{kind:"monetary",runningCostUsd:e._runningCostUsd,maxBudgetUsd:e.maxBudgetUsd,lastTurnCostUsd:n.totalCostUsd});let r=new In(e._runningCostUsd,e.maxBudgetUsd);return e.abortBudget(r),{type:"error",error:r}}return{type:"done",metadata:n}}case"error":return{type:"error",error:t.error};case"paused":return{type:"paused",reason:t.reason,...t.resetsAt!==void 0?{resetsAt:t.resetsAt}:{},...t.accountId!==void 0?{accountId:t.accountId}:{},...t.autoResume!==void 0?{autoResume:t.autoResume}:{}};case"resumed":return{type:"resumed",hotSwapped:t.hotSwapped,...t.accountId!==void 0?{accountId:t.accountId}:{}};case"stream.retry":return{type:"stream_retry"};case"rate_limit":return{type:"rate_limit",...t.retryAfterMs!==void 0?{retryAfterMs:t.retryAfterMs}:{}};case"notice":return{type:"notice",text:t.text,kind:t.kind};case"tool.activity":return{type:"tool-activity",activeCount:t.activeCount,activeToolUseIds:t.activeToolUseIds};default:return null}}var ew=h(()=>{"use strict";ie();J();YO();r0()});var Xu,o0=h(()=>{"use strict";Xu=class{initializationPromise;resolveInitialization;rejectInitialization;initializationSettled=!1;sessionMetadata;sessionIdentity;constructor(e,n){this.sessionIdentity=e,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(e){e&&(this.sessionIdentity={...this.sessionIdentity,sessionId:e},this.sessionMetadata={...this.sessionMetadata,sessionId:e})}setSessionMetadata(e){this.sessionMetadata=e(this.sessionMetadata)}resolveInitializationIfNeeded(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}resolveInitializationOnce(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}rejectInitializationOnce(e){this.initializationSettled||(this.initializationSettled=!0,this.rejectInitialization(e))}isInitializationSettled(){return this.initializationSettled}}});function s0(t){t.models&&Ml(t.models),Wu(t);let e=me(t.model)??t.model,{sessionIdentity:n,metadata:r}=wO(t,e),o=new Xu(n,r),s=new ss(()=>o.getSessionId()),i=s.createIterable(),a;if(t.provider)O(`\u{1F7E2} AgentSession: Creating query session via injected provider=${t.provider.name}`),a=t.provider.query({prompt:i,config:t});else{O("\u{1F7E2} AgentSession: Creating query session via ProviderRouter");let d=t.providerFactory?t.providerFactory:u=>c0(u,void 0,{customTools:t.customTools,canUseTool:t.canUseTool});a=new Ku({prompt:i,config:t},{resolveProvider:d,providerNameForModel:u=>z(u),resolveApiKey:u=>oe(u)})}let l=a[Symbol.asyncIterator]();return{stateManager:o,inputStream:s,providerQuery:a,providerIterator:l}}async function i0(t,e,n,r,o,s,i,a,c){try{let l=await HO(i,{event:"SessionStart",sessionId:r.getSessionId(),parentSessionId:t.parentSessionId},{signal:n,...t.traceWriter?{traceWriter:t.traceWriter}:{}});for(l&&t.parentSessionId===void 0&&a(l);;){let d=await e().next();if(d.done){r.resolveInitializationIfNeeded();return}let u=d.value,p=qu(u,c());if(u.type==="session.init"){await G(t.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 te&&o.markHookBlocked(),r.isInitializationSettled()||r.rejectInitializationOnce(d),await s.dispatchOnce("error").catch(()=>{})}}var a0=h(()=>{"use strict";ne();J();fe();jO();ge();Qb();ie();ew();qb();o0();ze();Fe();Yb();Vb()});import{mkdirSync as y9,appendFileSync as b9,existsSync as w9}from"fs";import{resolve as S9,dirname as k9,isAbsolute as v9}from"path";function l0(t){let e=t[1],n=t[2],r=n[0],o=(r==='"'||r==="'")&&n.at(-1)===r?n.slice(1,-1):n,s=/(?:^|_)(?:PATH|FILE)(?:_|$)/i.test(e),i=v9(o)||o.startsWith("~/"),c=o.split(/[\\/]/).filter(Boolean).some(l=>/[A-Z0-9.\-]/.test(l));return s&&i&&c&&fg(o)?`${e}=${n}`:`${e}=<REDACTED length=${n.length}>`}function Qr(t){let e=t;for(let[n,r]of _9)e=e.replace(n,(...o)=>{let s=o.slice(0,o.length-2);return r(s)});return e}function tw(t){return typeof t=="string"?Qr(t):Array.isArray(t)?t.map(tw):t}function x9(t){if(t===null||typeof t!="object")return t;let e=t,n={...e},r=e.env;if(r&&typeof r=="object"){let o={};for(let[s,i]of Object.entries(r))E9.test(s)&&typeof i=="string"?o[s]=`<REDACTED length=${i.length}>`:o[s]=i;n.env=o}return"system"in e&&(n.system=tw(e.system)),"systemPrompt"in e&&(n.systemPrompt=tw(e.systemPrompt)),n}function A9(t){if(t==null)return{kind:"undefined",note:"SDK uses minimal prompt; claude_code preset NOT loaded"};if(typeof t=="string")return{kind:"custom-string",note:"SDK uses this string as full system prompt; claude_code preset NOT loaded"};if(Array.isArray(t))return{kind:"custom-string-array",note:"SDK uses array as full system prompt with cache boundaries; claude_code preset NOT loaded"};if(typeof t=="object"){let e=t;if(e.type==="preset"&&e.preset==="claude_code"){let n={kind:"preset-claude-code",note:"claude_code preset loaded"};return typeof e.append=="string"&&(n.append={length:e.append.length}),e.excludeDynamicSections===!0&&(n.excludeDynamicSections=!0),n}return{kind:"custom-string",note:"Unrecognized systemPrompt shape; treated as opaque"}}return{kind:"custom-string",note:"Unrecognized systemPrompt shape; treated as opaque"}}function d0(t){let e=k.AFK_DUMP_PROMPT;if(!e||e===""||e==="0"||e.toLowerCase()==="false")return;process.stderr.write(`[--dump-prompt] WARNING: dump may contain secrets from system prompt or messages. Inspect before sharing.
1095
1095
  `);let n=t.options,r=typeof n=="object"&&n!==null?n.systemPrompt:void 0,o=A9(r),s={timestamp:new Date().toISOString(),prompt:t.prompt,options:x9(t.options),provenance:t.provenance,resolution:o};if(e==="1"||e.toLowerCase()==="true"||e.toLowerCase()==="stderr"){let c=JSON.stringify(s,null,2)+`
1096
1096
  `;process.stderr.write(c);return}let i=S9(e),a=k9(i);try{y9(a,{recursive:!0});let l=(!w9(i)?T9:"")+JSON.stringify(s)+`
1097
1097
  `;b9(i,l)}catch(c){let l=`[prompt-dump] Failed to write to ${i}: ${String(c)}
@@ -1121,7 +1121,7 @@ ${r}
1121
1121
 
1122
1122
  ${e}`:[{type:"text",text:s},...e]}ensureLedger(){let{getConfig:e,getSessionId:n,ledger:r,getLedgerMetadata:o}=this.deps,s=e();r.ensure({depth:s.depth,parentSessionId:s.parentSessionId,sessionId:n(),fallbackModel:String(s.model),tracePath:s.traceWriter?.getTracePath(),getMetadata:o})}buildTransformDeps(){let{getConfig:e,getAbortController:n,stateManager:r,accounting:o,setLastResponseMetadata:s,conversationHistory:i}=this.deps,a=e();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(e,n){let r=this.deps.getInitPromise();r&&await r;let o=this.withPendingContext(e),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();p0({sessionId:kn(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(h0({sessionId:kn(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,m=qu(f,d);if(m&&(u?.observe(m),m.type==="done"?(this.deps.incTurnCount(),this.deps.accounting.clearProviderError()):m.type==="error"&&this.deps.accounting.markProviderError(),this.deps.ledger.recordEvent(m),this.deps.outputBroadcast.push(m),yield m,m.type==="done"||m.type==="error"))break}u?.end("stream_complete")}finally{this.deps.getState()==="streaming"&&(u?.end("aborted_or_incomplete"),this.deps.setState("idle"))}}queueFrameworkContext(e){let n=e.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`)}}});var it,is=h(()=>{"use strict";it="overload_exhausted"});function w0(t){switch(t){case"abort":return W9;case"iteration_cap":return K9;case"timeout":return G9;case"truncated":return q9;default:return null}}var W9,K9,G9,q9,S0=h(()=>{"use strict";W9="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.",K9="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`).",G9="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.",q9="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 Zu(t){if(t===void 0||!Number.isFinite(t)||t<=0||t<=12e4)return 0;let e=t*.15,n=Math.min(3e5,Math.max(3e4,e));return Math.max(0,Math.floor(t-n))}function ep(t,e,n=Date.now()){return e>0&&n-t>=e}var Pt,Qu,Xn=h(()=>{"use strict";Pt="soft_deadline_wind_down",Qu="Your time budget for this turn is nearly spent. Do not request any more tools \u2014 give your final answer now using only the information already gathered. If your work is incomplete, say briefly what you established, what remains unresolved, and what you would check next."});function Qt(t){return t!=null&&X9.includes(t)}function z9(t){switch(t){case"max_tokens":return'stop_reason "max_tokens"';case"length":return'finish_reason "length"';case"max_output_tokens":return'incomplete_details.reason "max_output_tokens"';default:return"the provider output-token cap"}}function tp(t,e,n={}){let r=`\u26A0 This turn was cut off at the output-token limit (${z9(e)}) before the model finished \u2014 anything above is partial, not a complete answer.`;if(t.length>0){let o=[...new Set(t)].join(", "),s=n.canIncreaseOutputLimit===!1?"Continue in a follow-up turn or retry so the model can finish the action.":"Raise --max-output-tokens / AFK_MAX_OUTPUT_TOKENS, then retry.";return`${r} A tool call was truncated mid-request and was NOT dispatched (${o}); that action did not run. ${s}`}return n.canIncreaseOutputLimit===!1?`${r} Continue in a follow-up turn or retry the request.`:`${r} Raise --max-output-tokens / AFK_MAX_OUTPUT_TOKENS to allow a longer reply.`}var X9,Ia=h(()=>{"use strict";X9=["max_tokens","length","max_output_tokens"]});function k0(t){return t.maxTurnsHit?"max_turns_exceeded":t.hookBlocked?"hook_blocked":t.dispatchReason==="error"?"abort":t.abort!==null?t.abort:t.sawProviderError||t.lastStopReason===it?"abort":t.lastStopReason==="tool_use_loop_capped"?"iteration_cap":t.lastStopReason===Pt?"timeout":Qt(t.lastStopReason)?"truncated":"model_end_turn"}var v0=h(()=>{"use strict";is();Xn();Ia()});function J9(t){let e=null,n=t.signal;if(n.aborted&&n.reason!=="closed"){let r=n.reason;r instanceof In?e="budget_exceeded":r instanceof Ie?e="timeout":typeof r=="string"&&r.startsWith("Budget ")?e="budget_exceeded":typeof r=="string"&&r.includes("timed out")?e="timeout":e="abort"}return k0({dispatchReason:t.dispatchReason,maxTurnsHit:t.maxTurnsHit,hookBlocked:t.hookBlocked,abort:e,lastStopReason:t.lastStopReason,sawProviderError:t.sawProviderError})}function V9(t){if(t.dispatchReason==="error")return"failed";let e=t.signal;return e.aborted&&e.reason!=="closed"?"cancelled":t.sawProviderError||t.lastStopReason===it?"failed":"succeeded"}async function T0(t,e){if(!t)return;let n=J9(e),r={},o=e.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=w0(n);await dx(t,{reason:n,finalTurnCount:e.finalTurnCount,finalCostUsd:e.finalCostUsd,finalTokens:r,...e.lastStopReason!==void 0?{lastStopReason:e.lastStopReason}:{},...s!==null?{guidance:s}:{}})}async function E0(t,e){if(!t)return;let n=V9(e),r=e.subagentCompletedCount>0?e.subagentCompletedCount:void 0,o=e.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=e.subagentRunningCostUsd>0?e.subagentRunningCostUsd:void 0;await t.seal({status:n,finalCostUsd:e.finalCostUsd,finalTurnCount:e.finalTurnCount,closedAt:new Date().toISOString(),...r!==void 0?{subagentCount:r}:{},...i!==void 0?{subagentTokens:i}:{},...a!==void 0?{subagentCostUsd:a}:{}})}var _0=h(()=>{"use strict";ie();is();J();S0();v0()});var np,x0=h(()=>{"use strict";Qb();_0();np=class{dispatched=!1;deps;constructor(e){this.deps=e}reset(){this.dispatched=!1}async dispatchOnce(e){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(e).catch(()=>{});let u=s.closureSignals(r().signal,e),p=s.snapshot();if(await T0(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 E0(l,f).catch(()=>{})}await WO(o(),{event:"SessionEnd",sessionId:a(),reason:e,parentSessionId:d.parentSessionId,...d.traceWriter?{tracePath:d.traceWriter.getTracePath()}:{}},d.traceWriter&&!c?{traceWriter:d.traceWriter}:{})}}});async function A0(t){if(t.getState()==="closed")throw new Error("Cannot reset: session is closed");if(t.getAbortController().signal.aborted)throw new Xe("Cannot reset: session aborted");let e=t.getState();if(e==="processing"||e==="streaming")try{await t.getProviderQuery().interrupt()}catch{}await t.getShutdown().dispatchOnce("reset"),await t.getLedger().seal("reset");try{await t.getProviderQuery().close()}catch{}await t.getProviderIterator().return?.();let n=t.getInitPromise();n&&await Promise.race([n,new Promise(r=>setTimeout(r,Lu))]).catch(()=>{}),t.getStateManager().resolveInitializationIfNeeded();try{t.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 t.setState("closed"),new Error(`Session reset failed during lifecycle rebuild: ${r instanceof Error?r.message:String(r)}`,{cause:r})}}var R0=h(()=>{"use strict";ie();xa()});function I0(t){return t.getProviderQuery().supportedCommands()}function P0(t){return t.getProviderQuery().supportedModels()}function C0(t){return t.getProviderQuery().supportedAgents()}function M0(t){return t.getProviderQuery().getContextUsage()}function O0(t){return t.getProviderQuery().mcpServerStatus()}function D0(t){return t.getProviderQuery().accountInfo()}function F0(t,e,n){return n.getProviderQuery().rewindFiles(t,e)}async function L0(t){if(t.getState()==="closed")throw new Error("Cannot compact: session is closed");if(t.getState()!=="idle")return{compacted:!1,reason:"session-busy",messagesBefore:0,messagesAfter:0};let e=t.getProviderQuery().compact?.bind(t.getProviderQuery());if(!e)return{compacted:!1,reason:"not-supported",messagesBefore:0,messagesAfter:0};t.setState("compacting");try{return await e()}finally{t.setState("idle")}}function N0(t){return t.getState()==="closed"?[]:t.getProviderQuery().listRewindTargets?.()??[]}async function $0(t,e){if(e.getState()==="closed")throw new Error("Cannot rewind: session is closed");if(e.getState()!=="idle")return{rewound:!1,reason:"session-busy",messagesBefore:0,messagesAfter:0};let n=e.getProviderQuery().rewindConversation?.bind(e.getProviderQuery());return n?n(t):{rewound:!1,reason:"not-supported",messagesBefore:0,messagesAfter:0}}var U0=h(()=>{"use strict"});function rp(t){let e=Q9(t);return e!==void 0?e:Z9(t)}function Q9(t){let e=/```(?:json)?\s*([\s\S]*?)```/gi,n,r;for(;(r=e.exec(t))!==null;)n=r[1];if(n)return B0(n.trim())}function Z9(t){for(let e=t.length-1;e>=0;e--){if(t[e]!=="}")continue;let n=e7(t,e);if(n===-1)continue;let r=t.slice(n,e+1),o=B0(r);if(o!==void 0)return o}}function e7(t,e){let n=0,r=!1,o=!1;for(let s=e;s>=0;s--){let i=t[s];if(o){o=!1;continue}if(r){if(i==="\\"){o=!0;continue}i==='"'&&(r=!1);continue}if(i==='"'){r=!0;continue}if(i==="}")n++;else if(i==="{"&&(n--,n===0))return s}return-1}function B0(t){try{return JSON.parse(t)}catch{return}}var ow=h(()=>{"use strict"});import{z as t7}from"zod";async function sw(t,e={},n){n.runner.assertCanSend();let o=n.getConfig().timeoutMs??gO,s=async()=>{let i=null,a="";n.setState(e.stream?"streaming":"processing");for await(let c of W0(t,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 Nu(s(),o,{controller:n.getAbortController(),label:n.getSessionId()??"session"})}finally{n.getState()==="processing"&&n.setState("idle")}}async function j0(t,e,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(t7.toJSONSchema(e,{target:"openapi-3.0"}))+"\n```":"",c="";for(let l=0;l<=o;l++){let d=l===0?t+a:`Your previous response did not match the required JSON schema.
1123
1123
  Validation error: ${c}
1124
- Respond again with ONLY a JSON object (optionally in a \`\`\`json fence) that satisfies the schema.`+a,u=await sw(d,i,r),p=rp(u.content),f=e.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*H0(t,e){e.runner.assertCanSend(),e.setState("streaming");try{yield*W0(t,e)}finally{e.getState()==="streaming"&&e.setState("idle")}}function W0(t,e){return e.planExit.clearModeBeforeDefault(),e.runner.runStream(t,e.getInputStream())}async function K0(t){let e=t.getState();e!=="streaming"&&e!=="processing"||(t.setState("idle"),await t.getProviderQuery().interrupt())}function G0(t,e){e.getProviderQuery().setBeforeNextRound?.(t)}var q0=h(()=>{"use strict";xa();ow()});async function X0(t,e){let n=me(t);typeof t=="string"&&t.length>0&&await e.getProviderQuery().setModel(t),n&&e.getStateManager().setSessionMetadata(r=>({...r,model:n}))}async function iw(t,e){let n=e.getStateManager().getSessionMetadata().permissionMode;e.getPlanExit().recordModeTransition(t,n),await e.getProviderQuery().setPermissionMode(t),e.getStateManager().setSessionMetadata(r=>({...r,permissionMode:t})),e.pushSidebandEvent({type:"plan_mode",mode:t==="plan"?"plan":"default"})}function z0(t,e){return e.setConfig(n=>({...n,systemPrompt:t})),e.getProviderQuery().setSystemPrompt?.(t)??!1}function J0(t,e){e.setConfig(r=>({...r,cwd:t})),e.getProviderQuery().setCwd?.(t);let n=e.getConfig().sessionId;n!==void 0&&L_(n,t)}async function V0(t){return await t.getProviderQuery().reauth?.()??null}async function Y0(t){let e=t.getPlanExit().takeSeed();if(e!==void 0){try{await iw(e.mode,t)}catch(n){O(`\u26A0\uFE0F AgentSession: deferred plan-exit mode flip to '${e.mode}' rejected; dropping implement-seed (staying in plan mode): ${n instanceof Error?n.message:String(n)}`);return}return{message:e.message,mode:e.mode}}}var Q0=h(()=>{"use strict";ne();ze();Tr()});var Zr,Z0=h(()=>{"use strict";mO();J();Dn();xa();hO();yO();ze();mr();qb();N();TO();MO();UO();BO();a0();b0();x0();R0();U0();q0();Q0();Zr=class{ownedTraceWriter;config;planExit=new Uu;currentState="idle";providerQuery;providerIterator;conversationHistory=[];turnCount=0;inboundMessageCount=0;subagentOutputRecorder;pendingFrameworkContext=[];lastResponseMetadata=null;initPromise=null;inputStream;abortController;_hookRegistry;ownsTraceSeal;stateManager;accounting=new Hu;ledger=new $u;outputBroadcast=new Fu;shutdown;runner;constructor(e,n){this.ownsTraceSeal=n!==void 0&&e.traceWriter===n,this.ownedTraceWriter=this.ownsTraceSeal?n:void 0,this.config=e.parentSessionId===void 0&&e.planExitControls===void 0?{...e,planExitControls:{setPermissionMode:o=>this.setPermissionMode(o),requestImplementSeed:(o,s)=>this.planExit.requestImplementSeed(o,s),getPrePlanMode:()=>this.planExit.getPrePlanMode()}}:e,this.abortController=new AbortController,this._hookRegistry=e.hookRegistry,bO(e.abortSignal,this.abortController,()=>{this.onAbort()}),this.shutdown=new np({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(e.model);G(e.traceWriter,{phase:"session_init_start",model:r,resolvedModel:me(e.model)??r,origin:Tn(e.surface),actor:dl(e.parentSessionId)}),this.initSdkLifecycle(),this.config.parentSessionId===void 0&&(vO(Qc(),{maxBytes:SO,keepTailLines:kO}),setTimeout(()=>{PO({activeLabel:kn(this.config.traceWriter?.getTracePath())??void 0})},CO).unref(),setTimeout(()=>{$O({activeSessionId:this.sessionId})},NO).unref())}initSdkLifecycle(){let{stateManager:e,inputStream:n,providerQuery:r,providerIterator:o}=s0(this.config);this.stateManager=e,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 Yu({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=i0(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(e){if(e==="closed"||e.startsWith("Budget ")||e.includes("timed out"))throw new Error(`AgentSession.abort: reserved reason "${e}" (use a caller-specific string like 'sigint')`);this.abortController.signal.aborted||this.abortController.abort(e)}makeSendDeps(){return{getConfig:()=>this.config,getAbortController:()=>this.abortController,getState:()=>this.currentState,setState:e=>{this.currentState=e},getSessionId:()=>this.sessionId,runner:this.runner,getInputStream:()=>this.inputStream,getProviderQuery:()=>this.providerQuery,planExit:this.planExit}}async sendMessage(e,n={}){return sw(e,n,this.makeSendDeps())}async sendMessageStructured(e,n,r={}){return j0(e,n,r,this.makeSendDeps())}async*sendMessageStream(e){yield*H0(e,this.makeSendDeps())}async interrupt(){await K0(this.makeSendDeps())}setBeforeNextRound(e){G0(e,this.makeSendDeps())}async reset(){await A0({getState:()=>this.currentState,setState:e=>{this.currentState=e},getAbortController:()=>this.abortController,getProviderQuery:()=>this.providerQuery,getProviderIterator:()=>this.providerIterator,getInitPromise:()=>this.initPromise,getShutdown:()=>this.shutdown,getLedger:()=>this.ledger,getStateManager:()=>this.stateManager,reinitialize:e=>{this.config=e(this.config),this.initSdkLifecycle()}})}async onAbort(){this.ledger.seal("abort");try{await this.providerQuery.interrupt(Xg(this.abortController.signal.reason))}catch{}}makeConfigDeps(){return{getConfig:()=>this.config,setConfig:e=>{this.config=e(this.config)},getProviderQuery:()=>this.providerQuery,getStateManager:()=>this.stateManager,getPlanExit:()=>this.planExit,pushSidebandEvent:e=>this.pushSidebandEvent(e)}}async setModel(e){return X0(e,this.makeConfigDeps())}async setPermissionMode(e){return iw(e,this.makeConfigDeps())}setSystemPrompt(e){return z0(e,this.makeConfigDeps())}setCwd(e){return J0(e,this.makeConfigDeps())}async reauth(){return V0(this.makeConfigDeps())}getPrePlanMode(){return this.planExit.getPrePlanMode()}setPlanExitQueueCheck(e){this.config.planExitControls&&(this.config.planExitControls.hasPendingUserMessage=e)}async takePendingPlanExitSeed(){return Y0(this.makeConfigDeps())}waitForInitialization(){return this.stateManager.waitForInitialization()}getSessionIdentity(){return this.stateManager.getSessionIdentity()}getSessionMetadata(){return this.stateManager.getSessionMetadata()}getQuery(){return this.providerQuery}supportedCommands(){return I0(this.makePassthroughDeps())}supportedModels(){return P0(this.makePassthroughDeps())}supportedAgents(){return C0(this.makePassthroughDeps())}getContextUsage(){return M0(this.makePassthroughDeps())}mcpServerStatus(){return O0(this.makePassthroughDeps())}accountInfo(){return D0(this.makePassthroughDeps())}rewindFiles(e,n){return F0(e,n,this.makePassthroughDeps())}compact(){return L0(this.makePassthroughDeps())}listRewindTargets(){return N0(this.makePassthroughDeps())}rewindConversation(e){return $0(e,this.makePassthroughDeps())}makePassthroughDeps(){return{getState:()=>this.currentState,setState:e=>{this.currentState=e},getProviderQuery:()=>this.providerQuery}}getLastResponseMetadata(){return this.lastResponseMetadata}getOutputStream(){return this.outputBroadcast.subscribe()}queueFrameworkContext(e){this.runner.queueFrameworkContext(e)}getInputStreamRef(){return{pushUserMessage:e=>this.inputStream.pushUserMessage(e),queueFrameworkContext:e=>this.queueFrameworkContext(e)}}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(e=>setTimeout(e,Lu))])}catch{}await this.shutdown.dispatchOnce("close")}}recordSubagentCompletion(e,n){this.accounting.recordSubagentCompletion(e,n)}pushSidebandEvent(e){this.currentState!=="closed"&&(this.ledger.recordEvent(e),this.outputBroadcast.push(e))}recordLedgerElicitation(e,n){this.ledger.recordElicitation(e,n)}}});var aw=h(()=>{"use strict";Z0()});import{AsyncLocalStorage as o7}from"node:async_hooks";function tD(t,e){return eD.run(t,e)}function Ct(){return eD.getStore()}var eD,eo=h(()=>{"use strict";eD=new o7});import{randomUUID as s7}from"node:crypto";import{promises as Pa}from"node:fs";import{join as i7,resolve as a7,sep as lw}from"node:path";function as(t){let e=a7(t),n=e.indexOf(cw);if(n===-1)return;let o=e.slice(n+cw.length).split(lw)[0];if(o)return e.slice(0,n+cw.length)+o}async function dw(t,e){let n=as(t);if(n===void 0||e?.()===!0)return;let r=i7(n,c7),o=`${r}.${process.pid}.${s7()}.tmp`;try{let s={};try{s=JSON.parse(await Pa.readFile(r,"utf-8"))}catch{s={owner:"agent"}}if(s.pid=process.pid,s.createdAt=new Date().toISOString(),await Pa.writeFile(o,JSON.stringify(s,null,2),"utf-8"),e?.()===!0){await Pa.rm(o,{force:!0}).catch(()=>{});return}await Pa.rename(o,r)}catch{await Pa.rm(o,{force:!0}).catch(()=>{})}}function nD(t,e=l7){let n,r=!1,o=()=>{r=!0,n!==void 0&&(clearInterval(n),n=void 0)};return as(t)===void 0||(n=setInterval(()=>{dw(t,()=>r)},e),n.unref()),o}var c7,cw,l7,uw=h(()=>{"use strict";c7=".afk-worktree-meta.json",cw=`${lw}.afk-worktrees${lw}`,l7=6e5});import{execFile as d7}from"node:child_process";import{promisify as u7}from"node:util";import zn from"node:path";function m7(t){let e=zn.resolve(t),n=`${zn.sep}.afk-worktrees${zn.sep}`,r=e.indexOf(n);if(!(r<=0))return e.slice(0,r)}async function rD(t,e=f7){if(!(t===void 0||t===""))try{let{stdout:n}=await e("git",["-C",t,"rev-parse","--git-common-dir","--show-toplevel"]),r=n.split(`
1124
+ Respond again with ONLY a JSON object (optionally in a \`\`\`json fence) that satisfies the schema.`+a,u=await sw(d,i,r),p=rp(u.content),f=e.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*H0(t,e){e.runner.assertCanSend(),e.setState("streaming");try{yield*W0(t,e)}finally{e.getState()==="streaming"&&e.setState("idle")}}function W0(t,e){return e.planExit.clearModeBeforeDefault(),e.runner.runStream(t,e.getInputStream())}async function K0(t){let e=t.getState();e!=="streaming"&&e!=="processing"||(t.setState("idle"),await t.getProviderQuery().interrupt())}function G0(t,e){e.getProviderQuery().setBeforeNextRound?.(t)}var q0=h(()=>{"use strict";xa();ow()});async function X0(t,e){let n=me(t);typeof t=="string"&&t.length>0&&await e.getProviderQuery().setModel(t),n&&e.getStateManager().setSessionMetadata(r=>({...r,model:n}))}async function iw(t,e){let n=e.getStateManager().getSessionMetadata().permissionMode;e.getPlanExit().recordModeTransition(t,n),await e.getProviderQuery().setPermissionMode(t),e.getStateManager().setSessionMetadata(r=>({...r,permissionMode:t})),e.pushSidebandEvent({type:"plan_mode",mode:t==="plan"?"plan":"default"})}function z0(t,e){return e.setConfig(n=>({...n,systemPrompt:t})),e.getProviderQuery().setSystemPrompt?.(t)??!1}function J0(t,e){e.setConfig(r=>({...r,cwd:t})),e.getProviderQuery().setCwd?.(t);let n=e.getConfig().sessionId;n!==void 0&&L_(n,t)}async function V0(t){return await t.getProviderQuery().reauth?.()??null}async function Y0(t){let e=t.getPlanExit().takeSeed();if(e!==void 0){try{await iw(e.mode,t)}catch(n){O(`\u26A0\uFE0F AgentSession: deferred plan-exit mode flip to '${e.mode}' rejected; dropping implement-seed (staying in plan mode): ${n instanceof Error?n.message:String(n)}`);return}return{message:e.message,mode:e.mode}}}var Q0=h(()=>{"use strict";ne();ze();Tr()});var Zr,Z0=h(()=>{"use strict";mO();J();Dn();xa();hO();yO();ze();mr();qb();N();TO();MO();UO();BO();a0();b0();x0();R0();U0();q0();Q0();Zr=class{ownedTraceWriter;config;planExit=new Uu;currentState="idle";providerQuery;providerIterator;conversationHistory=[];turnCount=0;inboundMessageCount=0;subagentOutputRecorder;pendingFrameworkContext=[];lastResponseMetadata=null;initPromise=null;inputStream;abortController;_hookRegistry;ownsTraceSeal;stateManager;accounting=new Hu;ledger=new $u;outputBroadcast=new Fu;shutdown;runner;constructor(e,n){this.ownsTraceSeal=n!==void 0&&e.traceWriter===n,this.ownedTraceWriter=this.ownsTraceSeal?n:void 0,this.config=e.parentSessionId===void 0&&e.planExitControls===void 0?{...e,planExitControls:{setPermissionMode:o=>this.setPermissionMode(o),requestImplementSeed:(o,s)=>this.planExit.requestImplementSeed(o,s),getPrePlanMode:()=>this.planExit.getPrePlanMode()}}:e,this.abortController=new AbortController,this._hookRegistry=e.hookRegistry,bO(e.abortSignal,this.abortController,()=>{this.onAbort()}),this.shutdown=new np({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(e.model);G(e.traceWriter,{phase:"session_init_start",model:r,resolvedModel:me(e.model)??r,origin:Tn(e.surface),actor:dl(e.parentSessionId)}),this.initSdkLifecycle(),this.config.parentSessionId===void 0&&(vO(Qc(),{maxBytes:SO,keepTailLines:kO}),setTimeout(()=>{PO({activeLabel:kn(this.config.traceWriter?.getTracePath())??void 0})},CO).unref(),setTimeout(()=>{$O({activeSessionId:this.sessionId})},NO).unref())}initSdkLifecycle(){let{stateManager:e,inputStream:n,providerQuery:r,providerIterator:o}=s0(this.config);this.stateManager=e,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 Yu({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=i0(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(e){if(e==="closed"||e.startsWith("Budget ")||e.includes("timed out"))throw new Error(`AgentSession.abort: reserved reason "${e}" (use a caller-specific string like 'sigint')`);this.abortController.signal.aborted||this.abortController.abort(e)}makeSendDeps(){return{getConfig:()=>this.config,getAbortController:()=>this.abortController,getState:()=>this.currentState,setState:e=>{this.currentState=e},getSessionId:()=>this.sessionId,runner:this.runner,getInputStream:()=>this.inputStream,getProviderQuery:()=>this.providerQuery,planExit:this.planExit}}async sendMessage(e,n={}){return sw(e,n,this.makeSendDeps())}async sendMessageStructured(e,n,r={}){return j0(e,n,r,this.makeSendDeps())}async*sendMessageStream(e){yield*H0(e,this.makeSendDeps())}async interrupt(){await K0(this.makeSendDeps())}setBeforeNextRound(e){G0(e,this.makeSendDeps())}async reset(){await A0({getState:()=>this.currentState,setState:e=>{this.currentState=e},getAbortController:()=>this.abortController,getProviderQuery:()=>this.providerQuery,getProviderIterator:()=>this.providerIterator,getInitPromise:()=>this.initPromise,getShutdown:()=>this.shutdown,getLedger:()=>this.ledger,getStateManager:()=>this.stateManager,reinitialize:e=>{this.config=e(this.config),this.initSdkLifecycle()}})}async onAbort(){this.ledger.seal("abort");try{await this.providerQuery.interrupt(Xg(this.abortController.signal.reason))}catch{}}makeConfigDeps(){return{getConfig:()=>this.config,setConfig:e=>{this.config=e(this.config)},getProviderQuery:()=>this.providerQuery,getStateManager:()=>this.stateManager,getPlanExit:()=>this.planExit,pushSidebandEvent:e=>this.pushSidebandEvent(e)}}async setModel(e){return X0(e,this.makeConfigDeps())}async setPermissionMode(e){return iw(e,this.makeConfigDeps())}setSystemPrompt(e){return z0(e,this.makeConfigDeps())}setCwd(e){return J0(e,this.makeConfigDeps())}async reauth(){return V0(this.makeConfigDeps())}getPrePlanMode(){return this.planExit.getPrePlanMode()}setPlanExitQueueCheck(e){this.config.planExitControls&&(this.config.planExitControls.hasPendingUserMessage=e)}async takePendingPlanExitSeed(){return Y0(this.makeConfigDeps())}waitForInitialization(){return this.stateManager.waitForInitialization()}getSessionIdentity(){return this.stateManager.getSessionIdentity()}getSessionMetadata(){return this.stateManager.getSessionMetadata()}getQuery(){return this.providerQuery}supportedCommands(){return I0(this.makePassthroughDeps())}supportedModels(){return P0(this.makePassthroughDeps())}supportedAgents(){return C0(this.makePassthroughDeps())}getContextUsage(){return M0(this.makePassthroughDeps())}mcpServerStatus(){return O0(this.makePassthroughDeps())}accountInfo(){return D0(this.makePassthroughDeps())}rewindFiles(e,n){return F0(e,n,this.makePassthroughDeps())}compact(){return L0(this.makePassthroughDeps())}listRewindTargets(){return N0(this.makePassthroughDeps())}rewindConversation(e){return $0(e,this.makePassthroughDeps())}makePassthroughDeps(){return{getState:()=>this.currentState,setState:e=>{this.currentState=e},getProviderQuery:()=>this.providerQuery}}getLastResponseMetadata(){return this.lastResponseMetadata}getOutputStream(){return this.outputBroadcast.subscribe()}queueFrameworkContext(e){this.runner.queueFrameworkContext(e)}getInputStreamRef(){return{pushUserMessage:e=>this.inputStream.pushUserMessage(e),queueFrameworkContext:e=>this.queueFrameworkContext(e)}}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(e=>setTimeout(e,Lu))])}catch{}await this.shutdown.dispatchOnce("close")}}recordSubagentCompletion(e,n){this.accounting.recordSubagentCompletion(e,n)}pushSidebandEvent(e){this.currentState!=="closed"&&(this.ledger.recordEvent(e),this.outputBroadcast.push(e))}recordLedgerElicitation(e,n){this.ledger.recordElicitation(e,n)}}});var aw=h(()=>{"use strict";Z0()});import{AsyncLocalStorage as o7}from"node:async_hooks";function tD(t,e){return eD.run(t,e)}function Ct(){return eD.getStore()}var eD,eo=h(()=>{"use strict";eD=new o7});import{randomUUID as s7}from"node:crypto";import{promises as Pa}from"node:fs";import{join as i7,resolve as a7,sep as lw}from"node:path";function as(t){let e=a7(t),n=e.indexOf(cw);if(n===-1)return;let o=e.slice(n+cw.length).split(lw)[0];if(o)return e.slice(0,n+cw.length)+o}async function dw(t,e){let n=as(t);if(n===void 0||e?.()===!0)return;let r=i7(n,c7),o=`${r}.${process.pid}.${s7()}.tmp`;try{let s={};try{s=JSON.parse(await Pa.readFile(r,"utf-8"))}catch{s={owner:"agent"}}if(s.pid=process.pid,s.createdAt=new Date().toISOString(),await Pa.writeFile(o,JSON.stringify(s,null,2),"utf-8"),e?.()===!0){await Pa.rm(o,{force:!0}).catch(()=>{});return}await Pa.rename(o,r)}catch{await Pa.rm(o,{force:!0}).catch(()=>{})}}function nD(t,e=l7){let n,r=!1,o=()=>{r=!0,n!==void 0&&(clearInterval(n),n=void 0)};return as(t)===void 0||(n=setInterval(()=>{dw(t,()=>r)},e),n.unref()),o}var c7,cw,l7,uw=h(()=>{"use strict";c7=".afk-worktree-meta.json",cw=`${lw}.afk-worktrees${lw}`,l7=6e5});import{execFile as d7}from"node:child_process";import{promisify as u7}from"node:util";import zn from"node:path";function m7(t){let e=zn.resolve(t),n=`${zn.sep}.afk-worktrees${zn.sep}`,r=e.indexOf(n);if(!(r<=0))return e.slice(0,r)}async function rD(t,e=f7){if(!(t===void 0||t===""))try{let{stdout:n}=await e("git",["-C",t,"rev-parse","--git-common-dir","--show-toplevel"]),r=n.split(`
1125
1125
  `).map(l=>l.trim()),o=r[0],s=r[1];if(!o||!s)return;let i=zn.isAbsolute(o)?o:zn.resolve(t,o),a=zn.resolve(zn.dirname(i)),c=zn.resolve(s);return a===c?void 0:a}catch(n){let r=m7(t);if(r!==void 0)return O(`[worktree-read-root] git rev-parse failed for cwd=${t}; recovered main root lexically as ${r} (afk worktree layout) \u2014 ${n instanceof Error?n.message:String(n)}`),r;O(`[worktree-read-root] git rev-parse failed for cwd=${t}; child confined to worktree only \u2014 ${n instanceof Error?n.message:String(n)}`);return}}var p7,f7,oD=h(()=>{"use strict";ne();p7=u7(d7),f7=(t,e)=>p7(t,e)});import Jn from"path";function g7(t){let e=Jn.resolve(t??process.cwd());return Jn.parse(e).root||Jn.sep}function Vn(t,e){if(t!==void 0)return Ca({parentReadRoots:t.parentReadRoots,parentCwd:t.parentCwd,childCwd:e})}function Ca(t){let{parentReadRoots:e,parentCwd:n,childCwd:r,worktreeMainRoot:o,afkStateRoot:s,afkFrameworkRoot:i}=t,a=r!==void 0&&r!==""?Jn.resolve(r):void 0;if(e===void 0&&n===void 0)return a!==void 0?[g7(a)]:void 0;let c=e??(n!==void 0?[n]:[]),l=new Set;a!==void 0&&l.add(a);for(let d of c)d!==void 0&&d!==""&&l.add(Jn.resolve(d));if(o!==void 0&&o!==""&&l.add(Jn.resolve(o)),s!==void 0&&s!==""&&l.add(Jn.resolve(s)),i!==void 0&&i!==""&&l.add(Jn.resolve(i)),l.size!==0&&!(l.size===1&&a!==void 0&&l.has(a)))return[...l]}var to=h(()=>{"use strict"});import h7 from"path";async function sD(t){let{parentReadRoots:e,parentCwd:n,effectiveChildCwd:r,callerReadRoots:o,callerExtraReadRoots:s,resolveMainRoot:i}=t;if(o!==void 0)return;let a=e===void 0&&n===void 0,c;!a&&r!==void 0&&(c=await i(r),c===void 0&&n!==void 0&&n!==r&&(c=await i(n)));let l=Ca({parentReadRoots:e,parentCwd:n,childCwd:r,worktreeMainRoot:c,...a?{}:{afkStateRoot:Q()},...a?{}:{afkFrameworkRoot:vt()}});if(s!==void 0&&s.length>0&&(l!==void 0||r!==void 0)){let u=l??(r!==void 0?[r]:[]);l=[...new Set([...u,...s.map(p=>h7.resolve(p))])]}return l}function iD(t,e){if(t===void 0||t.length===0)return;let n=e!==void 0?[e]:[];return[...new Set([...n,...t])]}var aD=h(()=>{"use strict";to();N()});function cD(t){if(t.phaseRole!==void 0&&t.phaseRole!=="read-write"&&t.config.provider!==void 0)throw new Error(`SubagentManager.forkSubagent: phaseRole "${t.phaseRole}" is mutually exclusive with config.provider. Remove one \u2014 either let the manager construct the phase-restricted provider, or use config.provider with phaseRole: "read-write" (default).`)}var lD=h(()=>{"use strict"});function op(t){return t?dD:k7}function sp(t){return t?E7:T7}function ip(t){return t?v7:""}var dD,y7,b7,w7,S7,k7,v7,T7,E7,pw=h(()=>{"use strict";dD=`You have access to tools for working with the filesystem and running commands. Follow these conventions:
1126
1126
 
1127
1127
  - Use read_file before editing to verify the exact content you want to change.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-afk",
3
- "version": "5.221.5",
3
+ "version": "5.221.6",
4
4
  "description": "Open-source coding-agent harness you can actually change — own the loop (prompts, gates, routing, skills, terminal states), use any model, run long tasks while you're away.",
5
5
  "main": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",