agent-afk 5.36.0 → 5.36.2
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/agent/plugins/tool-injector.d.ts +1 -0
- package/dist/agent/tools/nesting.d.ts +1 -1
- package/dist/agent/tools/skill-bridge.d.ts +1 -0
- package/dist/agent/tools/skill-executor/fork-dispatch.d.ts +1 -1
- package/dist/cli.mjs +65 -65
- package/dist/index.mjs +3 -3
- package/dist/telegram.mjs +5 -5
- package/package.json +1 -1
package/dist/telegram.mjs
CHANGED
|
@@ -840,7 +840,7 @@ ${n.join(`
|
|
|
840
840
|
Note: this search ran in basic-regex (BRE) mode, where '|' is a literal pipe \u2014 not alternation. If you intended "A or B", retry with extended: true (extended regex / ERE). If you meant the literal character '|', this empty result stands.`),d({content:k});return}if(w===2){let k=Fn(g.trim());d({content:`grep error: ${k.content}`,isError:!0,...k.truncated?{truncated:!0}:{}});return}let R=at(m.trimEnd()),_=Fn(R);d({content:_.content,..._.truncated?{truncated:!0}:{}})}),f.on("error",w=>{let R;if(p===void 0&&Cr(w))try{R=Dn(w,process.cwd())}catch{R=`working directory does not exist (process cwd deleted \u2014 deleted worktree?) \u2014 underlying: ${w.message}`}else R=Dn(w,p);d({content:`Failed to execute grep: ${R}`,isError:!0})})})}}var Jg,Vg=y(()=>{"use strict";Je();Et();Cn();Pl();Cl();Jg=Ul()});import{promises as EP}from"fs";function Bl(t){return(e,n,r)=>AP(e,n,r,t)}var AP,Yg,Xg=y(()=>{"use strict";Et();AP=async(t,e,n,r)=>{if(!t||typeof t!="object")throw new Error("Invalid input: expected an object");let s=t.path;if(typeof s!="string")throw new Error("Invalid input: path must be a string");let i;try{i=Ie(s,n,"read",r)}catch(a){return{content:a instanceof Error?a.message:String(a),isError:!0}}try{let a=await EP.readdir(i,{withFileTypes:!0}),c=a.filter(p=>p.isDirectory()).map(p=>`${p.name}/`),l=a.filter(p=>!p.isDirectory()).map(p=>p.name);c.sort(),l.sort();let d=[...c,...l];return d.length===0?{content:"(empty directory)"}:{content:d.join(`
|
|
841
841
|
`)}}catch(a){if(a instanceof Error){let c=a;return c.code==="ENOENT"?{content:`Directory not found: ${i}`,isError:!0}:c.code==="ENOTDIR"?{content:`Not a directory: ${i}`,isError:!0}:c.code==="EACCES"?{content:`Permission denied: ${i}`,isError:!0}:{content:`Error listing directory: ${a.message}`,isError:!0}}return{content:"Unknown error listing directory",isError:!0}}};Yg=Bl()});function TP(t=_n){return async(e,n)=>{if(!e||typeof e!="object")return{content:"Invalid input: expected an object",isError:!0};let o=e.message;if(typeof o!="string")return{content:"Invalid input: message must be a string",isError:!0};if(o.length===0)return{content:"Invalid input: message must be non-empty",isError:!0};if(o.length>Qg)return{content:`Invalid input: message exceeds Telegram's ${Qg}-character limit (got ${o.length}). Split into multiple sends or trim before calling.`,isError:!0};let s=A.TELEGRAM_BOT_TOKEN;if(!s)return{content:"Telegram is not configured: TELEGRAM_BOT_TOKEN is not set. Run the bot setup wizard or export the env var before using send_telegram.",isError:!0};let i=Es();if(i.length===0)return{content:"Telegram is not configured: AFK_TELEGRAM_ALLOWED_CHAT_IDS is empty or unset. Add the operator chat ID(s) before using send_telegram.",isError:!0};let a=[];for(let c of i){let l=await t({token:s,chatId:c,text:o});l.ok||a.push(`chat ${c}: ${l.errorMessage??`HTTP ${l.status}`}`)}return a.length===i.length?{content:`Failed to send Telegram message to any chat. ${a.join("; ")}`,isError:!0}:a.length>0?{content:`Sent Telegram message to ${i.length-a.length}/${i.length} chat(s); ${a.length} failed: ${a.join("; ")}`}:{content:i.length===1?`Sent Telegram message to chat ${i[0]}.`:`Sent Telegram message to ${i.length} chats.`}}}var Qg,Zg,eh=y(()=>{"use strict";H();_r();Yc();Qg=4096;Zg=TP()});import{JSDOM as xP}from"jsdom";import{Readability as RP}from"@mozilla/readability";import PP from"turndown";function th(t){return t.replace(/\n{3,}/g,`
|
|
842
842
|
|
|
843
|
-
`).trim()}function CP(t){return(t?.textContent??"").replace(/\s+/g," ").trim().length}function rh(t,e){let r=new xP(t,{url:e}).window.document,o=(r.title??"").trim(),s=null;try{let l=r.cloneNode(!0);s=new RP(l).parse()}catch{s=null}if(s&&typeof s.content=="string"&&s.content.trim().length>0){let l=th(jl.turndown(s.content)),d=(s.title??"").trim()||o,u=typeof s.length=="number"&&s.length>0?s.length:(s.textContent??"").replace(/\s+/g," ").trim().length;return{title:d,markdown:l,textLength:u,usedFallback:!1}}let i=r.body,a=i?.innerHTML??"",c=th(jl.turndown(a));return{title:o,markdown:c,textLength:CP(i),usedFallback:!0}}var nh,jl,oh=y(()=>{"use strict";nh=200,jl=new PP({headingStyle:"atx",codeBlockStyle:"fenced",bulletListMarker:"-"});jl.remove(["script","style","noscript","iframe"])});function MP(t,e){return new Promise((n,r)=>{if(e?.aborted){r(e.reason??new Error("aborted"));return}let o=()=>{clearTimeout(s),r(e?.reason??new Error("aborted"))},s=setTimeout(()=>{e?.removeEventListener("abort",o),n()},t);e?.addEventListener("abort",o,{once:!0})})}function sh(t,e,n){let r=Math.min(e*2**t,n);return Math.round(Math.random()*r)}function OP(t,e){let n=t.headers.get("retry-after");if(n===null)return null;let r=Number(n.trim());return!Number.isFinite(r)||r<0?null:Math.min(r*1e3,e)}async function ii(t,e,n={},r={}){let o=r.retries??3,s=r.baseDelayMs??500,i=r.maxDelayMs??1e4,a=r.sleep??MP,c=n.signal??void 0,l;for(let d=0;d<=o;d++){if(c?.aborted)throw c.reason??new Error("aborted");try{let u=await t(e,n);if(!IP.has(u.status)||d===o)return u;let p=OP(u,i)??sh(d,s,i);B("[web/retryFetch] retrying",{url:e,attempt:d,status:u.status,waitMs:p}),await u.body?.cancel().catch(()=>{}),await a(p,c)}catch(u){if(c?.aborted||(l=u,d===o))throw u;let p=sh(d,s,i);B("[web/retryFetch] retrying after error",{url:e,attempt:d,waitMs:p}),await a(p,c)}}throw l??new Error("retryFetch: exhausted without a result")}var IP,Hl=y(()=>{"use strict";oe();IP=new Set([429,502,503,504])});import{readFileSync as DP}from"node:fs";import{join as FP}from"path";function LP(t){let n=t.replace(/[.+?()[\]{}/\\^$|]/g,"\\$&").replace(/\*/g,"[^.]*");return new RegExp(`^${n}$`,"i")}function ih(t,e){return LP(e).test(t)}function UP(t,e){if(t!==void 0){let n=t.trim().toLowerCase();if(n==="1"||n==="true"||n==="yes")return!0;if(n==="0"||n==="false"||n==="no")return!1}if(e!==void 0){if(NP.has(e))return!0;if($P.has(e))return!1}return!1}function ah(t){return t===void 0||t.trim()===""?[]:t.split(",").map(e=>e.trim().toLowerCase()).filter(e=>e.length>0)}function BP(t){if(t===void 0||t===""||t==="playwright")return"playwright";throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${t}`)}function ch(t){let e=t===void 0||t.trim()===""?"default":t.trim();return mc(e),e}function jP(t){if(t===void 0)return!1;let e=t.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function HP(t){try{return DP(t,"utf8")}catch(e){if(e.code==="ENOENT")return;throw e}}function WP(t,e){let n={...t};if(typeof e.headless=="boolean"&&(n.headless=e.headless),Array.isArray(e.allowedDomains)&&(n.allowedDomains=e.allowedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),Array.isArray(e.blockedDomains)&&(n.blockedDomains=e.blockedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),typeof e.domSnapshots=="boolean"&&(n.domSnapshots=e.domSnapshots),e.backend==="playwright")n.backend="playwright";else if(e.backend!==void 0)throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${String(e.backend)}`);return typeof e.defaultProfile=="string"&&(n.defaultProfile=ch(e.defaultProfile)),n}function lh(t){let e=t?.env??A,n=t?.readFileSync??HP,r=t?.surface??e.AGENT_SURFACE,o=UP(e.AFK_BROWSER_HEADLESS,r),s=ah(e.AFK_BROWSER_ALLOWED_DOMAINS),i=ah(e.AFK_BROWSER_BLOCKED_DOMAINS),a=jP(e.AFK_BROWSER_DOM_SNAPSHOTS),c=BP(e.AFK_BROWSER_BACKEND),l=ch(e.AFK_BROWSER_DEFAULT_PROFILE),d={headless:o,allowedDomains:s,blockedDomains:i,domSnapshots:a,backend:c,configPath:null,defaultProfile:l},u=e.AFK_BROWSER_CONFIG,p=u!==void 0&&u.trim()!==""?u.trim():FP(nt(),"browser.json"),f=n(p);if(f===void 0)return d;let m;try{m=JSON.parse(f)}catch(b){throw new Error(`Failed to parse browser config at ${p}: ${String(b)}`)}if(typeof m!="object"||m===null||Array.isArray(m))throw new Error(`Browser config at ${p} must be a JSON object`);let g=WP(d,m);return g.configPath=p,g}function Wl(t,e){let n;try{n=new URL(t).hostname.toLowerCase()}catch{return{allowed:!1,reason:`invalid URL: ${t}`}}for(let r of e.blockedDomains)if(ih(n,r))return{allowed:!1,reason:`blocked by AFK_BROWSER_BLOCKED_DOMAINS: ${r}`};return e.allowedDomains.length>0&&!e.allowedDomains.some(o=>ih(n,o))?{allowed:!1,reason:"not in AFK_BROWSER_ALLOWED_DOMAINS"}:{allowed:!0}}var NP,$P,Kl=y(()=>{"use strict";H();W();NP=new Set(["daemon","subagent","telegram","afk"]),$P=new Set(["repl","interactive","cli"])});import en from"node:fs";import ai from"node:path";import{randomBytes as KP}from"node:crypto";import{chromium as GP}from"playwright";function qP(){try{return"5.36.0"}catch{}try{let t=ai.resolve(import.meta.dirname,"../../../package.json"),e=en.readFileSync(t,"utf8"),n=JSON.parse(e);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var zP,ci,dh=y(()=>{"use strict";W();oe();zP=qP(),ci=class{config;browser;sessions=new Map;launchPromise;shutdownComplete=!1;constructor(e){this.config=e}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=GP.launch({headless:this.config.headless}).then(e=>(this.browser=e,this.launchPromise=void 0,e)).catch(e=>{throw this.launchPromise=void 0,e}),this.launchPromise))}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(e){let n=this.sessions.get(e);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),s=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),i={context:s,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(e,i),s}async ensurePage(e){let n=this.sessions.get(e);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(e);let r=this.sessions.get(e);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${e}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",s=>{s.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",s=>{s.isNavigationRequest()&&s.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",s=>{s.frame()===o.mainFrame()&&s.request().isNavigationRequest()&&(r.lastHttpStatus=s.status())}),o.on("dialog",s=>{r.openDialog=s}),o}getPage(e){return this.sessions.get(e)?.page}async renderHtml(e,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),s=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",s,{once:!0});try{let i=await o.newPage(),a=await i.goto(e,{timeout:n.timeoutMs,waitUntil:n.waitUntil}),c=await i.content(),l=i.url(),d=a!==null?a.status():null;return{html:c,finalUrl:l,httpStatus:d}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",s),await o.close().catch(()=>{})}}getConsoleErrorCount(e){return this.sessions.get(e)?.consoleErrors??0}getLastHttpStatus(e){return this.sessions.get(e)?.lastHttpStatus??null}hasOpenDialog(e){return this.sessions.get(e)?.openDialog!==void 0}async dismissDialog(e,n=!0){let r=this.sessions.get(e);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(e){let n=this.sessions.get(e);n!==void 0&&(this.sessions.delete(e),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.shutdownComplete)return;this.shutdownComplete=!0;let e=[...this.sessions.keys()];if(await Promise.all(e.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${zP}`}}loadStorageState(e){let n=gc(e);try{if(!en.existsSync(n))return;let r=JSON.parse(en.readFileSync(n,"utf8"));return B("[browser/vault] restored session",{profile:e,file:n}),r}catch(r){B("[browser/vault] ignoring unreadable vault",{profile:e,file:n,err:r});return}}async saveStorageState(e,n){try{let r=gc(e);if(!en.existsSync(r))return;let o=await n.storageState(),s=ai.join(ai.dirname(r),`.${ai.basename(r)}.${process.pid}.${KP(4).toString("hex")}.tmp`);en.writeFileSync(s,JSON.stringify(o),{mode:384}),en.chmodSync(s,384),en.renameSync(s,r),B("[browser/vault] saved session",{profile:e,file:r})}catch(r){B("[browser/vault] save failed",{profile:e,err:r})}}}});import{createHash as JP}from"crypto";function Gl(t){if(t.length===0)return t;let e=t;for(let{regex:n,name:r}of VP)r==="form-password"?e=e.replace(n,"password=[redacted]"):e=e.replace(n,"[redacted]");return e}function uh(t){return!!(t.role==="textbox"&&t.kind==="password"||t.label&&YP.test(t.label))}function ph(t){return JP("sha256").update(t,"utf8").digest("hex").slice(0,8)}function fh(t){let e=t.replace(/\s+/g," ").trim();return e.length<=80?e:e.slice(0,77)+"..."}var VP,YP,Mr=y(()=>{"use strict";VP=[{name:"aws-access-key",regex:/AKIA[0-9A-Z]{16}/g},{name:"github-pat",regex:/ghp_[a-zA-Z0-9]{36}/g},{name:"openai-bearer",regex:/sk-[a-zA-Z0-9_-]{20,}/g},{name:"slack-token",regex:/xox[abp]-[a-zA-Z0-9-]{10,}/g},{name:"jwt",regex:/eyJ[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}/g},{name:"form-password",regex:/password=[^&\s]+/gi}];YP=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as XP}from"node:crypto";function QP(t){return t?t.replace(/\s+/g," ").trim().slice(0,200):""}function ZP(t,e,n){return`el_${XP("sha256").update(`${t}:${e}:${n}`).digest("hex").slice(0,6)}`}function eC(t){let e=t.replace(/\s+/g," ").trim(),n=4e3;return e.length<=n?e:e.slice(0,n)+"\u2026[truncated]"}function mh(t){return t.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function hh(t,e){let n=t.role??"",r=t.name??"";gh.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&e.push(t);for(let s of t.children??[])hh(s,e)}async function tC(t){return t.evaluate(e=>{let n=Array.from(document.querySelectorAll(e)),r=[];for(let o of n){let s=o.getBoundingClientRect(),i=o;if(s.width===0&&s.height===0){let d=window.getComputedStyle(i);if(d.display==="none"||d.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),c=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),l=a==="input"?o.type||null:o.getAttribute("type");r.push({name:c,tagName:a,type:l,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(s.left),y:Math.round(s.top),w:Math.round(s.width),h:Math.round(s.height)}})}return r},yh).catch(()=>[])}async function nC(t){return t.evaluate(e=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(e)),o=[];for(let s of r){let i=s.tagName.toLowerCase(),a=s.getAttribute("role")??"",c=s.getAttribute("aria-label")??s.getAttribute("placeholder")??(s.textContent??"").replace(/\s+/g," ").trim().slice(0,100),l=a||(n[i]??"");if(i==="input"){let g=s.type;g==="checkbox"?l="checkbox":g==="radio"?l="radio":g==="button"||g==="submit"||g==="reset"?l="button":g==="search"?l="searchbox":l="textbox"}if(!l)continue;let d="value"in s?s.value:void 0,u=d!==void 0?String(d):void 0,p=s.disabled??!1,f=i==="input"?s.checked:void 0,m={role:l,name:c,disabled:p};u!==void 0&&(m.value=u),f!==void 0&&(m.checked=f),o.push(m)}return o},yh).catch(()=>[])}function rC(t){let n=t.accessibility;return n!==null&&typeof n=="object"?n:null}async function li(t,e){let n=e.maxElements??80,r=e.includeHidden??!1,o=[],s=rC(t),i=s?s.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=tC(t),c=t.evaluate(()=>document.body?.innerText??"").catch(()=>""),l=Promise.resolve(t.url()),d=t.title().catch(()=>""),[u,p,f,m,g]=await Promise.all([i,a,c,l,d]),b,S=!1;u!==null?(b=[],hh(u,b)):(o.push("observation skipped accessibility tree (returned null)"),S=!0,b=(await nC(t)).filter(N=>gh.has(N.role??"")));let v=new Map;for(let x of p){let N=mh(x.name),U=v.get(N);(!U||U.bbox.w===0&&x.bbox.w>0)&&v.set(N,x)}let E=b.map(x=>({ax:x,dom:v.get(mh(x.name??""))})),w=r?E:E.filter(x=>x.dom?x.dom.bbox.w>0||x.dom.bbox.h>0:!0);w.sort((x,N)=>{let U=x.dom?.bbox.y??0,C=N.dom?.bbox.y??0;if(U!==C)return U-C;let j=x.dom?.bbox.x??0,$=N.dom?.bbox.x??0;return j-$}),w.length>200&&o.push("page has 200+ interactive elements; consider scoping");let _=w.slice(0,n).map((x,N)=>{let U=x.ax.role??"generic",C=x.ax.name??"",j=ZP(U,C,N),$=x.dom?.bbox??{x:0,y:0,w:0,h:0},P=x.dom?.type??null,F=null;x.ax.value!==void 0&&x.ax.value!==null&&(F=String(x.ax.value)),x.ax.checked!==void 0&&(F=String(x.ax.checked)),uh({role:U,kind:P})&&(F="[redacted]");let D={disabled:x.ax.disabled??!1};x.ax.checked!==void 0&&(D.checked=x.ax.checked===!0||x.ax.checked==="mixed"),x.ax.selected!==void 0&&(D.selected=x.ax.selected),x.ax.expanded!==void 0&&(D.expanded=x.ax.expanded);let L;x.dom?.testId?L=`[data-testid="${x.dom.testId}"]`:x.dom?.id&&(L=`#${x.dom.id}`);let V={id:j,role:U,label:QP(C),kind:P,value:F,state:D,bbox:$};return L!==void 0&&(V.selector=L),V}),k="idle";try{let x=await t.evaluate(()=>document.readyState);x==="loading"?k="loading":x==="interactive"?k="navigating":k="idle"}catch{k="navigating"}k!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),S&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let T=eC(f),M=`obs_${e.observationCounter.toString(36)}`,I=new Date().toISOString();return{observationId:M,url:m,title:g,textSummary:T,interactive:_,status:{httpStatus:e.httpStatus??null,loadingState:k,hasDialog:e.hasDialog??!1,consoleErrors:e.consoleErrors??0},warnings:o,screenshotPath:e.screenshotPath??null,capturedAt:I}}var gh,yh,bh=y(()=>{"use strict";Mr();gh=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);yh="a[href], button, input, select, textarea, [role], [tabindex], label"});async function wh(t,e){try{let n=await t.nth(e).evaluate(i=>{let a=i,c=a.getAttribute("role")??a.tagName.toLowerCase(),l=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",d=a.getBoundingClientRect();return{role:c,label:l,x:Math.round(d.x),y:Math.round(d.y),w:Math.round(d.width),h:Math.round(d.height)}}),r=`${n.role}:${n.label}:${e}`,o=0;for(let i=0;i<r.length;i++)o=o*31+r.charCodeAt(i)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function ql(t,e){let n=Math.min(e,5);return(await Promise.all(Array.from({length:n},(o,s)=>wh(t,s)))).filter(o=>o!==null)}async function oC(t){let e=new Set,n=[];for(let{loc:r,count:o}of t)for(let s=0;s<o;s++){let i;try{i=await r.nth(s).evaluate(a=>{let c=a,l=c.getBoundingClientRect();return`${c.tagName}@${Math.round(l.x)},${Math.round(l.y)}`})}catch{continue}e.has(i)||(e.add(i),n.push({key:i,locator:r,index:s}))}return n}async function zl(t,e,n){switch(e.kind){case"element_id":return sC(t,e,n);case"selector":return iC(t,e);case"semantic":return aC(t,e)}}async function sC(t,e,n){let r=n.get(e.elementId);if(r===void 0)return{outcome:"not_found",query:e};if(r.selector!==void 0){let c=t.locator(r.selector);if(await c.count()===1)return{outcome:"resolved",locator:c}}let o=t.getByRole(r.role,{name:r.label,exact:!0}),s=await o.count();if(s===0)return{outcome:"not_found",query:e};if(s===1)return{outcome:"resolved",locator:o};let i=await ql(o,s);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:i}}async function iC(t,e){let n=t.locator(e.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:e};if(r===1)return{outcome:"resolved",locator:n};let o=await ql(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${e.selector}]`},candidates:o}}async function aC(t,e){return e.role!==void 0?cC(t,e.text,e.role):lC(t,e.text,e)}async function cC(t,e,n){let r=t.getByRole(n,{name:e}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:e,role:n}};if(o===1)return{outcome:"resolved",locator:r};let s=await ql(r,o);return{outcome:"ambiguous_target",query:{text:e,role:n},candidates:s}}async function lC(t,e,n){let r=t.getByRole("button",{name:e}),o=t.getByRole("link",{name:e}),s=t.getByLabel(e,{exact:!1}),[i,a,c]=await Promise.all([r.count(),o.count(),s.count()]);if(i+a+c===0)return{outcome:"not_found",query:n};let d=[];i>0&&d.push({loc:r,count:i}),a>0&&d.push({loc:o,count:a}),c>0&&d.push({loc:s,count:c});let u=await oC(d);if(u.length===0)return{outcome:"not_found",query:n};if(u.length===1){let g=u[0];return g===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:g.locator.nth(g.index)}}let p=u.slice(0,5),f=[];for(let g=0;g<p.length;g++){let b=p[g];if(b===void 0)continue;let S=await wh(b.locator,b.index);if(S!==null){let v=`${S.role}:${S.label}:${g}`,E=0;for(let w=0;w<v.length;w++)E=E*31+v.charCodeAt(w)>>>0;f.push({...S,id:`el_${E.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:e},candidates:f}}var Sh=y(()=>{"use strict"});import{randomBytes as dC}from"crypto";import{mkdir as uC,stat as pC,writeFile as fC}from"fs/promises";import{join as Jl}from"path";import{gzip as mC}from"zlib";import{promisify as gC}from"util";function hC(t){return Jl(Uo(t),"browser")}function yC(t){return Jl(hC(t),"screenshots")}function bC(){return new Date().toISOString().replace(/[:.]/g,"-")}function wC(){return dC(3).toString("hex")}async function Vl(t,e,n){if(e.length>vh)throw new Error(`writeScreenshotSidecar: buffer exceeds ${vh} byte cap (received ${e.length} bytes). Refusing to write oversized screenshot.`);let r=yC(t);await uC(r,{recursive:!0});let o=`${bC()}-${wC()}-${n}.png`,s=Jl(r,o);await fC(s,e);let{size:i}=await pC(s);return{path:s,bytes:i}}var zG,vh,kh=y(()=>{"use strict";W();Mr();zG=gC(mC);vh=5*1024*1024});var Eh={};ac(Eh,{PlaywrightProvider:()=>Yl});function _h(t){switch(t.kind){case"semantic":return t.role!==void 0?`semantic('${t.text}', role='${t.role}')`:`semantic('${t.text}')`;case"element_id":return`element_id(${t.elementId})`;case"selector":return`selector(${t.selector})`}}var Yl,Ah=y(()=>{"use strict";dh();bh();Sh();Kl();Mr();kh();Yl=class{name="playwright";config;launcher;sessions=new Map;constructor(e){this.config=e,this.launcher=new ci(e)}async open(e){let n=Wl(e.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:e.url,reason:n.reason};let{sessionId:r}=e,o=await this.launcher.ensurePage(r),s=this.ensureSessionState(r),i=null,a=null;try{await o.goto(e.url,{timeout:e.timeoutMs??3e4,waitUntil:e.waitFor??"load"})}catch(l){a=l}(e.screenshot===!0||a!==null)&&(i=await this.captureScreenshot(o,r,"browser_open")),s.observationCounter+=1;let c=await li(o,{observationCounter:s.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(s,c.interactive,c.url,c.title,"browser_open"),a!==null)throw a;return c}async observe(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),s=null;e.screenshot===!0&&(s=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let i=await li(r,{observationCounter:o.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:e.includeHidden,maxElements:e.maxElements});return this.updateSessionFromObservation(o,i.interactive,i.url,i.title,"browser_observe"),i}async act(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),s=r.url(),i=e.timeoutMs??3e4,a=await zl(r,e.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${_h(e.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:c}=a,l=null,d=async()=>{switch(e.action){case"click":await c.click({timeout:i});break;case"fill":{let g=Gl(e.value??"");await c.fill(e.value??"");break}case"press":await c.press(e.value??"");break;case"select":await c.selectOption(e.value??"");break;case"hover":await c.hover({timeout:i});break;case"scroll_to":await c.scrollIntoViewIfNeeded({timeout:i});break;case"wait_for":await c.waitFor({timeout:i,state:"visible"});break}};try{await d()}catch(g){if(g instanceof Error&&/navigation|net::ERR/i.test(g.message))try{await d()}catch(b){l=b}else l=g}let u=r.url();if(u!==s){let g=Wl(u,this.config);if(!g.allowed)return await r.goBack().catch(()=>{}),{outcome:"blocked_by_policy",url:u,reason:g.reason}}let p=null;(e.screenshot===!0||l!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await li(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),m=`browser_act:${e.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,m),l!==null)throw l;return f}async render(e){return this.launcher.renderHtml(e.url,{timeoutMs:e.timeoutMs??3e4,waitUntil:e.waitFor??"load",signal:e.signal})}async screenshot(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),s;if(e.target!==void 0){let d=await zl(r,e.target,o.knownElements);if(d.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${_h(e.target)}`);if(d.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");s=await d.locator.screenshot()}else s=await r.screenshot({fullPage:e.fullPage??!1});let{path:i,bytes:a}=await Vl(n,s,"browser_screenshot"),c=0,l=0;if(e.fullPage===!0)try{let d=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));c=d.w,l=d.h}catch{let d=r.viewportSize();c=d?.width??0,l=d?.height??0}else{let d=r.viewportSize();c=d?.width??0,l=d?.height??0}return{path:i,bytes:a,width:c,height:l,dataBase64:s.toString("base64"),mediaType:"image/png"}}async extract(e){throw new Error("browser_extract not implemented in Phase 1")}async close(e){await this.launcher.closeSession(e.sessionId),this.sessions.delete(e.sessionId)}describe(e){let n=this.sessions.get(e);if(n===void 0)return null;let r=this.launcher.getPage(e);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(e){let n=this.sessions.get(e);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(e,r),r}updateSessionFromObservation(e,n,r,o,s){e.knownElements=new Map(n.map(i=>[i.id,i])),e.currentUrl=r,e.currentTitle=o,e.lastAction=s,e.lastActionAt=new Date().toISOString()}async captureScreenshot(e,n,r){try{let o=await e.screenshot({fullPage:!1}),{path:s}=await Vl(n,o,r);return s}catch{return null}}}});var nn={};ac(nn,{__resetBrowserRegistryForTests:()=>EC,browserProviderActive:()=>kC,closeBrowserProvider:()=>Xl,getBrowserProvider:()=>vC,peekBrowserProvider:()=>_C});function Th(){Promise.resolve(Xl()).then(()=>{process.exit(130)})}function xh(){Promise.resolve(Xl()).then(()=>{process.exit(143)})}function Rh(){Ye=null}function SC(){di||(process.on("SIGINT",Th),process.on("SIGTERM",xh),process.on("exit",Rh),di=!0)}function Ph(){di&&(process.removeListener("SIGINT",Th),process.removeListener("SIGTERM",xh),process.removeListener("exit",Rh),di=!1)}async function vC(t){return Ye!==null?Ye:(tn!==null||(tn=(async()=>{let{PlaywrightProvider:e}=await Promise.resolve().then(()=>(Ah(),Eh)),n=lh(t),r=new e(n);return SC(),Ye=r,tn=null,r})()),tn)}async function Xl(){if(Ye===null)return;let t=Ye;Ye=null,tn=null,Ph(),await t.shutdown()}function kC(){return Ye!==null}function _C(){return Ye}function EC(){Ye=null,tn=null,Ph()}var Ye,tn,di,rn=y(()=>{"use strict";Kl();Ye=null,tn=null,di=!1});function Ch(t,e){try{return rh(t,e)}catch(n){return B("[web/scrape] extraction failed",{url:e,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function PC(t,e){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(rn(),nn));return(await n()).render({url:t,timeoutMs:e.timeoutMs,signal:e.signal})}async function Ih(t,e){let n=e.fetchFn??globalThis.fetch,r=e.renderFn??PC,o=null,s=t,i=null,a=null;try{let l=await ii(n,t,{headers:RC,redirect:"follow",signal:e.signal});i=l.status,s=l.url||t;let d=l.headers.get("content-type")??"";if(l.ok){if(xC.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 l.text();if(TC.test(d)&&!AC.test(d))return{title:"",markdown:u.trim(),finalUrl:s,usedRender:!1};o=Ch(u,s)}}catch(l){if(e.signal.aborted||l instanceof Error&&l.message.startsWith("web_scrape markdown mode received binary"))throw l;a=l}if(!(o===null||o.textLength<nh)&&o!==null)return{title:o.title,markdown:o.markdown,finalUrl:s,usedRender:!1};try{let l=await r(t,{timeoutMs:e.timeoutMs,signal:e.signal}),d=Ch(l.html,l.finalUrl);if(o===null||d.textLength>=o.textLength)return{title:d.title,markdown:d.markdown,finalUrl:l.finalUrl,usedRender:!0}}catch(l){if(e.signal.aborted)throw l;if(o===null){let d=l instanceof Error?l.message:String(l),u=a instanceof Error?a.message:`HTTP ${i??"error"}`,p=new Error(`web_scrape could not retrieve ${t}: fetch failed (${u}) and render failed (${d}).`);throw p.cause=l,p}}if(o!==null)return{title:o.title,markdown:o.markdown,finalUrl:s,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${t} (HTTP ${i??"error"}).`)}var AC,TC,xC,RC,Mh=y(()=>{"use strict";oh();Hl();oe();AC=/(text\/html|application\/xhtml\+xml)/i,TC=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,xC=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,RC={"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 MC(t){let e=t.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let s=await e(CC,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":t.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),IC),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!s.ok){let c="";try{let d=await s.text(),u=Us(d);u&&(c=`: ${u.length>200?u.slice(0,200)+"\u2026":u}`)}catch{}let l=s.statusText?` ${s.statusText}`:"";throw new Error(`Exa Search HTTP ${s.status}${l}${c}`)}let i;try{i=await s.json()}catch(c){throw new Error(`Exa Search response was not JSON: ${c instanceof Error?c.message:String(c)}`)}return(i.results??[]).slice(0,r).map(c=>({title:(c.title??"").trim()||"(untitled)",url:c.url??"",description:(c.highlights?.[0]??"").trim()})).filter(c=>c.url.length>0)}}}function Oh(t){return t.exaApiKey!==void 0&&t.exaApiKey.trim()!==""?MC({apiKey:t.exaApiKey,fetchFn:t.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function Dh(t,e){if(e.length===0)return`# Search results for "${t}"
|
|
843
|
+
`).trim()}function CP(t){return(t?.textContent??"").replace(/\s+/g," ").trim().length}function rh(t,e){let r=new xP(t,{url:e}).window.document,o=(r.title??"").trim(),s=null;try{let l=r.cloneNode(!0);s=new RP(l).parse()}catch{s=null}if(s&&typeof s.content=="string"&&s.content.trim().length>0){let l=th(jl.turndown(s.content)),d=(s.title??"").trim()||o,u=typeof s.length=="number"&&s.length>0?s.length:(s.textContent??"").replace(/\s+/g," ").trim().length;return{title:d,markdown:l,textLength:u,usedFallback:!1}}let i=r.body,a=i?.innerHTML??"",c=th(jl.turndown(a));return{title:o,markdown:c,textLength:CP(i),usedFallback:!0}}var nh,jl,oh=y(()=>{"use strict";nh=200,jl=new PP({headingStyle:"atx",codeBlockStyle:"fenced",bulletListMarker:"-"});jl.remove(["script","style","noscript","iframe"])});function MP(t,e){return new Promise((n,r)=>{if(e?.aborted){r(e.reason??new Error("aborted"));return}let o=()=>{clearTimeout(s),r(e?.reason??new Error("aborted"))},s=setTimeout(()=>{e?.removeEventListener("abort",o),n()},t);e?.addEventListener("abort",o,{once:!0})})}function sh(t,e,n){let r=Math.min(e*2**t,n);return Math.round(Math.random()*r)}function OP(t,e){let n=t.headers.get("retry-after");if(n===null)return null;let r=Number(n.trim());return!Number.isFinite(r)||r<0?null:Math.min(r*1e3,e)}async function ii(t,e,n={},r={}){let o=r.retries??3,s=r.baseDelayMs??500,i=r.maxDelayMs??1e4,a=r.sleep??MP,c=n.signal??void 0,l;for(let d=0;d<=o;d++){if(c?.aborted)throw c.reason??new Error("aborted");try{let u=await t(e,n);if(!IP.has(u.status)||d===o)return u;let p=OP(u,i)??sh(d,s,i);B("[web/retryFetch] retrying",{url:e,attempt:d,status:u.status,waitMs:p}),await u.body?.cancel().catch(()=>{}),await a(p,c)}catch(u){if(c?.aborted||(l=u,d===o))throw u;let p=sh(d,s,i);B("[web/retryFetch] retrying after error",{url:e,attempt:d,waitMs:p}),await a(p,c)}}throw l??new Error("retryFetch: exhausted without a result")}var IP,Hl=y(()=>{"use strict";oe();IP=new Set([429,502,503,504])});import{readFileSync as DP}from"node:fs";import{join as FP}from"path";function LP(t){let n=t.replace(/[.+?()[\]{}/\\^$|]/g,"\\$&").replace(/\*/g,"[^.]*");return new RegExp(`^${n}$`,"i")}function ih(t,e){return LP(e).test(t)}function UP(t,e){if(t!==void 0){let n=t.trim().toLowerCase();if(n==="1"||n==="true"||n==="yes")return!0;if(n==="0"||n==="false"||n==="no")return!1}if(e!==void 0){if(NP.has(e))return!0;if($P.has(e))return!1}return!1}function ah(t){return t===void 0||t.trim()===""?[]:t.split(",").map(e=>e.trim().toLowerCase()).filter(e=>e.length>0)}function BP(t){if(t===void 0||t===""||t==="playwright")return"playwright";throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${t}`)}function ch(t){let e=t===void 0||t.trim()===""?"default":t.trim();return mc(e),e}function jP(t){if(t===void 0)return!1;let e=t.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function HP(t){try{return DP(t,"utf8")}catch(e){if(e.code==="ENOENT")return;throw e}}function WP(t,e){let n={...t};if(typeof e.headless=="boolean"&&(n.headless=e.headless),Array.isArray(e.allowedDomains)&&(n.allowedDomains=e.allowedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),Array.isArray(e.blockedDomains)&&(n.blockedDomains=e.blockedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),typeof e.domSnapshots=="boolean"&&(n.domSnapshots=e.domSnapshots),e.backend==="playwright")n.backend="playwright";else if(e.backend!==void 0)throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${String(e.backend)}`);return typeof e.defaultProfile=="string"&&(n.defaultProfile=ch(e.defaultProfile)),n}function lh(t){let e=t?.env??A,n=t?.readFileSync??HP,r=t?.surface??e.AGENT_SURFACE,o=UP(e.AFK_BROWSER_HEADLESS,r),s=ah(e.AFK_BROWSER_ALLOWED_DOMAINS),i=ah(e.AFK_BROWSER_BLOCKED_DOMAINS),a=jP(e.AFK_BROWSER_DOM_SNAPSHOTS),c=BP(e.AFK_BROWSER_BACKEND),l=ch(e.AFK_BROWSER_DEFAULT_PROFILE),d={headless:o,allowedDomains:s,blockedDomains:i,domSnapshots:a,backend:c,configPath:null,defaultProfile:l},u=e.AFK_BROWSER_CONFIG,p=u!==void 0&&u.trim()!==""?u.trim():FP(nt(),"browser.json"),f=n(p);if(f===void 0)return d;let m;try{m=JSON.parse(f)}catch(b){throw new Error(`Failed to parse browser config at ${p}: ${String(b)}`)}if(typeof m!="object"||m===null||Array.isArray(m))throw new Error(`Browser config at ${p} must be a JSON object`);let g=WP(d,m);return g.configPath=p,g}function Wl(t,e){let n;try{n=new URL(t).hostname.toLowerCase()}catch{return{allowed:!1,reason:`invalid URL: ${t}`}}for(let r of e.blockedDomains)if(ih(n,r))return{allowed:!1,reason:`blocked by AFK_BROWSER_BLOCKED_DOMAINS: ${r}`};return e.allowedDomains.length>0&&!e.allowedDomains.some(o=>ih(n,o))?{allowed:!1,reason:"not in AFK_BROWSER_ALLOWED_DOMAINS"}:{allowed:!0}}var NP,$P,Kl=y(()=>{"use strict";H();W();NP=new Set(["daemon","subagent","telegram","afk"]),$P=new Set(["repl","interactive","cli"])});import en from"node:fs";import ai from"node:path";import{randomBytes as KP}from"node:crypto";import{chromium as GP}from"playwright";function qP(){try{return"5.36.2"}catch{}try{let t=ai.resolve(import.meta.dirname,"../../../package.json"),e=en.readFileSync(t,"utf8"),n=JSON.parse(e);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var zP,ci,dh=y(()=>{"use strict";W();oe();zP=qP(),ci=class{config;browser;sessions=new Map;launchPromise;shutdownComplete=!1;constructor(e){this.config=e}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=GP.launch({headless:this.config.headless}).then(e=>(this.browser=e,this.launchPromise=void 0,e)).catch(e=>{throw this.launchPromise=void 0,e}),this.launchPromise))}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(e){let n=this.sessions.get(e);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),s=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),i={context:s,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(e,i),s}async ensurePage(e){let n=this.sessions.get(e);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(e);let r=this.sessions.get(e);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${e}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",s=>{s.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",s=>{s.isNavigationRequest()&&s.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",s=>{s.frame()===o.mainFrame()&&s.request().isNavigationRequest()&&(r.lastHttpStatus=s.status())}),o.on("dialog",s=>{r.openDialog=s}),o}getPage(e){return this.sessions.get(e)?.page}async renderHtml(e,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),s=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",s,{once:!0});try{let i=await o.newPage(),a=await i.goto(e,{timeout:n.timeoutMs,waitUntil:n.waitUntil}),c=await i.content(),l=i.url(),d=a!==null?a.status():null;return{html:c,finalUrl:l,httpStatus:d}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",s),await o.close().catch(()=>{})}}getConsoleErrorCount(e){return this.sessions.get(e)?.consoleErrors??0}getLastHttpStatus(e){return this.sessions.get(e)?.lastHttpStatus??null}hasOpenDialog(e){return this.sessions.get(e)?.openDialog!==void 0}async dismissDialog(e,n=!0){let r=this.sessions.get(e);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(e){let n=this.sessions.get(e);n!==void 0&&(this.sessions.delete(e),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.shutdownComplete)return;this.shutdownComplete=!0;let e=[...this.sessions.keys()];if(await Promise.all(e.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${zP}`}}loadStorageState(e){let n=gc(e);try{if(!en.existsSync(n))return;let r=JSON.parse(en.readFileSync(n,"utf8"));return B("[browser/vault] restored session",{profile:e,file:n}),r}catch(r){B("[browser/vault] ignoring unreadable vault",{profile:e,file:n,err:r});return}}async saveStorageState(e,n){try{let r=gc(e);if(!en.existsSync(r))return;let o=await n.storageState(),s=ai.join(ai.dirname(r),`.${ai.basename(r)}.${process.pid}.${KP(4).toString("hex")}.tmp`);en.writeFileSync(s,JSON.stringify(o),{mode:384}),en.chmodSync(s,384),en.renameSync(s,r),B("[browser/vault] saved session",{profile:e,file:r})}catch(r){B("[browser/vault] save failed",{profile:e,err:r})}}}});import{createHash as JP}from"crypto";function Gl(t){if(t.length===0)return t;let e=t;for(let{regex:n,name:r}of VP)r==="form-password"?e=e.replace(n,"password=[redacted]"):e=e.replace(n,"[redacted]");return e}function uh(t){return!!(t.role==="textbox"&&t.kind==="password"||t.label&&YP.test(t.label))}function ph(t){return JP("sha256").update(t,"utf8").digest("hex").slice(0,8)}function fh(t){let e=t.replace(/\s+/g," ").trim();return e.length<=80?e:e.slice(0,77)+"..."}var VP,YP,Mr=y(()=>{"use strict";VP=[{name:"aws-access-key",regex:/AKIA[0-9A-Z]{16}/g},{name:"github-pat",regex:/ghp_[a-zA-Z0-9]{36}/g},{name:"openai-bearer",regex:/sk-[a-zA-Z0-9_-]{20,}/g},{name:"slack-token",regex:/xox[abp]-[a-zA-Z0-9-]{10,}/g},{name:"jwt",regex:/eyJ[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}/g},{name:"form-password",regex:/password=[^&\s]+/gi}];YP=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as XP}from"node:crypto";function QP(t){return t?t.replace(/\s+/g," ").trim().slice(0,200):""}function ZP(t,e,n){return`el_${XP("sha256").update(`${t}:${e}:${n}`).digest("hex").slice(0,6)}`}function eC(t){let e=t.replace(/\s+/g," ").trim(),n=4e3;return e.length<=n?e:e.slice(0,n)+"\u2026[truncated]"}function mh(t){return t.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function hh(t,e){let n=t.role??"",r=t.name??"";gh.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&e.push(t);for(let s of t.children??[])hh(s,e)}async function tC(t){return t.evaluate(e=>{let n=Array.from(document.querySelectorAll(e)),r=[];for(let o of n){let s=o.getBoundingClientRect(),i=o;if(s.width===0&&s.height===0){let d=window.getComputedStyle(i);if(d.display==="none"||d.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),c=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),l=a==="input"?o.type||null:o.getAttribute("type");r.push({name:c,tagName:a,type:l,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(s.left),y:Math.round(s.top),w:Math.round(s.width),h:Math.round(s.height)}})}return r},yh).catch(()=>[])}async function nC(t){return t.evaluate(e=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(e)),o=[];for(let s of r){let i=s.tagName.toLowerCase(),a=s.getAttribute("role")??"",c=s.getAttribute("aria-label")??s.getAttribute("placeholder")??(s.textContent??"").replace(/\s+/g," ").trim().slice(0,100),l=a||(n[i]??"");if(i==="input"){let g=s.type;g==="checkbox"?l="checkbox":g==="radio"?l="radio":g==="button"||g==="submit"||g==="reset"?l="button":g==="search"?l="searchbox":l="textbox"}if(!l)continue;let d="value"in s?s.value:void 0,u=d!==void 0?String(d):void 0,p=s.disabled??!1,f=i==="input"?s.checked:void 0,m={role:l,name:c,disabled:p};u!==void 0&&(m.value=u),f!==void 0&&(m.checked=f),o.push(m)}return o},yh).catch(()=>[])}function rC(t){let n=t.accessibility;return n!==null&&typeof n=="object"?n:null}async function li(t,e){let n=e.maxElements??80,r=e.includeHidden??!1,o=[],s=rC(t),i=s?s.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=tC(t),c=t.evaluate(()=>document.body?.innerText??"").catch(()=>""),l=Promise.resolve(t.url()),d=t.title().catch(()=>""),[u,p,f,m,g]=await Promise.all([i,a,c,l,d]),b,S=!1;u!==null?(b=[],hh(u,b)):(o.push("observation skipped accessibility tree (returned null)"),S=!0,b=(await nC(t)).filter(N=>gh.has(N.role??"")));let v=new Map;for(let x of p){let N=mh(x.name),U=v.get(N);(!U||U.bbox.w===0&&x.bbox.w>0)&&v.set(N,x)}let E=b.map(x=>({ax:x,dom:v.get(mh(x.name??""))})),w=r?E:E.filter(x=>x.dom?x.dom.bbox.w>0||x.dom.bbox.h>0:!0);w.sort((x,N)=>{let U=x.dom?.bbox.y??0,C=N.dom?.bbox.y??0;if(U!==C)return U-C;let j=x.dom?.bbox.x??0,$=N.dom?.bbox.x??0;return j-$}),w.length>200&&o.push("page has 200+ interactive elements; consider scoping");let _=w.slice(0,n).map((x,N)=>{let U=x.ax.role??"generic",C=x.ax.name??"",j=ZP(U,C,N),$=x.dom?.bbox??{x:0,y:0,w:0,h:0},P=x.dom?.type??null,F=null;x.ax.value!==void 0&&x.ax.value!==null&&(F=String(x.ax.value)),x.ax.checked!==void 0&&(F=String(x.ax.checked)),uh({role:U,kind:P})&&(F="[redacted]");let D={disabled:x.ax.disabled??!1};x.ax.checked!==void 0&&(D.checked=x.ax.checked===!0||x.ax.checked==="mixed"),x.ax.selected!==void 0&&(D.selected=x.ax.selected),x.ax.expanded!==void 0&&(D.expanded=x.ax.expanded);let L;x.dom?.testId?L=`[data-testid="${x.dom.testId}"]`:x.dom?.id&&(L=`#${x.dom.id}`);let V={id:j,role:U,label:QP(C),kind:P,value:F,state:D,bbox:$};return L!==void 0&&(V.selector=L),V}),k="idle";try{let x=await t.evaluate(()=>document.readyState);x==="loading"?k="loading":x==="interactive"?k="navigating":k="idle"}catch{k="navigating"}k!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),S&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let T=eC(f),M=`obs_${e.observationCounter.toString(36)}`,I=new Date().toISOString();return{observationId:M,url:m,title:g,textSummary:T,interactive:_,status:{httpStatus:e.httpStatus??null,loadingState:k,hasDialog:e.hasDialog??!1,consoleErrors:e.consoleErrors??0},warnings:o,screenshotPath:e.screenshotPath??null,capturedAt:I}}var gh,yh,bh=y(()=>{"use strict";Mr();gh=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);yh="a[href], button, input, select, textarea, [role], [tabindex], label"});async function wh(t,e){try{let n=await t.nth(e).evaluate(i=>{let a=i,c=a.getAttribute("role")??a.tagName.toLowerCase(),l=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",d=a.getBoundingClientRect();return{role:c,label:l,x:Math.round(d.x),y:Math.round(d.y),w:Math.round(d.width),h:Math.round(d.height)}}),r=`${n.role}:${n.label}:${e}`,o=0;for(let i=0;i<r.length;i++)o=o*31+r.charCodeAt(i)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function ql(t,e){let n=Math.min(e,5);return(await Promise.all(Array.from({length:n},(o,s)=>wh(t,s)))).filter(o=>o!==null)}async function oC(t){let e=new Set,n=[];for(let{loc:r,count:o}of t)for(let s=0;s<o;s++){let i;try{i=await r.nth(s).evaluate(a=>{let c=a,l=c.getBoundingClientRect();return`${c.tagName}@${Math.round(l.x)},${Math.round(l.y)}`})}catch{continue}e.has(i)||(e.add(i),n.push({key:i,locator:r,index:s}))}return n}async function zl(t,e,n){switch(e.kind){case"element_id":return sC(t,e,n);case"selector":return iC(t,e);case"semantic":return aC(t,e)}}async function sC(t,e,n){let r=n.get(e.elementId);if(r===void 0)return{outcome:"not_found",query:e};if(r.selector!==void 0){let c=t.locator(r.selector);if(await c.count()===1)return{outcome:"resolved",locator:c}}let o=t.getByRole(r.role,{name:r.label,exact:!0}),s=await o.count();if(s===0)return{outcome:"not_found",query:e};if(s===1)return{outcome:"resolved",locator:o};let i=await ql(o,s);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:i}}async function iC(t,e){let n=t.locator(e.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:e};if(r===1)return{outcome:"resolved",locator:n};let o=await ql(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${e.selector}]`},candidates:o}}async function aC(t,e){return e.role!==void 0?cC(t,e.text,e.role):lC(t,e.text,e)}async function cC(t,e,n){let r=t.getByRole(n,{name:e}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:e,role:n}};if(o===1)return{outcome:"resolved",locator:r};let s=await ql(r,o);return{outcome:"ambiguous_target",query:{text:e,role:n},candidates:s}}async function lC(t,e,n){let r=t.getByRole("button",{name:e}),o=t.getByRole("link",{name:e}),s=t.getByLabel(e,{exact:!1}),[i,a,c]=await Promise.all([r.count(),o.count(),s.count()]);if(i+a+c===0)return{outcome:"not_found",query:n};let d=[];i>0&&d.push({loc:r,count:i}),a>0&&d.push({loc:o,count:a}),c>0&&d.push({loc:s,count:c});let u=await oC(d);if(u.length===0)return{outcome:"not_found",query:n};if(u.length===1){let g=u[0];return g===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:g.locator.nth(g.index)}}let p=u.slice(0,5),f=[];for(let g=0;g<p.length;g++){let b=p[g];if(b===void 0)continue;let S=await wh(b.locator,b.index);if(S!==null){let v=`${S.role}:${S.label}:${g}`,E=0;for(let w=0;w<v.length;w++)E=E*31+v.charCodeAt(w)>>>0;f.push({...S,id:`el_${E.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:e},candidates:f}}var Sh=y(()=>{"use strict"});import{randomBytes as dC}from"crypto";import{mkdir as uC,stat as pC,writeFile as fC}from"fs/promises";import{join as Jl}from"path";import{gzip as mC}from"zlib";import{promisify as gC}from"util";function hC(t){return Jl(Uo(t),"browser")}function yC(t){return Jl(hC(t),"screenshots")}function bC(){return new Date().toISOString().replace(/[:.]/g,"-")}function wC(){return dC(3).toString("hex")}async function Vl(t,e,n){if(e.length>vh)throw new Error(`writeScreenshotSidecar: buffer exceeds ${vh} byte cap (received ${e.length} bytes). Refusing to write oversized screenshot.`);let r=yC(t);await uC(r,{recursive:!0});let o=`${bC()}-${wC()}-${n}.png`,s=Jl(r,o);await fC(s,e);let{size:i}=await pC(s);return{path:s,bytes:i}}var zG,vh,kh=y(()=>{"use strict";W();Mr();zG=gC(mC);vh=5*1024*1024});var Eh={};ac(Eh,{PlaywrightProvider:()=>Yl});function _h(t){switch(t.kind){case"semantic":return t.role!==void 0?`semantic('${t.text}', role='${t.role}')`:`semantic('${t.text}')`;case"element_id":return`element_id(${t.elementId})`;case"selector":return`selector(${t.selector})`}}var Yl,Ah=y(()=>{"use strict";dh();bh();Sh();Kl();Mr();kh();Yl=class{name="playwright";config;launcher;sessions=new Map;constructor(e){this.config=e,this.launcher=new ci(e)}async open(e){let n=Wl(e.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:e.url,reason:n.reason};let{sessionId:r}=e,o=await this.launcher.ensurePage(r),s=this.ensureSessionState(r),i=null,a=null;try{await o.goto(e.url,{timeout:e.timeoutMs??3e4,waitUntil:e.waitFor??"load"})}catch(l){a=l}(e.screenshot===!0||a!==null)&&(i=await this.captureScreenshot(o,r,"browser_open")),s.observationCounter+=1;let c=await li(o,{observationCounter:s.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(s,c.interactive,c.url,c.title,"browser_open"),a!==null)throw a;return c}async observe(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),s=null;e.screenshot===!0&&(s=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let i=await li(r,{observationCounter:o.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:e.includeHidden,maxElements:e.maxElements});return this.updateSessionFromObservation(o,i.interactive,i.url,i.title,"browser_observe"),i}async act(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),s=r.url(),i=e.timeoutMs??3e4,a=await zl(r,e.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${_h(e.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:c}=a,l=null,d=async()=>{switch(e.action){case"click":await c.click({timeout:i});break;case"fill":{let g=Gl(e.value??"");await c.fill(e.value??"");break}case"press":await c.press(e.value??"");break;case"select":await c.selectOption(e.value??"");break;case"hover":await c.hover({timeout:i});break;case"scroll_to":await c.scrollIntoViewIfNeeded({timeout:i});break;case"wait_for":await c.waitFor({timeout:i,state:"visible"});break}};try{await d()}catch(g){if(g instanceof Error&&/navigation|net::ERR/i.test(g.message))try{await d()}catch(b){l=b}else l=g}let u=r.url();if(u!==s){let g=Wl(u,this.config);if(!g.allowed)return await r.goBack().catch(()=>{}),{outcome:"blocked_by_policy",url:u,reason:g.reason}}let p=null;(e.screenshot===!0||l!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await li(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),m=`browser_act:${e.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,m),l!==null)throw l;return f}async render(e){return this.launcher.renderHtml(e.url,{timeoutMs:e.timeoutMs??3e4,waitUntil:e.waitFor??"load",signal:e.signal})}async screenshot(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),s;if(e.target!==void 0){let d=await zl(r,e.target,o.knownElements);if(d.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${_h(e.target)}`);if(d.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");s=await d.locator.screenshot()}else s=await r.screenshot({fullPage:e.fullPage??!1});let{path:i,bytes:a}=await Vl(n,s,"browser_screenshot"),c=0,l=0;if(e.fullPage===!0)try{let d=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));c=d.w,l=d.h}catch{let d=r.viewportSize();c=d?.width??0,l=d?.height??0}else{let d=r.viewportSize();c=d?.width??0,l=d?.height??0}return{path:i,bytes:a,width:c,height:l,dataBase64:s.toString("base64"),mediaType:"image/png"}}async extract(e){throw new Error("browser_extract not implemented in Phase 1")}async close(e){await this.launcher.closeSession(e.sessionId),this.sessions.delete(e.sessionId)}describe(e){let n=this.sessions.get(e);if(n===void 0)return null;let r=this.launcher.getPage(e);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(e){let n=this.sessions.get(e);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(e,r),r}updateSessionFromObservation(e,n,r,o,s){e.knownElements=new Map(n.map(i=>[i.id,i])),e.currentUrl=r,e.currentTitle=o,e.lastAction=s,e.lastActionAt=new Date().toISOString()}async captureScreenshot(e,n,r){try{let o=await e.screenshot({fullPage:!1}),{path:s}=await Vl(n,o,r);return s}catch{return null}}}});var nn={};ac(nn,{__resetBrowserRegistryForTests:()=>EC,browserProviderActive:()=>kC,closeBrowserProvider:()=>Xl,getBrowserProvider:()=>vC,peekBrowserProvider:()=>_C});function Th(){Promise.resolve(Xl()).then(()=>{process.exit(130)})}function xh(){Promise.resolve(Xl()).then(()=>{process.exit(143)})}function Rh(){Ye=null}function SC(){di||(process.on("SIGINT",Th),process.on("SIGTERM",xh),process.on("exit",Rh),di=!0)}function Ph(){di&&(process.removeListener("SIGINT",Th),process.removeListener("SIGTERM",xh),process.removeListener("exit",Rh),di=!1)}async function vC(t){return Ye!==null?Ye:(tn!==null||(tn=(async()=>{let{PlaywrightProvider:e}=await Promise.resolve().then(()=>(Ah(),Eh)),n=lh(t),r=new e(n);return SC(),Ye=r,tn=null,r})()),tn)}async function Xl(){if(Ye===null)return;let t=Ye;Ye=null,tn=null,Ph(),await t.shutdown()}function kC(){return Ye!==null}function _C(){return Ye}function EC(){Ye=null,tn=null,Ph()}var Ye,tn,di,rn=y(()=>{"use strict";Kl();Ye=null,tn=null,di=!1});function Ch(t,e){try{return rh(t,e)}catch(n){return B("[web/scrape] extraction failed",{url:e,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function PC(t,e){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(rn(),nn));return(await n()).render({url:t,timeoutMs:e.timeoutMs,signal:e.signal})}async function Ih(t,e){let n=e.fetchFn??globalThis.fetch,r=e.renderFn??PC,o=null,s=t,i=null,a=null;try{let l=await ii(n,t,{headers:RC,redirect:"follow",signal:e.signal});i=l.status,s=l.url||t;let d=l.headers.get("content-type")??"";if(l.ok){if(xC.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 l.text();if(TC.test(d)&&!AC.test(d))return{title:"",markdown:u.trim(),finalUrl:s,usedRender:!1};o=Ch(u,s)}}catch(l){if(e.signal.aborted||l instanceof Error&&l.message.startsWith("web_scrape markdown mode received binary"))throw l;a=l}if(!(o===null||o.textLength<nh)&&o!==null)return{title:o.title,markdown:o.markdown,finalUrl:s,usedRender:!1};try{let l=await r(t,{timeoutMs:e.timeoutMs,signal:e.signal}),d=Ch(l.html,l.finalUrl);if(o===null||d.textLength>=o.textLength)return{title:d.title,markdown:d.markdown,finalUrl:l.finalUrl,usedRender:!0}}catch(l){if(e.signal.aborted)throw l;if(o===null){let d=l instanceof Error?l.message:String(l),u=a instanceof Error?a.message:`HTTP ${i??"error"}`,p=new Error(`web_scrape could not retrieve ${t}: fetch failed (${u}) and render failed (${d}).`);throw p.cause=l,p}}if(o!==null)return{title:o.title,markdown:o.markdown,finalUrl:s,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${t} (HTTP ${i??"error"}).`)}var AC,TC,xC,RC,Mh=y(()=>{"use strict";oh();Hl();oe();AC=/(text\/html|application\/xhtml\+xml)/i,TC=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,xC=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,RC={"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 MC(t){let e=t.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let s=await e(CC,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":t.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),IC),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!s.ok){let c="";try{let d=await s.text(),u=Us(d);u&&(c=`: ${u.length>200?u.slice(0,200)+"\u2026":u}`)}catch{}let l=s.statusText?` ${s.statusText}`:"";throw new Error(`Exa Search HTTP ${s.status}${l}${c}`)}let i;try{i=await s.json()}catch(c){throw new Error(`Exa Search response was not JSON: ${c instanceof Error?c.message:String(c)}`)}return(i.results??[]).slice(0,r).map(c=>({title:(c.title??"").trim()||"(untitled)",url:c.url??"",description:(c.highlights?.[0]??"").trim()})).filter(c=>c.url.length>0)}}}function Oh(t){return t.exaApiKey!==void 0&&t.exaApiKey.trim()!==""?MC({apiKey:t.exaApiKey,fetchFn:t.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function Dh(t,e){if(e.length===0)return`# Search results for "${t}"
|
|
844
844
|
|
|
845
845
|
(no results)`;let n=[`# Search results for "${t}"`,""];return e.forEach((r,o)=>{n.push(`## ${o+1}. ${r.title}`),r.url&&n.push(r.url),r.description&&n.push(r.description),n.push("")}),n.join(`
|
|
846
846
|
`).trimEnd()}var CC,IC,Fh=y(()=>{"use strict";Cn();CC="https://api.exa.ai/search",IC=10});function BC(t){if(!t||typeof t!="object")return{error:"Invalid input: expected an object"};let e=t,n=e.mode??"markdown";if(n!=="markdown"&&n!=="raw"&&n!=="search")return{error:`Invalid input: mode must be one of "markdown", "raw", "search" (got ${JSON.stringify(n)})`};let r=n,o,s;if(r==="search"){if(typeof e.query!="string"||e.query.length===0)return{error:'Invalid input: search mode requires a non-empty "query" string'};s=e.query}else{if(typeof e.url!="string"||e.url.length===0)return{error:`Invalid input: ${r} mode requires a non-empty "url" string`};let c;try{c=new URL(e.url)}catch{return{error:`Invalid input: "${e.url}" is not a valid absolute URL`}}if(c.protocol!=="http:"&&c.protocol!=="https:")return{error:`Invalid input: protocol "${c.protocol}" not supported (http/https only)`};o=c.toString()}let i=OC;if(e.timeout_ms!==void 0){if(typeof e.timeout_ms!="number"||!Number.isFinite(e.timeout_ms)||e.timeout_ms<=0)return{error:"Invalid input: timeout_ms must be a positive finite number"};i=Math.min(e.timeout_ms,DC)}let a=FC;if(e.max_bytes!==void 0){if(typeof e.max_bytes!="number"||!Number.isFinite(e.max_bytes)||e.max_bytes<=0)return{error:"Invalid input: max_bytes must be a positive finite number"};a=Math.min(e.max_bytes,LC)}return{mode:r,url:o,query:s,timeoutMs:i,maxBytes:a}}function Ql(t,e){let n=Buffer.from(t,"utf8");return n.byteLength<=e?t:n.subarray(0,e).toString("utf8")+NC}function jC(t){let e=[],n=t;for(let o=0;o<4&&n instanceof Error;o++)e.push(n.message),n=n.cause;let r=e.join(" | ");return UC.some(o=>r.includes(o))}function HC(t={}){let e=t.fetchFn??globalThis.fetch,n=t.env??process.env;return async(r,o)=>{if(typeof e!="function")return{content:"web_scrape unavailable: global fetch() is not present in this runtime (agent-afk requires Node 20+).",isError:!0};let s=BC(r);if("error"in s)return{content:s.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 i=new AbortController,a=()=>{i.abort(o.reason)},c,l=()=>{let d=i.signal.reason;return d instanceof Error?d.message:String(d??"aborted")};try{if(o.addEventListener("abort",a,{once:!0}),c=setTimeout(()=>{i.abort(new Error(`web_scrape timeout after ${s.timeoutMs}ms`))},s.timeoutMs),s.mode==="raw"){let u;try{u=await ii(e,s.url,{method:"GET",headers:{"User-Agent":"agent-afk/web_scrape",Accept:"*/*"},signal:i.signal})}catch(f){return i.signal.aborted?{content:`web_scrape aborted: ${l()}`,isError:!0}:{content:`web_scrape network error: ${f instanceof Error?f.message:String(f)}`,isError:!0}}if(!u.ok)return{content:`web_scrape HTTP ${u.status} ${u.statusText||""}`.trimEnd()+` for ${s.url}`,isError:!0};let p;try{p=await u.text()}catch(f){return{content:`web_scrape read error: ${f instanceof Error?f.message:String(f)}`,isError:!0}}return{content:Ql(p,s.maxBytes)}}if(s.mode==="markdown")try{let u=await Ih(s.url,{fetchFn:e,renderFn:t.renderFn,timeoutMs:s.timeoutMs,signal:i.signal});return u.markdown.trim().length===0?{content:`web_scrape extracted no readable content from ${s.url}.`,isError:!0}:{content:Ql(u.markdown,s.maxBytes)}}catch(u){if(i.signal.aborted)return{content:`web_scrape aborted: ${l()}`,isError:!0};let p=u instanceof Error?u.message:String(u),f=jC(u)?" (the render fallback needs the optional Playwright browser \u2014 run `pnpm exec playwright install chromium`)":"";return{content:`web_scrape markdown error: ${p}${f}`,isError:!0}}let d=Oh({exaApiKey:n.EXA_API_KEY,fetchFn:e});if("error"in d)return{content:d.error,isError:!0};try{let u=await d.search(s.query,{limit:$C,timeoutMs:s.timeoutMs,signal:i.signal});return{content:Ql(Dh(s.query,u),s.maxBytes)}}catch(u){return i.signal.aborted?{content:`web_scrape aborted: ${l()}`,isError:!0}:{content:`web_scrape search error (${d.name}): ${u instanceof Error?u.message:String(u)}`,isError:!0}}}finally{c!==void 0&&clearTimeout(c),o.removeEventListener("abort",a)}}}var OC,DC,FC,LC,NC,$C,UC,Lh,Nh=y(()=>{"use strict";Mh();Fh();Hl();OC=3e4,DC=12e4,FC=1e6,LC=1e7,NC=`
|
|
@@ -955,7 +955,7 @@ ${e}`)}var Vd=y(()=>{"use strict"});function kw(t){return typeof t=="string"&&t.
|
|
|
955
955
|
---`);if(o===-1)return{};let s=r.slice(0,o),i=r.slice(o+4).trim(),a={},c=s.split(`
|
|
956
956
|
`);for(let l=0;l<c.length;l++){let d=c[l];if(!d)continue;let u=d.indexOf(":");if(u===-1)continue;let p=d.slice(0,u).trim(),f=d.slice(u+1).trim();if(p==="name")a.name=f.replace(/^["']|["']$/g,"");else if(p==="description")a.description=f.replace(/^["']|["']$/g,"");else if(p==="argumentHint")a.argumentHint=f.replace(/^["']|["']$/g,"");else if(p==="tools"){let m=c.slice(l+1),g=ia(f,m),b=FO(e),S=[];for(let v of g){let E=Yr(v,b);E!==void 0?S.includes(E)||S.push(E):process.stderr.write(`[afk] plugin skill at ${t}: unknown tool "${v}" in \`tools:\` frontmatter \u2014 ignored
|
|
957
957
|
`)}S.length===0&&g.length>0&&process.stderr.write(`[afk] plugin skill at ${t}: \`tools:\` declared but no valid tools resolved \u2014 subagent will be blocked from all tools
|
|
958
|
-
`),a.allowedTools=S}else if(p==="audience"){let m=f.replace(/^["']|["']$/g,"");(m==="public"||m==="internal")&&(a.audience=m)}else p==="context"
|
|
958
|
+
`),a.allowedTools=S}else if(p==="audience"){let m=f.replace(/^["']|["']$/g,"");(m==="public"||m==="internal")&&(a.audience=m)}else if(p==="context")a.context=f.replace(/^["']|["']$/g,"");else if(p==="read-only"||p==="readOnly")f.replace(/^["']|["']$/g,"").trim()==="true"&&(a.readOnly=!0);else if(p==="model"){let m=f.replace(/^["']|["']$/g,"").trim();m.length>0&&(a.model=m)}}return i.length>0&&(a.body=i),a}catch{return{}}}function FO(t){return t!==void 0?t:new Set([...Ne,...me,"memory_search","agent","skill"])}var OO,Xr=y(()=>{"use strict";$e();Ue();OO={read:"read_file",edit:"edit_file",write:"write_file",bash:"bash",grep:"grep",glob:"glob",ls:"list_directory",list:"list_directory",webfetch:"web_scrape",websearch:"web_scrape",webbrowse:"web_scrape"}});function Gn(t){let e=t.trim();return e.startsWith('"')&&e.endsWith('"')&&e.length>=2||e.startsWith("'")&&e.endsWith("'")&&e.length>=2?e.slice(1,-1).trim():e}function NO(t,e,n){let r=Gn(t);(r===">"||r===">-"||r==="|"||r==="|-")&&(r="");let s=0;for(let i=n;i<e.length;i++){let a=e[i];if(a===void 0||!/^\s+\S/.test(a))break;let c=a.trim();if(c.startsWith("- "))break;r=r.length>0?`${r} ${c}`:c,s++}return{value:r,consumed:s}}function an(t,e=()=>{}){if(!t.startsWith("---")){e("missing frontmatter (file must start with ---)");return}let n=t.slice(3),r=n.indexOf(`
|
|
959
959
|
---`);if(r===-1){e("unterminated frontmatter (no closing ---)");return}let o=n.slice(0,r),s=n.slice(r+4),i=s.startsWith(`
|
|
960
960
|
`)?s.slice(1):s,a=o.split(`
|
|
961
961
|
`),c,l,d,u,p,f,m,g,b=[];for(let E=0;E<a.length;E++){let w=a[E];if(w===void 0||w.trim().length===0||/^\s/.test(w))continue;let R=w.indexOf(":");if(R===-1)continue;let _=w.slice(0,R).trim(),k=_.toLowerCase(),T=w.slice(R+1),M=a.slice(E+1);switch(k){case"name":{c=Gn(T);break}case"description":{let{value:I,consumed:x}=NO(T,a,E+1);l=I,E+=x;break}case"tools":case"allowed-tools":{m=Ew(ia(T,M));break}case"disallowedtools":case"disallowed-tools":{g=Ew(ia(T,M));break}case"model":{let I=Gn(T);I.length>0&&(d=I);break}case"maxturns":case"max-turns":{let I=Number.parseInt(Gn(T),10);Number.isFinite(I)&&I>0?u=I:e(`invalid ${_} value ${JSON.stringify(T.trim())} \u2014 ignored`);break}case"maxtooluseiterations":case"max-tool-use-iterations":{let I=Number.parseInt(Gn(T),10);Number.isFinite(I)&&I>0?p=I:e(`invalid ${_} value ${JSON.stringify(T.trim())} \u2014 ignored`);break}case"bash":{let I=Gn(T).toLowerCase();I==="read-only"||I==="readonly"?f=!0:e(`unrecognized bash value ${JSON.stringify(T.trim())} \u2014 ignored`);break}default:{LO.has(k)?b.push(_):e(`unknown frontmatter key ${JSON.stringify(_)} \u2014 ignored`);break}}}if(c===void 0||c.length===0){e('missing required frontmatter field "name"');return}if(l===void 0||l.length===0){e(`agent ${JSON.stringify(c)}: missing required frontmatter field "description"`);return}let S=i.trim();if(S.length===0){e(`agent ${JSON.stringify(c)}: empty body \u2014 an agent file's body is its system prompt`);return}let v={description:l,prompt:S,...m!==void 0&&m.length>0?{tools:m}:{},...g!==void 0&&g.length>0?{disallowedTools:g}:{},...d!==void 0?{model:d}:{},...u!==void 0?{maxTurns:u}:{},...p!==void 0?{maxToolUseIterations:p}:{}};return{name:c,definition:v,...f===!0?{bashReadOnly:!0}:{},...b.length>0?{ignoredKeys:b}:{}}}function Ew(t){let e=[];for(let n of t){if(n.includes("(")){e.push(n);continue}for(let r of n.split(/\s+/))r.length>0&&e.push(r)}return e}var LO,Qr=y(()=>{"use strict";Xr();LO=new Set(["permissionmode","permission-mode","skills","mcpservers","mcp-servers","hooks","memory","background","effort","isolation","color","initialprompt","initial-prompt"])});function BO(t){let e=t.trim();if(e.length===0)return null;let n=e.indexOf("(");if(n!==-1){if(e=e.slice(0,n).trim(),e.length===0)return null}else if(e.endsWith(")"))return null;if(e.startsWith("mcp__"))return e;let r=UO[e.toLowerCase()];return r!==void 0?r:Yr(e,$O)}function Aw(t){let e=[],n=new Set,r=[];for(let o of t){let s=BO(o);if(s!==null){if(s===void 0){r.push(o.trim());continue}n.has(s)||(n.add(s),e.push(s))}}return{names:e,dropped:r}}function jO(t){let e=[],n=0,r="";for(let o of t)o==="("?(n++,r+=o):o===")"?(n=Math.max(0,n-1),r+=o):o===","&&n===0?(e.push(r),r=""):r+=o;return r.length>0&&e.push(r),e}function HO(t){let e=jO(t.join(",")),n=!1,r=!1,o=new Set;for(let s of e){let i=s.trim();if(i.length===0)continue;let a=i.indexOf("("),c=(a===-1?i:i.slice(0,a)).trim().toLowerCase();if(c!=="agent"&&c!=="task")continue;if(a===-1){n=!0;continue}r=!0;let l=i.slice(a+1).replace(/\)\s*$/,"");for(let d of l.split(",")){let u=d.trim();u.length>0&&o.add(u)}}if(!n){if(o.size>0)return[...o];if(r)return[]}}function Xd(t,e){let{tools:n,disallowedTools:r}=t.definition,o=t.bashReadOnly===!0,s=r!==void 0?Aw(r):void 0,i=n!==void 0?Aw(n):void 0,a=[...i?.dropped??[],...s?.dropped??[]];if(i===void 0&&s===void 0)return{allowedTools:void 0,bashReadOnly:o,droppedTokens:a};let c=new Set(s?.names??[]),d=(i?.names??[...e]).filter(p=>!c.has(p)),u=n!==void 0&&d.includes("agent")?HO(n):void 0;return{allowedTools:d,bashReadOnly:o,droppedTokens:a,...u!==void 0?{nestedAgentTypes:u}:{}}}var $O,UO,Tw=y(()=>{"use strict";Xr();$e();Ue();$O=new Set([...Ne,...me,"memory_search","agent","skill"]),UO={task:"agent",agent:"agent",skill:"skill"}});import{fileURLToPath as WO}from"node:url";import{dirname as KO}from"node:path";var GO,$V,Mt,Qd=y(()=>{"use strict";GO=WO(import.meta.url),$V=KO(GO),Mt={name:"research-agent",systemPrompt:`---
|
|
@@ -1028,9 +1028,9 @@ Reply compactly: the answer first, then evidence as file:line citations, then op
|
|
|
1028
1028
|
|
|
1029
1029
|
Available agent types (pass via \`agent_type\`):
|
|
1030
1030
|
`+e+"\nWhen `agent_type` is omitted, a general child agent with the default tool surface is dispatched.",input_schema:{...Ee.input_schema,properties:{...Ee.input_schema.properties,agent_type:{type:"string",description:"Named agent type to dispatch \u2014 one of the \"Available agent types\" listed in this tool's description. The type supplies the child's system prompt, tool allowlist (mechanically enforced), and default model/turn budget. Explicit `model`/`max_turns` on this call override the type's defaults. Unknown types fail with the available list. Alias: `subagent_type`."}}}}}var Pw=y(()=>{"use strict";$e()});var la=y(()=>{"use strict";Qr();Tw();eu();ru();Pw()});import{isAbsolute as Cw}from"node:path";function Iw(t){if(typeof t!="object"||t===null)throw new Error("Agent tool input must be an object");let e=t,n=e.prompt;if(typeof n!="string")throw new Error('Agent tool input must have a "prompt" field of type string');if(n.trim().length===0)throw new Error("Agent tool prompt cannot be empty");let r,o=e.model;if(o!==void 0){if(typeof o!="string")throw new Error("Agent tool model must be a string");r=o}let s=0,i=!1,a=e.max_turns;if(a!==void 0){if(typeof a!="number")throw new Error("Agent tool max_turns must be a number");s=Math.max(0,Math.floor(a)),i=!0}let c=0,l=!1,d=e.max_tool_use_iterations;if(d!==void 0){if(typeof d!="number")throw new Error("Agent tool max_tool_use_iterations must be a number");c=Math.max(0,Math.floor(d)),l=!0}let u,p=e.agent_type??e.subagent_type;if(p!==void 0){if(typeof p!="string")throw new Error("Agent tool agent_type must be a string");let k=p.trim();k.length>0&&(u=k)}let f="agent-tool",m=e.id_prefix;if(m!==void 0){if(typeof m!="string")throw new Error("Agent tool id_prefix must be a string");f=m}let g="foreground",b=e.mode;if(b!==void 0){if(b!=="foreground"&&b!=="background")throw new Error(`Agent tool mode must be "foreground" or "background", got: ${JSON.stringify(b)}`);g=b}let S,v=e.cwd;if(v!==void 0){if(typeof v!="string")throw new Error(`Agent tool cwd must be a string, got: ${JSON.stringify(v)}`);if(v.length===0)throw new Error("Agent tool cwd must be a non-empty string");if(!Cw(v))throw new Error(`Agent tool cwd must be an absolute path, got: ${JSON.stringify(v)}`);if(v.split(/[/\\]/).includes(".."))throw new Error(`Agent tool cwd must not contain '..' segments, got: ${JSON.stringify(v)}`);S=v}let E,w=e.writeRoots;if(w!==void 0){if(!Array.isArray(w))throw new Error(`Agent tool writeRoots must be an array of absolute paths, got: ${JSON.stringify(w)}`);let k=[];for(let T of w){if(typeof T!="string"||T.length===0)throw new Error(`Agent tool writeRoots entries must be non-empty strings, got: ${JSON.stringify(T)}`);if(!Cw(T))throw new Error(`Agent tool writeRoots entries must be absolute paths, got: ${JSON.stringify(T)}`);if(T.split(/[/\\]/).includes(".."))throw new Error(`Agent tool writeRoots entries must not contain '..' segments, got: ${JSON.stringify(T)}`);k.push(T)}k.length>0&&(E=k)}let R,_=e.isolation;if(_!==void 0&&_!=="none"){if(_!=="worktree")throw new Error(`Agent tool isolation must be "none" or "worktree", got: ${JSON.stringify(_)}`);if(S!==void 0)throw new Error("Agent tool cwd and isolation are mutually exclusive \u2014 pass one or the other");if(E!==void 0)throw new Error("Agent tool writeRoots and isolation are mutually exclusive \u2014 a worktree-isolated child is fully confined by design");if(g==="background")throw new Error('Agent tool isolation:"worktree" is not supported with mode:"background" yet');R="worktree"}return{prompt:n,model:r,max_turns:s,max_turns_explicit:i,max_tool_use_iterations:c,max_tool_use_iterations_explicit:l,id_prefix:f,mode:g,...u!==void 0?{agent_type:u}:{},...S!==void 0?{cwd:S}:{},...E!==void 0?{writeRoots:E}:{},...R!==void 0?{isolation:R}:{}}}var Mw=y(()=>{"use strict"});function zn(t){try{return ne(t).catch(()=>{})}catch{return Promise.resolve()}}function Ot(t,e=240){return t.length<=e?t:t.slice(0,e)+"\u2026"}function su(t){if(t!=null){if(typeof t=="string")return t.length;try{return JSON.stringify(t).length}catch{return}}}function n0(t){if(t==null)return;let e=su(t);return e!==void 0&&e>t0?{truncated:!0,chars:e}:t}function Dw(t){let e={status:t.status,error:Ot(t.errorMessage,Ow),subagent_id:t.subagentId};t.schemaErrorMessage&&(e.schemaError=Ot(t.schemaErrorMessage,Ow));let n=n0(t.partialOutput);return n!==void 0&&(e.partialOutput=n),e}var t0,Ow,iu=y(()=>{"use strict";Je();t0=4096,Ow=1024});function Fw(t){let{parsed:e,namedAgent:n,depth:r,maxDepth:o,currentCwd:s,signal:i,defaultConfig:a,createChildExecutor:c}=t,l;if(n!==void 0){let T=n.definition.model;l=T!==void 0&&T!=="inherit"?T:t.parentModel}let d=e.model??l??t.defaultSubagentModel??"sonnet",u=q(d)==="openai-compatible",p=n!==void 0?Xd(n,da):void 0,f=t.allowedTools;if(p?.allowedTools!==void 0){let T=t.allowedTools;f=T!==void 0?p.allowedTools.filter(M=>T.includes(M)):p.allowedTools}let m=t.readOnlyBash===!0||p?.bashReadOnly===!0,g=f===void 0||f.includes("write_file")||f.includes("edit_file"),b=(f===void 0||f.includes("bash"))&&m!==!0,S=g||b;p!==void 0&&p.droppedTokens.length>0&&process.stderr.write(`[afk] agents: agent_type ${JSON.stringify(n?.name)}: unknown tool token(s) dropped fail-closed: ${p.droppedTokens.join(", ")}
|
|
1031
|
-
`);let v=!e.max_turns_explicit&&n?.definition.maxTurns!==void 0?Math.max(1,Math.floor(n.definition.maxTurns)):e.max_turns,E=!e.max_tool_use_iterations_explicit&&n?.definition.maxToolUseIterations!==void 0?Math.max(1,Math.floor(n.definition.maxToolUseIterations)):e.max_tool_use_iterations??0,w=Vr({childModel:d,resolved:t.resolveApiKeyForModel?t.resolveApiKeyForModel(d):Z(d),parentApiKey:a.apiKey}),R={model:d,apiKey:u?void 0:w,systemPrompt:n!==void 0?n.definition.prompt:a.systemPrompt,baseUrl:u?void 0:a.baseUrl,maxTurns:v,maxToolUseIterations:E,depth:r+1,maxDepth:o,...e.cwd!==void 0?{cwd:e.cwd}:{},...e.writeRoots!==void 0?{writeRoots:e.writeRoots}:{}},_,k;if(t.childProviderFactory&&r<o){k=new G({parentAbortSignal:i,...s!==void 0?{cwd:s}:{},...t.childInheritedReadRoots!==void 0?{parentReadRoots:t.childInheritedReadRoots}:{},...t.traceWriter!==void 0?{traceWriter:t.traceWriter}:{},...t.surface!==void 0?{surface:t.surface}:{}}),_=Zr(i);let T=c({subagentManager:k,parentSession:_,defaultConfig:a,...t.surface!==void 0?{surface:t.surface}:{},defaultSubagentModel:t.defaultSubagentModel,childProviderFactory:t.childProviderFactory,childSkillExecutorFactory:t.childSkillExecutorFactory,...t.resolveApiKeyForModel!==void 0?{resolveApiKeyForModel:t.resolveApiKeyForModel}:{},depth:r+1,maxDepth:o,...s!==void 0?{cwd:s}:{},...t.traceWriter!==void 0?{traceWriter:t.traceWriter}:{},...t.allowedTools!==void 0?{allowedTools:t.allowedTools}:{},...t.readOnlyBash?{readOnlyBash:!0}:{},...t.agentRegistry!==void 0?{agentRegistry:t.agentRegistry}:{},...p?.nestedAgentTypes!==void 0?{nestedAgentAllowlist:p.nestedAgentTypes}:{},parentModel:d}),M=t.childSkillExecutorFactory?t.childSkillExecutorFactory(r+1,o,i,s):void 0;R.provider=t.childProviderFactory({childExecutor:T,...M!==void 0?{childSkillExecutor:M}:{},...R.model!==void 0?{model:R.model}:{},...f!==void 0?{allowedTools:f}:{},...m?{readOnlyBash:!0}:{}})}else(f!==void 0||m)&&(R.provider=ua(f??[...da],R.model,m,a.openaiBaseUrl));return{childConfig:R,childParentSession:_,childManager:k,childWriteCapable:S}}var Lw=y(()=>{"use strict";ce();ge();oa();ke();pt();la()});var Nw=y(()=>{"use strict";W()});var MY,pa,$w=y(()=>{"use strict";be();oe();X();Nw();W();Je();MY=300*1e3,pa=class extends Error{constructor(e,n){super(`Background job cap reached (${e}/${n} running). Wait for existing jobs to finish or cancel them before spawning more.`),this.name="BackgroundJobCapError"}}});async function Uw(t){let{handle:e,registry:n,prompt:r,model:o,parentSessionId:s}=t;if(!n)return await e.teardown().catch(c=>B("subagent-executor: handle teardown failed: "+(c instanceof Error?c.message:String(c)))),{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 i;try{i=n.register({handle:e,prompt:r,model:o??"sonnet",parentSessionId:s})}catch(c){if(c instanceof pa)return await e.teardown().catch(l=>B("subagent-executor: handle teardown failed after cap error: "+(l instanceof Error?l.message:String(l)))),{content:c.message,isError:!0};throw c}let a={status:"running",jobId:i.jobId,subagentId:i.subagentId,label:i.label,message:`Background subagent started (jobId=${i.jobId}). It is running detached; its result will be delivered into this context automatically with the next user message once it finishes. /bgsub:join ${i.jobId} remains available for manual replay.`};return{content:JSON.stringify(a)}}var Bw=y(()=>{"use strict";$w();oe()});async function jw(t){let{handle:e,signal:n,prompt:r,idPrefix:o,model:s,childManager:i,identity:a,depth:c,parentSessionId:l,registry:d,promotionTriggers:u,activeForegroundHandles:p}=t,f=()=>{e.cancel()};n.addEventListener("abort",f,{once:!0});let m=Date.now(),g=!1,b,S=new Promise(_=>{b=_}),v,E=new Promise(_=>{v=_});u.set(e.id,{fire:b,ready:E}),p.set(e.id,e);let w,R=e.runToResult(r);try{let _=await Promise.race([R.then(x=>({kind:"result",result:x})),S.then(()=>({kind:"promote"}))]);if(_.kind==="promote")if(d)try{let x=d.adoptRunning({handle:e,runPromise:R,prompt:r,model:s??"sonnet",parentSessionId:l});return g=!0,n.removeEventListener("abort",f),v({jobId:x.jobId,label:x.label}),{content:JSON.stringify({status:"running",jobId:x.jobId,subagentId:x.subagentId,label:x.label,message:`Subagent backgrounded by user (jobId=${x.jobId}). It keeps running detached; its result will be delivered into this context automatically with the next user message once it finishes. /bgsub:join ${x.jobId} remains available for manual replay.`})}}catch(x){B("subagent-executor: promotion failed, staying foreground: "+(x instanceof Error?x.message:String(x))),v(null)}else v(null);let k=_.kind==="result"?_.result:await R;if(k.status==="succeeded"&&k.message){let x=k.message.content,N=typeof x=="string"?x:JSON.stringify(x),U=k.trace;return zn({...a,event:"subagent.completed",subagent_id:e.id,parent_session_id:l,status:k.status,duration_ms:Date.now()-m,content_chars:N.length,depth:c,tool_call_count:U?.toolCalls.length,thinking_present:U?.thinkingPresent,tool_names:U?.toolCalls.length?JSON.stringify([...new Set(U.toolCalls.map(C=>C.name))]):void 0}),w={content:Kn(N,k.stopReason)},w}let T=k.error?.message??"Subagent failed with no output",M=k.trace;zn({...a,event:"subagent.failed",subagent_id:e.id,id_prefix:o,parent_session_id:l,status:k.status,duration_ms:Date.now()-m,error_message:Ot(T),schema_error:k.schemaError?Ot(k.schemaError.message):void 0,partial_output_chars:su(k.partialOutput),depth:c,tool_call_count:M?.toolCalls.length,thinking_present:M?.thinkingPresent,tool_names:M?.toolCalls.length?JSON.stringify([...new Set(M.toolCalls.map(x=>x.name))]):void 0});let I=Dw({status:k.status,errorMessage:T,schemaErrorMessage:k.schemaError?.message,partialOutput:k.partialOutput,subagentId:e.id});return w={content:JSON.stringify(I),isError:!0},w}catch(_){let k=_ instanceof Error?_.message:String(_);throw zn({...a,event:"subagent.failed",subagent_id:e.id,id_prefix:o,parent_session_id:l,status:"failed",duration_ms:Date.now()-m,error_message:Ot(k),depth:c}),_}finally{if(u.delete(e.id),p.delete(e.id),v(null),!g){n.removeEventListener("abort",f),await i?.teardownAll(),await e.teardown({deferInjectContextToCaller:!0});let _=e.getLastStopInjectContext?.();if(ra(w,_),t.isolationTeardown){let{repoRoot:k,worktreePath:T}=t.isolationTeardown,M=await cy({repoRoot:k,worktreePath:T});M.preserved&&B(`[isolation] preserved worktree ${T} (${M.reason}) \u2014 locked so the sweep will not reap it; recover via the worktree tool`)}}}}var Hw=y(()=>{"use strict";be();oe();iu();Vd();hi()});var Jn,au=y(()=>{"use strict";ce();hl();pt();la();Cn();bt();Mw();iu();Lw();Bw();Hw();hi();oe();pt();Jn=class t{constructor(e){this.ctx=e;this.currentCwd=e.cwd}ctx;currentCwd;isolationCounter=0;setCwd(e){this.currentCwd=e,this.ctx.subagentManager.setCwd(e)}describeAgentTool(){return ou(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 e=[...this.activeForegroundHandles.values()];return e.length===0?0:(await Promise.all(e.map(n=>n.cancel().catch(()=>{}))),e.length)}async promoteActiveForeground(){let e=[...this.promotionTriggers.values()];return e.forEach(r=>r.fire()),(await Promise.all(e.map(r=>r.ready))).filter(r=>r!==null)}getSubagentsLite(){let e=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:e,backgroundJobs:n}}async execute(e){if(e.signal.aborted)return{content:"Agent tool call aborted",isError:!0};let n;try{n=Iw(e.input)}catch(b){return{content:`Agent tool input validation failed: ${b instanceof Error?b.message:String(b)}`,isError:!0}}let r;if(n.agent_type!==void 0&&(r=this.ctx.agentRegistry?.get(n.agent_type),r===void 0)){let b=[...this.ctx.agentRegistry?.keys()??[]].sort().join(", ");return{content:`Agent type "${n.agent_type}" not found. Available agent types: ${b.length>0?b:"(none)"}`,isError:!0}}let o=this.ctx.nestedAgentAllowlist;if(o!==void 0){let b=n.agent_type;if(b===void 0||!o.includes(b))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(", ")}. `+(b===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 "${b}" is out of scope.`),isError:!0}}let s=this.ctx.depth,i=this.ctx.maxDepth??cn,a=this.ctx.surface!==void 0?{origin:yt(this.ctx.surface),actor:je(s)}:{},c=this.ctx.subagentManager.getReadScopeInputs?.()??{parentReadRoots:void 0,parentCwd:void 0},l=Hs({parentReadRoots:c.parentReadRoots,parentCwd:c.parentCwd,childCwd:n.cwd??this.currentCwd}),{childConfig:d,childParentSession:u,childManager:p,childWriteCapable:f}=Fw({parsed:n,namedAgent:r,depth:s,maxDepth:i,currentCwd:this.currentCwd,...l!==void 0?{childInheritedReadRoots:l}:{},signal:e.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:b=>new t(b)}),m;if(n.isolation==="worktree")if(!f)B(`[isolation] skipped worktree for read-only dispatch (agent_type=${n.agent_type??"generic"}) \u2014 nothing to isolate`);else{let b=this.currentCwd??process.cwd();try{let S=await ay({cwd:b,slugHint:`iso-${n.id_prefix}-${++this.isolationCounter}-${Math.random().toString(36).slice(2,8)}`});d.cwd=S.path,m={repoRoot:S.repoRoot,worktreePath:S.path}}catch(S){return{content:`Failed to create isolated worktree for the subagent: ${S instanceof Error?S.message:String(S)}. isolation:"worktree" requires the dispatching session to run inside a git repository.`,isError:!0}}}n.mode==="background"&&d.timeoutMs===void 0&&(d.timeoutMs=Ww);let g;try{g=await this.ctx.subagentManager.forkSubagent({parent:this.ctx.parentSession,parentId:e.id,config:d,idPrefix:n.id_prefix,agentType:r!==void 0?r.name:n.id_prefix&&n.id_prefix!=="agent-tool"?at(n.id_prefix).replace(/[\r\n]+/g," ").trim()||"agent":at(n.prompt).replace(/[\r\n]+/g," ").slice(0,40).trim()||"agent",denyElicitations:!0}),u!==void 0&&(u.sessionId=g.id)}catch(b){let S=b instanceof Error?b.message:String(b);return zn({...a,event:"subagent.failed",subagent_id:"unknown",id_prefix:n.id_prefix,parent_session_id:this.ctx.parentSession.sessionId,status:"failed",error_message:Ot(S),depth:s}),{content:`Failed to fork subagent: ${S}`,isError:!0}}return n.mode==="background"?Uw({handle:g,registry:this.ctx.backgroundRegistry,prompt:n.prompt,model:d.model,parentSessionId:this.ctx.parentSession.sessionId}):jw({handle:g,signal:e.signal,prompt:n.prompt,idPrefix:n.id_prefix,model:d.model,childManager:p,identity:a,depth:s,parentSessionId:this.ctx.parentSession.sessionId,registry:this.ctx.backgroundRegistry,promotionTriggers:this.promotionTriggers,activeForegroundHandles:this.activeForegroundHandles,...m!==void 0?{isolationTeardown:m}:{}})}}});function cu(t,e,n,r=!1,o){let{ctx:s,currentCwd:i}=t,a=s.depth??0,c=s.maxDepth??cn,l={...e},d=r&&o!==void 0?o.filter(g=>fa.includes(g)):r?[...fa]:o,u=r;if(!s.childProviderFactory||a>=c)return r?l.provider=Gw(l.model,s.openaiBaseUrl):d!==void 0&&(l.provider=ua(d,l.model,u,s.openaiBaseUrl)),{childConfig:l,childManager:void 0};let p=new G({parentAbortSignal:n,...s.traceWriter!==void 0?{traceWriter:s.traceWriter}:{},...i!==void 0?{cwd:i}:{}}),f=new Jn({subagentManager:p,parentSession:Zr(n),defaultConfig:{model:l.model,apiKey:s.apiKey,...s.baseUrl!==void 0?{baseUrl:s.baseUrl}:{},...s.openaiBaseUrl!==void 0?{openaiBaseUrl:s.openaiBaseUrl}:{}},...s.surface!==void 0?{surface:s.surface}:{},defaultSubagentModel:s.defaultSubagentModel,childProviderFactory:s.childProviderFactory,childSkillExecutorFactory:s.childSkillExecutorFactory,...s.resolveApiKeyForModel!==void 0?{resolveApiKeyForModel:s.resolveApiKeyForModel}:{},depth:a+1,maxDepth:c,...i!==void 0?{cwd:i}:{},...s.traceWriter!==void 0?{traceWriter:s.traceWriter}:{},...s.backgroundRegistry!==void 0?{backgroundRegistry:s.backgroundRegistry}:{},...d!==void 0?{allowedTools:d}:{},...u?{readOnlyBash:!0}:{},...s.agentRegistry!==void 0?{agentRegistry:s.agentRegistry}:{},...l.model!==void 0?{parentModel:l.model}:{}}),m=s.childSkillExecutorFactory?s.childSkillExecutorFactory(a+1,c,n,i):void 0;return l.provider=s.childProviderFactory({childExecutor:f,...m!==void 0?{childSkillExecutor:m}:{},...l.model!==void 0?{model:l.model}:{},...d!==void 0?{allowedTools:d}:{},...u?{readOnlyBash:!0}:{}}),{childConfig:l,childManager:p}}var Kw=y(()=>{"use strict";ce();pt();au()});async function qw(t,e,n,r){let{ctx:o,currentCwd:s}=t;if(r.signal.aborted)return{content:"Skill call aborted",isError:!0};let i=e.readOnly===!0||ma.has(e.name),a;try{if(a=te(e.name)["system.md"],!a)return{content:`Skill "${e.name}" has context: "fork" but no prompts/system.md found`,isError:!0}}catch(f){return{content:`Failed to load skill prompts: ${f instanceof Error?f.message:String(f)}`,isError:!0}}let c=e.model??o.defaultSubagentModel??o.defaultModel??"sonnet",l=Vr({childModel:c,resolved:o.resolveApiKeyForModel?o.resolveApiKeyForModel(c):Z(c),parentApiKey:o.apiKey}),d=new G({parentAbortSignal:r.signal,apiKey:l,parentModel:c,...o.baseUrl!==void 0?{baseUrl:o.baseUrl}:{},...o.traceWriter!==void 0?{traceWriter:o.traceWriter}:{},progressSink:Ce(),...s!==void 0?{cwd:s}:{}}),{childConfig:u,childManager:p}=cu(t,{model:c,systemPrompt:a,isSkillDispatch:!0,...o.traceWriter!==void 0?{traceWriter:o.traceWriter}:{}},r.signal,i);return Jw(t,{manager:d,childManager:p,childConfig:u,label:e.name,idPrefix:`skill-fork-${e.name}`,parentId:r.id,args:n,noOutputError:"Forked skill failed with no output",errorPrefix:"Forked skill execution error"})}async function zw(t,e,n,r,o,s,i=!1,a){let{ctx:c,currentCwd:l}=t;if(s.signal.aborted)return{content:"Skill call aborted",isError:!0};let d=c.defaultSubagentModel??c.defaultModel??"sonnet",u=Vr({childModel:d,resolved:c.resolveApiKeyForModel?c.resolveApiKeyForModel(d):Z(d),parentApiKey:c.apiKey}),p=new G({parentAbortSignal:s.signal,apiKey:u,parentModel:d,...c.baseUrl!==void 0?{baseUrl:c.baseUrl}:{},...c.traceWriter!==void 0?{traceWriter:c.traceWriter}:{},progressSink:Ce(),...l!==void 0?{cwd:l}:{}}),f={model:d,systemPrompt:ta(n,o),env:{PLUGIN_ROOT:r},isSkillDispatch:!0,...c.traceWriter!==void 0?{traceWriter:c.traceWriter}:{}},{childConfig:m,childManager:g}=cu(t,f,s.signal,i,a);return Jw(t,{manager:p,childManager:g,childConfig:m,label:e,idPrefix:`skill-${e}`,parentId:s.id,args:o,noOutputError:"Plugin skill failed with no output",errorPrefix:"Plugin skill execution error"})}async function Jw(t,e){let{manager:n,childManager:r,childConfig:o,label:s,idPrefix:i,parentId:a,args:c,noOutputError:l,errorPrefix:d}=e,u,p;try{u=await n.forkSubagent({parent:t.ctx.parentSession,config:o,idPrefix:i,parentId:a,agentType:s});let f=c&&c.length>0?c:`Run the ${s} skill now, following the instructions in your system prompt.`,m=await u.runToResult(f);return m.status==="succeeded"&&m.message?(p={content:Kn(m.message.content,m.stopReason)},p):m.status==="cancelled"&&typeof m.partialOutput=="string"&&m.partialOutput.length>0?(p={content:`[skill cancelled mid-flight \u2014 partial output preserved below]
|
|
1031
|
+
`);let v=!e.max_turns_explicit&&n?.definition.maxTurns!==void 0?Math.max(1,Math.floor(n.definition.maxTurns)):e.max_turns,E=!e.max_tool_use_iterations_explicit&&n?.definition.maxToolUseIterations!==void 0?Math.max(1,Math.floor(n.definition.maxToolUseIterations)):e.max_tool_use_iterations??0,w=Vr({childModel:d,resolved:t.resolveApiKeyForModel?t.resolveApiKeyForModel(d):Z(d),parentApiKey:a.apiKey}),R={model:d,apiKey:u?void 0:w,systemPrompt:n!==void 0?n.definition.prompt:a.systemPrompt,baseUrl:u?void 0:a.baseUrl,maxTurns:v,maxToolUseIterations:E,depth:r+1,maxDepth:o,...e.cwd!==void 0?{cwd:e.cwd}:{},...e.writeRoots!==void 0?{writeRoots:e.writeRoots}:{}},_,k;if(t.childProviderFactory&&r<o){k=new G({parentAbortSignal:i,...s!==void 0?{cwd:s}:{},...t.childInheritedReadRoots!==void 0?{parentReadRoots:t.childInheritedReadRoots}:{},...t.traceWriter!==void 0?{traceWriter:t.traceWriter}:{},...t.surface!==void 0?{surface:t.surface}:{}}),_=Zr(i);let T=c({subagentManager:k,parentSession:_,defaultConfig:a,...t.surface!==void 0?{surface:t.surface}:{},defaultSubagentModel:t.defaultSubagentModel,childProviderFactory:t.childProviderFactory,childSkillExecutorFactory:t.childSkillExecutorFactory,...t.resolveApiKeyForModel!==void 0?{resolveApiKeyForModel:t.resolveApiKeyForModel}:{},depth:r+1,maxDepth:o,...s!==void 0?{cwd:s}:{},...t.traceWriter!==void 0?{traceWriter:t.traceWriter}:{},...t.allowedTools!==void 0?{allowedTools:t.allowedTools}:{},...t.readOnlyBash?{readOnlyBash:!0}:{},...t.agentRegistry!==void 0?{agentRegistry:t.agentRegistry}:{},...p?.nestedAgentTypes!==void 0?{nestedAgentAllowlist:p.nestedAgentTypes}:{},parentModel:d}),M=t.childSkillExecutorFactory?t.childSkillExecutorFactory(r+1,o,i,s):void 0;R.provider=t.childProviderFactory({childExecutor:T,...M!==void 0?{childSkillExecutor:M}:{},...R.model!==void 0?{model:R.model}:{},...f!==void 0?{allowedTools:f}:{},...m?{readOnlyBash:!0}:{}})}else(f!==void 0||m)&&(R.provider=ua(f??[...da],R.model,m,a.openaiBaseUrl));return{childConfig:R,childParentSession:_,childManager:k,childWriteCapable:S}}var Lw=y(()=>{"use strict";ce();ge();oa();ke();pt();la()});var Nw=y(()=>{"use strict";W()});var MY,pa,$w=y(()=>{"use strict";be();oe();X();Nw();W();Je();MY=300*1e3,pa=class extends Error{constructor(e,n){super(`Background job cap reached (${e}/${n} running). Wait for existing jobs to finish or cancel them before spawning more.`),this.name="BackgroundJobCapError"}}});async function Uw(t){let{handle:e,registry:n,prompt:r,model:o,parentSessionId:s}=t;if(!n)return await e.teardown().catch(c=>B("subagent-executor: handle teardown failed: "+(c instanceof Error?c.message:String(c)))),{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 i;try{i=n.register({handle:e,prompt:r,model:o??"sonnet",parentSessionId:s})}catch(c){if(c instanceof pa)return await e.teardown().catch(l=>B("subagent-executor: handle teardown failed after cap error: "+(l instanceof Error?l.message:String(l)))),{content:c.message,isError:!0};throw c}let a={status:"running",jobId:i.jobId,subagentId:i.subagentId,label:i.label,message:`Background subagent started (jobId=${i.jobId}). It is running detached; its result will be delivered into this context automatically with the next user message once it finishes. /bgsub:join ${i.jobId} remains available for manual replay.`};return{content:JSON.stringify(a)}}var Bw=y(()=>{"use strict";$w();oe()});async function jw(t){let{handle:e,signal:n,prompt:r,idPrefix:o,model:s,childManager:i,identity:a,depth:c,parentSessionId:l,registry:d,promotionTriggers:u,activeForegroundHandles:p}=t,f=()=>{e.cancel()};n.addEventListener("abort",f,{once:!0});let m=Date.now(),g=!1,b,S=new Promise(_=>{b=_}),v,E=new Promise(_=>{v=_});u.set(e.id,{fire:b,ready:E}),p.set(e.id,e);let w,R=e.runToResult(r);try{let _=await Promise.race([R.then(x=>({kind:"result",result:x})),S.then(()=>({kind:"promote"}))]);if(_.kind==="promote")if(d)try{let x=d.adoptRunning({handle:e,runPromise:R,prompt:r,model:s??"sonnet",parentSessionId:l});return g=!0,n.removeEventListener("abort",f),v({jobId:x.jobId,label:x.label}),{content:JSON.stringify({status:"running",jobId:x.jobId,subagentId:x.subagentId,label:x.label,message:`Subagent backgrounded by user (jobId=${x.jobId}). It keeps running detached; its result will be delivered into this context automatically with the next user message once it finishes. /bgsub:join ${x.jobId} remains available for manual replay.`})}}catch(x){B("subagent-executor: promotion failed, staying foreground: "+(x instanceof Error?x.message:String(x))),v(null)}else v(null);let k=_.kind==="result"?_.result:await R;if(k.status==="succeeded"&&k.message){let x=k.message.content,N=typeof x=="string"?x:JSON.stringify(x),U=k.trace;return zn({...a,event:"subagent.completed",subagent_id:e.id,parent_session_id:l,status:k.status,duration_ms:Date.now()-m,content_chars:N.length,depth:c,tool_call_count:U?.toolCalls.length,thinking_present:U?.thinkingPresent,tool_names:U?.toolCalls.length?JSON.stringify([...new Set(U.toolCalls.map(C=>C.name))]):void 0}),w={content:Kn(N,k.stopReason)},w}let T=k.error?.message??"Subagent failed with no output",M=k.trace;zn({...a,event:"subagent.failed",subagent_id:e.id,id_prefix:o,parent_session_id:l,status:k.status,duration_ms:Date.now()-m,error_message:Ot(T),schema_error:k.schemaError?Ot(k.schemaError.message):void 0,partial_output_chars:su(k.partialOutput),depth:c,tool_call_count:M?.toolCalls.length,thinking_present:M?.thinkingPresent,tool_names:M?.toolCalls.length?JSON.stringify([...new Set(M.toolCalls.map(x=>x.name))]):void 0});let I=Dw({status:k.status,errorMessage:T,schemaErrorMessage:k.schemaError?.message,partialOutput:k.partialOutput,subagentId:e.id});return w={content:JSON.stringify(I),isError:!0},w}catch(_){let k=_ instanceof Error?_.message:String(_);throw zn({...a,event:"subagent.failed",subagent_id:e.id,id_prefix:o,parent_session_id:l,status:"failed",duration_ms:Date.now()-m,error_message:Ot(k),depth:c}),_}finally{if(u.delete(e.id),p.delete(e.id),v(null),!g){n.removeEventListener("abort",f),await i?.teardownAll(),await e.teardown({deferInjectContextToCaller:!0});let _=e.getLastStopInjectContext?.();if(ra(w,_),t.isolationTeardown){let{repoRoot:k,worktreePath:T}=t.isolationTeardown,M=await cy({repoRoot:k,worktreePath:T});M.preserved&&B(`[isolation] preserved worktree ${T} (${M.reason}) \u2014 locked so the sweep will not reap it; recover via the worktree tool`)}}}}var Hw=y(()=>{"use strict";be();oe();iu();Vd();hi()});var Jn,au=y(()=>{"use strict";ce();hl();pt();la();Cn();bt();Mw();iu();Lw();Bw();Hw();hi();oe();pt();Jn=class t{constructor(e){this.ctx=e;this.currentCwd=e.cwd}ctx;currentCwd;isolationCounter=0;setCwd(e){this.currentCwd=e,this.ctx.subagentManager.setCwd(e)}describeAgentTool(){return ou(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 e=[...this.activeForegroundHandles.values()];return e.length===0?0:(await Promise.all(e.map(n=>n.cancel().catch(()=>{}))),e.length)}async promoteActiveForeground(){let e=[...this.promotionTriggers.values()];return e.forEach(r=>r.fire()),(await Promise.all(e.map(r=>r.ready))).filter(r=>r!==null)}getSubagentsLite(){let e=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:e,backgroundJobs:n}}async execute(e){if(e.signal.aborted)return{content:"Agent tool call aborted",isError:!0};let n;try{n=Iw(e.input)}catch(b){return{content:`Agent tool input validation failed: ${b instanceof Error?b.message:String(b)}`,isError:!0}}let r;if(n.agent_type!==void 0&&(r=this.ctx.agentRegistry?.get(n.agent_type),r===void 0)){let b=[...this.ctx.agentRegistry?.keys()??[]].sort().join(", ");return{content:`Agent type "${n.agent_type}" not found. Available agent types: ${b.length>0?b:"(none)"}`,isError:!0}}let o=this.ctx.nestedAgentAllowlist;if(o!==void 0){let b=n.agent_type;if(b===void 0||!o.includes(b))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(", ")}. `+(b===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 "${b}" is out of scope.`),isError:!0}}let s=this.ctx.depth,i=this.ctx.maxDepth??cn,a=this.ctx.surface!==void 0?{origin:yt(this.ctx.surface),actor:je(s)}:{},c=this.ctx.subagentManager.getReadScopeInputs?.()??{parentReadRoots:void 0,parentCwd:void 0},l=Hs({parentReadRoots:c.parentReadRoots,parentCwd:c.parentCwd,childCwd:n.cwd??this.currentCwd}),{childConfig:d,childParentSession:u,childManager:p,childWriteCapable:f}=Fw({parsed:n,namedAgent:r,depth:s,maxDepth:i,currentCwd:this.currentCwd,...l!==void 0?{childInheritedReadRoots:l}:{},signal:e.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:b=>new t(b)}),m;if(n.isolation==="worktree")if(!f)B(`[isolation] skipped worktree for read-only dispatch (agent_type=${n.agent_type??"generic"}) \u2014 nothing to isolate`);else{let b=this.currentCwd??process.cwd();try{let S=await ay({cwd:b,slugHint:`iso-${n.id_prefix}-${++this.isolationCounter}-${Math.random().toString(36).slice(2,8)}`});d.cwd=S.path,m={repoRoot:S.repoRoot,worktreePath:S.path}}catch(S){return{content:`Failed to create isolated worktree for the subagent: ${S instanceof Error?S.message:String(S)}. isolation:"worktree" requires the dispatching session to run inside a git repository.`,isError:!0}}}n.mode==="background"&&d.timeoutMs===void 0&&(d.timeoutMs=Ww);let g;try{g=await this.ctx.subagentManager.forkSubagent({parent:this.ctx.parentSession,parentId:e.id,config:d,idPrefix:n.id_prefix,agentType:r!==void 0?r.name:n.id_prefix&&n.id_prefix!=="agent-tool"?at(n.id_prefix).replace(/[\r\n]+/g," ").trim()||"agent":at(n.prompt).replace(/[\r\n]+/g," ").slice(0,40).trim()||"agent",denyElicitations:!0}),u!==void 0&&(u.sessionId=g.id)}catch(b){let S=b instanceof Error?b.message:String(b);return zn({...a,event:"subagent.failed",subagent_id:"unknown",id_prefix:n.id_prefix,parent_session_id:this.ctx.parentSession.sessionId,status:"failed",error_message:Ot(S),depth:s}),{content:`Failed to fork subagent: ${S}`,isError:!0}}return n.mode==="background"?Uw({handle:g,registry:this.ctx.backgroundRegistry,prompt:n.prompt,model:d.model,parentSessionId:this.ctx.parentSession.sessionId}):jw({handle:g,signal:e.signal,prompt:n.prompt,idPrefix:n.id_prefix,model:d.model,childManager:p,identity:a,depth:s,parentSessionId:this.ctx.parentSession.sessionId,registry:this.ctx.backgroundRegistry,promotionTriggers:this.promotionTriggers,activeForegroundHandles:this.activeForegroundHandles,...m!==void 0?{isolationTeardown:m}:{}})}}});function cu(t,e,n,r=!1,o){let{ctx:s,currentCwd:i}=t,a=s.depth??0,c=s.maxDepth??cn,l={...e},d=r&&o!==void 0?o.filter(g=>fa.includes(g)):r?[...fa]:o,u=r;if(!s.childProviderFactory||a>=c)return r?l.provider=Gw(l.model,s.openaiBaseUrl,d):d!==void 0&&(l.provider=ua(d,l.model,u,s.openaiBaseUrl)),{childConfig:l,childManager:void 0};let p=new G({parentAbortSignal:n,...s.traceWriter!==void 0?{traceWriter:s.traceWriter}:{},...i!==void 0?{cwd:i}:{}}),f=new Jn({subagentManager:p,parentSession:Zr(n),defaultConfig:{model:l.model,apiKey:s.apiKey,...s.baseUrl!==void 0?{baseUrl:s.baseUrl}:{},...s.openaiBaseUrl!==void 0?{openaiBaseUrl:s.openaiBaseUrl}:{}},...s.surface!==void 0?{surface:s.surface}:{},defaultSubagentModel:s.defaultSubagentModel,childProviderFactory:s.childProviderFactory,childSkillExecutorFactory:s.childSkillExecutorFactory,...s.resolveApiKeyForModel!==void 0?{resolveApiKeyForModel:s.resolveApiKeyForModel}:{},depth:a+1,maxDepth:c,...i!==void 0?{cwd:i}:{},...s.traceWriter!==void 0?{traceWriter:s.traceWriter}:{},...s.backgroundRegistry!==void 0?{backgroundRegistry:s.backgroundRegistry}:{},...d!==void 0?{allowedTools:d}:{},...u?{readOnlyBash:!0}:{},...s.agentRegistry!==void 0?{agentRegistry:s.agentRegistry}:{},...l.model!==void 0?{parentModel:l.model}:{}}),m=s.childSkillExecutorFactory?s.childSkillExecutorFactory(a+1,c,n,i):void 0;return l.provider=s.childProviderFactory({childExecutor:f,...m!==void 0?{childSkillExecutor:m}:{},...l.model!==void 0?{model:l.model}:{},...d!==void 0?{allowedTools:d}:{},...u?{readOnlyBash:!0}:{}}),{childConfig:l,childManager:p}}var Kw=y(()=>{"use strict";ce();pt();au()});async function qw(t,e,n,r){let{ctx:o,currentCwd:s}=t;if(r.signal.aborted)return{content:"Skill call aborted",isError:!0};let i=e.readOnly===!0||ma.has(e.name),a;try{if(a=te(e.name)["system.md"],!a)return{content:`Skill "${e.name}" has context: "fork" but no prompts/system.md found`,isError:!0}}catch(f){return{content:`Failed to load skill prompts: ${f instanceof Error?f.message:String(f)}`,isError:!0}}let c=e.model??o.defaultSubagentModel??o.defaultModel??"sonnet",l=Vr({childModel:c,resolved:o.resolveApiKeyForModel?o.resolveApiKeyForModel(c):Z(c),parentApiKey:o.apiKey}),d=new G({parentAbortSignal:r.signal,apiKey:l,parentModel:c,...o.baseUrl!==void 0?{baseUrl:o.baseUrl}:{},...o.traceWriter!==void 0?{traceWriter:o.traceWriter}:{},progressSink:Ce(),...s!==void 0?{cwd:s}:{}}),{childConfig:u,childManager:p}=cu(t,{model:c,systemPrompt:a,isSkillDispatch:!0,...o.traceWriter!==void 0?{traceWriter:o.traceWriter}:{}},r.signal,i);return Jw(t,{manager:d,childManager:p,childConfig:u,label:e.name,idPrefix:`skill-fork-${e.name}`,parentId:r.id,args:n,noOutputError:"Forked skill failed with no output",errorPrefix:"Forked skill execution error"})}async function zw(t,e,n,r,o,s,i=!1,a,c){let{ctx:l,currentCwd:d}=t;if(s.signal.aborted)return{content:"Skill call aborted",isError:!0};let u=c??l.defaultSubagentModel??l.defaultModel??"sonnet",p=Vr({childModel:u,resolved:l.resolveApiKeyForModel?l.resolveApiKeyForModel(u):Z(u),parentApiKey:l.apiKey}),f=new G({parentAbortSignal:s.signal,apiKey:p,parentModel:u,...l.baseUrl!==void 0?{baseUrl:l.baseUrl}:{},...l.traceWriter!==void 0?{traceWriter:l.traceWriter}:{},progressSink:Ce(),...d!==void 0?{cwd:d}:{}}),m={model:u,systemPrompt:ta(n,o),env:{PLUGIN_ROOT:r},isSkillDispatch:!0,...l.traceWriter!==void 0?{traceWriter:l.traceWriter}:{}},{childConfig:g,childManager:b}=cu(t,m,s.signal,i,a);return Jw(t,{manager:f,childManager:b,childConfig:g,label:e,idPrefix:`skill-${e}`,parentId:s.id,args:o,noOutputError:"Plugin skill failed with no output",errorPrefix:"Plugin skill execution error"})}async function Jw(t,e){let{manager:n,childManager:r,childConfig:o,label:s,idPrefix:i,parentId:a,args:c,noOutputError:l,errorPrefix:d}=e,u,p;try{u=await n.forkSubagent({parent:t.ctx.parentSession,config:o,idPrefix:i,parentId:a,agentType:s});let f=c&&c.length>0?c:`Run the ${s} skill now, following the instructions in your system prompt.`,m=await u.runToResult(f);return m.status==="succeeded"&&m.message?(p={content:Kn(m.message.content,m.stopReason)},p):m.status==="cancelled"&&typeof m.partialOutput=="string"&&m.partialOutput.length>0?(p={content:`[skill cancelled mid-flight \u2014 partial output preserved below]
|
|
1032
1032
|
|
|
1033
|
-
${m.partialOutput}`},p):(p={content:m.error?.message??l,isError:!0},p)}catch(f){let m=f instanceof Error?f.message:String(f);return{content:`${d}: ${m}`,isError:!0}}finally{u&&await u.teardown({deferInjectContextToCaller:!0}).catch(B);let f=u?.getLastStopInjectContext?.();ra(p,f),await r?.teardownAll(),await n.teardownAll()}}var Vw=y(()=>{"use strict";ce();be();Vd();pt();oa();ke();Yt();Pe();oe();Kw();qd()});function s0(t){if(typeof t!="object"||t===null)return;let e=t.name;if(typeof e!="string")return;let n=e.trim();return n.length>0?n:void 0}function i0(t){if(typeof t!="object"||t===null)throw new Error("Skill tool input must be an object");let e=t,n=e.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=e.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 Vn,lu=y(()=>{"use strict";qe();Pt();pt();sw();Je();aw();dw();Gd();qd();Vw();Vn=class{constructor(e){this.ctx=e;this.currentCwd=e.cwd}ctx;pluginBodies=null;currentCwd;setCwd(e){this.currentCwd=e,this.pluginBodies=null}internals(){return{ctx:this.ctx,currentCwd:this.currentCwd}}async execute(e){if(e.signal.aborted)return{content:"Skill tool call aborted",isError:!0};let n=this.ctx.depth??0,r=this.ctx.maxDepth??cn;if(n>=r){let l=s0(e.input);return ne({...Wn(this.ctx),event:"delegation.skipped",parent_session_id:this.ctx.parentSession.sessionId,reason:"max_depth",depth:n,requested_name:l}).catch(()=>{}),{content:ow(n,r),isError:!0}}let o;try{o=i0(e.input)}catch(l){return{content:`Skill tool input validation failed: ${l instanceof Error?l.message:String(l)}`,isError:!0}}let s;try{s=st(o.name)}catch{}if(s)return await this.executeRegistrySkill(s,o.arguments,e);let i=this.getPluginSkillBody(o.name);if(i){if(i.context==="fork"){let d=i.readOnly===!0||ma.has(o.name);return await zw(this.internals(),o.name,i.body,i.pluginPath,o.arguments,e,d,i.allowedTools)}let l=i.body.replace(/\$\{PLUGIN_ROOT(?::-(?:[^{}]|\$\{[^{}]*\})*)?\}|\$PLUGIN_ROOT\b/g,()=>i.pluginPath);return gw(this.internals(),o.name,l,o.arguments,e)}let c=eo(this.ctx.pluginConfigs,this.currentCwd!==void 0?{cwd:this.currentCwd}:void 0).map(l=>l.name).join(", ");return{content:`Skill "${o.name}" not found. Available skills: ${c||"(none)"}`,isError:!0}}async executeRegistrySkill(e,n,r){if(r.signal.aborted)return{content:"Skill call aborted",isError:!0};if(e.context==="fork")return qw(this.internals(),e,n,r);if(e.context==="load")return mw(this.internals(),e,n,r);let o=iw(e.name);o&&lw(e.name);let s=this.ctx.depth??0;ne({...Wn(this.ctx),event:"skill.dispatched",requested_name:e.name,parent_session_id:this.ctx.parentSession.sessionId,depth:s,...ea(e.name)?{is_gate:!0}:{},...e.model!==void 0?{model:e.model}:{}}).catch(()=>{});let i=Date.now(),a,c;try{c=await e.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}:{}})}catch(d){a=d}finally{let d=Date.now()-i;o&&cw({skillName:e.name,durationMs:d,...a!==void 0?{isError:!0}:{}});let u=a!==void 0?a instanceof Error?a.message:String(a):void 0,p=a===void 0?typeof c=="string"?c.length:c!=null?JSON.stringify(c).length:0:void 0;ne({...Wn(this.ctx),event:"skill.completed",requested_name:e.name,parent_session_id:this.ctx.parentSession.sessionId,status:a!==void 0?"failed":"succeeded",duration_ms:d,depth:s,...p!==void 0?{content_chars:p}:{},...u!==void 0?{error_message:uw(u)}:{},...e.model!==void 0?{model:e.model}:{}}).catch(()=>{})}return a!==void 0?{content:`Skill execution error: ${a instanceof Error?a.message:String(a)}`,isError:!0}:{content:typeof c=="string"?c:c!=null?JSON.stringify(c):"Skill completed successfully."}}getPluginSkillBody(e){return this.pluginBodies||(this.pluginBodies=to(this.ctx.pluginConfigs,this.currentCwd!==void 0?{cwd:this.currentCwd}:void 0)),this.pluginBodies.get(e)}createDispatchSkillCallback(e){return async(n,r)=>{let o={id:`${e.id}-dispatch-${n}`,name:"skill",input:{name:n,...r!==void 0?{arguments:r}:{}},signal:e.signal},s=await this.execute(o);if(s.isError)throw new Error(s.content);return s.content}}}});function Zr(t){return{sessionId:void 0,getInputStreamRef:()=>({pushUserMessage:()=>{}}),abortSignal:t}}function Yw(t={}){return({childExecutor:e,childSkillExecutor:n,model:r,allowedTools:o,readOnlyBash:s})=>{let i={permissions:{allowedTools:o??da},subagentExecutor:e,...n!==void 0?{skillExecutor:n}:{},...s===!0?{readOnlyBash:!0}:{}};return q(typeof r=="string"?r:void 0)==="openai-compatible"?new ye({...i,...t.openaiBaseUrl!==void 0?{baseURL:t.openaiBaseUrl}:{},readOnlyMemory:!0}):new we({...i,readOnlyMemory:!0})}}function Gw(t,e){let n={allowedTools:[...fa]};return q(typeof t=="string"?t:void 0)==="openai-compatible"?new ye({permissions:n,readOnlyBash:!0,readOnlyMemory:!0,...e!==void 0?{baseURL:e}:{}}):new we({permissions:n,readOnlyBash:!0,readOnlyMemory:!0})}function Xw(t,e,n,r,o,s,i,a,c,l,d,u){let p=(f,m,g,b)=>{let S=b??i;return new Vn({parentSession:Zr(g),defaultModel:t,...l!==void 0?{defaultSubagentModel:l}:{},apiKey:e,...r!==void 0?{baseUrl:r}:{},...u!==void 0?{openaiBaseUrl:u}:{},depth:f,maxDepth:m,childProviderFactory:n,childSkillExecutorFactory:p,...o!==void 0?{traceWriter:o}:{},...s!==void 0?{backgroundRegistry:s}:{},...S!==void 0?{cwd:S}:{},...a!==void 0?{resolveApiKeyForModel:a}:{},...c!==void 0?{surface:c}:{},...d!==void 0?{agentRegistry:d}:{}})};return p}function ua(t,e,n=!1,r){let o={allowedTools:[...t]};return q(typeof e=="string"?e:void 0)==="openai-compatible"?new ye({permissions:o,...n?{readOnlyBash:!0}:{},...r!==void 0?{baseURL:r}:{}}):new we({permissions:o,...n?{readOnlyBash:!0}:{}})}function Qw(t,e){let n={allowedTools:[...rw]};return q(typeof e=="string"?e:void 0)==="openai-compatible"?new ye({permissions:n}):new we({permissions:n})}var cn,da,fa,ma,pt=y(()=>{"use strict";ga();Jr();ge();$e();Ue();Zi();lu();cn=3;da=[...Ne,...me,"memory_search","agent","skill"],fa=["read_file","glob","grep","list_directory","config_get","bash","web_scrape",...me,"memory_search","agent","skill"],ma=new Set(["ground-state"])});var ha,Zw=y(()=>{"use strict";oe();ol();Yt();js();X();be();ha=class{constructor(e,n,r,o,s,i,a,c,l,d,u,p,f,m,g){this.id=e;this.session=n;this.controller=r;this.abortGraph=o;this.outputSchema=s;this.timeoutMs=i;this.hookRegistry=a;this.onTerminal=c;this.parentInputStreamRef=l;this.parentAbortSignal=d;this.agentType=u;this.traceWriter=m;this.onSubagentSucceeded=g;this.progressSink=p,this.parentId=f}id;session;controller;abortGraph;outputSchema;timeoutMs;hookRegistry;onTerminal;parentInputStreamRef;parentAbortSignal;agentType;traceWriter;onSubagentSucceeded;currentStatus="idle";inFlight=null;lastMessage;lastDurationMs;latestTerminalStatus;stopDispatched=!1;lastStopInjectContext;progressSink;parentId;currentTrace=na();lastStreamedContent="";lastStopReason;get status(){return this.currentStatus}async run(e,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=Cs(this.streamToFinalMessage(e,n),this.timeoutMs,{controller:this.controller,label:this.id});this.inFlight=o;try{let s=await o;this.lastMessage=s.content,this.lastDurationMs=Date.now()-r,this.currentStatus="succeeded",this.latestTerminalStatus="succeeded",await Ht(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 i=typeof s.metadata?.totalCostUsd=="number"?s.metadata.totalCostUsd:void 0;return this.onSubagentSucceeded?.(this.currentTrace.usage,i),this.onTerminal(),s}catch(s){throw this.lastDurationMs=Date.now()-r,this.currentStatus!=="cancelled"&&(this.controller.signal.aborted?(await Ht(this.traceWriter,{transition:"cancelled",subagentId:this.id,source:"cascade"}),this.currentStatus="cancelled",this.latestTerminalStatus="cancelled"):(await Ht(this.traceWriter,{transition:"failed",subagentId:this.id,errorClass:s instanceof Error?s.constructor.name:"Unknown",errorMessage:s instanceof Error?s.message:String(s),partialOutputBytes:Buffer.byteLength(this.lastStreamedContent,"utf8")}),this.currentStatus="failed",this.latestTerminalStatus="failed")),this.onTerminal(),s}finally{this.inFlight=null}}async streamToFinalMessage(e,n){let r,o;this.lastStreamedContent="",this.currentTrace=na();let s=n??this.progressSink??Ce(),i={subagentId:this.id,...this.parentId!==void 0&&{parentId:this.parentId},...this.agentType!==void 0&&{agentType:this.agentType}};for await(let a of this.session.sendMessageStream(e)){if(s&&s(a,i),a.type==="chunk"){let c=a.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(a.type==="message")r=a.message,this.currentTrace.turnCount++;else if(a.type==="error"){o=a.error;break}else if(a.type==="done"){if(typeof a.metadata?.stopReason=="string"&&(this.lastStopReason=a.metadata.stopReason),typeof a.metadata?.usage=="object"&&a.metadata.usage!==null){let c=a.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}}if(o)throw o;if(r)return r;if(this.lastStreamedContent.length>0)return this.lastStopReason??=zd,{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 new Error(`Subagent ${this.id} produced no terminal message`)}async runToResult(e,n){try{let r=await this.run(e,n);return Sw(this.id,this.currentStatus,r,this.outputSchema,this.currentTrace,this.lastStopReason)}catch(r){let o=Jd(this.id,this.currentStatus,r,this.currentTrace,this.lastStopReason);return this.lastStreamedContent.length>0&&(o.partialOutput=this.lastStreamedContent),o}}runInBackground(e,n,r){let o;if(r){let s=this.progressSink??Ce();o=(i,a)=>{r(i),s?.(i,a)}}this.runToResult(e,o).then(s=>{n?.(s)}).catch(s=>{B("runInBackground: unexpected rejection after runToResult",s),console.error("Subagent runInBackground failed unexpectedly:",s)})}async cancel(){if(this.currentStatus==="cancelled"||this.stopDispatched)return;let e=this.latestTerminalStatus??"cancelled";this.currentStatus="cancelled",Ht(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(e)}}async teardown(e){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,e)}}getLastStopInjectContext(){return this.lastStopInjectContext}async dispatchStopAndRelease(e,n){if(this.stopDispatched){this.onTerminal();return}this.stopDispatched=!0;let r=await hg(this.hookRegistry,{event:"SubagentStop",subagentId:this.id,status:e,lastMessage:this.lastMessage,agentType:this.agentType,durationMs:this.lastDurationMs,trace:this.currentTrace},this.traceWriter?{traceWriter:this.traceWriter}:{});if(r.injectContext){if(this.parentAbortSignal?.aborted)B(`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){B(`Failed to inject context from SubagentStop handler: ${String(o)}`)}}this.onTerminal()}}});var a0,c0,l0,Ww,G,ce=y(()=>{"use strict";Am();ll();js();X();Je();Yt();gl();Eg();hl();pt();oa();ge();Zw();a0=async(t,e)=>({action:"decline"}),c0=50,l0=20*6e4,Ww=60*6e4,G=class{active=new Map;parentCanUseTool;hookRegistry;progressSink;parentApiKey;parentBaseUrl;parentProvider;parentCwd;parentReadRoots;worktreeMainRootCache=new Map;parentTraceWriter;parentSurface;abortGraph;rootId;rootController;counter=0;onSubagentSucceededCb;constructor(e={}){if(this.parentCanUseTool=e.canUseTool,this.hookRegistry=e.hookRegistry,this.progressSink=e.progressSink,this.parentApiKey=e.apiKey,this.parentBaseUrl=e.baseUrl,this.parentProvider=e.parentModel!==void 0?q(e.parentModel):void 0,this.parentCwd=e.cwd,this.parentReadRoots=e.parentReadRoots,this.parentTraceWriter=e.traceWriter,this.parentSurface=e.surface,this.onSubagentSucceededCb=e.onSubagentSucceeded,this.abortGraph=new xs(e.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),e.parentAbortSignal){let n=e.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(e=>({id:e.id,status:e.status}))}get(e){return this.active.get(e)}onChildAborted(e){return this.abortGraph.onChildAborted(this.rootId,e)}setOnSubagentSucceeded(e){this.onSubagentSucceededCb=e}setCwd(e){this.parentCwd=e,this.worktreeMainRootCache.delete(e)}getReadScopeInputs(){return{parentReadRoots:this.parentReadRoots,parentCwd:this.parentCwd}}async resolveMainRootForCwd(e){if(this.worktreeMainRootCache.has(e))return this.worktreeMainRootCache.get(e);let n=await _g(e);return this.worktreeMainRootCache.set(e,n),n}abortAll(e,n="user_signal"){this.abortGraph.abort(this.rootId,e,n)}async forkSubagent(e){if(e.phaseRole!==void 0&&e.phaseRole!=="read-write"&&e.config.provider!==void 0)throw new Error(`SubagentManager.forkSubagent: phaseRole "${e.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=`${e.idPrefix??"subagent"}-${Date.now()}-${++this.counter}`,r=e.parent.sessionId,o=e.config.hookRegistry??this.hookRegistry??e.parent.hookRegistry,s=e.config.traceWriter??this.parentTraceWriter;o&&await gg(o,{event:"SubagentStart",subagentId:n,parentSessionId:e.parent.sessionId},{signal:this.rootController.signal,...s?{traceWriter:s}:{}});let i=new AbortController;this.abortGraph.register(n,i),this.abortGraph.linkChild(this.rootId,n);let a=e.config.cwd??this.parentCwd,c;if(e.config.readRoots===void 0){let w=!(this.parentReadRoots===void 0&&this.parentCwd===void 0)&&a!==void 0?await this.resolveMainRootForCwd(a):void 0;c=Hs({parentReadRoots:this.parentReadRoots,parentCwd:this.parentCwd,childCwd:a,worktreeMainRoot:w})}let l;if(e.config.writeRoots!==void 0&&e.config.writeRoots.length>0){let E=a!==void 0?[a]:[];l=[...new Set([...E,...e.config.writeRoots])]}let d={...e.config,resume:r,forkSession:r?!0:e.config.forkSession,abortSignal:i.signal,apiKey:_w({childModel:e.config.model,configApiKey:e.config.apiKey,parentApiKey:this.parentApiKey,parentProvider:this.parentProvider}),baseUrl:e.config.baseUrl??(q(e.config.model)==="openai-compatible"?void 0:this.parentBaseUrl),isNonInteractive:e.config.isNonInteractive??!0,maxToolUseIterations:e.config.maxToolUseIterations??c0,autoResumeOnUsageLimit:e.config.autoResumeOnUsageLimit??!1,...e.config.parentSessionId===void 0&&e.parent.sessionId!==void 0?{parentSessionId:e.parent.sessionId}:{},...e.config.phaseRole===void 0&&e.phaseRole!==void 0?{phaseRole:e.phaseRole}:{},...e.config.cwd===void 0&&this.parentCwd!==void 0?{cwd:this.parentCwd}:{},...c!==void 0?{readRoots:c}:{},...l!==void 0?{writeRoots:l}:{},...e.config.traceWriter===void 0&&this.parentTraceWriter!==void 0?{traceWriter:this.parentTraceWriter}:{},...e.config.surface===void 0&&this.parentSurface!==void 0?{surface:this.parentSurface}:{},hookRegistry:o,permissionBubbler:e.config.permissionBubbler??(this.parentCanUseTool!==void 0&&e.config.canUseTool===void 0?{canUseTool:this.parentCanUseTool}:void 0),...e.denyElicitations===!1?{}:{onElicitation:a0},...e.phaseRole==="read-only"?{provider:Qw("read-only",e.config.model)}:{}};d.cwd!==void 0&&kg(d.cwd);let u;try{u=new zt(d)}catch(E){throw this.abortGraph.dispose(n),E}let p=e.parent.getInputStreamRef?.(),f=e.parent.abortSignal,m=this.progressSink??Ce(),g=e.agentType?.trim()||void 0,b=e.parentId?.trim()||void 0,S=new ha(n,u,i,this.abortGraph,e.outputSchema,e.config.timeoutMs??l0,o,()=>{this.active.delete(n),this.abortGraph.dispose(n)},p,f,g??e.idPrefix,m,b??e.parent.sessionId,s,this.onSubagentSucceededCb);this.active.set(n,S);let v=typeof e.config.model=="string"?e.config.model:JSON.stringify(e.config.model);return Ht(s,{transition:"started",subagentId:n,parentId:e.parent.sessionId??this.rootId,model:v,...d.tools?.allowedTools?{allowedTools:[...d.tools.allowedTools]}:{}}),await ne({event:"subagent.dispatched",subagent_id:n,id_prefix:e.idPrefix,model:v,parent_session_id:e.parent.sessionId}),S}async kill(e){let n=this.active.get(e);return n?(await n.cancel(),!0):!1}async killAll(){await Promise.allSettled([...this.active.values()].map(e=>e.cancel()))}async teardownAll(){await Promise.allSettled([...this.active.values()].map(e=>e.teardown()))}}});async function eS(t,e={}){let{failFast:n=!0,teardown:r=!0,maxConcurrency:o=8}=e;if(t.length===0)return[];let s=new Array(t.length),i=new Set(t.map((c,l)=>l)),a=!1;return await Mn(t.map((c,l)=>l),o,async c=>{let l=t[c];n&&a&&await l.handle.cancel().catch(()=>{});let d=await l.handle.runToResult(l.prompt);if(s[c]=d,i.delete(c),n&&d.status!=="succeeded"){a=!0;for(let u of i){let p=t[u];p&&p.handle.status==="running"&&p.handle.cancel().catch(()=>{})}}}),r&&await Promise.allSettled(t.map(c=>c.handle.teardown())),s}var tS=y(()=>{"use strict";Js()});function nS(t){let e=new Set;for(let n of t){let r=Yr(n,d0);r!==void 0&&e.add(r)}return e}var d0,rS=y(()=>{"use strict";Xr();$e();Zs();d0=new Set([...Ne,...me,"memory_search","agent","skill"])});import{existsSync as u0,mkdirSync as mX,readFileSync as p0,renameSync as gX,writeFileSync as hX,unlinkSync as yX}from"fs";function oS(t=Do()){if(!u0(t))return ya();try{let e=p0(t,"utf8"),n=JSON.parse(e);if(!n||typeof n!="object")return ya();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 s=r.marketplaces&&typeof r.marketplaces=="object"?r.marketplaces:{};return{version:2,plugins:o,marketplaces:s}}return ya()}catch{return ya()}}function ya(){return{version:2,plugins:{},marketplaces:{}}}var sS=y(()=>{"use strict";W()});import{existsSync as uu,readFileSync as cS,readdirSync as f0,realpathSync as m0,statSync as g0}from"fs";import{join as Yn,resolve as iS}from"path";function ln(t=gt(),e={}){let n=e.trustAll===!0,r=e.sourceEnabled,o=n?`${t}\0trustAll`:t;if(n&&r&&r.size>0){let l=[...r.entries()].map(([d,u])=>`${d}=${u?1:0}`).sort().join(",");o=`${o}\0${l}`}no||(no=new Map);let s=no.get(o);if(s)return[...s];if(!uu(t))return no.set(o,[]),[];let i=t===gt()?Do():Yn(t,".index.json"),a=oS(i),c=[];return lS(t,t,0,c,new Set,a.plugins,n,r),no.set(o,c),[...c]}function lS(t,e,n,r,o,s,i,a){if(n>h0)return;let c;try{c=m0(e)}catch{c=e}if(o.has(c))return;if(o.add(c),uu(Yn(e,".claude-plugin","plugin.json"))){let d=pu(t,e);if(d===null){ba(r,e);return}if(i){if(a&&a.get(b0(d))===!1)return;ba(r,e);return}if(d.layout==="cache"){let p=s[d.key];if(!p||p.enabled===!1)return;ba(r,e);return}let u=s[d.key];if(u&&u.enabled===!1)return;ba(r,e);return}let l;try{l=f0(e)}catch{return}for(let d of l){if(d.startsWith("."))continue;let u=Yn(e,d),p;try{p=g0(u)}catch{continue}p.isDirectory()&&lS(t,u,n+1,r,o,s,i,a)}}function y0(t){try{let e=cS(Yn(t,".claude-plugin","plugin.json"),"utf8"),n=JSON.parse(e);if(n!==null&&typeof n=="object"&&"main"in n){let r=n.main;if(typeof r=="string"&&r.trim()!=="")return r}}catch{}}function ba(t,e){let n=y0(e);t.push(n!==void 0?{type:"local",path:e,main:n}:{type:"local",path:e})}function b0(t){if(t.layout!=="cache")return t.key;let e=t.key.indexOf(":");if(e<=0)return t.key;let n=t.key.slice(0,e);return`${t.key.slice(e+1)}@${n}`}function pu(t,e){if(!e.startsWith(t))return null;let n=e.slice(t.length).replace(/^\/+/,"");if(!n)return null;let r=n.split("/").filter(s=>s.length>0);if(r.length===0)return null;if(r[0]===aS&&r.length>=3){let s=r[1];if(s){let i=Yn(t,aS,s),c=w0(i,e)??r[2];if(c)return{layout:"cache",key:`${s}:${c}`}}}let o=r[0];return o?{layout:"flat",key:o}:null}function w0(t,e){let n=Yn(t,".claude-plugin","marketplace.json");if(!uu(n))return null;let r;try{r=JSON.parse(cS(n,"utf8"))}catch{return null}if(!r||typeof r!="object")return null;let o=r.plugins;if(!Array.isArray(o))return null;let s=iS(e);for(let i of o){if(!i||typeof i!="object")continue;let a=i;if(!(typeof a.name!="string"||typeof a.source!="string")&&!(!a.source.startsWith("./")&&!a.source.startsWith("../"))&&iS(t,a.source)===s)return a.name}return null}var h0,aS,no,fu=y(()=>{"use strict";W();sS();h0=5,aS="cache"});import{existsSync as Dt,readdirSync as S0,readFileSync as v0}from"fs";import{join as ft}from"path";function uS(t=ie()){let e=[],n=ft(t,"skills");if(Dt(n))for(let r of wa(n)){let o=ft(n,r,"SKILL.md");Dt(o)&&e.push({path:o,type:"skill",source:"user"})}for(let r of dS){let o=ft(t,`${r}s`);if(Dt(o))for(let s of wa(o))s.endsWith(".md")&&e.push({path:ft(o,s),type:r,source:"user"})}return e}function pS(t=gt()){if(!Dt(t))return[];let e=[],n=ln(t);for(let r of n){let s=pu(t,r.path)?.key,i=ft(r.path,"skills");if(Dt(i))for(let a of wa(i)){let c=ft(i,a,"SKILL.md");if(!Dt(c))continue;let l={path:c,type:"skill",source:"plugin"};s&&(l.plugin_key=s),e.push(l)}for(let a of dS){let c=ft(r.path,`${a}s`);if(Dt(c))for(let l of wa(c)){if(!l.endsWith(".md"))continue;let d={path:ft(c,l),type:a,source:"plugin"};s&&(d.plugin_key=s),e.push(d)}}}return e}function fS(t=ft(ie(),"settings.json")){if(!Dt(t))return[];try{let e=v0(t,"utf8"),r=JSON.parse(e).hooks;if(!r||typeof r!="object")return[];let o=[];for(let[s,i]of Object.entries(r))if(Array.isArray(i))for(let a=0;a<i.length;a++)o.push({event:s,index:a,raw:i[a]});return o}catch{return[]}}function wa(t){try{return S0(t).filter(e=>!e.startsWith("."))}catch{return[]}}var dS,mS=y(()=>{"use strict";W();fu();dS=["command","agent"]});import{z as ee}from"zod";import{mkdir as gS,appendFile as hS}from"fs/promises";import{join as mu}from"path";function E0(t){return{runUserDiscovery:t!=="plugin",runPluginDiscovery:t!=="user",runHookInspector:t!=="plugin"}}function A0(t){let e=()=>{let s={};for(let i of wS)s[i]={correct:0,misfit:0,outlier:0};return s},n={user:e(),plugin:e()};for(let s of t)n[s.source][s.type][s.verdict]+=1;let r={high:0,med:1,low:2},o=t.filter(s=>s.verdict==="misfit").slice().sort((s,i)=>r[s.confidence]-r[i.confidence]);return{inventory:n,misfits:o}}function T0(t){return t.verdict==="misfit"&&t.confidence==="high"&&t.source==="user"}function x0(t){let e=t.filter(o=>o.source==="user"),n=t.filter(o=>o.source==="plugin"),r=["","## Discovered artifacts (audit only these)",""];if(r.push('### User-scope artifacts (set `"source": "user"`, omit `plugin_key`)'),e.length===0)r.push("(none discovered)");else for(let o of e)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 s=o.plugin_key??"<unknown>";r.push(`- ${o.path} (plugin_key: ${s})`)}return r.join(`
|
|
1033
|
+
${m.partialOutput}`},p):(p={content:m.error?.message??l,isError:!0},p)}catch(f){let m=f instanceof Error?f.message:String(f);return{content:`${d}: ${m}`,isError:!0}}finally{u&&await u.teardown({deferInjectContextToCaller:!0}).catch(B);let f=u?.getLastStopInjectContext?.();ra(p,f),await r?.teardownAll(),await n.teardownAll()}}var Vw=y(()=>{"use strict";ce();be();Vd();pt();oa();ke();Yt();Pe();oe();Kw();qd()});function s0(t){if(typeof t!="object"||t===null)return;let e=t.name;if(typeof e!="string")return;let n=e.trim();return n.length>0?n:void 0}function i0(t){if(typeof t!="object"||t===null)throw new Error("Skill tool input must be an object");let e=t,n=e.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=e.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 Vn,lu=y(()=>{"use strict";qe();Pt();pt();sw();Je();aw();dw();Gd();qd();Vw();Vn=class{constructor(e){this.ctx=e;this.currentCwd=e.cwd}ctx;pluginBodies=null;currentCwd;setCwd(e){this.currentCwd=e,this.pluginBodies=null}internals(){return{ctx:this.ctx,currentCwd:this.currentCwd}}async execute(e){if(e.signal.aborted)return{content:"Skill tool call aborted",isError:!0};let n=this.ctx.depth??0,r=this.ctx.maxDepth??cn;if(n>=r){let l=s0(e.input);return ne({...Wn(this.ctx),event:"delegation.skipped",parent_session_id:this.ctx.parentSession.sessionId,reason:"max_depth",depth:n,requested_name:l}).catch(()=>{}),{content:ow(n,r),isError:!0}}let o;try{o=i0(e.input)}catch(l){return{content:`Skill tool input validation failed: ${l instanceof Error?l.message:String(l)}`,isError:!0}}let s;try{s=st(o.name)}catch{}if(s)return await this.executeRegistrySkill(s,o.arguments,e);let i=this.getPluginSkillBody(o.name);if(i){if(i.context==="fork"){let d=i.readOnly===!0||ma.has(o.name);return await zw(this.internals(),o.name,i.body,i.pluginPath,o.arguments,e,d,i.allowedTools,i.model)}let l=i.body.replace(/\$\{PLUGIN_ROOT(?::-(?:[^{}]|\$\{[^{}]*\})*)?\}|\$PLUGIN_ROOT\b/g,()=>i.pluginPath);return gw(this.internals(),o.name,l,o.arguments,e)}let c=eo(this.ctx.pluginConfigs,this.currentCwd!==void 0?{cwd:this.currentCwd}:void 0).map(l=>l.name).join(", ");return{content:`Skill "${o.name}" not found. Available skills: ${c||"(none)"}`,isError:!0}}async executeRegistrySkill(e,n,r){if(r.signal.aborted)return{content:"Skill call aborted",isError:!0};if(e.context==="fork")return qw(this.internals(),e,n,r);if(e.context==="load")return mw(this.internals(),e,n,r);let o=iw(e.name);o&&lw(e.name);let s=this.ctx.depth??0;ne({...Wn(this.ctx),event:"skill.dispatched",requested_name:e.name,parent_session_id:this.ctx.parentSession.sessionId,depth:s,...ea(e.name)?{is_gate:!0}:{},...e.model!==void 0?{model:e.model}:{}}).catch(()=>{});let i=Date.now(),a,c;try{c=await e.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}:{}})}catch(d){a=d}finally{let d=Date.now()-i;o&&cw({skillName:e.name,durationMs:d,...a!==void 0?{isError:!0}:{}});let u=a!==void 0?a instanceof Error?a.message:String(a):void 0,p=a===void 0?typeof c=="string"?c.length:c!=null?JSON.stringify(c).length:0:void 0;ne({...Wn(this.ctx),event:"skill.completed",requested_name:e.name,parent_session_id:this.ctx.parentSession.sessionId,status:a!==void 0?"failed":"succeeded",duration_ms:d,depth:s,...p!==void 0?{content_chars:p}:{},...u!==void 0?{error_message:uw(u)}:{},...e.model!==void 0?{model:e.model}:{}}).catch(()=>{})}return a!==void 0?{content:`Skill execution error: ${a instanceof Error?a.message:String(a)}`,isError:!0}:{content:typeof c=="string"?c:c!=null?JSON.stringify(c):"Skill completed successfully."}}getPluginSkillBody(e){return this.pluginBodies||(this.pluginBodies=to(this.ctx.pluginConfigs,this.currentCwd!==void 0?{cwd:this.currentCwd}:void 0)),this.pluginBodies.get(e)}createDispatchSkillCallback(e){return async(n,r)=>{let o={id:`${e.id}-dispatch-${n}`,name:"skill",input:{name:n,...r!==void 0?{arguments:r}:{}},signal:e.signal},s=await this.execute(o);if(s.isError)throw new Error(s.content);return s.content}}}});function Zr(t){return{sessionId:void 0,getInputStreamRef:()=>({pushUserMessage:()=>{}}),abortSignal:t}}function Yw(t={}){return({childExecutor:e,childSkillExecutor:n,model:r,allowedTools:o,readOnlyBash:s})=>{let i={permissions:{allowedTools:o??da},subagentExecutor:e,...n!==void 0?{skillExecutor:n}:{},...s===!0?{readOnlyBash:!0}:{}};return q(typeof r=="string"?r:void 0)==="openai-compatible"?new ye({...i,...t.openaiBaseUrl!==void 0?{baseURL:t.openaiBaseUrl}:{},readOnlyMemory:!0}):new we({...i,readOnlyMemory:!0})}}function Gw(t,e,n){let r={allowedTools:[...n??fa]};return q(typeof t=="string"?t:void 0)==="openai-compatible"?new ye({permissions:r,readOnlyBash:!0,readOnlyMemory:!0,...e!==void 0?{baseURL:e}:{}}):new we({permissions:r,readOnlyBash:!0,readOnlyMemory:!0})}function Xw(t,e,n,r,o,s,i,a,c,l,d,u){let p=(f,m,g,b)=>{let S=b??i;return new Vn({parentSession:Zr(g),defaultModel:t,...l!==void 0?{defaultSubagentModel:l}:{},apiKey:e,...r!==void 0?{baseUrl:r}:{},...u!==void 0?{openaiBaseUrl:u}:{},depth:f,maxDepth:m,childProviderFactory:n,childSkillExecutorFactory:p,...o!==void 0?{traceWriter:o}:{},...s!==void 0?{backgroundRegistry:s}:{},...S!==void 0?{cwd:S}:{},...a!==void 0?{resolveApiKeyForModel:a}:{},...c!==void 0?{surface:c}:{},...d!==void 0?{agentRegistry:d}:{}})};return p}function ua(t,e,n=!1,r){let o={allowedTools:[...t]};return q(typeof e=="string"?e:void 0)==="openai-compatible"?new ye({permissions:o,...n?{readOnlyBash:!0}:{},...r!==void 0?{baseURL:r}:{}}):new we({permissions:o,...n?{readOnlyBash:!0}:{}})}function Qw(t,e){let n={allowedTools:[...rw]};return q(typeof e=="string"?e:void 0)==="openai-compatible"?new ye({permissions:n}):new we({permissions:n})}var cn,da,fa,ma,pt=y(()=>{"use strict";ga();Jr();ge();$e();Ue();Zi();lu();cn=3;da=[...Ne,...me,"memory_search","agent","skill"],fa=["read_file","glob","grep","list_directory","config_get","bash","web_scrape",...me,"memory_search","agent","skill"],ma=new Set(["ground-state"])});var ha,Zw=y(()=>{"use strict";oe();ol();Yt();js();X();be();ha=class{constructor(e,n,r,o,s,i,a,c,l,d,u,p,f,m,g){this.id=e;this.session=n;this.controller=r;this.abortGraph=o;this.outputSchema=s;this.timeoutMs=i;this.hookRegistry=a;this.onTerminal=c;this.parentInputStreamRef=l;this.parentAbortSignal=d;this.agentType=u;this.traceWriter=m;this.onSubagentSucceeded=g;this.progressSink=p,this.parentId=f}id;session;controller;abortGraph;outputSchema;timeoutMs;hookRegistry;onTerminal;parentInputStreamRef;parentAbortSignal;agentType;traceWriter;onSubagentSucceeded;currentStatus="idle";inFlight=null;lastMessage;lastDurationMs;latestTerminalStatus;stopDispatched=!1;lastStopInjectContext;progressSink;parentId;currentTrace=na();lastStreamedContent="";lastStopReason;get status(){return this.currentStatus}async run(e,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=Cs(this.streamToFinalMessage(e,n),this.timeoutMs,{controller:this.controller,label:this.id});this.inFlight=o;try{let s=await o;this.lastMessage=s.content,this.lastDurationMs=Date.now()-r,this.currentStatus="succeeded",this.latestTerminalStatus="succeeded",await Ht(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 i=typeof s.metadata?.totalCostUsd=="number"?s.metadata.totalCostUsd:void 0;return this.onSubagentSucceeded?.(this.currentTrace.usage,i),this.onTerminal(),s}catch(s){throw this.lastDurationMs=Date.now()-r,this.currentStatus!=="cancelled"&&(this.controller.signal.aborted?(await Ht(this.traceWriter,{transition:"cancelled",subagentId:this.id,source:"cascade"}),this.currentStatus="cancelled",this.latestTerminalStatus="cancelled"):(await Ht(this.traceWriter,{transition:"failed",subagentId:this.id,errorClass:s instanceof Error?s.constructor.name:"Unknown",errorMessage:s instanceof Error?s.message:String(s),partialOutputBytes:Buffer.byteLength(this.lastStreamedContent,"utf8")}),this.currentStatus="failed",this.latestTerminalStatus="failed")),this.onTerminal(),s}finally{this.inFlight=null}}async streamToFinalMessage(e,n){let r,o;this.lastStreamedContent="",this.currentTrace=na();let s=n??this.progressSink??Ce(),i={subagentId:this.id,...this.parentId!==void 0&&{parentId:this.parentId},...this.agentType!==void 0&&{agentType:this.agentType}};for await(let a of this.session.sendMessageStream(e)){if(s&&s(a,i),a.type==="chunk"){let c=a.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(a.type==="message")r=a.message,this.currentTrace.turnCount++;else if(a.type==="error"){o=a.error;break}else if(a.type==="done"){if(typeof a.metadata?.stopReason=="string"&&(this.lastStopReason=a.metadata.stopReason),typeof a.metadata?.usage=="object"&&a.metadata.usage!==null){let c=a.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}}if(o)throw o;if(r)return r;if(this.lastStreamedContent.length>0)return this.lastStopReason??=zd,{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 new Error(`Subagent ${this.id} produced no terminal message`)}async runToResult(e,n){try{let r=await this.run(e,n);return Sw(this.id,this.currentStatus,r,this.outputSchema,this.currentTrace,this.lastStopReason)}catch(r){let o=Jd(this.id,this.currentStatus,r,this.currentTrace,this.lastStopReason);return this.lastStreamedContent.length>0&&(o.partialOutput=this.lastStreamedContent),o}}runInBackground(e,n,r){let o;if(r){let s=this.progressSink??Ce();o=(i,a)=>{r(i),s?.(i,a)}}this.runToResult(e,o).then(s=>{n?.(s)}).catch(s=>{B("runInBackground: unexpected rejection after runToResult",s),console.error("Subagent runInBackground failed unexpectedly:",s)})}async cancel(){if(this.currentStatus==="cancelled"||this.stopDispatched)return;let e=this.latestTerminalStatus??"cancelled";this.currentStatus="cancelled",Ht(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(e)}}async teardown(e){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,e)}}getLastStopInjectContext(){return this.lastStopInjectContext}async dispatchStopAndRelease(e,n){if(this.stopDispatched){this.onTerminal();return}this.stopDispatched=!0;let r=await hg(this.hookRegistry,{event:"SubagentStop",subagentId:this.id,status:e,lastMessage:this.lastMessage,agentType:this.agentType,durationMs:this.lastDurationMs,trace:this.currentTrace},this.traceWriter?{traceWriter:this.traceWriter}:{});if(r.injectContext){if(this.parentAbortSignal?.aborted)B(`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){B(`Failed to inject context from SubagentStop handler: ${String(o)}`)}}this.onTerminal()}}});var a0,c0,l0,Ww,G,ce=y(()=>{"use strict";Am();ll();js();X();Je();Yt();gl();Eg();hl();pt();oa();ge();Zw();a0=async(t,e)=>({action:"decline"}),c0=50,l0=20*6e4,Ww=60*6e4,G=class{active=new Map;parentCanUseTool;hookRegistry;progressSink;parentApiKey;parentBaseUrl;parentProvider;parentCwd;parentReadRoots;worktreeMainRootCache=new Map;parentTraceWriter;parentSurface;abortGraph;rootId;rootController;counter=0;onSubagentSucceededCb;constructor(e={}){if(this.parentCanUseTool=e.canUseTool,this.hookRegistry=e.hookRegistry,this.progressSink=e.progressSink,this.parentApiKey=e.apiKey,this.parentBaseUrl=e.baseUrl,this.parentProvider=e.parentModel!==void 0?q(e.parentModel):void 0,this.parentCwd=e.cwd,this.parentReadRoots=e.parentReadRoots,this.parentTraceWriter=e.traceWriter,this.parentSurface=e.surface,this.onSubagentSucceededCb=e.onSubagentSucceeded,this.abortGraph=new xs(e.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),e.parentAbortSignal){let n=e.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(e=>({id:e.id,status:e.status}))}get(e){return this.active.get(e)}onChildAborted(e){return this.abortGraph.onChildAborted(this.rootId,e)}setOnSubagentSucceeded(e){this.onSubagentSucceededCb=e}setCwd(e){this.parentCwd=e,this.worktreeMainRootCache.delete(e)}getReadScopeInputs(){return{parentReadRoots:this.parentReadRoots,parentCwd:this.parentCwd}}async resolveMainRootForCwd(e){if(this.worktreeMainRootCache.has(e))return this.worktreeMainRootCache.get(e);let n=await _g(e);return this.worktreeMainRootCache.set(e,n),n}abortAll(e,n="user_signal"){this.abortGraph.abort(this.rootId,e,n)}async forkSubagent(e){if(e.phaseRole!==void 0&&e.phaseRole!=="read-write"&&e.config.provider!==void 0)throw new Error(`SubagentManager.forkSubagent: phaseRole "${e.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=`${e.idPrefix??"subagent"}-${Date.now()}-${++this.counter}`,r=e.parent.sessionId,o=e.config.hookRegistry??this.hookRegistry??e.parent.hookRegistry,s=e.config.traceWriter??this.parentTraceWriter;o&&await gg(o,{event:"SubagentStart",subagentId:n,parentSessionId:e.parent.sessionId},{signal:this.rootController.signal,...s?{traceWriter:s}:{}});let i=new AbortController;this.abortGraph.register(n,i),this.abortGraph.linkChild(this.rootId,n);let a=e.config.cwd??this.parentCwd,c;if(e.config.readRoots===void 0){let w=!(this.parentReadRoots===void 0&&this.parentCwd===void 0)&&a!==void 0?await this.resolveMainRootForCwd(a):void 0;c=Hs({parentReadRoots:this.parentReadRoots,parentCwd:this.parentCwd,childCwd:a,worktreeMainRoot:w})}let l;if(e.config.writeRoots!==void 0&&e.config.writeRoots.length>0){let E=a!==void 0?[a]:[];l=[...new Set([...E,...e.config.writeRoots])]}let d={...e.config,resume:r,forkSession:r?!0:e.config.forkSession,abortSignal:i.signal,apiKey:_w({childModel:e.config.model,configApiKey:e.config.apiKey,parentApiKey:this.parentApiKey,parentProvider:this.parentProvider}),baseUrl:e.config.baseUrl??(q(e.config.model)==="openai-compatible"?void 0:this.parentBaseUrl),isNonInteractive:e.config.isNonInteractive??!0,maxToolUseIterations:e.config.maxToolUseIterations??c0,autoResumeOnUsageLimit:e.config.autoResumeOnUsageLimit??!1,...e.config.parentSessionId===void 0&&e.parent.sessionId!==void 0?{parentSessionId:e.parent.sessionId}:{},...e.config.phaseRole===void 0&&e.phaseRole!==void 0?{phaseRole:e.phaseRole}:{},...e.config.cwd===void 0&&this.parentCwd!==void 0?{cwd:this.parentCwd}:{},...c!==void 0?{readRoots:c}:{},...l!==void 0?{writeRoots:l}:{},...e.config.traceWriter===void 0&&this.parentTraceWriter!==void 0?{traceWriter:this.parentTraceWriter}:{},...e.config.surface===void 0&&this.parentSurface!==void 0?{surface:this.parentSurface}:{},hookRegistry:o,permissionBubbler:e.config.permissionBubbler??(this.parentCanUseTool!==void 0&&e.config.canUseTool===void 0?{canUseTool:this.parentCanUseTool}:void 0),...e.denyElicitations===!1?{}:{onElicitation:a0},...e.phaseRole==="read-only"?{provider:Qw("read-only",e.config.model)}:{}};d.cwd!==void 0&&kg(d.cwd);let u;try{u=new zt(d)}catch(E){throw this.abortGraph.dispose(n),E}let p=e.parent.getInputStreamRef?.(),f=e.parent.abortSignal,m=this.progressSink??Ce(),g=e.agentType?.trim()||void 0,b=e.parentId?.trim()||void 0,S=new ha(n,u,i,this.abortGraph,e.outputSchema,e.config.timeoutMs??l0,o,()=>{this.active.delete(n),this.abortGraph.dispose(n)},p,f,g??e.idPrefix,m,b??e.parent.sessionId,s,this.onSubagentSucceededCb);this.active.set(n,S);let v=typeof e.config.model=="string"?e.config.model:JSON.stringify(e.config.model);return Ht(s,{transition:"started",subagentId:n,parentId:e.parent.sessionId??this.rootId,model:v,...d.tools?.allowedTools?{allowedTools:[...d.tools.allowedTools]}:{}}),await ne({event:"subagent.dispatched",subagent_id:n,id_prefix:e.idPrefix,model:v,parent_session_id:e.parent.sessionId}),S}async kill(e){let n=this.active.get(e);return n?(await n.cancel(),!0):!1}async killAll(){await Promise.allSettled([...this.active.values()].map(e=>e.cancel()))}async teardownAll(){await Promise.allSettled([...this.active.values()].map(e=>e.teardown()))}}});async function eS(t,e={}){let{failFast:n=!0,teardown:r=!0,maxConcurrency:o=8}=e;if(t.length===0)return[];let s=new Array(t.length),i=new Set(t.map((c,l)=>l)),a=!1;return await Mn(t.map((c,l)=>l),o,async c=>{let l=t[c];n&&a&&await l.handle.cancel().catch(()=>{});let d=await l.handle.runToResult(l.prompt);if(s[c]=d,i.delete(c),n&&d.status!=="succeeded"){a=!0;for(let u of i){let p=t[u];p&&p.handle.status==="running"&&p.handle.cancel().catch(()=>{})}}}),r&&await Promise.allSettled(t.map(c=>c.handle.teardown())),s}var tS=y(()=>{"use strict";Js()});function nS(t){let e=new Set;for(let n of t){let r=Yr(n,d0);r!==void 0&&e.add(r)}return e}var d0,rS=y(()=>{"use strict";Xr();$e();Zs();d0=new Set([...Ne,...me,"memory_search","agent","skill"])});import{existsSync as u0,mkdirSync as mX,readFileSync as p0,renameSync as gX,writeFileSync as hX,unlinkSync as yX}from"fs";function oS(t=Do()){if(!u0(t))return ya();try{let e=p0(t,"utf8"),n=JSON.parse(e);if(!n||typeof n!="object")return ya();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 s=r.marketplaces&&typeof r.marketplaces=="object"?r.marketplaces:{};return{version:2,plugins:o,marketplaces:s}}return ya()}catch{return ya()}}function ya(){return{version:2,plugins:{},marketplaces:{}}}var sS=y(()=>{"use strict";W()});import{existsSync as uu,readFileSync as cS,readdirSync as f0,realpathSync as m0,statSync as g0}from"fs";import{join as Yn,resolve as iS}from"path";function ln(t=gt(),e={}){let n=e.trustAll===!0,r=e.sourceEnabled,o=n?`${t}\0trustAll`:t;if(n&&r&&r.size>0){let l=[...r.entries()].map(([d,u])=>`${d}=${u?1:0}`).sort().join(",");o=`${o}\0${l}`}no||(no=new Map);let s=no.get(o);if(s)return[...s];if(!uu(t))return no.set(o,[]),[];let i=t===gt()?Do():Yn(t,".index.json"),a=oS(i),c=[];return lS(t,t,0,c,new Set,a.plugins,n,r),no.set(o,c),[...c]}function lS(t,e,n,r,o,s,i,a){if(n>h0)return;let c;try{c=m0(e)}catch{c=e}if(o.has(c))return;if(o.add(c),uu(Yn(e,".claude-plugin","plugin.json"))){let d=pu(t,e);if(d===null){ba(r,e);return}if(i){if(a&&a.get(b0(d))===!1)return;ba(r,e);return}if(d.layout==="cache"){let p=s[d.key];if(!p||p.enabled===!1)return;ba(r,e);return}let u=s[d.key];if(u&&u.enabled===!1)return;ba(r,e);return}let l;try{l=f0(e)}catch{return}for(let d of l){if(d.startsWith("."))continue;let u=Yn(e,d),p;try{p=g0(u)}catch{continue}p.isDirectory()&&lS(t,u,n+1,r,o,s,i,a)}}function y0(t){try{let e=cS(Yn(t,".claude-plugin","plugin.json"),"utf8"),n=JSON.parse(e);if(n!==null&&typeof n=="object"&&"main"in n){let r=n.main;if(typeof r=="string"&&r.trim()!=="")return r}}catch{}}function ba(t,e){let n=y0(e);t.push(n!==void 0?{type:"local",path:e,main:n}:{type:"local",path:e})}function b0(t){if(t.layout!=="cache")return t.key;let e=t.key.indexOf(":");if(e<=0)return t.key;let n=t.key.slice(0,e);return`${t.key.slice(e+1)}@${n}`}function pu(t,e){if(!e.startsWith(t))return null;let n=e.slice(t.length).replace(/^\/+/,"");if(!n)return null;let r=n.split("/").filter(s=>s.length>0);if(r.length===0)return null;if(r[0]===aS&&r.length>=3){let s=r[1];if(s){let i=Yn(t,aS,s),c=w0(i,e)??r[2];if(c)return{layout:"cache",key:`${s}:${c}`}}}let o=r[0];return o?{layout:"flat",key:o}:null}function w0(t,e){let n=Yn(t,".claude-plugin","marketplace.json");if(!uu(n))return null;let r;try{r=JSON.parse(cS(n,"utf8"))}catch{return null}if(!r||typeof r!="object")return null;let o=r.plugins;if(!Array.isArray(o))return null;let s=iS(e);for(let i of o){if(!i||typeof i!="object")continue;let a=i;if(!(typeof a.name!="string"||typeof a.source!="string")&&!(!a.source.startsWith("./")&&!a.source.startsWith("../"))&&iS(t,a.source)===s)return a.name}return null}var h0,aS,no,fu=y(()=>{"use strict";W();sS();h0=5,aS="cache"});import{existsSync as Dt,readdirSync as S0,readFileSync as v0}from"fs";import{join as ft}from"path";function uS(t=ie()){let e=[],n=ft(t,"skills");if(Dt(n))for(let r of wa(n)){let o=ft(n,r,"SKILL.md");Dt(o)&&e.push({path:o,type:"skill",source:"user"})}for(let r of dS){let o=ft(t,`${r}s`);if(Dt(o))for(let s of wa(o))s.endsWith(".md")&&e.push({path:ft(o,s),type:r,source:"user"})}return e}function pS(t=gt()){if(!Dt(t))return[];let e=[],n=ln(t);for(let r of n){let s=pu(t,r.path)?.key,i=ft(r.path,"skills");if(Dt(i))for(let a of wa(i)){let c=ft(i,a,"SKILL.md");if(!Dt(c))continue;let l={path:c,type:"skill",source:"plugin"};s&&(l.plugin_key=s),e.push(l)}for(let a of dS){let c=ft(r.path,`${a}s`);if(Dt(c))for(let l of wa(c)){if(!l.endsWith(".md"))continue;let d={path:ft(c,l),type:a,source:"plugin"};s&&(d.plugin_key=s),e.push(d)}}}return e}function fS(t=ft(ie(),"settings.json")){if(!Dt(t))return[];try{let e=v0(t,"utf8"),r=JSON.parse(e).hooks;if(!r||typeof r!="object")return[];let o=[];for(let[s,i]of Object.entries(r))if(Array.isArray(i))for(let a=0;a<i.length;a++)o.push({event:s,index:a,raw:i[a]});return o}catch{return[]}}function wa(t){try{return S0(t).filter(e=>!e.startsWith("."))}catch{return[]}}var dS,mS=y(()=>{"use strict";W();fu();dS=["command","agent"]});import{z as ee}from"zod";import{mkdir as gS,appendFile as hS}from"fs/promises";import{join as mu}from"path";function E0(t){return{runUserDiscovery:t!=="plugin",runPluginDiscovery:t!=="user",runHookInspector:t!=="plugin"}}function A0(t){let e=()=>{let s={};for(let i of wS)s[i]={correct:0,misfit:0,outlier:0};return s},n={user:e(),plugin:e()};for(let s of t)n[s.source][s.type][s.verdict]+=1;let r={high:0,med:1,low:2},o=t.filter(s=>s.verdict==="misfit").slice().sort((s,i)=>r[s.confidence]-r[i.confidence]);return{inventory:n,misfits:o}}function T0(t){return t.verdict==="misfit"&&t.confidence==="high"&&t.source==="user"}function x0(t){let e=t.filter(o=>o.source==="user"),n=t.filter(o=>o.source==="plugin"),r=["","## Discovered artifacts (audit only these)",""];if(r.push('### User-scope artifacts (set `"source": "user"`, omit `plugin_key`)'),e.length===0)r.push("(none discovered)");else for(let o of e)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 s=o.plugin_key??"<unknown>";r.push(`- ${o.path} (plugin_key: ${s})`)}return r.join(`
|
|
1034
1034
|
`)}function R0(t,e){let n=["","## Discovered hooks (audit only these)",""];if(n.push(`Settings file (use this absolute path verbatim in each verdict's \`path\` field): \`${t}\``),n.push(""),e.length===0)return n.push("(no hooks discovered)"),n.join(`
|
|
1035
1035
|
`);for(let r of e){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(`
|
|
1036
1036
|
`)}function P0(t,e){if(!e)return{kind:"failure",message:`${t}: no result`};if(e.schemaError)return{kind:"failure",message:`${t}: schema mismatch \u2014 ${e.schemaError.message}`};if(e.status!=="succeeded"){let n=e.error?` \u2014 ${e.error.message}`:"";return{kind:"failure",message:`${t}: ${e.status}${n}`}}return e.output?{kind:"success",output:e.output}:{kind:"failure",message:`${t}: no output`}}async function C0(t,e,n){let r=n?.apiKey,o=n?.defaultSubagentModel??n?.defaultModel??"sonnet",s=n?.callId,i=typeof t=="object"&&t!==null?t:{},a=k0.parse(i),c=a.writeBriefs??!0,l=a.scope??"all",d=E0(l);if(!e?.sessionId)throw new Error("audit-fit requires a parent session with sessionId");let u=e.sessionId,p=te("audit-fit"),f={skill:p["01-skill-inspector.md"],command:p["02-command-inspector.md"],agent:p["03-agent-inspector.md"],hook:p["04-hook-inspector.md"]};for(let C of wS)if(!f[C])throw new Error(`audit-fit skill missing inspector prompt for ${C}`);let m=d.runUserDiscovery?uS():[],g=d.runPluginDiscovery?pS():[],b={skill:[],command:[],agent:[]};for(let C of[...m,...g])b[C.type].push(C);let S=new G({apiKey:r,...n?.defaultModel!==void 0?{parentModel:n.defaultModel}:{},...n?.traceWriter!==void 0?{traceWriter:n.traceWriter}:{}}),v=nS(Mt.allowedTools),E=()=>async C=>v.has(C)?{behavior:"allow"}:{behavior:"deny",message:`Tool ${C} not allowed for audit-fit inspectors. Allowed tools: ${[...v].join(", ")}`},w=[];for(let C of _0){let j=b[C];if(j.length===0)continue;let $=f[C];$&&w.push({type:C,prompt:`${$}
|
|
@@ -1287,7 +1287,7 @@ ${e.body}`)}var nD,nv=y(()=>{"use strict";nD=/(?<![a-zA-Z0-9_/-])--([a-z][a-z0-9
|
|
|
1287
1287
|
`),0}let r=0;for(let o of n){if(!o.isDirectory()||o.name.startsWith("_")||o.name.startsWith("."))continue;let s;try{s=sD(rv(t,o.name,"SKILL.md"),"utf-8")}catch(l){let d=l;d.code!=="ENOENT"&&process.stderr.write(`[afk] skipping skill ${o.name}: ${d.message}
|
|
1288
1288
|
`);continue}let i=aD(s,o.name);if(!i)continue;i.dir=rv(t,o.name);let c={name:lD(i.name,e),description:i.description,handler:cD(i),origin:e};i.argumentHint&&(c.argumentHint=i.argumentHint),i.flags&&i.flags.length>0&&(c.flags=i.flags),i.context!=="fork"&&(c.context="load",c.loadBody=i.body.replace(/\$\{?SKILL_ROOT\}?/g,()=>i.dir)),he(c),r++}return r}var ov,ku=y(()=>{"use strict";W();qe();nv();ce();ov=1024});var sv=y(()=>{"use strict";SS();vS();XS();QS();ZS();ku()});import{isAbsolute as dD,resolve as uD}from"path";import{pathToFileURL as pD}from"url";async function av(t,e={}){let n=e.importer??(r=>import(r));for(let r of t){if(r.main===void 0)continue;let o=dD(r.main)?r.main:uD(r.path,r.main);if(!iv.has(o)){iv.add(o);try{let i=(await n(pD(o).href))?.default;typeof i=="function"&&await i(e.pluginApi)}catch(s){e.onError?.(r,s)}}}}var iv,cv=y(()=>{"use strict";iv=new Set});import{existsSync as fD,readFileSync as mD}from"fs";import{join as gD}from"path";function lv(t){let e=gD(t,".claude-plugin","plugin.json");if(!fD(e))return{name:null,version:null};try{let n=JSON.parse(mD(e,"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 dv=y(()=>{"use strict"});import{z as O}from"zod";var so,hD,yD,_u,uv,pv,fv,mv,io,ka=y(()=>{"use strict";so=1,hD=O.object({toolName:O.string(),toolUseId:O.string().optional(),input:O.string().optional(),inputRaw:O.string().optional(),result:O.string().optional(),isError:O.boolean().optional()}).passthrough(),yD=O.object({user:O.string().default(""),assistant:O.string().default(""),timestamp:O.number().optional(),toolEvents:O.array(hD).optional()}).passthrough(),_u=O.object({sessionId:O.string().optional(),name:O.string().optional(),source:O.enum(["cli","telegram"]).optional(),telegramChatId:O.number().optional(),model:O.string(),startedAt:O.number(),savedAt:O.number(),totalTurns:O.number(),totalCostUsd:O.number().optional(),totalTokens:O.number().optional(),totalDurationMs:O.number().optional(),turns:O.array(yD).default([]),forkedFrom:O.string().optional(),forkedAt:O.number().optional()}).passthrough(),uv=O.enum(["fully_achieved","partially_achieved","not_achieved","aborted"]),pv=O.enum(["not_persisted","persisted","unknown"]),fv=O.object({tool:O.string(),label:O.string().optional()}),mv=O.object({files_written:O.number().int(),files_edited:O.number().int(),bash_commands:O.number().int(),commits:O.number().int(),mutated:O.boolean()}),io=O.object({facet_version:O.number().int(),session_id:O.string(),source:O.enum(["cli","telegram","unknown"]),model:O.string(),derived_at:O.string(),derived_from:O.literal("afk-session"),source_session_path:O.string(),source_session_mtime_ms:O.number(),subagent_persistence:pv,start_time:O.string(),end_time:O.string(),duration_minutes:O.number(),underlying_goal:O.string(),first_prompt:O.string(),goal_categories:O.record(O.string(),O.number()),session_type:O.string(),brief_summary:O.string(),total_turns:O.number().int(),user_message_count:O.number().int(),assistant_message_count:O.number().int(),tool_counts:O.record(O.string(),O.number()),commands:O.array(O.string()),skills:O.array(O.string()),subagents:O.array(fv),tool_errors:O.number().int(),tool_error_categories:O.record(O.string(),O.number()),friction_counts:O.record(O.string(),O.number()),friction_detail:O.string(),outcome:uv,primary_success:O.string(),world_changes:mv,decisions:O.array(O.string()),evidence_pointers:O.array(O.string())}).passthrough()});import{basename as bD}from"path";function ED(t){if(t)try{let e=JSON.parse(t);return e&&typeof e=="object"?e:void 0}catch{return}}function _a(t){return typeof t=="string"?t:void 0}function Ea(t,e){let n=t.replace(/\s+/g," ").trim();return n.length>e?`${n.slice(0,e-1)}\u2026`:n}function AD(t){return t.replace(/[-_]+/g," ").trim()}function TD(t,e){return hv.test(t)?"slash_command":e==="telegram"?"chat":"task"}function xD(t){let e=new Map,n=[];for(let r of t)r.toolUseId===void 0?n.push(r):e.set(r.toolUseId,r);return[...e.values(),...n]}function ao(t,e={}){let n=t.turns??[],r=xD(n.flatMap($=>$.toolEvents??[])),o={},s={},i=[],a=[],c=[],l=0,d=0,u=0,p=0,f=0;for(let $ of r){let P=$.toolName;o[P]=(o[P]??0)+1,$.isError===!0&&(l+=1,s[P]=(s[P]??0)+1);let F=ED($.inputRaw??$.input);if(P==="write_file"&&(d+=1),P==="edit_file"&&(u+=1),P==="bash"){p+=1;let D=_a(F?.command)??$.input;D&&_D.test(D)&&(f+=1)}if(SD.has(P)){let D=_a(F?.file_path);D&&!c.includes(D)&&c.length<kD&&c.push(D)}if(wD.has(P)){let D;P==="skill"?(D=_a(F?.name),D&&!a.includes(D)&&a.push(D)):P==="agent"?D=_a(F?.id_prefix):D="compose",i.push(D?{tool:P,label:D}:{tool:P})}}let m=n[0]?.user??"",g=t.source??"cli",b=TD(m,g),S=[];for(let $ of n){let F=hv.exec($.user??"")?.[1];F&&!S.includes(F)&&S.push(F)}let v=n.filter($=>($.user??"").trim().length>0).length,E=n.filter($=>($.assistant??"").trim().length>0).length,w=[...n].reverse().find($=>($.assistant??"").trim().length>0)?.assistant??"",R;n.length===0?R="aborted":w.trim().length===0?R="partially_achieved":R="fully_achieved";let k=R==="fully_achieved"||R==="partially_achieved"?Ea(w||m||b,160)||b:"none",T=l>0?`${l} tool error(s): ${Object.entries(s).map(([$,P])=>`${$}\xD7${P}`).join(", ")}`:"",M=t.name?AD(t.name):Ea(m,80),I=Ea(w||m,vD),x=Ea(M?`${M} \u2014 ${I}`:I,400)||"empty session",N=t.sessionId??(e.sourceSessionPath?bD(e.sourceSessionPath,".json"):"unknown"),U=t.totalDurationMs&&t.totalDurationMs>0?t.totalDurationMs:Math.max(0,t.savedAt-t.startedAt),C=e.sourceSessionPath?[...c,e.sourceSessionPath]:c,j={facet_version:so,session_id:N,source:g==="telegram"?"telegram":"cli",model:t.model,derived_at:(e.derivedAt??new Date).toISOString(),derived_from:"afk-session",source_session_path:e.sourceSessionPath??"",source_session_mtime_ms:e.sourceSessionMtimeMs??t.savedAt,subagent_persistence:"not_persisted",start_time:new Date(t.startedAt).toISOString(),end_time:new Date(t.savedAt).toISOString(),duration_minutes:Number((U/6e4).toFixed(2)),underlying_goal:m.slice(0,gv),first_prompt:m.slice(0,gv),goal_categories:{[b]:1},session_type:b,brief_summary:x,total_turns:n.length,user_message_count:v,assistant_message_count:E,tool_counts:o,commands:S,skills:a,subagents:i,tool_errors:l,tool_error_categories:s,friction_counts:{...s},friction_detail:T,outcome:R,primary_success:k,world_changes:{files_written:d,files_edited:u,bash_commands:p,commits:f,mutated:d>0||u>0||f>0},decisions:[],evidence_pointers:C};return io.parse(j)}var wD,SD,gv,vD,kD,_D,hv,Eu=y(()=>{"use strict";ka();wD=new Set(["agent","compose","skill"]),SD=new Set(["read_file","write_file","edit_file"]),gv=1e3,vD=240,kD=50,_D=/\bgit\s+commit(?![\w-])/,hv=/^\s*\/([a-zA-Z][\w-]*)/});import{existsSync as Aa,mkdirSync as RD,readFileSync as yv,readdirSync as PD,renameSync as CD,statSync as ID,writeFileSync as MD}from"fs";import{basename as OD,dirname as DD,join as bv}from"path";function wv(t,e){return $o(t),bv(e,`${t}.json`)}function FD(t,e){return $o(t),bv(e,`${t}.json`)}function Ta(t,e=fe()){let n=wv(t,e);if(Aa(n))try{let r=JSON.parse(yv(n,"utf8")),o=_u.safeParse(r);return o.success?o.data:void 0}catch{return}}function LD(t){if(Aa(t))try{let e=JSON.parse(yv(t,"utf8")),n=io.safeParse(e);return n.success?n.data:void 0}catch{return}}function ND(t,e){RD(DD(t),{recursive:!0});let n=`${t}.${process.pid}.tmp`;MD(n,`${JSON.stringify(e,null,2)}
|
|
1289
1289
|
`,"utf8"),CD(n,t)}function $D(t,e){return t.facet_version===so&&t.source_session_mtime_ms===e}function Au(t,e={}){let n=e.sessionsDir??fe(),r=e.cacheDir??vp(),o=wv(t,n);if(!Aa(o))return;let s=ID(o).mtimeMs,i=FD(t,r);if(!e.force){let l=LD(i);if(l&&$D(l,s))return l}let a=Ta(t,n);if(!a)return;let c=ao(a,{sourceSessionPath:o,sourceSessionMtimeMs:s});return ND(i,c),c}function Tu(t={}){let e=t.sessionsDir??fe();return Aa(e)?PD(e).filter(n=>n.endsWith(".json")).map(n=>OD(n,".json")):[]}var Sv=y(()=>{"use strict";W();Eu();ka()});var vv=y(()=>{"use strict";ka();Eu();Sv()});import{readFileSync as UD}from"node:fs";import{join as BD}from"node:path";function Xi(t,e){let n=eo(t,e);if(n.length===0)return"";let r=[];for(let o of n){let s=o.argumentHint?`${o.argumentHint}`:"",i=s?`- \`${o.name} ${s}\`: ${o.description}`:`- ${o.name}: ${o.description}`;r.push(i),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(`
|
|
1290
|
-
`)}function eo(t,e){let n=[],r=new Set,o=A.AFK_INTERNAL==="1",s=vr(Sr());oo(Oo(),"user"),Em("project"),oo(_p(e?.cwd),"project");for(let{dir:a,origin:c}of s.skillRoots)oo(a,c);for(let a of el()){let c=st(a);Zc(c,o)&&(n.push({name:a,description:c.description,source:c.origin==="user"?"user":c.origin==="project"?"project":c.origin?.startsWith("imported:")?"imported":"builtin",argumentHint:c.argumentHint,whenToUse:c.whenToUse}),r.add(a))}let i=t??xa(e);for(let a of i){if(a.type!=="local")continue;let c=Yd(a.path);for(let l of c)!l.name||r.has(l.name)||Zc({audience:l.audience},o)&&(n.push({name:l.name,description:l.description??`Skill from plugin at ${a.path}`,source:"plugin"}),r.add(l.name))}return n}function to(t,e){let n=new Map,r=t??xa(e);for(let o of r){if(o.type!=="local")continue;let s=Yd(o.path);for(let i of s)i.name&&i.body&&i.body.length>0&&!n.has(i.name)&&n.set(i.name,{body:i.body,pluginPath:o.path,...i.allowedTools!==void 0?{allowedTools:i.allowedTools}:{},...i.context!==void 0?{context:i.context}:{},...i.readOnly===!0?{readOnly:!0}:{}})}return n}function kv(t){let e=t??xa(),n=[],r=new Set;for(let o of e){if(o.type!=="local")continue;let s=lv(o.path).name;if(s!==null)for(let i of ca(BD(o.path,"agents"))){let a;try{a=UD(i,"utf8")}catch{continue}let c=an(a);if(c===void 0)continue;let l=`${s}:${c.name}`;r.has(l)||(r.add(l),n.push({name:l,definition:c.definition,source:`plugin:${s}`,filePath:i,...c.bashReadOnly===!0?{bashReadOnly:!0}:{},...c.ignoredKeys!==void 0?{ignoredKeys:c.ignoredKeys}:{}}))}}return n}function xa(t){return[...ln(Ep(t?.cwd)),...ln(),...ln(Tp()),...vr(Sr()).pluginRoots.flatMap(({dir:e,binary:n})=>ln(e,{trustAll:!0,sourceEnabled:um(n)}))]}async function _v(){await av(xa(),{pluginApi:{registerSkill:he,listSkills:el,getSkill:st,loadSkillPrompts:te,env:A,SubagentManager:G,describeFailure:pe,discoverPluginSkillBodies:to,getAgentFrameworkDir:tt,getSkillsDir:Oo,getSessionsDir:fe,getOrDeriveFacet:Au,listSessionIds:Tu,deriveSessionFacet:ao,loadStoredSession:Ta}})}var Pt=y(()=>{"use strict";sv();qe();Pe();ku();fu();cv();Xr();dv();Qr();ru();ce();be();vv();W();H();ks()});function Yi(){try{let t=eo();return Promise.resolve(t.map(e=>{let n={name:e.name,description:e.description};return e.argumentHint&&(n.argumentHint=e.argumentHint),n}))}catch{return Promise.resolve([])}}var Wd=y(()=>{"use strict";Pt()});function Ev(t){if(t.length===0)return;let e=t[t.length-1];if(!e||e.role!=="assistant"||typeof e.content=="string")return;let n=e.content,r=[];for(let s of n)s.type==="tool_use"&&typeof s.id=="string"&&r.push(s.id);if(r.length===0)return;let o={role:"user",content:r.map(s=>({type:"tool_result",tool_use_id:s,content:"Tool call interrupted before completing \u2014 no result recorded.",is_error:!0}))};t.push(o)}var Av=y(()=>{"use strict"});function Tv(t){return{messages:t.initialMessages?[...t.initialMessages]:[],currentModel:t.model,requestedModel:t.requestedModel??t.model,currentPermissionMode:t.permissionMode,userSystem:t.userSystem,toolDispatcher:t.toolDispatcher,lastUsage:null,closed:!1,autoCompactThreshold:t.autoCompactThreshold}}var xv=y(()=>{"use strict"});var jD,Ra,Rv=y(()=>{"use strict";jD="__closed__",Ra=class{current=null;pendingReason=null;closedPromise;closeResolve=null;constructor(){this.closedPromise=new Promise(e=>{this.closeResolve=()=>e(jD)})}begin(){let e=new AbortController;return this.current=e,this.pendingReason!==null&&!e.signal.aborted&&(e.abort(this.pendingReason),this.pendingReason=null),e}clear(e){this.current===e&&(this.current=null)}requestAbort(e){let n=this.current;if(n&&!n.signal.aborted){n.abort(e);return}this.pendingReason=e}isIdle(){return this.current===null}markClosed(){this.closeResolve?.()}}});function WD(t,e,n,r,o){let s=HD.get(t);if(!s)return;let i=1e6,c=Math.max(0,e-r-o)/i*s.inputPerMTok,l=n/i*s.outputPerMTok,d=s.cacheWritePerMTok??s.inputPerMTok*1.25,u=s.cacheReadPerMTok??s.inputPerMTok*.1,p=o/i*d,f=r/i*u;return c+l+p+f}function Pv(t,e,n){if(!t)return{stopReason:e??null};let r={inputTokens:t.input_tokens,outputTokens:t.output_tokens,stopReason:e??null};if(t.cache_read_input_tokens!=null&&(r.cachedInputTokens=t.cache_read_input_tokens),t.cache_creation_input_tokens!=null&&(r.cacheCreationTokens=t.cache_creation_input_tokens),r.totalTokens=(t.input_tokens??0)+(t.output_tokens??0),n){let o=WD(n,t.input_tokens??0,t.output_tokens??0,t.cache_read_input_tokens??0,t.cache_creation_input_tokens??0);o!==void 0&&(r.totalCostUsd=o)}return r}var HD,Cv=y(()=>{"use strict";vd();HD=new Map([["claude-sonnet-5",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["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 KD(t){let e=t.trim();if(e.length===0)return{};try{return JSON.parse(e)}catch{return{}}}function GD(t,e,n){let r=[],o=[];for(let a of t)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:KD(a.partialJson)}));let s=a=>a.type==="tool_use",i=r.filter(s);return{stopReason:e,assistantBlocks:r,toolUseBlocks:i,usage:n,text:o.join("")}}async function*Iv(t,e){let n=[],r=null,o=null,s=!1,i=!!A.AFK_TELEGRAM_TRACE;try{i&&console.log("[translate] starting SDK event iteration");for await(let a of t){switch(i&&console.log("[translate] SDK evt:",a.type),a.type){case"message_start":{let c=a.message?.usage;c&&(o={...c});break}case"content_block_start":{let c=a.content_block;c.type==="text"?n[a.index]={kind:"text",text:""}:c.type==="thinking"?n[a.index]={kind:"thinking",thinking:"",signature:""}:c.type==="redacted_thinking"?n[a.index]={kind:"redacted_thinking",data:c.data}:c.type==="tool_use"&&(n[a.index]={kind:"tool_use",id:c.id,name:c.name,partialJson:""},yield{kind:"event",event:{type:"tool.use.start",toolUseId:c.id,toolName:c.name,toolInput:" \u2026",sessionId:e.sessionId}});break}case"content_block_delta":{let c=n[a.index],l=a.delta;l.type==="text_delta"?(c&&c.kind==="text"&&(c.text+=l.text),yield{kind:"event",event:{type:"delta.text",text:l.text,sessionId:e.sessionId}}):l.type==="input_json_delta"?c&&c.kind==="tool_use"&&(c.partialJson+=l.partial_json):l.type==="thinking_delta"?(c&&c.kind==="thinking"&&(c.thinking+=l.thinking),yield{kind:"event",event:{type:"delta.reasoning",text:l.thinking,sessionId:e.sessionId}}):l.type==="signature_delta"&&c&&c.kind==="thinking"&&(c.signature=l.signature);break}case"content_block_stop":{let c=n[a.index];c&&c.kind==="tool_use"&&(yield{kind:"event",event:{type:"tool.use",summary:c.name,toolUseIds:[c.id],sessionId:e.sessionId}});break}case"message_delta":{a.delta&&a.delta.stop_reason!==void 0&&(r=a.delta.stop_reason);let c=a.usage;c&&(o!==null?(o.output_tokens=c.output_tokens,c.cache_creation_input_tokens!=null&&(o.cache_creation_input_tokens=c.cache_creation_input_tokens),c.cache_read_input_tokens!=null&&(o.cache_read_input_tokens=c.cache_read_input_tokens),c.input_tokens!=null&&(o.input_tokens=c.input_tokens)):o={cache_creation:null,cache_creation_input_tokens:c.cache_creation_input_tokens??null,cache_read_input_tokens:c.cache_read_input_tokens??null,inference_geo:null,input_tokens:c.input_tokens??0,output_tokens:c.output_tokens,server_tool_use:null,service_tier:null});break}case"message_stop":{s=!0;break}default:break}if(s)break}i&&console.log("[translate] SDK iteration ended naturally, stopped=",s)}catch(a){i&&console.log("[translate] SDK iteration threw:",a.message),yield{kind:"event",event:{type:"error",error:a instanceof Error?a:new Error(String(a))}};return}i&&console.log("[translate] yielding turn-result"),yield{kind:"turn-result",result:GD(n,r,o)}}var Mv=y(()=>{"use strict";H()});import{randomUUID as qD}from"node:crypto";function zD(t){let{name:e,description:n,input_schema:r}=t;return{name:e,...n!==void 0?{description:n}:{},input_schema:r}}function JD(t){if(!("status"in t))return!1;let e=t.status;return e===529||e===503}function Ov(t){if(t===null||typeof t!="object")return!1;let e=t;if(e.status===529||e.status===503)return!0;let n=e.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 VD(t,e,n,r){for(let o=0;;o++){if(o>0){let s=Dv*Math.pow(2,o-1);if(await Rt(s,r),r.aborted)throw new Error("aborted")}try{return await Promise.resolve(t.messages.create(e,{headers:n,signal:r}))}catch(s){if(r.aborted)throw s;let i=s instanceof Error?s:new Error(String(s));if(JD(i)&&o<xu)continue;throw i}}}async function*Ru(t){let e=Ki(t.maxToolUseIterations),n={stopReason:null},r=0,o=0,s=!1,i=0,a=qD(),c=Date.now(),l=d=>({...d,durationMs:Date.now()-c});Q(t.traceWriter,{phase:"loop_start"});try{for(;;){if(t.signal.aborted){yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId};return}let d=ms({baseUrl:t.baseUrl})?zf(t.messages,gs()):t.messages,u={model:t.model,max_tokens:t.maxTokens,messages:d,stream:!0,...t.system!==null?{system:t.system}:{},...t.tools!==null&&t.tools.length>0&&!s?{tools:t.tools.map(zD)}:{},...t.thinking!==void 0?{thinking:t.thinking}:{},...t.effort!==void 0?{output_config:{effort:t.effort}}:{}},p=Date.now(),f;try{f=await VD(t.client,u,t.headers,t.signal)}catch(_){if(t.signal.aborted){yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId};return}let k=_ instanceof Error?_:new Error(String(_));k.message.includes("thinking")&&YD(t.messages,k),yield{type:"error",error:k};return}let m=null,g=!1,b=!1,S=!1;try{A.AFK_TELEGRAM_TRACE&&console.log("[loop] awaiting translateMessageStream events");for await(let _ of Iv(f,t.ctx))if(S||(S=!0,Q(t.traceWriter,{phase:"model_ttfb",durationMs:Date.now()-p,resolvedModel:t.model})),A.AFK_TELEGRAM_TRACE&&console.log("[loop] translate yielded:",_.kind,_.kind==="event"?_.event.type:""),_.kind==="event"){if(_.event.type==="error"){if(Ov(_.event.error)&&i<xu&&!t.signal.aborted){b=!0;break}yield _.event,g=!0;break}yield _.event}else{m=_.result;break}A.AFK_TELEGRAM_TRACE&&console.log("[loop] translate loop exited, turnResult=",m?"set":"null")}catch(_){if(t.signal.aborted){yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId};return}let k=_ instanceof Error?_:new Error(String(_));if(Ov(k)&&i<xu&&!t.signal.aborted)b=!0;else{yield{type:"error",error:k};return}}if(b){if(i+=1,Q(t.traceWriter,{phase:"rate_limit",metadata:{reason:"overloaded",source:"mid-stream",attempt:i}}),yield{type:"stream.retry",sessionId:t.ctx.sessionId},await Rt(Dv*Math.pow(2,i-1),t.signal),t.signal.aborted){yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId};return}continue}if(i=0,g){t.signal.aborted&&(yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId});return}if(m===null){yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId};return}let v=Pv(m.usage,m.stopReason,t.model);if(n=Nr(n,v),n.contextWindowTokens=(v.inputTokens??0)+(v.outputTokens??0)+(v.cachedInputTokens??0)+(v.cacheCreationTokens??0),t.onUsageProgress?.(n),m.stopReason!=="tool_use"){if(m.stopReason==="refusal"){yield{type:"assistant.message",text:m.text.length>0?m.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:t.ctx.sessionId},yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId};return}m.text.length>0&&(yield{type:"assistant.message",text:m.text,sessionId:t.ctx.sessionId},m.text.length<=200&&(yield{type:"suggestion",suggestion:m.text,sessionId:t.ctx.sessionId}));let _=m.assistantBlocks.filter(k=>k.type!=="tool_use");_.length>0&&t.messages.push({role:"assistant",content:_}),yield{type:"turn.completed",usage:l(s?{...n,stopReason:xt}:n),sessionId:t.ctx.sessionId};return}let E=t.messages.length;t.messages.push({role:"assistant",content:m.assistantBlocks});try{o+=m.toolUseBlocks.length;let _=[],k=new Map;for(let x of m.toolUseBlocks){_.push({id:x.id,name:x.name,input:x.input,signal:t.signal});let N=Date.now();k.set(x.id,N),wn(t.traceWriter,{phase:"started",toolUseId:x.id,name:x.name,inputBytes:Buffer.byteLength(JSON.stringify(x.input??{}),"utf8")}),yield{type:"tool.use.start",toolUseId:x.id,toolName:x.name,toolInput:sn(x.name,x.input),toolInputRaw:Hi(x.input),sessionId:t.ctx.sessionId}}if(t.signal.aborted){let x=_.map(N=>({type:"tool_result",tool_use_id:N.id,content:"Tool call aborted",is_error:!0}));t.messages.push({role:"user",content:x}),yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId};return}let T;if(t.toolDispatcher.executeBatch)try{T=await t.toolDispatcher.executeBatch(_)}catch(x){T=_.map(()=>({content:`Tool batch execution failed: ${x instanceof Error?x.message:String(x)}`,isError:!0}))}else{T=[];for(let x of _){if(t.signal.aborted){T.push({content:"Tool call aborted",isError:!0});continue}try{T.push(await t.toolDispatcher.execute(x))}catch(N){let U=N instanceof Error?N.message:String(N);T.push({content:`Tool execution threw: ${U}`,isError:!0})}}}let M=[];for(let x=0;x<_.length;x++){let N=_[x],U=T[x],C=k.get(N.id),j=typeof C=="number"?Date.now()-C:0,$=U.truncated===!0||U.content.includes("[output truncated");wn(t.traceWriter,{phase:"completed",toolUseId:N.id,name:N.name,resultBytes:Buffer.byteLength(U.content,"utf8"),isError:U.isError===!0,truncated:$,durationMs:j,...U.circuitBreaker===!0?{circuitBreaker:!0}:{},...U.failureClass?{failureClass:U.failureClass}:{},...typeof U.batchIndex=="number"&&typeof U.batchSize=="number"?{batchIndex:U.batchIndex,batchSize:U.batchSize}:{}}),yield{type:"tool.output",toolUseId:N.id,toolName:N.name,content:U.content,...U.isError===!0?{isError:!0}:{},...$?{truncated:!0}:{},...typeof U.batchIndex=="number"&&typeof U.batchSize=="number"?{batchIndex:U.batchIndex,batchSize:U.batchSize}:{},sessionId:t.ctx.sessionId},U.render?.diff&&(yield{type:"tool.diff",toolUseId:N.id,diff:U.render.diff,sessionId:t.ctx.sessionId});let{content:P,isError:F,image:D}=U,L=D!==void 0?[{type:"image",source:{type:"base64",media_type:D.mediaType,data:D.data}},...P.length>0?[{type:"text",text:P}]:[]]:P;M.push({type:"tool_result",tool_use_id:N.id,content:L,...F===!0?{is_error:!0}:{}})}let I={role:"user",content:M};t.messages.push(I)}catch(_){throw t.messages.splice(E),_}r+=1;let w=m.toolUseBlocks[m.toolUseBlocks.length-1],R=w?`${w.name}${sn(w.name,w.input)}`:"unknown";if(yield{type:"progress",progress:{taskId:a,description:"Working",summary:`round ${r}: ${R}`,lastToolName:w?.name,totalTokens:n.totalTokens??0,toolUses:o,durationMs:Date.now()-c},sessionId:t.ctx.sessionId},s){yield{type:"turn.completed",usage:l({...n,stopReason:xt}),sessionId:t.ctx.sessionId};return}if(Gi(r,e)){let _=t.messages[t.messages.length-1];_!==void 0&&_.role==="user"&&Array.isArray(_.content)&&_.content.push({type:"text",text:Wi}),s=!0;continue}}}finally{Q(t.traceWriter,{phase:"loop_end",durationMs:Date.now()-c})}}function YD(t,e){try{let n=[];for(let r=0;r<t.length;r++){let o=t[r];if(o.role!=="assistant"||typeof o.content=="string")continue;let s=o.content;for(let i=0;i<s.length;i++){let a=s[i];if(a.type==="thinking"){let c=a;(!c.thinking||!c.signature)&&n.push({msgIdx:r,blockIdx:i,thinking:c.thinking?`(${c.thinking.length} chars)`:"(empty)",sigLen:c.signature?.length??0})}}}console.error("[afk] thinking-block diagnostic \u2014 API rejected request with:",e.message),console.error(`[afk] messages.length=${t.length}, invalid thinking blocks:`,n.length>0?JSON.stringify(n):"none found (cause may be elsewhere)")}catch{}}var xu,Dv,Fv=y(()=>{"use strict";Cv();Lc();Mv();X();Od();H();Ji();ji();zr();zr();xu=3,Dv=5e3});var Lv=y(()=>{"use strict";hr()});import{randomUUID as Pa}from"node:crypto";var Nv,XD,QD,ZD,eF,tF,Ca,$v=y(()=>{"use strict";Fv();Bt();fs();Lv();Ji();X();Nv=7200*1e3,XD=3,QD=12e4,ZD=5e3,eF=1e3,tF=60*1e3,Ca=class{_client;_authMode;initSessionId;tokenRefresher;autoResumeOnUsageLimit;refreshPromise=null;usageLimitWaitPromise=null;constructor(e){this._client=e.client,this._authMode=e.authMode,this.initSessionId=e.initSessionId,this.tokenRefresher=e.tokenRefresher,this.autoResumeOnUsageLimit=e.autoResumeOnUsageLimit}get client(){return this._client}get authMode(){return this._authMode}async forceClientRefresh(){if(!this.tokenRefresher)return null;let e=Le(),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=Le();return{accountId:gr(r??""),swapped:e!==r}}async*turnWithRetries(e,n){yield*this.turnWithUsageLimitRetry(e,n)}async*turnWithUsageLimitRetry(e,n){let r=null,o=null,s=!1,i=0;for(;;){let d,u=!1;for await(let m of this.turnWithAuthRetry(e,n)){if(m.type==="error"){let g=ps(m.error);if(g&&g.kind==="oauth-limit"){o=g.resetsAt,r=m;break}if(g&&g.kind==="oauth-limit-no-ts"){s=!0,r=m;break}if(g&&g.kind==="rate-limit-transient"&&i<XD){u=!0,d=g.retryAfterMs;break}}yield m}if(!u)break;if(i+=1,n()||e.signal.aborted)return;let f=Math.min(d??ZD,QD)+Math.floor(Math.random()*eF);if(Q(e.traceWriter,{phase:"rate_limit",metadata:{reason:"retry-after",source:"retry-layer",attempt:i,waitMs:f}}),await Rt(f,e.signal),n()||e.signal.aborted)return;e.headers=Oe(this._authMode,this.initSessionId,Pa())}if(!r)return;if(s){let d=gr(Le()??"");if(yield{type:"paused",reason:"usage-limit",accountId:d,autoResume:this.autoResumeOnUsageLimit},!this.autoResumeOnUsageLimit){yield r;return}let u=Date.now(),p=!1;for(;;){let f;if(this.usageLimitWaitPromise)f="aborted";else{this.usageLimitWaitPromise=Kf({signal:e.signal,retryAfterMs:tF});try{f=await this.usageLimitWaitPromise}finally{this.usageLimitWaitPromise=null}}if(f==="aborted")return;let m=d;if(f==="hot-swap"){let b=await this.forceClientRefresh();b&&(e.client=this._client,m=b.accountId)}e.headers=Oe(this._authMode,this.initSessionId,Pa());let g=null;for await(let b of this.turnWithAuthRetry(e,n)){if(!p&&b.type==="error"){let S=ps(b.error);if(S&&(S.kind==="oauth-limit"||S.kind==="oauth-limit-no-ts")){g=b;break}}p||(yield{type:"resumed",hotSwapped:f==="hot-swap",accountId:m},p=!0),yield b}if(!g)return;if(Date.now()-u>Nv){yield g;return}}}if(!o)return;if(o.getTime()-Date.now()>Nv){yield r;return}let a=gr(Le()??"");if(yield{type:"paused",reason:"usage-limit",resetsAt:o,accountId:a,autoResume:this.autoResumeOnUsageLimit},!this.autoResumeOnUsageLimit){yield r;return}let c;if(this.usageLimitWaitPromise)c=await this.usageLimitWaitPromise;else{this.usageLimitWaitPromise=Wf({resetsAt:o,signal:e.signal});try{c=await this.usageLimitWaitPromise}finally{this.usageLimitWaitPromise=null}}if(c==="aborted")return;let l=a;if(c==="hot-swap"){let d=await this.forceClientRefresh();d&&(e.client=this._client,l=d.accountId)}e.headers=Oe(this._authMode,this.initSessionId,Pa()),yield{type:"resumed",hotSwapped:c==="hot-swap",accountId:l},yield*this.turnWithAuthRetry(e,n)}async*turnWithAuthRetry(e,n){let r=null;for await(let s of Ru(e)){if(n())return;if(s.type==="error"&&this.isRetryableAuth(s.error)){r=s;break}yield s}if(!r)return;if(!await this.forceClientRefresh()){yield r;return}e.client=this._client,e.headers=Oe(this._authMode,this.initSessionId,Pa()),yield*Ru(e)}isRetryableAuth(e){return this._authMode==="oauth"&&this.tokenRefresher!==void 0&&"status"in e&&e.status===401}}});function nF(t){if(t.role!=="user")return!1;let e=t.content;if(typeof e=="string")return!0;if(!Array.isArray(e))return!1;for(let n of e)if(n.type==="tool_result")return!1;return!0}function rF(t){let n=[(t.role==="user"?"User":"Assistant")+":"];if(typeof t.content=="string")n.push(t.content);else if(Array.isArray(t.content))for(let r of t.content){let o=r.type;if(o==="text"&&"text"in r)n.push(r.text);else if(o==="tool_use"){let s=r.name??"unknown",i=Wv(r.input);n.push(`[tool call: ${s} ${i}]`)}else if(o==="tool_result"){let s=r.content;n.push(`[tool result: ${Kv(s)}]`)}else o==="image"?n.push("[image]"):o==="document"&&n.push("[document]")}return n.join(`
|
|
1290
|
+
`)}function eo(t,e){let n=[],r=new Set,o=A.AFK_INTERNAL==="1",s=vr(Sr());oo(Oo(),"user"),Em("project"),oo(_p(e?.cwd),"project");for(let{dir:a,origin:c}of s.skillRoots)oo(a,c);for(let a of el()){let c=st(a);Zc(c,o)&&(n.push({name:a,description:c.description,source:c.origin==="user"?"user":c.origin==="project"?"project":c.origin?.startsWith("imported:")?"imported":"builtin",argumentHint:c.argumentHint,whenToUse:c.whenToUse}),r.add(a))}let i=t??xa(e);for(let a of i){if(a.type!=="local")continue;let c=Yd(a.path);for(let l of c)!l.name||r.has(l.name)||Zc({audience:l.audience},o)&&(n.push({name:l.name,description:l.description??`Skill from plugin at ${a.path}`,source:"plugin"}),r.add(l.name))}return n}function to(t,e){let n=new Map,r=t??xa(e);for(let o of r){if(o.type!=="local")continue;let s=Yd(o.path);for(let i of s)i.name&&i.body&&i.body.length>0&&!n.has(i.name)&&n.set(i.name,{body:i.body,pluginPath:o.path,...i.allowedTools!==void 0?{allowedTools:i.allowedTools}:{},...i.context!==void 0?{context:i.context}:{},...i.readOnly===!0?{readOnly:!0}:{},...i.model!==void 0?{model:i.model}:{}})}return n}function kv(t){let e=t??xa(),n=[],r=new Set;for(let o of e){if(o.type!=="local")continue;let s=lv(o.path).name;if(s!==null)for(let i of ca(BD(o.path,"agents"))){let a;try{a=UD(i,"utf8")}catch{continue}let c=an(a);if(c===void 0)continue;let l=`${s}:${c.name}`;r.has(l)||(r.add(l),n.push({name:l,definition:c.definition,source:`plugin:${s}`,filePath:i,...c.bashReadOnly===!0?{bashReadOnly:!0}:{},...c.ignoredKeys!==void 0?{ignoredKeys:c.ignoredKeys}:{}}))}}return n}function xa(t){return[...ln(Ep(t?.cwd)),...ln(),...ln(Tp()),...vr(Sr()).pluginRoots.flatMap(({dir:e,binary:n})=>ln(e,{trustAll:!0,sourceEnabled:um(n)}))]}async function _v(){await av(xa(),{pluginApi:{registerSkill:he,listSkills:el,getSkill:st,loadSkillPrompts:te,env:A,SubagentManager:G,describeFailure:pe,discoverPluginSkillBodies:to,getAgentFrameworkDir:tt,getSkillsDir:Oo,getSessionsDir:fe,getOrDeriveFacet:Au,listSessionIds:Tu,deriveSessionFacet:ao,loadStoredSession:Ta}})}var Pt=y(()=>{"use strict";sv();qe();Pe();ku();fu();cv();Xr();dv();Qr();ru();ce();be();vv();W();H();ks()});function Yi(){try{let t=eo();return Promise.resolve(t.map(e=>{let n={name:e.name,description:e.description};return e.argumentHint&&(n.argumentHint=e.argumentHint),n}))}catch{return Promise.resolve([])}}var Wd=y(()=>{"use strict";Pt()});function Ev(t){if(t.length===0)return;let e=t[t.length-1];if(!e||e.role!=="assistant"||typeof e.content=="string")return;let n=e.content,r=[];for(let s of n)s.type==="tool_use"&&typeof s.id=="string"&&r.push(s.id);if(r.length===0)return;let o={role:"user",content:r.map(s=>({type:"tool_result",tool_use_id:s,content:"Tool call interrupted before completing \u2014 no result recorded.",is_error:!0}))};t.push(o)}var Av=y(()=>{"use strict"});function Tv(t){return{messages:t.initialMessages?[...t.initialMessages]:[],currentModel:t.model,requestedModel:t.requestedModel??t.model,currentPermissionMode:t.permissionMode,userSystem:t.userSystem,toolDispatcher:t.toolDispatcher,lastUsage:null,closed:!1,autoCompactThreshold:t.autoCompactThreshold}}var xv=y(()=>{"use strict"});var jD,Ra,Rv=y(()=>{"use strict";jD="__closed__",Ra=class{current=null;pendingReason=null;closedPromise;closeResolve=null;constructor(){this.closedPromise=new Promise(e=>{this.closeResolve=()=>e(jD)})}begin(){let e=new AbortController;return this.current=e,this.pendingReason!==null&&!e.signal.aborted&&(e.abort(this.pendingReason),this.pendingReason=null),e}clear(e){this.current===e&&(this.current=null)}requestAbort(e){let n=this.current;if(n&&!n.signal.aborted){n.abort(e);return}this.pendingReason=e}isIdle(){return this.current===null}markClosed(){this.closeResolve?.()}}});function WD(t,e,n,r,o){let s=HD.get(t);if(!s)return;let i=1e6,c=Math.max(0,e-r-o)/i*s.inputPerMTok,l=n/i*s.outputPerMTok,d=s.cacheWritePerMTok??s.inputPerMTok*1.25,u=s.cacheReadPerMTok??s.inputPerMTok*.1,p=o/i*d,f=r/i*u;return c+l+p+f}function Pv(t,e,n){if(!t)return{stopReason:e??null};let r={inputTokens:t.input_tokens,outputTokens:t.output_tokens,stopReason:e??null};if(t.cache_read_input_tokens!=null&&(r.cachedInputTokens=t.cache_read_input_tokens),t.cache_creation_input_tokens!=null&&(r.cacheCreationTokens=t.cache_creation_input_tokens),r.totalTokens=(t.input_tokens??0)+(t.output_tokens??0),n){let o=WD(n,t.input_tokens??0,t.output_tokens??0,t.cache_read_input_tokens??0,t.cache_creation_input_tokens??0);o!==void 0&&(r.totalCostUsd=o)}return r}var HD,Cv=y(()=>{"use strict";vd();HD=new Map([["claude-sonnet-5",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["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 KD(t){let e=t.trim();if(e.length===0)return{};try{return JSON.parse(e)}catch{return{}}}function GD(t,e,n){let r=[],o=[];for(let a of t)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:KD(a.partialJson)}));let s=a=>a.type==="tool_use",i=r.filter(s);return{stopReason:e,assistantBlocks:r,toolUseBlocks:i,usage:n,text:o.join("")}}async function*Iv(t,e){let n=[],r=null,o=null,s=!1,i=!!A.AFK_TELEGRAM_TRACE;try{i&&console.log("[translate] starting SDK event iteration");for await(let a of t){switch(i&&console.log("[translate] SDK evt:",a.type),a.type){case"message_start":{let c=a.message?.usage;c&&(o={...c});break}case"content_block_start":{let c=a.content_block;c.type==="text"?n[a.index]={kind:"text",text:""}:c.type==="thinking"?n[a.index]={kind:"thinking",thinking:"",signature:""}:c.type==="redacted_thinking"?n[a.index]={kind:"redacted_thinking",data:c.data}:c.type==="tool_use"&&(n[a.index]={kind:"tool_use",id:c.id,name:c.name,partialJson:""},yield{kind:"event",event:{type:"tool.use.start",toolUseId:c.id,toolName:c.name,toolInput:" \u2026",sessionId:e.sessionId}});break}case"content_block_delta":{let c=n[a.index],l=a.delta;l.type==="text_delta"?(c&&c.kind==="text"&&(c.text+=l.text),yield{kind:"event",event:{type:"delta.text",text:l.text,sessionId:e.sessionId}}):l.type==="input_json_delta"?c&&c.kind==="tool_use"&&(c.partialJson+=l.partial_json):l.type==="thinking_delta"?(c&&c.kind==="thinking"&&(c.thinking+=l.thinking),yield{kind:"event",event:{type:"delta.reasoning",text:l.thinking,sessionId:e.sessionId}}):l.type==="signature_delta"&&c&&c.kind==="thinking"&&(c.signature=l.signature);break}case"content_block_stop":{let c=n[a.index];c&&c.kind==="tool_use"&&(yield{kind:"event",event:{type:"tool.use",summary:c.name,toolUseIds:[c.id],sessionId:e.sessionId}});break}case"message_delta":{a.delta&&a.delta.stop_reason!==void 0&&(r=a.delta.stop_reason);let c=a.usage;c&&(o!==null?(o.output_tokens=c.output_tokens,c.cache_creation_input_tokens!=null&&(o.cache_creation_input_tokens=c.cache_creation_input_tokens),c.cache_read_input_tokens!=null&&(o.cache_read_input_tokens=c.cache_read_input_tokens),c.input_tokens!=null&&(o.input_tokens=c.input_tokens)):o={cache_creation:null,cache_creation_input_tokens:c.cache_creation_input_tokens??null,cache_read_input_tokens:c.cache_read_input_tokens??null,inference_geo:null,input_tokens:c.input_tokens??0,output_tokens:c.output_tokens,server_tool_use:null,service_tier:null});break}case"message_stop":{s=!0;break}default:break}if(s)break}i&&console.log("[translate] SDK iteration ended naturally, stopped=",s)}catch(a){i&&console.log("[translate] SDK iteration threw:",a.message),yield{kind:"event",event:{type:"error",error:a instanceof Error?a:new Error(String(a))}};return}i&&console.log("[translate] yielding turn-result"),yield{kind:"turn-result",result:GD(n,r,o)}}var Mv=y(()=>{"use strict";H()});import{randomUUID as qD}from"node:crypto";function zD(t){let{name:e,description:n,input_schema:r}=t;return{name:e,...n!==void 0?{description:n}:{},input_schema:r}}function JD(t){if(!("status"in t))return!1;let e=t.status;return e===529||e===503}function Ov(t){if(t===null||typeof t!="object")return!1;let e=t;if(e.status===529||e.status===503)return!0;let n=e.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 VD(t,e,n,r){for(let o=0;;o++){if(o>0){let s=Dv*Math.pow(2,o-1);if(await Rt(s,r),r.aborted)throw new Error("aborted")}try{return await Promise.resolve(t.messages.create(e,{headers:n,signal:r}))}catch(s){if(r.aborted)throw s;let i=s instanceof Error?s:new Error(String(s));if(JD(i)&&o<xu)continue;throw i}}}async function*Ru(t){let e=Ki(t.maxToolUseIterations),n={stopReason:null},r=0,o=0,s=!1,i=0,a=qD(),c=Date.now(),l=d=>({...d,durationMs:Date.now()-c});Q(t.traceWriter,{phase:"loop_start"});try{for(;;){if(t.signal.aborted){yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId};return}let d=ms({baseUrl:t.baseUrl})?zf(t.messages,gs()):t.messages,u={model:t.model,max_tokens:t.maxTokens,messages:d,stream:!0,...t.system!==null?{system:t.system}:{},...t.tools!==null&&t.tools.length>0&&!s?{tools:t.tools.map(zD)}:{},...t.thinking!==void 0?{thinking:t.thinking}:{},...t.effort!==void 0?{output_config:{effort:t.effort}}:{}},p=Date.now(),f;try{f=await VD(t.client,u,t.headers,t.signal)}catch(_){if(t.signal.aborted){yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId};return}let k=_ instanceof Error?_:new Error(String(_));k.message.includes("thinking")&&YD(t.messages,k),yield{type:"error",error:k};return}let m=null,g=!1,b=!1,S=!1;try{A.AFK_TELEGRAM_TRACE&&console.log("[loop] awaiting translateMessageStream events");for await(let _ of Iv(f,t.ctx))if(S||(S=!0,Q(t.traceWriter,{phase:"model_ttfb",durationMs:Date.now()-p,resolvedModel:t.model})),A.AFK_TELEGRAM_TRACE&&console.log("[loop] translate yielded:",_.kind,_.kind==="event"?_.event.type:""),_.kind==="event"){if(_.event.type==="error"){if(Ov(_.event.error)&&i<xu&&!t.signal.aborted){b=!0;break}yield _.event,g=!0;break}yield _.event}else{m=_.result;break}A.AFK_TELEGRAM_TRACE&&console.log("[loop] translate loop exited, turnResult=",m?"set":"null")}catch(_){if(t.signal.aborted){yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId};return}let k=_ instanceof Error?_:new Error(String(_));if(Ov(k)&&i<xu&&!t.signal.aborted)b=!0;else{yield{type:"error",error:k};return}}if(b){if(i+=1,Q(t.traceWriter,{phase:"rate_limit",metadata:{reason:"overloaded",source:"mid-stream",attempt:i}}),yield{type:"stream.retry",sessionId:t.ctx.sessionId},await Rt(Dv*Math.pow(2,i-1),t.signal),t.signal.aborted){yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId};return}continue}if(i=0,g){t.signal.aborted&&(yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId});return}if(m===null){yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId};return}let v=Pv(m.usage,m.stopReason,t.model);if(n=Nr(n,v),n.contextWindowTokens=(v.inputTokens??0)+(v.outputTokens??0)+(v.cachedInputTokens??0)+(v.cacheCreationTokens??0),t.onUsageProgress?.(n),m.stopReason!=="tool_use"){if(m.stopReason==="refusal"){yield{type:"assistant.message",text:m.text.length>0?m.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:t.ctx.sessionId},yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId};return}m.text.length>0&&(yield{type:"assistant.message",text:m.text,sessionId:t.ctx.sessionId},m.text.length<=200&&(yield{type:"suggestion",suggestion:m.text,sessionId:t.ctx.sessionId}));let _=m.assistantBlocks.filter(k=>k.type!=="tool_use");_.length>0&&t.messages.push({role:"assistant",content:_}),yield{type:"turn.completed",usage:l(s?{...n,stopReason:xt}:n),sessionId:t.ctx.sessionId};return}let E=t.messages.length;t.messages.push({role:"assistant",content:m.assistantBlocks});try{o+=m.toolUseBlocks.length;let _=[],k=new Map;for(let x of m.toolUseBlocks){_.push({id:x.id,name:x.name,input:x.input,signal:t.signal});let N=Date.now();k.set(x.id,N),wn(t.traceWriter,{phase:"started",toolUseId:x.id,name:x.name,inputBytes:Buffer.byteLength(JSON.stringify(x.input??{}),"utf8")}),yield{type:"tool.use.start",toolUseId:x.id,toolName:x.name,toolInput:sn(x.name,x.input),toolInputRaw:Hi(x.input),sessionId:t.ctx.sessionId}}if(t.signal.aborted){let x=_.map(N=>({type:"tool_result",tool_use_id:N.id,content:"Tool call aborted",is_error:!0}));t.messages.push({role:"user",content:x}),yield{type:"turn.completed",usage:l(n),sessionId:t.ctx.sessionId};return}let T;if(t.toolDispatcher.executeBatch)try{T=await t.toolDispatcher.executeBatch(_)}catch(x){T=_.map(()=>({content:`Tool batch execution failed: ${x instanceof Error?x.message:String(x)}`,isError:!0}))}else{T=[];for(let x of _){if(t.signal.aborted){T.push({content:"Tool call aborted",isError:!0});continue}try{T.push(await t.toolDispatcher.execute(x))}catch(N){let U=N instanceof Error?N.message:String(N);T.push({content:`Tool execution threw: ${U}`,isError:!0})}}}let M=[];for(let x=0;x<_.length;x++){let N=_[x],U=T[x],C=k.get(N.id),j=typeof C=="number"?Date.now()-C:0,$=U.truncated===!0||U.content.includes("[output truncated");wn(t.traceWriter,{phase:"completed",toolUseId:N.id,name:N.name,resultBytes:Buffer.byteLength(U.content,"utf8"),isError:U.isError===!0,truncated:$,durationMs:j,...U.circuitBreaker===!0?{circuitBreaker:!0}:{},...U.failureClass?{failureClass:U.failureClass}:{},...typeof U.batchIndex=="number"&&typeof U.batchSize=="number"?{batchIndex:U.batchIndex,batchSize:U.batchSize}:{}}),yield{type:"tool.output",toolUseId:N.id,toolName:N.name,content:U.content,...U.isError===!0?{isError:!0}:{},...$?{truncated:!0}:{},...typeof U.batchIndex=="number"&&typeof U.batchSize=="number"?{batchIndex:U.batchIndex,batchSize:U.batchSize}:{},sessionId:t.ctx.sessionId},U.render?.diff&&(yield{type:"tool.diff",toolUseId:N.id,diff:U.render.diff,sessionId:t.ctx.sessionId});let{content:P,isError:F,image:D}=U,L=D!==void 0?[{type:"image",source:{type:"base64",media_type:D.mediaType,data:D.data}},...P.length>0?[{type:"text",text:P}]:[]]:P;M.push({type:"tool_result",tool_use_id:N.id,content:L,...F===!0?{is_error:!0}:{}})}let I={role:"user",content:M};t.messages.push(I)}catch(_){throw t.messages.splice(E),_}r+=1;let w=m.toolUseBlocks[m.toolUseBlocks.length-1],R=w?`${w.name}${sn(w.name,w.input)}`:"unknown";if(yield{type:"progress",progress:{taskId:a,description:"Working",summary:`round ${r}: ${R}`,lastToolName:w?.name,totalTokens:n.totalTokens??0,toolUses:o,durationMs:Date.now()-c},sessionId:t.ctx.sessionId},s){yield{type:"turn.completed",usage:l({...n,stopReason:xt}),sessionId:t.ctx.sessionId};return}if(Gi(r,e)){let _=t.messages[t.messages.length-1];_!==void 0&&_.role==="user"&&Array.isArray(_.content)&&_.content.push({type:"text",text:Wi}),s=!0;continue}}}finally{Q(t.traceWriter,{phase:"loop_end",durationMs:Date.now()-c})}}function YD(t,e){try{let n=[];for(let r=0;r<t.length;r++){let o=t[r];if(o.role!=="assistant"||typeof o.content=="string")continue;let s=o.content;for(let i=0;i<s.length;i++){let a=s[i];if(a.type==="thinking"){let c=a;(!c.thinking||!c.signature)&&n.push({msgIdx:r,blockIdx:i,thinking:c.thinking?`(${c.thinking.length} chars)`:"(empty)",sigLen:c.signature?.length??0})}}}console.error("[afk] thinking-block diagnostic \u2014 API rejected request with:",e.message),console.error(`[afk] messages.length=${t.length}, invalid thinking blocks:`,n.length>0?JSON.stringify(n):"none found (cause may be elsewhere)")}catch{}}var xu,Dv,Fv=y(()=>{"use strict";Cv();Lc();Mv();X();Od();H();Ji();ji();zr();zr();xu=3,Dv=5e3});var Lv=y(()=>{"use strict";hr()});import{randomUUID as Pa}from"node:crypto";var Nv,XD,QD,ZD,eF,tF,Ca,$v=y(()=>{"use strict";Fv();Bt();fs();Lv();Ji();X();Nv=7200*1e3,XD=3,QD=12e4,ZD=5e3,eF=1e3,tF=60*1e3,Ca=class{_client;_authMode;initSessionId;tokenRefresher;autoResumeOnUsageLimit;refreshPromise=null;usageLimitWaitPromise=null;constructor(e){this._client=e.client,this._authMode=e.authMode,this.initSessionId=e.initSessionId,this.tokenRefresher=e.tokenRefresher,this.autoResumeOnUsageLimit=e.autoResumeOnUsageLimit}get client(){return this._client}get authMode(){return this._authMode}async forceClientRefresh(){if(!this.tokenRefresher)return null;let e=Le(),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=Le();return{accountId:gr(r??""),swapped:e!==r}}async*turnWithRetries(e,n){yield*this.turnWithUsageLimitRetry(e,n)}async*turnWithUsageLimitRetry(e,n){let r=null,o=null,s=!1,i=0;for(;;){let d,u=!1;for await(let m of this.turnWithAuthRetry(e,n)){if(m.type==="error"){let g=ps(m.error);if(g&&g.kind==="oauth-limit"){o=g.resetsAt,r=m;break}if(g&&g.kind==="oauth-limit-no-ts"){s=!0,r=m;break}if(g&&g.kind==="rate-limit-transient"&&i<XD){u=!0,d=g.retryAfterMs;break}}yield m}if(!u)break;if(i+=1,n()||e.signal.aborted)return;let f=Math.min(d??ZD,QD)+Math.floor(Math.random()*eF);if(Q(e.traceWriter,{phase:"rate_limit",metadata:{reason:"retry-after",source:"retry-layer",attempt:i,waitMs:f}}),await Rt(f,e.signal),n()||e.signal.aborted)return;e.headers=Oe(this._authMode,this.initSessionId,Pa())}if(!r)return;if(s){let d=gr(Le()??"");if(yield{type:"paused",reason:"usage-limit",accountId:d,autoResume:this.autoResumeOnUsageLimit},!this.autoResumeOnUsageLimit){yield r;return}let u=Date.now(),p=!1;for(;;){let f;if(this.usageLimitWaitPromise)f="aborted";else{this.usageLimitWaitPromise=Kf({signal:e.signal,retryAfterMs:tF});try{f=await this.usageLimitWaitPromise}finally{this.usageLimitWaitPromise=null}}if(f==="aborted")return;let m=d;if(f==="hot-swap"){let b=await this.forceClientRefresh();b&&(e.client=this._client,m=b.accountId)}e.headers=Oe(this._authMode,this.initSessionId,Pa());let g=null;for await(let b of this.turnWithAuthRetry(e,n)){if(!p&&b.type==="error"){let S=ps(b.error);if(S&&(S.kind==="oauth-limit"||S.kind==="oauth-limit-no-ts")){g=b;break}}p||(yield{type:"resumed",hotSwapped:f==="hot-swap",accountId:m},p=!0),yield b}if(!g)return;if(Date.now()-u>Nv){yield g;return}}}if(!o)return;if(o.getTime()-Date.now()>Nv){yield r;return}let a=gr(Le()??"");if(yield{type:"paused",reason:"usage-limit",resetsAt:o,accountId:a,autoResume:this.autoResumeOnUsageLimit},!this.autoResumeOnUsageLimit){yield r;return}let c;if(this.usageLimitWaitPromise)c=await this.usageLimitWaitPromise;else{this.usageLimitWaitPromise=Wf({resetsAt:o,signal:e.signal});try{c=await this.usageLimitWaitPromise}finally{this.usageLimitWaitPromise=null}}if(c==="aborted")return;let l=a;if(c==="hot-swap"){let d=await this.forceClientRefresh();d&&(e.client=this._client,l=d.accountId)}e.headers=Oe(this._authMode,this.initSessionId,Pa()),yield{type:"resumed",hotSwapped:c==="hot-swap",accountId:l},yield*this.turnWithAuthRetry(e,n)}async*turnWithAuthRetry(e,n){let r=null;for await(let s of Ru(e)){if(n())return;if(s.type==="error"&&this.isRetryableAuth(s.error)){r=s;break}yield s}if(!r)return;if(!await this.forceClientRefresh()){yield r;return}e.client=this._client,e.headers=Oe(this._authMode,this.initSessionId,Pa()),yield*Ru(e)}isRetryableAuth(e){return this._authMode==="oauth"&&this.tokenRefresher!==void 0&&"status"in e&&e.status===401}}});function nF(t){if(t.role!=="user")return!1;let e=t.content;if(typeof e=="string")return!0;if(!Array.isArray(e))return!1;for(let n of e)if(n.type==="tool_result")return!1;return!0}function rF(t){let n=[(t.role==="user"?"User":"Assistant")+":"];if(typeof t.content=="string")n.push(t.content);else if(Array.isArray(t.content))for(let r of t.content){let o=r.type;if(o==="text"&&"text"in r)n.push(r.text);else if(o==="tool_use"){let s=r.name??"unknown",i=Wv(r.input);n.push(`[tool call: ${s} ${i}]`)}else if(o==="tool_result"){let s=r.content;n.push(`[tool result: ${Kv(s)}]`)}else o==="image"?n.push("[image]"):o==="document"&&n.push("[document]")}return n.join(`
|
|
1291
1291
|
`)}function oF(t){let e=0;if(typeof t.content=="string")e+=t.content.length;else if(Array.isArray(t.content))for(let n of t.content){let r=n.type;r==="text"&&"text"in n?e+=n.text.length:r==="tool_use"?e+=Wv(n.input).length:r==="tool_result"&&(e+=Kv(n.content).length)}return e}function Uv(t,e){return Rd(t,e,Ia)}function Bv(t,e,n){let r=Pd(t,Ia);return{model:e,max_tokens:n,system:Ni,messages:[{role:"user",content:$i(r)}],stream:!0}}function jv(t,e,n){return Cd(t,e,n,Ia)}function Hv(t,e,n){return Id(t,e,n,Ia)}function Wv(t){try{let e=JSON.stringify(t);return e.length>240?e.slice(0,237)+"...":e}catch{return"{}"}}function Kv(t){if(typeof t=="string")return t.length>320?t.slice(0,317)+"...":t;if(Array.isArray(t)){let e=[];for(let r of t)r.type==="text"&&"text"in r&&e.push(r.text);let n=e.join(" ");return n.length>320?n.slice(0,317)+"...":n}return""}var Ia,Gv=y(()=>{"use strict";Ui();Ia={isFreshUserTurn:nF,renderMessage:rF,buildPreamble(t){return[{role:"user",content:Gr+`
|
|
1292
1292
|
|
|
1293
1293
|
`+t},{role:"assistant",content:qr}]},countChars:oF}});import{randomUUID as sF}from"node:crypto";async function qv(t){let{state:e,abort:n,retry:r,initSessionId:o,traceWriter:s}=t,i=e.messages.length;if(e.closed)return{compacted:!1,reason:"session-closed",messagesBefore:i,messagesAfter:i};if(!n.isIdle())return{compacted:!1,reason:"turn-in-flight",messagesBefore:i,messagesAfter:i};let a=lF(),c=Uv(e.messages,a);if(c<0)return{compacted:!1,reason:"history-too-short",messagesBefore:i,messagesAfter:i};if(c===0)return{compacted:!1,reason:"nothing-to-summarize",messagesBefore:i,messagesAfter:i};let l=e.messages.slice(0,c),d=dF(),u=Bv(l,d,cF),p=n.begin(),f;try{if(p.signal.aborted)return{compacted:!1,reason:"aborted",messagesBefore:i,messagesAfter:i};let S=Oe(r.authMode,o,sF()),v=r.client,E=await Promise.resolve(v.messages.create(u,{headers:S,signal:p.signal}));f=await uF(E)}catch(S){return p.signal.aborted?{compacted:!1,reason:"aborted",messagesBefore:i,messagesAfter:i}:{compacted:!1,reason:"summarization-failed: "+(S instanceof Error?S.message:String(S)),messagesBefore:i,messagesAfter:i}}finally{n.clear(p)}if(f.trim().length===0)return{compacted:!1,reason:"empty-summary",messagesBefore:i,messagesAfter:i};let m=Hv(e.messages,c,f),g=jv(e.messages,c,f);e.messages.splice(0,e.messages.length,...g);let b=e.messages.length;return us(s,{trigger:"manual",preCompactionMessages:l,summary:f,keptTailCount:i-c,keepLastNConfig:a,messagesBefore:i,messagesAfter:b,tokensSavedEstimate:m}),{compacted:!0,messagesBefore:i,messagesAfter:b,tokensSavedEstimate:m}}function lF(){let t=A.AFK_COMPACT_KEEP_LAST_TURNS;if(t!==void 0&&t.length>0){let e=Number.parseInt(t,10);if(Number.isFinite(e)&&e>0)return e}return iF}function dF(){let t=A.AFK_COMPACT_MODEL;return t!==void 0&&t.length>0?le(t)??t:aF}async function uF(t){let e="";for await(let n of t)if(n.type==="content_block_delta"){let r=n.delta;r.type==="text_delta"&&typeof r.text=="string"&&(e+=r.text)}return e}var iF,aF,cF,zv=y(()=>{"use strict";Bt();Gv();X();xe();H();iF=2,aF="claude-haiku-4-5-20251001",cF=1024});var Jv=y(()=>{"use strict";Fi()});import{randomUUID as Vv}from"node:crypto";var pF,Ma,Yv=y(()=>{"use strict";yr();Bt();Lc();Vf();Yf();Gt();Wd();Br();xe();Av();xv();Rv();$v();zv();Jv();de();pF=[{value:"claude-sonnet-5",displayName:"Claude Sonnet 5",description:"Latest balanced Claude \u2014 recommended default"},{value:"claude-opus-4-5-20250929",displayName:"Claude Opus 4.5",description:"Highest-capability Claude"},{value:"claude-haiku-4-5-20250929",displayName:"Claude Haiku 4.5",description:"Fastest, cheapest Claude"}],Ma=class{initSessionId;promptStream;maxTokens;tools;systemPrefix;thinking;effort;baseUrl;maxToolUseIterations;traceWriter;state;abort;retry;cwdDependentsFactory;onPermissionMode;mcpManager;hookRegistry;constructor(e){this.initSessionId=e.sessionId??Vv(),this.promptStream=e.promptStream,this.maxTokens=e.maxTokens,this.tools=e.tools,this.systemPrefix=e.systemPrefix,this.thinking=e.thinking,e.effort!==void 0&&(this.effort=e.effort),e.baseUrl!==void 0&&(this.baseUrl=e.baseUrl),e.maxToolUseIterations!==void 0&&(this.maxToolUseIterations=e.maxToolUseIterations),this.traceWriter=e.traceWriter,this.cwdDependentsFactory=e.cwdDependentsFactory,this.onPermissionMode=e.onPermissionMode,this.mcpManager=e.mcpManager,e.hookRegistry!==void 0&&(this.hookRegistry=e.hookRegistry),this.retry=new Ca({client:e.client,authMode:e.authMode,initSessionId:this.initSessionId,...e.tokenRefresher?{tokenRefresher:e.tokenRefresher}:{},autoResumeOnUsageLimit:e.autoResumeOnUsageLimit??!0}),this.state=Tv({model:e.model,...e.requestedModel!==void 0?{requestedModel:e.requestedModel}:{},permissionMode:e.permissionMode??"default",userSystem:e.userSystem,toolDispatcher:e.toolDispatcher,...e.initialMessages?{initialMessages:e.initialMessages}:{},...e.autoCompactThreshold!==void 0?{autoCompactThreshold:e.autoCompactThreshold}:{}}),this.abort=new Ra}async*[Symbol.asyncIterator](){yield{type:"session.init",info:{sessionId:this.initSessionId,model:this.state.currentModel,permissionMode:this.state.currentPermissionMode,cwd:process.cwd(),tools:[],slashCommands:[],skills:[],plugins:[],mcpServers:this.mcpManager?.getServerStates().map(r=>({name:r.serverName,status:r.status}))??[],apiKeySource:this.retry.authMode,version:"anthropic-direct-v1"}};let n=this.promptStream[Symbol.asyncIterator]();try{for(;!this.state.closed;){let r=await Promise.race([n.next(),this.abort.closedPromise]);if(r==="__closed__")break;let o=r;if(o.done)break;let s=o.value,i=this.abort.begin();if(i.signal.aborted){this.abort.clear(i);return}Ev(this.state.messages),this.state.messages.push({role:"user",content:s.content});let a=this.composeSystem(),c=Oe(this.retry.authMode,this.initSessionId,Vv(),this.effort!==void 0),l={client:this.retry.client,messages:this.state.messages,system:a,tools:this.state.currentPermissionMode==="plan"?this.tools:this.tools?.filter(u=>u.name!==Re)??null,toolDispatcher:this.state.toolDispatcher,model:this.state.currentModel,maxTokens:this.maxTokens,headers:c,signal:i.signal,ctx:{sessionId:this.initSessionId},...this.thinking!==void 0?{thinking:this.thinking}:{},...this.effort!==void 0?{effort:this.effort}:{},...this.baseUrl!==void 0?{baseUrl:this.baseUrl}:{},...this.maxToolUseIterations!==void 0?{maxToolUseIterations:this.maxToolUseIterations}:{},...this.traceWriter?{traceWriter:this.traceWriter}:{},onUsageProgress:u=>{this.state.lastUsage=u}},d=!1;try{for await(let u of this.retry.turnWithRetries(l,()=>this.state.closed)){if(this.state.closed)return;u.type==="turn.completed"&&(this.state.lastUsage=u.usage,this.abort.clear(i)),(u.type==="turn.completed"||u.type==="error")&&(d=!0),yield u}}catch(u){if(this.state.closed)return;if(i.signal.aborted){this.abort.clear(i),d||(yield this.makeInterruptedTurnEvent());continue}yield{type:"error",error:u instanceof Error?u:new Error(String(u))};return}finally{this.abort.clear(i)}if(this.state.closed)return;if(i.signal.aborted){d||(yield this.makeInterruptedTurnEvent());continue}if(this.state.autoCompactThreshold!==void 0&&!this.state.closed){let u=this.state.lastUsage,p=Ii(this.state.requestedModel);if(u!==null&&p>0){let f=Tt(u);if(Kr(f,p,this.state.autoCompactThreshold))try{this.hookRegistry&&await this.hookRegistry.dispatch({event:"PreCompact",sessionId:this.initSessionId,trigger:"auto"}),await this.compact()}catch(m){if(!(m instanceof J))throw m}}}}}catch(r){yield{type:"error",error:r instanceof Error?r:new Error(String(r))}}finally{try{await n.return?.()}catch{}}}composeSystem(){let e=this.systemPrefix,n=this.state.userSystem,r=[];e&&e.length>0&&r.push(...e),n&&n.length>0&&r.push({type:"text",text:n});let o=Nc(this.state.currentPermissionMode);o!==null&&r.push(o);let s=Uc(this.state.currentPermissionMode);return s!==null&&r.push(s),r.length===0?null:ms({baseUrl:this.baseUrl})?qf(r,gs()):r}async interrupt(){this.abort.requestAbort("interrupted")}makeInterruptedTurnEvent(){return{type:"turn.completed",usage:{stopReason:"interrupted",resultSubtype:"interrupted",isError:!1},sessionId:this.initSessionId}}async setModel(e){e!==void 0&&e.length>0&&(this.state.requestedModel=e,this.state.currentModel=le(e)??e)}async setPermissionMode(e){this.state.currentPermissionMode=e;let n=Ge(e);this.state.toolDispatcher.setAllowAll?.(n),this.onPermissionMode?.(e)}setCwd(e){if(this.state.toolDispatcher.setResolveBase?.(e),!this.cwdDependentsFactory)return;let{userSystem:n,dispatcher:r}=this.cwdDependentsFactory(e);this.state.userSystem=n,this.state.toolDispatcher=r}async supportedCommands(){return Yi()}async supportedModels(){return pF.map(e=>({...e}))}async supportedAgents(){return[]}async getContextUsage(){let e=this.state.lastUsage,n=Ur(this.state.requestedModel),r;if(e&&n>0){let i=Tt(e);r=Math.min(100,Math.max(0,i/n*100))}let{totalTokens:o,apiUsage:s}=Wr(e);return{tools:[],agents:[],isAutoCompactEnabled:this.state.autoCompactThreshold!==void 0,apiUsage:s,totalTokens:o,...r!==void 0?{percentage:r}:{},maxTokens:n}}async mcpServerStatus(){return this.mcpManager?this.mcpManager.getServerStates().map(e=>({name:e.serverName,status:e.status})):[]}async accountInfo(){return{subscriptionType:this.retry.authMode==="oauth"?"claude-subscription":"api-key"}}async reauth(){return this.retry.forceClientRefresh()}async rewindFiles(e,n){return{canRewind:!1,error:"anthropic-direct provider does not support file checkpoint rewind"}}async compact(){return qv({state:this.state,abort:this.abort,retry:this.retry,initSessionId:this.initSessionId,...this.traceWriter?{traceWriter:this.traceWriter}:{}})}close(){this.state.closed=!0,this.abort.requestAbort("closed"),this.abort.markClosed()}}});function Pu(t,e){let n=Ci(e),r=t.maxOutputTokens;if(typeof r=="number"&&Number.isFinite(r)&&r>0){let o=Math.floor(r);if(o>n){let s=`max:${e}:${o}`;return Oa.has(s)||(Oa.add(s),console.warn(`[afk] maxOutputTokens ${o} exceeds the ${e} output ceiling (${n}); clamping to ${n}.`)),n}return o}return n}function Xv(t){if(!t||t.length===0)return;let e=[];for(let n of t)n.user.length>0&&e.push({role:"user",content:n.user}),n.assistant.length>0&&e.push({role:"assistant",content:n.assistant});return e.length>0?e:void 0}function Cu(t,e,n){switch(t.type){case"adaptive":return{type:"adaptive",display:"summarized"};case"disabled":return{type:"disabled"};case"enabled":{if(typeof n=="string"&&mF(n))return{type:"adaptive",display:"summarized"};let r=Math.floor(e*gF),o=Math.max(1024,e-1-r),s=t.budgetTokens!==void 0&&Number.isFinite(t.budgetTokens)?Math.floor(t.budgetTokens):void 0,i=Math.min(Math.max(s??o,1024),o);if(s!==void 0&&s>o){let a=`think:${n??"default"}:${s}:${e}`;Oa.has(a)||(Oa.add(a),console.warn(`[afk] thinking budgetTokens ${s} leaves too little of max_tokens ${e} for the reply; clamping to ${o}.`))}return{type:"enabled",budget_tokens:i,display:"summarized"}}}}function Iu(t,e){if(t!==void 0)return t;let n=e.toLowerCase();if(/(claude-)?(opus|sonnet)-4-[678]|(claude-)?sonnet-5/.test(n))return"max"}var fF,mF,Oa,gF,Mu=y(()=>{"use strict";Br();Fi();fF=t=>/opus-4-(7|[89])/.test(t),mF=t=>fF(t)||/(claude-)?sonnet-5/.test(t),Oa=new Set,gF=.25});import{mkdirSync as hF,appendFileSync as yF,existsSync as bF}from"fs";import{resolve as wF}from"path";import{dirname as SF}from"path";function Du(t){let e=t;for(let[n,r]of _F)e=e.replace(n,(...o)=>{let s=o.slice(0,o.length-2);return r(s)});return e}function Ou(t){return typeof t=="string"?Du(t):Array.isArray(t)?t.map(Ou):t}function EF(t){if(t===null||typeof t!="object")return t;let e=t,n={...e},r=e.env;if(r&&typeof r=="object"){let o={};for(let[s,i]of Object.entries(r))kF.test(s)&&typeof i=="string"?o[s]=`<REDACTED length=${i.length}>`:o[s]=i;n.env=o}return"system"in e&&(n.system=Ou(e.system)),"systemPrompt"in e&&(n.systemPrompt=Ou(e.systemPrompt)),n}function AF(t){if(t==null)return{kind:"undefined",note:"SDK uses minimal prompt; claude_code preset NOT loaded"};if(typeof t=="string")return{kind:"custom-string",note:"SDK uses this string as full system prompt; claude_code preset NOT loaded"};if(Array.isArray(t))return{kind:"custom-string-array",note:"SDK uses array as full system prompt with cache boundaries; claude_code preset NOT loaded"};if(typeof t=="object"){let e=t;if(e.type==="preset"&&e.preset==="claude_code"){let n={kind:"preset-claude-code",note:"claude_code preset loaded"};return typeof e.append=="string"&&(n.append={length:e.append.length}),e.excludeDynamicSections===!0&&(n.excludeDynamicSections=!0),n}return{kind:"custom-string",note:"Unrecognized systemPrompt shape; treated as opaque"}}return{kind:"custom-string",note:"Unrecognized systemPrompt shape; treated as opaque"}}function Qv(t){let e=A.AFK_DUMP_PROMPT;if(!e||e===""||e==="0"||e.toLowerCase()==="false")return;process.stderr.write(`[--dump-prompt] WARNING: dump may contain secrets from system prompt or messages. Inspect before sharing.
|