agent-afk 5.152.3 → 5.152.4

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/cli.mjs CHANGED
@@ -384,7 +384,7 @@ ${o}`,paths:[t,n]}:o!==null?i={content:o,paths:[n]}:r!==null?i={content:r,paths:
384
384
 
385
385
  ${t}`}var Ofe,TA=y(()=>{"use strict";Ofe=new Set(["script","style","noscript","template","svg"])});function Ffe(e,t){return new Promise((n,r)=>{if(t?.aborted){r(t.reason??new Error("aborted"));return}let o=()=>{clearTimeout(i),r(t?.reason??new Error("aborted"))},i=setTimeout(()=>{t?.removeEventListener("abort",o),n()},e);t?.addEventListener("abort",o,{once:!0})})}function uj(e,t,n){let r=Math.min(t*2**e,n);return Math.round(Math.random()*r)}function Lfe(e,t){let n=e.headers.get("retry-after");if(n===null)return null;let r=Number(n.trim());return!Number.isFinite(r)||r<0?null:Math.min(r*1e3,t)}async function dj(e,t,n={},r={}){let o=r.retries??3,i=r.baseDelayMs??500,s=r.maxDelayMs??1e4,a=r.sleep??Ffe,l=n.signal??void 0,c;for(let u=0;u<=o;u++){if(l?.aborted)throw l.reason??new Error("aborted");try{let d=await e(t,n);if(!$fe.has(d.status)||u===o)return d;let p=Lfe(d,s)??uj(u,i,s);L("[web/retryFetch] retrying",{url:t,attempt:u,status:d.status,waitMs:p}),await d.body?.cancel().catch(()=>{}),await a(p,l)}catch(d){if(l?.aborted||(c=d,u===o))throw d;let p=uj(u,i,s);L("[web/retryFetch] retrying after error",{url:t,attempt:u,waitMs:p}),await a(p,l)}}throw c??new Error("retryFetch: exhausted without a result")}var $fe,pj=y(()=>{"use strict";ce();$fe=new Set([429,502,503,504])});import{BlockList as Nfe,isIP as RA}from"node:net";import{lookup as Bfe}from"node:dns/promises";import{Agent as Ufe}from"undici";function fj(){let e=v.AFK_WEB_ALLOW_PRIVATE_HOSTS?.trim().toLowerCase();return e==="1"||e==="true"}function Kfe(e){return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e}function EA(e){let t=RA(e);return t===0?!1:Wfe.check(e,t===4?"ipv4":"ipv6")}async function gj(e){return Bfe(e,{all:!0,verbatim:!0})}async function xA(e,t={}){if(t.allowPrivateHosts??fj())return{allowed:!0};let n;try{n=new URL(e)}catch{return{allowed:!1,reason:`"${e}" is not a valid absolute URL`}}if(n.protocol!=="http:"&&n.protocol!=="https:")return{allowed:!1,reason:`protocol "${n.protocol}" not supported (http/https only)`};let r=Kfe(n.hostname),o=(a,l)=>`refusing to fetch ${l} \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(RA(r)!==0)return EA(r)?{allowed:!1,reason:o(r,r)}:{allowed:!0};let i=t.lookupFn??gj,s;try{s=await i(r)}catch{return{allowed:!0}}for(let a of s)if(EA(a.address))return{allowed:!1,reason:o(a.address,`${r} (resolved)`)};return{allowed:!0}}async function Hp(e,t={}){let n=await xA(e,t);if(!n.allowed)throw new cr(n.reason)}async function Ny(e,t,n={},r={}){let o={...r.lookupFn!==void 0?{lookupFn:r.lookupFn}:{},...r.allowPrivateHosts!==void 0?{allowPrivateHosts:r.allowPrivateHosts}:{}},i=t;for(let s=0;s<=mj;s++){await Hp(i,o);let a={...n,redirect:"manual",...e===globalThis.fetch&&!(r.allowPrivateHosts??fj())?{dispatcher:Gfe}:{}},l=await dj(e,i,a,r.retry??{});if(!qfe.has(l.status))return l;let c=l.headers.get("location");if(c===null||c.trim()==="")return l;let u;try{u=new URL(c,l.url||i).toString()}catch{return l}await l.body?.cancel().catch(()=>{}),i=u}throw new cr(`too many redirects (>${mj}) starting from ${t}`)}var jfe,Hfe,Wfe,cr,Gfe,mj,qfe,AA=y(()=>{"use strict";B();pj();jfe=[["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]],Hfe=[["::",96],["64:ff9b::",96],["fc00::",7],["fe80::",10]],Wfe=(()=>{let e=new Nfe;for(let[t,n]of jfe)e.addSubnet(t,n,"ipv4");for(let[t,n]of Hfe)e.addSubnet(t,n,"ipv6");return e})(),cr=class extends Error{constructor(t){super(t),this.name="EgressBlockedError"}};Gfe=new Ufe({connect:{lookup(e,t,n){gj(e).then(r=>{let o=r.find(s=>EA(s.address));if(o!==void 0){n(new cr(`refusing to connect to ${e} (resolved) \u2014 internal/private address ${o.address} (loopback, link-local, cloud metadata, or RFC1918 space). Set AFK_WEB_ALLOW_PRIVATE_HOSTS=1 to allow private-host access.`),"",0);return}let i=r[0];if(i===void 0){n(new Error(`DNS lookup returned no addresses for ${e}`),"",0);return}n(null,i.address,RA(i.address))},r=>n(r,"",0))}}});mj=20,qfe=new Set([301,302,303,307,308])});import{readFileSync as zfe}from"node:fs";import{join as Vfe}from"path";function Yfe(e){let n=e.replace(/[.+?()[\]{}/\\^$|]/g,"\\$&").replace(/\*/g,"[^.]*");return new RegExp(`^${n}$`,"i")}function hj(e,t){return Yfe(t).test(e)}function Qfe(e,t){if(e!==void 0){let n=e.trim().toLowerCase();if(n==="1"||n==="true"||n==="yes")return!0;if(n==="0"||n==="false"||n==="no")return!1}if(t!==void 0){if(Jfe.has(t))return!0;if(Xfe.has(t))return!1}return!1}function yj(e){return e===void 0||e.trim()===""?[]:e.split(",").map(t=>t.trim().toLowerCase()).filter(t=>t.length>0)}function Zfe(e){if(e===void 0||e===""||e==="playwright")return"playwright";throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${e}`)}function bj(e){let t=e===void 0||e.trim()===""?"default":e.trim();return Hd(t),t}function ege(e){if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}function tge(e){try{return zfe(e,"utf8")}catch(t){if(t.code==="ENOENT")return;throw t}}function nge(e,t){let n={...e};if(typeof t.headless=="boolean"&&(n.headless=t.headless),Array.isArray(t.allowedDomains)&&(n.allowedDomains=t.allowedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),Array.isArray(t.blockedDomains)&&(n.blockedDomains=t.blockedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),typeof t.domSnapshots=="boolean"&&(n.domSnapshots=t.domSnapshots),t.backend==="playwright")n.backend="playwright";else if(t.backend!==void 0)throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${String(t.backend)}`);return typeof t.defaultProfile=="string"&&(n.defaultProfile=bj(t.defaultProfile)),n}function Sj(e){let t=e?.env??v,n=e?.readFileSync??tge,r=e?.surface??t.AGENT_SURFACE,o=Qfe(t.AFK_BROWSER_HEADLESS,r),i=yj(t.AFK_BROWSER_ALLOWED_DOMAINS),s=yj(t.AFK_BROWSER_BLOCKED_DOMAINS),a=ege(t.AFK_BROWSER_DOM_SNAPSHOTS),l=Zfe(t.AFK_BROWSER_BACKEND),c=bj(t.AFK_BROWSER_DEFAULT_PROFILE),u={headless:o,allowedDomains:i,blockedDomains:s,domSnapshots:a,backend:l,configPath:null,defaultProfile:c},d=t.AFK_BROWSER_CONFIG,p=d!==void 0&&d.trim()!==""?d.trim():Vfe(tr(),"browser.json"),f=n(p);if(f===void 0)return u;let g;try{g=JSON.parse(f)}catch(b){throw new Error(`Failed to parse browser config at ${p}: ${String(b)}`)}if(typeof g!="object"||g===null||Array.isArray(g))throw new Error(`Browser config at ${p} must be a JSON object`);let h=nge(u,g);return h.configPath=p,h}function By(e,t){let n;try{n=new URL(e).hostname.toLowerCase()}catch{return{allowed:!1,reason:`invalid URL: ${e}`}}for(let r of t.blockedDomains)if(hj(n,r))return{allowed:!1,reason:`blocked by AFK_BROWSER_BLOCKED_DOMAINS: ${r}`};return t.allowedDomains.length>0&&!t.allowedDomains.some(o=>hj(n,o))?{allowed:!1,reason:"not in AFK_BROWSER_ALLOWED_DOMAINS"}:{allowed:!0}}var Jfe,Xfe,Uy=y(()=>{"use strict";B();H();Jfe=new Set(["daemon","subagent","telegram","afk"]),Xfe=new Set(["repl","interactive","cli"])});import{existsSync as rge,readFileSync as oge}from"node:fs";import{createRequire as ige}from"node:module";import{dirname as sge,join as age}from"node:path";function kj(e){if(typeof e=="string")return e;let t=[],n=e;for(let r=0;r<cge&&n instanceof Error;r++)t.push(n.message),n=n.cause;return t.length>0?t.join(" | "):String(e)}function dn(e){let t=kj(e);return vj.some(n=>t.includes(n))}function uge(){try{let t=ige(import.meta.url).resolve("playwright/package.json"),n=JSON.parse(oge(t,"utf8"));if(typeof n!="object"||n===null)return;let r=n.bin,o=typeof r=="string"?r:typeof r=="object"&&r!==null?r.playwright:void 0;if(typeof o!="string"||o.length===0)return;let i=age(sge(t),o);return rge(i)?`node ${/\s/.test(i)?`"${i}"`:i} install chromium`:void 0}catch{return}}function Wp(){return wj??=uge()??lge,wj}function CA(e){return e.includes("install chromium")}function Un(e,t){let n=kj(e),r=t?.latched===!0?` ${dge}`:"";if(n.includes("Executable doesn't exist")){let o="";return t?.headless===!0?o=" This launch was headless, which needs the `chromium_headless_shell-*` build.":t?.headless===!1&&(o=" This launch was headed, which needs the full `chromium-*` build \u2014 the headless shell alone does not satisfy it."),`browser tools require the Playwright chromium binary. Install via: ${Wp()}.${o}${r}`}return`browser tools require the optional \`playwright\` peer dependency. Install via: pnpm add playwright (then ${Wp()}). Or pick a different tool.${r}`}function Kp(e,t,n=!1){if(!dn(e))return e;let r=e instanceof Error?e.message:String(e);return new Error(`${r}
386
386
 
387
- ${Un(e,{headless:t,latched:n})}`,{cause:e})}var vj,lge,cge,wj,dge,jy=y(()=>{"use strict";vj=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],lge="pnpm exec playwright install chromium",cge=4;dge="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 Js from"node:fs";import Hy from"node:path";import{randomBytes as pge}from"node:crypto";import{chromium as mge}from"playwright";function fge(){try{return"5.152.3"}catch{}try{let e=Hy.resolve(import.meta.dirname,"../../../package.json"),t=Js.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var gge,Wy,Tj=y(()=>{"use strict";jy();H();ce();gge=fge(),Wy=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(t){this.config=t}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(t){this.launchFailure={error:t}}async ensureBrowser(){if(this.browser!==void 0&&this.browser.isConnected())return this.browser;if(this.launchFailure!==void 0)throw this.launchFailure.error;return this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=mge.launch({headless:this.config.headless}).then(t=>(this.browser=t,this.launchPromise=void 0,this.clearLaunchFailure(),t)).catch(t=>{this.launchPromise=void 0;let n=Kp(t,this.config.headless,!0);throw this.latchLaunchFailure(n),n}),this.launchPromise)}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(t){let n=this.sessions.get(t);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),i=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),s={context:i,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(t,s),i}async ensurePage(t){let n=this.sessions.get(t);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(t);let r=this.sessions.get(t);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${t}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",i=>{i.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",i=>{i.isNavigationRequest()&&i.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",i=>{i.frame()===o.mainFrame()&&i.request().isNavigationRequest()&&(r.lastHttpStatus=i.status())}),o.on("dialog",i=>{r.openDialog=i}),o}getPage(t){return this.sessions.get(t)?.page}async renderHtml(t,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),i;n.requestGuard!==void 0&&await o.route("**/*",async a=>{try{await n.requestGuard(a.request().url()),await a.continue()}catch(l){i=l,await a.abort("blockedbyclient")}});let s=()=>{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",s,{once:!0});try{let a=await o.newPage(),l;try{l=await a.goto(t,{timeout:n.timeoutMs,waitUntil:n.waitUntil})}catch(p){throw i??p}if(i!==void 0)throw i;let c=await a.content();if(i!==void 0)throw i;let u=a.url(),d=l!==null?l.status():null;return{html:c,finalUrl:u,httpStatus:d}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",s),await o.close().catch(()=>{})}}getConsoleErrorCount(t){return this.sessions.get(t)?.consoleErrors??0}getLastHttpStatus(t){return this.sessions.get(t)?.lastHttpStatus??null}hasOpenDialog(t){return this.sessions.get(t)?.openDialog!==void 0}async dismissDialog(t,n=!0){let r=this.sessions.get(t);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(t){this.clearLaunchFailure();let n=this.sessions.get(t);n!==void 0&&(this.sessions.delete(t),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.clearLaunchFailure(),this.shutdownComplete)return;this.shutdownComplete=!0;let t=[...this.sessions.keys()];if(await Promise.all(t.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${gge}`}}loadStorageState(t){let n=Wd(t);try{if(!Js.existsSync(n))return;let r=JSON.parse(Js.readFileSync(n,"utf8"));return L("[browser/vault] restored session",{profile:t,file:n}),r}catch(r){L("[browser/vault] ignoring unreadable vault",{profile:t,file:n,err:r});return}}async saveStorageState(t,n){try{let r=Wd(t);if(!Js.existsSync(r))return;let o=await n.storageState(),i=Hy.join(Hy.dirname(r),`.${Hy.basename(r)}.${process.pid}.${pge(4).toString("hex")}.tmp`);Js.writeFileSync(i,JSON.stringify(o),{mode:384}),Js.chmodSync(i,384),Js.renameSync(i,r),L("[browser/vault] saved session",{profile:t,file:r})}catch(r){L("[browser/vault] save failed",{profile:t,err:r})}}}});import{createHash as hge}from"crypto";function Ej(e){return!!(e.role==="textbox"&&e.kind==="password"||e.label&&yge.test(e.label))}function Rj(e){return hge("sha256").update(e,"utf8").digest("hex").slice(0,8)}function xj(e){let t=e.replace(/\s+/g," ").trim();return t.length<=80?t:t.slice(0,77)+"..."}var yge,Ky=y(()=>{"use strict";yge=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as bge}from"node:crypto";function Sge(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function wge(e,t,n){return`el_${bge("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function vge(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function Aj(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function _j(e,t){let n=e.role??"",r=e.name??"";Cj.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let i of e.children??[])_j(i,t)}async function kge(e){return e.evaluate(t=>{let n=Array.from(document.querySelectorAll(t)),r=[];for(let o of n){let i=o.getBoundingClientRect(),s=o;if(i.width===0&&i.height===0){let u=window.getComputedStyle(s);if(u.display==="none"||u.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),l=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a==="input"?o.type||null:o.getAttribute("type");r.push({name:l,tagName:a,type:c,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(i.left),y:Math.round(i.top),w:Math.round(i.width),h:Math.round(i.height)}})}return r},Ij).catch(()=>[])}async function Tge(e){return e.evaluate(t=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(t)),o=[];for(let i of r){let s=i.tagName.toLowerCase(),a=i.getAttribute("role")??"",l=i.getAttribute("aria-label")??i.getAttribute("placeholder")??(i.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a||(n[s]??"");if(s==="input"){let h=i.type;h==="checkbox"?c="checkbox":h==="radio"?c="radio":h==="button"||h==="submit"||h==="reset"?c="button":h==="search"?c="searchbox":c="textbox"}if(!c)continue;let u="value"in i?i.value:void 0,d=u!==void 0?String(u):void 0,p=i.disabled??!1,f=s==="input"?i.checked:void 0,g={role:c,name:l,disabled:p};d!==void 0&&(g.value=d),f!==void 0&&(g.checked=f),o.push(g)}return o},Ij).catch(()=>[])}function Ege(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function Gy(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],i=Ege(e),s=i?i.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=kge(e),l=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(e.url()),u=e.title().catch(()=>""),[d,p,f,g,h]=await Promise.all([s,a,l,c,u]),b,S=!1;d!==null?(b=[],_j(d,b)):(o.push("observation skipped accessibility tree (returned null)"),S=!0,b=(await Tge(e)).filter(D=>Cj.has(D.role??"")));let w=new Map;for(let M of p){let D=Aj(M.name),$=w.get(D);(!$||$.bbox.w===0&&M.bbox.w>0)&&w.set(D,M)}let k=b.map(M=>({ax:M,dom:w.get(Aj(M.name??""))})),E=r?k:k.filter(M=>M.dom?M.dom.bbox.w>0||M.dom.bbox.h>0:!0);E.sort((M,D)=>{let $=M.dom?.bbox.y??0,U=D.dom?.bbox.y??0;if($!==U)return $-U;let W=M.dom?.bbox.x??0,G=D.dom?.bbox.x??0;return W-G}),E.length>200&&o.push("page has 200+ interactive elements; consider scoping");let R=E.slice(0,n).map((M,D)=>{let $=M.ax.role??"generic",U=M.ax.name??"",W=wge($,U,D),G=M.dom?.bbox??{x:0,y:0,w:0,h:0},j=M.dom?.type??null,K=null;M.ax.value!==void 0&&M.ax.value!==null&&(K=String(M.ax.value)),M.ax.checked!==void 0&&(K=String(M.ax.checked)),Ej({role:$,kind:j})&&(K="[redacted]");let Q={disabled:M.ax.disabled??!1};M.ax.checked!==void 0&&(Q.checked=M.ax.checked===!0||M.ax.checked==="mixed"),M.ax.selected!==void 0&&(Q.selected=M.ax.selected),M.ax.expanded!==void 0&&(Q.expanded=M.ax.expanded);let P;M.dom?.testId?P=`[data-testid="${M.dom.testId}"]`:M.dom?.id&&(P=`#${M.dom.id}`);let F={id:W,role:$,label:Sge(U),kind:j,value:K,state:Q,bbox:G};return P!==void 0&&(F.selector=P),F}),I="idle";try{let M=await e.evaluate(()=>document.readyState);M==="loading"?I="loading":M==="interactive"?I="navigating":I="idle"}catch{I="navigating"}I!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),S&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let C=vge(f),x=`obs_${t.observationCounter.toString(36)}`,_=new Date().toISOString();return{observationId:x,url:g,title:h,textSummary:C,interactive:R,status:{httpStatus:t.httpStatus??null,loadingState:I,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:_}}var Cj,Ij,Pj=y(()=>{"use strict";Ky();Cj=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);Ij="a[href], button, input, select, textarea, [role], [tabindex], label"});async function Mj(e,t){try{let n=await e.nth(t).evaluate(s=>{let a=s,l=a.getAttribute("role")??a.tagName.toLowerCase(),c=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",u=a.getBoundingClientRect();return{role:l,label:c,x:Math.round(u.x),y:Math.round(u.y),w:Math.round(u.width),h:Math.round(u.height)}}),r=`${n.role}:${n.label}:${t}`,o=0;for(let s=0;s<r.length;s++)o=o*31+r.charCodeAt(s)>>>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 _A(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,i)=>Mj(e,i)))).filter(o=>o!==null)}async function Rge(e){let t=new Set,n=[];for(let{loc:r,count:o}of e)for(let i=0;i<o;i++){let s;try{s=await r.nth(i).evaluate(a=>{let l=a,c=l.getBoundingClientRect();return`${l.tagName}@${Math.round(c.x)},${Math.round(c.y)}`})}catch{continue}t.has(s)||(t.add(s),n.push({key:s,locator:r,index:i}))}return n}async function IA(e,t,n){switch(t.kind){case"element_id":return xge(e,t,n);case"selector":return Age(e,t);case"semantic":return Cge(e,t)}}async function xge(e,t,n){let r=n.get(t.elementId);if(r===void 0)return{outcome:"not_found",query:t};if(r.selector!==void 0){let l=e.locator(r.selector);if(await l.count()===1)return{outcome:"resolved",locator:l}}let o=e.getByRole(r.role,{name:r.label,exact:!0}),i=await o.count();if(i===0)return{outcome:"not_found",query:t};if(i===1)return{outcome:"resolved",locator:o};let s=await _A(o,i);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:s}}async function Age(e,t){let n=e.locator(t.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:t};if(r===1)return{outcome:"resolved",locator:n};let o=await _A(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function Cge(e,t){return t.role!==void 0?_ge(e,t.text,t.role):Ige(e,t.text,t)}async function _ge(e,t,n){let r=e.getByRole(n,{name:t}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:t,role:n}};if(o===1)return{outcome:"resolved",locator:r};let i=await _A(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:i}}async function Ige(e,t,n){let r=e.getByRole("button",{name:t}),o=e.getByRole("link",{name:t}),i=e.getByLabel(t,{exact:!1}),[s,a,l]=await Promise.all([r.count(),o.count(),i.count()]);if(s+a+l===0)return{outcome:"not_found",query:n};let u=[];s>0&&u.push({loc:r,count:s}),a>0&&u.push({loc:o,count:a}),l>0&&u.push({loc:i,count:l});let d=await Rge(u);if(d.length===0)return{outcome:"not_found",query:n};if(d.length===1){let h=d[0];return h===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:h.locator.nth(h.index)}}let p=d.slice(0,5),f=[];for(let h=0;h<p.length;h++){let b=p[h];if(b===void 0)continue;let S=await Mj(b.locator,b.index);if(S!==null){let w=`${S.role}:${S.label}:${h}`,k=0;for(let E=0;E<w.length;E++)k=k*31+w.charCodeAt(E)>>>0;f.push({...S,id:`el_${k.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var Oj=y(()=>{"use strict"});async function PA(e,t,n,r){let o=e.url();if(o===n)return null;let i=By(o,t);if(i.allowed)return null;try{await e.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:i.reason}}var Dj=y(()=>{"use strict";Uy()});import{randomBytes as Pge}from"crypto";import{mkdir as Mge,stat as Oge,writeFile as Dge}from"fs/promises";import{join as MA}from"path";import{gzip as $ge}from"zlib";import{promisify as Fge}from"util";function Lge(e){return MA(Sn(e),"browser")}function Nge(e){return MA(Lge(e),"screenshots")}function Bge(){return new Date().toISOString().replace(/[:.]/g,"-")}function Uge(){return Pge(3).toString("hex")}async function OA(e,t,n){if(t.length>$j)throw new Error(`writeScreenshotSidecar: buffer exceeds ${$j} byte cap (received ${t.length} bytes). Refusing to write oversized screenshot.`);let r=Nge(e);await Mge(r,{recursive:!0});let o=`${Bge()}-${Uge()}-${n}.png`,i=MA(r,o);await Dge(i,t);let{size:s}=await Oge(i);return{path:i,bytes:s}}var l3e,$j,Fj=y(()=>{"use strict";H();Ky();l3e=Fge($ge);$j=5*1024*1024});var Nj={};uo(Nj,{PlaywrightProvider:()=>DA});function Lj(e){switch(e.kind){case"semantic":return e.role!==void 0?`semantic('${e.text}', role='${e.role}')`:`semantic('${e.text}')`;case"element_id":return`element_id(${e.elementId})`;case"selector":return`selector(${e.selector})`}}var DA,Bj=y(()=>{"use strict";Tj();Pj();Oj();Uy();Dj();Fj();DA=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new Wy(t)}async open(t){let n=By(t.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:t.url,reason:n.reason};let{sessionId:r}=t,o=await this.launcher.ensurePage(r),i=this.ensureSessionState(r),s=null,a=null;try{await o.goto(t.url,{timeout:t.timeoutMs??3e4,waitUntil:t.waitFor??"load"})}catch(d){a=d}let l=o.url();if(!(a!==null&&(l===""||l==="about:blank"))){let d=await PA(o,this.config,t.url,()=>this.close({sessionId:r}));if(d!==null)return d}(t.screenshot===!0||a!==null)&&(s=await this.captureScreenshot(o,r,"browser_open")),i.observationCounter+=1;let u=await Gy(o,{observationCounter:i.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(i,u.interactive,u.url,u.title,"browser_open"),a!==null)throw a;return u}async observe(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),i=null;t.screenshot===!0&&(i=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let s=await Gy(r,{observationCounter:o.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:t.includeHidden,maxElements:t.maxElements});return this.updateSessionFromObservation(o,s.interactive,s.url,s.title,"browser_observe"),s}async act(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),i=r.url(),s=t.timeoutMs??3e4,a=await IA(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${Lj(t.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:l}=a,c=null,u=async()=>{switch(t.action){case"click":await l.click({timeout:s});break;case"fill":await l.fill(t.value??"");break;case"press":await l.press(t.value??"");break;case"select":await l.selectOption(t.value??"");break;case"hover":await l.hover({timeout:s});break;case"scroll_to":await l.scrollIntoViewIfNeeded({timeout:s});break;case"wait_for":await l.waitFor({timeout:s,state:"visible"});break}};try{await u()}catch(h){if(h instanceof Error&&/navigation|net::ERR/i.test(h.message))try{await u()}catch(b){c=b}else c=h}let d=await PA(r,this.config,i,()=>this.close({sessionId:n}));if(d!==null)return d;let p=null;(t.screenshot===!0||c!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Gy(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),g=`browser_act:${t.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,g),c!==null)throw c;return f}async render(t){return this.launcher.renderHtml(t.url,{timeoutMs:t.timeoutMs??3e4,waitUntil:t.waitFor??"load",signal:t.signal,requestGuard:t.requestGuard})}async screenshot(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),i;if(t.target!==void 0){let u=await IA(r,t.target,o.knownElements);if(u.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${Lj(t.target)}`);if(u.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");i=await u.locator.screenshot()}else i=await r.screenshot({fullPage:t.fullPage??!1});let{path:s,bytes:a}=await OA(n,i,"browser_screenshot"),l=0,c=0;if(t.fullPage===!0)try{let u=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));l=u.w,c=u.h}catch{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}else{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}return{path:s,bytes:a,width:l,height:c,dataBase64:i.toString("base64"),mediaType:"image/png"}}async extract(t){throw new Error("browser_extract not implemented in Phase 1")}async close(t){await this.launcher.closeSession(t.sessionId),this.sessions.delete(t.sessionId)}describe(t){let n=this.sessions.get(t);if(n===void 0)return null;let r=this.launcher.getPage(t);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(t){let n=this.sessions.get(t);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(t,r),r}updateSessionFromObservation(t,n,r,o,i){t.knownElements=new Map(n.map(s=>[s.id,s])),t.currentUrl=r,t.currentTitle=o,t.lastAction=i,t.lastActionAt=new Date().toISOString()}async captureScreenshot(t,n,r){try{let o=await t.screenshot({fullPage:!1}),{path:i}=await OA(n,o,r);return i}catch{return null}}}});var Qs={};uo(Qs,{__resetBrowserRegistryForTests:()=>Gge,browserProviderActive:()=>Wge,closeBrowserProvider:()=>$A,getBrowserProvider:()=>Hge,peekBrowserProvider:()=>Kge});function Uj(){Promise.resolve($A()).then(()=>{process.exit(130)})}function jj(){Promise.resolve($A()).then(()=>{process.exit(143)})}function Hj(){jr=null}function jge(){qy||(process.on("SIGINT",Uj),process.on("SIGTERM",jj),process.on("exit",Hj),qy=!0)}function Wj(){qy&&(process.removeListener("SIGINT",Uj),process.removeListener("SIGTERM",jj),process.removeListener("exit",Hj),qy=!1)}async function Hge(e){return jr!==null?jr:(Xs!==null||(Xs=(async()=>{let{PlaywrightProvider:t}=await Promise.resolve().then(()=>(Bj(),Nj)),n=Sj(e),r=new t(n);return jge(),jr=r,Xs=null,r})()),Xs)}async function $A(){if(jr===null)return;let e=jr;jr=null,Xs=null,Wj(),await e.shutdown()}function Wge(){return jr!==null}function Kge(){return jr}function Gge(){jr=null,Xs=null,Wj()}var jr,Xs,qy,Zs=y(()=>{"use strict";Uy();jr=null,Xs=null,qy=!1});async function Kj(e,t){try{return await aj(e,t)}catch(n){return L("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function Xge(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Zs(),Qs));return(await n()).render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}async function Gj(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??Xge,o=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},i=null,s="",a=e,l=null,c=null;try{let d=await Ny(n,e,{headers:Jge,signal:t.signal},o);l=d.status,a=d.url||e;let p=d.headers.get("content-type")??"";if(d.ok){if(Yge.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 d.text();if(Vge.test(p)&&!zge.test(p))return{title:"",markdown:f.trim(),finalUrl:a,usedRender:!1};if(s=f,i=await Kj(f,a),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(d){if(t.signal.aborted||d instanceof cr||d instanceof Error&&d.message.startsWith("web_scrape markdown mode received binary"))throw d;c=d}if(!(i===null||i.textLength<200)&&i!==null){let d=kA({html:s,extractedTextLength:i.textLength});return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1,...d!==void 0?{advisory:d}:{}}}try{await Hp(e,o);let d=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:f=>Hp(f,o)});d.finalUrl!==e&&/^https?:\/\//i.test(d.finalUrl)&&await Hp(d.finalUrl,o);let p=await Kj(d.html,d.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(i===null||p.textLength>=i.textLength){let f=kA({html:d.html,extractedTextLength:p.textLength});return{title:p.title,markdown:p.markdown,finalUrl:d.finalUrl,usedRender:!0,...f!==void 0?{advisory:f}:{}}}}catch(d){if(t.signal.aborted||d instanceof cr)throw d;if(i===null){let p=d instanceof Error?d.message:String(d),f=c instanceof Error?c.message:`HTTP ${l??"error"}`,g=new Error(`web_scrape could not retrieve ${e}: fetch failed (${f}) and render failed (${p}).`);throw g.cause=d,g}}if(i!==null)return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${l??"error"}).`)}var zge,Vge,Yge,Jge,qj=y(()=>{"use strict";lj();TA();AA();ce();zge=/(text\/html|application\/xhtml\+xml)/i,Vge=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,Yge=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,Jge={"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 ehe(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let i=await t(Qge,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":e.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),Zge),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!i.ok){let l="";try{let u=await i.text(),d=ae(u);d&&(l=`: ${d.length>200?d.slice(0,200)+"\u2026":d}`)}catch{}let c=i.statusText?` ${i.statusText}`:"";throw new Error(`Exa Search HTTP ${i.status}${c}${l}`)}let s;try{s=await i.json()}catch(l){throw new Error(`Exa Search response was not JSON: ${l instanceof Error?l.message:String(l)}`)}return(s.results??[]).slice(0,r).map(l=>({title:(l.title??"").trim()||"(untitled)",url:l.url??"",description:(l.highlights?.[0]??"").trim()})).filter(l=>l.url.length>0)}}}function zj(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?ehe({apiKey:e.exaApiKey,fetchFn:e.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function Vj(e,t){if(t.length===0)return`# Search results for "${e}"
387
+ ${Un(e,{headless:t,latched:n})}`,{cause:e})}var vj,lge,cge,wj,dge,jy=y(()=>{"use strict";vj=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],lge="pnpm exec playwright install chromium",cge=4;dge="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 Js from"node:fs";import Hy from"node:path";import{randomBytes as pge}from"node:crypto";import{chromium as mge}from"playwright";function fge(){try{return"5.152.4"}catch{}try{let e=Hy.resolve(import.meta.dirname,"../../../package.json"),t=Js.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var gge,Wy,Tj=y(()=>{"use strict";jy();H();ce();gge=fge(),Wy=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(t){this.config=t}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(t){this.launchFailure={error:t}}async ensureBrowser(){if(this.browser!==void 0&&this.browser.isConnected())return this.browser;if(this.launchFailure!==void 0)throw this.launchFailure.error;return this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=mge.launch({headless:this.config.headless}).then(t=>(this.browser=t,this.launchPromise=void 0,this.clearLaunchFailure(),t)).catch(t=>{this.launchPromise=void 0;let n=Kp(t,this.config.headless,!0);throw this.latchLaunchFailure(n),n}),this.launchPromise)}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(t){let n=this.sessions.get(t);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),i=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),s={context:i,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(t,s),i}async ensurePage(t){let n=this.sessions.get(t);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(t);let r=this.sessions.get(t);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${t}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",i=>{i.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",i=>{i.isNavigationRequest()&&i.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",i=>{i.frame()===o.mainFrame()&&i.request().isNavigationRequest()&&(r.lastHttpStatus=i.status())}),o.on("dialog",i=>{r.openDialog=i}),o}getPage(t){return this.sessions.get(t)?.page}async renderHtml(t,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),i;n.requestGuard!==void 0&&await o.route("**/*",async a=>{try{await n.requestGuard(a.request().url()),await a.continue()}catch(l){i=l,await a.abort("blockedbyclient")}});let s=()=>{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",s,{once:!0});try{let a=await o.newPage(),l;try{l=await a.goto(t,{timeout:n.timeoutMs,waitUntil:n.waitUntil})}catch(p){throw i??p}if(i!==void 0)throw i;let c=await a.content();if(i!==void 0)throw i;let u=a.url(),d=l!==null?l.status():null;return{html:c,finalUrl:u,httpStatus:d}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",s),await o.close().catch(()=>{})}}getConsoleErrorCount(t){return this.sessions.get(t)?.consoleErrors??0}getLastHttpStatus(t){return this.sessions.get(t)?.lastHttpStatus??null}hasOpenDialog(t){return this.sessions.get(t)?.openDialog!==void 0}async dismissDialog(t,n=!0){let r=this.sessions.get(t);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(t){this.clearLaunchFailure();let n=this.sessions.get(t);n!==void 0&&(this.sessions.delete(t),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.clearLaunchFailure(),this.shutdownComplete)return;this.shutdownComplete=!0;let t=[...this.sessions.keys()];if(await Promise.all(t.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${gge}`}}loadStorageState(t){let n=Wd(t);try{if(!Js.existsSync(n))return;let r=JSON.parse(Js.readFileSync(n,"utf8"));return L("[browser/vault] restored session",{profile:t,file:n}),r}catch(r){L("[browser/vault] ignoring unreadable vault",{profile:t,file:n,err:r});return}}async saveStorageState(t,n){try{let r=Wd(t);if(!Js.existsSync(r))return;let o=await n.storageState(),i=Hy.join(Hy.dirname(r),`.${Hy.basename(r)}.${process.pid}.${pge(4).toString("hex")}.tmp`);Js.writeFileSync(i,JSON.stringify(o),{mode:384}),Js.chmodSync(i,384),Js.renameSync(i,r),L("[browser/vault] saved session",{profile:t,file:r})}catch(r){L("[browser/vault] save failed",{profile:t,err:r})}}}});import{createHash as hge}from"crypto";function Ej(e){return!!(e.role==="textbox"&&e.kind==="password"||e.label&&yge.test(e.label))}function Rj(e){return hge("sha256").update(e,"utf8").digest("hex").slice(0,8)}function xj(e){let t=e.replace(/\s+/g," ").trim();return t.length<=80?t:t.slice(0,77)+"..."}var yge,Ky=y(()=>{"use strict";yge=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as bge}from"node:crypto";function Sge(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function wge(e,t,n){return`el_${bge("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function vge(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function Aj(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function _j(e,t){let n=e.role??"",r=e.name??"";Cj.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let i of e.children??[])_j(i,t)}async function kge(e){return e.evaluate(t=>{let n=Array.from(document.querySelectorAll(t)),r=[];for(let o of n){let i=o.getBoundingClientRect(),s=o;if(i.width===0&&i.height===0){let u=window.getComputedStyle(s);if(u.display==="none"||u.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),l=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a==="input"?o.type||null:o.getAttribute("type");r.push({name:l,tagName:a,type:c,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(i.left),y:Math.round(i.top),w:Math.round(i.width),h:Math.round(i.height)}})}return r},Ij).catch(()=>[])}async function Tge(e){return e.evaluate(t=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(t)),o=[];for(let i of r){let s=i.tagName.toLowerCase(),a=i.getAttribute("role")??"",l=i.getAttribute("aria-label")??i.getAttribute("placeholder")??(i.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a||(n[s]??"");if(s==="input"){let h=i.type;h==="checkbox"?c="checkbox":h==="radio"?c="radio":h==="button"||h==="submit"||h==="reset"?c="button":h==="search"?c="searchbox":c="textbox"}if(!c)continue;let u="value"in i?i.value:void 0,d=u!==void 0?String(u):void 0,p=i.disabled??!1,f=s==="input"?i.checked:void 0,g={role:c,name:l,disabled:p};d!==void 0&&(g.value=d),f!==void 0&&(g.checked=f),o.push(g)}return o},Ij).catch(()=>[])}function Ege(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function Gy(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],i=Ege(e),s=i?i.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=kge(e),l=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(e.url()),u=e.title().catch(()=>""),[d,p,f,g,h]=await Promise.all([s,a,l,c,u]),b,S=!1;d!==null?(b=[],_j(d,b)):(o.push("observation skipped accessibility tree (returned null)"),S=!0,b=(await Tge(e)).filter(D=>Cj.has(D.role??"")));let w=new Map;for(let M of p){let D=Aj(M.name),$=w.get(D);(!$||$.bbox.w===0&&M.bbox.w>0)&&w.set(D,M)}let k=b.map(M=>({ax:M,dom:w.get(Aj(M.name??""))})),E=r?k:k.filter(M=>M.dom?M.dom.bbox.w>0||M.dom.bbox.h>0:!0);E.sort((M,D)=>{let $=M.dom?.bbox.y??0,U=D.dom?.bbox.y??0;if($!==U)return $-U;let W=M.dom?.bbox.x??0,G=D.dom?.bbox.x??0;return W-G}),E.length>200&&o.push("page has 200+ interactive elements; consider scoping");let R=E.slice(0,n).map((M,D)=>{let $=M.ax.role??"generic",U=M.ax.name??"",W=wge($,U,D),G=M.dom?.bbox??{x:0,y:0,w:0,h:0},j=M.dom?.type??null,K=null;M.ax.value!==void 0&&M.ax.value!==null&&(K=String(M.ax.value)),M.ax.checked!==void 0&&(K=String(M.ax.checked)),Ej({role:$,kind:j})&&(K="[redacted]");let Q={disabled:M.ax.disabled??!1};M.ax.checked!==void 0&&(Q.checked=M.ax.checked===!0||M.ax.checked==="mixed"),M.ax.selected!==void 0&&(Q.selected=M.ax.selected),M.ax.expanded!==void 0&&(Q.expanded=M.ax.expanded);let P;M.dom?.testId?P=`[data-testid="${M.dom.testId}"]`:M.dom?.id&&(P=`#${M.dom.id}`);let F={id:W,role:$,label:Sge(U),kind:j,value:K,state:Q,bbox:G};return P!==void 0&&(F.selector=P),F}),I="idle";try{let M=await e.evaluate(()=>document.readyState);M==="loading"?I="loading":M==="interactive"?I="navigating":I="idle"}catch{I="navigating"}I!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),S&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let C=vge(f),x=`obs_${t.observationCounter.toString(36)}`,_=new Date().toISOString();return{observationId:x,url:g,title:h,textSummary:C,interactive:R,status:{httpStatus:t.httpStatus??null,loadingState:I,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:_}}var Cj,Ij,Pj=y(()=>{"use strict";Ky();Cj=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);Ij="a[href], button, input, select, textarea, [role], [tabindex], label"});async function Mj(e,t){try{let n=await e.nth(t).evaluate(s=>{let a=s,l=a.getAttribute("role")??a.tagName.toLowerCase(),c=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",u=a.getBoundingClientRect();return{role:l,label:c,x:Math.round(u.x),y:Math.round(u.y),w:Math.round(u.width),h:Math.round(u.height)}}),r=`${n.role}:${n.label}:${t}`,o=0;for(let s=0;s<r.length;s++)o=o*31+r.charCodeAt(s)>>>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 _A(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,i)=>Mj(e,i)))).filter(o=>o!==null)}async function Rge(e){let t=new Set,n=[];for(let{loc:r,count:o}of e)for(let i=0;i<o;i++){let s;try{s=await r.nth(i).evaluate(a=>{let l=a,c=l.getBoundingClientRect();return`${l.tagName}@${Math.round(c.x)},${Math.round(c.y)}`})}catch{continue}t.has(s)||(t.add(s),n.push({key:s,locator:r,index:i}))}return n}async function IA(e,t,n){switch(t.kind){case"element_id":return xge(e,t,n);case"selector":return Age(e,t);case"semantic":return Cge(e,t)}}async function xge(e,t,n){let r=n.get(t.elementId);if(r===void 0)return{outcome:"not_found",query:t};if(r.selector!==void 0){let l=e.locator(r.selector);if(await l.count()===1)return{outcome:"resolved",locator:l}}let o=e.getByRole(r.role,{name:r.label,exact:!0}),i=await o.count();if(i===0)return{outcome:"not_found",query:t};if(i===1)return{outcome:"resolved",locator:o};let s=await _A(o,i);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:s}}async function Age(e,t){let n=e.locator(t.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:t};if(r===1)return{outcome:"resolved",locator:n};let o=await _A(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function Cge(e,t){return t.role!==void 0?_ge(e,t.text,t.role):Ige(e,t.text,t)}async function _ge(e,t,n){let r=e.getByRole(n,{name:t}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:t,role:n}};if(o===1)return{outcome:"resolved",locator:r};let i=await _A(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:i}}async function Ige(e,t,n){let r=e.getByRole("button",{name:t}),o=e.getByRole("link",{name:t}),i=e.getByLabel(t,{exact:!1}),[s,a,l]=await Promise.all([r.count(),o.count(),i.count()]);if(s+a+l===0)return{outcome:"not_found",query:n};let u=[];s>0&&u.push({loc:r,count:s}),a>0&&u.push({loc:o,count:a}),l>0&&u.push({loc:i,count:l});let d=await Rge(u);if(d.length===0)return{outcome:"not_found",query:n};if(d.length===1){let h=d[0];return h===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:h.locator.nth(h.index)}}let p=d.slice(0,5),f=[];for(let h=0;h<p.length;h++){let b=p[h];if(b===void 0)continue;let S=await Mj(b.locator,b.index);if(S!==null){let w=`${S.role}:${S.label}:${h}`,k=0;for(let E=0;E<w.length;E++)k=k*31+w.charCodeAt(E)>>>0;f.push({...S,id:`el_${k.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var Oj=y(()=>{"use strict"});async function PA(e,t,n,r){let o=e.url();if(o===n)return null;let i=By(o,t);if(i.allowed)return null;try{await e.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:i.reason}}var Dj=y(()=>{"use strict";Uy()});import{randomBytes as Pge}from"crypto";import{mkdir as Mge,stat as Oge,writeFile as Dge}from"fs/promises";import{join as MA}from"path";import{gzip as $ge}from"zlib";import{promisify as Fge}from"util";function Lge(e){return MA(Sn(e),"browser")}function Nge(e){return MA(Lge(e),"screenshots")}function Bge(){return new Date().toISOString().replace(/[:.]/g,"-")}function Uge(){return Pge(3).toString("hex")}async function OA(e,t,n){if(t.length>$j)throw new Error(`writeScreenshotSidecar: buffer exceeds ${$j} byte cap (received ${t.length} bytes). Refusing to write oversized screenshot.`);let r=Nge(e);await Mge(r,{recursive:!0});let o=`${Bge()}-${Uge()}-${n}.png`,i=MA(r,o);await Dge(i,t);let{size:s}=await Oge(i);return{path:i,bytes:s}}var l3e,$j,Fj=y(()=>{"use strict";H();Ky();l3e=Fge($ge);$j=5*1024*1024});var Nj={};uo(Nj,{PlaywrightProvider:()=>DA});function Lj(e){switch(e.kind){case"semantic":return e.role!==void 0?`semantic('${e.text}', role='${e.role}')`:`semantic('${e.text}')`;case"element_id":return`element_id(${e.elementId})`;case"selector":return`selector(${e.selector})`}}var DA,Bj=y(()=>{"use strict";Tj();Pj();Oj();Uy();Dj();Fj();DA=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new Wy(t)}async open(t){let n=By(t.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:t.url,reason:n.reason};let{sessionId:r}=t,o=await this.launcher.ensurePage(r),i=this.ensureSessionState(r),s=null,a=null;try{await o.goto(t.url,{timeout:t.timeoutMs??3e4,waitUntil:t.waitFor??"load"})}catch(d){a=d}let l=o.url();if(!(a!==null&&(l===""||l==="about:blank"))){let d=await PA(o,this.config,t.url,()=>this.close({sessionId:r}));if(d!==null)return d}(t.screenshot===!0||a!==null)&&(s=await this.captureScreenshot(o,r,"browser_open")),i.observationCounter+=1;let u=await Gy(o,{observationCounter:i.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(i,u.interactive,u.url,u.title,"browser_open"),a!==null)throw a;return u}async observe(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),i=null;t.screenshot===!0&&(i=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let s=await Gy(r,{observationCounter:o.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:t.includeHidden,maxElements:t.maxElements});return this.updateSessionFromObservation(o,s.interactive,s.url,s.title,"browser_observe"),s}async act(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),i=r.url(),s=t.timeoutMs??3e4,a=await IA(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${Lj(t.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:l}=a,c=null,u=async()=>{switch(t.action){case"click":await l.click({timeout:s});break;case"fill":await l.fill(t.value??"");break;case"press":await l.press(t.value??"");break;case"select":await l.selectOption(t.value??"");break;case"hover":await l.hover({timeout:s});break;case"scroll_to":await l.scrollIntoViewIfNeeded({timeout:s});break;case"wait_for":await l.waitFor({timeout:s,state:"visible"});break}};try{await u()}catch(h){if(h instanceof Error&&/navigation|net::ERR/i.test(h.message))try{await u()}catch(b){c=b}else c=h}let d=await PA(r,this.config,i,()=>this.close({sessionId:n}));if(d!==null)return d;let p=null;(t.screenshot===!0||c!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Gy(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),g=`browser_act:${t.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,g),c!==null)throw c;return f}async render(t){return this.launcher.renderHtml(t.url,{timeoutMs:t.timeoutMs??3e4,waitUntil:t.waitFor??"load",signal:t.signal,requestGuard:t.requestGuard})}async screenshot(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),i;if(t.target!==void 0){let u=await IA(r,t.target,o.knownElements);if(u.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${Lj(t.target)}`);if(u.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");i=await u.locator.screenshot()}else i=await r.screenshot({fullPage:t.fullPage??!1});let{path:s,bytes:a}=await OA(n,i,"browser_screenshot"),l=0,c=0;if(t.fullPage===!0)try{let u=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));l=u.w,c=u.h}catch{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}else{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}return{path:s,bytes:a,width:l,height:c,dataBase64:i.toString("base64"),mediaType:"image/png"}}async extract(t){throw new Error("browser_extract not implemented in Phase 1")}async close(t){await this.launcher.closeSession(t.sessionId),this.sessions.delete(t.sessionId)}describe(t){let n=this.sessions.get(t);if(n===void 0)return null;let r=this.launcher.getPage(t);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(t){let n=this.sessions.get(t);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(t,r),r}updateSessionFromObservation(t,n,r,o,i){t.knownElements=new Map(n.map(s=>[s.id,s])),t.currentUrl=r,t.currentTitle=o,t.lastAction=i,t.lastActionAt=new Date().toISOString()}async captureScreenshot(t,n,r){try{let o=await t.screenshot({fullPage:!1}),{path:i}=await OA(n,o,r);return i}catch{return null}}}});var Qs={};uo(Qs,{__resetBrowserRegistryForTests:()=>Gge,browserProviderActive:()=>Wge,closeBrowserProvider:()=>$A,getBrowserProvider:()=>Hge,peekBrowserProvider:()=>Kge});function Uj(){Promise.resolve($A()).then(()=>{process.exit(130)})}function jj(){Promise.resolve($A()).then(()=>{process.exit(143)})}function Hj(){jr=null}function jge(){qy||(process.on("SIGINT",Uj),process.on("SIGTERM",jj),process.on("exit",Hj),qy=!0)}function Wj(){qy&&(process.removeListener("SIGINT",Uj),process.removeListener("SIGTERM",jj),process.removeListener("exit",Hj),qy=!1)}async function Hge(e){return jr!==null?jr:(Xs!==null||(Xs=(async()=>{let{PlaywrightProvider:t}=await Promise.resolve().then(()=>(Bj(),Nj)),n=Sj(e),r=new t(n);return jge(),jr=r,Xs=null,r})()),Xs)}async function $A(){if(jr===null)return;let e=jr;jr=null,Xs=null,Wj(),await e.shutdown()}function Wge(){return jr!==null}function Kge(){return jr}function Gge(){jr=null,Xs=null,Wj()}var jr,Xs,qy,Zs=y(()=>{"use strict";Uy();jr=null,Xs=null,qy=!1});async function Kj(e,t){try{return await aj(e,t)}catch(n){return L("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function Xge(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Zs(),Qs));return(await n()).render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}async function Gj(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??Xge,o=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},i=null,s="",a=e,l=null,c=null;try{let d=await Ny(n,e,{headers:Jge,signal:t.signal},o);l=d.status,a=d.url||e;let p=d.headers.get("content-type")??"";if(d.ok){if(Yge.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 d.text();if(Vge.test(p)&&!zge.test(p))return{title:"",markdown:f.trim(),finalUrl:a,usedRender:!1};if(s=f,i=await Kj(f,a),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(d){if(t.signal.aborted||d instanceof cr||d instanceof Error&&d.message.startsWith("web_scrape markdown mode received binary"))throw d;c=d}if(!(i===null||i.textLength<200)&&i!==null){let d=kA({html:s,extractedTextLength:i.textLength});return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1,...d!==void 0?{advisory:d}:{}}}try{await Hp(e,o);let d=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:f=>Hp(f,o)});d.finalUrl!==e&&/^https?:\/\//i.test(d.finalUrl)&&await Hp(d.finalUrl,o);let p=await Kj(d.html,d.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(i===null||p.textLength>=i.textLength){let f=kA({html:d.html,extractedTextLength:p.textLength});return{title:p.title,markdown:p.markdown,finalUrl:d.finalUrl,usedRender:!0,...f!==void 0?{advisory:f}:{}}}}catch(d){if(t.signal.aborted||d instanceof cr)throw d;if(i===null){let p=d instanceof Error?d.message:String(d),f=c instanceof Error?c.message:`HTTP ${l??"error"}`,g=new Error(`web_scrape could not retrieve ${e}: fetch failed (${f}) and render failed (${p}).`);throw g.cause=d,g}}if(i!==null)return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${l??"error"}).`)}var zge,Vge,Yge,Jge,qj=y(()=>{"use strict";lj();TA();AA();ce();zge=/(text\/html|application\/xhtml\+xml)/i,Vge=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,Yge=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,Jge={"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 ehe(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let i=await t(Qge,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":e.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),Zge),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!i.ok){let l="";try{let u=await i.text(),d=ae(u);d&&(l=`: ${d.length>200?d.slice(0,200)+"\u2026":d}`)}catch{}let c=i.statusText?` ${i.statusText}`:"";throw new Error(`Exa Search HTTP ${i.status}${c}${l}`)}let s;try{s=await i.json()}catch(l){throw new Error(`Exa Search response was not JSON: ${l instanceof Error?l.message:String(l)}`)}return(s.results??[]).slice(0,r).map(l=>({title:(l.title??"").trim()||"(untitled)",url:l.url??"",description:(l.highlights?.[0]??"").trim()})).filter(l=>l.url.length>0)}}}function zj(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?ehe({apiKey:e.exaApiKey,fetchFn:e.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function Vj(e,t){if(t.length===0)return`# Search results for "${e}"
388
388
 
389
389
  (no results)`;let n=[`# Search results for "${e}"`,""];return t.forEach((r,o)=>{n.push(`## ${o+1}. ${r.title}`),r.url&&n.push(r.url),r.description&&n.push(r.description),n.push("")}),n.join(`
390
390
  `).trimEnd()}var Qge,Zge,Yj=y(()=>{"use strict";ut();Qge="https://api.exa.ai/search",Zge=10});function zy(e){if(e instanceof Error&&e.name==="TimeoutError")return"timeout";let t=e instanceof Error?e.message:String(e);return/Timeout\s+\d+\s*ms exceeded/i.test(t)?"timeout":void 0}var ea=y(()=>{"use strict";jy()});function she(e){if(!e||typeof e!="object")return{error:"Invalid input: expected an object"};let t=e,n=t.mode??"markdown";if(n!=="markdown"&&n!=="raw"&&n!=="search")return{error:`Invalid input: mode must be one of "markdown", "raw", "search" (got ${JSON.stringify(n)})`};let r=n,o,i;if(r==="search"){if(typeof t.query!="string"||t.query.length===0)return{error:'Invalid input: search mode requires a non-empty "query" string'};i=t.query}else{if(typeof t.url!="string"||t.url.length===0)return{error:`Invalid input: ${r} mode requires a non-empty "url" string`};let l;try{l=new URL(t.url)}catch{return{error:`Invalid input: "${t.url}" is not a valid absolute URL`}}if(l.protocol!=="http:"&&l.protocol!=="https:")return{error:`Invalid input: protocol "${l.protocol}" not supported (http/https only)`};o=l.toString()}let s=the;if(t.timeout_ms!==void 0){if(typeof t.timeout_ms!="number"||!Number.isFinite(t.timeout_ms)||t.timeout_ms<=0)return{error:"Invalid input: timeout_ms must be a positive finite number"};s=Math.min(t.timeout_ms,nhe)}let a=rhe;if(t.max_bytes!==void 0){if(typeof t.max_bytes!="number"||!Number.isFinite(t.max_bytes)||t.max_bytes<=0)return{error:"Invalid input: max_bytes must be a positive finite number"};a=Math.min(t.max_bytes,ohe)}return{mode:r,url:o,query:i,timeoutMs:s,maxBytes:a}}function FA(e,t){return Buffer.byteLength(e,"utf8")<=t?{content:e,truncated:!1}:{content:Ls(e,t),truncated:!0}}function ahe(e={}){let t=e.fetchFn??globalThis.fetch,n=e.env??process.env,r=e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{};return async(o,i)=>{if(typeof t!="function")return{content:"web_scrape unavailable: global fetch() is not present in this runtime (agent-afk requires Node 20+).",isError:!0};let s=she(o);if("error"in s)return{content:s.error,isError:!0};if(i.aborted){let d=i.reason;return{content:`web_scrape aborted: ${d instanceof Error?d.message:String(d??"aborted")}`,isError:!0}}let a=new AbortController,l=()=>{a.abort(i.reason)},c,u=()=>{let d=a.signal.reason;return d instanceof Error?d.message:String(d??"aborted")};try{if(i.addEventListener("abort",l,{once:!0}),c=setTimeout(()=>{a.abort(new Error(`web_scrape timeout after ${s.timeoutMs}ms`))},s.timeoutMs),s.url!==void 0){let p=await xA(s.url,r);if(a.signal.aborted)return{content:`web_scrape aborted: ${u()}`,isError:!0};if(!p.allowed)return{content:`web_scrape blocked: ${p.reason}`,isError:!0}}if(s.mode==="raw"){let p;try{let h={method:"GET",headers:{"User-Agent":"agent-afk/web_scrape",Accept:"*/*"},signal:a.signal};p=await Ny(t,s.url,h,r)}catch(h){return a.signal.aborted?{content:`web_scrape aborted: ${u()}`,isError:!0}:h instanceof cr?{content:`web_scrape blocked: ${h.message}`,isError:!0}:{content:`web_scrape network error: ${h instanceof Error?h.message:String(h)}`,isError:!0}}if(!p.ok)return{content:`web_scrape HTTP ${p.status} ${p.statusText||""}`.trimEnd()+` for ${s.url}`,isError:!0};let f;try{f=await p.text()}catch(h){return{content:`web_scrape read error: ${h instanceof Error?h.message:String(h)}`,isError:!0}}let g=FA(f,s.maxBytes);return{content:g.content,...g.truncated?{truncated:!0}:{}}}if(s.mode==="markdown")try{let p=await Gj(s.url,{fetchFn:t,renderFn:e.renderFn,timeoutMs:s.timeoutMs,signal:a.signal,...e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{}});if(p.markdown.trim().length===0)return{content:`web_scrape extracted no readable content from ${s.url}.`,isError:!0};let f=FA(cj(p.markdown,p.advisory),s.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(p){if(a.signal.aborted)return{content:`web_scrape aborted: ${u()}`,isError:!0};if(p instanceof cr)return{content:`web_scrape blocked: ${p.message}`,isError:!0};let f=p instanceof Error?p.message:String(p),g=dn(p)&&!CA(f)?` (the render fallback needs the optional Playwright browser \u2014 run \`${Wp()}\`)`:"";return{content:`web_scrape markdown error: ${f}${g}`,isError:!0}}let d=zj({exaApiKey:n.EXA_API_KEY,fetchFn:t});if("error"in d)return{content:d.error,isError:!0};try{let p=await d.search(s.query,{limit:ihe,timeoutMs:s.timeoutMs,signal:a.signal}),f=FA(Vj(s.query,p),s.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(p){return a.signal.aborted?{content:`web_scrape aborted: ${u()}`,isError:!0}:{content:`web_scrape search error (${d.name}): ${p instanceof Error?p.message:String(p)}`,isError:!0}}}finally{c!==void 0&&clearTimeout(c),i.removeEventListener("abort",l)}}}var the,nhe,rhe,ohe,ihe,Jj,Xj=y(()=>{"use strict";qj();Yj();AA();ci();TA();ea();the=3e4,nhe=12e4,rhe=1e5,ohe=1e6,ihe=10;Jj=ahe()});import{existsSync as Zj,mkdirSync as lhe,readFileSync as che,renameSync as uhe,unlinkSync as dhe,writeFileSync as phe}from"node:fs";import{dirname as Qj,join as mhe}from"node:path";import{randomBytes as fhe}from"node:crypto";function En(e){let t=e??SR();if(!Zj(t))return[];try{let n=che(t,"utf-8");return JSON.parse(n)}catch(n){let r=n instanceof Error?n.message:String(n);return console.error(`[schedule-store] failed to parse ${t}: ${r}`),[]}}function fi(e,t){let n=t??SR();lhe(Qj(n),{recursive:!0});let r=mhe(Qj(n),`.schedules.json.${process.pid}.${fhe(4).toString("hex")}.tmp`),o=JSON.stringify(e,null,2);try{phe(r,o,"utf-8"),uhe(r,n)}catch(i){try{Zj(r)&&dhe(r)}catch{}throw i}}function Vy(e,t){let n=En(t),r=n.map(l=>l.id),o=ghe(e.name),i=hhe(o,r),s=new Date().toISOString(),a={...e,notifyOn:e.notifyOn??"failure",id:i,createdAt:s,updatedAt:s};return n.push(a),fi(n,t),a}function Yy(e,t){let n=En(t),r=n.length,o=n.filter(i=>i.id!==e);return o.length===r?!1:(fi(o,t),!0)}function Gp(e,t){return En(t).find(n=>n.id===e)}function ghe(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"")}function hhe(e,t){if(!t.includes(e))return e;let n=2;for(;t.includes(`${e}-${n}`);)n+=1;return`${e}-${n}`}function Jy(e){return{taskId:e.id,command:e.command,trigger:e.trigger??"cron",...e.cron!==void 0?{cronExpression:e.cron}:{},...e.notifyOn!==void 0?{notifyOn:e.notifyOn}:{},...e.notifyChat!==void 0?{notifyChat:e.notifyChat}:{}}}var Xy=y(()=>{"use strict";H()});import{existsSync as yhe,readFileSync as bhe}from"node:fs";import{join as She}from"node:path";async function jn(e,t,n){let r,o;try{let i=She(Jg("default"),"port");if(!yhe(i))return{synced:!1,detail:"daemon-not-detected (no port file)"};let s=bhe(i,"utf-8").trim(),a=whe(s);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 i=r.includes(":")?`[${r}]`:r,s=await fetch(`http://${i}:${o}${t}`,{method:e,headers:{"Content-Type":"application/json"},body:n!==void 0?JSON.stringify(n):void 0,signal:AbortSignal.timeout(2e3)});return s.ok?{synced:!0,detail:"synced"}:e==="POST"&&s.status===409?{synced:!0,detail:"already-registered"}:e==="DELETE"&&s.status===404?{synced:!0,detail:"not-registered"}:{synced:!1,detail:`daemon-rejected (HTTP ${s.status})`}}catch{return{synced:!1,detail:"daemon-unreachable (stale port file or network error)"}}}function whe(e){let t=parseInt(e,10);if(String(t)===e&&!Number.isNaN(t))return t<1||t>65535?null:{host:"localhost",port:t};let n=e.lastIndexOf(":");if(n<1)return null;let r=e.slice(0,n),o=e.slice(n+1);if(!/^\d+$/.test(o))return null;let i=parseInt(o,10);return Number.isNaN(i)||i<1||i>65535||/^:+$/.test(r)?null:{host:r.startsWith("[")&&r.endsWith("]")?r.slice(1,-1):r,port:i}}var gi,LA=y(()=>{"use strict";H();gi="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 vhe}from"node:fs";import{readFile as khe}from"node:fs/promises";var e1,t1,n1,r1,o1=y(()=>{"use strict";Xy();H();LA();e1=async(e,t)=>{if(!e||typeof e!="object")return{content:"Invalid input: expected object",isError:!0};let n=e;if(typeof n.name!="string"||!n.name)return{content:"Invalid input: name required",isError:!0};if(typeof n.command!="string"||!n.command)return{content:"Invalid input: command required",isError:!0};if(typeof n.cron!="string"||!n.cron)return{content:"Invalid input: cron required",isError:!0};let r=n.cron.trim().split(/\s+/);if(r.length!==5&&r.length!==6)return{content:"Invalid input: cron must be a 5 or 6-field expression",isError:!0};let o=n.notifyChat;if(o!==void 0&&typeof o!="number"&&typeof o!="string")return{content:"Invalid input: notifyChat must be a number (chat id) or string (chat id or alias name)",isError:!0};let i=Vy({name:n.name,command:n.command,cron:n.cron,trigger:n.trigger??"cron",notifyOn:n.notifyOn,...o!==void 0?{notifyChat:o}:{},enabled:typeof n.enabled=="boolean"?n.enabled:!0}),s=i.enabled?await jn("POST","/tasks",{taskId:i.id,command:i.command,cron:i.cron,trigger:i.trigger,notifyOn:i.notifyOn,...i.notifyChat!==void 0?{notifyChat:i.notifyChat}:{}}):await jn("DELETE",`/tasks/${i.id}`);return{content:JSON.stringify({id:i.id,name:i.name,cron:i.cron,enabled:i.enabled,daemonSynced:s.synced,syncDetail:s.detail,...s.synced?{}:{syncNote:gi}})}},t1=async(e,t)=>{let n=En();return{content:JSON.stringify(n.map(r=>({id:r.id,name:r.name,cron:r.cron,trigger:r.trigger,enabled:r.enabled,notifyOn:r.notifyOn})))}},n1=async(e,t)=>{if(!e||typeof e!="object")return{content:"Invalid input: expected object",isError:!0};let n=e;if(typeof n.taskId!="string"||!n.taskId)return{content:"Invalid input: taskId required",isError:!0};let r=n.taskId,o=typeof n.limit=="number"?Math.min(Math.max(1,n.limit),50):10,i=Rr();if(!vhe(i))return{content:JSON.stringify([])};let s;try{let c=await khe(i);s=(c.length>1048576?c.subarray(c.length-1048576):c).toString("utf-8")}catch{return{content:JSON.stringify([])}}let a=s.split(`
@@ -1965,7 +1965,7 @@ ${E}
1965
1965
  ${T}`})}return{fileBlocks:l,warnings:c}}function Fee(e){let t=e.replace(/\s+/g," ").trim();return t.length<=60?t:`${t.slice(0,59)}\u2026`}async function Lee(e,t,n){let r=t?.peekQueuedText(),o=r!==void 0?{text:r.text,claimed:!1}:void 0;r!==void 0&&t?.reserveQueued?.(r);let i;try{i=await e.promoteActiveForeground(o)}catch(s){throw r!==void 0&&t?.releaseQueued?.(r),s}if(o?.claimed===!0&&t!==null&&r!==void 0){try{await n?.(o.text)}catch{}return t.dropQueued(r),{jobs:i,flushedText:o.text,flushedPreview:r.preview}}return r!==void 0&&t?.releaseQueued?.(r),{jobs:i}}B();N();B();st();N();Ea();function Nee(){return{toolStartTimes:new Map,subagentStartTimes:new Map,subagentLabels:new Map}}function Bee(e,t){Fe()&&(t.pending||e.toolStartTimes.has(t.toolUseId)||e.toolStartTimes.set(t.toolUseId,Date.now()))}function Uee(e,t,n,r){if(!Fe())return;let o=e.toolStartTimes.get(t.toolUseId),i=o!==void 0?Date.now()-o:void 0;e.toolStartTimes.delete(t.toolUseId);let s=Me(n??"tool"),a=t.isError?m.error("err"):m.success("ok"),l=i!==void 0?` \xB7 ${we(i)}`:"";r.fn(m.dim(` \u25E6 ${s}${l} \xB7 `)+a)}function jee(e,t,n,r){if(!Fe())return;let{subagentId:o,agentType:i}=n,s=Me(i??o);if(e.subagentStartTimes.has(o)||(e.subagentStartTimes.set(o,Date.now()),e.subagentLabels.set(o,s),r.fn(m.dim(` \u25E6 worker ${s} started`))),t.type==="done"||t.type==="error"){let l=e.subagentStartTimes.get(o),c=l!==void 0?Date.now()-l:void 0;e.subagentStartTimes.delete(o),e.subagentLabels.delete(o);let u=c!==void 0?` \xB7 ${we(c)}`:"",d=t.type==="error"?m.error("failed"):m.success("done");r.fn(m.dim(` \u25E6 worker ${s}${u} \xB7 `)+d)}}var fE=class{state;writer;ttfb;constructor(t,n){this.state=Nee(),this.writer=t,this.ttfb=n}onToolStart(t){Bee(this.state,t)}onToolResult(t,n){Uee(this.state,t,n,this.writer)}onSubagentEvent(t,n){jee(this.state,t,n,this.writer)}onFirstContent(t){this.ttfb.waitingLineEmitted&&(this.ttfb.waitingLineEmitted=!1,t.write("\r\x1B[2K"))}};function Hee(e){return{startedAt:e,received:!1,waitingLineEmitted:!1}}function Wee(e){return e.received?{}:{turnStartedAt:e.startedAt}}function Kee(e,t,n){let r=t.type==="chunk"&&t.chunk.type==="content"&&!n;return r&&(e.received=!0),r}function Gee(e,t=process.stdout,n){if(!Fe()||!t.isTTY)return;(e?.fn??console.log)(m.dim(" \u25E6 waiting for response\u2026")),n&&(n.waitingLineEmitted=!0,e&&(n.plainHooks=new fE(e,n)))}ce();N();var PNe=3e3;async function qee(e,t){if(!e)return t;let n=Date.now();if(n-t<PNe)return t;try{let r=e();r instanceof Promise&&await r}catch(r){Be()&&console.error(" "+m.error("onContextProgress (status refresh) failed:"),r)}return n}N();ce();St();ss();var MNe="Keep waiting \u2014 auto-resume in progress",zee="Switch model / provider (type /model after)",ONe="Stop waiting";async function Vee(e){let{event:t,session:n,borrowedCompositor:r,pickerRef:o,completionWriter:i,disposeRendererOnce:s,setPausedState:a,onPauseInterrupt:l}=e;if(a?.(!0),await s(),r&&t.autoResume===!0){let c=new AbortController;o.abort=c;let u=t.resetsAt?t.resetsAt.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}):null,d=u?`Keep waiting \u2014 auto-resumes at ${u}`:MNe,p=[m.warning(" \u23F3 Usage limit reached.")+(u?m.dim(` Auto-resumes at ${u}.`):""),m.dim(" Tip: run `claude login` in another terminal to switch account \u2014 this turn resumes on it automatically."),""];hn(r,{header:p,options:[d,zee,ONe],signal:c.signal,initialIndex:0}).then(f=>{if(o.abort=null,!f)return;let g=f[0];g===void 0||g===d||(l(),g===zee&&(i??{fn:console.log}).fn(m.dim(" Hint: type /model <name> to switch, then send your message again.")),n.interrupt().catch(h=>{Be()&&console.error(" "+m.error("picker pause-interrupt session.interrupt() failed:"),h)}))}).catch(f=>{Be()&&console.error(" "+m.error("picker promise rejected:"),f)})}else(i??{fn:console.log}).fn($F({reason:t.reason,...t.resetsAt!==void 0?{resetsAt:t.resetsAt}:{},...t.accountId!==void 0?{accountId:t.accountId}:{},...t.autoResume!==void 0?{autoResume:t.autoResume}:{}}))}Ak();async function Yee(e,t,n,r,o="summary",i,s){let a=C5(e.text,e.attachments);r.onUserMessage&&await Promise.resolve(r.onUserMessage(a)).catch(()=>{}),r.setInFlight(!0);let l=Date.now(),c=Hee(l);Gee(i,process.stdout,c),Pu(process.stdout,yf(process.cwd(),!0));let u="",d=0,p=!1,f=!1,g=!1,h=!1,b=!1,S,w=!1,k=!1,E={abort:null},T=0,R=[],I=new Map,C=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,x=()=>{let W=r.subagentControl;W?.hasPromotableForeground()&&Lee(W,_,r.onQueuedUserMessage).then(({jobs:G,flushedText:j,flushedPreview:K})=>{let Q=(i??{fn:console.log}).fn;for(let P of G)Q(m.dim(` \u2192 subagent backgrounded as ${P.jobId}: ${P.label}`));j!==void 0&&Q(m.dim(` \u2192 queued message sent to this turn: ${Fee(K??j)}`))}).catch(()=>{})},_=r.getCompositor?r.getCompositor():null,M=()=>new rd({out:od(i),thinkingMode:o,...C?{activeSkillName:C}:{},onCancel:()=>{t.interrupt().catch(W=>{Be()&&console.error(" "+m.error("session.interrupt() failed:"),W)})},...r.subagentControl?{onBackground:x}:{},...s?.history?{history:s.history}:{},...s?.autocompleteState?{autocompleteState:s.autocompleteState}:{},...s?.promptText!==void 0?{promptText:s.promptText}:{},...r.scrollRegion?{scrollRegion:r.scrollRegion}:{},..._?{compositor:_}:{},...r.onStageChange?{onStageChange:r.onStageChange}:{},...Wee(c)}),D=M(),$=async()=>{if(!h){h=!0;try{await D.dispose()}catch{}}},U=async()=>{await D.arm();let W=D.getCompositor();if(i&&W){let G=W;i.fn=j=>G.commitAbove(j),i.suppressSubagentCompletion=!0}r.setActiveCompositor?.(W),r.setInterruptNotifier?.(G=>D.setInterrupting(G)),r.rearmStatus?.()};try{_?_.commitAbove(""):console.log(),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{w=!0,D.setSoftStopping(!0),t.interrupt().catch(F=>{Be()&&console.error(" "+m.error("soft-stop session.interrupt() failed:"),F)});let P=r.subagentControl;P?.hasActiveForeground()&&P.cancelActiveForeground().catch(F=>{Be()&&console.error(" "+m.error("soft-stop cancelActiveForeground() failed:"),F)})}),r.setPauseInterruptHandler&&r.setPauseInterruptHandler(()=>{k=!0,t.interrupt().catch(P=>{Be()&&console.error(" "+m.error("pause-interrupt session.interrupt() failed:"),P)})}),await U(),r.setBackgroundHandler&&r.subagentControl&&r.setBackgroundHandler(x);let{fileBlocks:W,warnings:G}=$ee(e.text,{rootDir:process.cwd()});for(let P of G)(i??{fn:console.log}).fn(m.dim(` @-file: ${P}`));if(e.attachments.length>0&&(await t.waitForInitialization(),t.sessionId===void 0))throw new Error("CLI session initialized without a session id");let j=W.length>0||e.attachments.length>0?await Dee(e.text,e.attachments,void 0,W,t.sessionId):e.text,K=t.sendMessageStream(j);if(await vc((P,F)=>{D.process(P,F),F&&c.plainHooks?.onSubagentEvent(P,F)},async()=>{for await(let P of K){if(w||k)break;let F=Kee(c,P,f);if(P.type==="chunk"&&P.chunk.type==="content"?(u=p?_ee(u,P.chunk.content):u+P.chunk.content,p=!1,f=!0):P.type==="message"&&!f&&(u=P.message.content),P.type==="stream_retry"&&(u=u.slice(0,d),p=u.length>0),P.type==="chunk"&&P.chunk.type==="tool_use_detail"){let V=P.chunk,ee={toolName:V.toolName,toolUseId:V.toolUseId,input:V.toolInput,...V.toolInputRaw!==void 0&&{inputRaw:V.toolInputRaw}};I.set(V.toolUseId,ee),R.push(ee),c.plainHooks?.onToolStart(V)}else if(P.type==="chunk"&&P.chunk.type==="tool_result"){let V=P.chunk;d=u.length,p=!0;let ee=I.get(V.toolUseId);ee&&(ee.result=V.content,ee.isError=V.isError,I.delete(V.toolUseId)),c.plainHooks?.onToolResult(V,ee?.toolName),T=await qee(r.onContextProgress,T)}if(P.type==="paused"){await Vee({event:P,session:t,borrowedCompositor:_,pickerRef:E,completionWriter:i,disposeRendererOnce:$,setPausedState:r.setPausedState,onPauseInterrupt:()=>{k=!0}});continue}if(P.type==="resumed"){r.setPausedState?.(!1),E.abort?.abort(),E.abort=null;let V=P.hotSwapped&&P.accountId?`\u25B6 Resumed on ${P.accountId}`:"\u25B6 Resumed";u="",d=0,p=!1,f=!1,R.length=0,I.clear(),b=!1,S=void 0,g=!1,D=M(),h=!1,await U(),(i??{fn:console.log}).fn(m.success(V));continue}if(P.type==="error"){await $(),Ol(xl(P.error)),g=!0;continue}D.process(P),F&&(c.plainHooks?.onFirstContent(process.stdout),D.notifyFirstContent()),P.type==="done"&&(b=!0,S=P.metadata)}}),await $(),w){let P=i?i.fn:console.log,F=_?_.getPendingCount():0,V=F>0?` \xB7 ${F} queued`:"";P(m.warning(`\u23F8 Stopped${V} \u2014 work so far kept.`)+m.dim(" Send a message to continue.")),P("")}if(k){let P=i?i.fn:console.log;P(m.dim("\u25B6 Ending wait \u2014 running your next command\u2026")),P("")}if(b&&!w&&!k){_a(n,a,u,S,R),r.onTurnComplete&&await r.onTurnComplete(a,u).catch(()=>{}),Iu(process.stdout),$X(process.stdout,"afk: turn complete");let P=V=>{i?i.fn(V):console.log(V)},F=mE(u);if(F){P(Iee(F,{durationMs:S?.durationMs,totalCostUsd:S?.totalCostUsd,toolCount:R.length})),P("");let V=z9(R);if(r.onTerminalState)try{r.onTerminalState(F,{doneHasCorroboratingEvidence:V})}catch{}if(n.permissionMode==="autonomous"){let ee=F.kind==="done"&&Up().verifyDone===!0&&!V;Y9(F,void 0,{unverified:ee})}}if(lD(S,n,P),r.onAfterTurn){let V=r.onAfterTurn();V instanceof Promise&&await V.catch(()=>{})}}}catch(W){await $(),g||Ol(xl(W))}finally{await $(),Pu(process.stdout,yf(process.cwd(),!1)),i&&(i.fn=i.idleFn,i.suppressSubagentCompletion=!1),r.setActiveCompositor?.(null),r.setInterruptNotifier?.(null),r.setBackgroundHandler?.(null),r.setSoftStopHandler?.(null),r.setPausedState?.(!1),r.setPauseInterruptHandler?.(null),E.abort?.abort(),E.abort=null,r.setInFlight(!1),r.rearmStatus?.()}}zi();gh();var DNe=5e3,$Ne=3,FNe="[auto-resume] The background task above has finished. Continue the work it was dispatched for.";async function LNe(e,t){if(e.firstTurnHook&&e.stats.totalTurns===0){let n=e.firstTurnHook;e.firstTurnHook=void 0;try{await n(t)}catch(r){e.completionWriter.fn(m.warning("\u26A0 ")+"first-turn hook failed: "+(r instanceof Error?r.message:String(r)))}}}async function Jee(e,t,n,r,o,i,s,a){let{contextPane:l,loopStageBar:c,mascotBar:u,healthRail:d,verdictLedger:p,shellPassthrough:f,bgResultNotifier:g}=s,h=null,b=[];e.session.current.waitForInitialization().then(async _=>{Be()&&(h=kT(_)),await Gf(e.session.current),Be()&&(b=C0())}).catch(()=>{});let S=e.initialInput!==void 0?{text:e.initialInput,attachments:[]}:void 0,w,k=!1,E=!1,T,R,I,C=(()=>{let _=parseInt(e.options.maxTurns,10);return _>0?_:void 0})(),x=0;g.onInjectable=()=>{x>=$Ne||!o.isAwaitingInput()||!o.bufferIsEmpty()||n.pendingSteerRead||(x++,Iu(process.stdout),S={text:FNe,attachments:[]},o.abortPendingRead())};try{for(n.steerReadLine=async _=>{let M=()=>o.abortPendingRead({clearBuffer:!0});if(_?.addEventListener("abort",M,{once:!0}),_?.aborted)return"";try{return(await o.readLine({promptFn:()=>"Steer the agent \u2192 ",onEscape:M})).text}finally{_?.removeEventListener("abort",M)}};;){if(h&&(e.replRenderer.writeLine(h),e.replRenderer.writeLine(""),h=null),b.length>0){for(let P of b)e.replRenderer.writeLine(P);e.replRenderer.writeLine(""),b=[]}let _=f.drainNotifications();for(let{job:P,result:F}of _){let V=F.errorReason===void 0?"\u2713":"\u2717",ee=F.errorReason==="abort"?"killed":F.errorReason==="timeout"?"timed out":F.errorReason==="signal-killed"?"killed by signal":`exit ${F.exitCode??0}`,Pe=Math.max(0,Math.round(F.durationMs/100)/10);e.replRenderer.writeLine(m.dim(` ${V} [${P.id}] ${ee} \xB7 ${Pe}s \xB7 `)+P.command)}let M=g.drainNotifications();for(let{job:P}of M){let F=P.status==="completed"?"\u2713":P.status==="failed"?"\u2717":"\u2298",V=P.endedAt!==void 0?Math.max(0,Math.round((P.endedAt-P.startedAt)/100)/10):0,ee=ie(P.label,60);e.replRenderer.writeLine(m.dim(` ${F} [${P.jobId}] subagent ${P.status} \xB7 ${V}s \xB7 `)+ee)}let D=l.renderIfChanged(e.stats.sessionId);if(D.length>0){for(let P of D)e.replRenderer.writeLine(P);e.replRenderer.writeLine("")}let $,U,W=n.pendingSteerRead;if(W){let P=await W;n.pendingSteerRead===W&&(n.pendingSteerRead=null),P?.trim()&&(n.pendingSteerText=P)}if(n.pendingSteerText&&(S={text:n.pendingSteerText,attachments:[]},n.pendingSteerText=null),S===void 0){let P=await e.session.current.takePendingPlanExitSeed();P!==void 0&&(e.stats.permissionMode=P.mode,S={text:P.message,attachments:[]})}if(S!==void 0){let P=S;S=void 0;let F=md(e.stats.permissionMode),V=Da({buffer:P.text,promptText:F,isTTY:!!process.stdout.isTTY,attachmentSummary:Wu([...P.attachments])});e.replRenderer.writeLine(V),$=P.text.trim(),U=P.attachments}else{let P=w;w=void 0;let F=await o.readLine({promptFn:()=>md(e.stats.permissionMode),...P!==void 0?{initialBuffer:P}:{},primePromptSuggestion:!0,onSigint:r,onShiftTab:()=>{aE(e.slashCtx).catch(()=>{}),e.statusLine.rearm()}});$=F.text.trim(),U=F.attachments}if(!$&&U.length===0)continue;if($.startsWith("!")){let P=/^(0|false|off|no)$/i.test(v.AFK_SHELL_PASSTHROUGH??"");if(e.options.shellPassthrough!==!1&&!P&&(k||(k=!0,e.replRenderer.writeLine(m.dim(" \u2139 ! prefix shells out. Pass --no-shell-passthrough (or set AFK_SHELL_PASSTHROUGH=0) to send ! text to the model instead."))),await f.dispatch($))){e.statusLine.rearm();continue}}let G=!1;if($.startsWith("/")){let P=await NX($,e.slashCtx,U);if(P.handled){if(P.result==="exit"){await e.resolveWorktreeDisposition?.(!0),e.rl.close();return}if(($==="/clear"||$.startsWith("/clear "))&&(await t.rotateOnClear(),e.replRenderer.writeLine(m.dim(` transcript: ${t.path()}`)),p.reset(),T=void 0),P.result!==null&&typeof P.result=="object"&&"kind"in P.result&&P.result.kind==="submit"){S={text:P.result.message,attachments:U??[]},e.statusLine.rearm();continue}if(P.result!==null&&typeof P.result=="object"&&"kind"in P.result&&P.result.kind==="prefill"){w=P.result.message,e.statusLine.rearm();continue}e.statusLine.rearm();continue}G=!0}a.push($),await LNe(e,$);let j=$;if(G){let P=nM($);if(P){let F=P.name.replace(/^\//,"").split(":").pop()??"";if(F&&T0(F)){let V={skillName:F,rawArgs:P.args,source:"plugin",capabilities:{compose:!0,subagents:!0}},ee=e.session.current.sessionId,Pe=Va(ee),oe=Date.now();L(`[afk trace] preflight.start commandName=${F}`);let ke=!1,Ke=await za(V,{cwd:e.stats.cwd??process.cwd(),artifactDir:Pe},On=>{Be()&&e.replRenderer.writeLine(m.warning(`\u26A0 preflight(${F}) failed: `)+(On instanceof Error?On.message:String(On)))});ke=Ke!==null,L(`[afk trace] preflight.end commandName=${F} durationMs=${Date.now()-oe} success=${ke}`),j=x0(Ke?.manifestBlock,$)}}}let K=f.drainInjections();K.length>0&&(j=K+j);let Q=g.drainInjections();if(Q.length>0&&(j=Q+j),T!==void 0&&(j=T+`
1966
1966
 
1967
1967
  `+j,T=void 0),e.hookRegistry)try{let P={event:"UserPromptSubmit",prompt:j,sessionId:e.stats.sessionId},F=await e.hookRegistry.dispatch(P);F.injectContext&&(j=F.injectContext+j)}catch(P){if(P instanceof xe){e.replRenderer.writeLine(m.warning("\u2298 Turn blocked by hook")+(P.reason?m.dim(`: ${ae(P.reason)}`):"")),e.statusLine.rearm();continue}if(P instanceof Or){e.replRenderer.writeLine(m.warning("\u2298 Turn blocked by hook")+m.dim(`: handler timed out after ${P.timeoutMs}ms`)),e.statusLine.rearm();continue}throw P}if(R=void 0,I=void 0,KF(),await Yee({text:j,attachments:U},e.session.current,e.stats,{setInFlight(P){n.turnInFlight=P},...e.subagentControl?{subagentControl:e.subagentControl}:{},async onUserMessage(P){await t.appendUser(P)},async onQueuedUserMessage(P){await t.appendQueuedUser(P)},async onTurnComplete(P,F){if(await t.appendTurn(P,F),e.stats.sessionId)try{qi(e.stats)}catch(V){E||(E=!0,e.replRenderer.writeLine(m.warning("\u26A0 ")+"session autosave failed \u2014 this conversation may not be resumable: "+(V instanceof Error?V.message:String(V))))}},async onAfterTurn(){await e.contextSampler.onTurn(e.stats.totalTurns),await e.gitStatusSampler.refresh(),e.statusLine.repaint(Jn(e.stats,e.contextSampler,e.gitStatusSampler,C)),e.statusLine.rearm(),c?.repaint("observing"),d?.update(e.stats)},rearmStatus:()=>e.statusLine.rearm(),onTerminalState:(P,F)=>{p?.push(P),R=P.kind,I=F?.doneHasCorroboratingEvidence},setActiveCompositor:P=>{n.activeCompositor=P,P===null&&n.interruptPickerAbort&&(n.interruptPickerAbort.abort(),n.interruptPickerAbort=null)},setInterruptNotifier:P=>{n.notifyInterrupting=P},scrollRegion:e.statusLine,getCompositor:()=>o.getCompositor(),setBackgroundHandler:P=>o.setBackgroundHandler(P),setSoftStopHandler:i,setPausedState:P=>o.setPausedState(P),setPauseInterruptHandler:P=>o.setPauseInterruptHandler(P),async onContextProgress(){await e.contextSampler.refresh(),e.statusLine.repaint(Jn(e.stats,e.contextSampler,e.gitStatusSampler,C)),d?.update(e.stats,e.contextSampler.getRatio())},...c?{onStageChange:(P,F)=>{c.repaint(P),u?.onStage(P,F)}}:{}},e.stats.thinkingUi??e.options.thinkingUi,e.completionWriter,o.toRunTurnRefs(md(e.stats.permissionMode))),e.hookRegistry)try{let P=await e.hookRegistry.dispatch({event:"Stop",sessionId:e.stats.sessionId,...R!==void 0?{terminalState:R}:{},...I!==void 0?{doneHasCorroboratingEvidence:I}:{}},void 0,DNe);P.injectContext&&P.injectContext.trim().length>0&&(T=P.injectContext)}catch(P){if(P instanceof _t)throw P;P instanceof Or?(L("[stop hook] handler timed out"),e.completionWriter.fn(m.dim(" [stop hook] timed out"))):P instanceof xe?e.completionWriter.fn(m.dim(` [stop hook] blocked: ${ae(P.reason??"no reason given")}`)):L("[stop hook] unexpected error: "+String(P))}}}finally{n.steerReadLine=null,n.pendingSteerRead=null,n.pendingSteerText=null}}function NNe(e,t){if(e!==void 0){let n=e.toLowerCase();return!(n==="0"||n==="false"||n==="off"||n==="no")}return typeof t=="boolean"?t:!0}async function Xee(e,t,n,r){let o=await WZ(),i=new sE({rl:e.rl,history:o,statusLine:e.statusLine}),s=NNe(v.AFK_SUGGEST_GHOST,e.suggestGhostConfig),a;try{let{installSoftStop:l}=await dee(e,i,n,t,r,s,{getLoopStageBar:()=>a?.loopStageBar,getMascotBar:()=>a?.mascotBar});a=Cee(e,n);let c=a;e.slashCtx.suspendFooter=()=>{c.bgStatusBar.stop(),c.mascotBar.stop(),c.healthRail.stop(),e.statusLine.stop()},e.slashCtx.resumeFooter=()=>{e.statusLine.start(),c.healthRail.start(),c.mascotBar.start(),c.bgStatusBar.start(),c.bgStatusBar.redraw()},await Jee(e,t,n,r,i,l,a,o),await e.resolveWorktreeDisposition?.(!0)}finally{n.tryAbortShellForeground=null,a?.shellPassthrough.drainOnExit(),a?.bgResultNotifier.dispose(),a?.healthRail.stop(),a?.loopStageBar.stop(),a?.mascotBar.stop(),a?.bgStatusBar.stop(),a?.verdictLedger.stop(),a?.contextPane.dispose();let l=c=>console.log(c);e.completionWriter.fn=l,e.completionWriter.idleFn=l,await i.dispose(),e.inputSurfaceRef&&(e.inputSurfaceRef.current=null)}}Mp();uc();import{execFile as BNe}from"node:child_process";import{dirname as UNe,isAbsolute as jNe,resolve as HNe}from"node:path";import{promisify as WNe}from"node:util";var Qee=WNe(BNe),KNe=3e3,GNe=new Set(["empty","orphaned-dir","orphaned-registration","dead-owner"]);async function qNe(){let t=(await Qee("git",["rev-parse","--git-common-dir"])).stdout.trim();if(!t)throw new Error("Not in a git repository.");let n=jNe(t)?t:HNe(process.cwd(),t);return UNe(n)}async function Zee(e){if(e?.disabled)return{ran:!1,removedCount:0,skippedReason:"disabled"};let t;try{t=await qNe()}catch{return{ran:!1,removedCount:0,skippedReason:"not-in-repo"}}let n,r=new Promise(o=>{n=setTimeout(()=>o("timeout"),KNe)});try{let o=Wn({execFile:Qee,repoRoot:t,dryRun:!1,scope:"interactive",bypassSoftLaunch:!0}),i=await Promise.race([o,r]);if(i==="timeout")return{ran:!1,removedCount:0,skippedReason:"timeout"};let s=i;return s.warnings.some(c=>c.toLowerCase().includes("contested"))?{ran:!1,removedCount:0,skippedReason:"lock-contested"}:{ran:!0,removedCount:s.candidates.filter(c=>GNe.has(c.verdict)&&s.removed.includes(c.path)).length}}catch{return{ran:!1,removedCount:0,skippedReason:"error"}}finally{n&&clearTimeout(n)}}Eh();Mp();import{promises as zNe}from"node:fs";import{dirname as VNe,join as nte}from"node:path";import{randomBytes as YNe}from"node:crypto";var JNe=["Generate a 2-4 word kebab-case slug describing this work request.","Rules:","- ASCII lowercase letters and digits only, separated by single hyphens","- 2 to 4 hyphen-separated words","- Maximum 30 characters total","- No prefix, no quotes, no punctuation other than hyphens","- Output ONLY the slug \u2014 no explanation, no preamble","Examples: fix-cleanup-race, add-telegram-allowlist, refactor-prompt-loader, debug-flaky-test"].join(`
1968
- `),ete=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,uD=30,XNe=1024,QNe=8e3,ZNe="haiku";async function eBe(e,t){let n=e.trim();if(n.length===0)return t.onSkip?.("empty-message"),null;if(n.startsWith("/"))return t.onSkip?.("slash-command"),null;let r=oBe(n,XNe),o=new AbortController,i=setTimeout(()=>o.abort(),t.timeoutMs??QNe),s=t.signal?iBe([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,s):a=await Bl({token:t.token,model:t.model??ZNe,system:JNe,user:r,maxTokens:32,signal:s})}catch(d){let p=d instanceof Error?d.message:String(d);return t.onSkip?.("slug-generator-error",p.slice(0,200)),null}finally{clearTimeout(i)}let l=tBe(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=VNe(t.worktreePath);return await nBe(l,c)}function tBe(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(ete.test(t)&&t.length<=uD)return t;let n=t.replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(n.length===0)return null;let r=n.split("-").filter(i=>i.length>0).slice(0,4);if(r.length<2)return null;let o=r[0];for(let i=1;i<r.length;i++){let s=`${o}-${r[i]}`;if(s.length>uD)break;o=s}return ete.test(o)?o:null}async function nBe(e,t){if(!await rBe(nte(t,e)))return e;let n=YNe(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,uD-5)}-${n}`}async function rBe(e){try{return await zNe.access(e),!0}catch{return!1}}function oBe(e,t){let n=Buffer.from(e,"utf8");if(n.length<=t)return e;let r=t;for(;r>0&&n[r]!==void 0&&(n[r]&192)===128;)r--;return n.slice(0,r).toString("utf8")}function iBe(e){let t=AbortSignal.any;if(typeof t=="function")return t.call(AbortSignal,e);let n=new AbortController;for(let r of e){if(r.aborted)return n.abort(r.reason),n.signal;r.addEventListener("abort",()=>n.abort(r.reason),{once:!0})}return n.signal}async function rte(e){let t,n,r=nte(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await eBe(e.message,{token:e.token,...e.model!==void 0?{model:e.model}:{},...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},worktreePath:r,...e.signal!==void 0?{signal:e.signal}:{},...e.slugGenerator!==void 0?{slugGenerator:e.slugGenerator}:{},onSkip:(a,l)=>{t=a,n=l}}),i=t??"unknown",s=n;if(o!==null){let l=`${Iy(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return tte(e.session,c.path),{status:"created",path:c.path,branch:c.branch,slug:o}}catch(c){i="create-failed",s=(c instanceof Error?c.message:String(c)).slice(0,200)}}try{let a=await e.deferred.create(!0);return tte(e.session,a.path),{status:"created-fallback",path:a.path,branch:a.branch,reason:i,...s!==void 0?{detail:s}:{}}}catch(a){return{status:"failed",reason:a instanceof Error?a.message:String(a)}}}function tte(e,t){e&&e.setCwd(t),sBe(t)}function sBe(e){try{process.chdir(e)}catch{}}ht();Rt();El();ro();H();import{spawn as ite}from"child_process";import{existsSync as ste,mkdirSync as dBe,readFileSync as ate,unlinkSync as ote,writeFileSync as lte}from"fs";import{get as pBe}from"https";import{join as cte}from"path";import{readFileSync as aBe}from"fs";import{dirname as lBe,join as cBe}from"path";import{fileURLToPath as uBe}from"url";function so(){try{return"5.152.3"}catch{}try{let e=lBe(uBe(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(aBe(cBe(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}N();B();var mBe=64*1024,fBe=10800*1e3,gBe=800,hBe=3600*1e3,yBe="update-check.json",bBe="pending-update.json";function dD(){return cte(Sl(),yBe)}function pg(){return cte(Sl(),bBe)}function pD(){let e=Sl();ste(e)||dBe(e,{recursive:!0})}function ute(e,t){let n=a=>a.split(/[-+]/,1)[0]??a,r=a=>a.includes("-"),o=n(e).split(".").map(Number),i=n(t).split(".").map(Number),s=Math.max(o.length,i.length);for(let a=0;a<s;a++){let l=o[a]??0,c=i[a]??0;if(c>l)return!0;if(c<l)return!1}return r(e)&&!r(t)}function dte(){try{let e=ate(dD(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function pte(){try{pD();let e=`
1968
+ `),ete=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,uD=30,XNe=1024,QNe=8e3,ZNe="haiku";async function eBe(e,t){let n=e.trim();if(n.length===0)return t.onSkip?.("empty-message"),null;if(n.startsWith("/"))return t.onSkip?.("slash-command"),null;let r=oBe(n,XNe),o=new AbortController,i=setTimeout(()=>o.abort(),t.timeoutMs??QNe),s=t.signal?iBe([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,s):a=await Bl({token:t.token,model:t.model??ZNe,system:JNe,user:r,maxTokens:32,signal:s})}catch(d){let p=d instanceof Error?d.message:String(d);return t.onSkip?.("slug-generator-error",p.slice(0,200)),null}finally{clearTimeout(i)}let l=tBe(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=VNe(t.worktreePath);return await nBe(l,c)}function tBe(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(ete.test(t)&&t.length<=uD)return t;let n=t.replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(n.length===0)return null;let r=n.split("-").filter(i=>i.length>0).slice(0,4);if(r.length<2)return null;let o=r[0];for(let i=1;i<r.length;i++){let s=`${o}-${r[i]}`;if(s.length>uD)break;o=s}return ete.test(o)?o:null}async function nBe(e,t){if(!await rBe(nte(t,e)))return e;let n=YNe(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,uD-5)}-${n}`}async function rBe(e){try{return await zNe.access(e),!0}catch{return!1}}function oBe(e,t){let n=Buffer.from(e,"utf8");if(n.length<=t)return e;let r=t;for(;r>0&&n[r]!==void 0&&(n[r]&192)===128;)r--;return n.slice(0,r).toString("utf8")}function iBe(e){let t=AbortSignal.any;if(typeof t=="function")return t.call(AbortSignal,e);let n=new AbortController;for(let r of e){if(r.aborted)return n.abort(r.reason),n.signal;r.addEventListener("abort",()=>n.abort(r.reason),{once:!0})}return n.signal}async function rte(e){let t,n,r=nte(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await eBe(e.message,{token:e.token,...e.model!==void 0?{model:e.model}:{},...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},worktreePath:r,...e.signal!==void 0?{signal:e.signal}:{},...e.slugGenerator!==void 0?{slugGenerator:e.slugGenerator}:{},onSkip:(a,l)=>{t=a,n=l}}),i=t??"unknown",s=n;if(o!==null){let l=`${Iy(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return tte(e.session,c.path),{status:"created",path:c.path,branch:c.branch,slug:o}}catch(c){i="create-failed",s=(c instanceof Error?c.message:String(c)).slice(0,200)}}try{let a=await e.deferred.create(!0);return tte(e.session,a.path),{status:"created-fallback",path:a.path,branch:a.branch,reason:i,...s!==void 0?{detail:s}:{}}}catch(a){return{status:"failed",reason:a instanceof Error?a.message:String(a)}}}function tte(e,t){e&&e.setCwd(t),sBe(t)}function sBe(e){try{process.chdir(e)}catch{}}ht();Rt();El();ro();H();import{spawn as ite}from"child_process";import{existsSync as ste,mkdirSync as dBe,readFileSync as ate,unlinkSync as ote,writeFileSync as lte}from"fs";import{get as pBe}from"https";import{join as cte}from"path";import{readFileSync as aBe}from"fs";import{dirname as lBe,join as cBe}from"path";import{fileURLToPath as uBe}from"url";function so(){try{return"5.152.4"}catch{}try{let e=lBe(uBe(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(aBe(cBe(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}N();B();var mBe=64*1024,fBe=10800*1e3,gBe=800,hBe=3600*1e3,yBe="update-check.json",bBe="pending-update.json";function dD(){return cte(Sl(),yBe)}function pg(){return cte(Sl(),bBe)}function pD(){let e=Sl();ste(e)||dBe(e,{recursive:!0})}function ute(e,t){let n=a=>a.split(/[-+]/,1)[0]??a,r=a=>a.includes("-"),o=n(e).split(".").map(Number),i=n(t).split(".").map(Number),s=Math.max(o.length,i.length);for(let a=0;a<s;a++){let l=o[a]??0,c=i[a]??0;if(c>l)return!0;if(c<l)return!1}return r(e)&&!r(t)}function dte(){try{let e=ate(dD(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function pte(){try{pD();let e=`
1969
1969
  const https = require('https');
1970
1970
  const fs = require('fs');
1971
1971
  const url = 'https://registry.npmjs.org/agent-afk/latest';