agent-afk 5.81.7 → 5.81.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs CHANGED
@@ -870,7 +870,7 @@ Remedy: these paths are outside the fork's granted read roots. Re-dispatch with
870
870
 
871
871
  `).trim()}function N4(e){return(e?.textContent??"").replace(/\s+/g," ").trim().length}async function lI(e,t){let{JSDOM:n,Readability:r,turndown:o}=await L4(),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=aI(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=aI(o.turndown(d));return{title:a,markdown:u,textLength:N4(c),usedFallback:!0}}var DS,cI=x(()=>{"use strict";DS=null});function U4(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 dI(e,t,n){let r=Math.min(t*2**e,n);return Math.round(Math.random()*r)}function j4(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 vm(e,t,n={},r={}){let o=r.retries??3,i=r.baseDelayMs??500,s=r.maxDelayMs??1e4,a=r.sleep??U4,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(!B4.has(u.status)||d===o)return u;let m=j4(u,s)??dI(d,i,s);W("[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=dI(d,i,s);W("[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 B4,FS=x(()=>{"use strict";ye();B4=new Set([429,502,503,504])});import{readFileSync as H4}from"node:fs";import{join as W4}from"path";function K4(e){let n=e.replace(/[.+?()[\]{}/\\^$|]/g,"\\$&").replace(/\*/g,"[^.]*");return new RegExp(`^${n}$`,"i")}function uI(e,t){return K4(t).test(e)}function z4(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(G4.has(t))return!0;if(q4.has(t))return!1}return!1}function pI(e){return e===void 0||e.trim()===""?[]:e.split(",").map(t=>t.trim().toLowerCase()).filter(t=>t.length>0)}function J4(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 mI(e){let t=e===void 0||e.trim()===""?"default":e.trim();return oc(t),t}function Y4(e){if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}function V4(e){try{return H4(e,"utf8")}catch(t){if(t.code==="ENOENT")return;throw t}}function X4(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=mI(t.defaultProfile)),n}function fI(e){let t=e?.env??v,n=e?.readFileSync??V4,r=e?.surface??t.AGENT_SURFACE,o=z4(t.AFK_BROWSER_HEADLESS,r),i=pI(t.AFK_BROWSER_ALLOWED_DOMAINS),s=pI(t.AFK_BROWSER_BLOCKED_DOMAINS),a=Y4(t.AFK_BROWSER_DOM_SNAPSHOTS),l=J4(t.AFK_BROWSER_BACKEND),c=mI(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():W4(Tn(),"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=X4(d,g);return h.configPath=m,h}function LS(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(uI(n,r))return{allowed:!1,reason:`blocked by AFK_BROWSER_BLOCKED_DOMAINS: ${r}`};return t.allowedDomains.length>0&&!t.allowedDomains.some(o=>uI(n,o))?{allowed:!1,reason:"not in AFK_BROWSER_ALLOWED_DOMAINS"}:{allowed:!0}}var G4,q4,NS=x(()=>{"use strict";G();z();G4=new Set(["daemon","subagent","telegram","afk"]),q4=new Set(["repl","interactive","cli"])});import{existsSync as Q4,readFileSync as Z4}from"node:fs";import{createRequire as e8}from"node:module";import{dirname as t8,join as n8}from"node:path";function yI(e){if(typeof e=="string")return e;let t=[],n=e;for(let r=0;r<o8&&n instanceof Error;r++)t.push(n.message),n=n.cause;return t.length>0?t.join(" | "):String(e)}function Nt(e){let t=yI(e);return hI.some(n=>t.includes(n))}function i8(){try{let t=e8(import.meta.url).resolve("playwright/package.json"),n=JSON.parse(Z4(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=n8(t8(t),o);return Q4(i)?`node ${/\s/.test(i)?`"${i}"`:i} install chromium`:void 0}catch{return}}function Bc(){return gI??=i8()??r8,gI}function BS(e){return e.includes("install chromium")}function pn(e,t){if(yI(e).includes("Executable doesn't exist")){let r="";return t?.headless===!0?r=" This launch was headless, which needs the `chromium_headless_shell-*` build.":t?.headless===!1&&(r=" 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: ${Bc()}.${r}`}return`browser tools require the optional \`playwright\` peer dependency. Install via: pnpm add playwright (then ${Bc()}). Or pick a different tool.`}function Uc(e,t){if(!Nt(e))return e;let n=e instanceof Error?e.message:String(e);return new Error(`${n}
872
872
 
873
- ${pn(e,{headless:t})}`,{cause:e})}var hI,r8,o8,gI,km=x(()=>{"use strict";hI=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],r8="pnpm exec playwright install chromium",o8=4});import yi from"node:fs";import Tm from"node:path";import{randomBytes as s8}from"node:crypto";import{chromium as a8}from"playwright";function l8(){try{return"5.81.7"}catch{}try{let e=Tm.resolve(import.meta.dirname,"../../../package.json"),t=yi.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var c8,Em,bI=x(()=>{"use strict";km();z();ye();c8=l8(),Em=class{config;browser;sessions=new Map;launchPromise;shutdownComplete=!1;constructor(t){this.config=t}async ensureBrowser(){return this.browser!==void 0&&this.browser.isConnected()?this.browser:(this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=a8.launch({headless:this.config.headless}).then(t=>(this.browser=t,this.launchPromise=void 0,t)).catch(t=>{throw this.launchPromise=void 0,Uc(t,this.config.headless)}),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=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",i,{once:!0});try{let s=await o.newPage(),a=await s.goto(t,{timeout:n.timeoutMs,waitUntil:n.waitUntil}),l=await s.content(),c=s.url(),d=a!==null?a.status():null;return{html:l,finalUrl:c,httpStatus:d}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",i),await o.close().catch(()=>{})}}getConsoleErrorCount(t){return this.sessions.get(t)?.consoleErrors??0}getLastHttpStatus(t){return this.sessions.get(t)?.lastHttpStatus??null}hasOpenDialog(t){return this.sessions.get(t)?.openDialog!==void 0}async dismissDialog(t,n=!0){let r=this.sessions.get(t);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(t){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.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/${c8}`}}loadStorageState(t){let n=ic(t);try{if(!yi.existsSync(n))return;let r=JSON.parse(yi.readFileSync(n,"utf8"));return W("[browser/vault] restored session",{profile:t,file:n}),r}catch(r){W("[browser/vault] ignoring unreadable vault",{profile:t,file:n,err:r});return}}async saveStorageState(t,n){try{let r=ic(t);if(!yi.existsSync(r))return;let o=await n.storageState(),i=Tm.join(Tm.dirname(r),`.${Tm.basename(r)}.${process.pid}.${s8(4).toString("hex")}.tmp`);yi.writeFileSync(i,JSON.stringify(o),{mode:384}),yi.chmodSync(i,384),yi.renameSync(i,r),W("[browser/vault] saved session",{profile:t,file:r})}catch(r){W("[browser/vault] save failed",{profile:t,err:r})}}}});import{createHash as d8}from"crypto";function wI(e){return!!(e.role==="textbox"&&e.kind==="password"||e.label&&u8.test(e.label))}function SI(e){return d8("sha256").update(e,"utf8").digest("hex").slice(0,8)}function vI(e){let t=e.replace(/\s+/g," ").trim();return t.length<=80?t:t.slice(0,77)+"..."}var u8,xm=x(()=>{"use strict";u8=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as p8}from"node:crypto";function m8(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function f8(e,t,n){return`el_${p8("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function g8(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function kI(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function EI(e,t){let n=e.role??"",r=e.name??"";TI.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let i of e.children??[])EI(i,t)}async function h8(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},xI).catch(()=>[])}async function y8(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},xI).catch(()=>[])}function b8(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function Rm(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],i=b8(e),s=i?i.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=h8(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=[],EI(u,y)):(o.push("observation skipped accessibility tree (returned null)"),b=!0,y=(await y8(e)).filter(N=>TI.has(N.role??"")));let w=new Map;for(let O of m){let N=kI(O.name),j=w.get(N);(!j||j.bbox.w===0&&O.bbox.w>0)&&w.set(N,O)}let S=y.map(O=>({ax:O,dom:w.get(kI(O.name??""))})),k=r?S:S.filter(O=>O.dom?O.dom.bbox.w>0||O.dom.bbox.h>0:!0);k.sort((O,N)=>{let j=O.dom?.bbox.y??0,F=N.dom?.bbox.y??0;if(j!==F)return j-F;let H=O.dom?.bbox.x??0,_=N.dom?.bbox.x??0;return H-_}),k.length>200&&o.push("page has 200+ interactive elements; consider scoping");let A=k.slice(0,n).map((O,N)=>{let j=O.ax.role??"generic",F=O.ax.name??"",H=f8(j,F,N),_=O.dom?.bbox??{x:0,y:0,w:0,h:0},B=O.dom?.type??null,P=null;O.ax.value!==void 0&&O.ax.value!==null&&(P=String(O.ax.value)),O.ax.checked!==void 0&&(P=String(O.ax.checked)),wI({role:j,kind:B})&&(P="[redacted]");let M={disabled:O.ax.disabled??!1};O.ax.checked!==void 0&&(M.checked=O.ax.checked===!0||O.ax.checked==="mixed"),O.ax.selected!==void 0&&(M.selected=O.ax.selected),O.ax.expanded!==void 0&&(M.expanded=O.ax.expanded);let I;O.dom?.testId?I=`[data-testid="${O.dom.testId}"]`:O.dom?.id&&(I=`#${O.dom.id}`);let U={id:H,role:j,label:m8(F),kind:B,value:P,state:M,bbox:_};return I!==void 0&&(U.selector=I),U}),$="idle";try{let O=await e.evaluate(()=>document.readyState);O==="loading"?$="loading":O==="interactive"?$="navigating":$="idle"}catch{$="navigating"}$!=="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 R=g8(f),D=`obs_${t.observationCounter.toString(36)}`,C=new Date().toISOString();return{observationId:D,url:g,title:h,textSummary:R,interactive:A,status:{httpStatus:t.httpStatus??null,loadingState:$,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:C}}var TI,xI,RI=x(()=>{"use strict";xm();TI=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);xI="a[href], button, input, select, textarea, [role], [tabindex], label"});async function AI(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 US(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,i)=>AI(e,i)))).filter(o=>o!==null)}async function w8(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 jS(e,t,n){switch(t.kind){case"element_id":return S8(e,t,n);case"selector":return v8(e,t);case"semantic":return k8(e,t)}}async function S8(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 US(o,i);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:s}}async function v8(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 US(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function k8(e,t){return t.role!==void 0?T8(e,t.text,t.role):E8(e,t.text,t)}async function T8(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 US(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:i}}async function E8(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 w8(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 AI(y.locator,y.index);if(b!==null){let w=`${b.role}:${b.label}:${h}`,S=0;for(let k=0;k<w.length;k++)S=S*31+w.charCodeAt(k)>>>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 CI=x(()=>{"use strict"});import{randomBytes as x8}from"crypto";import{mkdir as R8,stat as A8,writeFile as C8}from"fs/promises";import{join as HS}from"path";import{gzip as _8}from"zlib";import{promisify as I8}from"util";function P8(e){return HS(Xo(e),"browser")}function M8(e){return HS(P8(e),"screenshots")}function O8(){return new Date().toISOString().replace(/[:.]/g,"-")}function $8(){return x8(3).toString("hex")}async function WS(e,t,n){if(t.length>_I)throw new Error(`writeScreenshotSidecar: buffer exceeds ${_I} byte cap (received ${t.length} bytes). Refusing to write oversized screenshot.`);let r=M8(e);await R8(r,{recursive:!0});let o=`${O8()}-${$8()}-${n}.png`,i=HS(r,o);await C8(i,t);let{size:s}=await A8(i);return{path:i,bytes:s}}var URe,_I,II=x(()=>{"use strict";z();xm();URe=I8(_8);_I=5*1024*1024});var MI={};Gu(MI,{PlaywrightProvider:()=>KS});function PI(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 KS,OI=x(()=>{"use strict";bI();RI();CI();NS();II();KS=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new Em(t)}async open(t){let n=LS(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(c){a=c}(t.screenshot===!0||a!==null)&&(s=await this.captureScreenshot(o,r,"browser_open")),i.observationCounter+=1;let l=await Rm(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,l.interactive,l.url,l.title,"browser_open"),a!==null)throw a;return l}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 Rm(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 jS(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${PI(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=r.url();if(u!==i){let h=LS(u,this.config);if(!h.allowed)return await r.goBack().catch(()=>{}),{outcome:"blocked_by_policy",url:u,reason:h.reason}}let m=null;(t.screenshot===!0||c!==null)&&(m=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Rm(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})}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 jS(r,t.target,o.knownElements);if(d.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${PI(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 WS(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 WS(n,o,r);return i}catch{return null}}}});var wi={};Gu(wi,{__resetBrowserRegistryForTests:()=>B8,browserProviderActive:()=>L8,closeBrowserProvider:()=>GS,getBrowserProvider:()=>F8,peekBrowserProvider:()=>N8});function $I(){Promise.resolve(GS()).then(()=>{process.exit(130)})}function DI(){Promise.resolve(GS()).then(()=>{process.exit(143)})}function FI(){rr=null}function D8(){Am||(process.on("SIGINT",$I),process.on("SIGTERM",DI),process.on("exit",FI),Am=!0)}function LI(){Am&&(process.removeListener("SIGINT",$I),process.removeListener("SIGTERM",DI),process.removeListener("exit",FI),Am=!1)}async function F8(e){return rr!==null?rr:(bi!==null||(bi=(async()=>{let{PlaywrightProvider:t}=await Promise.resolve().then(()=>(OI(),MI)),n=fI(e),r=new t(n);return D8(),rr=r,bi=null,r})()),bi)}async function GS(){if(rr===null)return;let e=rr;rr=null,bi=null,LI(),await e.shutdown()}function L8(){return rr!==null}function N8(){return rr}function B8(){rr=null,bi=null,LI()}var rr,bi,Am,Si=x(()=>{"use strict";NS();rr=null,bi=null,Am=!1});async function NI(e,t){try{return await lI(e,t)}catch(n){return W("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function G8(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Si(),wi));return(await n()).render({url:e,timeoutMs:t.timeoutMs,signal:t.signal})}async function BI(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??G8,o=null,i=e,s=null,a=null;try{let c=await vm(n,e,{headers:K8,redirect:"follow",signal:t.signal});s=c.status,i=c.url||e;let d=c.headers.get("content-type")??"";if(c.ok){if(W8.test(d))throw new Error(`web_scrape markdown mode received binary content (${d.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let u=await c.text();if(H8.test(d)&&!j8.test(d))return{title:"",markdown:u.trim(),finalUrl:i,usedRender:!1};if(o=await NI(u,i),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(c){if(t.signal.aborted||c instanceof Error&&c.message.startsWith("web_scrape markdown mode received binary"))throw c;a=c}if(!(o===null||o.textLength<200)&&o!==null)return{title:o.title,markdown:o.markdown,finalUrl:i,usedRender:!1};try{let c=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal}),d=await NI(c.html,c.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(o===null||d.textLength>=o.textLength)return{title:d.title,markdown:d.markdown,finalUrl:c.finalUrl,usedRender:!0}}catch(c){if(t.signal.aborted)throw c;if(o===null){let d=c instanceof Error?c.message:String(c),u=a instanceof Error?a.message:`HTTP ${s??"error"}`,m=new Error(`web_scrape could not retrieve ${e}: fetch failed (${u}) and render failed (${d}).`);throw m.cause=c,m}}if(o!==null)return{title:o.title,markdown:o.markdown,finalUrl:i,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${s??"error"}).`)}var j8,H8,W8,K8,UI=x(()=>{"use strict";cI();FS();ye();j8=/(text\/html|application\/xhtml\+xml)/i,H8=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,W8=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,K8={"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 J8(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let i=await t(q8,{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),z8),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!i.ok){let l="";try{let d=await i.text(),u=Pr(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 jI(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?J8({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 HI(e,t){if(t.length===0)return`# Search results for "${e}"
873
+ ${pn(e,{headless:t})}`,{cause:e})}var hI,r8,o8,gI,km=x(()=>{"use strict";hI=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],r8="pnpm exec playwright install chromium",o8=4});import yi from"node:fs";import Tm from"node:path";import{randomBytes as s8}from"node:crypto";import{chromium as a8}from"playwright";function l8(){try{return"5.81.8"}catch{}try{let e=Tm.resolve(import.meta.dirname,"../../../package.json"),t=yi.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var c8,Em,bI=x(()=>{"use strict";km();z();ye();c8=l8(),Em=class{config;browser;sessions=new Map;launchPromise;shutdownComplete=!1;constructor(t){this.config=t}async ensureBrowser(){return this.browser!==void 0&&this.browser.isConnected()?this.browser:(this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=a8.launch({headless:this.config.headless}).then(t=>(this.browser=t,this.launchPromise=void 0,t)).catch(t=>{throw this.launchPromise=void 0,Uc(t,this.config.headless)}),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=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",i,{once:!0});try{let s=await o.newPage(),a=await s.goto(t,{timeout:n.timeoutMs,waitUntil:n.waitUntil}),l=await s.content(),c=s.url(),d=a!==null?a.status():null;return{html:l,finalUrl:c,httpStatus:d}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",i),await o.close().catch(()=>{})}}getConsoleErrorCount(t){return this.sessions.get(t)?.consoleErrors??0}getLastHttpStatus(t){return this.sessions.get(t)?.lastHttpStatus??null}hasOpenDialog(t){return this.sessions.get(t)?.openDialog!==void 0}async dismissDialog(t,n=!0){let r=this.sessions.get(t);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(t){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.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/${c8}`}}loadStorageState(t){let n=ic(t);try{if(!yi.existsSync(n))return;let r=JSON.parse(yi.readFileSync(n,"utf8"));return W("[browser/vault] restored session",{profile:t,file:n}),r}catch(r){W("[browser/vault] ignoring unreadable vault",{profile:t,file:n,err:r});return}}async saveStorageState(t,n){try{let r=ic(t);if(!yi.existsSync(r))return;let o=await n.storageState(),i=Tm.join(Tm.dirname(r),`.${Tm.basename(r)}.${process.pid}.${s8(4).toString("hex")}.tmp`);yi.writeFileSync(i,JSON.stringify(o),{mode:384}),yi.chmodSync(i,384),yi.renameSync(i,r),W("[browser/vault] saved session",{profile:t,file:r})}catch(r){W("[browser/vault] save failed",{profile:t,err:r})}}}});import{createHash as d8}from"crypto";function wI(e){return!!(e.role==="textbox"&&e.kind==="password"||e.label&&u8.test(e.label))}function SI(e){return d8("sha256").update(e,"utf8").digest("hex").slice(0,8)}function vI(e){let t=e.replace(/\s+/g," ").trim();return t.length<=80?t:t.slice(0,77)+"..."}var u8,xm=x(()=>{"use strict";u8=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as p8}from"node:crypto";function m8(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function f8(e,t,n){return`el_${p8("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function g8(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function kI(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function EI(e,t){let n=e.role??"",r=e.name??"";TI.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let i of e.children??[])EI(i,t)}async function h8(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},xI).catch(()=>[])}async function y8(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},xI).catch(()=>[])}function b8(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function Rm(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],i=b8(e),s=i?i.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=h8(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=[],EI(u,y)):(o.push("observation skipped accessibility tree (returned null)"),b=!0,y=(await y8(e)).filter(N=>TI.has(N.role??"")));let w=new Map;for(let O of m){let N=kI(O.name),j=w.get(N);(!j||j.bbox.w===0&&O.bbox.w>0)&&w.set(N,O)}let S=y.map(O=>({ax:O,dom:w.get(kI(O.name??""))})),k=r?S:S.filter(O=>O.dom?O.dom.bbox.w>0||O.dom.bbox.h>0:!0);k.sort((O,N)=>{let j=O.dom?.bbox.y??0,F=N.dom?.bbox.y??0;if(j!==F)return j-F;let H=O.dom?.bbox.x??0,_=N.dom?.bbox.x??0;return H-_}),k.length>200&&o.push("page has 200+ interactive elements; consider scoping");let A=k.slice(0,n).map((O,N)=>{let j=O.ax.role??"generic",F=O.ax.name??"",H=f8(j,F,N),_=O.dom?.bbox??{x:0,y:0,w:0,h:0},B=O.dom?.type??null,P=null;O.ax.value!==void 0&&O.ax.value!==null&&(P=String(O.ax.value)),O.ax.checked!==void 0&&(P=String(O.ax.checked)),wI({role:j,kind:B})&&(P="[redacted]");let M={disabled:O.ax.disabled??!1};O.ax.checked!==void 0&&(M.checked=O.ax.checked===!0||O.ax.checked==="mixed"),O.ax.selected!==void 0&&(M.selected=O.ax.selected),O.ax.expanded!==void 0&&(M.expanded=O.ax.expanded);let I;O.dom?.testId?I=`[data-testid="${O.dom.testId}"]`:O.dom?.id&&(I=`#${O.dom.id}`);let U={id:H,role:j,label:m8(F),kind:B,value:P,state:M,bbox:_};return I!==void 0&&(U.selector=I),U}),$="idle";try{let O=await e.evaluate(()=>document.readyState);O==="loading"?$="loading":O==="interactive"?$="navigating":$="idle"}catch{$="navigating"}$!=="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 R=g8(f),D=`obs_${t.observationCounter.toString(36)}`,C=new Date().toISOString();return{observationId:D,url:g,title:h,textSummary:R,interactive:A,status:{httpStatus:t.httpStatus??null,loadingState:$,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:C}}var TI,xI,RI=x(()=>{"use strict";xm();TI=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);xI="a[href], button, input, select, textarea, [role], [tabindex], label"});async function AI(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 US(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,i)=>AI(e,i)))).filter(o=>o!==null)}async function w8(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 jS(e,t,n){switch(t.kind){case"element_id":return S8(e,t,n);case"selector":return v8(e,t);case"semantic":return k8(e,t)}}async function S8(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 US(o,i);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:s}}async function v8(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 US(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function k8(e,t){return t.role!==void 0?T8(e,t.text,t.role):E8(e,t.text,t)}async function T8(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 US(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:i}}async function E8(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 w8(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 AI(y.locator,y.index);if(b!==null){let w=`${b.role}:${b.label}:${h}`,S=0;for(let k=0;k<w.length;k++)S=S*31+w.charCodeAt(k)>>>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 CI=x(()=>{"use strict"});import{randomBytes as x8}from"crypto";import{mkdir as R8,stat as A8,writeFile as C8}from"fs/promises";import{join as HS}from"path";import{gzip as _8}from"zlib";import{promisify as I8}from"util";function P8(e){return HS(Xo(e),"browser")}function M8(e){return HS(P8(e),"screenshots")}function O8(){return new Date().toISOString().replace(/[:.]/g,"-")}function $8(){return x8(3).toString("hex")}async function WS(e,t,n){if(t.length>_I)throw new Error(`writeScreenshotSidecar: buffer exceeds ${_I} byte cap (received ${t.length} bytes). Refusing to write oversized screenshot.`);let r=M8(e);await R8(r,{recursive:!0});let o=`${O8()}-${$8()}-${n}.png`,i=HS(r,o);await C8(i,t);let{size:s}=await A8(i);return{path:i,bytes:s}}var URe,_I,II=x(()=>{"use strict";z();xm();URe=I8(_8);_I=5*1024*1024});var MI={};Gu(MI,{PlaywrightProvider:()=>KS});function PI(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 KS,OI=x(()=>{"use strict";bI();RI();CI();NS();II();KS=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new Em(t)}async open(t){let n=LS(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(c){a=c}(t.screenshot===!0||a!==null)&&(s=await this.captureScreenshot(o,r,"browser_open")),i.observationCounter+=1;let l=await Rm(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,l.interactive,l.url,l.title,"browser_open"),a!==null)throw a;return l}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 Rm(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 jS(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${PI(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=r.url();if(u!==i){let h=LS(u,this.config);if(!h.allowed)return await r.goBack().catch(()=>{}),{outcome:"blocked_by_policy",url:u,reason:h.reason}}let m=null;(t.screenshot===!0||c!==null)&&(m=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Rm(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})}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 jS(r,t.target,o.knownElements);if(d.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${PI(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 WS(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 WS(n,o,r);return i}catch{return null}}}});var wi={};Gu(wi,{__resetBrowserRegistryForTests:()=>B8,browserProviderActive:()=>L8,closeBrowserProvider:()=>GS,getBrowserProvider:()=>F8,peekBrowserProvider:()=>N8});function $I(){Promise.resolve(GS()).then(()=>{process.exit(130)})}function DI(){Promise.resolve(GS()).then(()=>{process.exit(143)})}function FI(){rr=null}function D8(){Am||(process.on("SIGINT",$I),process.on("SIGTERM",DI),process.on("exit",FI),Am=!0)}function LI(){Am&&(process.removeListener("SIGINT",$I),process.removeListener("SIGTERM",DI),process.removeListener("exit",FI),Am=!1)}async function F8(e){return rr!==null?rr:(bi!==null||(bi=(async()=>{let{PlaywrightProvider:t}=await Promise.resolve().then(()=>(OI(),MI)),n=fI(e),r=new t(n);return D8(),rr=r,bi=null,r})()),bi)}async function GS(){if(rr===null)return;let e=rr;rr=null,bi=null,LI(),await e.shutdown()}function L8(){return rr!==null}function N8(){return rr}function B8(){rr=null,bi=null,LI()}var rr,bi,Am,Si=x(()=>{"use strict";NS();rr=null,bi=null,Am=!1});async function NI(e,t){try{return await lI(e,t)}catch(n){return W("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function G8(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Si(),wi));return(await n()).render({url:e,timeoutMs:t.timeoutMs,signal:t.signal})}async function BI(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??G8,o=null,i=e,s=null,a=null;try{let c=await vm(n,e,{headers:K8,redirect:"follow",signal:t.signal});s=c.status,i=c.url||e;let d=c.headers.get("content-type")??"";if(c.ok){if(W8.test(d))throw new Error(`web_scrape markdown mode received binary content (${d.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let u=await c.text();if(H8.test(d)&&!j8.test(d))return{title:"",markdown:u.trim(),finalUrl:i,usedRender:!1};if(o=await NI(u,i),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(c){if(t.signal.aborted||c instanceof Error&&c.message.startsWith("web_scrape markdown mode received binary"))throw c;a=c}if(!(o===null||o.textLength<200)&&o!==null)return{title:o.title,markdown:o.markdown,finalUrl:i,usedRender:!1};try{let c=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal}),d=await NI(c.html,c.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(o===null||d.textLength>=o.textLength)return{title:d.title,markdown:d.markdown,finalUrl:c.finalUrl,usedRender:!0}}catch(c){if(t.signal.aborted)throw c;if(o===null){let d=c instanceof Error?c.message:String(c),u=a instanceof Error?a.message:`HTTP ${s??"error"}`,m=new Error(`web_scrape could not retrieve ${e}: fetch failed (${u}) and render failed (${d}).`);throw m.cause=c,m}}if(o!==null)return{title:o.title,markdown:o.markdown,finalUrl:i,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${s??"error"}).`)}var j8,H8,W8,K8,UI=x(()=>{"use strict";cI();FS();ye();j8=/(text\/html|application\/xhtml\+xml)/i,H8=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,W8=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,K8={"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 J8(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let i=await t(q8,{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),z8),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!i.ok){let l="";try{let d=await i.text(),u=Pr(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 jI(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?J8({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 HI(e,t){if(t.length===0)return`# Search results for "${e}"
874
874
 
875
875
  (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(`
876
876
  `).trimEnd()}var q8,z8,WI=x(()=>{"use strict";mo();q8="https://api.exa.ai/search",z8=10});function Cm(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 vi=x(()=>{"use strict";km()});function e5(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=Y8;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,V8)}let a=X8;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,Q8)}return{mode:r,url:o,query:i,timeoutMs:s,maxBytes:a}}function qS(e,t){return Buffer.byteLength(e,"utf8")<=t?{content:e,truncated:!1}:{content:_r(e,t),truncated:!0}}function t5(e={}){let t=e.fetchFn??globalThis.fetch,n=e.env??process.env;return async(r,o)=>{if(typeof t!="function")return{content:"web_scrape unavailable: global fetch() is not present in this runtime (agent-afk requires Node 20+).",isError:!0};let i=e5(r);if("error"in i)return{content:i.error,isError:!0};if(o.aborted){let d=o.reason;return{content:`web_scrape aborted: ${d instanceof Error?d.message:String(d??"aborted")}`,isError:!0}}let s=new AbortController,a=()=>{s.abort(o.reason)},l,c=()=>{let d=s.signal.reason;return d instanceof Error?d.message:String(d??"aborted")};try{if(o.addEventListener("abort",a,{once:!0}),l=setTimeout(()=>{s.abort(new Error(`web_scrape timeout after ${i.timeoutMs}ms`))},i.timeoutMs),i.mode==="raw"){let u;try{u=await vm(t,i.url,{method:"GET",headers:{"User-Agent":"agent-afk/web_scrape",Accept:"*/*"},signal:s.signal})}catch(g){return s.signal.aborted?{content:`web_scrape aborted: ${c()}`,isError:!0}:{content:`web_scrape network error: ${g instanceof Error?g.message:String(g)}`,isError:!0}}if(!u.ok)return{content:`web_scrape HTTP ${u.status} ${u.statusText||""}`.trimEnd()+` for ${i.url}`,isError:!0};let m;try{m=await u.text()}catch(g){return{content:`web_scrape read error: ${g instanceof Error?g.message:String(g)}`,isError:!0}}let f=qS(m,i.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}if(i.mode==="markdown")try{let u=await BI(i.url,{fetchFn:t,renderFn:e.renderFn,timeoutMs:i.timeoutMs,signal:s.signal});if(u.markdown.trim().length===0)return{content:`web_scrape extracted no readable content from ${i.url}.`,isError:!0};let m=qS(u.markdown,i.maxBytes);return{content:m.content,...m.truncated?{truncated:!0}:{}}}catch(u){if(s.signal.aborted)return{content:`web_scrape aborted: ${c()}`,isError:!0};let m=u instanceof Error?u.message:String(u),f=Nt(u)&&!BS(m)?` (the render fallback needs the optional Playwright browser \u2014 run \`${Bc()}\`)`:"";return{content:`web_scrape markdown error: ${m}${f}`,isError:!0}}let d=jI({exaApiKey:n.EXA_API_KEY,fetchFn:t});if("error"in d)return{content:d.error,isError:!0};try{let u=await d.search(i.query,{limit:Z8,timeoutMs:i.timeoutMs,signal:s.signal}),m=qS(HI(i.query,u),i.maxBytes);return{content:m.content,...m.truncated?{truncated:!0}:{}}}catch(u){return s.signal.aborted?{content:`web_scrape aborted: ${c()}`,isError:!0}:{content:`web_scrape search error (${d.name}): ${u instanceof Error?u.message:String(u)}`,isError:!0}}}finally{l!==void 0&&clearTimeout(l),o.removeEventListener("abort",a)}}}var Y8,V8,X8,Q8,Z8,KI,GI=x(()=>{"use strict";UI();WI();FS();Js();vi();Y8=3e4,V8=12e4,X8=1e5,Q8=1e6,Z8=10;KI=t5()});import{existsSync as zI,mkdirSync as n5,readFileSync as r5,renameSync as o5,unlinkSync as i5,writeFileSync as s5}from"node:fs";import{dirname as qI,join as a5}from"node:path";import{randomBytes as l5}from"node:crypto";function mn(e){let t=e??Hb();if(!zI(t))return[];try{let n=r5(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 ki(e,t){let n=t??Hb();n5(qI(n),{recursive:!0});let r=a5(qI(n),`.schedules.json.${process.pid}.${l5(4).toString("hex")}.tmp`),o=JSON.stringify(e,null,2);try{s5(r,o,"utf-8"),o5(r,n)}catch(i){try{zI(r)&&i5(r)}catch{}throw i}}function _m(e,t){let n=mn(t),r=n.map(l=>l.id),o=c5(e.name),i=d5(o,r),s=new Date().toISOString(),a={...e,notifyOn:e.notifyOn??"failure",id:i,createdAt:s,updatedAt:s};return n.push(a),ki(n,t),a}function Im(e,t){let n=mn(t),r=n.length,o=n.filter(i=>i.id!==e);return o.length===r?!1:(ki(o,t),!0)}function jc(e,t){return mn(t).find(n=>n.id===e)}function c5(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"")}function d5(e,t){if(!t.includes(e))return e;let n=2;for(;t.includes(`${e}-${n}`);)n+=1;return`${e}-${n}`}function JI(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 Pm=x(()=>{"use strict";z()});import{existsSync as u5,readFileSync as p5}from"node:fs";import{join as m5}from"node:path";async function _n(e,t,n){let r;try{let o=m5(ep("default"),"port");if(!u5(o))return{synced:!1,detail:"daemon-not-detected (no port file)"};let i=p5(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 ho,zS=x(()=>{"use strict";z();ho="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 f5}from"node:fs";import{readFile as g5}from"node:fs/promises";var YI,VI,XI,QI,ZI=x(()=>{"use strict";Pm();z();zS();YI=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=_m({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 _n("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 _n("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:ho}})}},VI=async(e,t)=>{let n=mn();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})))}},XI=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=Wn();if(!f5(i))return{content:JSON.stringify([])};let s;try{let c=await g5(i);s=(c.length>1048576?c.subarray(c.length-1048576):c).toString("utf-8")}catch{return{content:JSON.stringify([])}}let a=s.split(`
@@ -967,7 +967,7 @@ ${o}`:o}function G6(e){let t=e.systemPrompt;if(t!==void 0){if(typeof t=="string"
967
967
  --
968
968
  ${b.content}`,isError:!0,...b.truncated===!0?{truncated:!0}:{}}),m.push({call:y,result:b});let S=u.get(y.id),k=typeof S=="number"?Date.now()-S:0,T=b.truncated===!0||b.content.includes("[output truncated");Cs(o,Ef({toolUseId:y.id,name:y.name,result:b,truncated:T,durationMs:k,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}:{},sessionId:s},b.render?.diff&&(yield{type:"tool.diff",toolUseId:y.id,diff:b.render.diff,sessionId:s})}}i.push(pM(e.assistantText,l,e.reasoningText));for(let g of mM(m))i.push(g);let f=fM(m,{vision:n});return f&&i.push(f),m.find(g=>g.result.failureClass===Xs)?.result}var BM=x(()=>{"use strict";Ce();Fv();gm();vf();Lv();Vc();wv()});function Rf(e){return e!==void 0&&e>0?Math.floor(e):0}function Af(e,t){return t>0&&e>=t}var So,xf,cd=x(()=>{"use strict";So="tool_use_loop_capped",xf="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 b3 from"openai";function S3(e){let t={apiKey:e.apiKey};return e.baseURL!==void 0&&(t.baseURL=e.baseURL),e.defaultHeaders!==void 0&&(t.defaultHeaders=e.defaultHeaders),new b3(t)}function UM(){return w3??S3}var w3,Nv=x(()=>{"use strict";w3=null});function $r(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 Cf=x(()=>{"use strict"});async function*Bv(e,t){let n=0;for(;;){let r=sf(),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(yf(u)&&d<DM){let m=Dv(u),f=m??$v(d);if(se(e.traceWriter,{phase:"rate_limit",durationMs:f,resolvedModel:e.currentModel,metadata:{source:"connection",reason:m!==void 0?"retry-after":"backoff",attempt:d}}),await $r(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 ga(i,e.controller.signal)){if(e.isClosed())return null;for(let u of t.translate(d,r))l||(l=!0,se(e.traceWriter,{phase:"model_ttfb",durationMs:Date.now()-o,resolvedModel:e.currentModel})),yield u}}catch(d){if(e.controller.signal.aborted)return null;if(bf(d)&&n<FM){n++,yield{type:"stream.retry",sessionId:e.initSessionId};let u=Dv(d),m=u??$v(n-1);if(se(e.traceWriter,{phase:"rate_limit",durationMs:m,resolvedModel:e.currentModel,metadata:{source:"stream",reason:u!==void 0?"retry-after":"backoff",attempt:n}}),await $r(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=cM(r)&&r.toolCallsByIndex.size>0;return r.finishReason===null&&r.assistantText.length===0&&!c?(yield{type:"error",error:new Gn("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 jM=x(()=>{"use strict";Ce();gf();Cf();Vc();Ue();wf()});import{randomUUID as k3}from"node:crypto";function E3(e){if(e instanceof ad||yf(e)||bf(e))return!1;let t=ld(e);return t!==void 0&&T3.has(t)}function HM(e,t,n={}){let r=ir(e.apiKey,n.authDeps,e.forceChatgptOAuth??!1),o=e.resume??`openai-pending-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,i=typeof e.model=="string"?e.model:"gpt-4o-mini",s=xt(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 _f(a)}var Uv,T3,_f,jv=x(()=>{"use strict";Ce();fc();bv();xi();Rn();Hv();ye();ca();sM();sa();Vc();wv();vv();cf();G();td();Tv();Ue();sd();RM();Ov();wf();_w();Pw();li();vf();BM();cd();mf();Nv();jM();Mv();wf();Nv();mf();Uv="openai-compatible",T3=new Set([400,404,405,415,422,501]);_f=class{client;opts;initSessionId;toolDispatcher;onPermissionMode;openAITools;wireMode;traceWriter;priorTurns=[];currentModel;currentPermissionMode;responsesCompactionUnavailable=!1;abort=new ua;closed=!1;lastUsage=null;autoCompactThreshold;constructor(t){if(this.opts=t,this.initSessionId=t.synthesizedSessionId,this.currentModel=t.model,this.currentPermissionMode=Pv(t.config.permissionMode),this.toolDispatcher=t.toolDispatcher,this.onPermissionMode=t.onPermissionMode,this.traceWriter=t.traceWriter,this.autoCompactThreshold=da(t.config.autoCompact),this.toolDispatcher){let o=this.toolDispatcher;Array.isArray(o.toolDefs)&&o.toolDefs.length>0&&(this.openAITools=dM(o.toolDefs))}let n=(t.useResponsesApi??!1)||hM(v.AFK_OPENAI_USE_RESPONSES),r=yM(t.auth,n);if(this.wireMode=r.mode,t.auth.apiKey===null)this.client=null;else{let o=UM(),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!==qt);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:Uv}},this.opts.auth.apiKey===null){yield{type:"error",error:new Error(Yc(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===kv)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=Ei(this.currentModel);if(i!==null&&s>0){let a=On(i);if(Zc(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 he))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=k3(),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}),se(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"&&se(this.traceWriter,{phase:"interrupt_halt",durationMs:Date.now()-i,metadata:{provider:"openai-compatible"}}),se(this.traceWriter,{phase:"loop_end",durationMs:Date.now()-r})}}async*_runTurnInner(t,n,r,o){let i=XP(this.currentModel);this.priorTurns.push({role:"user",content:oM(t,{vision:i,model:this.currentModel})});let s={stopReason:null,resultSubtype:"success",isError:!1},a="",l="",c=Rf(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=lM(f.state);if(s=qc(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 Ss(h.content)};return}u+=1;{let y=af(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 k=b?`${b.name}${Ai(b.name,S)}`:"unknown";yield{type:"progress",progress:{taskId:o,description:"Working",summary:`round ${u}: ${k}`,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(Af(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:So}: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=iM({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"?Rp:this.currentPermissionMode==="autonomous"?Ap:null;a!==null&&(o[0]={...o[0],content:o[0].content+`
969
969
 
970
- `+a})}r&&o.push({role:"user",content:xf});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&&Xc(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=ff({model:this.currentModel,messages:o,activeTools:i,maxOutputTokens:this.opts.config.maxOutputTokens,effort:this.opts.config.effort,isChatGptBackend:a});return yield*Bv(s,{createStream:async c=>await this.client.responses.create(l,{signal:c}),translate:(c,d)=>lf(c,d,this.initSessionId),clarifyError:c=>this.clarifyResponsesError(c,a)})}else{let a=PM({model:this.currentModel,messages:o,activeTools:i,maxOutputTokens:this.opts.config.maxOutputTokens,effort:this.opts.config.effort});return yield*Bv(s,{createStream:async l=>await this.client.chat.completions.create(a,{signal:l}),translate:(l,c)=>aM(l,c,this.initSessionId),clarifyError:l=>l instanceof Error?l:new Error(String(l))})}}async*dispatchAndAppend(t,n,r){return yield*NM({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=fa(v.AFK_MICROCOMPACT_TOOL_RESULT_BYTES,v.AFK_MICROCOMPACT_KEEP_LAST),{blocksCleared:s,bytesReclaimed:a}=_v(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=v.AFK_COMPACT_MODEL??this.currentModel,o=ed(On(this.lastUsage??{}),Ei(this.currentModel));return xM({priorTurns:this.priorTurns,usedFraction:o,shrinkAtFraction:EM(),summarize:(i,s)=>this.wireMode==="responses"?this.summarizeViaResponses(i,s,r):hf({client:this.client,model:r,system:nd,user:id(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 OM({client:this.client,model:r,system:nd,user:id(t),isChatGptBackend:this.opts.auth.source==="chatgpt-oauth",maxTokens:1024,signal:n})}catch(o){if(!n.aborted&&E3(o)){this.responsesCompactionUnavailable=!0;let i=ld(o);se(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=xt(t)??t)}async setPermissionMode(t){this.currentPermissionMode=Pv(t);let n=zn(this.currentPermissionMode);this.toolDispatcher?.setAllowAll?.(n),this.onPermissionMode?.(this.currentPermissionMode)}setCwd(t){this.toolDispatcher?.setResolveBase?.(t)}async supportedCommands(){return If()}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=Vt(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}=Qc(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:`${Uv} provider does not support file checkpoint rewind yet.`}}close(){this.closed=!0,this.abort.requestAbort("closed"),this.abort.markClosed(),W(`\u{1F7E2} ${Uv}: closed`)}}});var Wv,Xt,x3,dd=x(()=>{"use strict";Vp();Zp();Oc();om();fc();gv();li();ln();Mn();yv();sr();jv();Ov();dn();wo();ca();jv();Wv="openai-compatible",Xt=class{name=Wv;providerOpts;memoryStore;schemas;_sharedReadRoots;_sharedWriteRoots;_currentPermissionMode="default";_initialResolveBase;_presenceSessionId=null;constructor(t={}){this.providerOpts=t,this.memoryStore=t.memoryStore??new mt;let n=[...Ir];t.subagentExecutor&&n.push(t.subagentExecutor.describeAgentTool?.()??zt),t.skillExecutor&&n.push(pi),t.composeExecutor&&n.push(mi),t.readOnlyMemory===!0?n.push(Ys):n.push(...po),n.push(Zn);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=Pc({surface:this.providerOpts.surface??"cli",cwd:n.cwd??process.cwd(),modelName:i,providerName:Wv,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 Jt?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?Mc(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={},l=n.openaiBaseUrl??this.providerOpts.baseURL;if(l!==void 0&&(a.baseURL=l),a.toolDispatcher=o,a.onPermissionMode=w=>{this._currentPermissionMode=w},this.providerOpts.mcpManager!==void 0&&(a.mcpManager=this.providerOpts.mcpManager),(n.depth===void 0||n.depth===0)&&n.parentSessionId===void 0&&n.sessionId!==void 0&&this._presenceSessionId===null){this._presenceSessionId=n.sessionId;let w=n.sessionId,S=s.getWorkspace();Ec({sessionId:w,surface:this.providerOpts.surface??"cli",actor:or(n.depth),cwd:n.cwd??process.cwd(),startedAt:new Date().toISOString(),model:{provider:Wv,name:i},workspace:S,pid:process.pid}),process.once("exit",()=>{Rr(w)}),process.once("SIGINT",()=>{Rr(w),process.exit(130)}),process.once("SIGTERM",()=>{Rr(w),process.exit(143)})}let d=Ic({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=nf(n.isSkillDispatch),m=rf(this.providerOpts.readOnlyMemory),f=this.providerOpts.skillExecutor?Pf():"",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(`
970
+ `+a})}r&&o.push({role:"user",content:xf});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&&Xc(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=ff({model:this.currentModel,messages:o,activeTools:i,maxOutputTokens:this.opts.config.maxOutputTokens,effort:this.opts.config.effort,isChatGptBackend:a});return yield*Bv(s,{createStream:async c=>await this.client.responses.create(l,{signal:c}),translate:(c,d)=>lf(c,d,this.initSessionId),clarifyError:c=>this.clarifyResponsesError(c,a)})}else{let a=PM({model:this.currentModel,messages:o,activeTools:i,maxOutputTokens:this.opts.config.maxOutputTokens,effort:this.opts.config.effort});return yield*Bv(s,{createStream:async l=>await this.client.chat.completions.create(a,{signal:l}),translate:(l,c)=>aM(l,c,this.initSessionId),clarifyError:l=>l instanceof Error?l:new Error(String(l))})}}async*dispatchAndAppend(t,n,r){return yield*NM({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=fa(v.AFK_MICROCOMPACT_TOOL_RESULT_BYTES,v.AFK_MICROCOMPACT_KEEP_LAST),{blocksCleared:s,bytesReclaimed:a}=_v(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=v.AFK_COMPACT_MODEL??this.currentModel,o=ed(On(this.lastUsage??{}),Ei(this.currentModel));return xM({priorTurns:this.priorTurns,usedFraction:o,shrinkAtFraction:EM(),summarize:(i,s)=>this.wireMode==="responses"?this.summarizeViaResponses(i,s,r):hf({client:this.client,model:r,system:nd,user:id(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 OM({client:this.client,model:r,system:nd,user:id(t),isChatGptBackend:this.opts.auth.source==="chatgpt-oauth",maxTokens:1024,signal:n})}catch(o){if(!n.aborted&&E3(o)){this.responsesCompactionUnavailable=!0;let i=ld(o);se(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=xt(t)??t)}async setPermissionMode(t){this.currentPermissionMode=Pv(t);let n=zn(this.currentPermissionMode);this.toolDispatcher?.setAllowAll?.(n),this.onPermissionMode?.(this.currentPermissionMode)}setCwd(t){this.toolDispatcher?.setResolveBase?.(t)}async supportedCommands(){return If()}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=Vt(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}=Qc(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:`${Uv} provider does not support file checkpoint rewind yet.`}}close(){this.closed=!0,this.abort.requestAbort("closed"),this.abort.markClosed(),W(`\u{1F7E2} ${Uv}: closed`)}}});var Wv,Xt,x3,dd=x(()=>{"use strict";Vp();Zp();Oc();om();fc();gv();li();ln();Mn();yv();sr();jv();Ov();dn();wo();ca();jv();Wv="openai-compatible",Xt=class{name=Wv;providerOpts;memoryStore;schemas;_sharedReadRoots;_sharedWriteRoots;_currentPermissionMode="default";_initialResolveBase;_presenceSessionId=null;constructor(t={}){this.providerOpts=t,this.memoryStore=t.memoryStore??new mt;let n=[...Ir];t.subagentExecutor&&n.push(t.subagentExecutor.describeAgentTool?.()??zt),t.skillExecutor&&n.push(pi),t.composeExecutor&&n.push(mi),t.readOnlyMemory===!0?n.push(Ys):n.push(...po),n.push(Zn);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=Pc({surface:this.providerOpts.surface??"cli",cwd:n.cwd??process.cwd(),modelName:i,providerName:Wv,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 Jt?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?Mc(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={},l=n.openaiBaseUrl??this.providerOpts.baseURL;if(l!==void 0&&(a.baseURL=l),a.toolDispatcher=o,a.onPermissionMode=w=>{this._currentPermissionMode=w},this.providerOpts.mcpManager!==void 0&&(a.mcpManager=this.providerOpts.mcpManager),(n.depth===void 0||n.depth===0)&&n.parentSessionId===void 0&&n.sessionId!==void 0&&this._presenceSessionId===null){this._presenceSessionId=n.sessionId;let w=n.sessionId,S=s.getWorkspace();Ec({sessionId:w,surface:this.providerOpts.surface??"cli",actor:or(n.depth),cwd:n.cwd??process.cwd(),startedAt:new Date().toISOString(),model:{provider:Wv,name:i},workspace:S,pid:process.pid}),process.once("exit",()=>{Rr(w)}),process.once("SIGINT",()=>{Rr(w),process.exit(130)}),process.once("SIGTERM",()=>{Rr(w),process.exit(143)})}let d=Ic({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=nf(n.isSkillDispatch),m=rf(this.providerOpts.readOnlyMemory),f=this.providerOpts.skillExecutor?Pf(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(`
971
971
 
972
972
  `)};return HM(b,t.prompt,a)}buildDispatcher(t,n){let r=ef(t,n.cwd),o=_c(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(qt,qp(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?[Gp]:[]],hookRegistry:Yp(n.hookRegistry,this.providerOpts.hookRegistry)},c=Qp(this.providerOpts.mcpManager?Xp(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=zn(t),l.sessionGrantManager=this,new Jt(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 uo({getReadRoots:()=>this._sharedReadRoots,getWriteRoots:()=>this._sharedWriteRoots,ensureInitialized:()=>this.ensureSharedRoots(),getProtectedRoot:()=>this._initialResolveBase,getAllowAll:()=>zn(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),hf(n)}},x3=new Xt});function vo(e,t){if(e.has(t))return!0;let n=t.charAt(0).toUpperCase()+t.slice(1);return n!==t&&e.has(n)}function ar(e){return e.startsWith("mcp__")||e.startsWith("MCP__")?"mcp":vo(R3,e)?"read":vo(A3,e)?"write":vo(C3,e)?"shell":vo(ko,e)?"subagent":vo(ud,e)?"skill":vo(pd,e)?"dag":vo(_3,e)?"web":I3.has(e)?"browser":vo(P3,e)?"planning":M3.has(e)?"schedule":"other"}function Kv(e){return O3[e]}var R3,A3,C3,ko,ud,pd,Ve,_3,I3,P3,M3,WM,O3,md=x(()=>{"use strict";fm();R3=new Set(["Read","Glob","Grep","NotebookRead","LS","read_file","glob","grep","list_directory","config_get","memory_search"]),A3=new Set(["Write","Edit","NotebookEdit","MultiEdit","write_file","edit_file","memory_update","procedure_write","terminal_font_size","config_set"]),C3=new Set(["Bash","BashOutput","KillBash","bash"]),ko=new Set(["Agent","Task","agent"]),ud=new Set(["Skill","skill"]),pd=new Set(["Compose","compose"]),Ve=new Set([...ko,...pd,...ud]),_3=new Set(["WebFetch","WebSearch","send_telegram","web_scrape"]),I3=new Set(["browser_open","browser_observe","browser_act","browser_screenshot","browser_extract","browser_close"]),P3=new Set(["TaskCreate","TaskUpdate","TaskList","TaskGet","TaskOutput","TaskStop","EnterPlanMode","ExitPlanMode","ToolSearch"]),M3=new Set(["create_schedule","list_schedules","get_schedule_history","cancel_schedule"]);WM=["Read","Glob","Grep","NotebookRead","LS","read_file","glob","grep","list_directory","config_get","memory_search",...st];O3={subagent:"subagent",skill:"skill",dag:"dag"}});function Mf(e,t){return`Skill tool not available at nesting depth ${e} (max ${t}). ${ya}`}var ya,Gv=x(()=>{"use strict";ya="You are too deeply nested to delegate further \u2014 perform the work inline with your own tools instead of calling skill/agent/compose."});function GM(e){KM.add(e)}function qM(e){return KM.has(e)}var KM,qv=x(()=>{"use strict";KM=new Set});function zM(e){zv.add(e)}function JM(e){zv.delete(e)}function YM(e){Jv.add(e)}function VM(e){Jv.delete(e)}function XM(e){for(let t of zv)t(e)}function QM(e){for(let t of Jv)t(e)}var zv,Jv,Yv=x(()=>{"use strict";zv=new Set,Jv=new Set});function Of(e){return $3.has(e)}function ZM(e,t=D3){return e.length<=t?e:e.slice(0,t)+"\u2026"}function ba(e){return e.surface!==void 0?{origin:bo(e.surface),actor:or(e.depth)}:{}}var $3,D3,Vv=x(()=>{"use strict";wo();$3=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"]);D3=240});function e0(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]
973
973
  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.
@@ -1028,9 +1028,12 @@ ${wd}`:wd,baseUrl:u?void 0:a.baseUrl,maxTurns:w,maxToolUseIterations:S,depth:r+1
1028
1028
  `);continue}let l=await xo.readFile(s,"utf8"),c=JSON.parse(l);if(c.status==="running"||c.endedAt===void 0||Date.now()-c.endedAt<6048e5)continue;await xo.rm(i,{recursive:!0,force:!0})}catch(a){if(a.code==="ENOENT")continue;process.stderr.write(`[afk] bg sweep: error evicting ${o}: ${String(a)}
1029
1029
  `)}}}statusFromResult(t){return t==="succeeded"?"completed":t==="failed"?"failed":t==="cancelled"?"cancelled":"failed"}snapshot(t){return{jobId:t.jobId,subagentId:t.subagentId,label:t.label,model:t.model,startedAt:t.startedAt,status:t.status,...t.result!==void 0?{result:t.result}:{},...t.endedAt!==void 0?{endedAt:t.endedAt}:{}}}}});async function _0(e){let{handle:t,registry:n,prompt:r,model:o,parentSessionId:i}=e;if(!n)return await t.teardown().catch(l=>W("subagent-executor: handle teardown failed: "+(l instanceof Error?l.message:String(l)))),{content:'Background mode is not available in this session \u2014 no BackgroundAgentRegistry is wired. Re-issue the call with mode="foreground" or run inside `afk interactive`.',isError:!0};let s;try{s=n.register({handle:t,prompt:r,model:o??"sonnet",parentSessionId:i})}catch(l){if(l instanceof Sd)return await t.teardown().catch(c=>W("subagent-executor: handle teardown failed after cap error: "+(c instanceof Error?c.message:String(c)))),{content:l.message,isError:!0};throw l}let a={status:"running",jobId:s.jobId,subagentId:s.subagentId,label:s.label,message:`Background subagent started (jobId=${s.jobId}). It is running detached; its result will be delivered into this context automatically with the next user message once it finishes. /bgsub:join ${s.jobId} remains available for manual replay.`};return{content:JSON.stringify(a)}}var I0=x(()=>{"use strict";mk();ye()});function IX(e,t,n){return!t||!n||t===n?e:`[subagent result \xB7 model=${t} (parent: ${n})]
1030
1030
 
1031
- ${e}`}async function P0(e){let{handle:t,signal:n,prompt:r,idPrefix:o,model:i,parentModel:s,childManager:a,identity:l,depth:c,parentSessionId:d,registry:u,promotionTriggers:m,activeForegroundHandles:f}=e,g=()=>{t.cancel()};n.addEventListener("abort",g,{once:!0});let h=Date.now(),y=!1,b,w=new Promise($=>{b=$}),S,k=new Promise($=>{S=$});m.set(t.id,{fire:b,ready:k}),f.set(t.id,t);let T,A=t.runToResult(r);try{let $=await Promise.race([A.then(N=>({kind:"result",result:N})),w.then(()=>({kind:"promote"}))]);if($.kind==="promote")if(u)try{let N=u.adoptRunning({handle:t,runPromise:A,prompt:r,model:i??"sonnet",parentSessionId:d});return y=!0,n.removeEventListener("abort",g),S({jobId:N.jobId,label:N.label}),{content:JSON.stringify({status:"running",jobId:N.jobId,subagentId:N.subagentId,label:N.label,message:`Subagent backgrounded by user (jobId=${N.jobId}). It keeps running detached; its result will be delivered into this context automatically with the next user message once it finishes. /bgsub:join ${N.jobId} remains available for manual replay.`})}}catch(N){W("subagent-executor: promotion failed, staying foreground: "+(N instanceof Error?N.message:String(N))),S(null)}else S(null);let R=$.kind==="result"?$.result:await A;if(R.status==="succeeded"&&R.message){let N=R.message.content,j=typeof N=="string"?N:JSON.stringify(N),F=R.trace;return ka({...l,event:"subagent.completed",subagent_id:t.id,parent_session_id:d,status:R.status,duration_ms:Date.now()-h,content_chars:j.length,stop_reason:R.stopReason!==void 0?hn(R.stopReason,64):void 0,depth:c,tool_call_count:F?.toolCalls.length,thinking_present:F?.thinkingPresent,tool_names:F?.toolCalls.length?JSON.stringify([...new Set(F.toolCalls.map(H=>H.name))]):void 0}),T={content:IX($n(j,R.stopReason),i,s),...Ci(R.stopReason)},T}let D=R.error?.message??"Subagent failed with no output",C=R.trace;ka({...l,event:"subagent.failed",subagent_id:t.id,id_prefix:o,parent_session_id:d,status:R.status,duration_ms:Date.now()-h,error_message:hn(D),schema_error:R.schemaError?hn(R.schemaError.message):void 0,partial_output_chars:dk(R.partialOutput),stop_reason:R.stopReason!==void 0?hn(R.stopReason,64):void 0,depth:c,tool_call_count:C?.toolCalls.length,thinking_present:C?.thinkingPresent,tool_names:C?.toolCalls.length?JSON.stringify([...new Set(C.toolCalls.map(N=>N.name))]):void 0});let O=k0({status:R.status,errorMessage:D,schemaErrorMessage:R.schemaError?.message,partialOutput:R.partialOutput,subagentId:t.id});return T={content:JSON.stringify(O),isError:!0,...Ci(R.stopReason)},T}catch($){let R=$ instanceof Error?$.message:String($);throw ka({...l,event:"subagent.failed",subagent_id:t.id,id_prefix:o,parent_session_id:d,status:"failed",duration_ms:Date.now()-h,error_message:hn(R),depth:c}),$}finally{if(m.delete(t.id),f.delete(t.id),S(null),!y){n.removeEventListener("abort",g),await a?.teardownAll(),await t.teardown({deferInjectContextToCaller:!0});let $=t.getLastStopInjectContext?.();if(Nf(T,$),e.isolationTeardown){let{repoRoot:R,worktreePath:D}=e.isolationTeardown,C=await cP({repoRoot:R,worktreePath:D});C.preserved&&W(`[isolation] preserved worktree ${D} (${C.reason}) \u2014 locked so the sweep will not reap it; recover via the worktree tool`)}}}}var M0=x(()=>{"use strict";ft();ye();Gf();Zv();Fm()});var cr,vd=x(()=>{"use strict";ze();ui();Dn();va();mo();wo();S0();Gf();E0();I0();M0();Fm();ye();Dn();cr=class e{constructor(t){this.ctx=t;this.currentCwd=t.cwd}ctx;currentCwd;isolationCounter=0;setCwd(t){this.currentCwd=t,this.ctx.subagentManager.setCwd(t)}describeAgentTool(){return ck(this.ctx.agentRegistry)}promotionTriggers=new Map;activeForegroundHandles=new Map;hasPromotableForeground(){return this.ctx.backgroundRegistry!==void 0&&this.promotionTriggers.size>0}hasActiveForeground(){return this.activeForegroundHandles.size>0}async cancelActiveForeground(){let t=[...this.activeForegroundHandles.values()];return t.length===0?0:(await Promise.all(t.map(n=>n.cancel().catch(()=>{}))),t.length)}async promoteActiveForeground(){let t=[...this.promotionTriggers.values()];return t.forEach(r=>r.fire()),(await Promise.all(t.map(r=>r.ready))).filter(r=>r!==null)}getSubagentsLite(){let t=this.ctx.subagentManager.list().map(r=>({id:r.id,status:r.status})),n=this.ctx.backgroundRegistry?this.ctx.backgroundRegistry.list().map(r=>({jobId:r.jobId,status:r.status,startedAt:new Date(r.startedAt).toISOString(),label:r.label.length>0?r.label:null})):[];return{active:t,backgroundJobs:n}}async execute(t){if(t.signal.aborted)return{content:"Agent tool call aborted",isError:!0};let n;try{n=w0(t.input)}catch(y){return{content:`Agent tool input validation failed: ${y instanceof Error?y.message:String(y)}`,isError:!0}}let r;if(n.agent_type!==void 0&&(r=this.ctx.agentRegistry?.get(n.agent_type),r===void 0)){let y=[...this.ctx.agentRegistry?.keys()??[]].sort().join(", ");return{content:`Agent type "${n.agent_type}" not found. Available agent types: ${y.length>0?y:"(none)"}`,isError:!0}}let o=this.ctx.nestedAgentAllowlist;if(o!==void 0){let y=n.agent_type;if(y===void 0||!o.includes(y))return{content:o.length===0?"This agent is not permitted to dispatch any nested agents (its definition granted the dispatch tool but named zero allowed types, e.g. `Agent()`). Complete the task with your own tools.":`This agent may only dispatch the following agent type(s): ${o.join(", ")}. `+(y===void 0?"A bare dispatch with no agent_type is not permitted here \u2014 set agent_type to one of the allowed types, or complete the task with your own tools.":`agent_type "${y}" is out of scope.`),isError:!0}}let i=this.ctx.depth,s=this.ctx.maxDepth??Mi,a=this.ctx.surface!==void 0?{origin:bo(this.ctx.surface),actor:or(i)}:{},l=this.ctx.subagentManager.getReadScopeInputs?.()??{parentReadRoots:void 0,parentCwd:void 0},c=Ac({parentReadRoots:l.parentReadRoots,parentCwd:l.parentCwd,childCwd:n.cwd??this.currentCwd}),{childConfig:d,childParentSession:u,childManager:m,childWriteCapable:f}=T0({parsed:n,namedAgent:r,depth:i,maxDepth:s,currentCwd:this.currentCwd,...c!==void 0?{childInheritedReadRoots:c}:{},signal:t.signal,defaultConfig:this.ctx.defaultConfig,...this.ctx.resolveApiKeyForModel!==void 0?{resolveApiKeyForModel:this.ctx.resolveApiKeyForModel}:{},defaultSubagentModel:this.ctx.defaultSubagentModel,...this.ctx.childProviderFactory!==void 0?{childProviderFactory:this.ctx.childProviderFactory}:{},...this.ctx.childSkillExecutorFactory!==void 0?{childSkillExecutorFactory:this.ctx.childSkillExecutorFactory}:{},...this.ctx.surface!==void 0?{surface:this.ctx.surface}:{},...this.ctx.allowedTools!==void 0?{allowedTools:this.ctx.allowedTools}:{},...this.ctx.readOnlyBash!==void 0?{readOnlyBash:this.ctx.readOnlyBash}:{},...this.ctx.agentRegistry!==void 0?{agentRegistry:this.ctx.agentRegistry}:{},...this.ctx.parentModel!==void 0?{parentModel:this.ctx.parentModel}:{},...this.ctx.traceWriter!==void 0?{traceWriter:this.ctx.traceWriter}:{},createChildExecutor:y=>new e(y)}),g;if(n.isolation==="worktree")if(!f)W(`[isolation] skipped worktree for read-only dispatch (agent_type=${n.agent_type??"generic"}) \u2014 nothing to isolate`);else{let y=this.currentCwd??process.cwd();try{let b=await lP({cwd:y,slugHint:`iso-${n.id_prefix}-${++this.isolationCounter}-${Math.random().toString(36).slice(2,8)}`});d.cwd=b.path,g={repoRoot:b.repoRoot,worktreePath:b.path}}catch(b){return{content:`Failed to create isolated worktree for the subagent: ${b instanceof Error?b.message:String(b)}. isolation:"worktree" requires the dispatching session to run inside a git repository.`,isError:!0}}}n.mode==="background"&&d.timeoutMs===void 0&&(d.timeoutMs=O0);let h;try{h=await this.ctx.subagentManager.forkSubagent({parent:this.ctx.parentSession,parentId:t.id,config:d,idPrefix:n.id_prefix,agentType:r!==void 0?r.name:n.id_prefix&&n.id_prefix!=="agent-tool"?er(n.id_prefix).replace(/[\r\n]+/g," ").trim()||"agent":er(n.prompt).replace(/[\r\n]+/g," ").slice(0,40).trim()||"agent",...r!==void 0?{resolvedAgentType:r.name}:{},promptHead:er(n.prompt).replace(/[\r\n]+/g," ").slice(0,80).trim(),denyElicitations:!0}),u!==void 0&&(u.sessionId=h.id)}catch(y){let b=y instanceof Error?y.message:String(y);return ka({...a,event:"subagent.failed",subagent_id:"unknown",id_prefix:n.id_prefix,parent_session_id:this.ctx.parentSession.sessionId,status:"failed",error_message:hn(b),depth:i}),{content:`Failed to fork subagent: ${b}`,isError:!0}}return n.mode==="background"?_0({handle:h,registry:this.ctx.backgroundRegistry,prompt:n.prompt,model:d.model,parentSessionId:this.ctx.parentSession.sessionId}):P0({handle:h,signal:t.signal,prompt:n.prompt,idPrefix:n.id_prefix,model:d.model,...this.ctx.parentModel!==void 0?{parentModel:this.ctx.parentModel}:{},childManager:m,identity:a,depth:i,parentSessionId:this.ctx.parentSession.sessionId,registry:this.ctx.backgroundRegistry,promotionTriggers:this.promotionTriggers,activeForegroundHandles:this.activeForegroundHandles,...g!==void 0?{isolationTeardown:g}:{}})}}});function fk(e,t,n,r=!1,o){let{ctx:i,currentCwd:s}=e,a=i.depth??0,l=i.maxDepth??Mi,c={...t},d=r&&o!==void 0?o.filter(y=>Xf.includes(y)):r?[...Xf]:o,u=r;if(!i.childProviderFactory||a>=l)return r?c.provider=D0(c.model,i.openaiBaseUrl,d):d!==void 0&&(c.provider=zf(d,c.model,u,i.openaiBaseUrl)),{childConfig:c,childManager:void 0};let m=co(i.getReadScopeInputs?.(),s),f=new ce({parentAbortSignal:n,...i.traceWriter!==void 0?{traceWriter:i.traceWriter}:{},...i.surface!==void 0?{surface:i.surface}:{},...s!==void 0?{cwd:s}:{},...m!==void 0?{parentReadRoots:m}:{}}),g=new cr({subagentManager:f,parentSession:Pi(n),defaultConfig:{model:c.model,apiKey:i.apiKey,...i.baseUrl!==void 0?{baseUrl:i.baseUrl}:{},...i.openaiBaseUrl!==void 0?{openaiBaseUrl:i.openaiBaseUrl}:{}},...i.surface!==void 0?{surface:i.surface}:{},defaultSubagentModel:i.defaultSubagentModel,childProviderFactory:i.childProviderFactory,childSkillExecutorFactory:i.childSkillExecutorFactory,...i.resolveApiKeyForModel!==void 0?{resolveApiKeyForModel:i.resolveApiKeyForModel}:{},depth:a+1,maxDepth:l,...s!==void 0?{cwd:s}:{},...i.traceWriter!==void 0?{traceWriter:i.traceWriter}:{},...i.backgroundRegistry!==void 0?{backgroundRegistry:i.backgroundRegistry}:{},...d!==void 0?{allowedTools:d}:{},...u?{readOnlyBash:!0}:{},...i.agentRegistry!==void 0?{agentRegistry:i.agentRegistry}:{},...c.model!==void 0?{parentModel:c.model}:{}}),h=i.childSkillExecutorFactory?i.childSkillExecutorFactory(a+1,l,n,s,{parentReadRoots:m,parentCwd:s}):void 0;return c.provider=i.childProviderFactory({childExecutor:g,...h!==void 0?{childSkillExecutor:h}:{},...c.model!==void 0?{model:c.model}:{},...d!==void 0?{allowedTools:d}:{},...u?{readOnlyBash:!0}:{}}),{childConfig:c,childManager:f}}var $0=x(()=>{"use strict";ze();ui();Dn();vd()});function F0(e,t){let{ctx:n,currentCwd:r}=e,o=co(n.getReadScopeInputs?.(),r);return new ce({parentAbortSignal:t.parentAbortSignal,apiKey:t.apiKey,parentModel:t.parentModel,...n.baseUrl!==void 0?{baseUrl:n.baseUrl}:{},...n.traceWriter!==void 0?{traceWriter:n.traceWriter}:{},...n.surface!==void 0?{surface:n.surface}:{},progressSink:Cn(),...r!==void 0?{cwd:r}:{},...o!==void 0?{parentReadRoots:o}:{}})}async function L0(e,t,n,r){let{ctx:o}=e;if(r.signal.aborted)return{content:"Skill call aborted",isError:!0};let i=t.readOnly===!0||Qf.has(t.name),s;try{if(s=We(t.name)["system.md"],!s)return{content:`Skill "${t.name}" has context: "fork" but no prompts/system.md found`,isError:!0}}catch(m){return{content:`Failed to load skill prompts: ${m instanceof Error?m.message:String(m)}`,isError:!0}}let a=t.model??o.defaultSubagentModel??o.defaultModel??"sonnet",l=gd({childModel:a,resolved:o.resolveApiKeyForModel?o.resolveApiKeyForModel(a):Fe(a),parentApiKey:o.apiKey}),c=F0(e,{apiKey:l,parentModel:a,parentAbortSignal:r.signal}),{childConfig:d,childManager:u}=fk(e,{model:a,systemPrompt:s,isSkillDispatch:!0,...o.traceWriter!==void 0?{traceWriter:o.traceWriter}:{}},r.signal,i);return B0(e,{manager:c,childManager:u,childConfig:d,label:t.name,idPrefix:`skill-fork-${t.name}`,parentId:r.id,args:n,noOutputError:"Forked skill failed with no output",errorPrefix:"Forked skill execution error"})}async function N0(e,t,n,r,o,i,s=!1,a,l){let{ctx:c}=e;if(i.signal.aborted)return{content:"Skill call aborted",isError:!0};let d=l??c.defaultSubagentModel??c.defaultModel??"sonnet",u=gd({childModel:d,resolved:c.resolveApiKeyForModel?c.resolveApiKeyForModel(d):Fe(d),parentApiKey:c.apiKey}),m=F0(e,{apiKey:u,parentModel:d,parentAbortSignal:i.signal}),f={model:d,systemPrompt:$f(n,o),env:{PLUGIN_ROOT:r},isSkillDispatch:!0,...c.traceWriter!==void 0?{traceWriter:c.traceWriter}:{}},{childConfig:g,childManager:h}=fk(e,f,i.signal,s,a);return B0(e,{manager:m,childManager:h,childConfig:g,label:t,idPrefix:`skill-${t}`,parentId:i.id,args:o,noOutputError:"Plugin skill failed with no output",errorPrefix:"Plugin skill execution error"})}async function B0(e,t){let{manager:n,childManager:r,childConfig:o,label:i,idPrefix:s,parentId:a,args:l,noOutputError:c,errorPrefix:d}=t,u,m;try{u=await n.forkSubagent({parent:e.ctx.parentSession,config:o,idPrefix:s,parentId:a,agentType:i});let f=l&&l.length>0?l:`Run the ${i} skill now, following the instructions in your system prompt.`,g=await u.runToResult(f);return g.status==="succeeded"&&g.message?(m={content:$n(g.message.content,g.stopReason),...Ci(g.stopReason)},m):g.status==="cancelled"&&typeof g.partialOutput=="string"&&g.partialOutput.length>0?(m={content:`[skill cancelled mid-flight \u2014 partial output preserved below]
1031
+ ${e}`}async function P0(e){let{handle:t,signal:n,prompt:r,idPrefix:o,model:i,parentModel:s,childManager:a,identity:l,depth:c,parentSessionId:d,registry:u,promotionTriggers:m,activeForegroundHandles:f}=e,g=()=>{t.cancel()};n.addEventListener("abort",g,{once:!0});let h=Date.now(),y=!1,b,w=new Promise($=>{b=$}),S,k=new Promise($=>{S=$});m.set(t.id,{fire:b,ready:k}),f.set(t.id,t);let T,A=t.runToResult(r);try{let $=await Promise.race([A.then(N=>({kind:"result",result:N})),w.then(()=>({kind:"promote"}))]);if($.kind==="promote")if(u)try{let N=u.adoptRunning({handle:t,runPromise:A,prompt:r,model:i??"sonnet",parentSessionId:d});return y=!0,n.removeEventListener("abort",g),S({jobId:N.jobId,label:N.label}),{content:JSON.stringify({status:"running",jobId:N.jobId,subagentId:N.subagentId,label:N.label,message:`Subagent backgrounded by user (jobId=${N.jobId}). It keeps running detached; its result will be delivered into this context automatically with the next user message once it finishes. /bgsub:join ${N.jobId} remains available for manual replay.`})}}catch(N){W("subagent-executor: promotion failed, staying foreground: "+(N instanceof Error?N.message:String(N))),S(null)}else S(null);let R=$.kind==="result"?$.result:await A;if(R.status==="succeeded"&&R.message){let N=R.message.content,j=typeof N=="string"?N:JSON.stringify(N),F=R.trace;return ka({...l,event:"subagent.completed",subagent_id:t.id,parent_session_id:d,status:R.status,duration_ms:Date.now()-h,content_chars:j.length,stop_reason:R.stopReason!==void 0?hn(R.stopReason,64):void 0,depth:c,tool_call_count:F?.toolCalls.length,thinking_present:F?.thinkingPresent,tool_names:F?.toolCalls.length?JSON.stringify([...new Set(F.toolCalls.map(H=>H.name))]):void 0}),T={content:IX($n(j,R.stopReason),i,s),...Ci(R.stopReason)},T}let D=R.error?.message??"Subagent failed with no output",C=R.trace;ka({...l,event:"subagent.failed",subagent_id:t.id,id_prefix:o,parent_session_id:d,status:R.status,duration_ms:Date.now()-h,error_message:hn(D),schema_error:R.schemaError?hn(R.schemaError.message):void 0,partial_output_chars:dk(R.partialOutput),stop_reason:R.stopReason!==void 0?hn(R.stopReason,64):void 0,depth:c,tool_call_count:C?.toolCalls.length,thinking_present:C?.thinkingPresent,tool_names:C?.toolCalls.length?JSON.stringify([...new Set(C.toolCalls.map(N=>N.name))]):void 0});let O=k0({status:R.status,errorMessage:D,schemaErrorMessage:R.schemaError?.message,partialOutput:R.partialOutput,subagentId:t.id});return T={content:JSON.stringify(O),isError:!0,...Ci(R.stopReason)},T}catch($){let R=$ instanceof Error?$.message:String($);throw ka({...l,event:"subagent.failed",subagent_id:t.id,id_prefix:o,parent_session_id:d,status:"failed",duration_ms:Date.now()-h,error_message:hn(R),depth:c}),$}finally{if(m.delete(t.id),f.delete(t.id),S(null),!y){n.removeEventListener("abort",g),await a?.teardownAll(),await t.teardown({deferInjectContextToCaller:!0});let $=t.getLastStopInjectContext?.();if(Nf(T,$),e.isolationTeardown){let{repoRoot:R,worktreePath:D}=e.isolationTeardown,C=await cP({repoRoot:R,worktreePath:D});C.preserved&&W(`[isolation] preserved worktree ${D} (${C.reason}) \u2014 locked so the sweep will not reap it; recover via the worktree tool`)}}}}var M0=x(()=>{"use strict";ft();ye();Gf();Zv();Fm()});var cr,vd=x(()=>{"use strict";ze();ui();Dn();va();mo();wo();S0();Gf();E0();I0();M0();Fm();ye();Dn();cr=class e{constructor(t){this.ctx=t;this.currentCwd=t.cwd}ctx;currentCwd;isolationCounter=0;setCwd(t){this.currentCwd=t,this.ctx.subagentManager.setCwd(t)}describeAgentTool(){return ck(this.ctx.agentRegistry)}promotionTriggers=new Map;activeForegroundHandles=new Map;hasPromotableForeground(){return this.ctx.backgroundRegistry!==void 0&&this.promotionTriggers.size>0}hasActiveForeground(){return this.activeForegroundHandles.size>0}async cancelActiveForeground(){let t=[...this.activeForegroundHandles.values()];return t.length===0?0:(await Promise.all(t.map(n=>n.cancel().catch(()=>{}))),t.length)}async promoteActiveForeground(){let t=[...this.promotionTriggers.values()];return t.forEach(r=>r.fire()),(await Promise.all(t.map(r=>r.ready))).filter(r=>r!==null)}getSubagentsLite(){let t=this.ctx.subagentManager.list().map(r=>({id:r.id,status:r.status})),n=this.ctx.backgroundRegistry?this.ctx.backgroundRegistry.list().map(r=>({jobId:r.jobId,status:r.status,startedAt:new Date(r.startedAt).toISOString(),label:r.label.length>0?r.label:null})):[];return{active:t,backgroundJobs:n}}async execute(t){if(t.signal.aborted)return{content:"Agent tool call aborted",isError:!0};let n;try{n=w0(t.input)}catch(y){return{content:`Agent tool input validation failed: ${y instanceof Error?y.message:String(y)}`,isError:!0}}let r;if(n.agent_type!==void 0&&(r=this.ctx.agentRegistry?.get(n.agent_type),r===void 0)){let y=[...this.ctx.agentRegistry?.keys()??[]].sort().join(", ");return{content:`Agent type "${n.agent_type}" not found. Available agent types: ${y.length>0?y:"(none)"}`,isError:!0}}let o=this.ctx.nestedAgentAllowlist;if(o!==void 0){let y=n.agent_type;if(y===void 0||!o.includes(y))return{content:o.length===0?"This agent is not permitted to dispatch any nested agents (its definition granted the dispatch tool but named zero allowed types, e.g. `Agent()`). Complete the task with your own tools.":`This agent may only dispatch the following agent type(s): ${o.join(", ")}. `+(y===void 0?"A bare dispatch with no agent_type is not permitted here \u2014 set agent_type to one of the allowed types, or complete the task with your own tools.":`agent_type "${y}" is out of scope.`),isError:!0}}let i=this.ctx.depth,s=this.ctx.maxDepth??Mi,a=this.ctx.surface!==void 0?{origin:bo(this.ctx.surface),actor:or(i)}:{},l=this.ctx.subagentManager.getReadScopeInputs?.()??{parentReadRoots:void 0,parentCwd:void 0},c=Ac({parentReadRoots:l.parentReadRoots,parentCwd:l.parentCwd,childCwd:n.cwd??this.currentCwd}),{childConfig:d,childParentSession:u,childManager:m,childWriteCapable:f}=T0({parsed:n,namedAgent:r,depth:i,maxDepth:s,currentCwd:this.currentCwd,...c!==void 0?{childInheritedReadRoots:c}:{},signal:t.signal,defaultConfig:this.ctx.defaultConfig,...this.ctx.resolveApiKeyForModel!==void 0?{resolveApiKeyForModel:this.ctx.resolveApiKeyForModel}:{},defaultSubagentModel:this.ctx.defaultSubagentModel,...this.ctx.childProviderFactory!==void 0?{childProviderFactory:this.ctx.childProviderFactory}:{},...this.ctx.childSkillExecutorFactory!==void 0?{childSkillExecutorFactory:this.ctx.childSkillExecutorFactory}:{},...this.ctx.surface!==void 0?{surface:this.ctx.surface}:{},...this.ctx.allowedTools!==void 0?{allowedTools:this.ctx.allowedTools}:{},...this.ctx.readOnlyBash!==void 0?{readOnlyBash:this.ctx.readOnlyBash}:{},...this.ctx.agentRegistry!==void 0?{agentRegistry:this.ctx.agentRegistry}:{},...this.ctx.parentModel!==void 0?{parentModel:this.ctx.parentModel}:{},...this.ctx.traceWriter!==void 0?{traceWriter:this.ctx.traceWriter}:{},createChildExecutor:y=>new e(y)}),g;if(n.isolation==="worktree")if(!f)W(`[isolation] skipped worktree for read-only dispatch (agent_type=${n.agent_type??"generic"}) \u2014 nothing to isolate`);else{let y=this.currentCwd??process.cwd();try{let b=await lP({cwd:y,slugHint:`iso-${n.id_prefix}-${++this.isolationCounter}-${Math.random().toString(36).slice(2,8)}`});d.cwd=b.path,g={repoRoot:b.repoRoot,worktreePath:b.path}}catch(b){return{content:`Failed to create isolated worktree for the subagent: ${b instanceof Error?b.message:String(b)}. isolation:"worktree" requires the dispatching session to run inside a git repository.`,isError:!0}}}n.mode==="background"&&d.timeoutMs===void 0&&(d.timeoutMs=O0);let h;try{h=await this.ctx.subagentManager.forkSubagent({parent:this.ctx.parentSession,parentId:t.id,config:d,idPrefix:n.id_prefix,agentType:r!==void 0?r.name:n.id_prefix&&n.id_prefix!=="agent-tool"?er(n.id_prefix).replace(/[\r\n]+/g," ").trim()||"agent":er(n.prompt).replace(/[\r\n]+/g," ").slice(0,40).trim()||"agent",...r!==void 0?{resolvedAgentType:r.name}:{},promptHead:er(n.prompt).replace(/[\r\n]+/g," ").slice(0,80).trim(),denyElicitations:!0}),u!==void 0&&(u.sessionId=h.id)}catch(y){let b=y instanceof Error?y.message:String(y);return ka({...a,event:"subagent.failed",subagent_id:"unknown",id_prefix:n.id_prefix,parent_session_id:this.ctx.parentSession.sessionId,status:"failed",error_message:hn(b),depth:i}),{content:`Failed to fork subagent: ${b}`,isError:!0}}return n.mode==="background"?_0({handle:h,registry:this.ctx.backgroundRegistry,prompt:n.prompt,model:d.model,parentSessionId:this.ctx.parentSession.sessionId}):P0({handle:h,signal:t.signal,prompt:n.prompt,idPrefix:n.id_prefix,model:d.model,...this.ctx.parentModel!==void 0?{parentModel:this.ctx.parentModel}:{},childManager:m,identity:a,depth:i,parentSessionId:this.ctx.parentSession.sessionId,registry:this.ctx.backgroundRegistry,promotionTriggers:this.promotionTriggers,activeForegroundHandles:this.activeForegroundHandles,...g!==void 0?{isolationTeardown:g}:{}})}}});function fk(e,t,n,r=!1,o){let{ctx:i,currentCwd:s}=e,a=i.depth??0,l=i.maxDepth??Mi,c={...t},d=r&&o!==void 0?o.filter(y=>Xf.includes(y)):r?[...Xf]:o,u=r;if(!i.childProviderFactory||a>=l)return r?c.provider=D0(c.model,i.openaiBaseUrl,d):d!==void 0&&(c.provider=zf(d,c.model,u,i.openaiBaseUrl)),{childConfig:c,childManager:void 0};let m=co(i.getReadScopeInputs?.(),s),f=new ce({parentAbortSignal:n,...i.traceWriter!==void 0?{traceWriter:i.traceWriter}:{},...i.surface!==void 0?{surface:i.surface}:{},...s!==void 0?{cwd:s}:{},...m!==void 0?{parentReadRoots:m}:{}}),g=new cr({subagentManager:f,parentSession:Pi(n),defaultConfig:{model:c.model,apiKey:i.apiKey,...i.baseUrl!==void 0?{baseUrl:i.baseUrl}:{},...i.openaiBaseUrl!==void 0?{openaiBaseUrl:i.openaiBaseUrl}:{}},...i.surface!==void 0?{surface:i.surface}:{},defaultSubagentModel:i.defaultSubagentModel,childProviderFactory:i.childProviderFactory,childSkillExecutorFactory:i.childSkillExecutorFactory,...i.resolveApiKeyForModel!==void 0?{resolveApiKeyForModel:i.resolveApiKeyForModel}:{},depth:a+1,maxDepth:l,...s!==void 0?{cwd:s}:{},...i.traceWriter!==void 0?{traceWriter:i.traceWriter}:{},...i.backgroundRegistry!==void 0?{backgroundRegistry:i.backgroundRegistry}:{},...d!==void 0?{allowedTools:d}:{},...u?{readOnlyBash:!0}:{},...i.agentRegistry!==void 0?{agentRegistry:i.agentRegistry}:{},...c.model!==void 0?{parentModel:c.model}:{}}),h=i.childSkillExecutorFactory?i.childSkillExecutorFactory(a+1,l,n,s,{parentReadRoots:m,parentCwd:s}):void 0;return c.provider=i.childProviderFactory({childExecutor:g,...h!==void 0?{childSkillExecutor:h}:{},...c.model!==void 0?{model:c.model}:{},...d!==void 0?{allowedTools:d}:{},...u?{readOnlyBash:!0}:{}}),{childConfig:c,childManager:f}}var $0=x(()=>{"use strict";ze();ui();Dn();vd()});function F0(e,t){let{ctx:n,currentCwd:r}=e,o=co(n.getReadScopeInputs?.(),r);return new ce({parentAbortSignal:t.parentAbortSignal,apiKey:t.apiKey,parentModel:t.parentModel,...n.baseUrl!==void 0?{baseUrl:n.baseUrl}:{},...n.traceWriter!==void 0?{traceWriter:n.traceWriter}:{},...n.surface!==void 0?{surface:n.surface}:{},progressSink:Cn(),...r!==void 0?{cwd:r}:{},...o!==void 0?{parentReadRoots:o}:{}})}async function L0(e,t,n,r){let{ctx:o}=e;if(r.signal.aborted)return{content:"Skill call aborted",isError:!0};let i=t.readOnly===!0||Qf.has(t.name),s;try{if(s=We(t.name)["system.md"],!s)return{content:`Skill "${t.name}" has context: "fork" but no prompts/system.md found`,isError:!0}}catch(m){return{content:`Failed to load skill prompts: ${m instanceof Error?m.message:String(m)}`,isError:!0}}let a=t.model??o.defaultSubagentModel??o.defaultModel??"sonnet",l=gd({childModel:a,resolved:o.resolveApiKeyForModel?o.resolveApiKeyForModel(a):Fe(a),parentApiKey:o.apiKey}),c=F0(e,{apiKey:l,parentModel:a,parentAbortSignal:r.signal}),{childConfig:d,childManager:u}=fk(e,{model:a,systemPrompt:s,isSkillDispatch:!0,skillDispatchName:t.name,...o.traceWriter!==void 0?{traceWriter:o.traceWriter}:{}},r.signal,i);return B0(e,{manager:c,childManager:u,childConfig:d,label:t.name,idPrefix:`skill-fork-${t.name}`,parentId:r.id,args:n,noOutputError:"Forked skill failed with no output",errorPrefix:"Forked skill execution error"})}async function N0(e,t,n,r,o,i,s=!1,a,l){let{ctx:c}=e;if(i.signal.aborted)return{content:"Skill call aborted",isError:!0};let d=l??c.defaultSubagentModel??c.defaultModel??"sonnet",u=gd({childModel:d,resolved:c.resolveApiKeyForModel?c.resolveApiKeyForModel(d):Fe(d),parentApiKey:c.apiKey}),m=F0(e,{apiKey:u,parentModel:d,parentAbortSignal:i.signal}),f={model:d,systemPrompt:$f(n,o),env:{PLUGIN_ROOT:r},isSkillDispatch:!0,skillDispatchName:t,...c.traceWriter!==void 0?{traceWriter:c.traceWriter}:{}},{childConfig:g,childManager:h}=fk(e,f,i.signal,s,a);return B0(e,{manager:m,childManager:h,childConfig:g,label:t,idPrefix:`skill-${t}`,parentId:i.id,args:o,noOutputError:"Plugin skill failed with no output",errorPrefix:"Plugin skill execution error"})}async function B0(e,t){let{manager:n,childManager:r,childConfig:o,label:i,idPrefix:s,parentId:a,args:l,noOutputError:c,errorPrefix:d}=t,u,m;try{u=await n.forkSubagent({parent:e.ctx.parentSession,config:o,idPrefix:s,parentId:a,agentType:i});let f=`Run the ${i} skill now, following the instructions in your system prompt.`,g=l&&l.length>0?`${f}
1032
1032
 
1033
- ${g.partialOutput}`,...Ci(g.stopReason)},m):(m={content:g.error?.message??c,isError:!0,...Ci(g.stopReason)},m)}catch(f){let g=f instanceof Error?f.message:String(f);return{content:`${d}: ${g}`,isError:!0}}finally{u&&await u.teardown({deferInjectContextToCaller:!0}).catch(W);let f=u?.getLastStopInjectContext?.();Nf(m,f),await r?.teardownAll(),await n.teardownAll()}}var U0=x(()=>{"use strict";ze();ui();ft();Zv();Dn();Bf();Rt();Cr();sn();ye();$0();Xv()});function PX(e){if(typeof e!="object"||e===null)return;let t=e.name;if(typeof t!="string")return;let n=t.trim();return n.length>0?n:void 0}function MX(e){if(typeof e!="object"||e===null)throw new Error("Skill tool input must be an object");let t=e,n=t.name;if(typeof n!="string"||n.trim().length===0)throw new Error('Skill tool input must have a non-empty "name" field');let r,o=t.arguments;if(o!==void 0){if(typeof o!="string")throw new Error('Skill tool "arguments" must be a string');r=o}return{name:n.trim(),arguments:r}}var dr,kd=x(()=>{"use strict";Ft();sr();Dn();Gv();Qn();qv();Yv();Vv();Xv();U0();dr=class{constructor(t){this.ctx=t;this.currentCwd=t.cwd}ctx;pluginBodies=null;currentCwd;setCwd(t){this.currentCwd=t,this.pluginBodies=null}internals(){return{ctx:this.ctx,currentCwd:this.currentCwd}}async execute(t){if(t.signal.aborted)return{content:"Skill tool call aborted",isError:!0};let n=this.ctx.depth??0,r=this.ctx.maxDepth??Mi;if(n>=r){let c=PX(t.input);return Ne({...ba(this.ctx),event:"delegation.skipped",parent_session_id:this.ctx.parentSession.sessionId,reason:"max_depth",depth:n,requested_name:c}).catch(()=>{}),{content:Mf(n,r),isError:!0}}let o;try{o=MX(t.input)}catch(c){return{content:`Skill tool input validation failed: ${c instanceof Error?c.message:String(c)}`,isError:!0}}let i;try{i=Ye(o.name)}catch{}if(i)return await this.executeRegistrySkill(i,o.arguments,t);let s=this.getPluginSkillBody(o.name);if(s){if(s.context==="fork"){let d=s.readOnly===!0||Qf.has(o.name);return await N0(this.internals(),o.name,s.body,s.pluginPath,o.arguments,t,d,s.allowedTools,s.model)}let c=s.body.replace(/\$\{PLUGIN_ROOT(?::-(?:[^{}]|\$\{[^{}]*\})*)?\}|\$PLUGIN_ROOT\b/g,()=>s.pluginPath);return r0(this.internals(),o.name,c,o.arguments,t)}let l=Oi(this.ctx.pluginConfigs,this.currentCwd!==void 0?{cwd:this.currentCwd}:void 0).map(c=>c.name).join(", ");return{content:`Skill "${o.name}" not found. Available skills: ${l||"(none)"}`,isError:!0}}async executeRegistrySkill(t,n,r){if(r.signal.aborted)return{content:"Skill call aborted",isError:!0};if(t.context==="fork")return L0(this.internals(),t,n,r);if(t.context==="load")return n0(this.internals(),t,n,r);let o=qM(t.name);o&&QM(t.name);let i=this.ctx.depth??0;Ne({...ba(this.ctx),event:"skill.dispatched",requested_name:t.name,parent_session_id:this.ctx.parentSession.sessionId,depth:i,...Of(t.name)?{is_gate:!0}:{},...t.model!==void 0?{model:t.model}:{}}).catch(()=>{});let s=Date.now(),a,l;try{l=await t.handler(n&&n.length>0?n:void 0,this.ctx.parentSession,{apiKey:this.ctx.apiKey,defaultModel:this.ctx.defaultModel,defaultSubagentModel:this.ctx.defaultSubagentModel,callId:r.id,dispatchSkill:this.createDispatchSkillCallback(r),...this.ctx.traceWriter!==void 0?{traceWriter:this.ctx.traceWriter}:{},...this.ctx.getReadScopeInputs!==void 0?{getReadScopeInputs:this.ctx.getReadScopeInputs}:{}})}catch(d){a=d}finally{let d=Date.now()-s;o&&XM({skillName:t.name,durationMs:d,...a!==void 0?{isError:!0}:{}});let u=a!==void 0?a instanceof Error?a.message:String(a):void 0,m=a===void 0?typeof l=="string"?l.length:l!=null?JSON.stringify(l).length:0:void 0;Ne({...ba(this.ctx),event:"skill.completed",requested_name:t.name,parent_session_id:this.ctx.parentSession.sessionId,status:a!==void 0?"failed":"succeeded",duration_ms:d,depth:i,...m!==void 0?{content_chars:m}:{},...u!==void 0?{error_message:ZM(u)}:{},...t.model!==void 0?{model:t.model}:{}}).catch(()=>{})}return a!==void 0?{content:`Skill execution error: ${a instanceof Error?a.message:String(a)}`,isError:!0}:{content:typeof l=="string"?l:l!=null?JSON.stringify(l):"Skill completed successfully."}}getPluginSkillBody(t){return this.pluginBodies||(this.pluginBodies=Td(this.ctx.pluginConfigs,this.currentCwd!==void 0?{cwd:this.currentCwd}:void 0)),this.pluginBodies.get(t)}createDispatchSkillCallback(t){return async(n,r)=>{let o={id:`${t.id}-dispatch-${n}`,name:"skill",input:{name:n,...r!==void 0?{arguments:r}:{}},signal:t.signal},i=await this.execute(o);if(i.isError)throw new Error(i.content);return i.content}}}});function Pi(e){return{sessionId:void 0,getInputStreamRef:()=>({pushUserMessage:()=>{}}),abortSignal:e}}function Ea(e={}){return({childExecutor:t,childSkillExecutor:n,model:r,allowedTools:o,readOnlyBash:i})=>{let s={permissions:{allowedTools:o??qf},subagentExecutor:t,...n!==void 0?{skillExecutor:n}:{},...i===!0?{readOnlyBash:!0}:{}};return re(typeof r=="string"?r:void 0)==="openai-compatible"?new Xt({...s,...e.openaiBaseUrl!==void 0?{baseURL:e.openaiBaseUrl}:{},readOnlyMemory:!0}):new tt({...s,readOnlyMemory:!0})}}function D0(e,t,n){let r={allowedTools:[...n??Xf]};return re(typeof e=="string"?e:void 0)==="openai-compatible"?new Xt({permissions:r,readOnlyBash:!0,readOnlyMemory:!0,...t!==void 0?{baseURL:t}:{}}):new tt({permissions:r,readOnlyBash:!0,readOnlyMemory:!0})}function xa(e,t,n,r,o,i,s,a,l,c,d,u){let m=(f,g,h,y,b)=>{let w=y??s;return new dr({parentSession:Pi(h),defaultModel:e,...c!==void 0?{defaultSubagentModel:c}:{},apiKey:t,...r!==void 0?{baseUrl:r}:{},...u!==void 0?{openaiBaseUrl:u}:{},depth:f,maxDepth:g,childProviderFactory:n,childSkillExecutorFactory:m,...o!==void 0?{traceWriter:o}:{},...i!==void 0?{backgroundRegistry:i}:{},...w!==void 0?{cwd:w}:{},...a!==void 0?{resolveApiKeyForModel:a}:{},...l!==void 0?{surface:l}:{},...d!==void 0?{agentRegistry:d}:{},...b!==void 0?{getReadScopeInputs:()=>b}:{}})};return m}function zf(e,t,n=!1,r){let o={allowedTools:[...e]};return re(typeof t=="string"?t:void 0)==="openai-compatible"?new Xt({permissions:o,...n?{readOnlyBash:!0}:{},...r!==void 0?{baseURL:r}:{}}):new tt({permissions:o,...n?{readOnlyBash:!0}:{}})}function j0(e,t){let n={allowedTools:[...WM]};return re(typeof t=="string"?t:void 0)==="openai-compatible"?new Xt({permissions:n}):new tt({permissions:n})}var Mi,qf,Xf,Qf,Dn=x(()=>{"use strict";$i();dd();He();ln();dn();md();kd();Mi=3;qf=[...Lt,...st,"memory_search","agent","skill"],Xf=["read_file","glob","grep","list_directory","config_get","bash","web_scrape",...st,"memory_search","agent","skill"],Qf=new Set(["ground-state"])});async function Zf(e,t,n={}){if(!Number.isFinite(t)||t<=0)return e;let r,o=new Promise((i,s)=>{r=setTimeout(()=>{let a=n.label?` (${n.label})`:"",l=new wt(`Operation timed out after ${t}ms${a}`,t);n.controller&&!n.controller.signal.aborted&&n.controller.abort(l),s(l)},t)});try{return await Promise.race([e,o])}finally{r!==void 0&&clearTimeout(r)}}var H0,gk,hk=x(()=>{"use strict";Ue();H0=0,gk=5e3});var W0,eg,K0=x(()=>{"use strict";Ue();W0=3e4,eg=class{constructor(t,n,r,o){this.controller=t;this.idleTimeoutMs=n;this.label=r;this.onFire=o;this.isEnabled()&&this.arm(this.idleTimeoutMs,"none")}controller;idleTimeoutMs;label;onFire;timer;disposed=!1;fired=!1;inFlightTools=new Set;isEnabled(){return Number.isFinite(this.idleTimeoutMs)&&this.idleTimeoutMs>0}onEvent(t){if(!(!this.isEnabled()||this.disposed||this.fired)){if(t.type==="chunk"){if(t.chunk.type==="tool_use_detail"){this.inFlightTools.add(t.chunk.toolUseId),this.clearTimer();return}if(t.chunk.type==="tool_result"){this.inFlightTools.delete(t.chunk.toolUseId),this.inFlightTools.size===0&&this.arm(this.idleTimeoutMs,t.chunk.type);return}}if(!(this.inFlightTools.size>0)){if(t.type==="paused"){this.arm(this.pausedWindowMs(t.resetsAt),t.type);return}if(t.type==="rate_limit"&&typeof t.retryAfterMs=="number"&&t.retryAfterMs>0){this.arm(t.retryAfterMs+W0,t.type);return}this.arm(this.idleTimeoutMs,t.type)}}}pausedWindowMs(t){if(t===void 0)return this.idleTimeoutMs;let n=t.getTime()-Date.now();return Math.max(this.idleTimeoutMs,n+W0)}arm(t,n){this.timer!==void 0&&clearTimeout(this.timer);let r=t>0?t:this.idleTimeoutMs,o=Date.now(),i=setTimeout(()=>{this.fire(Date.now()-o,n)},r);i.unref(),this.timer=i}clearTimer(){this.timer!==void 0&&(clearTimeout(this.timer),this.timer=void 0)}fire(t,n){if(!(this.fired||this.disposed)){this.fired=!0,this.timer=void 0;try{this.onFire?.({idleTimeoutMs:this.idleTimeoutMs,elapsedSinceLastProgressMs:t,lastEventType:n})}catch{}this.controller.signal.aborted||this.controller.abort(new lp(`subagent ${this.label} idle-watchdog fired: no observable progress for ${this.idleTimeoutMs}ms (last event: ${n}). The child stream produced no output for the idle window \u2014 typically a stalled model call under provider throttling with no detectable backoff bracket. Aborting so partial output (if any) is returned; the parent should retry or fall back.`,this.idleTimeoutMs))}}dispose(){this.disposed||(this.disposed=!0,this.inFlightTools.clear(),this.clearTimer())}}});var tg,G0=x(()=>{"use strict";ye();Ue();hk();Cr();Jp();Ce();K0();ft();tg=class{constructor(t,n,r,o,i,s,a,l,c,d,u,m,f,g,h,y=0){this.id=t;this.session=n;this.controller=r;this.abortGraph=o;this.outputSchema=i;this.timeoutMs=s;this.hookRegistry=a;this.onTerminal=l;this.parentInputStreamRef=c;this.parentAbortSignal=d;this.agentType=u;this.traceWriter=g;this.onSubagentSucceeded=h;this.idleTimeoutMs=y;this.progressSink=m,this.parentId=f}id;session;controller;abortGraph;outputSchema;timeoutMs;hookRegistry;onTerminal;parentInputStreamRef;parentAbortSignal;agentType;traceWriter;onSubagentSucceeded;idleTimeoutMs;currentStatus="idle";inFlight=null;lastMessage;lastDurationMs;latestTerminalStatus;stopDispatched=!1;lastStopInjectContext;progressSink;parentId;currentTrace=fd();lastStreamedContent="";lastStopReason;get status(){return this.currentStatus}async run(t,n){if(this.currentStatus==="running")throw new Error(`Subagent ${this.id} is already running`);if(this.lastStopReason=void 0,this.currentStatus==="cancelled")throw new Error(`Subagent ${this.id} is cancelled`);this.currentStatus="running";let r=Date.now(),o=Zf(this.streamToFinalMessage(t,n),this.timeoutMs,{controller:this.controller,label:this.id});this.inFlight=o;try{let i=await o;this.lastMessage=i.content,this.lastDurationMs=Date.now()-r,this.currentStatus="succeeded",this.latestTerminalStatus="succeeded",await ni(this.traceWriter,{transition:"succeeded",subagentId:this.id,durationMs:this.lastDurationMs,turnCount:this.currentTrace.turnCount,outputBytes:Buffer.byteLength(this.lastMessage,"utf8"),...this.lastStopReason!==void 0&&{stopReason:this.lastStopReason}});let s=typeof i.metadata?.totalCostUsd=="number"?i.metadata.totalCostUsd:void 0;return this.onSubagentSucceeded?.(this.currentTrace.usage,s),this.onTerminal(),i}catch(i){this.lastDurationMs=Date.now()-r;let s=this.controller.signal.aborted&&this.controller.signal.reason instanceof wt&&!this.abortGraph.isCascading(this.id)?this.controller.signal.reason:void 0,a=s??i;if(this.currentStatus!=="cancelled")if(this.controller.signal.aborted&&s===void 0){let l=this.controller.signal.reason instanceof wt;await ni(this.traceWriter,{transition:"cancelled",subagentId:this.id,source:"cascade",...l?{timeout:!0}:{}}),this.currentStatus="cancelled",this.latestTerminalStatus="cancelled"}else await ni(this.traceWriter,{transition:"failed",subagentId:this.id,errorClass:a instanceof Error?a.constructor.name:"Unknown",errorMessage:a instanceof Error?a.message:String(a),partialOutputBytes:Buffer.byteLength(this.lastStreamedContent,"utf8"),...s!==void 0?{failureClass:"timeout"}:{}}),this.currentStatus="failed",this.latestTerminalStatus="failed";throw this.onTerminal(),a}finally{this.inFlight=null}}async streamToFinalMessage(t,n){let r,o;this.lastStreamedContent="",this.currentTrace=fd();let i=n??this.progressSink??Cn(),s={subagentId:this.id,...this.parentId!==void 0&&{parentId:this.parentId},...this.agentType!==void 0&&{agentType:this.agentType}},a=new eg(this.controller,this.idleTimeoutMs,this.id,l=>{se(this.traceWriter,{phase:"idle_watchdog_fired",metadata:{idleTimeoutMs:l.idleTimeoutMs,elapsedSinceLastProgressMs:l.elapsedSinceLastProgressMs,lastEventType:l.lastEventType}})});try{for await(let l of this.session.sendMessageStream(t)){if(i&&i(l,s),a.onEvent(l),l.type==="chunk"){let c=l.chunk;c.type==="content"?this.lastStreamedContent+=c.content:c.type==="tool_use_detail"?this.currentTrace.toolCalls.push({id:c.toolUseId,name:c.toolName,inputBytes:Buffer.byteLength(c.toolInput,"utf8")}):c.type==="tool_result"?this.currentTrace.toolResults.push({toolUseId:c.toolUseId,isError:c.isError,truncated:c.truncated,sizeBytes:c.sizeBytes}):c.type==="thinking"&&(this.currentTrace.thinkingPresent=!0)}if(l.type==="message")r=l.message,this.currentTrace.turnCount++;else if(l.type==="error"){o=l.error;break}else if(l.type==="done"){if(typeof l.metadata?.stopReason=="string"&&(this.lastStopReason=l.metadata.stopReason),typeof l.metadata?.usage=="object"&&l.metadata.usage!==null){let c=l.metadata.usage;this.currentTrace.usage={inputTokens:typeof c.input_tokens=="number"?c.input_tokens:void 0,outputTokens:typeof c.output_tokens=="number"?c.output_tokens:void 0,cacheReadTokens:typeof c.cache_read_input_tokens=="number"?c.cache_read_input_tokens:void 0,cacheCreationTokens:typeof c.cache_creation_input_tokens=="number"?c.cache_creation_input_tokens:void 0}}break}}}finally{a.dispose()}if(o)throw o;if(r)return r;if(this.lastStreamedContent.length>0)return this.lastStopReason??=Ff,{role:"assistant",content:this.lastStreamedContent,timestamp:new Date};if(this.lastStopReason==="tool_use_loop_capped")return{role:"assistant",content:`[subagent ${this.id} reached its tool-use iteration cap before producing a final message; returning a capped partial result]`,timestamp:new Date};throw this.controller.signal.aborted||this.currentStatus==="cancelled"?new Error(`Subagent ${this.id} produced no terminal message`):(this.lastStopReason=Ff,new Gn(`subagent ${this.id} produced no output \u2014 its model stream ended without a terminal message (stream_incomplete), and no partial text was streamed. This is typically a first-token timeout while the provider was overloaded (the connection was aborted mid retry-backoff). No findings were produced; the parent should retry or fall back.`))}async runToResult(t,n){try{let r=await this.run(t,n);return c0(this.id,this.currentStatus,r,this.outputSchema,this.currentTrace,this.lastStopReason)}catch(r){let o=Lf(this.id,this.currentStatus,r,this.currentTrace,this.lastStopReason);return this.lastStreamedContent.length>0&&(o.partialOutput=this.lastStreamedContent),o}}runInBackground(t,n,r){let o;if(r){let i=this.progressSink??Cn();o=(s,a)=>{r(s),i?.(s,a)}}this.runToResult(t,o).then(i=>{n?.(i)}).catch(i=>{W("runInBackground: unexpected rejection after runToResult",i),console.error("Subagent runInBackground failed unexpectedly:",i)})}async cancel(){if(this.currentStatus==="cancelled"||this.stopDispatched)return;let t=this.latestTerminalStatus??"cancelled";this.currentStatus="cancelled",ni(this.traceWriter,{transition:"cancelled",subagentId:this.id,source:"explicit"});try{this.abortGraph.abort(this.id,"cancelled")}catch{}try{this.inFlight&&await this.session.interrupt()}catch{}try{await this.session.close()}finally{await this.dispatchStopAndRelease(t)}}async teardown(t){if(this.stopDispatched)return;let n=this.latestTerminalStatus??"cancelled";try{this.inFlight&&await this.session.interrupt()}catch{}try{await this.session.close()}finally{await this.dispatchStopAndRelease(n,t)}}getLastStopInjectContext(){return this.lastStopInjectContext}async dispatchStopAndRelease(t,n){if(this.stopDispatched){this.onTerminal();return}this.stopDispatched=!0;let r=await jC(this.hookRegistry,{event:"SubagentStop",subagentId:this.id,status:t,lastMessage:this.lastMessage,agentType:this.agentType,durationMs:this.lastDurationMs,trace:this.currentTrace},this.traceWriter?{traceWriter:this.traceWriter}:{});if(r.injectContext){if(this.parentAbortSignal?.aborted)W(`Skipping SubagentStop injectContext for ${this.id}: parent is aborted`);else if(n?.deferInjectContextToCaller)this.lastStopInjectContext=r.injectContext;else if(this.parentInputStreamRef)try{let o=this.parentInputStreamRef;o.queueFrameworkContext?o.queueFrameworkContext(r.injectContext):o.pushUserMessage(r.injectContext)}catch(o){W(`Failed to inject context from SubagentStop handler: ${String(o)}`)}}this.onTerminal()}}});function q0(e,t){return e===void 0||!Xc(e)||re(e)!=="openai-compatible"?{model:e}:t===void 0||Xc(t)||re(t)!=="openai-compatible"?{model:e}:{model:t,coercedFrom:e}}var z0=x(()=>{"use strict";He();cf()});import OX from"path";function FX(){let e=v.AFK_SUBAGENT_TIMEOUT_MS;if(e===void 0||e.trim()==="")return J0;let t=Number.parseInt(e,10);return!Number.isFinite(t)||t<0?J0:t}function LX(){let e=v.AFK_SUBAGENT_IDLE_TIMEOUT_MS;if(e===void 0||e.trim()==="")return Y0;let t=Number.parseInt(e,10);return!Number.isFinite(t)||t<0?Y0:t}var $X,DX,J0,Y0,O0,ce,ze=x(()=>{"use strict";NC();Ra();Jp();Ce();Qn();Cr();sS();JC();ui();z();G();Dn();Js();Bf();He();G0();z0();$X=async(e,t)=>({action:"decline"}),DX=50,J0=45*6e4;Y0=8*6e4;O0=60*6e4,ce=class{active=new Map;parentCanUseTool;hookRegistry;progressSink;parentApiKey;parentBaseUrl;parentProvider;parentModel;parentCwd;parentReadRoots;worktreeMainRootCache=new Map;parentTraceWriter;parentSurface;abortGraph;rootId;rootController;counter=0;onSubagentSucceededCb;constructor(t={}){if(this.parentCanUseTool=t.canUseTool,this.hookRegistry=t.hookRegistry,this.progressSink=t.progressSink,this.parentApiKey=t.apiKey,this.parentBaseUrl=t.baseUrl,this.parentProvider=t.parentModel!==void 0?re(t.parentModel):void 0,this.parentModel=t.parentModel,this.parentCwd=t.cwd,this.parentReadRoots=t.parentReadRoots,this.parentTraceWriter=t.traceWriter,this.parentSurface=t.surface,this.onSubagentSucceededCb=t.onSubagentSucceeded,this.abortGraph=new zp(t.traceWriter),this.rootId=`manager-root-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,this.rootController=new AbortController,this.abortGraph.register(this.rootId,this.rootController),t.parentAbortSignal){let n=t.parentAbortSignal;n.aborted?this.rootController.abort(n.reason):n.addEventListener("abort",()=>{this.rootController.signal.aborted||this.rootController.abort(n.reason)},{once:!0})}}list(){return[...this.active.values()].map(t=>({id:t.id,status:t.status}))}get(t){return this.active.get(t)}onChildAborted(t){return this.abortGraph.onChildAborted(this.rootId,t)}setOnSubagentSucceeded(t){this.onSubagentSucceededCb=t}setCwd(t){this.parentCwd=t,this.worktreeMainRootCache.delete(t)}getReadScopeInputs(){return{parentReadRoots:this.parentReadRoots,parentCwd:this.parentCwd}}async resolveMainRootForCwd(t){if(this.worktreeMainRootCache.has(t))return this.worktreeMainRootCache.get(t);let n=await zC(t);return this.worktreeMainRootCache.set(t,n),n}abortAll(t,n="user_signal"){this.abortGraph.abort(this.rootId,t,n)}async forkSubagent(t){if(t.phaseRole!==void 0&&t.phaseRole!=="read-write"&&t.config.provider!==void 0)throw new Error(`SubagentManager.forkSubagent: phaseRole "${t.phaseRole}" is mutually exclusive with config.provider. Remove one \u2014 either let the manager construct the phase-restricted provider, or use config.provider with phaseRole: "read-write" (default).`);let n=`${t.idPrefix??"subagent"}-${Date.now()}-${++this.counter}`,r=t.parent.sessionId,o=t.config.hookRegistry??this.hookRegistry??t.parent.hookRegistry,i=t.config.traceWriter??this.parentTraceWriter;o&&await UC(o,{event:"SubagentStart",subagentId:n,parentSessionId:t.parent.sessionId},{signal:this.rootController.signal,...i?{traceWriter:i}:{}});let s=new AbortController;this.abortGraph.register(n,s),this.abortGraph.linkChild(this.rootId,n);let a=t.config.cwd??this.parentCwd,l;if(t.config.readRoots===void 0){let A=this.parentReadRoots===void 0&&this.parentCwd===void 0,$;!A&&a!==void 0&&($=await this.resolveMainRootForCwd(a),$===void 0&&this.parentCwd!==void 0&&this.parentCwd!==a&&($=await this.resolveMainRootForCwd(this.parentCwd))),l=Ac({parentReadRoots:this.parentReadRoots,parentCwd:this.parentCwd,childCwd:a,worktreeMainRoot:$,...A?{}:{afkStateRoot:ke()}})}if(t.config.readRoots===void 0&&t.config.extraReadRoots!==void 0&&t.config.extraReadRoots.length>0&&(l!==void 0||a!==void 0)){let $=l??(a!==void 0?[a]:[]);l=[...new Set([...$,...t.config.extraReadRoots.map(R=>OX.resolve(R))])]}let c;if(t.config.writeRoots!==void 0&&t.config.writeRoots.length>0){let A=a!==void 0?[a]:[];c=[...new Set([...A,...t.config.writeRoots])]}let d=q0(t.config.model,this.parentModel),u=d.model??t.config.model;d.coercedFrom!==void 0&&process.stderr.write(`[afk] subagent: child model "${d.coercedFrom}" cannot run on this session's OpenAI/ChatGPT backend \u2014 running it as "${u??""}" instead (set AFK_DEFAULT_SUBAGENT_MODEL to choose a different one).
1033
+ Skill arguments:
1034
+ ${l}`:f,h=await u.runToResult(g);return h.status==="succeeded"&&h.message?(m={content:$n(h.message.content,h.stopReason),...Ci(h.stopReason)},m):h.status==="cancelled"&&typeof h.partialOutput=="string"&&h.partialOutput.length>0?(m={content:`[skill cancelled mid-flight \u2014 partial output preserved below]
1035
+
1036
+ ${h.partialOutput}`,...Ci(h.stopReason)},m):(m={content:h.error?.message??c,isError:!0,...Ci(h.stopReason)},m)}catch(f){let g=f instanceof Error?f.message:String(f);return{content:`${d}: ${g}`,isError:!0}}finally{u&&await u.teardown({deferInjectContextToCaller:!0}).catch(W);let f=u?.getLastStopInjectContext?.();Nf(m,f),await r?.teardownAll(),await n.teardownAll()}}var U0=x(()=>{"use strict";ze();ui();ft();Zv();Dn();Bf();Rt();Cr();sn();ye();$0();Xv()});function PX(e){if(typeof e!="object"||e===null)return;let t=e.name;if(typeof t!="string")return;let n=t.trim();return n.length>0?n:void 0}function MX(e){if(typeof e!="object"||e===null)throw new Error("Skill tool input must be an object");let t=e,n=t.name;if(typeof n!="string"||n.trim().length===0)throw new Error('Skill tool input must have a non-empty "name" field');let r,o=t.arguments;if(o!==void 0){if(typeof o!="string")throw new Error('Skill tool "arguments" must be a string');r=o}return{name:n.trim(),arguments:r}}var dr,kd=x(()=>{"use strict";Ft();sr();Dn();Gv();Qn();qv();Yv();Vv();Xv();U0();dr=class{constructor(t){this.ctx=t;this.currentCwd=t.cwd}ctx;pluginBodies=null;currentCwd;setCwd(t){this.currentCwd=t,this.pluginBodies=null}internals(){return{ctx:this.ctx,currentCwd:this.currentCwd}}async execute(t){if(t.signal.aborted)return{content:"Skill tool call aborted",isError:!0};let n=this.ctx.depth??0,r=this.ctx.maxDepth??Mi;if(n>=r){let c=PX(t.input);return Ne({...ba(this.ctx),event:"delegation.skipped",parent_session_id:this.ctx.parentSession.sessionId,reason:"max_depth",depth:n,requested_name:c}).catch(()=>{}),{content:Mf(n,r),isError:!0}}let o;try{o=MX(t.input)}catch(c){return{content:`Skill tool input validation failed: ${c instanceof Error?c.message:String(c)}`,isError:!0}}let i=Oi(this.ctx.pluginConfigs,this.currentCwd!==void 0?{cwd:this.currentCwd}:void 0),s;try{s=Ye(o.name)}catch{}if(s)return await this.executeRegistrySkill(s,o.arguments,t);let a=this.getPluginSkillBody(o.name);if(a){if(a.context==="fork"){let d=a.readOnly===!0||Qf.has(o.name);return await N0(this.internals(),o.name,a.body,a.pluginPath,o.arguments,t,d,a.allowedTools,a.model)}let c=a.body.replace(/\$\{PLUGIN_ROOT(?::-(?:[^{}]|\$\{[^{}]*\})*)?\}|\$PLUGIN_ROOT\b/g,()=>a.pluginPath);return r0(this.internals(),o.name,c,o.arguments,t)}let l=i.map(c=>c.name).join(", ");return{content:`Skill "${o.name}" not found. Available skills: ${l||"(none)"}`,isError:!0}}async executeRegistrySkill(t,n,r){if(r.signal.aborted)return{content:"Skill call aborted",isError:!0};if(t.context==="fork")return L0(this.internals(),t,n,r);if(t.context==="load")return n0(this.internals(),t,n,r);let o=qM(t.name);o&&QM(t.name);let i=this.ctx.depth??0;Ne({...ba(this.ctx),event:"skill.dispatched",requested_name:t.name,parent_session_id:this.ctx.parentSession.sessionId,depth:i,...Of(t.name)?{is_gate:!0}:{},...t.model!==void 0?{model:t.model}:{}}).catch(()=>{});let s=Date.now(),a,l;try{l=await t.handler(n&&n.length>0?n:void 0,this.ctx.parentSession,{apiKey:this.ctx.apiKey,defaultModel:this.ctx.defaultModel,defaultSubagentModel:this.ctx.defaultSubagentModel,callId:r.id,dispatchSkill:this.createDispatchSkillCallback(r),...this.ctx.traceWriter!==void 0?{traceWriter:this.ctx.traceWriter}:{},...this.ctx.getReadScopeInputs!==void 0?{getReadScopeInputs:this.ctx.getReadScopeInputs}:{}})}catch(d){a=d}finally{let d=Date.now()-s;o&&XM({skillName:t.name,durationMs:d,...a!==void 0?{isError:!0}:{}});let u=a!==void 0?a instanceof Error?a.message:String(a):void 0,m=a===void 0?typeof l=="string"?l.length:l!=null?JSON.stringify(l).length:0:void 0;Ne({...ba(this.ctx),event:"skill.completed",requested_name:t.name,parent_session_id:this.ctx.parentSession.sessionId,status:a!==void 0?"failed":"succeeded",duration_ms:d,depth:i,...m!==void 0?{content_chars:m}:{},...u!==void 0?{error_message:ZM(u)}:{},...t.model!==void 0?{model:t.model}:{}}).catch(()=>{})}return a!==void 0?{content:`Skill execution error: ${a instanceof Error?a.message:String(a)}`,isError:!0}:{content:typeof l=="string"?l:l!=null?JSON.stringify(l):"Skill completed successfully."}}getPluginSkillBody(t){return this.pluginBodies||(this.pluginBodies=Td(this.ctx.pluginConfigs,this.currentCwd!==void 0?{cwd:this.currentCwd}:void 0)),this.pluginBodies.get(t)}createDispatchSkillCallback(t){return async(n,r)=>{let o={id:`${t.id}-dispatch-${n}`,name:"skill",input:{name:n,...r!==void 0?{arguments:r}:{}},signal:t.signal},i=await this.execute(o);if(i.isError)throw new Error(i.content);return i.content}}}});function Pi(e){return{sessionId:void 0,getInputStreamRef:()=>({pushUserMessage:()=>{}}),abortSignal:e}}function Ea(e={}){return({childExecutor:t,childSkillExecutor:n,model:r,allowedTools:o,readOnlyBash:i})=>{let s={permissions:{allowedTools:o??qf},subagentExecutor:t,...n!==void 0?{skillExecutor:n}:{},...i===!0?{readOnlyBash:!0}:{}};return re(typeof r=="string"?r:void 0)==="openai-compatible"?new Xt({...s,...e.openaiBaseUrl!==void 0?{baseURL:e.openaiBaseUrl}:{},readOnlyMemory:!0}):new tt({...s,readOnlyMemory:!0})}}function D0(e,t,n){let r={allowedTools:[...n??Xf]};return re(typeof e=="string"?e:void 0)==="openai-compatible"?new Xt({permissions:r,readOnlyBash:!0,readOnlyMemory:!0,...t!==void 0?{baseURL:t}:{}}):new tt({permissions:r,readOnlyBash:!0,readOnlyMemory:!0})}function xa(e,t,n,r,o,i,s,a,l,c,d,u){let m=(f,g,h,y,b)=>{let w=y??s;return new dr({parentSession:Pi(h),defaultModel:e,...c!==void 0?{defaultSubagentModel:c}:{},apiKey:t,...r!==void 0?{baseUrl:r}:{},...u!==void 0?{openaiBaseUrl:u}:{},depth:f,maxDepth:g,childProviderFactory:n,childSkillExecutorFactory:m,...o!==void 0?{traceWriter:o}:{},...i!==void 0?{backgroundRegistry:i}:{},...w!==void 0?{cwd:w}:{},...a!==void 0?{resolveApiKeyForModel:a}:{},...l!==void 0?{surface:l}:{},...d!==void 0?{agentRegistry:d}:{},...b!==void 0?{getReadScopeInputs:()=>b}:{}})};return m}function zf(e,t,n=!1,r){let o={allowedTools:[...e]};return re(typeof t=="string"?t:void 0)==="openai-compatible"?new Xt({permissions:o,...n?{readOnlyBash:!0}:{},...r!==void 0?{baseURL:r}:{}}):new tt({permissions:o,...n?{readOnlyBash:!0}:{}})}function j0(e,t){let n={allowedTools:[...WM]};return re(typeof t=="string"?t:void 0)==="openai-compatible"?new Xt({permissions:n}):new tt({permissions:n})}var Mi,qf,Xf,Qf,Dn=x(()=>{"use strict";$i();dd();He();ln();dn();md();kd();Mi=3;qf=[...Lt,...st,"memory_search","agent","skill"],Xf=["read_file","glob","grep","list_directory","config_get","bash","web_scrape",...st,"memory_search","agent","skill"],Qf=new Set(["ground-state"])});async function Zf(e,t,n={}){if(!Number.isFinite(t)||t<=0)return e;let r,o=new Promise((i,s)=>{r=setTimeout(()=>{let a=n.label?` (${n.label})`:"",l=new wt(`Operation timed out after ${t}ms${a}`,t);n.controller&&!n.controller.signal.aborted&&n.controller.abort(l),s(l)},t)});try{return await Promise.race([e,o])}finally{r!==void 0&&clearTimeout(r)}}var H0,gk,hk=x(()=>{"use strict";Ue();H0=0,gk=5e3});var W0,eg,K0=x(()=>{"use strict";Ue();W0=3e4,eg=class{constructor(t,n,r,o){this.controller=t;this.idleTimeoutMs=n;this.label=r;this.onFire=o;this.isEnabled()&&this.arm(this.idleTimeoutMs,"none")}controller;idleTimeoutMs;label;onFire;timer;disposed=!1;fired=!1;inFlightTools=new Set;isEnabled(){return Number.isFinite(this.idleTimeoutMs)&&this.idleTimeoutMs>0}onEvent(t){if(!(!this.isEnabled()||this.disposed||this.fired)){if(t.type==="chunk"){if(t.chunk.type==="tool_use_detail"){this.inFlightTools.add(t.chunk.toolUseId),this.clearTimer();return}if(t.chunk.type==="tool_result"){this.inFlightTools.delete(t.chunk.toolUseId),this.inFlightTools.size===0&&this.arm(this.idleTimeoutMs,t.chunk.type);return}}if(!(this.inFlightTools.size>0)){if(t.type==="paused"){this.arm(this.pausedWindowMs(t.resetsAt),t.type);return}if(t.type==="rate_limit"&&typeof t.retryAfterMs=="number"&&t.retryAfterMs>0){this.arm(t.retryAfterMs+W0,t.type);return}this.arm(this.idleTimeoutMs,t.type)}}}pausedWindowMs(t){if(t===void 0)return this.idleTimeoutMs;let n=t.getTime()-Date.now();return Math.max(this.idleTimeoutMs,n+W0)}arm(t,n){this.timer!==void 0&&clearTimeout(this.timer);let r=t>0?t:this.idleTimeoutMs,o=Date.now(),i=setTimeout(()=>{this.fire(Date.now()-o,n)},r);i.unref(),this.timer=i}clearTimer(){this.timer!==void 0&&(clearTimeout(this.timer),this.timer=void 0)}fire(t,n){if(!(this.fired||this.disposed)){this.fired=!0,this.timer=void 0;try{this.onFire?.({idleTimeoutMs:this.idleTimeoutMs,elapsedSinceLastProgressMs:t,lastEventType:n})}catch{}this.controller.signal.aborted||this.controller.abort(new lp(`subagent ${this.label} idle-watchdog fired: no observable progress for ${this.idleTimeoutMs}ms (last event: ${n}). The child stream produced no output for the idle window \u2014 typically a stalled model call under provider throttling with no detectable backoff bracket. Aborting so partial output (if any) is returned; the parent should retry or fall back.`,this.idleTimeoutMs))}}dispose(){this.disposed||(this.disposed=!0,this.inFlightTools.clear(),this.clearTimer())}}});var tg,G0=x(()=>{"use strict";ye();Ue();hk();Cr();Jp();Ce();K0();ft();tg=class{constructor(t,n,r,o,i,s,a,l,c,d,u,m,f,g,h,y=0){this.id=t;this.session=n;this.controller=r;this.abortGraph=o;this.outputSchema=i;this.timeoutMs=s;this.hookRegistry=a;this.onTerminal=l;this.parentInputStreamRef=c;this.parentAbortSignal=d;this.agentType=u;this.traceWriter=g;this.onSubagentSucceeded=h;this.idleTimeoutMs=y;this.progressSink=m,this.parentId=f}id;session;controller;abortGraph;outputSchema;timeoutMs;hookRegistry;onTerminal;parentInputStreamRef;parentAbortSignal;agentType;traceWriter;onSubagentSucceeded;idleTimeoutMs;currentStatus="idle";inFlight=null;lastMessage;lastDurationMs;latestTerminalStatus;stopDispatched=!1;lastStopInjectContext;progressSink;parentId;currentTrace=fd();lastStreamedContent="";lastStopReason;get status(){return this.currentStatus}async run(t,n){if(this.currentStatus==="running")throw new Error(`Subagent ${this.id} is already running`);if(this.lastStopReason=void 0,this.currentStatus==="cancelled")throw new Error(`Subagent ${this.id} is cancelled`);this.currentStatus="running";let r=Date.now(),o=Zf(this.streamToFinalMessage(t,n),this.timeoutMs,{controller:this.controller,label:this.id});this.inFlight=o;try{let i=await o;this.lastMessage=i.content,this.lastDurationMs=Date.now()-r,this.currentStatus="succeeded",this.latestTerminalStatus="succeeded",await ni(this.traceWriter,{transition:"succeeded",subagentId:this.id,durationMs:this.lastDurationMs,turnCount:this.currentTrace.turnCount,outputBytes:Buffer.byteLength(this.lastMessage,"utf8"),...this.lastStopReason!==void 0&&{stopReason:this.lastStopReason}});let s=typeof i.metadata?.totalCostUsd=="number"?i.metadata.totalCostUsd:void 0;return this.onSubagentSucceeded?.(this.currentTrace.usage,s),this.onTerminal(),i}catch(i){this.lastDurationMs=Date.now()-r;let s=this.controller.signal.aborted&&this.controller.signal.reason instanceof wt&&!this.abortGraph.isCascading(this.id)?this.controller.signal.reason:void 0,a=s??i;if(this.currentStatus!=="cancelled")if(this.controller.signal.aborted&&s===void 0){let l=this.controller.signal.reason instanceof wt;await ni(this.traceWriter,{transition:"cancelled",subagentId:this.id,source:"cascade",...l?{timeout:!0}:{}}),this.currentStatus="cancelled",this.latestTerminalStatus="cancelled"}else await ni(this.traceWriter,{transition:"failed",subagentId:this.id,errorClass:a instanceof Error?a.constructor.name:"Unknown",errorMessage:a instanceof Error?a.message:String(a),partialOutputBytes:Buffer.byteLength(this.lastStreamedContent,"utf8"),...s!==void 0?{failureClass:"timeout"}:{}}),this.currentStatus="failed",this.latestTerminalStatus="failed";throw this.onTerminal(),a}finally{this.inFlight=null}}async streamToFinalMessage(t,n){let r,o;this.lastStreamedContent="",this.currentTrace=fd();let i=n??this.progressSink??Cn(),s={subagentId:this.id,...this.parentId!==void 0&&{parentId:this.parentId},...this.agentType!==void 0&&{agentType:this.agentType}},a=new eg(this.controller,this.idleTimeoutMs,this.id,l=>{se(this.traceWriter,{phase:"idle_watchdog_fired",metadata:{idleTimeoutMs:l.idleTimeoutMs,elapsedSinceLastProgressMs:l.elapsedSinceLastProgressMs,lastEventType:l.lastEventType}})});try{for await(let l of this.session.sendMessageStream(t)){if(i&&i(l,s),a.onEvent(l),l.type==="chunk"){let c=l.chunk;c.type==="content"?this.lastStreamedContent+=c.content:c.type==="tool_use_detail"?this.currentTrace.toolCalls.push({id:c.toolUseId,name:c.toolName,inputBytes:Buffer.byteLength(c.toolInput,"utf8")}):c.type==="tool_result"?this.currentTrace.toolResults.push({toolUseId:c.toolUseId,isError:c.isError,truncated:c.truncated,sizeBytes:c.sizeBytes}):c.type==="thinking"&&(this.currentTrace.thinkingPresent=!0)}if(l.type==="message")r=l.message,this.currentTrace.turnCount++;else if(l.type==="error"){o=l.error;break}else if(l.type==="done"){if(typeof l.metadata?.stopReason=="string"&&(this.lastStopReason=l.metadata.stopReason),typeof l.metadata?.usage=="object"&&l.metadata.usage!==null){let c=l.metadata.usage;this.currentTrace.usage={inputTokens:typeof c.input_tokens=="number"?c.input_tokens:void 0,outputTokens:typeof c.output_tokens=="number"?c.output_tokens:void 0,cacheReadTokens:typeof c.cache_read_input_tokens=="number"?c.cache_read_input_tokens:void 0,cacheCreationTokens:typeof c.cache_creation_input_tokens=="number"?c.cache_creation_input_tokens:void 0}}break}}}finally{a.dispose()}if(o)throw o;if(r)return r;if(this.lastStreamedContent.length>0)return this.lastStopReason??=Ff,{role:"assistant",content:this.lastStreamedContent,timestamp:new Date};if(this.lastStopReason==="tool_use_loop_capped")return{role:"assistant",content:`[subagent ${this.id} reached its tool-use iteration cap before producing a final message; returning a capped partial result]`,timestamp:new Date};throw this.controller.signal.aborted||this.currentStatus==="cancelled"?new Error(`Subagent ${this.id} produced no terminal message`):(this.lastStopReason=Ff,new Gn(`subagent ${this.id} produced no output \u2014 its model stream ended without a terminal message (stream_incomplete), and no partial text was streamed. This is typically a first-token timeout while the provider was overloaded (the connection was aborted mid retry-backoff). No findings were produced; the parent should retry or fall back.`))}async runToResult(t,n){try{let r=await this.run(t,n);return c0(this.id,this.currentStatus,r,this.outputSchema,this.currentTrace,this.lastStopReason)}catch(r){let o=Lf(this.id,this.currentStatus,r,this.currentTrace,this.lastStopReason);return this.lastStreamedContent.length>0&&(o.partialOutput=this.lastStreamedContent),o}}runInBackground(t,n,r){let o;if(r){let i=this.progressSink??Cn();o=(s,a)=>{r(s),i?.(s,a)}}this.runToResult(t,o).then(i=>{n?.(i)}).catch(i=>{W("runInBackground: unexpected rejection after runToResult",i),console.error("Subagent runInBackground failed unexpectedly:",i)})}async cancel(){if(this.currentStatus==="cancelled"||this.stopDispatched)return;let t=this.latestTerminalStatus??"cancelled";this.currentStatus="cancelled",ni(this.traceWriter,{transition:"cancelled",subagentId:this.id,source:"explicit"});try{this.abortGraph.abort(this.id,"cancelled")}catch{}try{this.inFlight&&await this.session.interrupt()}catch{}try{await this.session.close()}finally{await this.dispatchStopAndRelease(t)}}async teardown(t){if(this.stopDispatched)return;let n=this.latestTerminalStatus??"cancelled";try{this.inFlight&&await this.session.interrupt()}catch{}try{await this.session.close()}finally{await this.dispatchStopAndRelease(n,t)}}getLastStopInjectContext(){return this.lastStopInjectContext}async dispatchStopAndRelease(t,n){if(this.stopDispatched){this.onTerminal();return}this.stopDispatched=!0;let r=await jC(this.hookRegistry,{event:"SubagentStop",subagentId:this.id,status:t,lastMessage:this.lastMessage,agentType:this.agentType,durationMs:this.lastDurationMs,trace:this.currentTrace},this.traceWriter?{traceWriter:this.traceWriter}:{});if(r.injectContext){if(this.parentAbortSignal?.aborted)W(`Skipping SubagentStop injectContext for ${this.id}: parent is aborted`);else if(n?.deferInjectContextToCaller)this.lastStopInjectContext=r.injectContext;else if(this.parentInputStreamRef)try{let o=this.parentInputStreamRef;o.queueFrameworkContext?o.queueFrameworkContext(r.injectContext):o.pushUserMessage(r.injectContext)}catch(o){W(`Failed to inject context from SubagentStop handler: ${String(o)}`)}}this.onTerminal()}}});function q0(e,t){return e===void 0||!Xc(e)||re(e)!=="openai-compatible"?{model:e}:t===void 0||Xc(t)||re(t)!=="openai-compatible"?{model:e}:{model:t,coercedFrom:e}}var z0=x(()=>{"use strict";He();cf()});import OX from"path";function FX(){let e=v.AFK_SUBAGENT_TIMEOUT_MS;if(e===void 0||e.trim()==="")return J0;let t=Number.parseInt(e,10);return!Number.isFinite(t)||t<0?J0:t}function LX(){let e=v.AFK_SUBAGENT_IDLE_TIMEOUT_MS;if(e===void 0||e.trim()==="")return Y0;let t=Number.parseInt(e,10);return!Number.isFinite(t)||t<0?Y0:t}var $X,DX,J0,Y0,O0,ce,ze=x(()=>{"use strict";NC();Ra();Jp();Ce();Qn();Cr();sS();JC();ui();z();G();Dn();Js();Bf();He();G0();z0();$X=async(e,t)=>({action:"decline"}),DX=50,J0=45*6e4;Y0=8*6e4;O0=60*6e4,ce=class{active=new Map;parentCanUseTool;hookRegistry;progressSink;parentApiKey;parentBaseUrl;parentProvider;parentModel;parentCwd;parentReadRoots;worktreeMainRootCache=new Map;parentTraceWriter;parentSurface;abortGraph;rootId;rootController;counter=0;onSubagentSucceededCb;constructor(t={}){if(this.parentCanUseTool=t.canUseTool,this.hookRegistry=t.hookRegistry,this.progressSink=t.progressSink,this.parentApiKey=t.apiKey,this.parentBaseUrl=t.baseUrl,this.parentProvider=t.parentModel!==void 0?re(t.parentModel):void 0,this.parentModel=t.parentModel,this.parentCwd=t.cwd,this.parentReadRoots=t.parentReadRoots,this.parentTraceWriter=t.traceWriter,this.parentSurface=t.surface,this.onSubagentSucceededCb=t.onSubagentSucceeded,this.abortGraph=new zp(t.traceWriter),this.rootId=`manager-root-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,this.rootController=new AbortController,this.abortGraph.register(this.rootId,this.rootController),t.parentAbortSignal){let n=t.parentAbortSignal;n.aborted?this.rootController.abort(n.reason):n.addEventListener("abort",()=>{this.rootController.signal.aborted||this.rootController.abort(n.reason)},{once:!0})}}list(){return[...this.active.values()].map(t=>({id:t.id,status:t.status}))}get(t){return this.active.get(t)}onChildAborted(t){return this.abortGraph.onChildAborted(this.rootId,t)}setOnSubagentSucceeded(t){this.onSubagentSucceededCb=t}setCwd(t){this.parentCwd=t,this.worktreeMainRootCache.delete(t)}getReadScopeInputs(){return{parentReadRoots:this.parentReadRoots,parentCwd:this.parentCwd}}async resolveMainRootForCwd(t){if(this.worktreeMainRootCache.has(t))return this.worktreeMainRootCache.get(t);let n=await zC(t);return this.worktreeMainRootCache.set(t,n),n}abortAll(t,n="user_signal"){this.abortGraph.abort(this.rootId,t,n)}async forkSubagent(t){if(t.phaseRole!==void 0&&t.phaseRole!=="read-write"&&t.config.provider!==void 0)throw new Error(`SubagentManager.forkSubagent: phaseRole "${t.phaseRole}" is mutually exclusive with config.provider. Remove one \u2014 either let the manager construct the phase-restricted provider, or use config.provider with phaseRole: "read-write" (default).`);let n=`${t.idPrefix??"subagent"}-${Date.now()}-${++this.counter}`,r=t.parent.sessionId,o=t.config.hookRegistry??this.hookRegistry??t.parent.hookRegistry,i=t.config.traceWriter??this.parentTraceWriter;o&&await UC(o,{event:"SubagentStart",subagentId:n,parentSessionId:t.parent.sessionId},{signal:this.rootController.signal,...i?{traceWriter:i}:{}});let s=new AbortController;this.abortGraph.register(n,s),this.abortGraph.linkChild(this.rootId,n);let a=t.config.cwd??this.parentCwd,l;if(t.config.readRoots===void 0){let A=this.parentReadRoots===void 0&&this.parentCwd===void 0,$;!A&&a!==void 0&&($=await this.resolveMainRootForCwd(a),$===void 0&&this.parentCwd!==void 0&&this.parentCwd!==a&&($=await this.resolveMainRootForCwd(this.parentCwd))),l=Ac({parentReadRoots:this.parentReadRoots,parentCwd:this.parentCwd,childCwd:a,worktreeMainRoot:$,...A?{}:{afkStateRoot:ke()}})}if(t.config.readRoots===void 0&&t.config.extraReadRoots!==void 0&&t.config.extraReadRoots.length>0&&(l!==void 0||a!==void 0)){let $=l??(a!==void 0?[a]:[]);l=[...new Set([...$,...t.config.extraReadRoots.map(R=>OX.resolve(R))])]}let c;if(t.config.writeRoots!==void 0&&t.config.writeRoots.length>0){let A=a!==void 0?[a]:[];c=[...new Set([...A,...t.config.writeRoots])]}let d=q0(t.config.model,this.parentModel),u=d.model??t.config.model;d.coercedFrom!==void 0&&process.stderr.write(`[afk] subagent: child model "${d.coercedFrom}" cannot run on this session's OpenAI/ChatGPT backend \u2014 running it as "${u??""}" instead (set AFK_DEFAULT_SUBAGENT_MODEL to choose a different one).
1034
1037
  `);let m={...t.config,isSubagentFork:!0,model:u,resume:r,forkSession:r?!0:t.config.forkSession,subagentId:n,subagentToolOutputCapBytes:1e5,abortSignal:s.signal,apiKey:p0({childModel:u,configApiKey:t.config.apiKey,parentApiKey:this.parentApiKey,parentProvider:this.parentProvider}),baseUrl:t.config.baseUrl??(re(u)==="openai-compatible"?void 0:this.parentBaseUrl),isNonInteractive:t.config.isNonInteractive??!0,maxToolUseIterations:t.config.maxToolUseIterations??DX,autoResumeOnUsageLimit:t.config.autoResumeOnUsageLimit??!1,...t.config.parentSessionId===void 0&&t.parent.sessionId!==void 0?{parentSessionId:t.parent.sessionId}:{},...t.config.phaseRole===void 0&&t.phaseRole!==void 0?{phaseRole:t.phaseRole}:{},...t.config.cwd===void 0&&this.parentCwd!==void 0?{cwd:this.parentCwd}:{},...l!==void 0?{readRoots:l}:{},...c!==void 0?{writeRoots:c}:{},...t.config.traceWriter===void 0&&this.parentTraceWriter!==void 0?{traceWriter:this.parentTraceWriter}:{},...t.config.surface===void 0&&this.parentSurface!==void 0?{surface:this.parentSurface}:{},hookRegistry:o,permissionBubbler:t.config.permissionBubbler??(this.parentCanUseTool!==void 0&&t.config.canUseTool===void 0?{canUseTool:this.parentCanUseTool}:void 0),...t.denyElicitations===!1?{}:{onElicitation:$X},...t.phaseRole==="read-only"?{provider:j0("read-only",u)}:{}};m.cwd!==void 0&&qC(m.cwd);let f;try{f=new _t(m)}catch(A){throw this.abortGraph.dispose(n),A}let g=t.parent.getInputStreamRef?.(),h=t.parent.abortSignal,y=this.progressSink??Cn(),b=t.agentType?.trim()||void 0,w=t.resolvedAgentType?.trim()||void 0,S=t.parentId?.trim()||void 0,k=new tg(n,f,s,this.abortGraph,t.outputSchema,t.config.timeoutMs??FX(),o,()=>{this.active.delete(n),this.abortGraph.dispose(n)},g,h,b??t.idPrefix,y,S??t.parent.sessionId,i,this.onSubagentSucceededCb,t.config.idleTimeoutMs??LX());this.active.set(n,k);let T=typeof u=="string"?u:JSON.stringify(u);return ni(i,{transition:"started",subagentId:n,parentId:t.parent.sessionId??this.rootId,model:T,...m.tools?.allowedTools?{allowedTools:[...m.tools.allowedTools]}:{},...t.promptHead&&t.promptHead.trim()!==""?{promptHead:t.promptHead.slice(0,80)}:{},...b?{agentType:b}:{},...w?{resolvedAgentType:w}:{}}),await Ne({event:"subagent.dispatched",subagent_id:n,id_prefix:t.idPrefix,model:T,parent_session_id:t.parent.sessionId,resolved_agent_type:w}),k}async kill(t){let n=this.active.get(t);return n?(await n.cancel(),!0):!1}async killAll(){await Promise.allSettled([...this.active.values()].map(t=>t.cancel()))}async teardownAll(){await Promise.allSettled([...this.active.values()].map(t=>t.teardown()))}}});async function V0(e,t={}){let{failFast:n=!0,teardown:r=!0,maxConcurrency:o=8}=t;if(e.length===0)return[];let i=new Array(e.length),s=new Set(e.map((l,c)=>c)),a=!1;return await qs(e.map((l,c)=>c),o,async l=>{let c=e[l];n&&a&&await c.handle.cancel().catch(()=>{});let d=await c.handle.runToResult(c.prompt);if(i[l]=d,s.delete(l),n&&d.status!=="succeeded"){a=!0;for(let u of s){let m=e[u];m&&m.handle.status==="running"&&m.handle.cancel().catch(()=>{})}}}),r&&await Promise.allSettled(e.map(l=>l.handle.teardown())),i}var X0=x(()=>{"use strict";em()});function Q0(e){let t=new Set;for(let n of e){let r=hd(n,NX);r!==void 0&&t.add(r)}return t}var NX,Z0=x(()=>{"use strict";yd();ln();fm();NX=new Set([...Lt,...st,"memory_search","agent","skill"])});import{existsSync as tO,mkdirSync as BX,readFileSync as UX,renameSync as jX,writeFileSync as HX,unlinkSync as WX}from"fs";import{dirname as eO,join as KX}from"path";import{randomBytes as GX}from"crypto";function _e(e=ge()){if(!tO(e))return ng();try{let t=UX(e,"utf8"),n=JSON.parse(t);if(!n||typeof n!="object")return ng();let r=n,o=r.plugins&&typeof r.plugins=="object"?r.plugins:{};if(r.version===1)return{version:2,plugins:o,marketplaces:{}};if(r.version===2){let i=r.marketplaces&&typeof r.marketplaces=="object"?r.marketplaces:{};return{version:2,plugins:o,marketplaces:i}}return ng()}catch{return ng()}}function Ed(e,t=ge()){BX(eO(t),{recursive:!0});let n=KX(eO(t),`.index.json.${process.pid}.${GX(4).toString("hex")}.tmp`),r=JSON.stringify(e,null,2);try{HX(n,r,"utf8"),jX(n,t)}catch(o){try{tO(n)&&WX(n)}catch{}throw o}}function Ro(e,t,n=ge()){let r=_e(n);return r.plugins[e]=t,Ed(r,n),r}function nO(e,t=ge()){let n=_e(t);return e in n.plugins&&(delete n.plugins[e],Ed(n,t)),n}function bk(e,t,n=ge()){let r=_e(n),o=r.plugins[e];if(!o)throw new Error(`plugin "${e}" is not in the index`);return o.enabled=t,o.updatedAt=new Date().toISOString(),Ed(r,n),r}function xd(e,t,n=ge()){let r=_e(n);return r.marketplaces[e]=t,Ed(r,n),r}function rO(e,t=ge()){let n=_e(t),r=!1;e in n.marketplaces&&(delete n.marketplaces[e],r=!0);for(let[o,i]of Object.entries(n.plugins))i.marketplace===e&&(delete n.plugins[o],r=!0);return r&&Ed(n,t),n}function ng(){return{version:2,plugins:{},marketplaces:{}}}var Qt=x(()=>{"use strict";z()});import{existsSync as wk,readFileSync as sO,readdirSync as qX,realpathSync as zX,statSync as JX}from"fs";import{join as Ca,resolve as oO}from"path";function Dr(){Aa=void 0}function Fn(e=Ke(),t={}){let n=t.trustAll===!0,r=t.sourceEnabled,o=n?`${e}\0trustAll`:e;if(n&&r&&r.size>0){let c=[...r.entries()].map(([d,u])=>`${d}=${u?1:0}`).sort().join(",");o=`${o}\0${c}`}Aa||(Aa=new Map);let i=Aa.get(o);if(i)return[...i];if(!wk(e))return Aa.set(o,[]),[];let s=e===Ke()?ge():Ca(e,".index.json"),a=_e(s),l=[];return aO(e,e,0,l,new Set,a.plugins,n,r),Aa.set(o,l),[...l]}function aO(e,t,n,r,o,i,s,a){if(n>YX)return;let l;try{l=zX(t)}catch{l=t}if(o.has(l))return;if(o.add(l),wk(Ca(t,".claude-plugin","plugin.json"))){let d=Sk(e,t);if(d===null){rg(r,t);return}if(s){if(a&&a.get(XX(d))===!1)return;rg(r,t);return}if(d.layout==="cache"){let m=i[d.key];if(!m||m.enabled===!1)return;rg(r,t);return}let u=i[d.key];if(u&&u.enabled===!1)return;rg(r,t);return}let c;try{c=qX(t)}catch{return}for(let d of c){if(d.startsWith("."))continue;let u=Ca(t,d),m;try{m=JX(u)}catch{continue}m.isDirectory()&&aO(e,u,n+1,r,o,i,s,a)}}function VX(e){try{let t=sO(Ca(e,".claude-plugin","plugin.json"),"utf8"),n=JSON.parse(t);if(n!==null&&typeof n=="object"&&"main"in n){let r=n.main;if(typeof r=="string"&&r.trim()!=="")return r}}catch{}}function rg(e,t){let n=VX(t);e.push(n!==void 0?{type:"local",path:t,main:n}:{type:"local",path:t})}function XX(e){if(e.layout!=="cache")return e.key;let t=e.key.indexOf(":");if(t<=0)return e.key;let n=e.key.slice(0,t);return`${e.key.slice(t+1)}@${n}`}function Sk(e,t){if(!t.startsWith(e))return null;let n=t.slice(e.length).replace(/^\/+/,"");if(!n)return null;let r=n.split("/").filter(i=>i.length>0);if(r.length===0)return null;if(r[0]===iO&&r.length>=3){let i=r[1];if(i){let s=Ca(e,iO,i),l=QX(s,t)??r[2];if(l)return{layout:"cache",key:`${i}:${l}`}}}let o=r[0];return o?{layout:"flat",key:o}:null}function QX(e,t){let n=Ca(e,".claude-plugin","marketplace.json");if(!wk(n))return null;let r;try{r=JSON.parse(sO(n,"utf8"))}catch{return null}if(!r||typeof r!="object")return null;let o=r.plugins;if(!Array.isArray(o))return null;let i=oO(t);for(let s of o){if(!s||typeof s!="object")continue;let a=s;if(!(typeof a.name!="string"||typeof a.source!="string")&&!(!a.source.startsWith("./")&&!a.source.startsWith("../"))&&oO(e,a.source)===i)return a.name}return null}var YX,iO,Aa,Fr=x(()=>{"use strict";z();Qt();YX=5,iO="cache"});import{existsSync as Ao,readdirSync as ZX,readFileSync as e9}from"fs";import{join as Lr}from"path";function cO(e=Ie()){let t=[],n=Lr(e,"skills");if(Ao(n))for(let r of og(n)){let o=Lr(n,r,"SKILL.md");Ao(o)&&t.push({path:o,type:"skill",source:"user"})}for(let r of lO){let o=Lr(e,`${r}s`);if(Ao(o))for(let i of og(o))i.endsWith(".md")&&t.push({path:Lr(o,i),type:r,source:"user"})}return t}function dO(e=Ke()){if(!Ao(e))return[];let t=[],n=Fn(e);for(let r of n){let i=Sk(e,r.path)?.key,s=Lr(r.path,"skills");if(Ao(s))for(let a of og(s)){let l=Lr(s,a,"SKILL.md");if(!Ao(l))continue;let c={path:l,type:"skill",source:"plugin"};i&&(c.plugin_key=i),t.push(c)}for(let a of lO){let l=Lr(r.path,`${a}s`);if(Ao(l))for(let c of og(l)){if(!c.endsWith(".md"))continue;let d={path:Lr(l,c),type:a,source:"plugin"};i&&(d.plugin_key=i),t.push(d)}}}return t}function uO(e=Lr(Ie(),"settings.json")){if(!Ao(e))return[];try{let t=e9(e,"utf8"),r=JSON.parse(t).hooks;if(!r||typeof r!="object")return[];let o=[];for(let[i,s]of Object.entries(r))if(Array.isArray(s))for(let a=0;a<s.length;a++)o.push({event:i,index:a,raw:s[a]});return o}catch{return[]}}function og(e){try{return ZX(e).filter(t=>!t.startsWith("."))}catch{return[]}}var lO,pO=x(()=>{"use strict";z();Fr();lO=["command","agent"]});import{z as je}from"zod";import{mkdir as mO,appendFile as fO}from"fs/promises";import{join as vk}from"path";function r9(e){return{runUserDiscovery:e!=="plugin",runPluginDiscovery:e!=="user",runHookInspector:e!=="plugin"}}function o9(e){let t=()=>{let i={};for(let s of yO)i[s]={correct:0,misfit:0,outlier:0};return i},n={user:t(),plugin:t()};for(let i of e)n[i.source][i.type][i.verdict]+=1;let r={high:0,med:1,low:2},o=e.filter(i=>i.verdict==="misfit").slice().sort((i,s)=>r[i.confidence]-r[s.confidence]);return{inventory:n,misfits:o}}function i9(e){return e.verdict==="misfit"&&e.confidence==="high"&&e.source==="user"}function s9(e){let t=e.filter(o=>o.source==="user"),n=e.filter(o=>o.source==="plugin"),r=["","## Discovered artifacts (audit only these)",""];if(r.push('### User-scope artifacts (set `"source": "user"`, omit `plugin_key`)'),t.length===0)r.push("(none discovered)");else for(let o of t)r.push(`- ${o.path}`);if(r.push(""),r.push('### Plugin-scope artifacts (set `"source": "plugin"`, copy `plugin_key` from each entry)'),n.length===0)r.push("(none discovered)");else for(let o of n){let i=o.plugin_key??"<unknown>";r.push(`- ${o.path} (plugin_key: ${i})`)}return r.join(`
1035
1038
  `)}function a9(e,t){let n=["","## Discovered hooks (audit only these)",""];if(n.push(`Settings file (use this absolute path verbatim in each verdict's \`path\` field): \`${e}\``),n.push(""),t.length===0)return n.push("(no hooks discovered)"),n.join(`
1036
1039
  `);for(let r of t){let o=`${r.event}-${r.index}`;n.push(`### Hook \`${o}\``),n.push(""),n.push("```json"),n.push(JSON.stringify(r.raw,null,2)),n.push("```"),n.push("")}return n.join(`
@@ -1126,10 +1129,13 @@ Create a ship-ready summary with next steps.`,m=await d.runToResult(u);if(m.stat
1126
1129
  `);for(let a=0;a<s.length;a++){let l=s[a];if(!l||!l.trim()||l.trimStart().startsWith("#"))continue;if(l.startsWith("flags:")){let d=l.slice(6).trim();if(d.startsWith("[")){let u=d.match(/\[(.*?)\]/);if(u?.[1]){let m=u[1].split(",").map(f=>f.trim()).filter(f=>f.length>0);m.length>0&&(i=m.map(zO).sort())}continue}if(d===""||d==="null"){let u=[];for(let m=a+1;m<s.length;m++){let f=s[m];if(!f||!f.match(/^\s+-\s/))break;let g=f.match(/^\s+-\s+(.+)/);g?.[1]&&u.push(g[1].trim())}u.length>0&&(i=u.map(zO).sort());continue}}let c=l.match(/^([a-zA-Z][a-zA-Z0-9_-]*):\s*(.*)$/);if(c&&c[1]!==void 0&&c[2]!==void 0){let d=c[2].trim().replace(/^['"]|['"]$/g,"");d.length>0&&(o[c[1]]=d)}}return{frontmatter:o,frontmatterFlags:i,body:r}}function ag(e){let t=Rk(e);if(t.frontmatterFlags&&t.frontmatterFlags.length>0)return t.frontmatterFlags;let n=t.frontmatter?.["argument-hint"]??"";return O9(`${n}
1127
1130
  ${t.body}`)}var M9,Ak=x(()=>{"use strict";M9=/(?<![a-zA-Z0-9_/-])--([a-z][a-z0-9-]*)(?![a-zA-Z0-9_-])/g});import{readdirSync as $9,readFileSync as D9}from"fs";import{join as JO}from"path";function F9(e,t){return e.length===0||e.length>64?{valid:!1,reason:`name must be 1\u201364 characters, got ${e.length}`}:/^[a-z0-9]+(-[a-z0-9]+)*$/.test(e)?e!==t?{valid:!1,reason:`name field "${e}" does not match parent directory name "${t}"`}:{valid:!0}:{valid:!1,reason:`name "${e}" does not match spec pattern ^[a-z0-9]+(-[a-z0-9]+)*$ (only lowercase a-z0-9 and hyphens, no leading/trailing/consecutive hyphens)`}}function L9(e,t){let n=Rk(e);if(!n.frontmatter)return null;let r=n.frontmatter.name,o=n.frontmatter.description,i=n.body.trim();if(!r||!o||i.length===0)return null;let s=F9(r,t);if(!s.valid)return process.stderr.write(`[afk] skipping skill ${t}: ${s.reason}
1128
1131
  `),null;if(o.length>YO)return process.stderr.write(`[afk] skipping skill ${t}: description exceeds ${YO} characters (got ${o.length})
1129
- `),null;let a=n.frontmatter["argument-hint"]??n.frontmatter.argumentHint,l=ag(e),c={name:r,description:o,body:i,dir:""};a&&a.length>0&&(c.argumentHint=a),l.length>0&&(c.flags=l);let d=n.frontmatter.context;return(d==="inline"||d==="fork"||d==="load")&&(c.context=d),c}function N9(e){return async(t,n,r)=>{let o=r?.defaultSubagentModel??r?.defaultModel??"sonnet",i=typeof t=="string"&&t.length>0?t:`Run the ${e.name} skill now, following the instructions in your system prompt.`,s=new ce({parentAbortSignal:n?.abortSignal,...r?.traceWriter!==void 0?{traceWriter:r.traceWriter}:{}}),a=r?.callId;return await(await s.forkSubagent({parent:{sessionId:n?.sessionId,getInputStreamRef:n?.getInputStreamRef?.bind(n),abortSignal:n?.abortSignal},config:{model:o,systemPrompt:e.body,env:{SKILL_ROOT:e.dir},isSkillDispatch:!0},idPrefix:`user-skill-${e.name}`,agentType:`user-skill-${e.name}`,...a?{parentId:a}:{}})).runToResult(i)}}function B9(e,t){try{return Ye(e).origin===t?e:`${t}:${e}`}catch{return e}}function Br(e,t){let n;try{n=$9(e,{withFileTypes:!0})}catch(o){let i=o;return i.code!=="ENOENT"&&process.stderr.write(`[afk] skipping skills dir ${e}: ${i.message}
1132
+ `),null;let a=n.frontmatter["argument-hint"]??n.frontmatter.argumentHint,l=ag(e),c={name:r,description:o,body:i,dir:""};a&&a.length>0&&(c.argumentHint=a),l.length>0&&(c.flags=l);let d=n.frontmatter.context;return(d==="inline"||d==="fork"||d==="load")&&(c.context=d),c}function N9(e){return async(t,n,r)=>{let o=r?.defaultSubagentModel??r?.defaultModel??"sonnet",i=`Run the ${e.name} skill now, following the instructions in your system prompt.`,s=typeof t=="string"&&t.length>0?`${i}
1133
+
1134
+ Skill arguments:
1135
+ ${t}`:i,a=new ce({parentAbortSignal:n?.abortSignal,...r?.traceWriter!==void 0?{traceWriter:r.traceWriter}:{}}),l=r?.callId;return await(await a.forkSubagent({parent:{sessionId:n?.sessionId,getInputStreamRef:n?.getInputStreamRef?.bind(n),abortSignal:n?.abortSignal},config:{model:o,systemPrompt:e.body,env:{SKILL_ROOT:e.dir},isSkillDispatch:!0,skillDispatchName:e.name},idPrefix:`user-skill-${e.name}`,agentType:`user-skill-${e.name}`,...l?{parentId:l}:{}})).runToResult(s)}}function B9(e,t){try{return Ye(e).origin===t?e:`${t}:${e}`}catch{return e}}function Br(e,t){let n;try{n=$9(e,{withFileTypes:!0})}catch(o){let i=o;return i.code!=="ENOENT"&&process.stderr.write(`[afk] skipping skills dir ${e}: ${i.message}
1130
1136
  `),0}let r=0;for(let o of n){if(!o.isDirectory()||o.name.startsWith("_")||o.name.startsWith("."))continue;let i;try{i=D9(JO(e,o.name,"SKILL.md"),"utf-8")}catch(c){let d=c;d.code!=="ENOENT"&&process.stderr.write(`[afk] skipping skill ${o.name}: ${d.message}
1131
1137
  `);continue}let s=L9(i,o.name);if(!s)continue;s.dir=JO(e,o.name);let l={name:B9(s.name,t),description:s.description,handler:N9(s),origin:t};s.argumentHint&&(l.argumentHint=s.argumentHint),s.flags&&s.flags.length>0&&(l.flags=s.flags),s.context!=="fork"&&(l.context="load",l.loadBody=s.body.replace(/\$\{?SKILL_ROOT\}?/g,()=>s.dir)),Dt(l),r++}return r}function Ck(){return Br(Zl(),"user")}var YO,_k=x(()=>{"use strict";z();Ft();Ak();ze();YO=1024});var Ik=x(()=>{"use strict";bO();wO();KO();GO();qO();_k()});import{isAbsolute as U9,resolve as j9}from"path";import{pathToFileURL as H9}from"url";async function XO(e,t={}){let n=t.importer??(r=>import(r));for(let r of e){if(r.main===void 0)continue;let o=U9(r.main)?r.main:j9(r.path,r.main);if(!VO.has(o)){VO.add(o);try{let s=(await n(H9(o).href))?.default;typeof s=="function"&&await s(t.pluginApi)}catch(i){t.onError?.(r,i)}}}}var VO,QO=x(()=>{"use strict";VO=new Set});import{existsSync as W9,readFileSync as K9}from"fs";import{join as G9}from"path";function Ur(e){let t=G9(e,".claude-plugin","plugin.json");if(!W9(t))return{name:null,version:null};try{let n=JSON.parse(K9(t,"utf8"));return{name:typeof n.name=="string"&&n.name.trim()?n.name.trim():null,version:typeof n.version=="string"&&n.version.trim()?n.version.trim():null}}catch{return{name:null,version:null}}}var Rd=x(()=>{"use strict"});import{z as V}from"zod";var Ad,q9,z9,Pk,ZO,e$,t$,n$,Cd,lg=x(()=>{"use strict";Ad=1,q9=V.object({toolName:V.string(),toolUseId:V.string().optional(),input:V.string().optional(),inputRaw:V.string().optional(),result:V.string().optional(),isError:V.boolean().optional()}).passthrough(),z9=V.object({user:V.string().default(""),assistant:V.string().default(""),timestamp:V.number().optional(),toolEvents:V.array(q9).optional()}).passthrough(),Pk=V.object({sessionId:V.string().optional(),name:V.string().optional(),source:V.enum(["cli","telegram"]).optional(),telegramChatId:V.number().optional(),model:V.string(),startedAt:V.number(),savedAt:V.number(),totalTurns:V.number(),totalCostUsd:V.number().optional(),totalTokens:V.number().optional(),totalDurationMs:V.number().optional(),turns:V.array(z9).default([]),forkedFrom:V.string().optional(),forkedAt:V.number().optional()}).passthrough(),ZO=V.enum(["fully_achieved","partially_achieved","not_achieved","aborted"]),e$=V.enum(["not_persisted","persisted","unknown"]),t$=V.object({tool:V.string(),label:V.string().optional()}),n$=V.object({files_written:V.number().int(),files_edited:V.number().int(),bash_commands:V.number().int(),commits:V.number().int(),mutated:V.boolean()}),Cd=V.object({facet_version:V.number().int(),session_id:V.string(),source:V.enum(["cli","telegram","unknown"]),model:V.string(),derived_at:V.string(),derived_from:V.literal("afk-session"),source_session_path:V.string(),source_session_mtime_ms:V.number(),subagent_persistence:e$,start_time:V.string(),end_time:V.string(),duration_minutes:V.number(),underlying_goal:V.string(),first_prompt:V.string(),goal_categories:V.record(V.string(),V.number()),session_type:V.string(),brief_summary:V.string(),total_turns:V.number().int(),user_message_count:V.number().int(),assistant_message_count:V.number().int(),tool_counts:V.record(V.string(),V.number()),commands:V.array(V.string()),skills:V.array(V.string()),subagents:V.array(t$),tool_errors:V.number().int(),tool_error_categories:V.record(V.string(),V.number()),friction_counts:V.record(V.string(),V.number()),friction_detail:V.string(),outcome:ZO,primary_success:V.string(),world_changes:n$,decisions:V.array(V.string()),evidence_pointers:V.array(V.string())}).passthrough()});import{basename as J9}from"path";function e7(e){if(e)try{let t=JSON.parse(e);return t&&typeof t=="object"?t:void 0}catch{return}}function cg(e){return typeof e=="string"?e:void 0}function dg(e,t){let n=e.replace(/\s+/g," ").trim();return n.length>t?`${n.slice(0,t-1)}\u2026`:n}function t7(e){return e.replace(/[-_]+/g," ").trim()}function n7(e,t){return o$.test(e)?"slash_command":t==="telegram"?"chat":"task"}function r7(e){let t=new Map,n=[];for(let r of e)r.toolUseId===void 0?n.push(r):t.set(r.toolUseId,r);return[...t.values(),...n]}function _d(e,t={}){let n=e.turns??[],r=r7(n.flatMap(_=>_.toolEvents??[])),o={},i={},s=[],a=[],l=[],c=0,d=0,u=0,m=0,f=0;for(let _ of r){let B=_.toolName;o[B]=(o[B]??0)+1,_.isError===!0&&(c+=1,i[B]=(i[B]??0)+1);let P=e7(_.inputRaw??_.input);if(B==="write_file"&&(d+=1),B==="edit_file"&&(u+=1),B==="bash"){m+=1;let M=cg(P?.command)??_.input;M&&Z9.test(M)&&(f+=1)}if(V9.has(B)){let M=cg(P?.file_path);M&&!l.includes(M)&&l.length<Q9&&l.push(M)}if(Y9.has(B)){let M;B==="skill"?(M=cg(P?.name),M&&!a.includes(M)&&a.push(M)):B==="agent"?M=cg(P?.id_prefix):M="compose",s.push(M?{tool:B,label:M}:{tool:B})}}let g=n[0]?.user??"",h=e.source??"cli",y=n7(g,h),b=[];for(let _ of n){let P=o$.exec(_.user??"")?.[1];P&&!b.includes(P)&&b.push(P)}let w=n.filter(_=>(_.user??"").trim().length>0).length,S=n.filter(_=>(_.assistant??"").trim().length>0).length,k=[...n].reverse().find(_=>(_.assistant??"").trim().length>0)?.assistant??"",T;n.length===0?T="aborted":k.trim().length===0?T="partially_achieved":T="fully_achieved";let $=T==="fully_achieved"||T==="partially_achieved"?dg(k||g||y,160)||y:"none",R=c>0?`${c} tool error(s): ${Object.entries(i).map(([_,B])=>`${_}\xD7${B}`).join(", ")}`:"",D=e.name?t7(e.name):dg(g,80),C=dg(k||g,X9),O=dg(D?`${D} \u2014 ${C}`:C,400)||"empty session",N=e.sessionId??(t.sourceSessionPath?J9(t.sourceSessionPath,".json"):"unknown"),j=e.totalDurationMs&&e.totalDurationMs>0?e.totalDurationMs:Math.max(0,e.savedAt-e.startedAt),F=t.sourceSessionPath?[...l,t.sourceSessionPath]:l,H={facet_version:Ad,session_id:N,source:h==="telegram"?"telegram":"cli",model:e.model,derived_at:(t.derivedAt??new Date).toISOString(),derived_from:"afk-session",source_session_path:t.sourceSessionPath??"",source_session_mtime_ms:t.sourceSessionMtimeMs??e.savedAt,subagent_persistence:"not_persisted",start_time:new Date(e.startedAt).toISOString(),end_time:new Date(e.savedAt).toISOString(),duration_minutes:Number((j/6e4).toFixed(2)),underlying_goal:g.slice(0,r$),first_prompt:g.slice(0,r$),goal_categories:{[y]:1},session_type:y,brief_summary:O,total_turns:n.length,user_message_count:w,assistant_message_count:S,tool_counts:o,commands:b,skills:a,subagents:s,tool_errors:c,tool_error_categories:i,friction_counts:{...i},friction_detail:R,outcome:T,primary_success:$,world_changes:{files_written:d,files_edited:u,bash_commands:m,commits:f,mutated:d>0||u>0||f>0},decisions:[],evidence_pointers:F};return Cd.parse(H)}var Y9,V9,r$,X9,Q9,Z9,o$,Mk=x(()=>{"use strict";lg();Y9=new Set(["agent","compose","skill"]),V9=new Set(["read_file","write_file","edit_file"]),r$=1e3,X9=240,Q9=50,Z9=/\bgit\s+commit(?![\w-])/,o$=/^\s*\/([a-zA-Z][\w-]*)/});import{existsSync as ug,mkdirSync as o7,readFileSync as i$,readdirSync as i7,renameSync as s7,statSync as a7,writeFileSync as l7}from"fs";import{basename as c7,dirname as d7,join as s$}from"path";function a$(e,t){return Zu(e),s$(t,`${e}.json`)}function u7(e,t){return Zu(e),s$(t,`${e}.json`)}function pg(e,t=dt()){let n=a$(e,t);if(ug(n))try{let r=JSON.parse(i$(n,"utf8")),o=Pk.safeParse(r);return o.success?o.data:void 0}catch{return}}function p7(e){if(ug(e))try{let t=JSON.parse(i$(e,"utf8")),n=Cd.safeParse(t);return n.success?n.data:void 0}catch{return}}function m7(e,t){o7(d7(e),{recursive:!0});let n=`${e}.${process.pid}.tmp`;l7(n,`${JSON.stringify(t,null,2)}
1132
- `,"utf8"),s7(n,e)}function f7(e,t){return e.facet_version===Ad&&e.source_session_mtime_ms===t}function Ok(e,t={}){let n=t.sessionsDir??dt(),r=t.cacheDir??OR(),o=a$(e,n);if(!ug(o))return;let i=a7(o).mtimeMs,s=u7(e,r);if(!t.force){let c=p7(s);if(c&&f7(c,i))return c}let a=pg(e,n);if(!a)return;let l=_d(a,{sourceSessionPath:o,sourceSessionMtimeMs:i});return m7(s,l),l}function $k(e={}){let t=e.sessionsDir??dt();return ug(t)?i7(t).filter(n=>n.endsWith(".json")).map(n=>c7(n,".json")):[]}var l$=x(()=>{"use strict";z();Mk();lg()});var c$=x(()=>{"use strict";lg();Mk();l$()});import{readFileSync as g7}from"node:fs";import{join as h7}from"node:path";function Pf(e,t){let n=Oi(e,t);if(n.length===0)return"";let r=[];for(let o of n){let i=o.argumentHint?`${o.argumentHint}`:"",s=i?`- \`${o.name} ${i}\`: ${o.description}`:`- ${o.name}: ${o.description}`;r.push(s),o.whenToUse&&r.push(` When to use: ${o.whenToUse}`)}return["Available skills (invoke via the `skill` tool):","","Each skill either dispatches one or more context-isolated subagents (delegation \u2014 preserves the main session's context) or loads its instructions directly into your current context (`load` mode). Calling `skill` is the entry point for both; the executor picks the mode per skill. Prefer a skill over inline investigation when the task shape matches.","",...r].join(`
1138
+ `,"utf8"),s7(n,e)}function f7(e,t){return e.facet_version===Ad&&e.source_session_mtime_ms===t}function Ok(e,t={}){let n=t.sessionsDir??dt(),r=t.cacheDir??OR(),o=a$(e,n);if(!ug(o))return;let i=a7(o).mtimeMs,s=u7(e,r);if(!t.force){let c=p7(s);if(c&&f7(c,i))return c}let a=pg(e,n);if(!a)return;let l=_d(a,{sourceSessionPath:o,sourceSessionMtimeMs:i});return m7(s,l),l}function $k(e={}){let t=e.sessionsDir??dt();return ug(t)?i7(t).filter(n=>n.endsWith(".json")).map(n=>c7(n,".json")):[]}var l$=x(()=>{"use strict";z();Mk();lg()});var c$=x(()=>{"use strict";lg();Mk();l$()});import{readFileSync as g7}from"node:fs";import{join as h7}from"node:path";function Pf(e,t){let n=Oi(e,t),r=t?.excludeName,o=r!==void 0&&r.length>0?n.filter(s=>s.name!==r&&!s.name.endsWith(`:${r}`)):n;if(o.length===0)return"";let i=[];for(let s of o){let a=s.argumentHint?`${s.argumentHint}`:"",l=a?`- \`${s.name} ${a}\`: ${s.description}`:`- ${s.name}: ${s.description}`;i.push(l),s.whenToUse&&i.push(` When to use: ${s.whenToUse}`)}return["Available skills (invoke via the `skill` tool):","","Each skill either dispatches one or more context-isolated subagents (delegation \u2014 preserves the main session's context) or loads its instructions directly into your current context (`load` mode). Calling `skill` is the entry point for both; the executor picks the mode per skill. Prefer a skill over inline investigation when the task shape matches.","",...i].join(`
1133
1139
  `)}function Oi(e,t){let n=[],r=new Set,o=v.AFK_INTERNAL==="1",i=An(Kt());Br(Zl(),"user"),LC("project"),Br(zu(t?.cwd),"project");for(let{dir:a,origin:l}of i.skillRoots)Br(a,l);for(let a of Yn()){let l=Ye(a);an(l,o)&&(n.push({name:a,description:l.description,source:l.origin==="user"?"user":l.origin==="project"?"project":l.origin?.startsWith("imported:")?"imported":"builtin",argumentHint:l.argumentHint,whenToUse:l.whenToUse}),r.add(a))}let s=e??mg(t);for(let a of s){if(a.type!=="local")continue;let l=ek(a.path);for(let c of l)!c.name||r.has(c.name)||an({audience:c.audience},o)&&(n.push({name:c.name,description:c.description??`Skill from plugin at ${a.path}`,source:"plugin"}),r.add(c.name))}return n}function Td(e,t){let n=new Map,r=e??mg(t);for(let o of r){if(o.type!=="local")continue;let i=ek(o.path);for(let s of i)s.name&&s.body&&s.body.length>0&&!n.has(s.name)&&n.set(s.name,{body:s.body,pluginPath:o.path,...s.allowedTools!==void 0?{allowedTools:s.allowedTools}:{},...s.context!==void 0?{context:s.context}:{},...s.readOnly===!0?{readOnly:!0}:{},...s.model!==void 0?{model:s.model}:{}})}return n}function Pa(e){let t=e??mg(),n=[],r=new Set;for(let o of t){if(o.type!=="local")continue;let i=Ur(o.path).name;if(i!==null)for(let s of Wf(h7(o.path,"agents"))){let a;try{a=g7(s,"utf8")}catch{continue}let l=_i(a);if(l===void 0)continue;let c=`${i}:${l.name}`;r.has(c)||(r.add(c),n.push({name:c,definition:l.definition,source:`plugin:${i}`,filePath:s,...l.bashReadOnly===!0?{bashReadOnly:!0}:{},...l.ignoredKeys!==void 0?{ignoredKeys:l.ignoredKeys}:{}}))}}return n}function mg(e){return[...Fn(Ju(e?.cwd)),...Fn(),...Fn(ys()),...An(Kt()).pluginRoots.flatMap(({dir:t,binary:n})=>Fn(t,{trustAll:!0,sourceEnabled:wC(n)}))]}async function Ma(){await XO(mg(),{pluginApi:{registerSkill:Dt,listSkills:Yn,getSkill:Ye,loadSkillPrompts:We,env:v,SubagentManager:ce,describeFailure:kt,discoverPluginSkillBodies:Td,getAgentFrameworkDir:Mt,getSkillsDir:Zl,getSessionsDir:dt,getOrDeriveFacet:Ok,listSessionIds:$k,deriveSessionFacet:_d,loadStoredSession:pg}})}var sr=x(()=>{"use strict";Ik();Ft();sn();_k();Fr();QO();yd();Rd();bd();lk();ze();ft();c$();z();G();Er()});function If(){try{let e=Oi();return Promise.resolve(e.map(t=>{let n={name:t.name,description:t.description};return t.argumentHint&&(n.argumentHint=t.argumentHint),n}))}catch{return Promise.resolve([])}}var Hv=x(()=>{"use strict";sr()});function fg(e){if(e.length===0)return;let t=e[e.length-1];if(!t||t.role!=="assistant"||typeof t.content=="string")return;let n=t.content,r=[];for(let i of n)i.type==="tool_use"&&typeof i.id=="string"&&r.push(i.id);if(r.length===0)return;let o={role:"user",content:r.map(i=>({type:"tool_result",tool_use_id:i,content:"Tool call interrupted before completing \u2014 no result recorded.",is_error:!0}))};e.push(o)}var Dk=x(()=>{"use strict"});function d$(e){return{messages:e.initialMessages?[...e.initialMessages]:[],currentModel:e.model,requestedModel:e.requestedModel??e.model,currentPermissionMode:e.permissionMode,userSystem:e.userSystem,toolDispatcher:e.toolDispatcher,lastUsage:null,closed:!1,autoCompactThreshold:e.autoCompactThreshold}}var u$=x(()=>{"use strict"});function b7(e,t,n,r,o){let i=y7.get(e);if(!i)return;let s=1e6,l=Math.max(0,t-r-o)/s*i.inputPerMTok,c=n/s*i.outputPerMTok,d=i.cacheWritePerMTok??i.inputPerMTok*1.25,u=i.cacheReadPerMTok??i.inputPerMTok*.1,m=o/s*d,f=r/s*u;return l+c+m+f}function p$(e,t,n){if(!e)return{stopReason:t??null};let r={inputTokens:e.input_tokens,outputTokens:e.output_tokens,stopReason:t??null};if(e.cache_read_input_tokens!=null&&(r.cachedInputTokens=e.cache_read_input_tokens),e.cache_creation_input_tokens!=null&&(r.cacheCreationTokens=e.cache_creation_input_tokens),r.totalTokens=(e.input_tokens??0)+(e.output_tokens??0),n){let o=b7(n,e.input_tokens??0,e.output_tokens??0,e.cache_read_input_tokens??0,e.cache_creation_input_tokens??0);o!==void 0&&(r.totalCostUsd=o)}return r}var y7,m$=x(()=>{"use strict";bv();y7=new Map([["claude-sonnet-5",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-opus-5",{inputPerMTok:5,outputPerMTok:25,cacheWritePerMTok:6.25,cacheReadPerMTok:.5}],["claude-sonnet-4-5-20250929",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-opus-4-5-20250929",{inputPerMTok:15,outputPerMTok:75,cacheWritePerMTok:18.75,cacheReadPerMTok:1.5}],["claude-haiku-4-5-20250929",{inputPerMTok:1,outputPerMTok:5,cacheWritePerMTok:1.25,cacheReadPerMTok:.1}],["claude-haiku-4-5-20251001",{inputPerMTok:1,outputPerMTok:5,cacheWritePerMTok:1.25,cacheReadPerMTok:.1}],["claude-3-7-sonnet-20250219",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-3-5-sonnet-20241022",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-3-5-sonnet-20240620",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-3-5-haiku-20241022",{inputPerMTok:.8,outputPerMTok:4,cacheWritePerMTok:1,cacheReadPerMTok:.08}],["claude-3-opus-20240229",{inputPerMTok:15,outputPerMTok:75,cacheWritePerMTok:18.75,cacheReadPerMTok:1.5}],["claude-3-sonnet-20240229",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-3-haiku-20240307",{inputPerMTok:.25,outputPerMTok:1.25,cacheWritePerMTok:.3,cacheReadPerMTok:.03}]])});function w7(e){let t=e.trim();if(t.length===0)return{};try{return JSON.parse(t)}catch{return{}}}function S7(e,t,n){let r=[],o=[];for(let a of e)a&&(a.kind==="text"?(r.push({type:"text",text:a.text}),o.push(a.text)):a.kind==="thinking"?a.thinking&&a.signature&&r.push({type:"thinking",thinking:a.thinking,signature:a.signature}):a.kind==="redacted_thinking"?r.push({type:"redacted_thinking",data:a.data}):r.push({type:"tool_use",id:a.id,name:a.name,input:w7(a.partialJson)}));let i=a=>a.type==="tool_use",s=r.filter(i);return{stopReason:t,assistantBlocks:r,toolUseBlocks:s,usage:n,text:o.join("")}}async function*f$(e,t){let n=[],r=null,o=null,i=!1,s=!!v.AFK_TELEGRAM_TRACE;try{s&&console.log("[translate] starting SDK event iteration");for await(let a of e){switch(s&&console.log("[translate] SDK evt:",a.type),a.type){case"message_start":{let l=a.message?.usage;l&&(o={...l});break}case"content_block_start":{let l=a.content_block;l.type==="text"?n[a.index]={kind:"text",text:""}:l.type==="thinking"?n[a.index]={kind:"thinking",thinking:"",signature:""}:l.type==="redacted_thinking"?n[a.index]={kind:"redacted_thinking",data:l.data}:l.type==="tool_use"&&(n[a.index]={kind:"tool_use",id:l.id,name:l.name,partialJson:""},yield{kind:"event",event:{type:"tool.use.start",toolUseId:l.id,toolName:l.name,toolInput:" \u2026",sessionId:t.sessionId}});break}case"content_block_delta":{let l=n[a.index],c=a.delta;c.type==="text_delta"?(l&&l.kind==="text"&&(l.text+=c.text),yield{kind:"event",event:{type:"delta.text",text:c.text,sessionId:t.sessionId}}):c.type==="input_json_delta"?l&&l.kind==="tool_use"&&(l.partialJson+=c.partial_json):c.type==="thinking_delta"?(l&&l.kind==="thinking"&&(l.thinking+=c.thinking),yield{kind:"event",event:{type:"delta.reasoning",text:c.thinking,sessionId:t.sessionId}}):c.type==="signature_delta"&&l&&l.kind==="thinking"&&(l.signature=c.signature);break}case"content_block_stop":{let l=n[a.index];l&&l.kind==="tool_use"&&(yield{kind:"event",event:{type:"tool.use",summary:l.name,toolUseIds:[l.id],sessionId:t.sessionId}});break}case"message_delta":{a.delta&&a.delta.stop_reason!==void 0&&(r=a.delta.stop_reason);let l=a.usage;l&&(o!==null?(o.output_tokens=l.output_tokens,l.cache_creation_input_tokens!=null&&(o.cache_creation_input_tokens=l.cache_creation_input_tokens),l.cache_read_input_tokens!=null&&(o.cache_read_input_tokens=l.cache_read_input_tokens),l.input_tokens!=null&&(o.input_tokens=l.input_tokens)):o={cache_creation:null,cache_creation_input_tokens:l.cache_creation_input_tokens??null,cache_read_input_tokens:l.cache_read_input_tokens??null,inference_geo:null,input_tokens:l.input_tokens??0,output_tokens:l.output_tokens,server_tool_use:null,service_tier:null});break}case"message_stop":{i=!0;break}default:break}if(i)break}s&&console.log("[translate] SDK iteration ended naturally, stopped=",i)}catch(a){s&&console.log("[translate] SDK iteration threw:",a.message),yield{kind:"event",event:{type:"error",error:a instanceof Error?a:new Error(String(a))}};return}if(!i&&r===null){yield{kind:"event",event:{type:"error",error:new Gn("the model stream ended without a terminal message (no message_stop and no stop_reason): the response was cut off mid-stream, typically an intermediary closing the connection. The turn is incomplete.")}};return}s&&console.log("[translate] yielding turn-result"),yield{kind:"turn-result",result:S7(n,r,o)}}var g$=x(()=>{"use strict";G();Ue()});function y$(){let e=v.AFK_MODEL_TTFB_TIMEOUT_MS;if(e===void 0||e.trim()==="")return h$;let t=Number.parseInt(e,10);return!Number.isFinite(t)||t<0?h$:t}function b$(e,t){if(t<=0)return{signal:e,timedOut:()=>!1,firstByteSeen:()=>{},dispose:()=>{}};let n=new AbortController,r=AbortSignal.any([e,n.signal]),o=!1,i=!1,s=setTimeout(()=>{o=!0,n.abort(new Error(v7))},t);s.unref();let a=()=>{i||(i=!0,clearTimeout(s))};return{signal:r,timedOut:()=>o,firstByteSeen:a,dispose:a}}var h$,v7,w$=x(()=>{"use strict";G();h$=18e4;v7="model_ttfb_timeout"});import{randomUUID as k7}from"node:crypto";function T7(e){let{name:t,description:n,input_schema:r}=e;return{name:t,...n!==void 0?{description:n}:{},input_schema:r}}function R7(e){if(!("status"in e))return!1;let t=e.status;return t===529||t===503}function S$(e){if(e===null||typeof e!="object")return!1;let t=e;if(t.status===529||t.status===503)return!0;let n=t.error;if(n===null||typeof n!="object")return!1;let r=n;return((r.error!==null&&typeof r.error=="object"?r.error.type:void 0)??r.type)==="overloaded_error"}async function A7(e,t,n,r,o){for(let i=0;;i++){if(i>0){let s=k$*Math.pow(2,i-1);if(await $r(s,o),o.aborted)throw new Error("aborted")}try{return await Promise.resolve(e.messages.create(t,{headers:n,signal:r}))}catch(s){if(r.aborted)throw s;let a=s instanceof Error?s:new Error(String(s));if(R7(a)&&i<Fk)continue;throw a}}}async function*v$(e,t){se(e.traceWriter,{phase:"rate_limit",durationMs:Date.now()-t,metadata:{reason:"ttfb-timeout",source:"first-byte",resolvedModel:e.model}}),yield{type:"stream.retry",sessionId:e.ctx.sessionId}}async function*C7(e,t){let n=t.throttleQueue;if(!n)return await e;n.resetAttempts();let r=Symbol("create-done"),o=!1,i=e.then(s=>(o=!0,s),s=>{throw o=!0,s});for(;;){for(let a of n.takeAll())yield{type:"rate_limit",sessionId:t.ctx.sessionId,status:a.status,attempt:a.attempt,...a.retryAfterMs!==void 0?{retryAfterMs:a.retryAfterMs}:{}};if(o)return await i;await Promise.race([i.then(()=>r,()=>r),n.waitForItem().then(()=>{})])}}async function*Lk(e){let t=Rf(e.maxToolUseIterations),n={stopReason:null},r=0,o=0,i=!1,s=0,a=0,l=y$(),c=!1,d=k7(),u=Date.now(),m=h=>({...h,durationMs:Date.now()-u});se(e.traceWriter,{phase:"loop_start"});let f=e.signal.aborted?Date.now():null,g=()=>{f===null&&(f=Date.now())};e.traceWriter&&!e.signal.aborted&&e.signal.addEventListener("abort",g,{once:!0});try{for(;;){if(e.signal.aborted){yield{type:"turn.completed",usage:m(n),sessionId:e.ctx.sessionId};return}let h=Ep({baseUrl:e.baseUrl})?QA(e.messages,xp()):e.messages,y={model:e.model,max_tokens:e.maxTokens,messages:h,stream:!0,...e.system!==null?{system:e.system}:{},...e.tools!==null&&e.tools.length>0&&!i?{tools:e.tools.map(T7)}:{},...e.thinking!==void 0?{thinking:e.thinking}:{},...e.effort!==void 0?{output_config:{effort:e.effort}}:{}},b=Date.now(),w=b$(e.signal,l),S=!1,k;try{k=yield*C7(A7(e.client,y,e.headers,w.signal,e.signal),e)}catch(F){if(w.timedOut()&&!e.signal.aborted&&!c)w.dispose(),S=!0;else{if(w.dispose(),e.signal.aborted){yield{type:"turn.completed",usage:m(n),sessionId:e.ctx.sessionId};return}let H=F instanceof Error?F:new Error(String(F));H.message.includes("thinking")&&_7(e.messages,H),yield{type:"error",error:H};return}}if(S){yield*v$(e,b),c=!0;continue}let T=null,A=!1,$=!1,R=!1,D=!1;try{v.AFK_TELEGRAM_TRACE&&console.log("[loop] awaiting translateMessageStream events");for await(let F of f$(ga(k,e.signal),e.ctx))if(!D&&(F.kind==="turn-result"||F.event.type!=="error")&&(D=!0,w.firstByteSeen(),se(e.traceWriter,{phase:"model_ttfb",durationMs:Date.now()-b,resolvedModel:e.model})),v.AFK_TELEGRAM_TRACE&&console.log("[loop] translate yielded:",F.kind,F.kind==="event"?F.event.type:""),F.kind==="event"){if(F.event.type==="error"){if(w.timedOut()&&!e.signal.aborted&&!c&&!D){S=!0;break}if(S$(F.event.error)&&s<Fk&&!e.signal.aborted){$=!0;break}if(e.signal.aborted)break;if(F.event.error instanceof Gn&&a<E7&&!e.signal.aborted){R=!0;break}yield F.event,A=!0;break}yield F.event}else{T=F.result;break}v.AFK_TELEGRAM_TRACE&&console.log("[loop] translate loop exited, turnResult=",T?"set":"null")}catch(F){if(w.timedOut()&&!e.signal.aborted&&!c&&!D)w.dispose(),S=!0;else{if(w.dispose(),e.signal.aborted){yield{type:"turn.completed",usage:m(n),sessionId:e.ctx.sessionId};return}let H=F instanceof Error?F:new Error(String(F));if(S$(H)&&s<Fk&&!e.signal.aborted)$=!0;else{yield{type:"error",error:H};return}}}if(w.dispose(),S){yield*v$(e,b),c=!0;continue}if($){if(s+=1,se(e.traceWriter,{phase:"rate_limit",metadata:{reason:"overloaded",source:"mid-stream",attempt:s}}),yield{type:"stream.retry",sessionId:e.ctx.sessionId},await $r(k$*Math.pow(2,s-1),e.signal),e.signal.aborted){yield{type:"turn.completed",usage:m(n),sessionId:e.ctx.sessionId};return}continue}if(R){if(a+=1,se(e.traceWriter,{phase:"rate_limit",metadata:{reason:"stream-incomplete",source:"mid-stream",attempt:a}}),yield{type:"stream.retry",sessionId:e.ctx.sessionId},await $r(x7*Math.pow(2,a-1),e.signal),e.signal.aborted){yield{type:"turn.completed",usage:m(n),sessionId:e.ctx.sessionId};return}continue}if(s=0,a=0,c=!1,A){e.signal.aborted&&(yield{type:"turn.completed",usage:m(n),sessionId:e.ctx.sessionId});return}if(T===null){yield{type:"turn.completed",usage:m(n),sessionId:e.ctx.sessionId};return}let C=p$(T.usage,T.stopReason,e.model);if(n=qc(n,C),n.contextWindowTokens=(C.inputTokens??0)+(C.outputTokens??0)+(C.cachedInputTokens??0)+(C.cacheCreationTokens??0),e.onUsageProgress?.(n),T.stopReason!=="tool_use"){if(T.stopReason==="refusal"){yield{type:"assistant.message",text:T.text.length>0?T.text:`The model stopped with a content-safety refusal (stop_reason: "refusal") and returned no output. This is Anthropic's safety system declining the request \u2014 not an afk error. Because the flagged context stays in the conversation, follow-up messages will likely be refused the same way; rephrase the request or start a fresh session to continue.`,sessionId:e.ctx.sessionId},yield{type:"turn.completed",usage:m(n),sessionId:e.ctx.sessionId};return}T.text.length>0&&(yield{type:"assistant.message",text:T.text,sessionId:e.ctx.sessionId},T.text.length<=200&&(yield{type:"suggestion",suggestion:T.text,sessionId:e.ctx.sessionId}));let F=T.assistantBlocks.filter(H=>H.type!=="tool_use");F.length>0&&e.messages.push({role:"assistant",content:F}),yield{type:"turn.completed",usage:m(i?{...n,stopReason:So}:n),sessionId:e.ctx.sessionId};return}let O=e.messages.length;e.messages.push({role:"assistant",content:T.assistantBlocks});try{o+=T.toolUseBlocks.length;let F=[],H=new Map;for(let I of T.toolUseBlocks){F.push({id:I.id,name:I.name,input:I.input,signal:e.signal});let U=Date.now();H.set(I.id,U),Cs(e.traceWriter,Tf({toolUseId:I.id,name:I.name,input:I.input,subagentId:e.subagentId})),yield{type:"tool.use.start",toolUseId:I.id,toolName:I.name,toolInput:Ai(I.name,I.input),toolInputRaw:kf(I.input),sessionId:e.ctx.sessionId}}if(e.signal.aborted){let I=F.map(U=>({type:"tool_result",tool_use_id:U.id,content:"Tool call aborted",is_error:!0}));e.messages.push({role:"user",content:I}),yield{type:"turn.completed",usage:m(n),sessionId:e.ctx.sessionId};return}let _;if(e.toolDispatcher.executeBatch)try{_=await e.toolDispatcher.executeBatch(F)}catch(I){_=F.map(()=>({content:`Tool batch execution failed: ${I instanceof Error?I.message:String(I)}`,isError:!0}))}else{_=[];for(let I of F){if(e.signal.aborted){_.push({content:"Tool call aborted",isError:!0});continue}try{_.push(await e.toolDispatcher.execute(I))}catch(U){let K=U instanceof Error?U.message:String(U);_.push({content:`Tool execution threw: ${K}`,isError:!0})}}}let B=[];for(let I=0;I<F.length;I++){let U=F[I],K=_[I],Q=H.get(U.id),Z=typeof Q=="number"?Date.now()-Q:0,ie=K.truncated===!0||K.content.includes("[output truncated");Cs(e.traceWriter,Ef({toolUseId:U.id,name:U.name,result:K,truncated:ie,durationMs:Z,subagentId:e.subagentId})),yield{type:"tool.output",toolUseId:U.id,toolName:U.name,content:K.content,...K.isError===!0?{isError:!0}:{},...ie?{truncated:!0}:{},...K.incomplete===!0?{incomplete:!0}:{},...K.incompleteReason?{incompleteReason:K.incompleteReason}:{},...typeof K.batchIndex=="number"&&typeof K.batchSize=="number"?{batchIndex:K.batchIndex,batchSize:K.batchSize}:{},sessionId:e.ctx.sessionId},K.render?.diff&&(yield{type:"tool.diff",toolUseId:U.id,diff:K.render.diff,sessionId:e.ctx.sessionId});let{content:q,isError:de,image:Pe}=K,Me=Pe!==void 0?[{type:"image",source:{type:"base64",media_type:Pe.mediaType,data:Pe.data}},...q.length>0?[{type:"text",text:q}]:[]]:q;B.push({type:"tool_result",tool_use_id:U.id,content:Me,...de===!0?{is_error:!0}:{}})}let P={role:"user",content:B};e.messages.push(P);let M=_.find(I=>I.failureClass===Xs);if(M){yield{type:"error",error:new Ss(M.content)};return}}catch(F){throw e.messages.splice(O),F}r+=1;let N=T.toolUseBlocks[T.toolUseBlocks.length-1],j=N?`${N.name}${Ai(N.name,N.input)}`:"unknown";if(yield{type:"progress",progress:{taskId:d,description:"Working",summary:`round ${r}: ${j}`,lastToolName:N?.name,totalTokens:n.totalTokens??0,toolUses:o,durationMs:Date.now()-u},sessionId:e.ctx.sessionId},i){yield{type:"turn.completed",usage:m({...n,stopReason:So}),sessionId:e.ctx.sessionId};return}if(Af(r,t)){let F=e.messages[e.messages.length-1];F!==void 0&&F.role==="user"&&Array.isArray(F.content)&&F.content.push({type:"text",text:xf}),i=!0;continue}}}finally{e.signal.removeEventListener("abort",g),f!==null&&e.signal.reason==="interrupted"&&se(e.traceWriter,{phase:"interrupt_halt",durationMs:Date.now()-f,metadata:{provider:"anthropic-direct"}}),se(e.traceWriter,{phase:"loop_end",durationMs:Date.now()-u})}}function _7(e,t){try{let n=[];for(let r=0;r<e.length;r++){let o=e[r];if(o.role!=="assistant"||typeof o.content=="string")continue;let i=o.content;for(let s=0;s<i.length;s++){let a=i[s];if(a.type==="thinking"){let l=a;(!l.thinking||!l.signature)&&n.push({msgIdx:r,blockIdx:s,thinking:l.thinking?`(${l.thinking.length} chars)`:"(empty)",sigLen:l.signature?.length??0})}}}console.error("[afk] thinking-block diagnostic \u2014 API rejected request with:",t.message),console.error(`[afk] messages.length=${e.length}, invalid thinking blocks:`,n.length>0?JSON.stringify(n):"none found (cause may be elsewhere)")}catch{}}var Fk,k$,E7,x7,T$=x(()=>{"use strict";m$();Aw();g$();Ue();gf();Ce();Fv();G();Cf();w$();vf();cd();Lv();gm();Ue();cd();Fk=3,k$=5e3,E7=2,x7=1e3});var E$=x(()=>{"use strict";si()});import{randomUUID as gg}from"node:crypto";var x$,I7,P7,M7,O7,$7,hg,R$=x(()=>{"use strict";T$();_s();Tw();E$();Cf();Ce();x$=7200*1e3,I7=3,P7=12e4,M7=5e3,O7=1e3,$7=60*1e3,hg=class{_client;_authMode;initSessionId;tokenRefresher;autoResumeOnUsageLimit;refreshPromise=null;usageLimitWaitPromise=null;constructor(t){this._client=t.client,this._authMode=t.authMode,this.initSessionId=t.initSessionId,this.tokenRefresher=t.tokenRefresher,this.autoResumeOnUsageLimit=t.autoResumeOnUsageLimit}get client(){return this._client}get authMode(){return this._authMode}async forceClientRefresh(){if(!this.tokenRefresher)return null;let t=pt(),n=null;try{if(this.refreshPromise)n=await this.refreshPromise;else{this.refreshPromise=this.tokenRefresher();try{n=await this.refreshPromise??null}finally{this.refreshPromise=null}}}catch{return this.refreshPromise=null,null}if(!n)return null;this._client=n;let r=pt();return{accountId:so(r??""),swapped:t!==r}}async*turnWithRetries(t,n){yield*this.turnWithUsageLimitRetry(t,n)}async*turnWithUsageLimitRetry(t,n){let r=null,o=null,i=!1,s=0;for(;;){let u,m=!1;for await(let h of this.turnWithAuthRetry(t,n)){if(h.type==="error"){let y=kw(h.error);if(y&&y.kind==="oauth-limit"){o=y.resetsAt,r=h;break}if(y&&y.kind==="oauth-limit-no-ts"){i=!0,r=h;break}if(y&&y.kind==="rate-limit-transient"&&s<I7){m=!0,u=y.retryAfterMs;break}}yield h}if(!m)break;if(s+=1,n()||t.signal.aborted)return;let g=Math.min(u??M7,P7)+Math.floor(Math.random()*O7);if(se(t.traceWriter,{phase:"rate_limit",metadata:{reason:"retry-after",source:"retry-layer",attempt:s,waitMs:g}}),await $r(g,t.signal),n()||t.signal.aborted)return;t.headers=xn(this._authMode,this.initSessionId,gg())}if(!r)return;if(i){let u=so(pt()??"");if(yield{type:"paused",reason:"usage-limit",accountId:u,autoResume:this.autoResumeOnUsageLimit},se(t.traceWriter,{phase:"usage_limit_pause",metadata:{reason:"usage-limit",source:"retry-layer",hasResetTimestamp:!1,autoResume:this.autoResumeOnUsageLimit}}),!this.autoResumeOnUsageLimit){yield r;return}let m=Date.now(),f=!1;for(;;){let g;if(this.usageLimitWaitPromise)g="aborted";else{this.usageLimitWaitPromise=HA({signal:t.signal,retryAfterMs:$7});try{g=await this.usageLimitWaitPromise}finally{this.usageLimitWaitPromise=null}}if(g==="aborted")return;let h=u;if(g==="hot-swap"){let b=await this.forceClientRefresh();b&&(t.client=this._client,h=b.accountId)}t.headers=xn(this._authMode,this.initSessionId,gg());let y=null;for await(let b of this.turnWithAuthRetry(t,n)){if(!f&&b.type==="error"){let w=kw(b.error);if(w&&(w.kind==="oauth-limit"||w.kind==="oauth-limit-no-ts")){y=b;break}}f||(yield{type:"resumed",hotSwapped:g==="hot-swap",accountId:h},se(t.traceWriter,{phase:"usage_limit_resume",durationMs:Date.now()-m,metadata:{source:"retry-layer",hotSwapped:g==="hot-swap"}}),f=!0),yield b}if(!y)return;if(Date.now()-m>x$){yield y;return}}}if(!o)return;if(o.getTime()-Date.now()>x$){yield r;return}let a=so(pt()??""),l=Date.now();if(yield{type:"paused",reason:"usage-limit",resetsAt:o,accountId:a,autoResume:this.autoResumeOnUsageLimit},se(t.traceWriter,{phase:"usage_limit_pause",metadata:{reason:"usage-limit",source:"retry-layer",hasResetTimestamp:!0,autoResume:this.autoResumeOnUsageLimit,resetsAt:o.toISOString()}}),!this.autoResumeOnUsageLimit){yield r;return}let c;if(this.usageLimitWaitPromise)c=await this.usageLimitWaitPromise;else{this.usageLimitWaitPromise=jA({resetsAt:o,signal:t.signal});try{c=await this.usageLimitWaitPromise}finally{this.usageLimitWaitPromise=null}}if(c==="aborted")return;let d=a;if(c==="hot-swap"){let u=await this.forceClientRefresh();u&&(t.client=this._client,d=u.accountId)}t.headers=xn(this._authMode,this.initSessionId,gg()),yield{type:"resumed",hotSwapped:c==="hot-swap",accountId:d},se(t.traceWriter,{phase:"usage_limit_resume",durationMs:Date.now()-l,metadata:{source:"retry-layer",hotSwapped:c==="hot-swap"}}),yield*this.turnWithAuthRetry(t,n)}async*turnWithAuthRetry(t,n){let r=null;for await(let i of Lk(t)){if(n())return;if(i.type==="error"&&this.isRetryableAuth(i.error)){r=i;break}yield i}if(!r)return;if(!await this.forceClientRefresh()){yield r;return}t.client=this._client,t.headers=xn(this._authMode,this.initSessionId,gg()),yield*Lk(t)}isRetryableAuth(t){return this._authMode==="oauth"&&this.tokenRefresher!==void 0&&"status"in t&&t.status===401}}});function D7(e){if(e.role!=="user")return!1;let t=e.content;if(typeof t=="string")return!0;if(!Array.isArray(t))return!1;for(let n of t)if(n.type==="tool_result")return!1;return!0}function F7(e){let n=[(e.role==="user"?"User":"Assistant")+":"];if(typeof e.content=="string")n.push(e.content);else if(Array.isArray(e.content))for(let r of e.content){let o=r.type;if(o==="text"&&"text"in r)n.push(r.text);else if(o==="tool_use"){let i=r.name??"unknown",s=M$(r.input);n.push(`[tool call: ${i} ${s}]`)}else if(o==="tool_result"){let i=r.content;n.push(`[tool result: ${O$(i)}]`)}else o==="image"?n.push("[image]"):o==="document"&&n.push("[document]")}return n.join(`
1134
1140
  `)}function L7(e){let t=0;if(typeof e.content=="string")t+=e.content.length;else if(Array.isArray(e.content))for(let n of e.content){let r=n.type;r==="text"&&"text"in n?t+=n.text.length:r==="tool_use"?t+=M$(n.input).length:r==="tool_result"&&(t+=O$(n.content).length)}return t}function N7(e){if(typeof e=="string")return Ri(e);if(Array.isArray(e)){let t=0;for(let n of e)n.type==="text"&&"text"in n&&(t+=Ri(n.text));return t}return 0}function B7(e){if(typeof e=="string")return ma(e);if(Array.isArray(e)){for(let t of e)if(t.type==="text"&&"text"in t)return ma(t.text)}return!1}function A$(e,t){return uf(e,U7,t??{})}function C$(e,t,n,r){return xv(e,t,yg,n,r)}function _$(e,t,n){let r=Rv(e,yg);return{model:t,max_tokens:n,system:nd,messages:[{role:"user",content:id(r)}],stream:!0}}function I$(e,t,n){return Av(e,t,n,yg)}function P$(e,t,n){return Cv(e,t,n,yg)}function M$(e){try{let t=JSON.stringify(e);return t.length>240?t.slice(0,237)+"...":t}catch{return"{}"}}function O$(e){if(typeof e=="string")return e.length>320?e.slice(0,317)+"...":e;if(Array.isArray(e)){let t=[];for(let r of e)r.type==="text"&&"text"in r&&t.push(r.text);let n=t.join(" ");return n.length>320?n.slice(0,317)+"...":n}return""}var yg,U7,$$=x(()=>{"use strict";sd();yg={isFreshUserTurn:D7,renderMessage:F7,buildPreamble(e){return[{role:"user",content:rd+`
1135
1141
 
@@ -1140,7 +1146,7 @@ ${t.body}`)}var M9,Ak=x(()=>{"use strict";M9=/(?<![a-zA-Z0-9_/-])--([a-z][a-z0-9
1140
1146
  `;process.stderr.write(c)}}var sQ,aQ,lQ,Oa=x(()=>{"use strict";G();sQ=`# AFK PROMPT DUMP \u2014 May contain secrets. Inspect before sharing.
1141
1147
  `,aQ=/key|token|secret|password|credential|auth/i,lQ=[[/sk-ant-[A-Za-z0-9_\-]{8,200}/g,e=>`<REDACTED sk-ant length=${e[0].length}>`],[/sk-(?!ant-)[A-Za-z0-9_\-]{20,200}/g,e=>`<REDACTED sk- length=${e[0].length}>`],[/Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,e=>`<REDACTED Bearer length=${e[0].length}>`],[/AKIA[A-Z0-9]{16}/g,e=>`<REDACTED AKIA length=${e[0].length}>`],[/xox[baprs]-[A-Za-z0-9\-]{10,200}/g,e=>`<REDACTED xox token length=${e[0].length}>`],[/\d{8,12}:[A-Za-z0-9_\-]{35}/g,e=>`<REDACTED Telegram token length=${e[0].length}>`],[/([A-Za-z_]{3,}(?:[Kk][Ee][Yy]|[Tt][Oo][Kk][Ee][Nn]|[Ss][Ee][Cc][Rr][Ee][Tt]|[Pp][Aa][Ss][Ss][Ww][Oo][Rr][Dd]|[Cc][Rr][Ee][Dd][Ee][Nn][Tt][Ii][Aa][Ll])[A-Za-z_]*)=([^\s]{16,})/g,e=>`${e[1]}=<REDACTED length=${e[2].length}>`],[/([A-Z_]{3,}(?:KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|AUTH)[A-Z_]*)=([^\s]{16,})/g,e=>`${e[1]}=<REDACTED length=${e[2].length}>`]]});function J$(e){let t=typeof e.baseUrl=="string"&&e.baseUrl.length>0,n=t?e.apiKey&&e.apiKey.length>0?e.apiKey:v.AFK_LOCAL_API_KEY||"local":e.apiKey&&e.apiKey.length>0?e.apiKey:v.ANTHROPIC_API_KEY||v.CLAUDE_CODE_OAUTH_TOKEN||"";return{localMode:t,token:n}}var Y$=x(()=>{"use strict";G()});function V$(e){if((e.depth===void 0||e.depth===0)&&e.parentSessionId===void 0&&e.sessionId!==void 0&&e.currentPresenceSessionId===null){let n=e.sessionId,r=e.runtimeStateSource.getWorkspace();return Ec({sessionId:n,surface:e.surface,actor:or(e.depth),cwd:e.cwd??process.cwd(),startedAt:new Date().toISOString(),model:{provider:e.providerName,name:e.model},workspace:r,pid:process.pid}),process.once("exit",()=>{Rr(n)}),process.once("SIGINT",()=>{Rr(n),process.exit(130)}),process.once("SIGTERM",()=>{Rr(n),process.exit(143)}),n}return e.currentPresenceSessionId}var X$=x(()=>{"use strict";dn();wo()});function Sg(e,t,n){let r=Ic({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(`
1142
1148
 
1143
- `)}var Kk=x(()=>{"use strict";dn()});function Q$(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=Sg(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 Z$=x(()=>{"use strict";Kk()});import eD from"@anthropic-ai/sdk";function uQ(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 Id,tD,Gk,tt,pQ,$i=x(()=>{"use strict";_s();Sp();WA();KA();Tp();si();G$();fc();Hk();Hk();Oc();om();gv();li();ln();yv();Zp();Vp();Rn();sr();Mn();Oa();G();Y$();dn();X$();Z$();Kk();Id="anthropic-direct",tD="claude-sonnet-5",Gk=null,tt=class{name=Id;externalTools;memoryStore;providerFactory;skillExecutor;schemas;hookRegistry;permissions;canUseTool;subagentExecutor;composeExecutor;surface;readOnlyMemory;readOnlyBash;mcpManager;customTools;_sharedReadRoots;_sharedWriteRoots;_currentPermissionMode="default";_initialResolveBase;_currentCwd;_mcpToolsCache=null;_mcpHandlersCache=null;_presenceSessionId=null;constructor(t={}){let n=[...Ir];t.subagentExecutor&&n.push(t.subagentExecutor.describeAgentTool?.()??zt),t.skillExecutor&&n.push(pi),t.composeExecutor&&n.push(mi),t.readOnlyMemory===!0?n.push(Ys):n.push(...po),n.push(Zn);for(let r of t.customTools??[])n.some(o=>o.name===r.schema.name)||n.push(r.schema);if(this.memoryStore=t.memoryStore??new mt,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.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){let r=ef(t,n?.cwd),o=_c(this.memoryStore,void 0,this.surface);for(let[a,l]of o)this.readOnlyMemory&&a!=="memory_search"||r.set(a,l);n?.runtimeStateSource&&r.set("get_runtime_state",Vs(n.runtimeStateSource));for(let a of this.customTools)r.has(a.schema.name)||r.set(a.schema.name,a.handler);if(this.mcpManager){this._mcpToolsCache||(this._mcpToolsCache=this.mcpManager.getMcpTools()),this._mcpHandlersCache||(this._mcpHandlersCache=this.mcpManager.getMcpHandlers());for(let[a,l]of this._mcpHandlersCache)r.set(a,l)}let i=this._mcpToolsCache??[],s=n?.planExitControls;return s&&r.set(qt,qp(s)),new Jt({handlers:r,sessionGrantManager:this,allowAll:zn(t),schemas:[...this.schemas,...i,...s?[Gp]:[]],hookRegistry:Yp(n?.hookRegistry,this.hookRegistry),permissions:Qp(this.mcpManager?Xp(this.permissions,this.mcpManager.getMcpToolWireNames()):this.permissions,this.customTools.map(a=>a.schema.name)),subagentExecutor:this.subagentExecutor,skillExecutor:this.skillExecutor,composeExecutor:this.composeExecutor,...this.canUseTool!==void 0?{canUseTool:this.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:this.readOnlyBash})}close(){this.memoryStore.close()}async complete(t){let n=t.apiKey&&t.apiKey.length>0?t.apiKey:v.ANTHROPIC_API_KEY||v.CLAUDE_CODE_OAUTH_TOKEN||"";if(!n)throw new Error(`${Id} 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??tD,system:t.system,user:t.user,maxTokens:t.maxTokens??64};t.signal&&(r.signal=t.signal);let o=this.providerFactory??Gk;return o&&(r.clientFactory=o),$s(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 uo({getReadRoots:()=>this._sharedReadRoots,getWriteRoots:()=>this._sharedWriteRoots,ensureInitialized:()=>this.ensureSharedRoots(),getProtectedRoot:()=>this._initialResolveBase,getAllowAll:()=>zn(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}=J$(n);if(!o||o.length===0)throw new Error(`${Id} provider requires config.apiKey (resolved from ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN)`);let i=yp(o),s=!r&&n.traceWriter?new vp:void 0,a=r?void 0:_=>{let B=zA(_);B!==void 0&&JA(B)},l=dc(o,i,n.baseUrl,r?void 0:Ew(n.traceWriter,void 0,s?_=>s.push(_):void 0,a)),c=this.providerFactory??Gk,d=c?c(l):new eD(l),u=r?null:RA(i),m=uQ(n.systemPrompt),f=typeof n.model=="string"&&n.model.length>0?xt(n.model)??n.model:tD,g=Bk(n,f),h=n.permissionMode??"default";this._currentPermissionMode=h,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 y,b=Pc({surface:this.surface,cwd:n.cwd??process.cwd(),modelName:f,providerName:Id,permissionMode:h,...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:()=>y instanceof Jt?y.toolDefs.map(_=>_.name):[],getMcpTools:()=>this.mcpManager?.getMcpTools()??[],getSubagents:()=>this.subagentExecutor?this.subagentExecutor.getSubagentsLite():{active:[],backgroundJobs:[]}});this._presenceSessionId=V$({depth:n.depth,parentSessionId:n.parentSessionId,sessionId:n.sessionId,currentPresenceSessionId:this._presenceSessionId,runtimeStateSource:b,surface:this.surface,cwd:n.cwd,providerName:Id,model:f}),y=this.externalTools?Mc(this.externalTools,b):this.buildDispatcher(h,{cwd:n.cwd,readRoots:this._sharedReadRoots,writeRoots:this._sharedWriteRoots,...n.env!==void 0?{env:n.env}:{},sessionId:n.sessionId,parentSessionId:n.parentSessionId,...n.subagentId!==void 0?{subagentId:n.subagentId}:{},...n.subagentToolOutputCapBytes!==void 0?{subagentToolOutputCapBytes:n.subagentToolOutputCapBytes}:{},traceWriter:n.traceWriter,runtimeStateSource:b,hookRegistry:n.hookRegistry,planExitControls:n.planExitControls});let w=y instanceof Jt?[...y.toolDefs]:[...Ir,Zn],S=n.isSkillDispatch?w.filter(_=>_.name!=="ask_question"&&_.name!=="terminal_font_size"):n.isNonInteractive?w.filter(_=>_.name!=="ask_question"):w,k=n.cwd||process.cwd(),T=this.skillExecutor?Pf(void 0,{cwd:k}):"",A=nf(n.isSkillDispatch),$=rf(this.readOnlyMemory),R={surface:this.surface,sessionId:n.sessionId,depth:n.depth,maxDepth:n.maxDepth,workspace:b.getWorkspace()},D={toolBase:A,memoryPrompt:$,hotMemory:n.hotMemory??"",manifest:T,userSystem:m},C=Sg(D,k,R);z$({prompt:t.prompt,options:{model:f,maxTokens:g,system:C},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 O;if(i==="oauth"&&!r){let _=this.providerFactory??Gk;O=async()=>{let B=await Sw();if(!B)return null;let P=dc(B,"oauth",n.baseUrl,Ew(n.traceWriter,void 0,s?M=>s.push(M):void 0,a));return _?_(P):new eD(P)}}let N=n.sessionId??n.resume,j=q$(n.resumeHistory),F=this.externalTools?void 0:Q$({stableSystemPrefix:D,config:n,surface:this.surface,runtimeStateSource:b,getCurrentCwd:()=>this._currentCwd,setCurrentCwd:_=>{this._currentCwd=_},getCurrentPermissionMode:()=>this._currentPermissionMode,sharedReadRoots:this._sharedReadRoots,sharedWriteRoots:this._sharedWriteRoots,subagentExecutor:this.subagentExecutor,skillExecutor:this.skillExecutor,composeExecutor:this.composeExecutor,buildDispatcher:(_,B)=>this.buildDispatcher(_,B)}),H=jk(n.effort,f);return new bg({client:d,authMode:r?"api-key":i,promptStream:t.prompt,toolDispatcher:y,...N!==void 0?{sessionId:N}:{},...j!==void 0?{initialMessages:j}:{},model:f,requestedModel:typeof n.model=="string"&&n.model.length>0?n.model:f,...n.permissionMode!==void 0?{permissionMode:n.permissionMode}:{},maxTokens:g,tools:S,userSystem:C,systemPrefix:u,tokenRefresher:O,...n.thinking!==void 0?{thinking:Uk(n.thinking,g,f)}:{},...H!==void 0?{effort:H}:{},...r?{baseUrl:n.baseUrl}:{},...n.traceWriter?{traceWriter:n.traceWriter}:{},...n.subagentId!==void 0?{subagentId:n.subagentId}:{},...n.autoResumeOnUsageLimit!==void 0?{autoResumeOnUsageLimit:n.autoResumeOnUsageLimit}:{},...n.maxToolUseIterations!==void 0?{maxToolUseIterations:n.maxToolUseIterations}:{},...F!==void 0?{cwdDependentsFactory:F}:{},onPermissionMode:_=>{this._currentPermissionMode=_},...this.mcpManager!==void 0?{mcpManager:this.mcpManager}:{},...da(n.autoCompact)!==void 0?{autoCompactThreshold:da(n.autoCompact)}:{},...n.hookRegistry!==void 0?{hookRegistry:n.hookRegistry}:{},...s!==void 0?{throttleQueue:s}:{}})}};pQ=new tt});function fQ(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 re(e,t){let n=t?.explicit??v.AFK_PROVIDER,r=t?.openaiBaseUrl??v.AFK_OPENAI_BASE_URL,o=fQ(n);if(o)return o;let i=ii(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&&(mQ.has(s)||s.startsWith("claude-")||s.startsWith("claude_")||s.startsWith("local-")||s.startsWith("local_"))?"anthropic-direct":s&&(s.startsWith("gpt-")||s.startsWith("gpt_")||Ti(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 vg(e,t,n){let r=re(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 Xt(s);default:return new tt(s)}}var mQ,He=x(()=>{"use strict";$i();dd();Rn();Ot();sa();G();$i();dd();mQ=new Set([...Object.keys(ww),"auto"])});var $a,qk=x(()=>{"use strict";$a=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 kg(e,t){let n=t??Ps(),r=Ms(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":re(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 zk=x(()=>{"use strict";He();Ot()});function gQ(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(`
1149
+ `)}var Kk=x(()=>{"use strict";dn()});function Q$(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=Sg(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 Z$=x(()=>{"use strict";Kk()});import eD from"@anthropic-ai/sdk";function uQ(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 Id,tD,Gk,tt,pQ,$i=x(()=>{"use strict";_s();Sp();WA();KA();Tp();si();G$();fc();Hk();Hk();Oc();om();gv();li();ln();yv();Zp();Vp();Rn();sr();Mn();Oa();G();Y$();dn();X$();Z$();Kk();Id="anthropic-direct",tD="claude-sonnet-5",Gk=null,tt=class{name=Id;externalTools;memoryStore;providerFactory;skillExecutor;schemas;hookRegistry;permissions;canUseTool;subagentExecutor;composeExecutor;surface;readOnlyMemory;readOnlyBash;mcpManager;customTools;_sharedReadRoots;_sharedWriteRoots;_currentPermissionMode="default";_initialResolveBase;_currentCwd;_mcpToolsCache=null;_mcpHandlersCache=null;_presenceSessionId=null;constructor(t={}){let n=[...Ir];t.subagentExecutor&&n.push(t.subagentExecutor.describeAgentTool?.()??zt),t.skillExecutor&&n.push(pi),t.composeExecutor&&n.push(mi),t.readOnlyMemory===!0?n.push(Ys):n.push(...po),n.push(Zn);for(let r of t.customTools??[])n.some(o=>o.name===r.schema.name)||n.push(r.schema);if(this.memoryStore=t.memoryStore??new mt,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.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){let r=ef(t,n?.cwd),o=_c(this.memoryStore,void 0,this.surface);for(let[a,l]of o)this.readOnlyMemory&&a!=="memory_search"||r.set(a,l);n?.runtimeStateSource&&r.set("get_runtime_state",Vs(n.runtimeStateSource));for(let a of this.customTools)r.has(a.schema.name)||r.set(a.schema.name,a.handler);if(this.mcpManager){this._mcpToolsCache||(this._mcpToolsCache=this.mcpManager.getMcpTools()),this._mcpHandlersCache||(this._mcpHandlersCache=this.mcpManager.getMcpHandlers());for(let[a,l]of this._mcpHandlersCache)r.set(a,l)}let i=this._mcpToolsCache??[],s=n?.planExitControls;return s&&r.set(qt,qp(s)),new Jt({handlers:r,sessionGrantManager:this,allowAll:zn(t),schemas:[...this.schemas,...i,...s?[Gp]:[]],hookRegistry:Yp(n?.hookRegistry,this.hookRegistry),permissions:Qp(this.mcpManager?Xp(this.permissions,this.mcpManager.getMcpToolWireNames()):this.permissions,this.customTools.map(a=>a.schema.name)),subagentExecutor:this.subagentExecutor,skillExecutor:this.skillExecutor,composeExecutor:this.composeExecutor,...this.canUseTool!==void 0?{canUseTool:this.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:this.readOnlyBash})}close(){this.memoryStore.close()}async complete(t){let n=t.apiKey&&t.apiKey.length>0?t.apiKey:v.ANTHROPIC_API_KEY||v.CLAUDE_CODE_OAUTH_TOKEN||"";if(!n)throw new Error(`${Id} 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??tD,system:t.system,user:t.user,maxTokens:t.maxTokens??64};t.signal&&(r.signal=t.signal);let o=this.providerFactory??Gk;return o&&(r.clientFactory=o),$s(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 uo({getReadRoots:()=>this._sharedReadRoots,getWriteRoots:()=>this._sharedWriteRoots,ensureInitialized:()=>this.ensureSharedRoots(),getProtectedRoot:()=>this._initialResolveBase,getAllowAll:()=>zn(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}=J$(n);if(!o||o.length===0)throw new Error(`${Id} provider requires config.apiKey (resolved from ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN)`);let i=yp(o),s=!r&&n.traceWriter?new vp:void 0,a=r?void 0:_=>{let B=zA(_);B!==void 0&&JA(B)},l=dc(o,i,n.baseUrl,r?void 0:Ew(n.traceWriter,void 0,s?_=>s.push(_):void 0,a)),c=this.providerFactory??Gk,d=c?c(l):new eD(l),u=r?null:RA(i),m=uQ(n.systemPrompt),f=typeof n.model=="string"&&n.model.length>0?xt(n.model)??n.model:tD,g=Bk(n,f),h=n.permissionMode??"default";this._currentPermissionMode=h,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 y,b=Pc({surface:this.surface,cwd:n.cwd??process.cwd(),modelName:f,providerName:Id,permissionMode:h,...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:()=>y instanceof Jt?y.toolDefs.map(_=>_.name):[],getMcpTools:()=>this.mcpManager?.getMcpTools()??[],getSubagents:()=>this.subagentExecutor?this.subagentExecutor.getSubagentsLite():{active:[],backgroundJobs:[]}});this._presenceSessionId=V$({depth:n.depth,parentSessionId:n.parentSessionId,sessionId:n.sessionId,currentPresenceSessionId:this._presenceSessionId,runtimeStateSource:b,surface:this.surface,cwd:n.cwd,providerName:Id,model:f}),y=this.externalTools?Mc(this.externalTools,b):this.buildDispatcher(h,{cwd:n.cwd,readRoots:this._sharedReadRoots,writeRoots:this._sharedWriteRoots,...n.env!==void 0?{env:n.env}:{},sessionId:n.sessionId,parentSessionId:n.parentSessionId,...n.subagentId!==void 0?{subagentId:n.subagentId}:{},...n.subagentToolOutputCapBytes!==void 0?{subagentToolOutputCapBytes:n.subagentToolOutputCapBytes}:{},traceWriter:n.traceWriter,runtimeStateSource:b,hookRegistry:n.hookRegistry,planExitControls:n.planExitControls});let w=y instanceof Jt?[...y.toolDefs]:[...Ir,Zn],S=n.isSkillDispatch?w.filter(_=>_.name!=="ask_question"&&_.name!=="terminal_font_size"):n.isNonInteractive?w.filter(_=>_.name!=="ask_question"):w,k=n.cwd||process.cwd(),T=this.skillExecutor?Pf(void 0,{cwd:k,...typeof n.skillDispatchName=="string"&&n.skillDispatchName.length>0?{excludeName:n.skillDispatchName}:{}}):"",A=nf(n.isSkillDispatch),$=rf(this.readOnlyMemory),R={surface:this.surface,sessionId:n.sessionId,depth:n.depth,maxDepth:n.maxDepth,workspace:b.getWorkspace()},D={toolBase:A,memoryPrompt:$,hotMemory:n.hotMemory??"",manifest:T,userSystem:m},C=Sg(D,k,R);z$({prompt:t.prompt,options:{model:f,maxTokens:g,system:C},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 O;if(i==="oauth"&&!r){let _=this.providerFactory??Gk;O=async()=>{let B=await Sw();if(!B)return null;let P=dc(B,"oauth",n.baseUrl,Ew(n.traceWriter,void 0,s?M=>s.push(M):void 0,a));return _?_(P):new eD(P)}}let N=n.sessionId??n.resume,j=q$(n.resumeHistory),F=this.externalTools?void 0:Q$({stableSystemPrefix:D,config:n,surface:this.surface,runtimeStateSource:b,getCurrentCwd:()=>this._currentCwd,setCurrentCwd:_=>{this._currentCwd=_},getCurrentPermissionMode:()=>this._currentPermissionMode,sharedReadRoots:this._sharedReadRoots,sharedWriteRoots:this._sharedWriteRoots,subagentExecutor:this.subagentExecutor,skillExecutor:this.skillExecutor,composeExecutor:this.composeExecutor,buildDispatcher:(_,B)=>this.buildDispatcher(_,B)}),H=jk(n.effort,f);return new bg({client:d,authMode:r?"api-key":i,promptStream:t.prompt,toolDispatcher:y,...N!==void 0?{sessionId:N}:{},...j!==void 0?{initialMessages:j}:{},model:f,requestedModel:typeof n.model=="string"&&n.model.length>0?n.model:f,...n.permissionMode!==void 0?{permissionMode:n.permissionMode}:{},maxTokens:g,tools:S,userSystem:C,systemPrefix:u,tokenRefresher:O,...n.thinking!==void 0?{thinking:Uk(n.thinking,g,f)}:{},...H!==void 0?{effort:H}:{},...r?{baseUrl:n.baseUrl}:{},...n.traceWriter?{traceWriter:n.traceWriter}:{},...n.subagentId!==void 0?{subagentId:n.subagentId}:{},...n.autoResumeOnUsageLimit!==void 0?{autoResumeOnUsageLimit:n.autoResumeOnUsageLimit}:{},...n.maxToolUseIterations!==void 0?{maxToolUseIterations:n.maxToolUseIterations}:{},...F!==void 0?{cwdDependentsFactory:F}:{},onPermissionMode:_=>{this._currentPermissionMode=_},...this.mcpManager!==void 0?{mcpManager:this.mcpManager}:{},...da(n.autoCompact)!==void 0?{autoCompactThreshold:da(n.autoCompact)}:{},...n.hookRegistry!==void 0?{hookRegistry:n.hookRegistry}:{},...s!==void 0?{throttleQueue:s}:{}})}};pQ=new tt});function fQ(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 re(e,t){let n=t?.explicit??v.AFK_PROVIDER,r=t?.openaiBaseUrl??v.AFK_OPENAI_BASE_URL,o=fQ(n);if(o)return o;let i=ii(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&&(mQ.has(s)||s.startsWith("claude-")||s.startsWith("claude_")||s.startsWith("local-")||s.startsWith("local_"))?"anthropic-direct":s&&(s.startsWith("gpt-")||s.startsWith("gpt_")||Ti(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 vg(e,t,n){let r=re(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 Xt(s);default:return new tt(s)}}var mQ,He=x(()=>{"use strict";$i();dd();Rn();Ot();sa();G();$i();dd();mQ=new Set([...Object.keys(ww),"auto"])});var $a,qk=x(()=>{"use strict";$a=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 kg(e,t){let n=t??Ps(),r=Ms(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":re(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 zk=x(()=>{"use strict";He();Ot()});function gQ(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(`
1144
1150
  `)}function hQ(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 yQ(e,t){return typeof e=="string"?e.length>0?`${t}
1145
1151
 
1146
1152
  ${e}`:t:[{type:"text",text:t},...e]}var Tg,nD=x(()=>{"use strict";qk();zk();ye();Tg=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,kg(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 $a(()=>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?`
@@ -1756,7 +1762,7 @@ ${k}
1756
1762
  ${T}`})}return{fileBlocks:l,warnings:c}}async function gH(e,t,n,r,o="summary",i,s){let a=YB(e.text,e.attachments);r.onUserMessage&&await Promise.resolve(r.onUserMessage(a)).catch(()=>{}),r.setInFlight(!0),ol(process.stdout,Wd(process.cwd(),!0));let l="",c=0,d=!1,u=!1,m=!1,f=!1,g,h=!1,y=!1,b={abort:null},w=0,S=3e3,k=[],T=new Map,A=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,$=()=>{let j=r.subagentControl;j?.hasPromotableForeground()&&j.promoteActiveForeground().then(F=>{for(let H of F)(i??{fn:console.log}).fn(p.dim(` \u2192 subagent backgrounded as ${H.jobId}: ${H.label}`))}).catch(()=>{})},R=r.getCompositor?r.getCompositor():null,D=()=>new kl({out:Tl(i),thinkingMode:o,...A?{activeSkillName:A}:{},onCancel:()=>{t.interrupt().catch(j=>{qe()&&console.error(" "+p.error("session.interrupt() failed:"),j)})},...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}:{},...R?{compositor:R}:{},...r.onStageChange?{onStageChange:r.onStageChange}:{}}),C=D(),O=async()=>{if(!m){m=!0;try{await C.dispose()}catch{}}},N=async()=>{await C.arm();let j=C.getCompositor();if(i&&j){let F=j;i.fn=H=>F.commitAbove(H),i.suppressSubagentCompletion=!0}r.setActiveCompositor?.(j),r.setInterruptNotifier?.(F=>C.setInterrupting(F)),r.rearmStatus?.()};try{R?R.commitAbove(""):console.log(),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{h=!0,C.setSoftStopping(!0),t.interrupt().catch(M=>{qe()&&console.error(" "+p.error("soft-stop session.interrupt() failed:"),M)});let P=r.subagentControl;P?.hasActiveForeground()&&P.cancelActiveForeground().catch(M=>{qe()&&console.error(" "+p.error("soft-stop cancelActiveForeground() failed:"),M)})}),r.setPauseInterruptHandler&&r.setPauseInterruptHandler(()=>{y=!0,t.interrupt().catch(P=>{qe()&&console.error(" "+p.error("pause-interrupt session.interrupt() failed:"),P)})}),await N(),r.setBackgroundHandler&&r.subagentControl&&r.setBackgroundHandler($);let{fileBlocks:j,warnings:F}=fH(e.text,{rootDir:process.cwd()});for(let P of F)(i??{fn:console.log}).fn(p.dim(` @-file: ${P}`));let H=j.length>0||e.attachments.length>0?mH(e.text,e.attachments,void 0,j):e.text,_=t.sendMessageStream(H);if(await Gs((P,M)=>{C.process(P,M)},async()=>{for await(let P of _){if(h||y)break;if(P.type==="chunk"&&P.chunk.type==="content"?(l+=P.chunk.content,d=!0):P.type==="message"&&!d&&(l=P.message.content),P.type==="stream_retry"&&(l=l.slice(0,c)),P.type==="chunk"&&P.chunk.type==="tool_use_detail"){let M=P.chunk,I={toolName:M.toolName,toolUseId:M.toolUseId,input:M.toolInput,...M.toolInputRaw!==void 0&&{inputRaw:M.toolInputRaw}};T.set(M.toolUseId,I),k.push(I)}else if(P.type==="chunk"&&P.chunk.type==="tool_result"){let M=P.chunk;c=l.length;let I=T.get(M.toolUseId);if(I&&(I.result=M.content,I.isError=M.isError,T.delete(M.toolUseId)),r.onContextProgress){let U=Date.now();if(U-w>=S){w=U;try{let K=r.onContextProgress();K instanceof Promise&&await K}catch(K){qe()&&console.error(" "+p.error("onContextProgress (status refresh) failed:"),K)}}}}if(P.type==="paused"){if(r.setPausedState?.(!0),await O(),R&&P.autoResume===!0){let M=new AbortController;b.abort=M;let I=P.resetsAt?P.resetsAt.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}):null,U=I?`Keep waiting \u2014 auto-resumes at ${I}`:"Keep waiting \u2014 auto-resume in progress",K="Switch model / provider (type /model after)",Q="Stop waiting",Z=[p.warning(" \u23F3 Usage limit reached.")+(I?p.dim(` Auto-resumes at ${I}.`):""),p.dim(" Tip: run `claude login` in another terminal to switch account \u2014 this turn resumes on it automatically."),""];mr(R,{header:Z,options:[U,K,Q],signal:M.signal,initialIndex:0}).then(ie=>{if(b.abort=null,!ie)return;let q=ie[0];q===void 0||q===U||(y=!0,q===K&&(i??{fn:console.log}).fn(p.dim(" Hint: type /model <name> to switch, then send your message again.")),t.interrupt().catch(de=>{qe()&&console.error(" "+p.error("picker pause-interrupt session.interrupt() failed:"),de)}))}).catch(ie=>{qe()&&console.error(" "+p.error("picker promise rejected:"),ie)})}else(i??{fn:console.log}).fn(bA({reason:P.reason,...P.resetsAt!==void 0?{resetsAt:P.resetsAt}:{},...P.accountId!==void 0?{accountId:P.accountId}:{},...P.autoResume!==void 0?{autoResume:P.autoResume}:{}}));continue}if(P.type==="resumed"){r.setPausedState?.(!1),b.abort?.abort(),b.abort=null;let M=P.hotSwapped&&P.accountId?`\u25B6 Resumed on ${P.accountId}`:"\u25B6 Resumed";l="",c=0,d=!1,k.length=0,T.clear(),f=!1,g=void 0,u=!1,C=D(),m=!1,await N(),(i??{fn:console.log}).fn(p.success(M));continue}if(P.type==="error"){await O(),As(vs(P.error)),u=!0;continue}C.process(P),P.type==="done"&&(f=!0,g=P.metadata)}}),await O(),h){let P=i?i.fn:console.log,M=R?R.getPendingCount():0,I=M>0?` \xB7 ${M} queued`:"";P(p.warning(`\u23F8 Stopped${I} \u2014 work so far kept.`)+p.dim(" Send a message to continue.")),P("")}if(y){let P=i?i.fn:console.log;P(p.dim("\u25B6 Ending wait \u2014 running your next command\u2026")),P("")}if(f&&!h&&!y){Li(n,a,l,g,k),r.onTurnComplete&&await r.onTurnComplete(a,l).catch(()=>{}),rl(process.stdout),FL(process.stdout,"afk: turn complete");let P=I=>{i?i.fn(I):console.log(I)},M=Hy(l);if(M){P(pH(M)),P("");let I=aN(k);if(r.onTerminalState)try{r.onTerminalState(M,{doneHasCorroboratingEvidence:I})}catch{}if(n.permissionMode==="autonomous"){let U=M.kind==="done"&&vc().verifyDone===!0&&!I;cN(M,void 0,{unverified:U})}}if(ode(g,n,P),r.onAfterTurn){let I=r.onAfterTurn();I instanceof Promise&&await I.catch(()=>{})}}}catch(j){await O(),u||As(vs(j))}finally{await O(),ol(process.stdout,Wd(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),b.abort?.abort(),b.abort=null,r.setInFlight(!1),r.rearmStatus?.()}}function rde(e,t){let n=Math.round(e*100),r=pe(t);if(e>=1){let o=Math.round((e-1)*t);return{tier:"over",text:` context OVER ${Math.round(t/1e3)}k tok by ~${pe(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 ode(e,t,n=console.log){if(!e)return;let r=[];e.durationMs&&r.push(Te(e.durationMs)),e.totalCostUsd!==void 0&&r.push(lt(e.totalCostUsd));let o=Number(e.usage?.input_tokens??0),i=Number(e.usage?.output_tokens??0);o+i>0&&r.push(pe(o+i)+" tok"),r.length>0&&n(p.dim(" \u25E6 "+r.join(" \xB7 ")));let s=RT(t),a=Vt(t.model),l=rde(s,a);if(l.text!==null){let c=l.tier==="over"||l.tier==="near"?p.error:l.tier==="caution"?p.warning:p.dim;n(c(l.text))}n("")}var ide=5e3,sde=3,ade="[auto-resume] The background task above has finished. Continue the work it was dispatched for.";async function lde(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 hH(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 $=>{qe()&&(f=wh($)),await yu(e.session.current),qe()&&(g=LE())}).catch(()=>{});let h=e.initialInput!==void 0?{text:e.initialInput,attachments:[]}:void 0,y,b=!1,w=!1,S,k,T,A=0;for(m.onInjectable=()=>{A>=sde||!o.isAwaitingInput()||!o.bufferIsEmpty()||(A++,rl(process.stdout),h={text:ade,attachments:[]},o.abortPendingRead())};;){if(f&&(e.replRenderer.writeLine(f),e.replRenderer.writeLine(""),f=null),g.length>0){for(let _ of g)e.replRenderer.writeLine(_);e.replRenderer.writeLine(""),g=[]}let $=u.drainNotifications();for(let{job:_,result:B}of $){let P=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}`,I=Math.max(0,Math.round(B.durationMs/100)/10);e.replRenderer.writeLine(p.dim(` ${P} [${_.id}] ${M} \xB7 ${I}s \xB7 `)+_.command)}let R=m.drainNotifications();for(let{job:_}of R){let B=_.status==="completed"?"\u2713":_.status==="failed"?"\u2717":"\u2298",P=_.endedAt!==void 0?Math.max(0,Math.round((_.endedAt-_.startedAt)/100)/10):0,M=_.label.length>60?`${_.label.slice(0,60)}\u2026`:_.label;e.replRenderer.writeLine(p.dim(` ${B} [${_.jobId}] subagent ${_.status} \xB7 ${P}s \xB7 `)+M)}let D=l.renderIfChanged(e.stats.sessionId);if(D.length>0){for(let _ of D)e.replRenderer.writeLine(_);e.replRenderer.writeLine("")}let C,O;if(h===void 0){let _=await e.session.current.takePendingPlanExitSeed();_!==void 0&&(e.stats.permissionMode=_.mode,h={text:_.message,attachments:[]})}if(h!==void 0){let _=h;h=void 0;let B=Al(e.stats.permissionMode),P=qi({buffer:_.text,promptText:B,isTTY:!!process.stdout.isTTY,attachmentSummary:pl([..._.attachments])});e.replRenderer.writeLine(P),C=_.text.trim(),O=_.attachments}else{let _=y;y=void 0;let B=await o.readLine({promptFn:()=>Al(e.stats.permissionMode),..._!==void 0?{initialBuffer:_}:{},onSigint:r,onShiftTab:()=>{Ny(e.slashCtx).catch(()=>{}),e.statusLine.rearm()}});C=B.text.trim(),O=B.attachments}if(!C&&O.length===0)continue;if(C.startsWith("!")){let _=/^(0|false|off|no)$/i.test(v.AFK_SHELL_PASSTHROUGH??"");if(e.options.shellPassthrough!==!1&&!_&&(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(C))){e.statusLine.rearm();continue}}let N=!1;if(C.startsWith("/")){let _=await JL(C,e.slashCtx,O);if(_.handled){if(_.result==="exit"){e.rl.close();return}if((C==="/clear"||C.startsWith("/clear "))&&(await t.rotateOnClear(),e.replRenderer.writeLine(p.dim(` transcript: ${t.path()}`)),d.reset(),S=void 0),_.result!==null&&typeof _.result=="object"&&"kind"in _.result&&_.result.kind==="submit"){h={text:_.result.message,attachments:O??[]},e.statusLine.rearm();continue}if(_.result!==null&&typeof _.result=="object"&&"kind"in _.result&&_.result.kind==="prefill"){y=_.result.message,e.statusLine.rearm();continue}e.statusLine.rearm();continue}N=!0}a.push(C),await lde(e,C);let j=C;if(N){let _=xT(C);if(_){let B=_.name.replace(/^\//,"").split(":").pop()??"";if(B&&OE(B)){let P={skillName:B,rawArgs:_.args,source:"plugin",capabilities:{compose:!0,subagents:!0}},M=e.session.current.sessionId,I=ts(M),U=Date.now();W(`[afk trace] preflight.start commandName=${B}`);let K=!1,Q=await es(P,{cwd:e.stats.cwd??process.cwd(),artifactDir:I},Z=>{qe()&&e.replRenderer.writeLine(p.warning(`\u26A0 preflight(${B}) failed: `)+(Z instanceof Error?Z.message:String(Z)))});K=Q!==null,W(`[afk trace] preflight.end commandName=${B} durationMs=${Date.now()-U} success=${K}`),j=DE(Q?.manifestBlock,C)}}}let F=u.drainInjections();F.length>0&&(j=F+j);let H=m.drainInjections();if(H.length>0&&(j=H+j),S!==void 0&&(j=S+`
1757
1763
 
1758
1764
  `+j,S=void 0),e.hookRegistry)try{let _={event:"UserPromptSubmit",prompt:j,sessionId:e.stats.sessionId},B=await e.hookRegistry.dispatch(_);B.injectContext&&(j=B.injectContext+j)}catch(_){if(_ instanceof he){e.replRenderer.writeLine(p.warning("\u2298 Turn blocked by hook")+(_.reason?p.dim(`: ${Pr(_.reason)}`):"")),e.statusLine.rearm();continue}if(_ instanceof Vn){e.replRenderer.writeLine(p.warning("\u2298 Turn blocked by hook")+p.dim(`: handler timed out after ${_.timeoutMs}ms`)),e.statusLine.rearm();continue}throw _}if(k=void 0,T=void 0,await gH({text:j,attachments:O},e.session.current,e.stats,{setInFlight(_){n.turnInFlight=_},...e.subagentControl?{subagentControl:e.subagentControl}:{},async onUserMessage(_){await t.appendUser(_)},async onTurnComplete(_,B){if(await t.appendTurn(_,B),e.stats.sessionId)try{Mo(e.stats)}catch(P){w||(w=!0,e.replRenderer.writeLine(p.warning("\u26A0 ")+"session autosave failed \u2014 this conversation may not be resumable: "+(P instanceof Error?P.message:String(P))))}},async onAfterTurn(){await e.contextSampler.onTurn(e.stats.totalTurns),await e.gitStatusSampler.refresh(),e.statusLine.rearm(),c?.repaint("observing")},rearmStatus:()=>e.statusLine.rearm(),onTerminalState:(_,B)=>{d?.push(_),k=_.kind,T=B?.doneHasCorroboratingEvidence},setActiveCompositor:_=>{n.activeCompositor=_},setInterruptNotifier:_=>{n.notifyInterrupting=_},scrollRegion:e.statusLine,getCompositor:()=>o.getCompositor(),setBackgroundHandler:_=>o.setBackgroundHandler(_),setSoftStopHandler:i,setPausedState:_=>o.setPausedState(_),setPauseInterruptHandler:_=>o.setPauseInterruptHandler(_),async onContextProgress(){await e.contextSampler.refresh(),e.statusLine.repaint(Ln(e.stats,e.contextSampler,e.gitStatusSampler))},...c?{onStageChange:_=>c.repaint(_)}:{}},e.stats.thinkingUi??e.options.thinkingUi,e.completionWriter,o.toRunTurnRefs(Al(e.stats.permissionMode))),e.hookRegistry)try{let _=await e.hookRegistry.dispatch({event:"Stop",sessionId:e.stats.sessionId,...k!==void 0?{terminalState:k}:{},...T!==void 0?{doneHasCorroboratingEvidence:T}:{}},void 0,ide);_.injectContext&&_.injectContext.trim().length>0&&(S=_.injectContext)}catch(_){if(_ instanceof ut)throw _;_ instanceof Vn?(W("[stop hook] handler timed out"),e.completionWriter.fn(p.dim(" [stop hook] timed out"))):_ instanceof he?e.completionWriter.fn(p.dim(` [stop hook] blocked: ${Pr(_.reason??"no reason given")}`)):W("[stop hook] unexpected error: "+String(_))}}}function cde(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 yH(e,t,n,r){let o=await V1(),i=new Ly({rl:e.rl,history:o,statusLine:e.statusLine}),s=cde(v.AFK_SUGGEST_GHOST,e.suggestGhostConfig),a;try{let{installSoftStop:l}=await tH(e,i,n,t,r,s,{getLoopStageBar:()=>a?.loopStageBar});a=uH(e,n),await hH(e,t,n,r,i,l,a,o)}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)}}yc();na();import{execFile as dde}from"node:child_process";import{dirname as ude,isAbsolute as pde,resolve as mde}from"node:path";import{promisify as fde}from"node:util";var bH=fde(dde),gde=3e3,hde=new Set(["empty","orphaned-dir","orphaned-registration","dead-owner"]);async function yde(){let t=(await bH("git",["rev-parse","--git-common-dir"])).stdout.trim();if(!t)throw new Error("Not in a git repository.");let n=pde(t)?t:mde(process.cwd(),t);return ude(n)}async function wH(e){if(e?.disabled)return{ran:!1,removedCount:0,skippedReason:"disabled"};let t;try{t=await yde()}catch{return{ran:!1,removedCount:0,skippedReason:"not-in-repo"}}let n,r=new Promise(o=>{n=setTimeout(()=>o("timeout"),gde)});try{let o=fn({execFile:bH,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=>hde.has(c.verdict)&&s.removed.includes(c.path)).length}}catch{return{ran:!1,removedCount:0,skippedReason:"error"}}finally{n&&clearTimeout(n)}}Sp();yc();import{promises as bde}from"node:fs";import{dirname as wde,join as kH}from"node:path";import{randomBytes as Sde}from"node:crypto";var vde=["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(`
1759
- `),SH=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,sx=30,kde=1024,Tde=8e3,Ede="haiku";async function xde(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=_de(n,kde),o=new AbortController,i=setTimeout(()=>o.abort(),t.timeoutMs??Tde),s=t.signal?Ide([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,s):a=await $s({token:t.token,model:t.model??Ede,system:vde,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=Rde(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=wde(t.worktreePath);return await Ade(l,c)}function Rde(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(SH.test(t)&&t.length<=sx)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>sx)break;o=s}return SH.test(o)?o:null}async function Ade(e,t){if(!await Cde(kH(t,e)))return e;let n=Sde(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,sx-5)}-${n}`}async function Cde(e){try{return await bde.access(e),!0}catch{return!1}}function _de(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 Ide(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 TH(e){let t,n,r=kH(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await xde(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=`${Mp(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return vH(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 vH(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 vH(e,t){e&&e.setCwd(t),Pde(t)}function Pde(e){try{process.chdir(e)}catch{}}Gt();z();import{spawn as xH}from"child_process";import{existsSync as RH,mkdirSync as Fde,readFileSync as AH,unlinkSync as EH,writeFileSync as CH}from"fs";import{get as Lde}from"https";import{join as _H}from"path";import{readFileSync as Mde}from"fs";import{dirname as Ode,join as $de}from"path";import{fileURLToPath as Dde}from"url";function br(){try{return"5.81.7"}catch{}try{let e=Ode(Dde(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(Mde($de(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}G();var Nde=64*1024,Bde=10800*1e3,Ude=800,jde=3600*1e3,Hde="update-check.json",Wde="pending-update.json";function ax(){return _H(bs(),Hde)}function Tu(){return _H(bs(),Wde)}function lx(){let e=bs();RH(e)||Fde(e,{recursive:!0})}function IH(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 PH(){try{let e=AH(ax(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function MH(){try{lx();let e=`
1765
+ `),SH=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,sx=30,kde=1024,Tde=8e3,Ede="haiku";async function xde(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=_de(n,kde),o=new AbortController,i=setTimeout(()=>o.abort(),t.timeoutMs??Tde),s=t.signal?Ide([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,s):a=await $s({token:t.token,model:t.model??Ede,system:vde,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=Rde(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=wde(t.worktreePath);return await Ade(l,c)}function Rde(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(SH.test(t)&&t.length<=sx)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>sx)break;o=s}return SH.test(o)?o:null}async function Ade(e,t){if(!await Cde(kH(t,e)))return e;let n=Sde(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,sx-5)}-${n}`}async function Cde(e){try{return await bde.access(e),!0}catch{return!1}}function _de(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 Ide(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 TH(e){let t,n,r=kH(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await xde(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=`${Mp(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return vH(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 vH(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 vH(e,t){e&&e.setCwd(t),Pde(t)}function Pde(e){try{process.chdir(e)}catch{}}Gt();z();import{spawn as xH}from"child_process";import{existsSync as RH,mkdirSync as Fde,readFileSync as AH,unlinkSync as EH,writeFileSync as CH}from"fs";import{get as Lde}from"https";import{join as _H}from"path";import{readFileSync as Mde}from"fs";import{dirname as Ode,join as $de}from"path";import{fileURLToPath as Dde}from"url";function br(){try{return"5.81.8"}catch{}try{let e=Ode(Dde(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(Mde($de(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}G();var Nde=64*1024,Bde=10800*1e3,Ude=800,jde=3600*1e3,Hde="update-check.json",Wde="pending-update.json";function ax(){return _H(bs(),Hde)}function Tu(){return _H(bs(),Wde)}function lx(){let e=bs();RH(e)||Fde(e,{recursive:!0})}function IH(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 PH(){try{let e=AH(ax(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function MH(){try{lx();let e=`
1760
1766
  const https = require('https');
1761
1767
  const fs = require('fs');
1762
1768
  const url = 'https://registry.npmjs.org/agent-afk/latest';