agent-afk 5.87.0 → 5.87.1

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.
@@ -3,7 +3,7 @@ import type { RuntimeStateSource, RuntimeSubagents, PhaseRole } from './types.js
3
3
  export interface RuntimeSourceDeps {
4
4
  sessionId?: string | undefined;
5
5
  surface: string;
6
- cwd: string;
6
+ getCwd: () => string;
7
7
  modelName: string;
8
8
  providerName: string;
9
9
  permissionMode: string;
@@ -14,6 +14,7 @@ export interface DispatcherWiringArgs {
14
14
  externalTools: ToolDispatcher | undefined;
15
15
  sharedReadRoots: string[] | undefined;
16
16
  sharedWriteRoots: string[] | undefined;
17
+ getCwd: () => string;
17
18
  getMcpTools: () => readonly AnthropicToolDef[];
18
19
  getSubagents: () => RuntimeSubagents;
19
20
  getMintedSessionId: () => string | null;
package/dist/cli.mjs CHANGED
@@ -12,7 +12,7 @@ var DV=Object.defineProperty;var T=(e,t)=>()=>(e&&(t=e(e=0)),t);var dp=(e,t)=>{f
12
12
  `)});var E_=T(()=>{"use strict";gS()});function hS(e,t="all"){switch(t){case"self":return{self:e.getSelf()};case"tools":return{tools:e.getTools()};case"subagents":return{subagents:e.getSubagents()};case"workspace":return{workspace:e.getWorkspace()};default:return{self:e.getSelf(),tools:e.getTools(),subagents:e.getSubagents(),workspace:e.getWorkspace()}}}function yS(e){return e==="self"||e==="tools"||e==="subagents"||e==="workspace"||e==="all"?e:"all"}function Ac(e){let n=[`- Working directory: ${e.cwd.replace(/[\r\n]/g," ")}`];n.push(`- Date: ${zp(e.now??new Date,e.timeZone)}`);let r=typeof e.sessionId=="string"&&e.sessionId.length>0?e.sessionId.slice(0,8):null,o=e.surface&&e.surface!=="unknown"?e.surface:null,i=typeof e.depth=="number"?typeof e.maxDepth=="number"?`depth ${e.depth}/${e.maxDepth}`:`depth ${e.depth}`:null,s=[o,i].filter(a=>typeof a=="string");if(r!==null||s.length>0){let a=["- Session:"];r!==null&&a.push(r),s.length>0&&a.push(`(${s.join(", ")})`),n.push(a.join(" "))}if(e.workspace!==void 0&&e.workspace!==null){let a=e.workspace;if(a.branch!==null||a.headSha!==null){let l=a.branch??"(detached)",c=a.headSha!==null?` @ ${a.headSha}`:"",d;a.dirty===null?d="":a.dirty?d=` (${a.dirtyCount!==null?a.dirtyCount:"?"} dirty)`:d=" (clean)",n.push(`- Workspace: ${l}${c}${d}`)}}return`# Environment
13
13
  ${n.join(`
14
14
  `)}`}function zp(e,t){try{let n=t??Intl.DateTimeFormat().resolvedOptions().timeZone??"UTC",r=new Intl.DateTimeFormat("en-CA",{timeZone:n,year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(e),o=s=>r.find(a=>a.type===s)?.value??"";return`${new Intl.DateTimeFormat("en-US",{timeZone:n,weekday:"long"}).format(e)}, ${o("year")}-${o("month")}-${o("day")} (${n})`}catch{return e.toISOString().slice(0,10)}}var bS=T(()=>{"use strict"});import{spawnSync as T4}from"child_process";function Jp(e,t,n=!1){try{let r=T4("git",t,{cwd:e,encoding:"utf8",maxBuffer:4096,shell:!1});if(r.status!==0||r.signal!==null||r.error!==void 0)return null;let o=typeof r.stdout=="string"?r.stdout.trim():null;return o===null?null:o.length>0||n?o:null}catch{return null}}function wS(e){let t=Jp(e,["rev-parse","--short","HEAD"]);if(t===null)return{...E4};let n=Jp(e,["symbolic-ref","--short","HEAD"]),r=Jp(e,["status","--porcelain"],!0),o=!1,i=0;if(r!==null){let a=r.split(`
15
- `).filter(l=>l.trim().length>0);o=a.length>0,i=a.length}else o=null,i=null;let s=Jp(e,["remote","get-url","origin"]);return{branch:n,headSha:t,dirty:o,dirtyCount:i,remoteUrl:s}}var E4,SS=T(()=>{"use strict";E4={branch:null,headSha:null,dirty:null,dirtyCount:null,remoteUrl:null}});function Cc(e){return{getSelf(){return{sessionId:e.sessionId??null,surface:R4(e.surface),parentSessionId:e.parentSessionId??null,depth:e.depth??null,maxDepth:e.maxDepth??null,phaseRole:e.phaseRole??null,cwd:e.cwd,model:{provider:e.providerName,name:e.modelName},permissionMode:x4(e.permissionMode)}},getTools(){return{enabled:e.getEnabledToolNames(),mcpServers:A4(e.getMcpTools())}},getSubagents(){return e.getSubagents()},getWorkspace(){return wS(e.cwd)}}}function x4(e){switch(e){case"bypassPermissions":case"acceptEdits":case"dontAsk":case"auto":return"elevated";default:return"default"}}function R4(e){switch(e){case"cli":case"repl":case"daemon":case"telegram":case"subagent":return e;default:return"unknown"}}function A4(e){let t=new Map;for(let n of e){if(!n.name.startsWith("mcp__"))continue;let r=n.name.split("__");if(r.length<3)continue;let o=r[1];typeof o!="string"||o.length===0||t.set(o,(t.get(o)??0)+1)}return[...t.entries()].map(([n,r])=>({name:n,toolCount:r})).sort((n,r)=>n.name.localeCompare(r.name))}var x_=T(()=>{"use strict";SS()});function Vs(e){return async(t,n)=>{let r=t&&typeof t=="object"?yS(t.view):"all",o=hS(e,r);return{content:JSON.stringify(o)}}}function _c(e,t){let n=Vs(t),r=e,o=Array.isArray(r.toolDefs)?r.toolDefs:null,i={async execute(s){return s.name==="get_runtime_state"?n(s.input,s.signal):e.execute(s)}};if(o!==null){let s=o.some(a=>a.name==="get_runtime_state");i.toolDefs=s?o:[...o,xn]}return i}var xn,nt,Vp=T(()=>{"use strict";bS();xn={name:"get_runtime_state",category:"other",concurrencySafe:!0,description:"Inspect what the runtime knows about this session: identity (sessionId, surface, depth, parent), tool affordances (currently-enabled tool names and MCP server summary), delegation state (active subagent handles, background jobs), and git workspace state (branch, HEAD SHA, dirty count, remote URL). Returns a compact JSON snapshot.\n\nUse when uncertain about: your current nesting depth, whether a tool you want is actually available right now, what MCP servers are wired, whether earlier subagents you dispatched are still running, or what git branch / commit the session started on.\n\nViews:\n- `self` \u2014 identity + model + permissions + cwd only\n- `tools` \u2014 enabled tool names + MCP server summary only\n- `subagents` \u2014 active subagent handles + background jobs only\n- `workspace` \u2014 git state (branch, headSha, dirty, dirtyCount, remoteUrl)\n- `all` \u2014 union of the four above (default)\n\nThis is a read-only, in-memory inspection. It does not probe the file system or network. Fields the runtime does not know (e.g. depth for a top-level session) come back as `null` rather than synthesised defaults.",input_schema:{type:"object",properties:{view:{type:"string",enum:["self","tools","subagents","workspace","all"],description:'Which slice of state to return. Defaults to "all". Use a narrower view when only one slice is needed to keep the response compact.'}},required:[]}},nt=[xn.name]});function R_(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}function vS(e){return typeof e!="number"||!Number.isInteger(e)||e<=0?"unknown":R_(e)?"alive":"dead"}var kS=T(()=>{"use strict"});import{mkdir as aCe,writeFile as TS,unlink as lCe,readdir as C4,readFile as Xp}from"fs/promises";import{unlinkSync as _4,existsSync as I4,mkdirSync as P4,writeFileSync as M4}from"fs";import{join as A_}from"path";function Ic(e){return A_(gp(),`${e}.json`)}function ES(e,t){let r=(Yp.get(e)??Promise.resolve()).then(t,t);return Yp.set(e,r),r.catch(()=>{}).then(()=>{Yp.get(e)===r&&Yp.delete(e)}),r}function O4(e){let t={schemaVersion:C_,heartbeatAt:new Date().toISOString(),...e};return JSON.stringify(t,null,2)}function xS(e){try{P4(gp(),{recursive:!0,mode:448}),M4(Ic(e.sessionId),O4(e),{encoding:"utf8",mode:384})}catch{}}async function RS(e,t){return ES(e,async()=>{try{let n=Ic(e),r=await Xp(n,"utf8"),o=JSON.parse(r);o.afk=t,await TS(n,JSON.stringify(o,null,2),{encoding:"utf8",mode:384})}catch{}})}async function AS(e,t){return ES(e,async()=>{try{let n=Ic(e),r=await Xp(n,"utf8"),o=JSON.parse(r);t?o.blockedSince=new Date().toISOString():delete o.blockedSince,await TS(n,JSON.stringify(o,null,2),{encoding:"utf8",mode:384})}catch{}})}async function __(e,t){return ES(e,async()=>{try{let n=Ic(e),r=await Xp(n,"utf8"),o=JSON.parse(r);o.cwd=t,await TS(n,JSON.stringify(o,null,2),{encoding:"utf8",mode:384})}catch{}})}function Pc(e){try{let t=Ic(e);I4(t)&&_4(t)}catch{}}function $4(e,t){if(typeof e!="string")return null;let n=Date.parse(e);return Number.isNaN(n)?null:t-n}async function CS(){let e=gp(),t;try{t=await C4(e)}catch{return[]}let n=Date.now(),r=[];for(let o of t){if(!o.endsWith(".json"))continue;let i=A_(e,o);try{let s=await Xp(i,"utf8"),a=JSON.parse(s);if(a!==null&&typeof a=="object"&&"sessionId"in a&&typeof a.sessionId=="string"){let l=a,c=a;r.push({...l,path:i,liveness:vS(c.pid),heartbeatAgeMs:$4(c.heartbeatAt,n)})}}catch{}}return r}var C_,Yp,Ys=T(()=>{"use strict";q();kS();C_=1;Yp=new Map});var ht=T(()=>{"use strict";bS();x_();Vp();SS();Ys();kS()});function Mc(e,t,n){let r=e.lastIndexOf(I_);if(r===-1)return e;let o=e.indexOf(`
15
+ `).filter(l=>l.trim().length>0);o=a.length>0,i=a.length}else o=null,i=null;let s=Jp(e,["remote","get-url","origin"]);return{branch:n,headSha:t,dirty:o,dirtyCount:i,remoteUrl:s}}var E4,SS=T(()=>{"use strict";E4={branch:null,headSha:null,dirty:null,dirtyCount:null,remoteUrl:null}});function Cc(e){return{getSelf(){return{sessionId:e.sessionId??null,surface:R4(e.surface),parentSessionId:e.parentSessionId??null,depth:e.depth??null,maxDepth:e.maxDepth??null,phaseRole:e.phaseRole??null,cwd:e.getCwd(),model:{provider:e.providerName,name:e.modelName},permissionMode:x4(e.permissionMode)}},getTools(){return{enabled:e.getEnabledToolNames(),mcpServers:A4(e.getMcpTools())}},getSubagents(){return e.getSubagents()},getWorkspace(){return wS(e.getCwd())}}}function x4(e){switch(e){case"bypassPermissions":case"acceptEdits":case"dontAsk":case"auto":return"elevated";default:return"default"}}function R4(e){switch(e){case"cli":case"repl":case"daemon":case"telegram":case"subagent":return e;default:return"unknown"}}function A4(e){let t=new Map;for(let n of e){if(!n.name.startsWith("mcp__"))continue;let r=n.name.split("__");if(r.length<3)continue;let o=r[1];typeof o!="string"||o.length===0||t.set(o,(t.get(o)??0)+1)}return[...t.entries()].map(([n,r])=>({name:n,toolCount:r})).sort((n,r)=>n.name.localeCompare(r.name))}var x_=T(()=>{"use strict";SS()});function Vs(e){return async(t,n)=>{let r=t&&typeof t=="object"?yS(t.view):"all",o=hS(e,r);return{content:JSON.stringify(o)}}}function _c(e,t){let n=Vs(t),r=e,o=Array.isArray(r.toolDefs)?r.toolDefs:null,i={async execute(s){return s.name==="get_runtime_state"?n(s.input,s.signal):e.execute(s)}};if(o!==null){let s=o.some(a=>a.name==="get_runtime_state");i.toolDefs=s?o:[...o,xn]}return i}var xn,nt,Vp=T(()=>{"use strict";bS();xn={name:"get_runtime_state",category:"other",concurrencySafe:!0,description:"Inspect what the runtime knows about this session: identity (sessionId, surface, depth, parent), tool affordances (currently-enabled tool names and MCP server summary), delegation state (active subagent handles, background jobs), and git workspace state (branch, HEAD SHA, dirty count, remote URL). Returns a compact JSON snapshot.\n\nUse when uncertain about: your current nesting depth, whether a tool you want is actually available right now, what MCP servers are wired, whether earlier subagents you dispatched are still running, or what git branch / commit the session started on.\n\nViews:\n- `self` \u2014 identity + model + permissions + cwd only\n- `tools` \u2014 enabled tool names + MCP server summary only\n- `subagents` \u2014 active subagent handles + background jobs only\n- `workspace` \u2014 git state (branch, headSha, dirty, dirtyCount, remoteUrl)\n- `all` \u2014 union of the four above (default)\n\nThis is a read-only, in-memory inspection. It does not probe the file system or network. Fields the runtime does not know (e.g. depth for a top-level session) come back as `null` rather than synthesised defaults.",input_schema:{type:"object",properties:{view:{type:"string",enum:["self","tools","subagents","workspace","all"],description:'Which slice of state to return. Defaults to "all". Use a narrower view when only one slice is needed to keep the response compact.'}},required:[]}},nt=[xn.name]});function R_(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}function vS(e){return typeof e!="number"||!Number.isInteger(e)||e<=0?"unknown":R_(e)?"alive":"dead"}var kS=T(()=>{"use strict"});import{mkdir as aCe,writeFile as TS,unlink as lCe,readdir as C4,readFile as Xp}from"fs/promises";import{unlinkSync as _4,existsSync as I4,mkdirSync as P4,writeFileSync as M4}from"fs";import{join as A_}from"path";function Ic(e){return A_(gp(),`${e}.json`)}function ES(e,t){let r=(Yp.get(e)??Promise.resolve()).then(t,t);return Yp.set(e,r),r.catch(()=>{}).then(()=>{Yp.get(e)===r&&Yp.delete(e)}),r}function O4(e){let t={schemaVersion:C_,heartbeatAt:new Date().toISOString(),...e};return JSON.stringify(t,null,2)}function xS(e){try{P4(gp(),{recursive:!0,mode:448}),M4(Ic(e.sessionId),O4(e),{encoding:"utf8",mode:384})}catch{}}async function RS(e,t){return ES(e,async()=>{try{let n=Ic(e),r=await Xp(n,"utf8"),o=JSON.parse(r);o.afk=t,await TS(n,JSON.stringify(o,null,2),{encoding:"utf8",mode:384})}catch{}})}async function AS(e,t){return ES(e,async()=>{try{let n=Ic(e),r=await Xp(n,"utf8"),o=JSON.parse(r);t?o.blockedSince=new Date().toISOString():delete o.blockedSince,await TS(n,JSON.stringify(o,null,2),{encoding:"utf8",mode:384})}catch{}})}async function __(e,t){return ES(e,async()=>{try{let n=Ic(e),r=await Xp(n,"utf8"),o=JSON.parse(r);o.cwd=t,await TS(n,JSON.stringify(o,null,2),{encoding:"utf8",mode:384})}catch{}})}function Pc(e){try{let t=Ic(e);I4(t)&&_4(t)}catch{}}function $4(e,t){if(typeof e!="string")return null;let n=Date.parse(e);return Number.isNaN(n)?null:t-n}async function CS(){let e=gp(),t;try{t=await C4(e)}catch{return[]}let n=Date.now(),r=[];for(let o of t){if(!o.endsWith(".json"))continue;let i=A_(e,o);try{let s=await Xp(i,"utf8"),a=JSON.parse(s);if(a!==null&&typeof a=="object"&&"sessionId"in a&&typeof a.sessionId=="string"){let l=a,c=a;r.push({...l,path:i,liveness:vS(c.pid),heartbeatAgeMs:$4(c.heartbeatAt,n)})}}catch{}}return r}var C_,Yp,Ys=T(()=>{"use strict";q();kS();C_=1;Yp=new Map});var ht=T(()=>{"use strict";bS();x_();Vp();SS();Ys();kS()});function Mc(e,t,n){let r=e.lastIndexOf(I_);if(r===-1)return e;let o=e.indexOf(`
16
16
  `,r+I_.length);if(o===-1)return e;let i=o+1;if(!e.startsWith(_S,i))return e;let s=e.indexOf(`
17
17
  `,i),a=s===-1?e.length:s,l=e.slice(i+_S.length,a),c=zp(t??new Date,n);return l===c?e:e.slice(0,i+_S.length)+c+e.slice(a)}var I_,_S,IS=T(()=>{"use strict";ht();I_=`# Environment
18
18
  - Working directory: `,_S="- Date: "});var P_=T(()=>{"use strict";IS()});function Xs(e,t=()=>{}){let n=new Set;if(!e)return n;for(let r of e.split(",")){let o=r.trim();if(o){if(!/^-?\d+$/.test(o)){t("[allowlist] Ignoring non-numeric chat ID:",o);continue}n.add(Number(o))}}return n}function Qp(e,t){return t.has(e)}var Zp=T(()=>{"use strict"});var Qs,em,PS=T(()=>{"use strict";Qs={model:"sonnet",maxTokens:4096,temperature:1,updatePolicy:"notify"},em="bypassPermissions"});import{execFileSync as M_}from"child_process";import{existsSync as D4,readFileSync as F4,writeFileSync as L4}from"fs";import{homedir as O_,userInfo as $_}from"os";import{join as D_}from"path";function lt(){let e=F_();if(e===void 0)return;let t=L_(e);if(t!==void 0){if(t.expiresAt!==void 0&&t.expiresAt<=Date.now()){process.stderr.write("agent-afk: Claude Code OAuth token in keychain is expired. Run `claude login` to refresh.\n");return}return t.accessToken}}async function MS(){let e=F_();if(e===void 0)return;let t=L_(e);if(t===void 0)return;if(t.expiresAt!==void 0&&t.expiresAt>Date.now()+U4)return t.accessToken;if(!t.refreshToken){process.stderr.write("agent-afk: OAuth token expired and no refresh token available. Run `claude login` to refresh.\n");return}let n=await j4(t.refreshToken);if(!n){process.stderr.write("agent-afk: OAuth token refresh failed. Run `claude login` to refresh.\n");return}try{let r={};try{r=JSON.parse(e)}catch{}let o=r.claudeAiOauth??{};r.claudeAiOauth={...o,accessToken:n.accessToken,expiresAt:n.expiresAt,...n.refreshToken!==void 0?{refreshToken:n.refreshToken}:{}},H4(JSON.stringify(r))}catch{process.stderr.write(`agent-afk: Refreshed OAuth token but failed to write back to credential store.
@@ -885,7 +885,7 @@ Retrying it verbatim will fail the same way. Fix the underlying cause, change th
885
885
 
886
886
  `).trim()}function WX(e){return(e?.textContent??"").replace(/\s+/g," ").trim().length}async function lM(e,t){let{JSDOM:n,Readability:r,turndown:o}=await HX(),s=new n(e,{url:t}).window.document,a=(s.title??"").trim(),l=(()=>{try{let m=s.cloneNode(!0);return new r(m).parse()}catch{return null}})();if(l&&typeof l.content=="string"&&l.content.trim().length>0){let m=aM(o.turndown(l.content)),f=(l.title??"").trim()||a,g=typeof l.length=="number"&&l.length>0?l.length:(l.textContent??"").replace(/\s+/g," ").trim().length;return{title:f,markdown:m,textLength:g,usedFallback:!1}}let c=s.body,d=c?.innerHTML??"",u=aM(o.turndown(d));return{title:a,markdown:u,textLength:WX(c),usedFallback:!0}}var Fv,cM=T(()=>{"use strict";Fv=null});function GX(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 dM(e,t,n){let r=Math.min(t*2**e,n);return Math.round(Math.random()*r)}function qX(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 uM(e,t,n={},r={}){let o=r.retries??3,i=r.baseDelayMs??500,s=r.maxDelayMs??1e4,a=r.sleep??GX,l=n.signal??void 0,c;for(let d=0;d<=o;d++){if(l?.aborted)throw l.reason??new Error("aborted");try{let u=await e(t,n);if(!KX.has(u.status)||d===o)return u;let m=qX(u,s)??dM(d,i,s);U("[web/retryFetch] retrying",{url:t,attempt:d,status:u.status,waitMs:m}),await u.body?.cancel().catch(()=>{}),await a(m,l)}catch(u){if(l?.aborted||(c=u,d===o))throw u;let m=dM(d,i,s);U("[web/retryFetch] retrying after error",{url:t,attempt:d,waitMs:m}),await a(m,l)}}throw c??new Error("retryFetch: exhausted without a result")}var KX,pM=T(()=>{"use strict";ue();KX=new Set([429,502,503,504])});import{BlockList as zX,isIP as Nv}from"node:net";import{lookup as JX}from"node:dns/promises";import{Agent as VX}from"undici";function fM(){let e=k.AFK_WEB_ALLOW_PRIVATE_HOSTS?.trim().toLowerCase();return e==="1"||e==="true"}function ZX(e){return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e}function Lv(e){let t=Nv(e);return t===0?!1:QX.check(e,t===4?"ipv4":"ipv6")}async function gM(e){return JX(e,{all:!0,verbatim:!0})}async function Bv(e,t={}){if(t.allowPrivateHosts??fM())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=ZX(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(Nv(r)!==0)return Lv(r)?{allowed:!1,reason:o(r,r)}:{allowed:!0};let i=t.lookupFn??gM,s;try{s=await i(r)}catch{return{allowed:!0}}for(let a of s)if(Lv(a.address))return{allowed:!1,reason:o(a.address,`${r} (resolved)`)};return{allowed:!0}}async function ed(e,t={}){let n=await Bv(e,t);if(!n.allowed)throw new In(n.reason)}async function qm(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<=mM;s++){await ed(i,o);let a={...n,redirect:"manual",...e===globalThis.fetch&&!(r.allowPrivateHosts??fM())?{dispatcher:e9}:{}},l=await uM(e,i,a,r.retry??{});if(!t9.has(l.status))return l;let c=l.headers.get("location");if(c===null||c.trim()==="")return l;let d;try{d=new URL(c,l.url||i).toString()}catch{return l}await l.body?.cancel().catch(()=>{}),i=d}throw new In(`too many redirects (>${mM}) starting from ${t}`)}var YX,XX,QX,In,e9,mM,t9,Uv=T(()=>{"use strict";G();pM();YX=[["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]],XX=[["::",96],["64:ff9b::",96],["fc00::",7],["fe80::",10]],QX=(()=>{let e=new zX;for(let[t,n]of YX)e.addSubnet(t,n,"ipv4");for(let[t,n]of XX)e.addSubnet(t,n,"ipv6");return e})(),In=class extends Error{constructor(t){super(t),this.name="EgressBlockedError"}};e9=new VX({connect:{lookup(e,t,n){gM(e).then(r=>{let o=r.find(s=>Lv(s.address));if(o!==void 0){n(new In(`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,Nv(i.address))},r=>n(r,"",0))}}});mM=20,t9=new Set([301,302,303,307,308])});import{readFileSync as n9}from"node:fs";import{join as r9}from"path";function o9(e){let n=e.replace(/[.+?()[\]{}/\\^$|]/g,"\\$&").replace(/\*/g,"[^.]*");return new RegExp(`^${n}$`,"i")}function hM(e,t){return o9(t).test(e)}function a9(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(i9.has(t))return!0;if(s9.has(t))return!1}return!1}function yM(e){return e===void 0||e.trim()===""?[]:e.split(",").map(t=>t.trim().toLowerCase()).filter(t=>t.length>0)}function l9(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 bM(e){let t=e===void 0||e.trim()===""?"default":e.trim();return gc(t),t}function c9(e){if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}function d9(e){try{return n9(e,"utf8")}catch(t){if(t.code==="ENOENT")return;throw t}}function u9(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=bM(t.defaultProfile)),n}function wM(e){let t=e?.env??k,n=e?.readFileSync??d9,r=e?.surface??t.AGENT_SURFACE,o=a9(t.AFK_BROWSER_HEADLESS,r),i=yM(t.AFK_BROWSER_ALLOWED_DOMAINS),s=yM(t.AFK_BROWSER_BLOCKED_DOMAINS),a=c9(t.AFK_BROWSER_DOM_SNAPSHOTS),l=l9(t.AFK_BROWSER_BACKEND),c=bM(t.AFK_BROWSER_DEFAULT_PROFILE),d={headless:o,allowedDomains:i,blockedDomains:s,domSnapshots:a,backend:l,configPath:null,defaultProfile:c},u=t.AFK_BROWSER_CONFIG,m=u!==void 0&&u.trim()!==""?u.trim():r9(kn(),"browser.json"),f=n(m);if(f===void 0)return d;let g;try{g=JSON.parse(f)}catch(y){throw new Error(`Failed to parse browser config at ${m}: ${String(y)}`)}if(typeof g!="object"||g===null||Array.isArray(g))throw new Error(`Browser config at ${m} must be a JSON object`);let h=u9(d,g);return h.configPath=m,h}function zm(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(hM(n,r))return{allowed:!1,reason:`blocked by AFK_BROWSER_BLOCKED_DOMAINS: ${r}`};return t.allowedDomains.length>0&&!t.allowedDomains.some(o=>hM(n,o))?{allowed:!1,reason:"not in AFK_BROWSER_ALLOWED_DOMAINS"}:{allowed:!0}}var i9,s9,Jm=T(()=>{"use strict";G();q();i9=new Set(["daemon","subagent","telegram","afk"]),s9=new Set(["repl","interactive","cli"])});import{existsSync as p9,readFileSync as m9}from"node:fs";import{createRequire as f9}from"node:module";import{dirname as g9,join as h9}from"node:path";function kM(e){if(typeof e=="string")return e;let t=[],n=e;for(let r=0;r<b9&&n instanceof Error;r++)t.push(n.message),n=n.cause;return t.length>0?t.join(" | "):String(e)}function Dt(e){let t=kM(e);return vM.some(n=>t.includes(n))}function w9(){try{let t=f9(import.meta.url).resolve("playwright/package.json"),n=JSON.parse(m9(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=h9(g9(t),o);return p9(i)?`node ${/\s/.test(i)?`"${i}"`:i} install chromium`:void 0}catch{return}}function td(){return SM??=w9()??y9,SM}function jv(e){return e.includes("install chromium")}function sn(e,t){let n=kM(e),r=t?.latched===!0?` ${S9}`:"";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: ${td()}.${o}${r}`}return`browser tools require the optional \`playwright\` peer dependency. Install via: pnpm add playwright (then ${td()}). Or pick a different tool.${r}`}function nd(e,t,n=!1){if(!Dt(e))return e;let r=e instanceof Error?e.message:String(e);return new Error(`${r}
887
887
 
888
- ${sn(e,{headless:t,latched:n})}`,{cause:e})}var vM,y9,b9,SM,S9,Vm=T(()=>{"use strict";vM=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],y9="pnpm exec playwright install chromium",b9=4;S9="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 Ai from"node:fs";import Ym from"node:path";import{randomBytes as v9}from"node:crypto";import{chromium as k9}from"playwright";function T9(){try{return"5.87.0"}catch{}try{let e=Ym.resolve(import.meta.dirname,"../../../package.json"),t=Ai.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var E9,Xm,TM=T(()=>{"use strict";Vm();q();ue();E9=T9(),Xm=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=k9.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=nd(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(m){throw i??m}if(i!==void 0)throw i;let c=await a.content();if(i!==void 0)throw i;let d=a.url(),u=l!==null?l.status():null;return{html:c,finalUrl:d,httpStatus:u}}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/${E9}`}}loadStorageState(t){let n=hc(t);try{if(!Ai.existsSync(n))return;let r=JSON.parse(Ai.readFileSync(n,"utf8"));return U("[browser/vault] restored session",{profile:t,file:n}),r}catch(r){U("[browser/vault] ignoring unreadable vault",{profile:t,file:n,err:r});return}}async saveStorageState(t,n){try{let r=hc(t);if(!Ai.existsSync(r))return;let o=await n.storageState(),i=Ym.join(Ym.dirname(r),`.${Ym.basename(r)}.${process.pid}.${v9(4).toString("hex")}.tmp`);Ai.writeFileSync(i,JSON.stringify(o),{mode:384}),Ai.chmodSync(i,384),Ai.renameSync(i,r),U("[browser/vault] saved session",{profile:t,file:r})}catch(r){U("[browser/vault] save failed",{profile:t,err:r})}}}});import{createHash as x9}from"crypto";function EM(e){return!!(e.role==="textbox"&&e.kind==="password"||e.label&&R9.test(e.label))}function xM(e){return x9("sha256").update(e,"utf8").digest("hex").slice(0,8)}function RM(e){let t=e.replace(/\s+/g," ").trim();return t.length<=80?t:t.slice(0,77)+"..."}var R9,Qm=T(()=>{"use strict";R9=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as A9}from"node:crypto";function C9(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function _9(e,t,n){return`el_${A9("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function I9(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function AM(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function _M(e,t){let n=e.role??"",r=e.name??"";CM.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let i of e.children??[])_M(i,t)}async function P9(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 d=window.getComputedStyle(s);if(d.display==="none"||d.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},IM).catch(()=>[])}async function M9(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 d="value"in i?i.value:void 0,u=d!==void 0?String(d):void 0,m=i.disabled??!1,f=s==="input"?i.checked:void 0,g={role:c,name:l,disabled:m};u!==void 0&&(g.value=u),f!==void 0&&(g.checked=f),o.push(g)}return o},IM).catch(()=>[])}function O9(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function Zm(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],i=O9(e),s=i?i.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=P9(e),l=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(e.url()),d=e.title().catch(()=>""),[u,m,f,g,h]=await Promise.all([s,a,l,c,d]),y,b=!1;u!==null?(y=[],_M(u,y)):(o.push("observation skipped accessibility tree (returned null)"),b=!0,y=(await M9(e)).filter(F=>CM.has(F.role??"")));let w=new Map;for(let I of m){let F=AM(I.name),K=w.get(F);(!K||K.bbox.w===0&&I.bbox.w>0)&&w.set(F,I)}let S=y.map(I=>({ax:I,dom:w.get(AM(I.name??""))})),v=r?S:S.filter(I=>I.dom?I.dom.bbox.w>0||I.dom.bbox.h>0:!0);v.sort((I,F)=>{let K=I.dom?.bbox.y??0,L=F.dom?.bbox.y??0;if(K!==L)return K-L;let W=I.dom?.bbox.x??0,P=F.dom?.bbox.x??0;return W-P}),v.length>200&&o.push("page has 200+ interactive elements; consider scoping");let A=v.slice(0,n).map((I,F)=>{let K=I.ax.role??"generic",L=I.ax.name??"",W=_9(K,L,F),P=I.dom?.bbox??{x:0,y:0,w:0,h:0},B=I.dom?.type??null,N=null;I.ax.value!==void 0&&I.ax.value!==null&&(N=String(I.ax.value)),I.ax.checked!==void 0&&(N=String(I.ax.checked)),EM({role:K,kind:B})&&(N="[redacted]");let M={disabled:I.ax.disabled??!1};I.ax.checked!==void 0&&(M.checked=I.ax.checked===!0||I.ax.checked==="mixed"),I.ax.selected!==void 0&&(M.selected=I.ax.selected),I.ax.expanded!==void 0&&(M.expanded=I.ax.expanded);let $;I.dom?.testId?$=`[data-testid="${I.dom.testId}"]`:I.dom?.id&&($=`#${I.dom.id}`);let j={id:W,role:K,label:C9(L),kind:B,value:N,state:M,bbox:P};return $!==void 0&&(j.selector=$),j}),O="idle";try{let I=await e.evaluate(()=>document.readyState);I==="loading"?O="loading":I==="interactive"?O="navigating":O="idle"}catch{O="navigating"}O!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),b&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let _=I9(f),C=`obs_${t.observationCounter.toString(36)}`,R=new Date().toISOString();return{observationId:C,url:g,title:h,textSummary:_,interactive:A,status:{httpStatus:t.httpStatus??null,loadingState:O,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:R}}var CM,IM,PM=T(()=>{"use strict";Qm();CM=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);IM="a[href], button, input, select, textarea, [role], [tabindex], label"});async function MM(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")??"",d=a.getBoundingClientRect();return{role:l,label:c,x:Math.round(d.x),y:Math.round(d.y),w:Math.round(d.width),h:Math.round(d.height)}}),r=`${n.role}:${n.label}:${t}`,o=0;for(let 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 Hv(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,i)=>MM(e,i)))).filter(o=>o!==null)}async function $9(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 Wv(e,t,n){switch(t.kind){case"element_id":return D9(e,t,n);case"selector":return F9(e,t);case"semantic":return L9(e,t)}}async function D9(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 Hv(o,i);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:s}}async function F9(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 Hv(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function L9(e,t){return t.role!==void 0?N9(e,t.text,t.role):B9(e,t.text,t)}async function N9(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 Hv(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:i}}async function B9(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 d=[];s>0&&d.push({loc:r,count:s}),a>0&&d.push({loc:o,count:a}),l>0&&d.push({loc:i,count:l});let u=await $9(d);if(u.length===0)return{outcome:"not_found",query:n};if(u.length===1){let h=u[0];return h===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:h.locator.nth(h.index)}}let m=u.slice(0,5),f=[];for(let h=0;h<m.length;h++){let y=m[h];if(y===void 0)continue;let b=await MM(y.locator,y.index);if(b!==null){let w=`${b.role}:${b.label}:${h}`,S=0;for(let v=0;v<w.length;v++)S=S*31+w.charCodeAt(v)>>>0;f.push({...b,id:`el_${S.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var OM=T(()=>{"use strict"});async function Kv(e,t,n,r){let o=e.url();if(o===n)return null;let i=zm(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 $M=T(()=>{"use strict";Jm()});import{randomBytes as U9}from"crypto";import{mkdir as j9,stat as H9,writeFile as W9}from"fs/promises";import{join as Gv}from"path";import{gzip as K9}from"zlib";import{promisify as G9}from"util";function q9(e){return Gv(Xr(e),"browser")}function z9(e){return Gv(q9(e),"screenshots")}function J9(){return new Date().toISOString().replace(/[:.]/g,"-")}function V9(){return U9(3).toString("hex")}async function qv(e,t,n){if(t.length>DM)throw new Error(`writeScreenshotSidecar: buffer exceeds ${DM} byte cap (received ${t.length} bytes). Refusing to write oversized screenshot.`);let r=z9(e);await j9(r,{recursive:!0});let o=`${J9()}-${V9()}-${n}.png`,i=Gv(r,o);await W9(i,t);let{size:s}=await H9(i);return{path:i,bytes:s}}var dOe,DM,FM=T(()=>{"use strict";q();Qm();dOe=G9(K9);DM=5*1024*1024});var NM={};dp(NM,{PlaywrightProvider:()=>zv});function LM(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 zv,BM=T(()=>{"use strict";TM();PM();OM();Jm();$M();FM();zv=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new Xm(t)}async open(t){let n=zm(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(u){a=u}let l=o.url();if(!(a!==null&&(l===""||l==="about:blank"))){let u=await Kv(o,this.config,t.url,()=>this.close({sessionId:r}));if(u!==null)return u}(t.screenshot===!0||a!==null)&&(s=await this.captureScreenshot(o,r,"browser_open")),i.observationCounter+=1;let d=await Zm(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,d.interactive,d.url,d.title,"browser_open"),a!==null)throw a;return d}async observe(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),i=null;t.screenshot===!0&&(i=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let s=await Zm(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 Wv(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${LM(t.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:l}=a,c=null,d=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 d()}catch(h){if(h instanceof Error&&/navigation|net::ERR/i.test(h.message))try{await d()}catch(y){c=y}else c=h}let u=await Kv(r,this.config,i,()=>this.close({sessionId:n}));if(u!==null)return u;let m=null;(t.screenshot===!0||c!==null)&&(m=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Zm(r,{observationCounter:o.observationCounter,screenshotPath:m,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 d=await Wv(r,t.target,o.knownElements);if(d.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${LM(t.target)}`);if(d.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");i=await d.locator.screenshot()}else i=await r.screenshot({fullPage:t.fullPage??!1});let{path:s,bytes:a}=await qv(n,i,"browser_screenshot"),l=0,c=0;if(t.fullPage===!0)try{let d=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));l=d.w,c=d.h}catch{let d=r.viewportSize();l=d?.width??0,c=d?.height??0}else{let d=r.viewportSize();l=d?.width??0,c=d?.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 qv(n,o,r);return i}catch{return null}}}});var _i={};dp(_i,{__resetBrowserRegistryForTests:()=>e7,browserProviderActive:()=>Q9,closeBrowserProvider:()=>Jv,getBrowserProvider:()=>X9,peekBrowserProvider:()=>Z9});function UM(){Promise.resolve(Jv()).then(()=>{process.exit(130)})}function jM(){Promise.resolve(Jv()).then(()=>{process.exit(143)})}function HM(){nr=null}function Y9(){ef||(process.on("SIGINT",UM),process.on("SIGTERM",jM),process.on("exit",HM),ef=!0)}function WM(){ef&&(process.removeListener("SIGINT",UM),process.removeListener("SIGTERM",jM),process.removeListener("exit",HM),ef=!1)}async function X9(e){return nr!==null?nr:(Ci!==null||(Ci=(async()=>{let{PlaywrightProvider:t}=await Promise.resolve().then(()=>(BM(),NM)),n=wM(e),r=new t(n);return Y9(),nr=r,Ci=null,r})()),Ci)}async function Jv(){if(nr===null)return;let e=nr;nr=null,Ci=null,WM(),await e.shutdown()}function Q9(){return nr!==null}function Z9(){return nr}function e7(){nr=null,Ci=null,WM()}var nr,Ci,ef,Ii=T(()=>{"use strict";Jm();nr=null,Ci=null,ef=!1});async function KM(e,t){try{return await lM(e,t)}catch(n){return U("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function s7(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Ii(),_i));return(await n()).render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}async function GM(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??s7,o=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},i=null,s=e,a=null,l=null;try{let d=await qm(n,e,{headers:i7,signal:t.signal},o);a=d.status,s=d.url||e;let u=d.headers.get("content-type")??"";if(d.ok){if(o7.test(u))throw new Error(`web_scrape markdown mode received binary content (${u.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let m=await d.text();if(r7.test(u)&&!n7.test(u))return{title:"",markdown:m.trim(),finalUrl:s,usedRender:!1};if(i=await KM(m,s),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(d){if(t.signal.aborted||d instanceof In||d instanceof Error&&d.message.startsWith("web_scrape markdown mode received binary"))throw d;l=d}if(!(i===null||i.textLength<200)&&i!==null)return{title:i.title,markdown:i.markdown,finalUrl:s,usedRender:!1};try{await ed(e,o);let d=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:m=>ed(m,o)});d.finalUrl!==e&&/^https?:\/\//i.test(d.finalUrl)&&await ed(d.finalUrl,o);let u=await KM(d.html,d.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(i===null||u.textLength>=i.textLength)return{title:u.title,markdown:u.markdown,finalUrl:d.finalUrl,usedRender:!0}}catch(d){if(t.signal.aborted||d instanceof In)throw d;if(i===null){let u=d instanceof Error?d.message:String(d),m=l instanceof Error?l.message:`HTTP ${a??"error"}`,f=new Error(`web_scrape could not retrieve ${e}: fetch failed (${m}) and render failed (${u}).`);throw f.cause=d,f}}if(i!==null)return{title:i.title,markdown:i.markdown,finalUrl:s,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${a??"error"}).`)}var n7,r7,o7,i7,qM=T(()=>{"use strict";cM();Uv();ue();n7=/(text\/html|application\/xhtml\+xml)/i,r7=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,o7=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,i7={"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 c7(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let i=await t(a7,{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),l7),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!i.ok){let l="";try{let d=await i.text(),u=Rr(d);u&&(l=`: ${u.length>200?u.slice(0,200)+"\u2026":u}`)}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 zM(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?c7({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 JM(e,t){if(t.length===0)return`# Search results for "${e}"
888
+ ${sn(e,{headless:t,latched:n})}`,{cause:e})}var vM,y9,b9,SM,S9,Vm=T(()=>{"use strict";vM=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],y9="pnpm exec playwright install chromium",b9=4;S9="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 Ai from"node:fs";import Ym from"node:path";import{randomBytes as v9}from"node:crypto";import{chromium as k9}from"playwright";function T9(){try{return"5.87.1"}catch{}try{let e=Ym.resolve(import.meta.dirname,"../../../package.json"),t=Ai.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var E9,Xm,TM=T(()=>{"use strict";Vm();q();ue();E9=T9(),Xm=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=k9.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=nd(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(m){throw i??m}if(i!==void 0)throw i;let c=await a.content();if(i!==void 0)throw i;let d=a.url(),u=l!==null?l.status():null;return{html:c,finalUrl:d,httpStatus:u}}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/${E9}`}}loadStorageState(t){let n=hc(t);try{if(!Ai.existsSync(n))return;let r=JSON.parse(Ai.readFileSync(n,"utf8"));return U("[browser/vault] restored session",{profile:t,file:n}),r}catch(r){U("[browser/vault] ignoring unreadable vault",{profile:t,file:n,err:r});return}}async saveStorageState(t,n){try{let r=hc(t);if(!Ai.existsSync(r))return;let o=await n.storageState(),i=Ym.join(Ym.dirname(r),`.${Ym.basename(r)}.${process.pid}.${v9(4).toString("hex")}.tmp`);Ai.writeFileSync(i,JSON.stringify(o),{mode:384}),Ai.chmodSync(i,384),Ai.renameSync(i,r),U("[browser/vault] saved session",{profile:t,file:r})}catch(r){U("[browser/vault] save failed",{profile:t,err:r})}}}});import{createHash as x9}from"crypto";function EM(e){return!!(e.role==="textbox"&&e.kind==="password"||e.label&&R9.test(e.label))}function xM(e){return x9("sha256").update(e,"utf8").digest("hex").slice(0,8)}function RM(e){let t=e.replace(/\s+/g," ").trim();return t.length<=80?t:t.slice(0,77)+"..."}var R9,Qm=T(()=>{"use strict";R9=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as A9}from"node:crypto";function C9(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function _9(e,t,n){return`el_${A9("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function I9(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function AM(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function _M(e,t){let n=e.role??"",r=e.name??"";CM.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let i of e.children??[])_M(i,t)}async function P9(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 d=window.getComputedStyle(s);if(d.display==="none"||d.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},IM).catch(()=>[])}async function M9(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 d="value"in i?i.value:void 0,u=d!==void 0?String(d):void 0,m=i.disabled??!1,f=s==="input"?i.checked:void 0,g={role:c,name:l,disabled:m};u!==void 0&&(g.value=u),f!==void 0&&(g.checked=f),o.push(g)}return o},IM).catch(()=>[])}function O9(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function Zm(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],i=O9(e),s=i?i.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=P9(e),l=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(e.url()),d=e.title().catch(()=>""),[u,m,f,g,h]=await Promise.all([s,a,l,c,d]),y,b=!1;u!==null?(y=[],_M(u,y)):(o.push("observation skipped accessibility tree (returned null)"),b=!0,y=(await M9(e)).filter(F=>CM.has(F.role??"")));let w=new Map;for(let I of m){let F=AM(I.name),K=w.get(F);(!K||K.bbox.w===0&&I.bbox.w>0)&&w.set(F,I)}let S=y.map(I=>({ax:I,dom:w.get(AM(I.name??""))})),v=r?S:S.filter(I=>I.dom?I.dom.bbox.w>0||I.dom.bbox.h>0:!0);v.sort((I,F)=>{let K=I.dom?.bbox.y??0,L=F.dom?.bbox.y??0;if(K!==L)return K-L;let W=I.dom?.bbox.x??0,P=F.dom?.bbox.x??0;return W-P}),v.length>200&&o.push("page has 200+ interactive elements; consider scoping");let A=v.slice(0,n).map((I,F)=>{let K=I.ax.role??"generic",L=I.ax.name??"",W=_9(K,L,F),P=I.dom?.bbox??{x:0,y:0,w:0,h:0},B=I.dom?.type??null,N=null;I.ax.value!==void 0&&I.ax.value!==null&&(N=String(I.ax.value)),I.ax.checked!==void 0&&(N=String(I.ax.checked)),EM({role:K,kind:B})&&(N="[redacted]");let M={disabled:I.ax.disabled??!1};I.ax.checked!==void 0&&(M.checked=I.ax.checked===!0||I.ax.checked==="mixed"),I.ax.selected!==void 0&&(M.selected=I.ax.selected),I.ax.expanded!==void 0&&(M.expanded=I.ax.expanded);let $;I.dom?.testId?$=`[data-testid="${I.dom.testId}"]`:I.dom?.id&&($=`#${I.dom.id}`);let j={id:W,role:K,label:C9(L),kind:B,value:N,state:M,bbox:P};return $!==void 0&&(j.selector=$),j}),O="idle";try{let I=await e.evaluate(()=>document.readyState);I==="loading"?O="loading":I==="interactive"?O="navigating":O="idle"}catch{O="navigating"}O!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),b&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let _=I9(f),C=`obs_${t.observationCounter.toString(36)}`,R=new Date().toISOString();return{observationId:C,url:g,title:h,textSummary:_,interactive:A,status:{httpStatus:t.httpStatus??null,loadingState:O,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:R}}var CM,IM,PM=T(()=>{"use strict";Qm();CM=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);IM="a[href], button, input, select, textarea, [role], [tabindex], label"});async function MM(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")??"",d=a.getBoundingClientRect();return{role:l,label:c,x:Math.round(d.x),y:Math.round(d.y),w:Math.round(d.width),h:Math.round(d.height)}}),r=`${n.role}:${n.label}:${t}`,o=0;for(let 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 Hv(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,i)=>MM(e,i)))).filter(o=>o!==null)}async function $9(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 Wv(e,t,n){switch(t.kind){case"element_id":return D9(e,t,n);case"selector":return F9(e,t);case"semantic":return L9(e,t)}}async function D9(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 Hv(o,i);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:s}}async function F9(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 Hv(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function L9(e,t){return t.role!==void 0?N9(e,t.text,t.role):B9(e,t.text,t)}async function N9(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 Hv(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:i}}async function B9(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 d=[];s>0&&d.push({loc:r,count:s}),a>0&&d.push({loc:o,count:a}),l>0&&d.push({loc:i,count:l});let u=await $9(d);if(u.length===0)return{outcome:"not_found",query:n};if(u.length===1){let h=u[0];return h===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:h.locator.nth(h.index)}}let m=u.slice(0,5),f=[];for(let h=0;h<m.length;h++){let y=m[h];if(y===void 0)continue;let b=await MM(y.locator,y.index);if(b!==null){let w=`${b.role}:${b.label}:${h}`,S=0;for(let v=0;v<w.length;v++)S=S*31+w.charCodeAt(v)>>>0;f.push({...b,id:`el_${S.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var OM=T(()=>{"use strict"});async function Kv(e,t,n,r){let o=e.url();if(o===n)return null;let i=zm(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 $M=T(()=>{"use strict";Jm()});import{randomBytes as U9}from"crypto";import{mkdir as j9,stat as H9,writeFile as W9}from"fs/promises";import{join as Gv}from"path";import{gzip as K9}from"zlib";import{promisify as G9}from"util";function q9(e){return Gv(Xr(e),"browser")}function z9(e){return Gv(q9(e),"screenshots")}function J9(){return new Date().toISOString().replace(/[:.]/g,"-")}function V9(){return U9(3).toString("hex")}async function qv(e,t,n){if(t.length>DM)throw new Error(`writeScreenshotSidecar: buffer exceeds ${DM} byte cap (received ${t.length} bytes). Refusing to write oversized screenshot.`);let r=z9(e);await j9(r,{recursive:!0});let o=`${J9()}-${V9()}-${n}.png`,i=Gv(r,o);await W9(i,t);let{size:s}=await H9(i);return{path:i,bytes:s}}var dOe,DM,FM=T(()=>{"use strict";q();Qm();dOe=G9(K9);DM=5*1024*1024});var NM={};dp(NM,{PlaywrightProvider:()=>zv});function LM(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 zv,BM=T(()=>{"use strict";TM();PM();OM();Jm();$M();FM();zv=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new Xm(t)}async open(t){let n=zm(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(u){a=u}let l=o.url();if(!(a!==null&&(l===""||l==="about:blank"))){let u=await Kv(o,this.config,t.url,()=>this.close({sessionId:r}));if(u!==null)return u}(t.screenshot===!0||a!==null)&&(s=await this.captureScreenshot(o,r,"browser_open")),i.observationCounter+=1;let d=await Zm(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,d.interactive,d.url,d.title,"browser_open"),a!==null)throw a;return d}async observe(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),i=null;t.screenshot===!0&&(i=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let s=await Zm(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 Wv(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${LM(t.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:l}=a,c=null,d=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 d()}catch(h){if(h instanceof Error&&/navigation|net::ERR/i.test(h.message))try{await d()}catch(y){c=y}else c=h}let u=await Kv(r,this.config,i,()=>this.close({sessionId:n}));if(u!==null)return u;let m=null;(t.screenshot===!0||c!==null)&&(m=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Zm(r,{observationCounter:o.observationCounter,screenshotPath:m,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 d=await Wv(r,t.target,o.knownElements);if(d.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${LM(t.target)}`);if(d.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");i=await d.locator.screenshot()}else i=await r.screenshot({fullPage:t.fullPage??!1});let{path:s,bytes:a}=await qv(n,i,"browser_screenshot"),l=0,c=0;if(t.fullPage===!0)try{let d=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));l=d.w,c=d.h}catch{let d=r.viewportSize();l=d?.width??0,c=d?.height??0}else{let d=r.viewportSize();l=d?.width??0,c=d?.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 qv(n,o,r);return i}catch{return null}}}});var _i={};dp(_i,{__resetBrowserRegistryForTests:()=>e7,browserProviderActive:()=>Q9,closeBrowserProvider:()=>Jv,getBrowserProvider:()=>X9,peekBrowserProvider:()=>Z9});function UM(){Promise.resolve(Jv()).then(()=>{process.exit(130)})}function jM(){Promise.resolve(Jv()).then(()=>{process.exit(143)})}function HM(){nr=null}function Y9(){ef||(process.on("SIGINT",UM),process.on("SIGTERM",jM),process.on("exit",HM),ef=!0)}function WM(){ef&&(process.removeListener("SIGINT",UM),process.removeListener("SIGTERM",jM),process.removeListener("exit",HM),ef=!1)}async function X9(e){return nr!==null?nr:(Ci!==null||(Ci=(async()=>{let{PlaywrightProvider:t}=await Promise.resolve().then(()=>(BM(),NM)),n=wM(e),r=new t(n);return Y9(),nr=r,Ci=null,r})()),Ci)}async function Jv(){if(nr===null)return;let e=nr;nr=null,Ci=null,WM(),await e.shutdown()}function Q9(){return nr!==null}function Z9(){return nr}function e7(){nr=null,Ci=null,WM()}var nr,Ci,ef,Ii=T(()=>{"use strict";Jm();nr=null,Ci=null,ef=!1});async function KM(e,t){try{return await lM(e,t)}catch(n){return U("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function s7(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Ii(),_i));return(await n()).render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}async function GM(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??s7,o=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},i=null,s=e,a=null,l=null;try{let d=await qm(n,e,{headers:i7,signal:t.signal},o);a=d.status,s=d.url||e;let u=d.headers.get("content-type")??"";if(d.ok){if(o7.test(u))throw new Error(`web_scrape markdown mode received binary content (${u.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let m=await d.text();if(r7.test(u)&&!n7.test(u))return{title:"",markdown:m.trim(),finalUrl:s,usedRender:!1};if(i=await KM(m,s),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(d){if(t.signal.aborted||d instanceof In||d instanceof Error&&d.message.startsWith("web_scrape markdown mode received binary"))throw d;l=d}if(!(i===null||i.textLength<200)&&i!==null)return{title:i.title,markdown:i.markdown,finalUrl:s,usedRender:!1};try{await ed(e,o);let d=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:m=>ed(m,o)});d.finalUrl!==e&&/^https?:\/\//i.test(d.finalUrl)&&await ed(d.finalUrl,o);let u=await KM(d.html,d.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(i===null||u.textLength>=i.textLength)return{title:u.title,markdown:u.markdown,finalUrl:d.finalUrl,usedRender:!0}}catch(d){if(t.signal.aborted||d instanceof In)throw d;if(i===null){let u=d instanceof Error?d.message:String(d),m=l instanceof Error?l.message:`HTTP ${a??"error"}`,f=new Error(`web_scrape could not retrieve ${e}: fetch failed (${m}) and render failed (${u}).`);throw f.cause=d,f}}if(i!==null)return{title:i.title,markdown:i.markdown,finalUrl:s,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${a??"error"}).`)}var n7,r7,o7,i7,qM=T(()=>{"use strict";cM();Uv();ue();n7=/(text\/html|application\/xhtml\+xml)/i,r7=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,o7=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,i7={"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 c7(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let i=await t(a7,{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),l7),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!i.ok){let l="";try{let d=await i.text(),u=Rr(d);u&&(l=`: ${u.length>200?u.slice(0,200)+"\u2026":u}`)}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 zM(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?c7({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 JM(e,t){if(t.length===0)return`# Search results for "${e}"
889
889
 
890
890
  (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(`
891
891
  `).trimEnd()}var a7,l7,VM=T(()=>{"use strict";fo();a7="https://api.exa.ai/search",l7=10});function tf(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 Pi=T(()=>{"use strict";Vm()});function g7(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=d7;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,u7)}let a=p7;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,m7)}return{mode:r,url:o,query:i,timeoutMs:s,maxBytes:a}}function Vv(e,t){return Buffer.byteLength(e,"utf8")<=t?{content:e,truncated:!1}:{content:xr(e,t),truncated:!0}}function h7(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=g7(o);if("error"in s)return{content:s.error,isError:!0};if(i.aborted){let u=i.reason;return{content:`web_scrape aborted: ${u instanceof Error?u.message:String(u??"aborted")}`,isError:!0}}let a=new AbortController,l=()=>{a.abort(i.reason)},c,d=()=>{let u=a.signal.reason;return u instanceof Error?u.message:String(u??"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 m=await Bv(s.url,r);if(a.signal.aborted)return{content:`web_scrape aborted: ${d()}`,isError:!0};if(!m.allowed)return{content:`web_scrape blocked: ${m.reason}`,isError:!0}}if(s.mode==="raw"){let m;try{let h={method:"GET",headers:{"User-Agent":"agent-afk/web_scrape",Accept:"*/*"},signal:a.signal};m=await qm(t,s.url,h,r)}catch(h){return a.signal.aborted?{content:`web_scrape aborted: ${d()}`,isError:!0}:h instanceof In?{content:`web_scrape blocked: ${h.message}`,isError:!0}:{content:`web_scrape network error: ${h instanceof Error?h.message:String(h)}`,isError:!0}}if(!m.ok)return{content:`web_scrape HTTP ${m.status} ${m.statusText||""}`.trimEnd()+` for ${s.url}`,isError:!0};let f;try{f=await m.text()}catch(h){return{content:`web_scrape read error: ${h instanceof Error?h.message:String(h)}`,isError:!0}}let g=Vv(f,s.maxBytes);return{content:g.content,...g.truncated?{truncated:!0}:{}}}if(s.mode==="markdown")try{let m=await GM(s.url,{fetchFn:t,renderFn:e.renderFn,timeoutMs:s.timeoutMs,signal:a.signal,...e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{}});if(m.markdown.trim().length===0)return{content:`web_scrape extracted no readable content from ${s.url}.`,isError:!0};let f=Vv(m.markdown,s.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(m){if(a.signal.aborted)return{content:`web_scrape aborted: ${d()}`,isError:!0};if(m instanceof In)return{content:`web_scrape blocked: ${m.message}`,isError:!0};let f=m instanceof Error?m.message:String(m),g=Dt(m)&&!jv(f)?` (the render fallback needs the optional Playwright browser \u2014 run \`${td()}\`)`:"";return{content:`web_scrape markdown error: ${f}${g}`,isError:!0}}let u=zM({exaApiKey:n.EXA_API_KEY,fetchFn:t});if("error"in u)return{content:u.error,isError:!0};try{let m=await u.search(s.query,{limit:f7,timeoutMs:s.timeoutMs,signal:a.signal}),f=Vv(JM(s.query,m),s.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(m){return a.signal.aborted?{content:`web_scrape aborted: ${d()}`,isError:!0}:{content:`web_scrape search error (${u.name}): ${m instanceof Error?m.message:String(m)}`,isError:!0}}}finally{c!==void 0&&clearTimeout(c),i.removeEventListener("abort",l)}}}var d7,u7,p7,m7,f7,YM,XM=T(()=>{"use strict";qM();VM();Uv();wi();Pi();d7=3e4,u7=12e4,p7=1e5,m7=1e6,f7=10;YM=h7()});import{existsSync as ZM,mkdirSync as y7,readFileSync as b7,renameSync as w7,unlinkSync as S7,writeFileSync as v7}from"node:fs";import{dirname as QM,join as k7}from"node:path";import{randomBytes as T7}from"node:crypto";function an(e){let t=e??Ow();if(!ZM(t))return[];try{let n=b7(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 Mi(e,t){let n=t??Ow();y7(QM(n),{recursive:!0});let r=k7(QM(n),`.schedules.json.${process.pid}.${T7(4).toString("hex")}.tmp`),o=JSON.stringify(e,null,2);try{v7(r,o,"utf-8"),w7(r,n)}catch(i){try{ZM(r)&&S7(r)}catch{}throw i}}function nf(e,t){let n=an(t),r=n.map(l=>l.id),o=E7(e.name),i=x7(o,r),s=new Date().toISOString(),a={...e,notifyOn:e.notifyOn??"failure",id:i,createdAt:s,updatedAt:s};return n.push(a),Mi(n,t),a}function rf(e,t){let n=an(t),r=n.length,o=n.filter(i=>i.id!==e);return o.length===r?!1:(Mi(o,t),!0)}function rd(e,t){return an(t).find(n=>n.id===e)}function E7(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"")}function x7(e,t){if(!t.includes(e))return e;let n=2;for(;t.includes(`${e}-${n}`);)n+=1;return`${e}-${n}`}function e0(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 of=T(()=>{"use strict";q()});import{existsSync as R7,readFileSync as A7}from"node:fs";import{join as C7}from"node:path";async function Pn(e,t,n){let r;try{let o=C7(Sp("default"),"port");if(!R7(o))return{synced:!1,detail:"daemon-not-detected (no port file)"};let i=A7(o,"utf-8").trim();if(r=parseInt(i,10),Number.isNaN(r))return{synced:!1,detail:"daemon-not-detected (invalid port file)"}}catch{return{synced:!1,detail:"daemon-not-detected (unreadable port file)"}}try{let o=await fetch(`http://localhost:${r}${t}`,{method:e,headers:{"Content-Type":"application/json"},body:n!==void 0?JSON.stringify(n):void 0,signal:AbortSignal.timeout(2e3)});return o.ok?{synced:!0,detail:"synced"}:e==="POST"&&o.status===409?{synced:!0,detail:"already-registered"}:e==="DELETE"&&o.status===404?{synced:!0,detail:"not-registered"}:{synced:!1,detail:`daemon-rejected (HTTP ${o.status})`}}catch{return{synced:!1,detail:"daemon-unreachable (stale port file or network error)"}}}var yo,Yv=T(()=>{"use strict";q();yo="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 _7}from"node:fs";import{readFile as I7}from"node:fs/promises";var t0,n0,r0,o0,i0=T(()=>{"use strict";of();q();Yv();t0=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=nf({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 Pn("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 Pn("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:yo}})}},n0=async(e,t)=>{let n=an();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})))}},r0=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=Kn();if(!_7(i))return{content:JSON.stringify([])};let s;try{let c=await I7(i);s=(c.length>1048576?c.subarray(c.length-1048576):c).toString("utf-8")}catch{return{content:JSON.stringify([])}}let a=s.split(`
@@ -982,7 +982,7 @@ ${o}`:o}function hZ(e){let t=e.systemPrompt;if(t!==void 0){if(typeof t=="string"
982
982
  --
983
983
  ${b.content}`,isError:!0,...b.truncated===!0?{truncated:!0}:{}}),m.push({call:y,result:b});let S=u.get(y.id),v=typeof S=="number"?Date.now()-S:0,E=b.truncated===!0||b.content.includes("[output truncated");li(o,Xf({toolUseId:y.id,name:y.name,result:b,truncated:E,durationMs:v,subagentId:a})),yield{type:"tool.output",toolUseId:y.id,toolName:y.name,content:b.content,...b.isError===!0?{isError:!0}:{},...b.truncated===!0?{truncated:!0}:{},...b.incomplete===!0?{incomplete:!0}:{},...b.incompleteReason?{incompleteReason:b.incompleteReason}:{},...typeof b.batchIndex=="number"&&typeof b.batchSize=="number"?{batchIndex:b.batchIndex,batchSize:b.batchSize}:{},...b.failureClass?{failureClass:b.failureClass}:{},sessionId:s},b.render?.diff&&(yield{type:"tool.diff",toolUseId:y.id,diff:b.render.diff,sessionId:s})}}i.push(RO(e.assistantText,l,e.reasoningText));for(let g of AO(m))i.push(g);let f=CO(m,{vision:n});return f&&i.push(f),m.find(g=>g.result.failureClass===da)?.result}var ZO=T(()=>{"use strict";ye();Kk();Nm();xd();Qf();pd();Rk()});function eg(e){return e!==void 0&&e>0?Math.floor(e):0}function tg(e,t){return t>0&&e>=t}function ng(e,t){return t>0?`round ${e}/${t}`:`round ${e}`}var Ir,Zf,Pa=T(()=>{"use strict";Ir="tool_use_loop_capped",Zf="You have reached your tool-use budget for this turn. Do not request any more tools \u2014 give your final answer now using only the information already gathered."});import WZ from"openai";function GZ(e){let t={apiKey:e.apiKey};return e.baseURL!==void 0&&(t.baseURL=e.baseURL),e.defaultHeaders!==void 0&&(t.defaultHeaders=e.defaultHeaders),new WZ(t)}function e$(){return KZ??GZ}var KZ,Gk=T(()=>{"use strict";KZ=null});function un(e,t){return new Promise(n=>{if(t.aborted){n();return}let r=setTimeout(n,e);r.unref(),t.addEventListener("abort",()=>{clearTimeout(r),n()},{once:!0})})}var Ma=T(()=>{"use strict"});async function*qk(e,t){let n=0;for(;;){let r=$f(),o=Date.now(),i,s=null;for(let d=0;;d++)try{i=await t.createStream(e.controller.signal);break}catch(u){if(e.controller.signal.aborted)return null;if(Gf(u)&&d<VO){let m=Wk(u),f=m??Hk(d);if(re(e.traceWriter,{phase:"rate_limit",durationMs:f,resolvedModel:e.currentModel,metadata:{source:"connection",reason:m!==void 0?"retry-after":"backoff",attempt:d}}),await un(f,e.controller.signal),e.controller.signal.aborted)return null;continue}s=u;break}if(s!==null)return yield{type:"error",error:t.clarifyError(s)},null;let a=null,l=!1;try{for await(let d of _a(i,e.controller.signal)){if(e.isClosed())return null;for(let u of t.translate(d,r))l||(l=!0,re(e.traceWriter,{phase:"model_ttfb",durationMs:Date.now()-o,resolvedModel:e.currentModel})),yield u}}catch(d){if(e.controller.signal.aborted)return null;if(qf(d)&&n<YO){n++,yield{type:"stream.retry",sessionId:e.initSessionId};let u=Wk(d),m=u??Hk(n-1);if(re(e.traceWriter,{phase:"rate_limit",durationMs:m,resolvedModel:e.currentModel,metadata:{source:"stream",reason:u!==void 0?"retry-after":"backoff",attempt:n}}),await un(m,e.controller.signal),e.controller.signal.aborted)return null;continue}a=d}if(a!==null)return yield{type:"error",error:t.clarifyError(a)},null;if(e.controller.signal.aborted)return null;let c=TO(r)&&r.toolCallsByIndex.size>0;return r.finishReason===null&&r.assistantText.length===0&&!c?(yield{type:"error",error:new qn("the model stream ended without a finish_reason and without a dispatchable response (no visible answer text and no complete tool call): the response was empty or cut off before any usable content arrived. The turn is incomplete.")},null):{state:r,events:[],text:r.assistantText,needsToolDispatch:c}}}var t$=T(()=>{"use strict";ye();Wf();Ma();pd();Fe();zf()});import{randomUUID as zZ}from"node:crypto";function VZ(e){if(e instanceof Td||Gf(e)||qf(e))return!1;let t=Ed(e);return t!==void 0&&JZ.has(t)}function n$(e,t,n={}){let r=rr(e.apiKey,n.authDeps,e.forceChatgptOAuth??!1),o=n.sessionIdOverride??e.resume??`openai-pending-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,i=typeof e.model=="string"?e.model:"gpt-4o-mini",s=Tt(i)??i,a={auth:r,model:s,synthesizedSessionId:o,promptStream:t,config:e};return n.baseURL!==void 0&&(a.baseURL=n.baseURL),n.toolDispatcher!==void 0&&(a.toolDispatcher=n.toolDispatcher),n.onPermissionMode!==void 0&&(a.onPermissionMode=n.onPermissionMode),n.mcpManager!==void 0&&(a.mcpManager=n.mcpManager),n.useResponsesApi!==void 0&&(a.useResponsesApi=n.useResponsesApi),e.traceWriter!==void 0&&(a.traceWriter=e.traceWriter),new rg(a)}var zk,JZ,rg,Jk=T(()=>{"use strict";ye();Js();xk();Fi();Tn();Vk();ue();Ta();SO();Sa();pd();Rk();Ck();Lf();G();yd();Ik();Fe();kd();UO();Uk();zf();mS();gS();hi();xd();ZO();Pa();jf();Gk();t$();Bk();zf();Gk();jf();zk="openai-compatible",JZ=new Set([400,404,405,415,422,501]);rg=class{client;opts;initSessionId;toolDispatcher;onPermissionMode;openAITools;wireMode;traceWriter;priorTurns=[];currentModel;currentPermissionMode;responsesCompactionUnavailable=!1;abort=new xa;closed=!1;lastUsage=null;autoCompactThreshold;constructor(t){if(this.opts=t,this.initSessionId=t.synthesizedSessionId,this.currentModel=t.model,this.currentPermissionMode=Nk(t.config.permissionMode),this.toolDispatcher=t.toolDispatcher,this.onPermissionMode=t.onPermissionMode,this.traceWriter=t.traceWriter,this.autoCompactThreshold=Ea(t.config.autoCompact),this.toolDispatcher){let o=this.toolDispatcher;Array.isArray(o.toolDefs)&&o.toolDefs.length>0&&(this.openAITools=EO(o.toolDefs))}let n=(t.useResponsesApi??!1)||IO(k.AFK_OPENAI_USE_RESPONSES),r=PO(t.auth,n);if(this.wireMode=r.mode,t.auth.apiKey===null)this.client=null;else{let o=e$(),i={apiKey:t.auth.apiKey},s=r.baseURL??t.baseURL;s!==void 0&&(i.baseURL=s),r.headers!==void 0&&(i.defaultHeaders=r.headers),this.client=o(i)}}activeOpenAITools(){if(!this.openAITools)return;if(this.currentPermissionMode==="plan")return this.openAITools;let t=this.openAITools.filter(n=>n.function.name!==jt);return t.length>0?t:void 0}async*[Symbol.asyncIterator](){if(yield{type:"session.init",info:{sessionId:this.initSessionId,model:this.currentModel,permissionMode:this.currentPermissionMode,cwd:process.cwd(),tools:this.openAITools?this.openAITools.map(r=>r.function.name):[],slashCommands:[],skills:[],plugins:[],mcpServers:this.opts.mcpManager?.getServerStates().map(r=>({name:r.serverName,status:r.status}))??[],apiKeySource:this.opts.auth.source,version:zk}},this.opts.auth.apiKey===null){yield{type:"error",error:new Error(ud(this.opts.auth))};return}let n=this.opts.promptStream[Symbol.asyncIterator]();try{for(;!this.closed;){let r=await Promise.race([n.next(),this.abort.closedPromise]);if(r===_k)break;let o=r;if(o.done)break;if(yield*this.runTurn(o.value.content),this.autoCompactThreshold!==void 0&&!this.closed){let i=this.lastUsage,s=Di(this.currentModel);if(i!==null&&s>0){let a=On(i);if(gd(a,s,this.autoCompactThreshold))try{await this.opts.config.hookRegistry?.dispatch({event:"PreCompact",sessionId:this.initSessionId,trigger:"auto"}),await this.compactHistory("token_threshold")}catch(l){if(!(l instanceof Ee))throw l}}}}}catch(r){yield{type:"error",error:r instanceof Error?r:new Error(String(r))}}finally{try{await n.return?.()}catch{}}}async*runTurn(t){let n=this.abort.begin();if(n.signal.aborted)return;let r=Date.now(),o=zZ(),i=n.signal.aborted?Date.now():null,s=()=>{i===null&&(i=Date.now())};this.traceWriter&&!n.signal.aborted&&n.signal.addEventListener("abort",s,{once:!0}),re(this.traceWriter,{phase:"loop_start"});try{yield*this._runTurnInner(t,n,r,o)}finally{n.signal.removeEventListener("abort",s),i!==null&&n.signal.reason==="interrupted"&&re(this.traceWriter,{phase:"interrupt_halt",durationMs:Date.now()-i,metadata:{provider:"openai-compatible"}}),re(this.traceWriter,{phase:"loop_end",durationMs:Date.now()-r})}}async*_runTurnInner(t,n,r,o){let i=uO(this.currentModel);this.priorTurns.push({role:"user",content:bO(t,{vision:i,model:this.currentModel})});let s={stopReason:null,resultSubtype:"success",isError:!1},a="",l="",c=eg(this.opts.config.maxToolUseIterations),d=!1,u=0,m=0;for(;;){if(n.signal.aborted){this.abort.clear(n),yield*this.finishTurn(s,r);return}let f=yield*this.runIteration(n,i,d);if(f===null){this.abort.clear(n),(n.signal.aborted||this.closed)&&(yield*this.finishTurn(s,r));return}let g=kO(f.state);if(s=ld(s,g),s.contextWindowTokens=(g.inputTokens??0)+(g.outputTokens??0),this.lastUsage=s,f.text.length>0&&(a=f.text),l=f.state.reasoningText,!f.needsToolDispatch||d)break;let h=yield*this.dispatchAndAppend(f.state,n.signal,i);if(h){this.abort.clear(n),yield{type:"error",error:new Ds(h.content)};return}u+=1;{let y=Df(f.state);m+=y.length;let b=y.at(-1),w=b?.name,S;try{S=b?JSON.parse(b.argumentsRaw||"{}"):void 0}catch{S=void 0}let v=b?`${b.name}${vo(b.name,S)}`:"unknown";yield{type:"progress",progress:{taskId:o,description:"Working",summary:`${ng(u,c)}: ${v}`,lastToolName:w,totalTokens:s.totalTokens??0,toolUses:m,durationMs:Date.now()-r},sessionId:this.initSessionId}}if(n.signal.aborted){this.abort.clear(n),yield*this.finishTurn(s,r);return}if(tg(u,c)){d=!0;continue}}if(this.abort.clear(n),a.length>0){let f={role:"assistant",content:a};l.length>0&&(f.reasoning_content=l),this.priorTurns.push(f)}yield{type:"assistant.message",text:a,sessionId:this.initSessionId},yield*this.finishTurn(d?{...s,stopReason:Ir}:s,r)}*finishTurn(t,n){this.lastUsage=t,yield{type:"turn.completed",usage:{...t,durationMs:Date.now()-n},sessionId:this.initSessionId}}clarifyResponsesError(t,n){let r=t instanceof Error?t:new Error(String(t));if(!n||(t&&typeof t=="object"&&"status"in t?t.status:void 0)!==400&&!/\b400\b/.test(r.message))return r;let i,s=t?.error;if(s&&typeof s=="object"){let a=s;typeof a.detail=="string"?i=a.detail:typeof a.message=="string"&&(i=a.message)}return new Error(`ChatGPT/Codex backend rejected model "${this.currentModel}" (HTTP 400). A ChatGPT subscription only serves certain OpenAI models on this backend (gpt-5.6 and gpt-5.5 work; gpt-5, gpt-5.1, gpt-5.2 and *-codex do not). `+(i?`Backend said: ${i}`:"No error body was returned."))}async*runIteration(t,n,r=!1){let o=wO({config:this.opts.config,...this.opts.config.resumeHistory!==void 0?{resumeHistory:this.opts.config.resumeHistory}:{},priorTurns:this.priorTurns,vision:n});if(o[0]?.role==="system"){let a=this.currentPermissionMode==="plan"?Gp:this.currentPermissionMode==="autonomous"?qp:null;a!==null&&(o[0]={...o[0],content:o[0].content+`
984
984
 
985
- `+a})}r&&o.push({role:"user",content:Zf});let i=r?void 0:this.activeOpenAITools(),s={controller:t,traceWriter:this.traceWriter,initSessionId:this.initSessionId,currentModel:this.currentModel,isClosed:()=>this.closed};if(this.wireMode==="responses"){let a=this.opts.auth.source==="chatgpt-oauth";if(a&&md(this.currentModel))return yield{type:"error",error:new Error(`Model "${this.currentModel}" can't run on a ChatGPT subscription \u2014 the ChatGPT/Codex backend only supports OpenAI gpt-5.x models. This usually means a subagent or skill requested a Claude model. Pass a gpt-5.x model to it (e.g. model: "gpt-5.5"); for an auto-dispatched agent you can't pass a model to (e.g. git-investigator), set AFK_DEFAULT_SUBAGENT_MODEL to a gpt-5.x id. Or run it on a provider configured with the matching API key.`)},null;let l=Hf({model:this.currentModel,messages:o,activeTools:i,maxOutputTokens:this.opts.config.maxOutputTokens,effort:this.opts.config.effort,isChatGptBackend:a});return yield*qk(s,{createStream:async c=>await this.client.responses.create(l,{signal:c}),translate:(c,d)=>Ff(c,d,this.initSessionId),clarifyError:c=>this.clarifyResponsesError(c,a)})}else{let a=GO({model:this.currentModel,messages:o,activeTools:i,maxOutputTokens:this.opts.config.maxOutputTokens,effort:this.opts.config.effort});return yield*qk(s,{createStream:async l=>await this.client.chat.completions.create(a,{signal:l}),translate:(l,c)=>vO(l,c,this.initSessionId),clarifyError:l=>l instanceof Error?l:new Error(String(l))})}}async*dispatchAndAppend(t,n,r){return yield*QO({state:t,signal:n,vision:r,toolDispatcher:this.toolDispatcher,traceWriter:this.traceWriter,priorTurns:this.priorTurns,sessionId:this.initSessionId,subagentId:this.opts.config.subagentId})}async interrupt(){this.abort.requestAbort("interrupted")}async compact(){return this.compactHistory("manual")}async compactHistory(t){let n=this.priorTurns.length;if(this.opts.auth.apiKey===null)return{compacted:!1,reason:"no-usable-auth",messagesBefore:n,messagesAfter:n};if(this.wireMode==="responses"&&this.responsesCompactionUnavailable){let i=Ca(k.AFK_MICROCOMPACT_TOOL_RESULT_BYTES,k.AFK_MICROCOMPACT_KEEP_LAST),{blocksCleared:s,bytesReclaimed:a}=Fk(this.priorTurns,i);return s>0?{compacted:!1,reason:"microcompacted",messagesBefore:n,messagesAfter:this.priorTurns.length,microcompaction:{blocksCleared:s,bytesReclaimed:a}}:{compacted:!1,reason:"responses-compaction-unavailable",messagesBefore:n,messagesAfter:n}}let r=k.AFK_COMPACT_MODEL??this.currentModel,o=hd(On(this.lastUsage??{}),Di(this.currentModel));return BO({priorTurns:this.priorTurns,usedFraction:o,shrinkAtFraction:NO(),summarize:(i,s)=>this.wireMode==="responses"?this.summarizeViaResponses(i,s,r):Kf({client:this.client,model:r,system:bd,user:vd(i),maxTokens:1024,signal:s}),isClosed:this.closed,isIdle:this.abort.isIdle(),beginAbort:()=>this.abort.begin(),clearAbort:i=>this.abort.clear(i),trigger:t,traceWriter:this.traceWriter})}async summarizeViaResponses(t,n,r){try{return await zO({client:this.client,model:r,system:bd,user:vd(t),isChatGptBackend:this.opts.auth.source==="chatgpt-oauth",maxTokens:1024,signal:n})}catch(o){if(!n.aborted&&VZ(o)){this.responsesCompactionUnavailable=!0;let i=Ed(o);re(this.traceWriter,{phase:"compaction_disabled",metadata:{wire:"responses",reason:"responses-compaction-unavailable",error:o instanceof Error?o.message:String(o),...i!==void 0?{status:i}:{}}})}throw o}}async setModel(t){t!==void 0&&(this.currentModel=Tt(t)??t)}async setPermissionMode(t){this.currentPermissionMode=Nk(t);let n=En(this.currentPermissionMode);this.toolDispatcher?.setAllowAll?.(n),this.onPermissionMode?.(this.currentPermissionMode)}setCwd(t){this.toolDispatcher?.setResolveBase?.(t)}async supportedCommands(){return og()}async supportedModels(){return[{value:"gpt-5.6",displayName:"GPT-5.6 (Sol)",description:"OpenAI flagship \u2014 alias for gpt-5.6-sol"},{value:"gpt-5.6-sol",displayName:"GPT-5.6 Sol",description:"Frontier capability"},{value:"gpt-5.6-terra",displayName:"GPT-5.6 Terra",description:"Balanced intelligence/cost"},{value:"gpt-5.6-luna",displayName:"GPT-5.6 Luna",description:"Fast, high-volume workloads"},{value:"gpt-5.5",displayName:"GPT-5.5",description:"Prior flagship (ChatGPT backend)"},{value:"gpt-4o",displayName:"GPT-4o",description:"OpenAI flagship multimodal"},{value:"gpt-4o-mini",displayName:"GPT-4o mini",description:"Fast/cheap GPT-4o"},{value:"gpt-4.1",displayName:"GPT-4.1",description:"Long-context GPT-4"},{value:"gpt-4.1-mini",displayName:"GPT-4.1 mini",description:"Fast 4.1 variant"},{value:"o1",displayName:"o1",description:"Reasoning model"},{value:"o1-mini",displayName:"o1 mini",description:"Fast reasoning"},{value:"o3-mini",displayName:"o3 mini",description:"Newer reasoning, faster"}]}async supportedAgents(){return[]}async getContextUsage(){let t=this.lastUsage,n=Gt(this.currentModel),r;if(t&&n>0){let s=On(t);r=Math.min(100,Math.max(0,s/n*100))}let{totalTokens:o,apiUsage:i}=fd(t);return{tools:[],agents:[],isAutoCompactEnabled:this.autoCompactThreshold!==void 0,apiUsage:i,totalTokens:o,...r!==void 0?{percentage:r}:{},maxTokens:n}}async mcpServerStatus(){return this.opts.mcpManager?this.opts.mcpManager.getServerStates().map(t=>({name:t.serverName,status:t.status})):[]}async accountInfo(){return{authSource:this.opts.auth.source}}async rewindFiles(t,n){return{canRewind:!1,error:`${zk} provider does not support file checkpoint rewind yet.`}}close(){this.closed=!0,this.abort.requestAbort("closed"),this.abort.markClosed(),U(`\u{1F7E2} ${zk}: closed`)}}});function Yk(){for(let e of Xk)Pc(e)}function YZ(){if(r$)return;r$=!0,o$=()=>Yk(),process.on("exit",o$);let e=process.listenerCount("SIGINT")>0;i$=()=>{Yk(),e||process.exit(130)},process.on("SIGINT",i$);let t=process.listenerCount("SIGTERM")>0;s$=()=>{Yk(),t||process.exit(143)},process.on("SIGTERM",s$)}function a$(e){YZ(),Xk.add(e)}function l$(e){Xk.delete(e)}var Xk,r$,o$,i$,s$,c$=T(()=>{"use strict";ht();Xk=new Set,r$=!1,o$=null,i$=null,s$=null});import{randomUUID as XZ}from"node:crypto";function Qk(e,t){return(e===void 0||e===0)&&t===void 0}function Rd(e){let t=e.sessionId??e.resume;if(t!==void 0)return{id:t,memoized:e.memoized};if(!Qk(e.depth,e.parentSessionId))return{id:void 0,memoized:e.memoized};if(e.surface===void 0||!QZ.has(e.surface))return{id:void 0,memoized:e.memoized};let n=e.memoized??XZ();return{id:n,memoized:n}}function Ad(e){let t=e.sessionId;if(!Qk(e.depth,e.parentSessionId)||t===void 0)return e.currentPresenceSessionId;if(e.currentPresenceSessionId===t)return t;let n=e.currentPresenceSessionId;n!==null&&(U(`\u2691 presence: advertised id changed ${n} \u2192 ${t} \u2014 rewriting`),l$(n),Pc(n));let r=e.runtimeStateSource.getWorkspace();return xS({sessionId:t,surface:e.surface,actor:So(e.depth),cwd:e.cwd??process.cwd(),startedAt:new Date().toISOString(),model:{provider:e.providerName,name:e.model},workspace:r,pid:process.pid}),a$(t),t}var QZ,Zk=T(()=>{"use strict";ht();Oi();ue();c$();QZ=new Set(["cli"])});var eT,qt,ZZ,Cd=T(()=>{"use strict";vm();Em();pa();_m();Js();kk();hi();Wt();Kt();Ek();$n();Jk();Uk();ht();Zk();Ta();Jk();eT="openai-compatible",qt=class{name=eT;providerOpts;memoryStore;schemas;_sharedReadRoots;_sharedWriteRoots;_currentPermissionMode="default";_initialResolveBase;_presenceSessionId=null;_mintedSessionId=null;constructor(t={}){this.providerOpts=t,this.memoryStore=t.memoryStore??new ct;let n=[...Zn];t.subagentExecutor&&n.push(t.subagentExecutor.describeAgentTool?.()??Ht),t.skillExecutor&&n.push(Si),t.composeExecutor&&n.push(vi),t.readOnlyMemory===!0?n.push(ca):n.push(...mo),n.push(xn);for(let r of t.customTools??[])n.some(o=>o.name===r.schema.name)||n.push(r.schema);this.schemas=n}query(t){let n=t.config,r=n.permissionMode??"default";this._currentPermissionMode=r,this.ensureSharedRoots(n.cwd),n.readRoots&&this._sharedReadRoots&&this._sharedReadRoots.length<=1&&(this._sharedReadRoots.length=0,this._sharedReadRoots.push(...n.readRoots)),n.writeRoots&&this._sharedWriteRoots&&this._sharedWriteRoots.length<=1&&(this._sharedWriteRoots.length=0,this._sharedWriteRoots.push(...n.writeRoots));let o,i=typeof n.model=="string"?n.model:String(n.model),s=Cc({surface:this.providerOpts.surface??"cli",cwd:n.cwd??process.cwd(),modelName:i,providerName:eT,permissionMode:r,...n.sessionId!==void 0?{sessionId:n.sessionId}:{},...n.parentSessionId!==void 0?{parentSessionId:n.parentSessionId}:{},...n.depth!==void 0?{depth:n.depth}:{},...n.maxDepth!==void 0?{maxDepth:n.maxDepth}:{},...n.phaseRole!==void 0?{phaseRole:n.phaseRole}:{},getEnabledToolNames:()=>o instanceof Ot?o.toolDefs.map(w=>w.name):[],getMcpTools:()=>this.providerOpts.mcpManager?.getMcpTools()??[],getSubagents:()=>this.providerOpts.subagentExecutor?this.providerOpts.subagentExecutor.getSubagentsLite():{active:[],backgroundJobs:[]}});o=this.providerOpts.tools?_c(this.providerOpts.tools,s):this.buildDispatcher(r,{...n.cwd!==void 0?{cwd:n.cwd}:{},...this._sharedReadRoots!==void 0?{readRoots:this._sharedReadRoots}:{},...this._sharedWriteRoots!==void 0?{writeRoots:this._sharedWriteRoots}:{},...n.sessionId!==void 0?{sessionId:n.sessionId}:{},...n.parentSessionId!==void 0?{parentSessionId:n.parentSessionId}:{},...n.subagentId!==void 0?{subagentId:n.subagentId}:{},...n.subagentToolOutputCapBytes!==void 0?{subagentToolOutputCapBytes:n.subagentToolOutputCapBytes}:{},...n.traceWriter!==void 0?{traceWriter:n.traceWriter}:{},runtimeStateSource:s,...n.isSkillDispatch?{isSkillDispatch:!0}:{},...n.isNonInteractive?{isNonInteractive:!0}:{},...n.hookRegistry!==void 0?{hookRegistry:n.hookRegistry}:{},...n.planExitControls!==void 0?{planExitControls:n.planExitControls}:{}});let a=Rd({sessionId:n.sessionId,resume:n.resume,depth:n.depth,parentSessionId:n.parentSessionId,surface:this.providerOpts.surface??"cli",memoized:this._mintedSessionId});this._mintedSessionId=a.memoized;let l={};a.id!==void 0&&(l.sessionIdOverride=a.id);let c=n.openaiBaseUrl??this.providerOpts.baseURL;c!==void 0&&(l.baseURL=c),l.toolDispatcher=o,l.onPermissionMode=w=>{this._currentPermissionMode=w},this.providerOpts.mcpManager!==void 0&&(l.mcpManager=this.providerOpts.mcpManager),this._presenceSessionId=Ad({depth:n.depth,parentSessionId:n.parentSessionId,sessionId:a.id,currentPresenceSessionId:this._presenceSessionId,runtimeStateSource:s,surface:this.providerOpts.surface??"cli",cwd:n.cwd,providerName:eT,model:i});let d=Ac({cwd:n.cwd??process.cwd(),...n.sessionId!==void 0?{sessionId:n.sessionId}:{},surface:this.providerOpts.surface??"cli",...n.depth!==void 0?{depth:n.depth}:{},...n.maxDepth!==void 0?{maxDepth:n.maxDepth}:{},workspace:s.getWorkspace()}),u=Pf(n.isSkillDispatch),m=Mf(this.providerOpts.readOnlyMemory),f=this.providerOpts.skillExecutor?ig(void 0,{...typeof n.cwd=="string"&&n.cwd.length>0?{cwd:n.cwd}:{},...typeof n.skillDispatchName=="string"&&n.skillDispatchName.length>0?{excludeName:n.skillDispatchName}:{}}):"",g=typeof n.hotMemory=="string"?n.hotMemory:"",h=typeof n.systemPrompt=="string"?n.systemPrompt:void 0,y=[u];h!==void 0&&h.length>0&&y.push(h),y.push(m),g.length>0&&y.push(g),y.push(d),f.length>0&&y.push(f);let b={...n,systemPrompt:y.join(`
985
+ `+a})}r&&o.push({role:"user",content:Zf});let i=r?void 0:this.activeOpenAITools(),s={controller:t,traceWriter:this.traceWriter,initSessionId:this.initSessionId,currentModel:this.currentModel,isClosed:()=>this.closed};if(this.wireMode==="responses"){let a=this.opts.auth.source==="chatgpt-oauth";if(a&&md(this.currentModel))return yield{type:"error",error:new Error(`Model "${this.currentModel}" can't run on a ChatGPT subscription \u2014 the ChatGPT/Codex backend only supports OpenAI gpt-5.x models. This usually means a subagent or skill requested a Claude model. Pass a gpt-5.x model to it (e.g. model: "gpt-5.5"); for an auto-dispatched agent you can't pass a model to (e.g. git-investigator), set AFK_DEFAULT_SUBAGENT_MODEL to a gpt-5.x id. Or run it on a provider configured with the matching API key.`)},null;let l=Hf({model:this.currentModel,messages:o,activeTools:i,maxOutputTokens:this.opts.config.maxOutputTokens,effort:this.opts.config.effort,isChatGptBackend:a});return yield*qk(s,{createStream:async c=>await this.client.responses.create(l,{signal:c}),translate:(c,d)=>Ff(c,d,this.initSessionId),clarifyError:c=>this.clarifyResponsesError(c,a)})}else{let a=GO({model:this.currentModel,messages:o,activeTools:i,maxOutputTokens:this.opts.config.maxOutputTokens,effort:this.opts.config.effort});return yield*qk(s,{createStream:async l=>await this.client.chat.completions.create(a,{signal:l}),translate:(l,c)=>vO(l,c,this.initSessionId),clarifyError:l=>l instanceof Error?l:new Error(String(l))})}}async*dispatchAndAppend(t,n,r){return yield*QO({state:t,signal:n,vision:r,toolDispatcher:this.toolDispatcher,traceWriter:this.traceWriter,priorTurns:this.priorTurns,sessionId:this.initSessionId,subagentId:this.opts.config.subagentId})}async interrupt(){this.abort.requestAbort("interrupted")}async compact(){return this.compactHistory("manual")}async compactHistory(t){let n=this.priorTurns.length;if(this.opts.auth.apiKey===null)return{compacted:!1,reason:"no-usable-auth",messagesBefore:n,messagesAfter:n};if(this.wireMode==="responses"&&this.responsesCompactionUnavailable){let i=Ca(k.AFK_MICROCOMPACT_TOOL_RESULT_BYTES,k.AFK_MICROCOMPACT_KEEP_LAST),{blocksCleared:s,bytesReclaimed:a}=Fk(this.priorTurns,i);return s>0?{compacted:!1,reason:"microcompacted",messagesBefore:n,messagesAfter:this.priorTurns.length,microcompaction:{blocksCleared:s,bytesReclaimed:a}}:{compacted:!1,reason:"responses-compaction-unavailable",messagesBefore:n,messagesAfter:n}}let r=k.AFK_COMPACT_MODEL??this.currentModel,o=hd(On(this.lastUsage??{}),Di(this.currentModel));return BO({priorTurns:this.priorTurns,usedFraction:o,shrinkAtFraction:NO(),summarize:(i,s)=>this.wireMode==="responses"?this.summarizeViaResponses(i,s,r):Kf({client:this.client,model:r,system:bd,user:vd(i),maxTokens:1024,signal:s}),isClosed:this.closed,isIdle:this.abort.isIdle(),beginAbort:()=>this.abort.begin(),clearAbort:i=>this.abort.clear(i),trigger:t,traceWriter:this.traceWriter})}async summarizeViaResponses(t,n,r){try{return await zO({client:this.client,model:r,system:bd,user:vd(t),isChatGptBackend:this.opts.auth.source==="chatgpt-oauth",maxTokens:1024,signal:n})}catch(o){if(!n.aborted&&VZ(o)){this.responsesCompactionUnavailable=!0;let i=Ed(o);re(this.traceWriter,{phase:"compaction_disabled",metadata:{wire:"responses",reason:"responses-compaction-unavailable",error:o instanceof Error?o.message:String(o),...i!==void 0?{status:i}:{}}})}throw o}}async setModel(t){t!==void 0&&(this.currentModel=Tt(t)??t)}async setPermissionMode(t){this.currentPermissionMode=Nk(t);let n=En(this.currentPermissionMode);this.toolDispatcher?.setAllowAll?.(n),this.onPermissionMode?.(this.currentPermissionMode)}setCwd(t){this.toolDispatcher?.setResolveBase?.(t)}async supportedCommands(){return og()}async supportedModels(){return[{value:"gpt-5.6",displayName:"GPT-5.6 (Sol)",description:"OpenAI flagship \u2014 alias for gpt-5.6-sol"},{value:"gpt-5.6-sol",displayName:"GPT-5.6 Sol",description:"Frontier capability"},{value:"gpt-5.6-terra",displayName:"GPT-5.6 Terra",description:"Balanced intelligence/cost"},{value:"gpt-5.6-luna",displayName:"GPT-5.6 Luna",description:"Fast, high-volume workloads"},{value:"gpt-5.5",displayName:"GPT-5.5",description:"Prior flagship (ChatGPT backend)"},{value:"gpt-4o",displayName:"GPT-4o",description:"OpenAI flagship multimodal"},{value:"gpt-4o-mini",displayName:"GPT-4o mini",description:"Fast/cheap GPT-4o"},{value:"gpt-4.1",displayName:"GPT-4.1",description:"Long-context GPT-4"},{value:"gpt-4.1-mini",displayName:"GPT-4.1 mini",description:"Fast 4.1 variant"},{value:"o1",displayName:"o1",description:"Reasoning model"},{value:"o1-mini",displayName:"o1 mini",description:"Fast reasoning"},{value:"o3-mini",displayName:"o3 mini",description:"Newer reasoning, faster"}]}async supportedAgents(){return[]}async getContextUsage(){let t=this.lastUsage,n=Gt(this.currentModel),r;if(t&&n>0){let s=On(t);r=Math.min(100,Math.max(0,s/n*100))}let{totalTokens:o,apiUsage:i}=fd(t);return{tools:[],agents:[],isAutoCompactEnabled:this.autoCompactThreshold!==void 0,apiUsage:i,totalTokens:o,...r!==void 0?{percentage:r}:{},maxTokens:n}}async mcpServerStatus(){return this.opts.mcpManager?this.opts.mcpManager.getServerStates().map(t=>({name:t.serverName,status:t.status})):[]}async accountInfo(){return{authSource:this.opts.auth.source}}async rewindFiles(t,n){return{canRewind:!1,error:`${zk} provider does not support file checkpoint rewind yet.`}}close(){this.closed=!0,this.abort.requestAbort("closed"),this.abort.markClosed(),U(`\u{1F7E2} ${zk}: closed`)}}});function Yk(){for(let e of Xk)Pc(e)}function YZ(){if(r$)return;r$=!0,o$=()=>Yk(),process.on("exit",o$);let e=process.listenerCount("SIGINT")>0;i$=()=>{Yk(),e||process.exit(130)},process.on("SIGINT",i$);let t=process.listenerCount("SIGTERM")>0;s$=()=>{Yk(),t||process.exit(143)},process.on("SIGTERM",s$)}function a$(e){YZ(),Xk.add(e)}function l$(e){Xk.delete(e)}var Xk,r$,o$,i$,s$,c$=T(()=>{"use strict";ht();Xk=new Set,r$=!1,o$=null,i$=null,s$=null});import{randomUUID as XZ}from"node:crypto";function Qk(e,t){return(e===void 0||e===0)&&t===void 0}function Rd(e){let t=e.sessionId??e.resume;if(t!==void 0)return{id:t,memoized:e.memoized};if(!Qk(e.depth,e.parentSessionId))return{id:void 0,memoized:e.memoized};if(e.surface===void 0||!QZ.has(e.surface))return{id:void 0,memoized:e.memoized};let n=e.memoized??XZ();return{id:n,memoized:n}}function Ad(e){let t=e.sessionId;if(!Qk(e.depth,e.parentSessionId)||t===void 0)return e.currentPresenceSessionId;if(e.currentPresenceSessionId===t)return t;let n=e.currentPresenceSessionId;n!==null&&(U(`\u2691 presence: advertised id changed ${n} \u2192 ${t} \u2014 rewriting`),l$(n),Pc(n));let r=e.runtimeStateSource.getWorkspace();return xS({sessionId:t,surface:e.surface,actor:So(e.depth),cwd:e.cwd??process.cwd(),startedAt:new Date().toISOString(),model:{provider:e.providerName,name:e.model},workspace:r,pid:process.pid}),a$(t),t}var QZ,Zk=T(()=>{"use strict";ht();Oi();ue();c$();QZ=new Set(["cli"])});var eT,qt,ZZ,Cd=T(()=>{"use strict";vm();Em();pa();_m();Js();kk();hi();Wt();Kt();Ek();$n();Jk();Uk();ht();Zk();Ta();Jk();eT="openai-compatible",qt=class{name=eT;providerOpts;memoryStore;schemas;_sharedReadRoots;_sharedWriteRoots;_currentPermissionMode="default";_initialResolveBase;_presenceSessionId=null;_mintedSessionId=null;constructor(t={}){this.providerOpts=t,this.memoryStore=t.memoryStore??new ct;let n=[...Zn];t.subagentExecutor&&n.push(t.subagentExecutor.describeAgentTool?.()??Ht),t.skillExecutor&&n.push(Si),t.composeExecutor&&n.push(vi),t.readOnlyMemory===!0?n.push(ca):n.push(...mo),n.push(xn);for(let r of t.customTools??[])n.some(o=>o.name===r.schema.name)||n.push(r.schema);this.schemas=n}query(t){let n=t.config,r=n.permissionMode??"default";this._currentPermissionMode=r,this.ensureSharedRoots(n.cwd),n.readRoots&&this._sharedReadRoots&&this._sharedReadRoots.length<=1&&(this._sharedReadRoots.length=0,this._sharedReadRoots.push(...n.readRoots)),n.writeRoots&&this._sharedWriteRoots&&this._sharedWriteRoots.length<=1&&(this._sharedWriteRoots.length=0,this._sharedWriteRoots.push(...n.writeRoots));let o,i=typeof n.model=="string"?n.model:String(n.model),s=Cc({surface:this.providerOpts.surface??"cli",getCwd:()=>n.cwd??process.cwd(),modelName:i,providerName:eT,permissionMode:r,...n.sessionId!==void 0?{sessionId:n.sessionId}:{},...n.parentSessionId!==void 0?{parentSessionId:n.parentSessionId}:{},...n.depth!==void 0?{depth:n.depth}:{},...n.maxDepth!==void 0?{maxDepth:n.maxDepth}:{},...n.phaseRole!==void 0?{phaseRole:n.phaseRole}:{},getEnabledToolNames:()=>o instanceof Ot?o.toolDefs.map(w=>w.name):[],getMcpTools:()=>this.providerOpts.mcpManager?.getMcpTools()??[],getSubagents:()=>this.providerOpts.subagentExecutor?this.providerOpts.subagentExecutor.getSubagentsLite():{active:[],backgroundJobs:[]}});o=this.providerOpts.tools?_c(this.providerOpts.tools,s):this.buildDispatcher(r,{...n.cwd!==void 0?{cwd:n.cwd}:{},...this._sharedReadRoots!==void 0?{readRoots:this._sharedReadRoots}:{},...this._sharedWriteRoots!==void 0?{writeRoots:this._sharedWriteRoots}:{},...n.sessionId!==void 0?{sessionId:n.sessionId}:{},...n.parentSessionId!==void 0?{parentSessionId:n.parentSessionId}:{},...n.subagentId!==void 0?{subagentId:n.subagentId}:{},...n.subagentToolOutputCapBytes!==void 0?{subagentToolOutputCapBytes:n.subagentToolOutputCapBytes}:{},...n.traceWriter!==void 0?{traceWriter:n.traceWriter}:{},runtimeStateSource:s,...n.isSkillDispatch?{isSkillDispatch:!0}:{},...n.isNonInteractive?{isNonInteractive:!0}:{},...n.hookRegistry!==void 0?{hookRegistry:n.hookRegistry}:{},...n.planExitControls!==void 0?{planExitControls:n.planExitControls}:{}});let a=Rd({sessionId:n.sessionId,resume:n.resume,depth:n.depth,parentSessionId:n.parentSessionId,surface:this.providerOpts.surface??"cli",memoized:this._mintedSessionId});this._mintedSessionId=a.memoized;let l={};a.id!==void 0&&(l.sessionIdOverride=a.id);let c=n.openaiBaseUrl??this.providerOpts.baseURL;c!==void 0&&(l.baseURL=c),l.toolDispatcher=o,l.onPermissionMode=w=>{this._currentPermissionMode=w},this.providerOpts.mcpManager!==void 0&&(l.mcpManager=this.providerOpts.mcpManager),this._presenceSessionId=Ad({depth:n.depth,parentSessionId:n.parentSessionId,sessionId:a.id,currentPresenceSessionId:this._presenceSessionId,runtimeStateSource:s,surface:this.providerOpts.surface??"cli",cwd:n.cwd,providerName:eT,model:i});let d=Ac({cwd:n.cwd??process.cwd(),...n.sessionId!==void 0?{sessionId:n.sessionId}:{},surface:this.providerOpts.surface??"cli",...n.depth!==void 0?{depth:n.depth}:{},...n.maxDepth!==void 0?{maxDepth:n.maxDepth}:{},workspace:s.getWorkspace()}),u=Pf(n.isSkillDispatch),m=Mf(this.providerOpts.readOnlyMemory),f=this.providerOpts.skillExecutor?ig(void 0,{...typeof n.cwd=="string"&&n.cwd.length>0?{cwd:n.cwd}:{},...typeof n.skillDispatchName=="string"&&n.skillDispatchName.length>0?{excludeName:n.skillDispatchName}:{}}):"",g=typeof n.hotMemory=="string"?n.hotMemory:"",h=typeof n.systemPrompt=="string"?n.systemPrompt:void 0,y=[u];h!==void 0&&h.length>0&&y.push(h),y.push(m),g.length>0&&y.push(g),y.push(d),f.length>0&&y.push(f);let b={...n,systemPrompt:y.join(`
986
986
 
987
987
  `)};return n$(b,t.prompt,l)}buildDispatcher(t,n){let r=_f(t,n.cwd),o=qc(this.memoryStore,void 0,this.providerOpts.surface??"cli");for(let[d,u]of o)this.providerOpts.readOnlyMemory===!0&&d!=="memory_search"||r.set(d,u);n.runtimeStateSource&&r.set("get_runtime_state",Vs(n.runtimeStateSource));for(let d of this.providerOpts.customTools??[])r.has(d.schema.name)||r.set(d.schema.name,d.handler);let i=n.planExitControls;i&&r.set(jt,ym(i));let s=this.providerOpts.mcpManager?this.providerOpts.mcpManager.getMcpTools():[];if(this.providerOpts.mcpManager)for(let[d,u]of this.providerOpts.mcpManager.getMcpHandlers())r.set(d,u);let a=n.isSkillDispatch?this.schemas.filter(d=>d.name!=="ask_question"&&d.name!=="terminal_font_size"):n.isNonInteractive?this.schemas.filter(d=>d.name!=="ask_question"):this.schemas,l={handlers:r,schemas:[...a,...s,...i?[hm]:[]],hookRegistry:Sm(n.hookRegistry,this.providerOpts.hookRegistry)},c=Tm(this.providerOpts.mcpManager?km(this.providerOpts.permissions,this.providerOpts.mcpManager.getMcpToolWireNames()):this.providerOpts.permissions,(this.providerOpts.customTools??[]).map(d=>d.schema.name));return c!==void 0&&(l.permissions=c),this.providerOpts.subagentExecutor!==void 0&&(l.subagentExecutor=this.providerOpts.subagentExecutor),this.providerOpts.skillExecutor!==void 0&&(l.skillExecutor=this.providerOpts.skillExecutor),this.providerOpts.composeExecutor!==void 0&&(l.composeExecutor=this.providerOpts.composeExecutor),this.providerOpts.canUseTool!==void 0&&(l.canUseTool=this.providerOpts.canUseTool),n.cwd!==void 0&&(l.cwd=n.cwd),n.readRoots!==void 0&&(l.readRoots=n.readRoots),n.writeRoots!==void 0&&(l.writeRoots=n.writeRoots),n.sessionId!==void 0&&(l.sessionId=n.sessionId),n.parentSessionId!==void 0&&(l.parentSessionId=n.parentSessionId),n.subagentId!==void 0&&(l.subagentId=n.subagentId),n.subagentToolOutputCapBytes!==void 0&&(l.maxOutputBytes=n.subagentToolOutputCapBytes),n.traceWriter!==void 0&&(l.traceWriter=n.traceWriter),this.providerOpts.readOnlyBash===!0&&(l.readOnlyBash=!0),l.allowAll=En(t),l.sessionGrantManager=this,new Ot(l)}ensureSharedRoots(t){if(!this._sharedReadRoots){let n=t?[t]:[];this._sharedReadRoots=n.slice(),this._sharedWriteRoots=n.slice(),t&&!this._initialResolveBase&&(this._initialResolveBase=t)}}grantManager=new po({getReadRoots:()=>this._sharedReadRoots,getWriteRoots:()=>this._sharedWriteRoots,ensureInitialized:()=>this.ensureSharedRoots(),getProtectedRoot:()=>this._initialResolveBase,getAllowAll:()=>En(this._currentPermissionMode)});addReadRoot(t,n="slash",r){this.grantManager.addReadRoot(t,n,r)}addWriteRoot(t,n="slash",r){this.grantManager.addWriteRoot(t,n,r)}revokeRoot(t,n="slash",r){this.grantManager.revokeRoot(t,n,r)}getGrants(){return this.grantManager.getGrants()}close(){this.memoryStore.close()}async complete(t){let n={model:t.model??"gpt-4o-mini",system:t.system,user:t.user,maxTokens:t.maxTokens??64};t.apiKey!==void 0&&(n.apiKey=t.apiKey);let r=t.baseUrl??this.providerOpts.baseURL;return r!==void 0&&(n.baseURL=r),t.signal&&(n.signal=t.signal),Kf(n)}},ZZ=new qt});function ko(e,t){if(e.has(t))return!0;let n=t.charAt(0).toUpperCase()+t.slice(1);return n!==t&&e.has(n)}function pn(e){return e.startsWith("mcp__")||e.startsWith("MCP__")?"mcp":ko(eee,e)?"read":ko(tee,e)?"write":ko(nee,e)?"shell":ko(To,e)?"subagent":ko(_d,e)?"skill":ko(Id,e)?"dag":ko(ree,e)?"web":oee.has(e)?"browser":ko(iee,e)?"planning":see.has(e)?"schedule":"other"}function nT(e){return aee[e]}var eee,tee,nee,To,_d,Id,ze,ree,oee,iee,see,tT,d$,aee,Bi=T(()=>{"use strict";Vp();eee=new Set(["Read","Glob","Grep","NotebookRead","LS","read_file","glob","grep","list_directory","config_get","memory_search"]),tee=new Set(["Write","Edit","NotebookEdit","MultiEdit","write_file","edit_file","memory_update","procedure_write","terminal_font_size","config_set"]),nee=new Set(["Bash","BashOutput","KillBash","bash"]),To=new Set(["Agent","Task","agent"]),_d=new Set(["Skill","skill"]),Id=new Set(["Compose","compose"]),ze=new Set([...To,...Id,..._d]),ree=new Set(["WebFetch","WebSearch","send_telegram","web_scrape"]),oee=new Set(["browser_open","browser_observe","browser_act","browser_screenshot","browser_extract","browser_close"]),iee=new Set(["TaskCreate","TaskUpdate","TaskList","TaskGet","TaskOutput","TaskStop","EnterPlanMode","ExitPlanMode","ToolSearch"]),see=new Set(["create_schedule","list_schedules","get_schedule_history","cancel_schedule"]);tT=["Read","Glob","Grep","NotebookRead","LS","read_file","glob","grep","list_directory","config_get","memory_search",...nt],d$=[...tT,"web_scrape","agent"];aee={subagent:"subagent",skill:"skill",dag:"dag"}});function sg(e,t){return`Skill tool not available at nesting depth ${e} (max ${t}). ${Eo}`}function u$(e,t){return`Agent tool not available at nesting depth ${e} (max ${t}). ${Eo}`}function p$(e,t){return`Compose tool not available at nesting depth ${e} (max ${t}). ${Eo}`}var Eo,Pd=T(()=>{"use strict";Eo="You are too deeply nested to delegate further \u2014 perform the work inline with your own tools instead of calling skill/agent/compose."});function f$(e){m$.add(e)}function g$(e){return m$.has(e)}var m$,rT=T(()=>{"use strict";m$=new Set});function h$(e){oT.add(e)}function y$(e){oT.delete(e)}function b$(e){iT.add(e)}function w$(e){iT.delete(e)}function S$(e){for(let t of oT)t(e)}function v$(e){for(let t of iT)t(e)}var oT,iT,sT=T(()=>{"use strict";oT=new Set,iT=new Set});function ag(e){return lee.has(e)}function k$(e,t=cee){return e.length<=t?e:e.slice(0,t)+"\u2026"}function Oa(e){return e.surface!==void 0?{origin:wo(e.surface),actor:So(e.depth)}:{}}var lee,cee,aT=T(()=>{"use strict";Oi();lee=new Set(["ask-gate","fanout-pace","right-size-delegation","premise-gate","intent-lock","long-bash-gate","exploration-gate","irreversible-action-gate","safe-destruct","plan-probe"]);cee=240});function T$(e,t,n){let r=n&&n.trim().length>0?n.trim():"(none)";return{content:`${`[Skill "${e}" loaded into your current context \u2014 act on it now]
988
988
  The instructions below are your operating procedure for THIS task. Execute them immediately, in this session, using the tools you already have. This is an instruction set, not reference material: follow it directly \u2014 do not merely summarize or describe it. No sub-agent was forked; you are the one carrying it out.
@@ -1156,7 +1156,7 @@ ${t}`:i,a=new ve({parentAbortSignal:n?.abortSignal,...r?.traceWriter!==void 0?{t
1156
1156
 
1157
1157
  `+e},{role:"assistant",content:Sd}]},countChars:Are};Ire={listToolResults(e){let t=[];for(let n of e){if(n.role!=="user"||!Array.isArray(n.content))continue;let r=n.content;for(let o of r){if(o.type!=="tool_result")continue;let i=o;t.push({byteLength:Cre(i.content),isPlaceholder:_re(i.content),clear(s){i.content=s}})}}return t}}});import{randomUUID as Pre}from"node:crypto";async function tN(e){let{state:t,abort:n,retry:r,initSessionId:o,traceWriter:i}=e,s=t.messages.length;if(t.closed)return{compacted:!1,reason:"session-closed",messagesBefore:s,messagesAfter:s};if(!n.isIdle())return{compacted:!1,reason:"turn-in-flight",messagesBefore:s,messagesAfter:s};let a=Dre(),l=hd(On(t.lastUsage??{}),Di(t.requestedModel)),c=zL(t.messages,a,l,Fre());if(c<0)return eN(t,s,"history-too-short");if(c===0)return eN(t,s,"nothing-to-summarize");let d=t.messages.slice(0,c),u=Nre(),m=JL(d,u,$re),f=n.begin(),g;try{if(f.signal.aborted)return{compacted:!1,reason:"aborted",messagesBefore:s,messagesAfter:s};let w=oo(r.authMode,o,Pre()),S=r.client,v=await Promise.resolve(S.messages.create(m,{headers:w,signal:f.signal}));g=await Bre(v)}catch(w){return f.signal.aborted?{compacted:!1,reason:"aborted",messagesBefore:s,messagesAfter:s}:{compacted:!1,reason:"summarization-failed: "+(w instanceof Error?w.message:String(w)),messagesBefore:s,messagesAfter:s}}finally{n.clear(f)}if(g.trim().length===0)return{compacted:!1,reason:"empty-summary",messagesBefore:s,messagesAfter:s};let h=YL(t.messages,c,g),y=VL(t.messages,c,g);t.messages.splice(0,t.messages.length,...y);let b=t.messages.length;return Np(i,{trigger:"manual",preCompactionMessages:d,summary:g,keptTailCount:s-c,keepLastNConfig:a,messagesBefore:s,messagesAfter:b,tokensSavedEstimate:h}),{compacted:!0,messagesBefore:s,messagesAfter:b,tokensSavedEstimate:h}}function Dre(){let e=k.AFK_COMPACT_KEEP_LAST_TURNS;if(e!==void 0&&e.length>0){let t=Number.parseInt(e,10);if(Number.isFinite(t)&&t>0)return t}return Mre}function Fre(){let e=k.AFK_COMPACT_SHRINK_FRACTION;if(e!==void 0&&e.length>0){let t=Number.parseFloat(e);if(Number.isFinite(t)&&t>0&&t<1)return t}return Ra}function eN(e,t,n){let r=Lre(),{blocksCleared:o,bytesReclaimed:i}=qL(e.messages,r);return o>0?{compacted:!1,reason:"microcompacted",messagesBefore:t,messagesAfter:e.messages.length,microcompaction:{blocksCleared:o,bytesReclaimed:i}}:{compacted:!1,reason:n,messagesBefore:t,messagesAfter:t}}function Lre(){return Ca(k.AFK_MICROCOMPACT_TOOL_RESULT_BYTES,k.AFK_MICROCOMPACT_KEEP_LAST)}function Nre(){let e=k.AFK_COMPACT_MODEL;return e!==void 0&&e.length>0?Tt(e)??e:Ore}async function Bre(e){let t="";for await(let n of e)if(n.type==="content_block_delta"){let r=n.delta;r.type==="text_delta"&&typeof r.text=="string"&&(t+=r.text)}return t}var Mre,Ore,$re,nN=T(()=>{"use strict";ui();ZL();kd();yd();Fi();ye();Tn();G();Mre=2,Ore="claude-haiku-4-5-20251001",$re=1024});function mE(e){if(typeof e=="string")return e;let t=[];for(let n of e)n.type==="text"&&typeof n.text=="string"&&t.push(n.text);return t.join(" ")}function oN(e){return e.role!=="user"?!1:mE(e.content).trim().length>0}function Ure(e){let t=e.replace(/\s+/g," ").trim();return t.length<=rN?t:t.slice(0,rN-1)+"\u2026"}function iN(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];r&&oN(r)&&t.push({turnIndex:n,preview:Ure(mE(r.content))})}return t.reverse()}function sN(e,t){let{state:n,abort:r}=e,o=n.messages.length;if(n.closed)return{rewound:!1,reason:"session-closed",messagesBefore:o,messagesAfter:o};if(!r.isIdle())return{rewound:!1,reason:"turn-in-flight",messagesBefore:o,messagesAfter:o};if(!Number.isInteger(t)||t<0||t>=o)return{rewound:!1,reason:"invalid-target",messagesBefore:o,messagesAfter:o};let i=n.messages[t];if(!i||!oN(i))return{rewound:!1,reason:"invalid-target",messagesBefore:o,messagesAfter:o};let s=mE(i.content);return n.messages.splice(t),Kg(n.messages),{rewound:!0,reloadText:s,messagesBefore:o,messagesAfter:n.messages.length}}var rN,aN=T(()=>{"use strict";nE();rN=72});var lN=T(()=>{"use strict";yd()});import{randomUUID as cN}from"node:crypto";var jre,Xg,dN=T(()=>{"use strict";Js();ui();Kp();T_();E_();P_();hi();Vk();Fi();Tn();nE();nL();Ik();GL();nN();aN();lN();Fe();jre=[{value:"claude-sonnet-5",displayName:"Claude Sonnet 5",description:"Latest balanced Claude \u2014 recommended default"},{value:"claude-opus-5",displayName:"Claude Opus 5",description:"Highest-capability Claude for agentic coding"},{value:"claude-haiku-4-5-20251001",displayName:"Claude Haiku 4.5",description:"Fastest, cheapest Claude"}],Xg=class{initSessionId;promptStream;maxTokens;tools;systemPrefix;thinking;effort;baseUrl;maxToolUseIterations;traceWriter;subagentId;state;abort;retry;cwdDependentsFactory;onPermissionMode;mcpManager;hookRegistry;throttleQueue;constructor(t){this.initSessionId=t.sessionId??cN(),this.promptStream=t.promptStream,this.maxTokens=t.maxTokens,this.tools=t.tools,this.systemPrefix=t.systemPrefix,this.thinking=t.thinking,t.effort!==void 0&&(this.effort=t.effort),t.baseUrl!==void 0&&(this.baseUrl=t.baseUrl),t.maxToolUseIterations!==void 0&&(this.maxToolUseIterations=t.maxToolUseIterations),this.traceWriter=t.traceWriter,t.subagentId!==void 0&&(this.subagentId=t.subagentId),this.cwdDependentsFactory=t.cwdDependentsFactory,this.onPermissionMode=t.onPermissionMode,this.mcpManager=t.mcpManager,t.hookRegistry!==void 0&&(this.hookRegistry=t.hookRegistry),t.throttleQueue!==void 0&&(this.throttleQueue=t.throttleQueue),this.retry=new Vg({client:t.client,authMode:t.authMode,initSessionId:this.initSessionId,...t.baseUrl!==void 0?{baseUrl:t.baseUrl}:{},...t.tokenRefresher?{tokenRefresher:t.tokenRefresher}:{},autoResumeOnUsageLimit:t.autoResumeOnUsageLimit??!0,...t.surface!==void 0?{surface:t.surface}:{}}),this.state=tL({model:t.model,...t.requestedModel!==void 0?{requestedModel:t.requestedModel}:{},permissionMode:t.permissionMode??"default",userSystem:t.userSystem,toolDispatcher:t.toolDispatcher,...t.initialMessages?{initialMessages:t.initialMessages}:{},...t.autoCompactThreshold!==void 0?{autoCompactThreshold:t.autoCompactThreshold}:{}}),this.abort=new xa}async*[Symbol.asyncIterator](){yield{type:"session.init",info:{sessionId:this.initSessionId,model:this.state.currentModel,permissionMode:this.state.currentPermissionMode,cwd:process.cwd(),tools:[],slashCommands:[],skills:[],plugins:[],mcpServers:this.mcpManager?.getServerStates().map(r=>({name:r.serverName,status:r.status}))??[],apiKeySource:this.retry.authMode,version:"anthropic-direct-v1"}};let n=this.promptStream[Symbol.asyncIterator]();try{for(;!this.state.closed;){let r=await Promise.race([n.next(),this.abort.closedPromise]);if(r==="__closed__")break;let o=r;if(o.done)break;let i=o.value,s=this.abort.begin();if(s.signal.aborted){this.abort.clear(s);return}Kg(this.state.messages),this.state.messages.push({role:"user",content:i.content});let a=this.composeSystem(),l=oo(this.retry.authMode,this.initSessionId,cN(),this.effort!==void 0,Wp({...this.baseUrl!==void 0?{baseUrl:this.baseUrl}:{}})),c={client:this.retry.client,messages:this.state.messages,system:a,tools:this.state.currentPermissionMode==="plan"?this.tools:this.tools?.filter(u=>u.name!==jt)??null,toolDispatcher:this.state.toolDispatcher,model:this.state.currentModel,maxTokens:this.maxTokens,headers:l,signal:s.signal,ctx:{sessionId:this.initSessionId},...this.thinking!==void 0?{thinking:this.thinking}:{},...this.effort!==void 0?{effort:this.effort}:{},...this.baseUrl!==void 0?{baseUrl:this.baseUrl}:{},...this.maxToolUseIterations!==void 0?{maxToolUseIterations:this.maxToolUseIterations}:{},...this.traceWriter?{traceWriter:this.traceWriter}:{},...this.subagentId!==void 0?{subagentId:this.subagentId}:{},...this.throttleQueue?{throttleQueue:this.throttleQueue}:{},onUsageProgress:u=>{this.state.lastUsage=u}},d=!1;try{for await(let u of this.retry.turnWithRetries(c,()=>this.state.closed)){if(this.state.closed)return;u.type==="turn.completed"&&(this.state.lastUsage=u.usage,this.abort.clear(s)),(u.type==="turn.completed"||u.type==="error")&&(d=!0),yield u}}catch(u){if(this.state.closed)return;if(s.signal.aborted){this.abort.clear(s),d||(yield this.makeInterruptedTurnEvent());continue}yield{type:"error",error:u instanceof Error?u:new Error(String(u))};return}finally{this.abort.clear(s)}if(this.state.closed)return;if(s.signal.aborted){d||(yield this.makeInterruptedTurnEvent());continue}if(this.state.autoCompactThreshold!==void 0&&!this.state.closed){let u=this.state.lastUsage,m=Di(this.state.requestedModel);if(u!==null&&m>0){let f=On(u);if(gd(f,m,this.state.autoCompactThreshold))try{this.hookRegistry&&await this.hookRegistry.dispatch({event:"PreCompact",sessionId:this.initSessionId,trigger:"auto"}),await this.compact()}catch(g){if(!(g instanceof Ee))throw g}}}}}catch(r){yield{type:"error",error:r instanceof Error?r:new Error(String(r))}}finally{try{await n.return?.()}catch{}}}composeSystem(){this.state.userSystem&&(this.state.userSystem=Mc(this.state.userSystem));let t=this.systemPrefix,n=this.state.userSystem,r=[];t&&t.length>0&&r.push(...t),n&&n.length>0&&r.push({type:"text",text:n});let o=pS(this.state.currentPermissionMode);o!==null&&r.push(o);let i=fS(this.state.currentPermissionMode);return i!==null&&r.push(i),r.length===0?null:xc({baseUrl:this.baseUrl})?S_(r,Rc()):r}async interrupt(){this.abort.requestAbort("interrupted")}makeInterruptedTurnEvent(){return{type:"turn.completed",usage:{stopReason:"interrupted",resultSubtype:"interrupted",isError:!1},sessionId:this.initSessionId}}async setModel(t){t!==void 0&&t.length>0&&(this.state.requestedModel=t,this.state.currentModel=Tt(t)??t)}async setPermissionMode(t){this.state.currentPermissionMode=t;let n=En(t);this.state.toolDispatcher.setAllowAll?.(n),this.onPermissionMode?.(t)}setCwd(t){if(this.state.toolDispatcher.setResolveBase?.(t),!this.cwdDependentsFactory)return;let{userSystem:n,dispatcher:r}=this.cwdDependentsFactory(t);this.state.userSystem=n,this.state.toolDispatcher=r}async supportedCommands(){return og()}async supportedModels(){return jre.map(t=>({...t}))}async supportedAgents(){return[]}async getContextUsage(){let t=this.state.lastUsage,n=Gt(this.state.requestedModel),r;if(t&&n>0){let s=On(t);r=Math.min(100,Math.max(0,s/n*100))}let{totalTokens:o,apiUsage:i}=fd(t);return{tools:[],agents:[],isAutoCompactEnabled:this.state.autoCompactThreshold!==void 0,apiUsage:i,totalTokens:o,...r!==void 0?{percentage:r}:{},maxTokens:n}}async mcpServerStatus(){return this.mcpManager?this.mcpManager.getServerStates().map(t=>({name:t.serverName,status:t.status})):[]}async accountInfo(){return{subscriptionType:this.retry.authMode==="oauth"?"claude-subscription":"api-key"}}async reauth(){return this.retry.forceClientRefresh()}async rewindFiles(t,n){return{canRewind:!1,error:"anthropic-direct provider does not support file checkpoint rewind"}}async compact(){return tN({state:this.state,abort:this.abort,retry:this.retry,initSessionId:this.initSessionId,...this.traceWriter?{traceWriter:this.traceWriter}:{}})}listRewindTargets(){return iN(this.state.messages)}async rewindConversation(t){return sN({state:this.state,abort:this.abort},t)}close(){this.state.closed=!0,this.abort.requestAbort("closed"),this.abort.markClosed()}}});function fE(e,t){let n=dd(t),r=e.maxOutputTokens;if(typeof r=="number"&&Number.isFinite(r)&&r>0){let o=Math.floor(r);if(o>n){let i=`max:${t}:${o}`;return Qg.has(i)||(Qg.add(i),console.warn(`[afk] maxOutputTokens ${o} exceeds the ${t} output ceiling (${n}); clamping to ${n}.`)),n}return o}return n}function uN(e){if(!e||e.length===0)return;let t=[];for(let n of e)n.user.length>0&&t.push({role:"user",content:n.user}),n.assistant.length>0&&t.push({role:"assistant",content:n.assistant});return t.length>0?t:void 0}function gE(e,t,n){switch(e.type){case"adaptive":return{type:"adaptive",display:"summarized"};case"disabled":return{type:"disabled"};case"enabled":{if(typeof n=="string"&&Wre(n))return{type:"adaptive",display:"summarized"};let r=Math.floor(t*Kre),o=Math.max(1024,t-1-r),i=e.budgetTokens!==void 0&&Number.isFinite(e.budgetTokens)?Math.floor(e.budgetTokens):void 0,s=Math.min(Math.max(i??o,1024),o);if(i!==void 0&&i>o){let a=`think:${n??"default"}:${i}:${t}`;Qg.has(a)||(Qg.add(a),console.warn(`[afk] thinking budgetTokens ${i} leaves too little of max_tokens ${t} for the reply; clamping to ${o}.`))}return{type:"enabled",budget_tokens:s,display:"summarized"}}}}function hE(e,t){if(e!==void 0)return e;let n=t.toLowerCase();if(/(claude-)?(opus|sonnet)-(4-[678]|5)/.test(n))return"max"}var Hre,Wre,Qg,Kre,yE=T(()=>{"use strict";Fi();yd();Hre=e=>/opus-4-(7|[89])/.test(e),Wre=e=>Hre(e)||/(claude-)?(opus|sonnet)-5/.test(e),Qg=new Set,Kre=.25});function pN(e,t,n){let r=_f(t,n?.cwd),o=qc(e.memoryStore,void 0,e.surface);for(let[a,l]of o)e.readOnlyMemory&&a!=="memory_search"||r.set(a,l);n?.runtimeStateSource&&r.set("get_runtime_state",Vs(n.runtimeStateSource));for(let a of e.customTools)r.has(a.schema.name)||r.set(a.schema.name,a.handler);if(e.mcpManager){e.getMcpToolsCache()||e.setMcpToolsCache(e.mcpManager.getMcpTools()),e.getMcpHandlersCache()||e.setMcpHandlersCache(e.mcpManager.getMcpHandlers());for(let[a,l]of e.getMcpHandlersCache())r.set(a,l)}let i=e.getMcpToolsCache()??[],s=n?.planExitControls;return s&&r.set(jt,ym(s)),new Ot({handlers:r,sessionGrantManager:e.sessionGrantManager,allowAll:En(t),schemas:[...e.schemas,...i,...s?[hm]:[]],hookRegistry:Sm(n?.hookRegistry,e.hookRegistry),permissions:Tm(e.mcpManager?km(e.permissions,e.mcpManager.getMcpToolWireNames()):e.permissions,e.customTools.map(a=>a.schema.name)),subagentExecutor:e.subagentExecutor,skillExecutor:e.skillExecutor,composeExecutor:e.composeExecutor,...e.canUseTool!==void 0?{canUseTool:e.canUseTool}:{},cwd:n?.cwd,readRoots:n?.readRoots,writeRoots:n?.writeRoots,...n?.env!==void 0?{env:n.env}:{},sessionId:n?.sessionId,parentSessionId:n?.parentSessionId,...n?.subagentId!==void 0?{subagentId:n.subagentId}:{},...n?.subagentToolOutputCapBytes!==void 0?{maxOutputBytes:n.subagentToolOutputCapBytes}:{},...n?.traceWriter?{traceWriter:n.traceWriter}:{},readOnlyBash:e.readOnlyBash})}var mN=T(()=>{"use strict";pa();kk();hi();Kt();ht();vm();Em();Js()});function bE(){return Gre}var Gre,wE=T(()=>{"use strict";Gre=null});function fN(e){let t=typeof e.baseUrl=="string"&&e.baseUrl.length>0,n=t?e.apiKey&&e.apiKey.length>0?e.apiKey:k.AFK_LOCAL_API_KEY||"local":e.apiKey&&e.apiKey.length>0?e.apiKey:k.ANTHROPIC_API_KEY||k.CLAUDE_CODE_OAUTH_TOKEN||"";return{localMode:t,token:n}}var gN=T(()=>{"use strict";G()});function Zg(e,t,n){let r=Ac({cwd:t,...n.sessionId!==void 0?{sessionId:n.sessionId}:{},surface:n.surface,...n.depth!==void 0?{depth:n.depth}:{},...n.maxDepth!==void 0?{maxDepth:n.maxDepth}:{},workspace:n.workspace}),o=[e.toolBase];return e.userSystem&&o.push(e.userSystem),o.push(e.memoryPrompt),e.hotMemory.length>0&&o.push(e.hotMemory),o.push(r),e.manifest.length>0&&o.push(e.manifest),o.join(`
1158
1158
 
1159
- `)}var SE=T(()=>{"use strict";ht()});function hN(e){return t=>{let n=e.getCurrentCwd();if(e.sharedReadRoots&&n!==void 0&&n!==t){let i=e.sharedReadRoots.indexOf(n);i!==-1?e.sharedReadRoots[i]=t:e.sharedReadRoots.includes(t)||e.sharedReadRoots.push(t)}if(e.sharedWriteRoots&&n!==void 0&&n!==t){let i=e.sharedWriteRoots.indexOf(n);i!==-1?e.sharedWriteRoots[i]=t:e.sharedWriteRoots.includes(t)||e.sharedWriteRoots.push(t)}e.setCurrentCwd(t),e.subagentExecutor?.setCwd(t),e.skillExecutor?.setCwd(t),e.composeExecutor?.setCwd(t);let r=Zg(e.stableSystemPrefix,t,{surface:e.surface,sessionId:e.config.sessionId,depth:e.config.depth,maxDepth:e.config.maxDepth,workspace:e.runtimeStateSource.getWorkspace()}),o=e.buildDispatcher(e.getCurrentPermissionMode(),{cwd:t,readRoots:e.sharedReadRoots,writeRoots:e.sharedWriteRoots,...e.config.env!==void 0?{env:e.config.env}:{},sessionId:e.config.sessionId,parentSessionId:e.config.parentSessionId,traceWriter:e.config.traceWriter,runtimeStateSource:e.runtimeStateSource,hookRegistry:e.config.hookRegistry,planExitControls:e.config.planExitControls});return{userSystem:r,dispatcher:o}}}var yN=T(()=>{"use strict";SE()});var bN=T(()=>{"use strict";Zk()});function wN(e){let{config:t,surface:n}=e,r,o=Cc({surface:n,cwd:t.cwd??process.cwd(),modelName:e.model,providerName:e.providerName,permissionMode:e.permissionMode,...t.sessionId!==void 0?{sessionId:t.sessionId}:{},...t.parentSessionId!==void 0?{parentSessionId:t.parentSessionId}:{},...t.depth!==void 0?{depth:t.depth}:{},...t.maxDepth!==void 0?{maxDepth:t.maxDepth}:{},...t.phaseRole!==void 0?{phaseRole:t.phaseRole}:{},getEnabledToolNames:()=>r instanceof Ot?r.toolDefs.map(l=>l.name):[],getMcpTools:e.getMcpTools,getSubagents:e.getSubagents}),i=Rd({sessionId:t.sessionId,resume:t.resume,depth:t.depth,parentSessionId:t.parentSessionId,surface:n,memoized:e.getMintedSessionId()});e.setMintedSessionId(i.memoized),e.setPresenceSessionId(Ad({depth:t.depth,parentSessionId:t.parentSessionId,sessionId:i.id,currentPresenceSessionId:e.getPresenceSessionId(),runtimeStateSource:o,surface:n,cwd:t.cwd,providerName:e.providerName,model:e.model})),r=e.externalTools?_c(e.externalTools,o):e.buildDispatcher(e.permissionMode,{cwd:t.cwd,readRoots:e.sharedReadRoots,writeRoots:e.sharedWriteRoots,...t.env!==void 0?{env:t.env}:{},sessionId:t.sessionId,parentSessionId:t.parentSessionId,...t.subagentId!==void 0?{subagentId:t.subagentId}:{},...t.subagentToolOutputCapBytes!==void 0?{subagentToolOutputCapBytes:t.subagentToolOutputCapBytes}:{},traceWriter:t.traceWriter,runtimeStateSource:o,hookRegistry:t.hookRegistry,planExitControls:t.planExitControls});let s=r instanceof Ot?[...r.toolDefs]:[...Zn,xn],a=t.isSkillDispatch?s.filter(l=>l.name!=="ask_question"&&l.name!=="terminal_font_size"):t.isNonInteractive?s.filter(l=>l.name!=="ask_question"):s;return{queryDispatcher:r,runtimeStateSource:o,toolDefs:a,resolvedSessionId:i.id}}var SN=T(()=>{"use strict";pa();ht();Wt();bN()});function vE(e,t=fetch,n,r){return!e&&!n&&!r?t:async(o,i)=>{let s=await t(o,i);if(r)try{r(s.headers)}catch{}if(qre.has(s.status)){let a=Ni({headers:s.headers});if(n)try{n({status:s.status,...a!==void 0?{retryAfterMs:a}:{}})}catch{}if(e){let l={status:s.status,reason:s.status===429?"rate-limit":"overloaded",source:"sdk-fetch"};a!==void 0&&(l.retryAfterMs=a),re(e,{phase:"rate_limit",...a!==void 0?{durationMs:a}:{},metadata:l})}}return s}}var qre,vN=T(()=>{"use strict";ye();pE();qre=new Set([429,503,529])});var eh,kN=T(()=>{"use strict";eh=class{items=[];waiter=null;attempts=0;push(t){this.attempts+=1;let n={status:t.status,attempt:this.attempts,...t.retryAfterMs!==void 0?{retryAfterMs:t.retryAfterMs}:{}};this.items.push(n);let r=this.waiter;this.waiter=null,r&&r()}takeAll(){return this.items.length===0?[]:this.items.splice(0,this.items.length)}waitForItem(){return this.items.length>0?Promise.resolve():new Promise(t=>{this.waiter=t})}resetAttempts(){this.attempts=0}}});function TN(e){if(e===null)return;let t=Number(e);if(Number.isFinite(t))return Math.min(1,Math.max(0,t))}function EN(e){if(e===null)return;let t=Number(e);if(!(!Number.isFinite(t)||t<0||t>zre))return new Date(t*1e3)}function xN(e){try{let t=TN(e.get("anthropic-ratelimit-unified-5h-utilization")),n=EN(e.get("anthropic-ratelimit-unified-5h-reset")),r=TN(e.get("anthropic-ratelimit-unified-7d-utilization")),o=EN(e.get("anthropic-ratelimit-unified-7d-reset"));return t===void 0&&r===void 0?void 0:{...t!==void 0?{fiveHourUtilization:t}:{},...n!==void 0?{fiveHourResetsAt:n}:{},...r!==void 0?{sevenDayUtilization:r}:{},...o!==void 0?{sevenDayResetsAt:o}:{},observedAt:new Date}}catch{return}}function th(e){return e===void 0?void 0:Math.round(e*100)}function RN(e){let t=kE,n=t===void 0||th(t.fiveHourUtilization)!==th(e.fiveHourUtilization)||th(t.sevenDayUtilization)!==th(e.sevenDayUtilization);if(kE=e,!!n)for(let r of TE)try{r()}catch{}}function nh(){return kE}function AN(e){return TE.add(e),()=>{TE.delete(e)}}var zre,kE,TE,Xd=T(()=>{"use strict";zre=Date.UTC(2100,0,1)/1e3;TE=new Set});function CN(e){let{config:t,localMode:n,authMode:r,factory:o}=e,i=!n&&t.traceWriter?new eh:void 0,s=n?void 0:u=>{let m=xN(u);m!==void 0&&RN(m)},a=vc(e.token,r,t.baseUrl,n?void 0:vE(t.traceWriter,void 0,i?u=>i.push(u):void 0,s)),l=o?o(a):e.createClient(a),c=n?null:p_(r),d;return r==="oauth"&&!n&&(d=async()=>{let u=await MS();if(!u)return null;let m=vc(u,"oauth",t.baseUrl,vE(t.traceWriter,void 0,i?f=>i.push(f):void 0,s));return o?o(m):e.createClient(m)}),{client:l,throttleQueue:i,systemPrefix:c,...d!==void 0?{tokenRefresher:d}:{}}}var _N=T(()=>{"use strict";ui();vN();kN();Xd();fi()});function IN(e){let{config:t,cwd:n}=e,r=e.hasSkillExecutor?ig(void 0,{cwd:n,...typeof t.skillDispatchName=="string"&&t.skillDispatchName.length>0?{excludeName:t.skillDispatchName}:{}}):"",o=Pf(t.isSkillDispatch),i=Mf(e.readOnlyMemory),s={surface:e.surface,sessionId:t.sessionId,depth:t.depth,maxDepth:t.maxDepth,workspace:e.runtimeStateSource.getWorkspace()},a={toolBase:o,memoryPrompt:i,hotMemory:t.hotMemory??"",manifest:r,userSystem:e.userSystem};return{stableSystemPrefix:a,toolSystemAppend:Zg(a,n,s)}}var PN=T(()=>{"use strict";$n();Ek();SE()});import Jre from"@anthropic-ai/sdk";function Vre(e){if(e===void 0)return null;if(typeof e=="string")return e.length>0?e:null;if(typeof e=="object"&&e!==null&&"append"in e){let t=e.append;return t&&t.length>0?t:null}return null}var rh,MN,Ye,Yre,Ki=T(()=>{"use strict";ui();Hp();dN();Js();yE();yE();_m();mN();wE();wE();Wt();Tn();Kt();ai();G();gN();ht();yN();SN();_N();PN();rh="anthropic-direct",MN="claude-sonnet-5",Ye=class{name=rh;externalTools;memoryStore;providerFactory;skillExecutor;schemas;hookRegistry;permissions;canUseTool;subagentExecutor;composeExecutor;surface;declaredSurface;readOnlyMemory;readOnlyBash;mcpManager;customTools;_sharedReadRoots;_sharedWriteRoots;_currentPermissionMode="default";_initialResolveBase;_currentCwd;_mcpToolsCache=null;_mcpHandlersCache=null;_presenceSessionId=null;_mintedSessionId=null;constructor(t={}){let n=[...Zn];t.subagentExecutor&&n.push(t.subagentExecutor.describeAgentTool?.()??Ht),t.skillExecutor&&n.push(Si),t.composeExecutor&&n.push(vi),t.readOnlyMemory===!0?n.push(ca):n.push(...mo),n.push(xn);for(let r of t.customTools??[])n.some(o=>o.name===r.schema.name)||n.push(r.schema);if(this.memoryStore=t.memoryStore??new ct,this.externalTools=t.tools,this.skillExecutor=t.skillExecutor,this.schemas=n,this.hookRegistry=t.hookRegistry,this.permissions=t.permissions,this.canUseTool=t.canUseTool,this.subagentExecutor=t.subagentExecutor,this.composeExecutor=t.composeExecutor,this.surface=t.surface??"cli",this.declaredSurface=t.surface,this.readOnlyMemory=t.readOnlyMemory===!0,this.readOnlyBash=t.readOnlyBash===!0,this.customTools=t.customTools??[],this.mcpManager=t.mcpManager,t.mcpManager){let r=t.mcpManager.onToolsRefreshed;t.mcpManager.onToolsRefreshed=o=>{this._mcpToolsCache=null,this._mcpHandlersCache=null,r?.(o)}}t.clientFactory&&(this.providerFactory=t.clientFactory)}buildDispatcher(t,n){return pN({memoryStore:this.memoryStore,surface:this.surface,readOnlyMemory:this.readOnlyMemory,readOnlyBash:this.readOnlyBash,customTools:this.customTools,mcpManager:this.mcpManager,schemas:this.schemas,hookRegistry:this.hookRegistry,permissions:this.permissions,canUseTool:this.canUseTool,subagentExecutor:this.subagentExecutor,skillExecutor:this.skillExecutor,composeExecutor:this.composeExecutor,sessionGrantManager:this,getMcpToolsCache:()=>this._mcpToolsCache,setMcpToolsCache:r=>{this._mcpToolsCache=r},getMcpHandlersCache:()=>this._mcpHandlersCache,setMcpHandlersCache:r=>{this._mcpHandlersCache=r}},t,n)}close(){this.memoryStore.close()}async complete(t){let n=t.apiKey&&t.apiKey.length>0?t.apiKey:k.ANTHROPIC_API_KEY||k.CLAUDE_CODE_OAUTH_TOKEN||"";if(!n)throw new Error(`${rh} complete() requires an API key or OAuth token (config apiKey, ANTHROPIC_API_KEY, or CLAUDE_CODE_OAUTH_TOKEN)`);let r={token:n,model:t.model??MN,system:t.system,user:t.user,maxTokens:t.maxTokens??64};t.signal&&(r.signal=t.signal);let o=this.providerFactory??bE();return o&&(r.clientFactory=o),zs(r)}ensureSharedRoots(t){if(!this._sharedReadRoots){let n=t?[t]:[];this._sharedReadRoots=n.slice(),this._sharedWriteRoots=n.slice(),t&&!this._initialResolveBase&&(this._initialResolveBase=t),t&&!this._currentCwd&&(this._currentCwd=t)}}grantManager=new po({getReadRoots:()=>this._sharedReadRoots,getWriteRoots:()=>this._sharedWriteRoots,ensureInitialized:()=>this.ensureSharedRoots(),getProtectedRoot:()=>this._initialResolveBase,getAllowAll:()=>En(this._currentPermissionMode)});addReadRoot(t,n="slash",r){this.grantManager.addReadRoot(t,n,r)}addWriteRoot(t,n="slash",r){this.grantManager.addWriteRoot(t,n,r)}revokeRoot(t,n="slash",r){this.grantManager.revokeRoot(t,n,r)}getGrants(){return this.grantManager.getGrants()}query(t){let n=t.config,{localMode:r,token:o}=fN(n);if(!o||o.length===0)throw new Error(`${rh} provider requires config.apiKey (resolved from ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN)`);let i=Bp(o),{client:s,throttleQueue:a,systemPrefix:l,tokenRefresher:c}=CN({config:n,token:o,authMode:i,localMode:r,factory:this.providerFactory??bE(),createClient:C=>new Jre(C)}),d=Vre(n.systemPrompt),u=typeof n.model=="string"&&n.model.length>0?Tt(n.model)??n.model:MN,m=fE(n,u),f=n.permissionMode??"default";this._currentPermissionMode=f,this.ensureSharedRoots(n.cwd),n.readRoots&&this._sharedReadRoots&&this._sharedReadRoots.length<=1&&(this._sharedReadRoots.length=0,this._sharedReadRoots.push(...n.readRoots)),n.writeRoots&&this._sharedWriteRoots&&this._sharedWriteRoots.length<=1&&(this._sharedWriteRoots.length=0,this._sharedWriteRoots.push(...n.writeRoots));let{queryDispatcher:g,runtimeStateSource:h,toolDefs:y,resolvedSessionId:b}=wN({config:n,model:u,permissionMode:f,surface:this.surface,providerName:rh,externalTools:this.externalTools,sharedReadRoots:this._sharedReadRoots,sharedWriteRoots:this._sharedWriteRoots,getMcpTools:()=>this.mcpManager?.getMcpTools()??[],getSubagents:()=>this.subagentExecutor?this.subagentExecutor.getSubagentsLite():{active:[],backgroundJobs:[]},getMintedSessionId:()=>this._mintedSessionId,setMintedSessionId:C=>{this._mintedSessionId=C},getPresenceSessionId:()=>this._presenceSessionId,setPresenceSessionId:C=>{this._presenceSessionId=C},buildDispatcher:(C,R)=>this.buildDispatcher(C,R)}),w=n.cwd||process.cwd(),{stableSystemPrefix:S,toolSystemAppend:v}=IN({config:n,cwd:w,surface:this.surface,readOnlyMemory:this.readOnlyMemory,hasSkillExecutor:!!this.skillExecutor,runtimeStateSource:h,userSystem:d});r_({prompt:t.prompt,options:{model:u,maxTokens:m,system:v},provenance:{systemPrompt:{source:n.systemPromptSource??"none",shape:typeof n.systemPrompt=="string"?"string":Array.isArray(n.systemPrompt)?"string[]":n.systemPrompt!=null?"preset":"undefined",...typeof n.systemPrompt=="string"?{length:n.systemPrompt.length}:{}},...n.apiKey?{apiKey:{source:"config"}}:{}}});let E=b,A=uN(n.resumeHistory),O=this.externalTools?void 0:hN({stableSystemPrefix:S,config:n,surface:this.surface,runtimeStateSource:h,getCurrentCwd:()=>this._currentCwd,setCurrentCwd:C=>{this._currentCwd=C},getCurrentPermissionMode:()=>this._currentPermissionMode,sharedReadRoots:this._sharedReadRoots,sharedWriteRoots:this._sharedWriteRoots,subagentExecutor:this.subagentExecutor,skillExecutor:this.skillExecutor,composeExecutor:this.composeExecutor,buildDispatcher:(C,R)=>this.buildDispatcher(C,R)}),_=hE(n.effort,u);return new Xg({client:s,authMode:r?"api-key":i,promptStream:t.prompt,toolDispatcher:g,...E!==void 0?{sessionId:E}:{},...A!==void 0?{initialMessages:A}:{},model:u,requestedModel:typeof n.model=="string"&&n.model.length>0?n.model:u,...n.permissionMode!==void 0?{permissionMode:n.permissionMode}:{},maxTokens:m,tools:y,userSystem:v,systemPrefix:l,tokenRefresher:c,...n.thinking!==void 0?{thinking:gE(n.thinking,m,u)}:{},..._!==void 0?{effort:_}:{},...r?{baseUrl:n.baseUrl}:{},...n.traceWriter?{traceWriter:n.traceWriter}:{},...n.subagentId!==void 0?{subagentId:n.subagentId}:{},...n.autoResumeOnUsageLimit!==void 0?{autoResumeOnUsageLimit:n.autoResumeOnUsageLimit}:{},surface:this.declaredSurface,...n.maxToolUseIterations!==void 0?{maxToolUseIterations:n.maxToolUseIterations}:{},...O!==void 0?{cwdDependentsFactory:O}:{},onPermissionMode:C=>{this._currentPermissionMode=C},...this.mcpManager!==void 0?{mcpManager:this.mcpManager}:{},...Ea(n.autoCompact)!==void 0?{autoCompactThreshold:Ea(n.autoCompact)}:{},...n.hookRegistry!==void 0?{hookRegistry:n.hookRegistry}:{},...a!==void 0?{throttleQueue:a}:{}})}};Yre=new Ye});function Qre(e){if(!e)return;let t=e.trim().toLowerCase();if(t){if(t==="anthropic"||t==="anthropic-direct")return"anthropic-direct";if(t==="openai"||t==="openai-compatible"||t==="openai-codex")return"openai-compatible"}}function se(e,t){let n=t?.explicit??k.AFK_PROVIDER,r=t?.openaiBaseUrl??k.AFK_OPENAI_BASE_URL,o=Qre(n);if(o)return o;let i=mi(e,t?.slots);if(i.provider==="anthropic")return"anthropic-direct";if(i.provider==="openai"||i.provider==="chatgpt-oauth")return"openai-compatible";let s=i.id.trim().toLowerCase();return s&&(Xre.has(s)||s.startsWith("claude-")||s.startsWith("claude_")||s.startsWith("local-")||s.startsWith("local_"))?"anthropic-direct":s&&(s.startsWith("gpt-")||s.startsWith("gpt_")||$i(s)||s.startsWith("codex-")||s.startsWith("codex_")||s==="codex"||s.startsWith("deepseek-")||s.startsWith("deepseek_")||s.startsWith("mistral-")||s.startsWith("mistral_")||s.startsWith("mixtral-")||s.startsWith("mixtral_")||s.startsWith("llama-")||s.startsWith("llama_")||s.startsWith("qwen-")||s.startsWith("qwen_")||s.includes("/"))||i.baseUrl&&i.baseUrl.trim()||r&&r.trim()?"openai-compatible":"anthropic-direct"}function oh(e,t,n){let r=se(e,t),o=n?.customTools,i=n?.canUseTool,s={...o!==void 0&&o.length>0?{customTools:o}:{},...i!==void 0?{canUseTool:i}:{}};switch(r){case"openai-compatible":case"openai-codex":return new qt(s);default:return new Ye(s)}}var Xre,je=T(()=>{"use strict";Ki();Cd();Tn();At();Sa();G();Ki();Cd();Xre=new Set([...Object.keys(uS),"auto"])});var za,EE=T(()=>{"use strict";za=class{pendingResolve=null;bufferedMessages=[];getSessionId;constructor(t){this.getSessionId=t}pushUserMessage(t){if(this.pendingResolve){let n=this.pendingResolve;this.pendingResolve=null;let r=this.getSessionId();n({content:t,...r!==void 0?{sessionId:r}:{}});return}this.bufferedMessages.push(t)}createIterable(){let t=this;return{[Symbol.asyncIterator](){return{next(){if(t.bufferedMessages.length>0){let n=t.bufferedMessages.shift(),r=t.getSessionId();return Promise.resolve({value:{content:n,...r!==void 0?{sessionId:r}:{}},done:!1})}return new Promise(n=>{t.pendingResolve=r=>n({value:r,done:!1})})},return(){return Promise.resolve({value:void 0,done:!0})}}}}}}});function ih(e,t){let n=t??Ks(),r=Gs(e.model,n);if(!r){e.forceChatgptOAuth=!1;return}let o=n[r],i=o.provider==="anthropic"?"anthropic-direct":o.provider==="openai"||o.provider==="chatgpt-oauth"?"openai-compatible":se(e.model,t?{slots:t}:void 0);e.forceChatgptOAuth=o.provider==="chatgpt-oauth",o.apiKey!==void 0?e.apiKey=o.apiKey:(i==="openai-compatible"||o.baseUrl!==void 0)&&(e.apiKey=void 0),o.baseUrl!==void 0&&(i==="openai-compatible"?e.openaiBaseUrl=o.baseUrl:e.baseUrl=o.baseUrl)}var xE=T(()=>{"use strict";je();At()});function Zre(e){return typeof e=="string"?e:e.map(t=>{let n=t;return n.type==="text"&&typeof n.text=="string"?n.text:""}).filter(t=>t.length>0).join(`
1159
+ `)}var SE=T(()=>{"use strict";ht()});function hN(e){return t=>{let n=e.getCurrentCwd();if(e.sharedReadRoots&&n!==void 0&&n!==t){let i=e.sharedReadRoots.indexOf(n);i!==-1?e.sharedReadRoots[i]=t:e.sharedReadRoots.includes(t)||e.sharedReadRoots.push(t)}if(e.sharedWriteRoots&&n!==void 0&&n!==t){let i=e.sharedWriteRoots.indexOf(n);i!==-1?e.sharedWriteRoots[i]=t:e.sharedWriteRoots.includes(t)||e.sharedWriteRoots.push(t)}e.setCurrentCwd(t),e.subagentExecutor?.setCwd(t),e.skillExecutor?.setCwd(t),e.composeExecutor?.setCwd(t);let r=Zg(e.stableSystemPrefix,t,{surface:e.surface,sessionId:e.config.sessionId,depth:e.config.depth,maxDepth:e.config.maxDepth,workspace:e.runtimeStateSource.getWorkspace()}),o=e.buildDispatcher(e.getCurrentPermissionMode(),{cwd:t,readRoots:e.sharedReadRoots,writeRoots:e.sharedWriteRoots,...e.config.env!==void 0?{env:e.config.env}:{},sessionId:e.config.sessionId,parentSessionId:e.config.parentSessionId,traceWriter:e.config.traceWriter,runtimeStateSource:e.runtimeStateSource,hookRegistry:e.config.hookRegistry,planExitControls:e.config.planExitControls});return{userSystem:r,dispatcher:o}}}var yN=T(()=>{"use strict";SE()});var bN=T(()=>{"use strict";Zk()});function wN(e){let{config:t,surface:n}=e,r,o=Cc({surface:n,getCwd:e.getCwd,modelName:e.model,providerName:e.providerName,permissionMode:e.permissionMode,...t.sessionId!==void 0?{sessionId:t.sessionId}:{},...t.parentSessionId!==void 0?{parentSessionId:t.parentSessionId}:{},...t.depth!==void 0?{depth:t.depth}:{},...t.maxDepth!==void 0?{maxDepth:t.maxDepth}:{},...t.phaseRole!==void 0?{phaseRole:t.phaseRole}:{},getEnabledToolNames:()=>r instanceof Ot?r.toolDefs.map(l=>l.name):[],getMcpTools:e.getMcpTools,getSubagents:e.getSubagents}),i=Rd({sessionId:t.sessionId,resume:t.resume,depth:t.depth,parentSessionId:t.parentSessionId,surface:n,memoized:e.getMintedSessionId()});e.setMintedSessionId(i.memoized),e.setPresenceSessionId(Ad({depth:t.depth,parentSessionId:t.parentSessionId,sessionId:i.id,currentPresenceSessionId:e.getPresenceSessionId(),runtimeStateSource:o,surface:n,cwd:t.cwd,providerName:e.providerName,model:e.model})),r=e.externalTools?_c(e.externalTools,o):e.buildDispatcher(e.permissionMode,{cwd:t.cwd,readRoots:e.sharedReadRoots,writeRoots:e.sharedWriteRoots,...t.env!==void 0?{env:t.env}:{},sessionId:t.sessionId,parentSessionId:t.parentSessionId,...t.subagentId!==void 0?{subagentId:t.subagentId}:{},...t.subagentToolOutputCapBytes!==void 0?{subagentToolOutputCapBytes:t.subagentToolOutputCapBytes}:{},traceWriter:t.traceWriter,runtimeStateSource:o,hookRegistry:t.hookRegistry,planExitControls:t.planExitControls});let s=r instanceof Ot?[...r.toolDefs]:[...Zn,xn],a=t.isSkillDispatch?s.filter(l=>l.name!=="ask_question"&&l.name!=="terminal_font_size"):t.isNonInteractive?s.filter(l=>l.name!=="ask_question"):s;return{queryDispatcher:r,runtimeStateSource:o,toolDefs:a,resolvedSessionId:i.id}}var SN=T(()=>{"use strict";pa();ht();Wt();bN()});function vE(e,t=fetch,n,r){return!e&&!n&&!r?t:async(o,i)=>{let s=await t(o,i);if(r)try{r(s.headers)}catch{}if(qre.has(s.status)){let a=Ni({headers:s.headers});if(n)try{n({status:s.status,...a!==void 0?{retryAfterMs:a}:{}})}catch{}if(e){let l={status:s.status,reason:s.status===429?"rate-limit":"overloaded",source:"sdk-fetch"};a!==void 0&&(l.retryAfterMs=a),re(e,{phase:"rate_limit",...a!==void 0?{durationMs:a}:{},metadata:l})}}return s}}var qre,vN=T(()=>{"use strict";ye();pE();qre=new Set([429,503,529])});var eh,kN=T(()=>{"use strict";eh=class{items=[];waiter=null;attempts=0;push(t){this.attempts+=1;let n={status:t.status,attempt:this.attempts,...t.retryAfterMs!==void 0?{retryAfterMs:t.retryAfterMs}:{}};this.items.push(n);let r=this.waiter;this.waiter=null,r&&r()}takeAll(){return this.items.length===0?[]:this.items.splice(0,this.items.length)}waitForItem(){return this.items.length>0?Promise.resolve():new Promise(t=>{this.waiter=t})}resetAttempts(){this.attempts=0}}});function TN(e){if(e===null)return;let t=Number(e);if(Number.isFinite(t))return Math.min(1,Math.max(0,t))}function EN(e){if(e===null)return;let t=Number(e);if(!(!Number.isFinite(t)||t<0||t>zre))return new Date(t*1e3)}function xN(e){try{let t=TN(e.get("anthropic-ratelimit-unified-5h-utilization")),n=EN(e.get("anthropic-ratelimit-unified-5h-reset")),r=TN(e.get("anthropic-ratelimit-unified-7d-utilization")),o=EN(e.get("anthropic-ratelimit-unified-7d-reset"));return t===void 0&&r===void 0?void 0:{...t!==void 0?{fiveHourUtilization:t}:{},...n!==void 0?{fiveHourResetsAt:n}:{},...r!==void 0?{sevenDayUtilization:r}:{},...o!==void 0?{sevenDayResetsAt:o}:{},observedAt:new Date}}catch{return}}function th(e){return e===void 0?void 0:Math.round(e*100)}function RN(e){let t=kE,n=t===void 0||th(t.fiveHourUtilization)!==th(e.fiveHourUtilization)||th(t.sevenDayUtilization)!==th(e.sevenDayUtilization);if(kE=e,!!n)for(let r of TE)try{r()}catch{}}function nh(){return kE}function AN(e){return TE.add(e),()=>{TE.delete(e)}}var zre,kE,TE,Xd=T(()=>{"use strict";zre=Date.UTC(2100,0,1)/1e3;TE=new Set});function CN(e){let{config:t,localMode:n,authMode:r,factory:o}=e,i=!n&&t.traceWriter?new eh:void 0,s=n?void 0:u=>{let m=xN(u);m!==void 0&&RN(m)},a=vc(e.token,r,t.baseUrl,n?void 0:vE(t.traceWriter,void 0,i?u=>i.push(u):void 0,s)),l=o?o(a):e.createClient(a),c=n?null:p_(r),d;return r==="oauth"&&!n&&(d=async()=>{let u=await MS();if(!u)return null;let m=vc(u,"oauth",t.baseUrl,vE(t.traceWriter,void 0,i?f=>i.push(f):void 0,s));return o?o(m):e.createClient(m)}),{client:l,throttleQueue:i,systemPrefix:c,...d!==void 0?{tokenRefresher:d}:{}}}var _N=T(()=>{"use strict";ui();vN();kN();Xd();fi()});function IN(e){let{config:t,cwd:n}=e,r=e.hasSkillExecutor?ig(void 0,{cwd:n,...typeof t.skillDispatchName=="string"&&t.skillDispatchName.length>0?{excludeName:t.skillDispatchName}:{}}):"",o=Pf(t.isSkillDispatch),i=Mf(e.readOnlyMemory),s={surface:e.surface,sessionId:t.sessionId,depth:t.depth,maxDepth:t.maxDepth,workspace:e.runtimeStateSource.getWorkspace()},a={toolBase:o,memoryPrompt:i,hotMemory:t.hotMemory??"",manifest:r,userSystem:e.userSystem};return{stableSystemPrefix:a,toolSystemAppend:Zg(a,n,s)}}var PN=T(()=>{"use strict";$n();Ek();SE()});import Jre from"@anthropic-ai/sdk";function Vre(e){if(e===void 0)return null;if(typeof e=="string")return e.length>0?e:null;if(typeof e=="object"&&e!==null&&"append"in e){let t=e.append;return t&&t.length>0?t:null}return null}var rh,MN,Ye,Yre,Ki=T(()=>{"use strict";ui();Hp();dN();Js();yE();yE();_m();mN();wE();wE();Wt();Tn();Kt();ai();G();gN();ht();yN();SN();_N();PN();rh="anthropic-direct",MN="claude-sonnet-5",Ye=class{name=rh;externalTools;memoryStore;providerFactory;skillExecutor;schemas;hookRegistry;permissions;canUseTool;subagentExecutor;composeExecutor;surface;declaredSurface;readOnlyMemory;readOnlyBash;mcpManager;customTools;_sharedReadRoots;_sharedWriteRoots;_currentPermissionMode="default";_initialResolveBase;_currentCwd;_mcpToolsCache=null;_mcpHandlersCache=null;_presenceSessionId=null;_mintedSessionId=null;constructor(t={}){let n=[...Zn];t.subagentExecutor&&n.push(t.subagentExecutor.describeAgentTool?.()??Ht),t.skillExecutor&&n.push(Si),t.composeExecutor&&n.push(vi),t.readOnlyMemory===!0?n.push(ca):n.push(...mo),n.push(xn);for(let r of t.customTools??[])n.some(o=>o.name===r.schema.name)||n.push(r.schema);if(this.memoryStore=t.memoryStore??new ct,this.externalTools=t.tools,this.skillExecutor=t.skillExecutor,this.schemas=n,this.hookRegistry=t.hookRegistry,this.permissions=t.permissions,this.canUseTool=t.canUseTool,this.subagentExecutor=t.subagentExecutor,this.composeExecutor=t.composeExecutor,this.surface=t.surface??"cli",this.declaredSurface=t.surface,this.readOnlyMemory=t.readOnlyMemory===!0,this.readOnlyBash=t.readOnlyBash===!0,this.customTools=t.customTools??[],this.mcpManager=t.mcpManager,t.mcpManager){let r=t.mcpManager.onToolsRefreshed;t.mcpManager.onToolsRefreshed=o=>{this._mcpToolsCache=null,this._mcpHandlersCache=null,r?.(o)}}t.clientFactory&&(this.providerFactory=t.clientFactory)}buildDispatcher(t,n){return pN({memoryStore:this.memoryStore,surface:this.surface,readOnlyMemory:this.readOnlyMemory,readOnlyBash:this.readOnlyBash,customTools:this.customTools,mcpManager:this.mcpManager,schemas:this.schemas,hookRegistry:this.hookRegistry,permissions:this.permissions,canUseTool:this.canUseTool,subagentExecutor:this.subagentExecutor,skillExecutor:this.skillExecutor,composeExecutor:this.composeExecutor,sessionGrantManager:this,getMcpToolsCache:()=>this._mcpToolsCache,setMcpToolsCache:r=>{this._mcpToolsCache=r},getMcpHandlersCache:()=>this._mcpHandlersCache,setMcpHandlersCache:r=>{this._mcpHandlersCache=r}},t,n)}close(){this.memoryStore.close()}async complete(t){let n=t.apiKey&&t.apiKey.length>0?t.apiKey:k.ANTHROPIC_API_KEY||k.CLAUDE_CODE_OAUTH_TOKEN||"";if(!n)throw new Error(`${rh} complete() requires an API key or OAuth token (config apiKey, ANTHROPIC_API_KEY, or CLAUDE_CODE_OAUTH_TOKEN)`);let r={token:n,model:t.model??MN,system:t.system,user:t.user,maxTokens:t.maxTokens??64};t.signal&&(r.signal=t.signal);let o=this.providerFactory??bE();return o&&(r.clientFactory=o),zs(r)}ensureSharedRoots(t){if(!this._sharedReadRoots){let n=t?[t]:[];this._sharedReadRoots=n.slice(),this._sharedWriteRoots=n.slice(),t&&!this._initialResolveBase&&(this._initialResolveBase=t),t&&!this._currentCwd&&(this._currentCwd=t)}}grantManager=new po({getReadRoots:()=>this._sharedReadRoots,getWriteRoots:()=>this._sharedWriteRoots,ensureInitialized:()=>this.ensureSharedRoots(),getProtectedRoot:()=>this._initialResolveBase,getAllowAll:()=>En(this._currentPermissionMode)});addReadRoot(t,n="slash",r){this.grantManager.addReadRoot(t,n,r)}addWriteRoot(t,n="slash",r){this.grantManager.addWriteRoot(t,n,r)}revokeRoot(t,n="slash",r){this.grantManager.revokeRoot(t,n,r)}getGrants(){return this.grantManager.getGrants()}query(t){let n=t.config,{localMode:r,token:o}=fN(n);if(!o||o.length===0)throw new Error(`${rh} provider requires config.apiKey (resolved from ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN)`);let i=Bp(o),{client:s,throttleQueue:a,systemPrefix:l,tokenRefresher:c}=CN({config:n,token:o,authMode:i,localMode:r,factory:this.providerFactory??bE(),createClient:C=>new Jre(C)}),d=Vre(n.systemPrompt),u=typeof n.model=="string"&&n.model.length>0?Tt(n.model)??n.model:MN,m=fE(n,u),f=n.permissionMode??"default";this._currentPermissionMode=f,this.ensureSharedRoots(n.cwd),n.cwd&&(this._currentCwd=n.cwd),n.readRoots&&this._sharedReadRoots&&this._sharedReadRoots.length<=1&&(this._sharedReadRoots.length=0,this._sharedReadRoots.push(...n.readRoots)),n.writeRoots&&this._sharedWriteRoots&&this._sharedWriteRoots.length<=1&&(this._sharedWriteRoots.length=0,this._sharedWriteRoots.push(...n.writeRoots));let{queryDispatcher:g,runtimeStateSource:h,toolDefs:y,resolvedSessionId:b}=wN({config:n,model:u,permissionMode:f,surface:this.surface,providerName:rh,externalTools:this.externalTools,sharedReadRoots:this._sharedReadRoots,sharedWriteRoots:this._sharedWriteRoots,getCwd:()=>this._currentCwd||n.cwd||process.cwd(),getMcpTools:()=>this.mcpManager?.getMcpTools()??[],getSubagents:()=>this.subagentExecutor?this.subagentExecutor.getSubagentsLite():{active:[],backgroundJobs:[]},getMintedSessionId:()=>this._mintedSessionId,setMintedSessionId:C=>{this._mintedSessionId=C},getPresenceSessionId:()=>this._presenceSessionId,setPresenceSessionId:C=>{this._presenceSessionId=C},buildDispatcher:(C,R)=>this.buildDispatcher(C,R)}),w=n.cwd||process.cwd(),{stableSystemPrefix:S,toolSystemAppend:v}=IN({config:n,cwd:w,surface:this.surface,readOnlyMemory:this.readOnlyMemory,hasSkillExecutor:!!this.skillExecutor,runtimeStateSource:h,userSystem:d});r_({prompt:t.prompt,options:{model:u,maxTokens:m,system:v},provenance:{systemPrompt:{source:n.systemPromptSource??"none",shape:typeof n.systemPrompt=="string"?"string":Array.isArray(n.systemPrompt)?"string[]":n.systemPrompt!=null?"preset":"undefined",...typeof n.systemPrompt=="string"?{length:n.systemPrompt.length}:{}},...n.apiKey?{apiKey:{source:"config"}}:{}}});let E=b,A=uN(n.resumeHistory),O=this.externalTools?void 0:hN({stableSystemPrefix:S,config:n,surface:this.surface,runtimeStateSource:h,getCurrentCwd:()=>this._currentCwd,setCurrentCwd:C=>{this._currentCwd=C},getCurrentPermissionMode:()=>this._currentPermissionMode,sharedReadRoots:this._sharedReadRoots,sharedWriteRoots:this._sharedWriteRoots,subagentExecutor:this.subagentExecutor,skillExecutor:this.skillExecutor,composeExecutor:this.composeExecutor,buildDispatcher:(C,R)=>this.buildDispatcher(C,R)}),_=hE(n.effort,u);return new Xg({client:s,authMode:r?"api-key":i,promptStream:t.prompt,toolDispatcher:g,...E!==void 0?{sessionId:E}:{},...A!==void 0?{initialMessages:A}:{},model:u,requestedModel:typeof n.model=="string"&&n.model.length>0?n.model:u,...n.permissionMode!==void 0?{permissionMode:n.permissionMode}:{},maxTokens:m,tools:y,userSystem:v,systemPrefix:l,tokenRefresher:c,...n.thinking!==void 0?{thinking:gE(n.thinking,m,u)}:{},..._!==void 0?{effort:_}:{},...r?{baseUrl:n.baseUrl}:{},...n.traceWriter?{traceWriter:n.traceWriter}:{},...n.subagentId!==void 0?{subagentId:n.subagentId}:{},...n.autoResumeOnUsageLimit!==void 0?{autoResumeOnUsageLimit:n.autoResumeOnUsageLimit}:{},surface:this.declaredSurface,...n.maxToolUseIterations!==void 0?{maxToolUseIterations:n.maxToolUseIterations}:{},...O!==void 0?{cwdDependentsFactory:O}:{},onPermissionMode:C=>{this._currentPermissionMode=C},...this.mcpManager!==void 0?{mcpManager:this.mcpManager}:{},...Ea(n.autoCompact)!==void 0?{autoCompactThreshold:Ea(n.autoCompact)}:{},...n.hookRegistry!==void 0?{hookRegistry:n.hookRegistry}:{},...a!==void 0?{throttleQueue:a}:{}})}};Yre=new Ye});function Qre(e){if(!e)return;let t=e.trim().toLowerCase();if(t){if(t==="anthropic"||t==="anthropic-direct")return"anthropic-direct";if(t==="openai"||t==="openai-compatible"||t==="openai-codex")return"openai-compatible"}}function se(e,t){let n=t?.explicit??k.AFK_PROVIDER,r=t?.openaiBaseUrl??k.AFK_OPENAI_BASE_URL,o=Qre(n);if(o)return o;let i=mi(e,t?.slots);if(i.provider==="anthropic")return"anthropic-direct";if(i.provider==="openai"||i.provider==="chatgpt-oauth")return"openai-compatible";let s=i.id.trim().toLowerCase();return s&&(Xre.has(s)||s.startsWith("claude-")||s.startsWith("claude_")||s.startsWith("local-")||s.startsWith("local_"))?"anthropic-direct":s&&(s.startsWith("gpt-")||s.startsWith("gpt_")||$i(s)||s.startsWith("codex-")||s.startsWith("codex_")||s==="codex"||s.startsWith("deepseek-")||s.startsWith("deepseek_")||s.startsWith("mistral-")||s.startsWith("mistral_")||s.startsWith("mixtral-")||s.startsWith("mixtral_")||s.startsWith("llama-")||s.startsWith("llama_")||s.startsWith("qwen-")||s.startsWith("qwen_")||s.includes("/"))||i.baseUrl&&i.baseUrl.trim()||r&&r.trim()?"openai-compatible":"anthropic-direct"}function oh(e,t,n){let r=se(e,t),o=n?.customTools,i=n?.canUseTool,s={...o!==void 0&&o.length>0?{customTools:o}:{},...i!==void 0?{canUseTool:i}:{}};switch(r){case"openai-compatible":case"openai-codex":return new qt(s);default:return new Ye(s)}}var Xre,je=T(()=>{"use strict";Ki();Cd();Tn();At();Sa();G();Ki();Cd();Xre=new Set([...Object.keys(uS),"auto"])});var za,EE=T(()=>{"use strict";za=class{pendingResolve=null;bufferedMessages=[];getSessionId;constructor(t){this.getSessionId=t}pushUserMessage(t){if(this.pendingResolve){let n=this.pendingResolve;this.pendingResolve=null;let r=this.getSessionId();n({content:t,...r!==void 0?{sessionId:r}:{}});return}this.bufferedMessages.push(t)}createIterable(){let t=this;return{[Symbol.asyncIterator](){return{next(){if(t.bufferedMessages.length>0){let n=t.bufferedMessages.shift(),r=t.getSessionId();return Promise.resolve({value:{content:n,...r!==void 0?{sessionId:r}:{}},done:!1})}return new Promise(n=>{t.pendingResolve=r=>n({value:r,done:!1})})},return(){return Promise.resolve({value:void 0,done:!0})}}}}}}});function ih(e,t){let n=t??Ks(),r=Gs(e.model,n);if(!r){e.forceChatgptOAuth=!1;return}let o=n[r],i=o.provider==="anthropic"?"anthropic-direct":o.provider==="openai"||o.provider==="chatgpt-oauth"?"openai-compatible":se(e.model,t?{slots:t}:void 0);e.forceChatgptOAuth=o.provider==="chatgpt-oauth",o.apiKey!==void 0?e.apiKey=o.apiKey:(i==="openai-compatible"||o.baseUrl!==void 0)&&(e.apiKey=void 0),o.baseUrl!==void 0&&(i==="openai-compatible"?e.openaiBaseUrl=o.baseUrl:e.baseUrl=o.baseUrl)}var xE=T(()=>{"use strict";je();At()});function Zre(e){return typeof e=="string"?e:e.map(t=>{let n=t;return n.type==="text"&&typeof n.text=="string"?n.text:""}).filter(t=>t.length>0).join(`
1160
1160
  `)}function eoe(e,t,n,r){let o=n&&n!==r?` (provider ${n} \u2192 ${r})`:"";return`[System context \u2014 not from the user. Your model was switched at the start of this turn: ${e} \u2192 ${t}${o}. Earlier turns in this conversation were produced by ${e}; the history carried across the switch is plain text only, so any prior tool calls and extended reasoning are now prose \u2014 treat their structure as lost, not authoritative.]`}function toe(e,t){return typeof e=="string"?e.length>0?`${t}
1161
1161
 
1162
1162
  ${e}`:t:[{type:"text",text:t},...e]}var sh,ON=T(()=>{"use strict";EE();xE();ue();sh=class{outerIterator;baseConfig;deps;currentModel;currentPermissionMode;currentCwd;startupFamily;active;activeModel;closed=!1;shadowHistory;pendingUserText;pendingAssistantText="";lastSessionId;constructor(t,n){this.outerIterator=t.prompt[Symbol.asyncIterator](),this.baseConfig=t.config,this.deps=n,this.currentModel=typeof t.config.model=="string"?t.config.model:void 0,this.currentPermissionMode=t.config.permissionMode,this.currentCwd=t.config.cwd,this.startupFamily=n.providerNameForModel(this.currentModel),this.shadowHistory=[...t.config.resumeHistory??[]]}resolveInner(t){let n=this.deps.resolveProvider(t),r={...this.baseConfig};r.model=t??this.baseConfig.model;let o=n.name===this.startupFamily&&this.baseConfig.apiKey!==void 0?this.baseConfig.apiKey:this.deps.resolveApiKey(t);o!==void 0?r.apiKey=o:delete r.apiKey,ih(r);let i=[n.name,r.baseUrl??"",r.openaiBaseUrl??"",r.apiKey??"",r.forceChatgptOAuth?"chatgpt-oauth":""].join("\0");return{provider:n,innerConfig:r,signature:i}}buildInner(t,n){let{provider:r,innerConfig:o,signature:i}=this.resolveInner(t),s=new za(()=>this.lastSessionId);this.currentPermissionMode!==void 0&&(o.permissionMode=this.currentPermissionMode),this.currentCwd!==void 0&&(o.cwd=this.currentCwd),n&&(o.resumeHistory=[...this.shadowHistory]);let a=r.query({prompt:s.createIterable(),config:o});return{family:r.name,signature:i,query:a,iterator:a[Symbol.asyncIterator](),input:s}}async closeActive(){let t=this.active;if(t){this.active=void 0;try{await t.iterator.return?.(void 0)}catch{}try{await t.query.close()}catch{}}}observeEvent(t){t.type==="assistant.message"&&(this.pendingAssistantText+=(this.pendingAssistantText?`
@@ -1776,7 +1776,7 @@ ${v}
1776
1776
  ${E}`})}return{fileBlocks:l,warnings:c}}async function h2(e,t,n,r,o="summary",i,s){let a=_1(e.text,e.attachments);r.onUserMessage&&await Promise.resolve(r.onUserMessage(a)).catch(()=>{}),r.setInFlight(!0),hl(process.stdout,cu(process.cwd(),!0));let l="",c=0,d=!1,u=!1,m=!1,f=!1,g=!1,h,y=!1,b=!1,w={abort:null},S=0,v=3e3,E=[],A=new Map,O=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,_=()=>{let L=r.subagentControl;L?.hasPromotableForeground()&&L.promoteActiveForeground().then(W=>{for(let P of W)(i??{fn:console.log}).fn(p.dim(` \u2192 subagent backgrounded as ${P.jobId}: ${P.label}`))}).catch(()=>{})},C=r.getCompositor?r.getCompositor():null,R=()=>new Ml({out:Ol(i),thinkingMode:o,...O?{activeSkillName:O}:{},onCancel:()=>{t.interrupt().catch(L=>{Le()&&console.error(" "+p.error("session.interrupt() failed:"),L)})},...r.subagentControl?{onBackground:_}:{},...s?.history?{history:s.history}:{},...s?.autocompleteState?{autocompleteState:s.autocompleteState}:{},...s?.promptText!==void 0?{promptText:s.promptText}:{},...r.scrollRegion?{scrollRegion:r.scrollRegion}:{},...C?{compositor:C}:{},...r.onStageChange?{onStageChange:r.onStageChange}:{}}),I=R(),F=async()=>{if(!f){f=!0;try{await I.dispose()}catch{}}},K=async()=>{await I.arm();let L=I.getCompositor();if(i&&L){let W=L;i.fn=P=>W.commitAbove(P),i.suppressSubagentCompletion=!0}r.setActiveCompositor?.(L),r.setInterruptNotifier?.(W=>I.setInterrupting(W)),r.rearmStatus?.()};try{C?C.commitAbove(""):console.log(),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{y=!0,I.setSoftStopping(!0),t.interrupt().catch($=>{Le()&&console.error(" "+p.error("soft-stop session.interrupt() failed:"),$)});let M=r.subagentControl;M?.hasActiveForeground()&&M.cancelActiveForeground().catch($=>{Le()&&console.error(" "+p.error("soft-stop cancelActiveForeground() failed:"),$)})}),r.setPauseInterruptHandler&&r.setPauseInterruptHandler(()=>{b=!0,t.interrupt().catch(M=>{Le()&&console.error(" "+p.error("pause-interrupt session.interrupt() failed:"),M)})}),await K(),r.setBackgroundHandler&&r.subagentControl&&r.setBackgroundHandler(_);let{fileBlocks:L,warnings:W}=g2(e.text,{rootDir:process.cwd()});for(let M of W)(i??{fn:console.log}).fn(p.dim(` @-file: ${M}`));let P=L.length>0||e.attachments.length>0?f2(e.text,e.attachments,void 0,L):e.text,B=t.sendMessageStream(P);if(await sa((M,$)=>{I.process(M,$)},async()=>{for await(let M of B){if(y||b)break;if(M.type==="chunk"&&M.chunk.type==="content"?(l=d?p2(l,M.chunk.content):l+M.chunk.content,d=!1,u=!0):M.type==="message"&&!u&&(l=M.message.content),M.type==="stream_retry"&&(l=l.slice(0,c),d=l.length>0),M.type==="chunk"&&M.chunk.type==="tool_use_detail"){let $=M.chunk,j={toolName:$.toolName,toolUseId:$.toolUseId,input:$.toolInput,...$.toolInputRaw!==void 0&&{inputRaw:$.toolInputRaw}};A.set($.toolUseId,j),E.push(j)}else if(M.type==="chunk"&&M.chunk.type==="tool_result"){let $=M.chunk;c=l.length,d=!0;let j=A.get($.toolUseId);if(j&&(j.result=$.content,j.isError=$.isError,A.delete($.toolUseId)),r.onContextProgress){let X=Date.now();if(X-S>=v){S=X;try{let H=r.onContextProgress();H instanceof Promise&&await H}catch(H){Le()&&console.error(" "+p.error("onContextProgress (status refresh) failed:"),H)}}}}if(M.type==="paused"){if(r.setPausedState?.(!0),await F(),C&&M.autoResume===!0){let $=new AbortController;w.abort=$;let j=M.resetsAt?M.resetsAt.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}):null,X=j?`Keep waiting \u2014 auto-resumes at ${j}`:"Keep waiting \u2014 auto-resume in progress",H="Switch model / provider (type /model after)",Q="Stop waiting",ae=[p.warning(" \u23F3 Usage limit reached.")+(j?p.dim(` Auto-resumes at ${j}.`):""),p.dim(" Tip: run `claude login` in another terminal to switch account \u2014 this turn resumes on it automatically."),""];wn(C,{header:ae,options:[X,H,Q],signal:$.signal,initialIndex:0}).then(z=>{if(w.abort=null,!z)return;let ee=z[0];ee===void 0||ee===X||(b=!0,ee===H&&(i??{fn:console.log}).fn(p.dim(" Hint: type /model <name> to switch, then send your message again.")),t.interrupt().catch(oe=>{Le()&&console.error(" "+p.error("picker pause-interrupt session.interrupt() failed:"),oe)}))}).catch(z=>{Le()&&console.error(" "+p.error("picker promise rejected:"),z)})}else(i??{fn:console.log}).fn(ZC({reason:M.reason,...M.resetsAt!==void 0?{resetsAt:M.resetsAt}:{},...M.accountId!==void 0?{accountId:M.accountId}:{},...M.autoResume!==void 0?{autoResume:M.autoResume}:{}}));continue}if(M.type==="resumed"){r.setPausedState?.(!1),w.abort?.abort(),w.abort=null;let $=M.hotSwapped&&M.accountId?`\u25B6 Resumed on ${M.accountId}`:"\u25B6 Resumed";l="",c=0,d=!1,u=!1,E.length=0,A.clear(),g=!1,h=void 0,m=!1,I=R(),f=!1,await K(),(i??{fn:console.log}).fn(p.success($));continue}if(M.type==="error"){await F(),Hs(Fs(M.error)),m=!0;continue}I.process(M),M.type==="done"&&(g=!0,h=M.metadata)}}),await F(),y){let M=i?i.fn:console.log,$=C?C.getPendingCount():0,j=$>0?` \xB7 ${$} queued`:"";M(p.warning(`\u23F8 Stopped${j} \u2014 work so far kept.`)+p.dim(" Send a message to continue.")),M("")}if(b){let M=i?i.fn:console.log;M(p.dim("\u25B6 Ending wait \u2014 running your next command\u2026")),M("")}if(g&&!y&&!b){Xi(n,a,l,h,E),r.onTurnComplete&&await r.onTurnComplete(a,l).catch(()=>{}),gl(process.stdout),vj(process.stdout,"afk: turn complete");let M=j=>{i?i.fn(j):console.log(j)},$=$b(l);if($){M(m2($)),M("");let j=XW(E);if(r.onTerminalState)try{r.onTerminalState($,{doneHasCorroboratingEvidence:j})}catch{}if(n.permissionMode==="autonomous"){let X=$.kind==="done"&&Uc().verifyDone===!0&&!j;ZW($,void 0,{unverified:X})}}if(whe(h,n,M),r.onAfterTurn){let j=r.onAfterTurn();j instanceof Promise&&await j.catch(()=>{})}}}catch(L){await F(),m||Hs(Fs(L))}finally{await F(),hl(process.stdout,cu(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),w.abort?.abort(),w.abort=null,r.setInFlight(!1),r.rearmStatus?.()}}function bhe(e,t){let n=Math.round(e*100),r=ge(t);if(e>=1){let o=Math.round((e-1)*t);return{tier:"over",text:` context OVER ${Math.round(t/1e3)}k tok by ~${ge(o)} tok \u2014 model output may be silently truncated`}}return e>=.95?{tier:"near",text:` context ${n}% used of ${r} \u2014 near limit; output may soon truncate (consider /clear or a fresh session)`}:e>=.8?{tier:"caution",text:` context ${n}% used of ${r} \u2014 approaching limit`}:e>.5?{tier:"normal",text:` context ${n}% used of ${r}`}:{tier:"quiet",text:null}}function whe(e,t,n=console.log){if(!e)return;let r=[];e.durationMs&&r.push(Re(e.durationMs)),e.totalCostUsd!==void 0&&r.push(it(e.totalCostUsd));let o=Number(e.usage?.input_tokens??0),i=Number(e.usage?.output_tokens??0);o+i>0&&r.push(ge(o+i)+" tok"),r.length>0&&n(p.dim(" \u25E6 "+r.join(" \xB7 ")));let s=Vx(t),a=Gt(t.model),l=bhe(s,a);if(l.text!==null){let d=l.tier==="over"||l.tier==="near"?p.error:l.tier==="caution"?p.warning:p.dim;n(d(l.text))}let c=u2(Uy(nh()),new Date,{autoResume:xI()});if(c.text!==null){let d=c.tier==="over"||c.tier==="near"?p.error:c.tier==="caution"?p.warning:p.dim;n(d(c.text))}n("")}var She=5e3,vhe=3,khe="[auto-resume] The background task above has finished. Continue the work it was dispatched for.";async function The(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(p.warning("\u26A0 ")+"first-turn hook failed: "+(r instanceof Error?r.message:String(r)))}}}async function y2(e,t,n,r,o,i,s,a){let{contextPane:l,loopStageBar:c,verdictLedger:d,shellPassthrough:u,bgResultNotifier:m}=s,f=null,g=[];e.session.current.waitForInitialization().then(async O=>{Le()&&(f=nb(O)),await Pu(e.session.current),Le()&&(g=qx())}).catch(()=>{});let h=e.initialInput!==void 0?{text:e.initialInput,attachments:[]}:void 0,y,b=!1,w=!1,S,v,E,A=0;for(m.onInjectable=()=>{A>=vhe||!o.isAwaitingInput()||!o.bufferIsEmpty()||(A++,gl(process.stdout),h={text:khe,attachments:[]},o.abortPendingRead())};;){if(f&&(e.replRenderer.writeLine(f),e.replRenderer.writeLine(""),f=null),g.length>0){for(let P of g)e.replRenderer.writeLine(P);e.replRenderer.writeLine(""),g=[]}let O=u.drainNotifications();for(let{job:P,result:B}of O){let N=B.errorReason===void 0?"\u2713":"\u2717",M=B.errorReason==="abort"?"killed":B.errorReason==="timeout"?"timed out":B.errorReason==="signal-killed"?"killed by signal":`exit ${B.exitCode??0}`,$=Math.max(0,Math.round(B.durationMs/100)/10);e.replRenderer.writeLine(p.dim(` ${N} [${P.id}] ${M} \xB7 ${$}s \xB7 `)+P.command)}let _=m.drainNotifications();for(let{job:P}of _){let B=P.status==="completed"?"\u2713":P.status==="failed"?"\u2717":"\u2298",N=P.endedAt!==void 0?Math.max(0,Math.round((P.endedAt-P.startedAt)/100)/10):0,M=P.label.length>60?`${P.label.slice(0,60)}\u2026`:P.label;e.replRenderer.writeLine(p.dim(` ${B} [${P.jobId}] subagent ${P.status} \xB7 ${N}s \xB7 `)+M)}let C=l.renderIfChanged(e.stats.sessionId);if(C.length>0){for(let P of C)e.replRenderer.writeLine(P);e.replRenderer.writeLine("")}let R,I;if(h===void 0){let P=await e.session.current.takePendingPlanExitSeed();P!==void 0&&(e.stats.permissionMode=P.mode,h={text:P.message,attachments:[]})}if(h!==void 0){let P=h;h=void 0;let B=Bl(e.stats.permissionMode),N=ns({buffer:P.text,promptText:B,isTTY:!!process.stdout.isTTY,attachmentSummary:Tl([...P.attachments])});e.replRenderer.writeLine(N),R=P.text.trim(),I=P.attachments}else{let P=y;y=void 0;let B=await o.readLine({promptFn:()=>Bl(e.stats.permissionMode),...P!==void 0?{initialBuffer:P}:{},onSigint:r,onShiftTab:()=>{Ib(e.slashCtx).catch(()=>{}),e.statusLine.rearm()}});R=B.text.trim(),I=B.attachments}if(!R&&I.length===0)continue;if(R.startsWith("!")){let P=/^(0|false|off|no)$/i.test(k.AFK_SHELL_PASSTHROUGH??"");if(e.options.shellPassthrough!==!1&&!P&&(b||(b=!0,e.replRenderer.writeLine(p.dim(" \u2139 ! prefix shells out. Pass --no-shell-passthrough (or set AFK_SHELL_PASSTHROUGH=0) to send ! text to the model instead."))),await u.dispatch(R))){e.statusLine.rearm();continue}}let F=!1;if(R.startsWith("/")){let P=await Ej(R,e.slashCtx,I);if(P.handled){if(P.result==="exit"){await e.resolveWorktreeDisposition?.(!0),e.rl.close();return}if((R==="/clear"||R.startsWith("/clear "))&&(await t.rotateOnClear(),e.replRenderer.writeLine(p.dim(` transcript: ${t.path()}`)),d.reset(),S=void 0),P.result!==null&&typeof P.result=="object"&&"kind"in P.result&&P.result.kind==="submit"){h={text:P.result.message,attachments:I??[]},e.statusLine.rearm();continue}if(P.result!==null&&typeof P.result=="object"&&"kind"in P.result&&P.result.kind==="prefill"){y=P.result.message,e.statusLine.rearm();continue}e.statusLine.rearm();continue}F=!0}a.push(R),await The(e,R);let K=R;if(F){let P=ix(R);if(P){let B=P.name.replace(/^\//,"").split(":").pop()??"";if(B&&Hx(B)){let N={skillName:B,rawArgs:P.args,source:"plugin",capabilities:{compose:!0,subagents:!0}},M=e.session.current.sessionId,$=ms(M),j=Date.now();U(`[afk trace] preflight.start commandName=${B}`);let X=!1,H=await ps(N,{cwd:e.stats.cwd??process.cwd(),artifactDir:$},Q=>{Le()&&e.replRenderer.writeLine(p.warning(`\u26A0 preflight(${B}) failed: `)+(Q instanceof Error?Q.message:String(Q)))});X=H!==null,U(`[afk trace] preflight.end commandName=${B} durationMs=${Date.now()-j} success=${X}`),K=Kx(H?.manifestBlock,R)}}}let L=u.drainInjections();L.length>0&&(K=L+K);let W=m.drainInjections();if(W.length>0&&(K=W+K),S!==void 0&&(K=S+`
1777
1777
 
1778
1778
  `+K,S=void 0),e.hookRegistry)try{let P={event:"UserPromptSubmit",prompt:K,sessionId:e.stats.sessionId},B=await e.hookRegistry.dispatch(P);B.injectContext&&(K=B.injectContext+K)}catch(P){if(P instanceof Ee){e.replRenderer.writeLine(p.warning("\u2298 Turn blocked by hook")+(P.reason?p.dim(`: ${Rr(P.reason)}`):"")),e.statusLine.rearm();continue}if(P instanceof Xn){e.replRenderer.writeLine(p.warning("\u2298 Turn blocked by hook")+p.dim(`: handler timed out after ${P.timeoutMs}ms`)),e.statusLine.rearm();continue}throw P}if(v=void 0,E=void 0,await h2({text:K,attachments:I},e.session.current,e.stats,{setInFlight(P){n.turnInFlight=P},...e.subagentControl?{subagentControl:e.subagentControl}:{},async onUserMessage(P){await t.appendUser(P)},async onTurnComplete(P,B){if(await t.appendTurn(P,B),e.stats.sessionId)try{Fo(e.stats)}catch(N){w||(w=!0,e.replRenderer.writeLine(p.warning("\u26A0 ")+"session autosave failed \u2014 this conversation may not be resumable: "+(N instanceof Error?N.message:String(N))))}},async onAfterTurn(){await e.contextSampler.onTurn(e.stats.totalTurns),await e.gitStatusSampler.refresh(),e.statusLine.rearm(),c?.repaint("observing")},rearmStatus:()=>e.statusLine.rearm(),onTerminalState:(P,B)=>{d?.push(P),v=P.kind,E=B?.doneHasCorroboratingEvidence},setActiveCompositor:P=>{n.activeCompositor=P},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(Un(e.stats,e.contextSampler,e.gitStatusSampler))},...c?{onStageChange:P=>c.repaint(P)}:{}},e.stats.thinkingUi??e.options.thinkingUi,e.completionWriter,o.toRunTurnRefs(Bl(e.stats.permissionMode))),e.hookRegistry)try{let P=await e.hookRegistry.dispatch({event:"Stop",sessionId:e.stats.sessionId,...v!==void 0?{terminalState:v}:{},...E!==void 0?{doneHasCorroboratingEvidence:E}:{}},void 0,She);P.injectContext&&P.injectContext.trim().length>0&&(S=P.injectContext)}catch(P){if(P instanceof at)throw P;P instanceof Xn?(U("[stop hook] handler timed out"),e.completionWriter.fn(p.dim(" [stop hook] timed out"))):P instanceof Ee?e.completionWriter.fn(p.dim(` [stop hook] blocked: ${Rr(P.reason??"no reason given")}`)):U("[stop hook] unexpected error: "+String(P))}}}function Ehe(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 b2(e,t,n,r){let o=await JG(),i=new _b({rl:e.rl,history:o,statusLine:e.statusLine}),s=Ehe(k.AFK_SUGGEST_GHOST,e.suggestGhostConfig),a;try{let{installSoftStop:l}=await ZG(e,i,n,t,r,s,{getLoopStageBar:()=>a?.loopStageBar});a=c2(e,n),await y2(e,t,n,r,i,l,a,o),await e.resolveWorktreeDisposition?.(!0)}finally{n.tryAbortShellForeground=null,a?.shellPassthrough.drainOnExit(),a?.bgResultNotifier.dispose(),a?.loopStageBar.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)}}Dc();ha();import{execFile as xhe}from"node:child_process";import{dirname as Rhe,isAbsolute as Ahe,resolve as Che}from"node:path";import{promisify as _he}from"node:util";var w2=_he(xhe),Ihe=3e3,Phe=new Set(["empty","orphaned-dir","orphaned-registration","dead-owner"]);async function Mhe(){let t=(await w2("git",["rev-parse","--git-common-dir"])).stdout.trim();if(!t)throw new Error("Not in a git repository.");let n=Ahe(t)?t:Che(process.cwd(),t);return Rhe(n)}async function S2(e){if(e?.disabled)return{ran:!1,removedCount:0,skippedReason:"disabled"};let t;try{t=await Mhe()}catch{return{ran:!1,removedCount:0,skippedReason:"not-in-repo"}}let n,r=new Promise(o=>{n=setTimeout(()=>o("timeout"),Ihe)});try{let o=cn({execFile:w2,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=>Phe.has(c.verdict)&&s.removed.includes(c.path)).length}}catch{return{ran:!1,removedCount:0,skippedReason:"error"}}finally{n&&clearTimeout(n)}}Hp();Dc();import{promises as Ohe}from"node:fs";import{dirname as $he,join as T2}from"node:path";import{randomBytes as Dhe}from"node:crypto";var Fhe=["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(`
1779
- `),v2=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,HR=30,Lhe=1024,Nhe=8e3,Bhe="haiku";async function Uhe(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=Khe(n,Lhe),o=new AbortController,i=setTimeout(()=>o.abort(),t.timeoutMs??Nhe),s=t.signal?Ghe([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,s):a=await zs({token:t.token,model:t.model??Bhe,system:Fhe,user:r,maxTokens:32,signal:s})}catch(u){let m=u instanceof Error?u.message:String(u);return t.onSkip?.("slug-generator-error",m.slice(0,200)),null}finally{clearTimeout(i)}let l=jhe(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=$he(t.worktreePath);return await Hhe(l,c)}function jhe(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(v2.test(t)&&t.length<=HR)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>HR)break;o=s}return v2.test(o)?o:null}async function Hhe(e,t){if(!await Whe(T2(t,e)))return e;let n=Dhe(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,HR-5)}-${n}`}async function Whe(e){try{return await Ohe.access(e),!0}catch{return!1}}function Khe(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 Ghe(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 E2(e){let t,n,r=T2(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await Uhe(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=`${lm(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return k2(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 k2(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 k2(e,t){e&&e.setCwd(t),qhe(t)}function qhe(e){try{process.chdir(e)}catch{}}_t();q();import{spawn as R2}from"child_process";import{existsSync as A2,mkdirSync as Xhe,readFileSync as C2,unlinkSync as x2,writeFileSync as _2}from"fs";import{get as Qhe}from"https";import{join as I2}from"path";import{readFileSync as zhe}from"fs";import{dirname as Jhe,join as Vhe}from"path";import{fileURLToPath as Yhe}from"url";function mr(){try{return"5.87.0"}catch{}try{let e=Jhe(Yhe(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(zhe(Vhe(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}G();var Zhe=64*1024,eye=10800*1e3,tye=800,nye=3600*1e3,rye="update-check.json",oye="pending-update.json";function WR(){return I2(Os(),rye)}function Hu(){return I2(Os(),oye)}function KR(){let e=Os();A2(e)||Xhe(e,{recursive:!0})}function P2(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 M2(){try{let e=C2(WR(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function O2(){try{KR();let e=`
1779
+ `),v2=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,HR=30,Lhe=1024,Nhe=8e3,Bhe="haiku";async function Uhe(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=Khe(n,Lhe),o=new AbortController,i=setTimeout(()=>o.abort(),t.timeoutMs??Nhe),s=t.signal?Ghe([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,s):a=await zs({token:t.token,model:t.model??Bhe,system:Fhe,user:r,maxTokens:32,signal:s})}catch(u){let m=u instanceof Error?u.message:String(u);return t.onSkip?.("slug-generator-error",m.slice(0,200)),null}finally{clearTimeout(i)}let l=jhe(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=$he(t.worktreePath);return await Hhe(l,c)}function jhe(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(v2.test(t)&&t.length<=HR)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>HR)break;o=s}return v2.test(o)?o:null}async function Hhe(e,t){if(!await Whe(T2(t,e)))return e;let n=Dhe(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,HR-5)}-${n}`}async function Whe(e){try{return await Ohe.access(e),!0}catch{return!1}}function Khe(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 Ghe(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 E2(e){let t,n,r=T2(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await Uhe(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=`${lm(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return k2(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 k2(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 k2(e,t){e&&e.setCwd(t),qhe(t)}function qhe(e){try{process.chdir(e)}catch{}}_t();q();import{spawn as R2}from"child_process";import{existsSync as A2,mkdirSync as Xhe,readFileSync as C2,unlinkSync as x2,writeFileSync as _2}from"fs";import{get as Qhe}from"https";import{join as I2}from"path";import{readFileSync as zhe}from"fs";import{dirname as Jhe,join as Vhe}from"path";import{fileURLToPath as Yhe}from"url";function mr(){try{return"5.87.1"}catch{}try{let e=Jhe(Yhe(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(zhe(Vhe(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}G();var Zhe=64*1024,eye=10800*1e3,tye=800,nye=3600*1e3,rye="update-check.json",oye="pending-update.json";function WR(){return I2(Os(),rye)}function Hu(){return I2(Os(),oye)}function KR(){let e=Os();A2(e)||Xhe(e,{recursive:!0})}function P2(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 M2(){try{let e=C2(WR(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function O2(){try{KR();let e=`
1780
1780
  const https = require('https');
1781
1781
  const fs = require('fs');
1782
1782
  const url = 'https://registry.npmjs.org/agent-afk/latest';