agent-afk 5.201.0 → 5.201.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/tools/handlers/_rolling-tail.d.ts +1 -0
- package/dist/cli.mjs +8 -8
- package/dist/index.mjs +109 -109
- package/dist/telegram.mjs +6 -6
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -310,12 +310,12 @@ ${n}
|
|
|
310
310
|
Remedy: these paths are outside the fork's granted read roots. Re-dispatch with the needed paths inside the child's cwd/worktree, or pass explicit readRoots granting them. If this worker is deliberately confined (e.g. an \`afk farm\` branch worker), this failure is expected \u2014 the paths are outside its assigned scope; widen the scope or narrow the task.`}var Vc,tH,w_,Um=b(()=>{"use strict";Vc="denial-breaker",tH=new Set(["read_file","list_directory","glob","grep"]),w_="Sub-agent path access denied:"});import{createHash as rwe}from"node:crypto";function iH(){return{recent:[],firedFingerprints:new Set}}function Qb(e){let t;try{t=iwe(e.input)}catch{t=String(e.input)}return rwe("sha256").update(e.name).update("\0").update(t).digest("hex")}function iwe(e){return JSON.stringify(S_(e))??"null"}function S_(e){if(Array.isArray(e))return e.map(S_);if(e!==null&&typeof e=="object"){let t=e,n={};for(let r of Object.keys(t).sort())n[r]=S_(t[r]);return n}return e}function swe(e,t){let n=0;for(let r of e)r===t&&(n+=1);return n}function sH(e,t){e.recent.push(t),e.recent.length>v_&&e.recent.shift();let n=swe(e.recent,t);return n>=owe&&!e.firedFingerprints.has(t)?(e.firedFingerprints.add(t),{fired:!0,count:n}):{fired:!1,count:n}}var owe,v_,k_=b(()=>{"use strict";owe=5,v_=20});function lwe(e){if(e===null||typeof e!="object"||Array.isArray(e))return e;let t={};for(let[n,r]of Object.entries(e))awe.has(n)||(t[n]=r);return t}function jm(e){return Qb({...e,input:lwe(e.input)})}function cwe(e){let t=e.content.split(`
|
|
311
311
|
`).find(n=>n.trim()!=="")?.trim()??"";return t.length<=aH?t:`${t.slice(0,aH)}\u2026`}var T_,awe,aH,Zb,E_=b(()=>{"use strict";k_();T_=3,awe=new Set(["timeout_ms","timeoutMs","timeout"]),aH=240;Zb=class{streaks=new Map;check(t){let n=this.streaks.get(jm(t));return n===void 0||n.count<T_?null:{count:n.count,tool:t.name,result:{content:`Repeat-failure guard: "${t.name}" has already failed ${n.count} times in a row with the same arguments, so this call was NOT executed again. The last failure was: ${n.lastError}
|
|
312
312
|
|
|
313
|
-
Retrying it verbatim will fail the same way. Fix the underlying cause, change the arguments, use a different tool, or stop and report the blocker.`,isError:!0,failureClass:"repeat-failure"}}}note(t,n){let r=jm(t);if(n.isError!==!0){this.streaks.delete(r);return}let o=this.streaks.get(r);this.streaks.set(r,{count:(o?.count??0)+1,lastError:cwe(n)})}streakFor(t){return this.streaks.get(jm(t))?.count??0}}});async function Jc(e,t,n){let r=new Array(e.length),o=Math.min(Math.max(1,Math.floor(t)),e.length),i=0,s=[];for(let a=0;a<o;a++)s.push((async()=>{for(;i<e.length;){let l=i++;try{r[l]={status:"fulfilled",value:await n(e[l])}}catch(c){r[l]={status:"rejected",reason:c}}}})());return await Promise.all(s),r}var ew=b(()=>{"use strict";Im()});function lH(e,t,n){if(n.has(e.name))return null;let r=t.check(e);return r===null?null:(N(`[repeat-failure-guard #723] refused ${r.tool} after ${r.count} identical failures`),r.result)}function uwe(e){if(!e)return{enter:()=>{},leave:()=>{}};let t=new Set,n=()=>{try{e([...t])}catch{}};return{enter:r=>{t.add(r),n()},leave:r=>{t.delete(r),n()}}}async function dwe(e,t,n,r){let{call:o,originalIndex:i}=t[e];if(o.signal.aborted)return{result:{content:"Tool call aborted",isError:!0,failureClass:on(o.signal)},originalIndex:i};r?.enter(o.id);try{return{result:await n(o),originalIndex:i}}finally{r?.leave(o.id)}}function pwe(e,t,n,r){for(let o of e)if(o.status==="fulfilled")r[o.value.originalIndex]=o.value.result;else{let i=o.reason instanceof Error?o.reason.message:String(o.reason),s=t[e.indexOf(o)];r[n[s].originalIndex]={content:`Tool execution error: ${i}`,isError:!0}}}function cH(e,t,n){let r=e.indices.length;for(let o=0;o<e.indices.length;o++){let i=e.indices[o],s=n[t[i].originalIndex];s&&(s.batchIndex=o+1,s.batchSize=r)}}async function uH(e,t,n,r){let o=[...e.indices];for(;o.length>0;){let i=new Map,s=[],a=[];for(let d of o){let{call:p,originalIndex:f}=t[d],g=lH(p,r.repeatFailureGuard,r.repeatBreakerExemptTools);if(g){n[f]=g;continue}if(r.repeatBreakerExemptTools.has(p.name)){s.push(d);continue}let h=jm(p),y=T_-r.repeatFailureGuard.streakFor(p),w=i.get(h)??0;w<y?(i.set(h,w+1),s.push(d)):a.push(d)}o=a;let l=s.map(d=>t[d]?.call).filter(d=>d!==void 0&&d.name==="agent");if(l.length>=2&&r.subagentExecutor)try{r.subagentExecutor.notifyWaveStart(l,r.sessionId??"",null)}catch{}let c=uwe(r.onActivity),u=await Jc(s,r.maxConcurrentSafeCalls,d=>dwe(d,t,r.executeCore,c));pwe(u,s,t,n);for(let d of s){let{call:p,originalIndex:f}=t[d],g=n[f];g!==void 0&&g.failureClass!=="abort"&&r.repeatFailureGuard.note(p,g)}if(l.length>=2&&r.subagentExecutor)try{r.subagentExecutor.notifyWaveEnd()}catch{}}}async function dH(e,t,n,r){for(let o of e.indices){let{call:i,originalIndex:s}=t[o];if(i.signal.aborted){n[s]={content:"Tool call aborted",isError:!0,failureClass:on(i.signal)};continue}let a=lH(i,r.repeatFailureGuard,r.repeatBreakerExemptTools);if(a){n[s]=a;continue}let l=await r.executeCore(i);n[s]=l,r.repeatFailureGuard.note(i,l)}}var pH=b(()=>{"use strict";Ui();ew();fe();E_()});function mH(e){return e==="agent"||e==="cancel_background_job"||e==="send_message_to_agent"}async function fH(e,t){if(!e)return{result:{content:t.name==="agent"?"Agent tool is not available in this session configuration":"Background mode is not available in this session configuration",isError:!0}};try{return{result:t.name==="agent"?await e.execute(t):t.name==="send_message_to_agent"?await e.sendMessageToAgent(t):await e.cancelBackgroundJob(t)}}catch(n){let r=n instanceof Error?n.message:String(n);return{result:{content:`${t.name==="agent"?"Agent":t.name==="send_message_to_agent"?"Steering":"Background cancellation"} tool error: ${r}`,isError:!0},thrownMessage:r}}}var gH=b(()=>{"use strict"});var Yc,x_,hn,Xc=b(()=>{"use strict";Im();fe();je();Ui();_b();Mb();KC();ro();xb();pe();b_();eH();Um();k_();E_();pH();gH();b_();Yc=8,x_=new Set,hn=class{handlers;schemas;hookRegistry;permissions;canUseTool;subagentExecutor;skillExecutor;composeExecutor;classifier;maxConcurrentSafeCalls;resolveBase;_readRoots;_writeRoots;_allowAll;_env;sessionId;parentSessionId;subagentId;sessionGrantManager;traceWriter;readOnlyBash;maxOutputBytes;spawnedPidRegistry;bashOutputTailReporter;repeatBreaker=null;repeatFailureGuard=new Zb;denialBreaker=null;suspectedLoopWindow=null;grantManager;constructor(t){this.handlers=t.handlers,this.schemas=t.schemas,this.hookRegistry=t.hookRegistry,this.permissions=t.permissions,this.canUseTool=t.canUseTool,this.subagentExecutor=t.subagentExecutor,this.skillExecutor=t.skillExecutor,this.composeExecutor=t.composeExecutor,this.classifier=t.concurrencyClassifier??y_,this.maxConcurrentSafeCalls=typeof t.maxConcurrentSafeCalls=="number"&&Number.isFinite(t.maxConcurrentSafeCalls)&&t.maxConcurrentSafeCalls>=1?Math.floor(t.maxConcurrentSafeCalls):Jj(),this.resolveBase=t.cwd,this._env=t.env,this.sessionId=t.sessionId,this.parentSessionId=t.parentSessionId,this.subagentId=t.subagentId,this.sessionGrantManager=t.sessionGrantManager,this.traceWriter=t.traceWriter,this.readOnlyBash=t.readOnlyBash===!0,this.maxOutputBytes=typeof t.maxOutputBytes=="number"&&Number.isFinite(t.maxOutputBytes)&&t.maxOutputBytes>0?t.maxOutputBytes:void 0,this._allowAll=t.allowAll===!0,this.spawnedPidRegistry=t.spawnedPidRegistry,this.bashOutputTailReporter=t.bashOutputTailReporter;let n=t.cwd?[t.cwd]:[];this._readRoots=t.readRoots??n.slice(),this._writeRoots=t.writeRoots??n.slice(),this.grantManager=new Ni({getReadRoots:()=>this._readRoots,getWriteRoots:()=>this._writeRoots,getProtectedRoot:()=>this.resolveBase,getAllowAll:()=>this._allowAll,getDefaultSessionId:()=>this.sessionId})}get handlerContext(){return{cwd:this.resolveBase,resolveBase:this.resolveBase,readRoots:this._readRoots.slice(),writeRoots:this._writeRoots.slice(),...this._allowAll?{allowAll:!0}:{},...this._env!==void 0?{env:this._env}:{},...this.sessionId!==void 0?{sessionId:this.sessionId}:{},...this.spawnedPidRegistry!==void 0?{spawnedPidRegistry:this.spawnedPidRegistry}:{}}}callHandlerContext(t){let n=this.bashOutputTailReporter!==void 0&&t.id?this.bashOutputTailReporter(t.id):void 0;return{...this.handlerContext,toolUseId:t.id,...this.traceWriter!==void 0?{traceWriter:this.traceWriter}:{},...n!==void 0?{onBashOutputTail:n}:{}}}addReadRoot(t,n="slash",r){this.grantManager.addReadRoot(t,n,r)}addWriteRoot(t,n="slash",r){this.grantManager.addWriteRoot(t,n,r)}revokeRoot(t,n="slash",r){this.grantManager.revokeRoot(t,n,r)}getGrants(){return this.grantManager.getGrants()}setAllowAll(t){this._allowAll=t}setResolveBase(t){let n=this.resolveBase;if(n!==t){if(this.resolveBase=t,n!==void 0){let r=this._readRoots.indexOf(n);r!==-1?this._readRoots[r]=t:this._readRoots.includes(t)||this._readRoots.push(t);let o=this._writeRoots.indexOf(n);o!==-1?this._writeRoots[o]=t:this._writeRoots.includes(t)||this._writeRoots.push(t)}else this._readRoots.includes(t)||this._readRoots.push(t),this._writeRoots.includes(t)||this._writeRoots.push(t);this.subagentExecutor?.setCwd(t),this.skillExecutor?.setCwd(t),this.composeExecutor?.setCwd(t)}}get toolDefs(){let t=this.subagentExecutor?.supportsBackgroundJobs?.()?this.schemas:this.schemas.filter(o=>o.name!=="cancel_background_job"&&o.name!=="send_message_to_agent"),n=this.permissions?.allowedTools;if(!n)return t;let r=new Set(n);return t.filter(o=>r.has(o.name))}denialReason(t,n){return this.isRegisteredTool(t)?n??`Tool "${t}" is not permitted`:this.unknownToolMessage(t)}isRegisteredTool(t){return this.handlers.has(t)||t==="agent"&&this.subagentExecutor!==void 0||t==="cancel_background_job"&&this.subagentExecutor?.supportsBackgroundJobs?.()===!0||t==="send_message_to_agent"&&this.subagentExecutor?.supportsBackgroundJobs?.()===!0||t==="skill"&&this.skillExecutor!==void 0||t==="compose"&&this.composeExecutor!==void 0}unknownToolMessage(t){let n=this.toolDefs.map(o=>o.name).join(", "),r=n.length>0?`Available tools: ${n}. Do NOT retry "${t}" or a variant of it; use one of the tools listed above.`:`Do NOT retry "${t}" or a variant of it.`;return`Unknown tool "${t}" \u2014 it does not exist in this session. ${r}`}async checkReadOnlyBash(t){if(!this.readOnlyBash||t.name!=="bash")return null;let n=t.input,r=typeof n=="object"&&n!==null?n.command:void 0;if(typeof r!="string")return null;let o=Db(r);if(!o.mutating)return null;let i=`Bash command blocked: read-only skill may not run mutating commands (${o.reason??"mutation detected"}). Allowed: read-only recon (git status/log/diff/show/ls-remote, ls, cat, find, grep, gh pr view/diff). For a remote ref you have not fetched, \`gh pr diff <n>\`, \`gh pr view <n>\` and \`git ls-remote\` need no local ref \u2014 \`git fetch\` is blocked. Do NOT retry variants of a blocked command: if the task genuinely requires a mutation, stop and report that requirement to your caller instead.`;return await this.emitPreToolUseBlock(t.name,i),{content:i,isError:!0,failureClass:"permission-denied"}}async emitPreToolUseBlock(t,n){await Vn(this.traceWriter,{hookEvent:"PreToolUse",decision:"block",blockedTool:t,reason:n,...this.subagentId!==void 0?{subagentId:this.subagentId}:{}})}checkRepeatCircuitBreaker(t){if(x_.has(t.name))return null;let n=Z1(t);return this.repeatBreaker!==null&&this.repeatBreaker.fingerprint===n?this.repeatBreaker.count+=1:this.repeatBreaker={fingerprint:n,count:1},this.repeatBreaker.count<Yc?null:{content:`Loop circuit breaker: "${t.name}" has been called ${this.repeatBreaker.count} times in a row with byte-identical input. The result will not change. Stop repeating this call \u2014 reuse the previous result, change the input, try a different tool, or end the turn.`,isError:!0,circuitBreaker:!0}}checkRepeatFailureGuard(t){if(x_.has(t.name))return null;let n=this.repeatFailureGuard.check(t);return n===null?null:(N(`[repeat-failure-guard #723] refused ${n.tool} after ${n.count} identical failures`),n.result)}observeSuspectedLoop(t){if(this.parentSessionId===void 0)return;this.suspectedLoopWindow===null&&(this.suspectedLoopWindow=iH());let n=Qb(t),r=sH(this.suspectedLoopWindow,n);r.fired&&re(this.traceWriter,{phase:"suspected_loop",metadata:{tool:t.name,count:r.count,windowSize:v_}})}recordForkReadDenial(t,n,r){if(this.parentSessionId===void 0||!tH.has(t.name)||!nH(n))return r;let o=this.denialBreaker??{count:0,deniedPaths:[]};o.count+=1;let i=rH(t);return o.deniedPaths.includes(i)||o.deniedPaths.push(i),this.denialBreaker=o,o.count<5?r:{content:oH(o.deniedPaths,o.count),isError:!0,failureClass:Vc}}resetDenialBreaker(){this.denialBreaker=null}async runCanUseTool(t){if(!this.canUseTool)return null;let n;try{n=await this.canUseTool(t.name,t.input??{},{signal:t.signal,toolUseID:t.id})}catch(r){let o=`Tool "${t.name}" denied by canUseTool (threw): ${r instanceof Error?r.message:String(r)}`;return await this.emitPreToolUseBlock(t.name,o),{content:o,isError:!0,failureClass:"permission-denied"}}if(n.behavior==="deny"){let r=n.message||`Tool "${t.name}" denied by permission policy`;return await this.emitPreToolUseBlock(t.name,r),{content:r,isError:!0,failureClass:"permission-denied"}}return n.updatedInput!==void 0&&(t.input=n.updatedInput),null}async runPreDispatchGates(t){if(this.hookRegistry){let a={event:"PreToolUse",toolName:t.name,input:t.input,...this.sessionId!==void 0?{sessionId:this.sessionId}:{},...this.resolveBase!==void 0?{cwd:this.resolveBase}:{},...this.parentSessionId!==void 0?{parentSessionId:this.parentSessionId}:{},...this.sessionGrantManager!==void 0?{grantManager:this.sessionGrantManager}:{},...t.id!==void 0?{toolUseId:t.id}:{}};try{await e1(this.hookRegistry,a,{signal:t.signal,...this.traceWriter?{traceWriter:this.traceWriter}:{}})}catch(l){if(l instanceof Re)return this.recordForkReadDenial(t,l.reason,{content:`Tool "${t.name}" blocked by PreToolUse hook${l.reason?`: ${l.reason}`:""}${l.injectContext?`
|
|
313
|
+
Retrying it verbatim will fail the same way. Fix the underlying cause, change the arguments, use a different tool, or stop and report the blocker.`,isError:!0,failureClass:"repeat-failure"}}}note(t,n){let r=jm(t);if(n.isError!==!0){this.streaks.delete(r);return}let o=this.streaks.get(r);this.streaks.set(r,{count:(o?.count??0)+1,lastError:cwe(n)})}streakFor(t){return this.streaks.get(jm(t))?.count??0}}});async function Jc(e,t,n){let r=new Array(e.length),o=Math.min(Math.max(1,Math.floor(t)),e.length),i=0,s=[];for(let a=0;a<o;a++)s.push((async()=>{for(;i<e.length;){let l=i++;try{r[l]={status:"fulfilled",value:await n(e[l])}}catch(c){r[l]={status:"rejected",reason:c}}}})());return await Promise.all(s),r}var ew=b(()=>{"use strict";Im()});function lH(e,t,n){if(n.has(e.name))return null;let r=t.check(e);return r===null?null:(N(`[repeat-failure-guard #723] refused ${r.tool} after ${r.count} identical failures`),r.result)}function uwe(e){if(!e)return{enter:()=>{},leave:()=>{}};let t=new Set,n=()=>{try{e([...t])}catch{}};return{enter:r=>{t.add(r),n()},leave:r=>{t.delete(r),n()}}}async function dwe(e,t,n,r){let{call:o,originalIndex:i}=t[e];if(o.signal.aborted)return{result:{content:"Tool call aborted",isError:!0,failureClass:on(o.signal)},originalIndex:i};r?.enter(o.id);try{return{result:await n(o),originalIndex:i}}finally{r?.leave(o.id)}}function pwe(e,t,n,r){for(let o of e)if(o.status==="fulfilled")r[o.value.originalIndex]=o.value.result;else{let i=o.reason instanceof Error?o.reason.message:String(o.reason),s=t[e.indexOf(o)];r[n[s].originalIndex]={content:`Tool execution error: ${i}`,isError:!0}}}function cH(e,t,n){let r=e.indices.length;for(let o=0;o<e.indices.length;o++){let i=e.indices[o],s=n[t[i].originalIndex];s&&(s.batchIndex=o+1,s.batchSize=r)}}async function uH(e,t,n,r){let o=[...e.indices];for(;o.length>0;){let i=new Map,s=[],a=[];for(let d of o){let{call:p,originalIndex:f}=t[d],g=lH(p,r.repeatFailureGuard,r.repeatBreakerExemptTools);if(g){n[f]=g;continue}if(r.repeatBreakerExemptTools.has(p.name)){s.push(d);continue}let h=jm(p),y=T_-r.repeatFailureGuard.streakFor(p),w=i.get(h)??0;w<y?(i.set(h,w+1),s.push(d)):a.push(d)}o=a;let l=s.map(d=>t[d]?.call).filter(d=>d!==void 0&&d.name==="agent");if(l.length>=2&&r.subagentExecutor)try{r.subagentExecutor.notifyWaveStart(l,r.sessionId??"",null)}catch{}let c=uwe(r.onActivity),u=await Jc(s,r.maxConcurrentSafeCalls,d=>dwe(d,t,r.executeCore,c));pwe(u,s,t,n);for(let d of s){let{call:p,originalIndex:f}=t[d],g=n[f];g!==void 0&&g.failureClass!=="abort"&&r.repeatFailureGuard.note(p,g)}if(l.length>=2&&r.subagentExecutor)try{r.subagentExecutor.notifyWaveEnd()}catch{}}}async function dH(e,t,n,r){for(let o of e.indices){let{call:i,originalIndex:s}=t[o];if(i.signal.aborted){n[s]={content:"Tool call aborted",isError:!0,failureClass:on(i.signal)};continue}let a=lH(i,r.repeatFailureGuard,r.repeatBreakerExemptTools);if(a){n[s]=a;continue}let l=await r.executeCore(i);n[s]=l,r.repeatFailureGuard.note(i,l)}}var pH=b(()=>{"use strict";Ui();ew();fe();E_()});function mH(e){return e==="agent"||e==="cancel_background_job"||e==="send_message_to_agent"}async function fH(e,t){if(!e)return{result:{content:t.name==="agent"?"Agent tool is not available in this session configuration":"Background mode is not available in this session configuration",isError:!0}};try{return{result:t.name==="agent"?await e.execute(t):t.name==="send_message_to_agent"?await e.sendMessageToAgent(t):await e.cancelBackgroundJob(t)}}catch(n){let r=n instanceof Error?n.message:String(n);return{result:{content:`${t.name==="agent"?"Agent":t.name==="send_message_to_agent"?"Steering":"Background cancellation"} tool error: ${r}`,isError:!0},thrownMessage:r}}}var gH=b(()=>{"use strict"});var Yc,x_,hn,Xc=b(()=>{"use strict";Im();fe();je();Ui();_b();Mb();KC();ro();xb();pe();b_();eH();Um();k_();E_();pH();gH();b_();Yc=8,x_=new Set,hn=class{handlers;schemas;hookRegistry;permissions;canUseTool;subagentExecutor;skillExecutor;composeExecutor;classifier;maxConcurrentSafeCalls;resolveBase;_readRoots;_writeRoots;_allowAll;_env;sessionId;parentSessionId;subagentId;sessionGrantManager;traceWriter;readOnlyBash;maxOutputBytes;spawnedPidRegistry;bashOutputTailReporter;repeatBreaker=null;repeatFailureGuard=new Zb;denialBreaker=null;suspectedLoopWindow=null;grantManager;constructor(t){this.handlers=t.handlers,this.schemas=t.schemas,this.hookRegistry=t.hookRegistry,this.permissions=t.permissions,this.canUseTool=t.canUseTool,this.subagentExecutor=t.subagentExecutor,this.skillExecutor=t.skillExecutor,this.composeExecutor=t.composeExecutor,this.classifier=t.concurrencyClassifier??y_,this.maxConcurrentSafeCalls=typeof t.maxConcurrentSafeCalls=="number"&&Number.isFinite(t.maxConcurrentSafeCalls)&&t.maxConcurrentSafeCalls>=1?Math.floor(t.maxConcurrentSafeCalls):Jj(),this.resolveBase=t.cwd,this._env=t.env,this.sessionId=t.sessionId,this.parentSessionId=t.parentSessionId,this.subagentId=t.subagentId,this.sessionGrantManager=t.sessionGrantManager,this.traceWriter=t.traceWriter,this.readOnlyBash=t.readOnlyBash===!0,this.maxOutputBytes=typeof t.maxOutputBytes=="number"&&Number.isFinite(t.maxOutputBytes)&&t.maxOutputBytes>0?t.maxOutputBytes:void 0,this._allowAll=t.allowAll===!0,this.spawnedPidRegistry=t.spawnedPidRegistry,this.bashOutputTailReporter=t.bashOutputTailReporter;let n=t.cwd?[t.cwd]:[];this._readRoots=t.readRoots??n.slice(),this._writeRoots=t.writeRoots??n.slice(),this.grantManager=new Ni({getReadRoots:()=>this._readRoots,getWriteRoots:()=>this._writeRoots,getProtectedRoot:()=>this.resolveBase,getAllowAll:()=>this._allowAll,getDefaultSessionId:()=>this.sessionId})}get handlerContext(){return{cwd:this.resolveBase,resolveBase:this.resolveBase,readRoots:this._readRoots.slice(),writeRoots:this._writeRoots.slice(),...this._allowAll?{allowAll:!0}:{},...this._env!==void 0?{env:this._env}:{},...this.sessionId!==void 0?{sessionId:this.sessionId}:{},...this.spawnedPidRegistry!==void 0?{spawnedPidRegistry:this.spawnedPidRegistry}:{}}}callHandlerContext(t){let n=t.name==="bash"&&this.bashOutputTailReporter!==void 0&&t.id?this.bashOutputTailReporter(t.id):void 0;return{...this.handlerContext,toolUseId:t.id,...this.traceWriter!==void 0?{traceWriter:this.traceWriter}:{},...n!==void 0?{onBashOutputTail:n}:{}}}addReadRoot(t,n="slash",r){this.grantManager.addReadRoot(t,n,r)}addWriteRoot(t,n="slash",r){this.grantManager.addWriteRoot(t,n,r)}revokeRoot(t,n="slash",r){this.grantManager.revokeRoot(t,n,r)}getGrants(){return this.grantManager.getGrants()}setAllowAll(t){this._allowAll=t}setResolveBase(t){let n=this.resolveBase;if(n!==t){if(this.resolveBase=t,n!==void 0){let r=this._readRoots.indexOf(n);r!==-1?this._readRoots[r]=t:this._readRoots.includes(t)||this._readRoots.push(t);let o=this._writeRoots.indexOf(n);o!==-1?this._writeRoots[o]=t:this._writeRoots.includes(t)||this._writeRoots.push(t)}else this._readRoots.includes(t)||this._readRoots.push(t),this._writeRoots.includes(t)||this._writeRoots.push(t);this.subagentExecutor?.setCwd(t),this.skillExecutor?.setCwd(t),this.composeExecutor?.setCwd(t)}}get toolDefs(){let t=this.subagentExecutor?.supportsBackgroundJobs?.()?this.schemas:this.schemas.filter(o=>o.name!=="cancel_background_job"&&o.name!=="send_message_to_agent"),n=this.permissions?.allowedTools;if(!n)return t;let r=new Set(n);return t.filter(o=>r.has(o.name))}denialReason(t,n){return this.isRegisteredTool(t)?n??`Tool "${t}" is not permitted`:this.unknownToolMessage(t)}isRegisteredTool(t){return this.handlers.has(t)||t==="agent"&&this.subagentExecutor!==void 0||t==="cancel_background_job"&&this.subagentExecutor?.supportsBackgroundJobs?.()===!0||t==="send_message_to_agent"&&this.subagentExecutor?.supportsBackgroundJobs?.()===!0||t==="skill"&&this.skillExecutor!==void 0||t==="compose"&&this.composeExecutor!==void 0}unknownToolMessage(t){let n=this.toolDefs.map(o=>o.name).join(", "),r=n.length>0?`Available tools: ${n}. Do NOT retry "${t}" or a variant of it; use one of the tools listed above.`:`Do NOT retry "${t}" or a variant of it.`;return`Unknown tool "${t}" \u2014 it does not exist in this session. ${r}`}async checkReadOnlyBash(t){if(!this.readOnlyBash||t.name!=="bash")return null;let n=t.input,r=typeof n=="object"&&n!==null?n.command:void 0;if(typeof r!="string")return null;let o=Db(r);if(!o.mutating)return null;let i=`Bash command blocked: read-only skill may not run mutating commands (${o.reason??"mutation detected"}). Allowed: read-only recon (git status/log/diff/show/ls-remote, ls, cat, find, grep, gh pr view/diff). For a remote ref you have not fetched, \`gh pr diff <n>\`, \`gh pr view <n>\` and \`git ls-remote\` need no local ref \u2014 \`git fetch\` is blocked. Do NOT retry variants of a blocked command: if the task genuinely requires a mutation, stop and report that requirement to your caller instead.`;return await this.emitPreToolUseBlock(t.name,i),{content:i,isError:!0,failureClass:"permission-denied"}}async emitPreToolUseBlock(t,n){await Vn(this.traceWriter,{hookEvent:"PreToolUse",decision:"block",blockedTool:t,reason:n,...this.subagentId!==void 0?{subagentId:this.subagentId}:{}})}checkRepeatCircuitBreaker(t){if(x_.has(t.name))return null;let n=Z1(t);return this.repeatBreaker!==null&&this.repeatBreaker.fingerprint===n?this.repeatBreaker.count+=1:this.repeatBreaker={fingerprint:n,count:1},this.repeatBreaker.count<Yc?null:{content:`Loop circuit breaker: "${t.name}" has been called ${this.repeatBreaker.count} times in a row with byte-identical input. The result will not change. Stop repeating this call \u2014 reuse the previous result, change the input, try a different tool, or end the turn.`,isError:!0,circuitBreaker:!0}}checkRepeatFailureGuard(t){if(x_.has(t.name))return null;let n=this.repeatFailureGuard.check(t);return n===null?null:(N(`[repeat-failure-guard #723] refused ${n.tool} after ${n.count} identical failures`),n.result)}observeSuspectedLoop(t){if(this.parentSessionId===void 0)return;this.suspectedLoopWindow===null&&(this.suspectedLoopWindow=iH());let n=Qb(t),r=sH(this.suspectedLoopWindow,n);r.fired&&re(this.traceWriter,{phase:"suspected_loop",metadata:{tool:t.name,count:r.count,windowSize:v_}})}recordForkReadDenial(t,n,r){if(this.parentSessionId===void 0||!tH.has(t.name)||!nH(n))return r;let o=this.denialBreaker??{count:0,deniedPaths:[]};o.count+=1;let i=rH(t);return o.deniedPaths.includes(i)||o.deniedPaths.push(i),this.denialBreaker=o,o.count<5?r:{content:oH(o.deniedPaths,o.count),isError:!0,failureClass:Vc}}resetDenialBreaker(){this.denialBreaker=null}async runCanUseTool(t){if(!this.canUseTool)return null;let n;try{n=await this.canUseTool(t.name,t.input??{},{signal:t.signal,toolUseID:t.id})}catch(r){let o=`Tool "${t.name}" denied by canUseTool (threw): ${r instanceof Error?r.message:String(r)}`;return await this.emitPreToolUseBlock(t.name,o),{content:o,isError:!0,failureClass:"permission-denied"}}if(n.behavior==="deny"){let r=n.message||`Tool "${t.name}" denied by permission policy`;return await this.emitPreToolUseBlock(t.name,r),{content:r,isError:!0,failureClass:"permission-denied"}}return n.updatedInput!==void 0&&(t.input=n.updatedInput),null}async runPreDispatchGates(t){if(this.hookRegistry){let a={event:"PreToolUse",toolName:t.name,input:t.input,...this.sessionId!==void 0?{sessionId:this.sessionId}:{},...this.resolveBase!==void 0?{cwd:this.resolveBase}:{},...this.parentSessionId!==void 0?{parentSessionId:this.parentSessionId}:{},...this.sessionGrantManager!==void 0?{grantManager:this.sessionGrantManager}:{},...t.id!==void 0?{toolUseId:t.id}:{}};try{await e1(this.hookRegistry,a,{signal:t.signal,...this.traceWriter?{traceWriter:this.traceWriter}:{}})}catch(l){if(l instanceof Re)return this.recordForkReadDenial(t,l.reason,{content:`Tool "${t.name}" blocked by PreToolUse hook${l.reason?`: ${l.reason}`:""}${l.injectContext?`
|
|
314
314
|
|
|
315
315
|
${l.injectContext}`:""}`,isError:!0,failureClass:"hook-block"});throw l}}let n=r1(t.name,this.permissions);if(!n.allowed){let a=this.denialReason(t.name,n.reason);return await this.emitPreToolUseBlock(t.name,a),{content:a,isError:!0,failureClass:"permission-denied"}}let r=await this.runCanUseTool(t);if(r)return r;let o=await this.checkReadOnlyBash(t);if(o)return o;let i=this.checkRepeatCircuitBreaker(t);if(i)return i;let s=this.checkRepeatFailureGuard(t);return s||(this.observeSuspectedLoop(t),null)}async execute(t){if(t.signal.aborted)return{content:"Tool call aborted",isError:!0,failureClass:on(t.signal)};let n=await this.runPreDispatchGates(t);if(n)return n;let r=await this.executeCore(t);return this.repeatFailureGuard.note(t,r),r.isError!==!0&&this.resetDenialBreaker(),r}async executeBatch(t,n){if(t.length===0)return[];if(t.length===1)return[await this.execute(t[0])];let r=new Array(t.length),o=new Set;for(let l=0;l<t.length;l++){let c=t[l];if(c.signal.aborted){r[l]={content:"Tool call aborted",isError:!0,failureClass:on(c.signal)},o.add(l);continue}let u=await this.runPreDispatchGates(c);if(u){r[l]=u,o.add(l);continue}}let i=t.map((l,c)=>({call:l,originalIndex:c})).filter((l,c)=>!o.has(c));if(i.length===0)return r;let s=Q1(i.map(l=>l.call),this.classifier),a={repeatFailureGuard:this.repeatFailureGuard,repeatBreakerExemptTools:x_,executeCore:l=>this.executeCore(l),subagentExecutor:this.subagentExecutor,sessionId:this.sessionId,maxConcurrentSafeCalls:this.maxConcurrentSafeCalls,onActivity:n};for(let l of s)l.isConcurrencySafe?await uH(l,i,r,a):await dH(l,i,r,a),cH(l,i,r);return r.some(l=>l!==void 0&&l.isError!==!0)&&this.resetDenialBreaker(),r}async executeCore(t){let n=await this.executeCoreInner(t);return this.applyOutputCap(n)}applyOutputCap(t){let n=this.maxOutputBytes;if(n===void 0)return t;let r=Buffer.byteLength(t.content,"utf8");return r<=n||(t.content=kr(t.content,n),t.truncated=!0,N(`[output-cap #661] fork tool result capped: original=${r}B capped=${Buffer.byteLength(t.content,"utf8")}B (cap=${n}B)`)),t}async executeCoreInner(t){if(mH(t.name)){let s=await fH(this.subagentExecutor,t);return s.thrownMessage!==void 0?this.firePostToolUseFailure(t.name,s.thrownMessage,t.signal,t.input):this.firePostToolUse(t.name,s.result.content,t.signal,t.input,s.result),s.result}if(t.name==="skill"){if(!this.skillExecutor)return{content:"Skill tool is not available in this session configuration",isError:!0};let s,a=!1,l="";try{s=await this.skillExecutor.execute(t)}catch(c){a=!0,l=c instanceof Error?c.message:String(c),s={content:`Skill tool error: ${l}`,isError:!0}}return a?this.firePostToolUseFailure(t.name,l,t.signal,t.input):this.firePostToolUse(t.name,s.content,t.signal,t.input,s),s}if(t.name==="compose"){let s=await this.executeCompose(t);return this.firePostToolUse(t.name,s.content,t.signal,t.input,s),s}let n=this.handlers.get(t.name);if(!n){let s=this.unknownToolMessage(t.name);return await this.emitPreToolUseBlock(t.name,s),{content:s,isError:!0,failureClass:"permission-denied"}}let r,o=!1,i="";try{r=await n(t.input,t.signal,this.callHandlerContext(t))}catch(s){o=!0,i=s instanceof Error?s.message:String(s),r={content:`Tool execution error: ${i}`,isError:!0}}return o?this.firePostToolUseFailure(t.name,i,t.signal,t.input):this.firePostToolUse(t.name,r.content,t.signal,t.input,r),r}async executeCompose(t){if(!this.composeExecutor)return{content:"Compose tool is not available in this session configuration",isError:!0};try{return await this.composeExecutor.execute(t)}catch(n){return{content:`Compose tool error: ${n instanceof Error?n.message:String(n)}`,isError:!0}}}firePostToolUse(t,n,r,o,i){if(!this.hookRegistry)return;let s={event:"PostToolUse",toolName:t,output:n,...o!==void 0?{input:o}:{},...this.sessionId!==void 0?{sessionId:this.sessionId}:{},...this.parentSessionId!==void 0?{parentSessionId:this.parentSessionId}:{},...this.sessionGrantManager?{grantManager:this.sessionGrantManager}:{},...i?.isError===!0?{isError:!0}:{},...i?.incomplete===!0?{incomplete:!0,...i.incompleteReason?{incompleteReason:i.incompleteReason}:{}}:{}};t1(this.hookRegistry,s,{signal:r,...this.traceWriter?{traceWriter:this.traceWriter}:{}}).catch(()=>{})}firePostToolUseFailure(t,n,r,o){if(!this.hookRegistry)return;let i={event:"PostToolUseFailure",toolName:t,error:n,...o!==void 0?{input:o}:{},...this.sessionId!==void 0?{sessionId:this.sessionId}:{},...this.parentSessionId!==void 0?{parentSessionId:this.parentSessionId}:{}};n1(this.hookRegistry,i,{signal:r,...this.traceWriter?{traceWriter:this.traceWriter}:{}}).catch(s=>{N(`firePostToolUseFailure outer catch (tool=${t}): ${String(s)}`)})}}});import{mkdir as fwe,writeFile as gwe}from"fs/promises";import{dirname as hwe,join as ywe}from"path";function bwe(){return ywe(Et(),"routing-decisions.jsonl")}function wwe(e){let t={surface:"afk"};for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=r);return t}async function Fe(e){if(!(k.VITEST||k.NODE_ENV==="test"))try{let t=bwe();await fwe(hwe(t),{recursive:!0});let n=new Date().toISOString().split(".")[0]+"Z",r=JSON.stringify({ts:n,...wwe(e)})+`
|
|
316
|
-
`;await gwe(t,r,{flag:"a"})}catch{}}var Er=b(()=>{"use strict";F();B()});function Pwe(e){let t=e.match(Swe);if(!t)return null;let n=parseInt(t[1]??"0",10),r=parseInt(t[2]??"0",10),o=t[3]!==void 0?parseInt(t[3],10):void 0;return{runner:"vitest",passed:n,failed:r,...o!==void 0?{skipped:o}:{}}}function Iwe(e){let t=e.match(vwe);if(!t)return null;let n=parseInt(t[1]??"0",10);return{runner:"jest",passed:parseInt(t[2]??"0",10),failed:n}}function Mwe(e){let t=e.match(kwe);if(!t)return null;if(t[2]!==void 0){let n=parseInt(t[2],10),r=parseInt(t[1]??"0",10);return{runner:"pytest",passed:n,failed:r}}return t[4]!==void 0?{runner:"pytest",passed:parseInt(t[4],10),failed:0}:null}function Owe(e){let t=e.match(Twe);if(!t)return null;let n=parseInt(t[1]??"0",10),r=e.match(Ewe),o=r?parseInt(r[1]??"0",10):0;return{runner:"mocha",passed:n,failed:o}}function $we(e){let t=[...e.matchAll(xwe)];if(t.length===0)return null;let n=0,r=0;for(let o of t)o[1]==="ok"?n++:o[1]==="FAIL"&&r++;return{runner:"go-test",passed:n,failed:r}}function Dwe(e){let t=e.match(Rwe);if(!t)return null;let n=parseInt(t[1]??"0",10),r=parseInt(t[2]??"0",10),o=t[3]!==void 0?parseInt(t[3],10):void 0;return{runner:"cargo",passed:n,failed:r,...o!==void 0?{skipped:o}:{}}}function Lwe(e){let t=e.match(Awe);if(!t)return null;let n=parseInt(t[1]??"0",10),r=parseInt(t[2]??"0",10);return{runner:"rspec",passed:n-r,failed:r}}function Fwe(e){let t=e.match(Cwe);if(t)return{runner:"phpunit",passed:parseInt(t[1]??"0",10),failed:0};let n=e.match(_we);if(n){let r=parseInt(n[1]??"0",10),o=parseInt(n[2]??"0",10);return{runner:"phpunit",passed:r-o,failed:o}}return null}function Hm(e){return Pwe(e)??Iwe(e)??Mwe(e)??Owe(e)??$we(e)??Dwe(e)??Lwe(e)??Fwe(e)??null}var Swe,vwe,kwe,Twe,Ewe,xwe,Rwe,Awe,Cwe,_we,R_=b(()=>{"use strict";Swe=/Tests\s+(\d+)\s+passed(?:\s*\|\s*(\d+)\s+failed)?(?:\s*\|\s*(\d+)\s+skipped)?/,vwe=/Tests:\s+(?:(\d+)\s+failed,\s*)?(\d+)\s+passed,\s*\d+\s+total/,kwe=/={3,}\s*(?:(\d+)\s+failed,\s*)?(\d+)\s+passed(?:,\s*(\d+)\s+warning)?.*in\s+[\d.]+s\s*={3,}|={3,}\s*(\d+)\s+passed.*in\s+[\d.]+s\s*={3,}/,Twe=/(\d+)\s+passing/,Ewe=/(\d+)\s+failing/,xwe=/^(ok|FAIL)\s+\S+\s+[\d.]+s/gm,Rwe=/test result: (?:ok|FAILED)\. (\d+) passed; (\d+) failed(?:; (\d+) ignored)?/,Awe=/(\d+) examples?, (\d+) failures?/,Cwe=/OK \((\d+) tests?/,_we=/Tests:\s*(\d+)[^]*?Failures:\s*(\d+)/});import{statSync as Nwe}from"node:fs";function Wm(e){if(typeof e!="object"||e===null)return!1;let t=e;return t.code==="ENOENT"&&typeof t.syscall=="string"&&t.syscall.startsWith("spawn")}function Bwe(e){if(e===void 0)return!1;try{return Nwe(e),!1}catch{return!0}}function Qc(e,t){let n=e instanceof Error?e.message:typeof e?.message=="string"?String(e.message):String(e);return Wm(e)&&Bwe(t)?`working directory does not exist: ${t} (deleted worktree?) \u2014 underlying: ${n}`:n}var A_=b(()=>{"use strict"});function io(e){let t=e instanceof Error?e.message:String(e);hH.has(t)||(hH.add(t),console.warn(`[afk-home] Malformed AFK home/state env var ignored while deriving the credential floor: ${t}. The relocated tree is NOT protected \u2014 the default ~/.afk entries still apply. Fix the env var to restore coverage.`))}var hH,Km=b(()=>{"use strict";hH=new Set});import{statSync as __}from"node:fs";import{homedir as Uwe}from"node:os";import{basename as jwe,dirname as bH,join as Hwe}from"node:path";function wH(e){return typeof e=="object"&&e!==null&&"code"in e?String(e.code):void 0}function Wwe(e){let t=jwe(e),n=t===t.toLowerCase()?t.toUpperCase():t.toLowerCase();if(n===t)return;let r;try{r=__(e)}catch{return}let o=C_.get(r.dev);if(o!==void 0)return o;try{let i=__(Hwe(bH(e),n)),s=r.dev===i.dev&&r.ino===i.ino;return C_.set(r.dev,s),s}catch(i){let s=wH(i);return s==="ENOENT"||s==="ENOTDIR"?(C_.set(r.dev,!1),!1):void 0}}function SH(e=Uwe()){if(yH!==void 0)return yH;let t=e;for(;;)try{return __(t),Wwe(t)??!0}catch(n){let r=wH(n);if(r!=="ENOENT"&&r!=="ENOTDIR")return!0;let o=bH(t);if(o===t)return!0;t=o}}function Hi(e,t,n=t){if(e===t||e.startsWith(t+"/")||e.startsWith(t+"\\"))return!0;if(!SH(n))return!1;let r=e.toLowerCase(),o=t.toLowerCase();return r===o||r.startsWith(o+"/")||r.startsWith(o+"\\")}function tw(e,t){return e.includes(t)?!0:SH(t)?e.toLowerCase().includes(t.toLowerCase()):!1}var yH,C_,Gm=b(()=>{"use strict";C_=new Map});import{realpathSync as vH}from"fs";import{dirname as Kwe,resolve as Ia,join as rw}from"path";import{homedir as Xn}from"os";function qwe(){let e=[];try{let t=ye();e.push(Ia(rw(t,"config"))),e.push(Ia(rw(t,"state")))}catch(t){io(t)}try{e.push(Ia(ue()))}catch(t){io(t)}return e}function P_(){let e=`${k.AFK_WRITE_DENYLIST??""}\0${k.AFK_HOME??""}\0${k.AFK_STATE_DIR??""}`;if(!nw||nw.key!==e){let t=k.AFK_WRITE_DENYLIST,n=process.platform==="win32"?";":":",r=t?t.split(n).map(o=>o.trim()).filter(Boolean).map(o=>o==="~"||o.startsWith("~/")||o.startsWith("~\\")?rw(Xn(),o.slice(2)):o).map(o=>Ia(o)).filter(Boolean):[];nw={key:e,unresolved:[...new Set([...Gwe.map(o=>Ia(o)),...qwe()]),...r]}}return[...new Set(nw.unresolved.map(t=>bt(t)))]}function bt(e){let t=Ia(e);try{return vH(t)}catch{}let n=[],r=t;for(let o=0;o<64;o++){let i=Kwe(r);if(i===r)break;n.unshift(r.slice(i.length+1)),r=i;try{let s=vH(r);return rw(s,...n)}catch{}}return t}function Zc(e,t="write_file"){let n=bt(Ia(e));for(let r of P_())if(Hi(n,r))throw new Error(`${t}: refusing to write to protected path: ${n} (matches denylist entry: ${r})`)}var Gwe,nw,Wi=b(()=>{"use strict";F();B();Km();Gm();Gwe=[`${Xn()}/.ssh`,`${Xn()}/.aws`,`${Xn()}/.gnupg`,`${Xn()}/.config/gcloud`,"/etc","/System","/private/etc","/usr/local/etc",`${Xn()}/.afk/config`,`${Xn()}/.afk/state`,`${Xn()}/.npmrc`,`${Xn()}/.docker/config.json`,`${Xn()}/Library/LaunchAgents`,`${Xn()}/Library/LaunchDaemons`,"/Library/LaunchAgents","/Library/LaunchDaemons",`${Xn()}/.config/systemd`,...process.platform==="win32"&&k.APPDATA?[`${k.APPDATA}\\gcloud`,`${k.APPDATA}\\Docker`]:[],...process.platform==="win32"&&k.USERPROFILE?[`${k.USERPROFILE}\\.ssh`,`${k.USERPROFILE}\\.aws`,`${k.USERPROFILE}\\.gnupg`]:[]]});import{isAbsolute as zwe,relative as Vwe,sep as Jwe}from"node:path";import{homedir as ow}from"node:os";function Ywe(e,t){let n=Vwe(t,e);return n===""||n!==".."&&!n.startsWith(`..${Jwe}`)&&!zwe(n)}function I_(e,t){return e.filter(n=>!t.some(r=>Ywe(n,r)))}function Xwe(e,t){return e.filter(({source:n})=>n!==t).map(({root:n})=>n)}function kH(e,t){return e.flatMap(({rel:n,resolved:r})=>I_([r],Xwe(t,Qwe[n])))}var Qwe,TH=b(()=>{"use strict";Qwe={".afk/config/mcp.json":`${ow()}/.afk/config`,".afk/config/schedules.json":`${ow()}/.afk/config`,".ssh/config":`${ow()}/.ssh`,".ssh/known_hosts":`${ow()}/.ssh`}});import{existsSync as EH}from"fs";import{isAbsolute as Zwe,resolve as AH}from"path";import{homedir as xH}from"os";function Ma(e){return e==="~"?xH():e.startsWith("~/")?AH(xH(),e.slice(2)):e}function iw(e){if(!e.startsWith("https://"))throw new Error(`Plugin source must use https:// (got: ${e}). git://, http://, ssh://, file://, and git@ are rejected to avoid downgrade attacks and unauthenticated clones.`)}function eu(e){let t=e.trim();if(!t)throw new Error('plugin source is required (examples: "owner/repo", "https://github.com/owner/repo.git", "./my-plugin")');if(rSe(t)){let o=RH(t);if(!EH(o))throw new Error(`could not resolve plugin source: "${t}" looks like a local path but does not exist on disk`);return{type:"local",path:o}}if(eSe.test(t))return{type:"git",url:t};let n=nSe.exec(t);if(n&&n[1]&&n[2])return{type:"marketplace-ref",marketplace:n[1],plugin:n[2]};let r=tSe.exec(t);if(r&&r[1]&&r[2]){let o=r[1],i=r[2];return{type:"github",owner:o,repo:i,url:`https://github.com/${o}/${i}.git`}}if(EH(t))return{type:"local",path:RH(t)};throw new Error(`could not resolve plugin source: "${t}". Use a git URL (https://\u2026/repo.git), GitHub shorthand (owner/repo), or a local path to a directory that exists on disk.`)}function rSe(e){return e.startsWith("./")||e.startsWith("../")||e.startsWith("~")||e.startsWith("/")}function RH(e){let t=Ma(e);return Zwe(t)?t:AH(process.cwd(),t)}var eSe,tSe,nSe,tu=b(()=>{"use strict";eSe=/^(?:https?:\/\/|git:\/\/|ssh:\/\/|git\+ssh:\/\/|file:\/\/|git@[^:]+:)/,tSe=/^([a-zA-Z0-9][a-zA-Z0-9_.-]*)\/([a-zA-Z0-9][a-zA-Z0-9._-]*?)(?:\.git)?$/,nSe=/^([a-zA-Z0-9][a-zA-Z0-9_.-]*):([a-zA-Z0-9][a-zA-Z0-9_.-]*)$/});import{basename as oSe,dirname as iSe,join as sw,relative as sSe,resolve as nu,sep as qm}from"path";import{homedir as ct}from"os";function _H(e){let t=nu(e);return sw(bt(iSe(t)),oSe(t))}function O_(e){if(!e)return[];let t=process.platform==="win32"?";":":";return e.split(t).map(n=>n.trim()).filter(Boolean).map(n=>n==="~"||n.startsWith("~/")||n.startsWith("~\\")?Ma(n.replace(/^~[/\\]+/,"~/")):n).map(n=>nu(n))}function lSe(){try{return[bt(nu(sw(ye(),"config")))]}catch(e){return io(e),[]}}function cSe(){try{let e=ye();return zo.filter(t=>t.startsWith(CH)).map(t=>_H(sw(e,t.slice(CH.length))))}catch(e){return io(e),[]}}function PH(){let e=`${k.AFK_READ_DENYLIST??""}\0${k.AFK_HOME??""}`;if(zm&&zm.key===e)return zm;let t=O_(k.AFK_READ_DENYLIST).map(s=>bt(s)).filter(Boolean),n=M_.map(s=>({source:s,root:bt(nu(s))})),r=lSe(),o=[...new Set([...n.map(({root:s})=>s),...r])],i=n.filter(({source:s,root:a})=>s!==aSe||!r.includes(a)).map(({root:s})=>s);return zm={key:e,builtins:o,extras:t,allow:[...new Set([...kH(zo.map(s=>({rel:s,resolved:_H(`${ct()}/${s}`)})),n),...I_(cSe(),i)])]},zm}function $_(){let{builtins:e,extras:t}=PH();return[...e,...t]}function IH(e){let t=bt(nu(e));return $_().filter(n=>n!==t&&Hi(n,t,n)).map(n=>(n.startsWith(t+qm)?sSe(t,n):n.split(qm).slice(t.split(qm).length).join(qm)).split(qm).join("/"))}function yn(e){let t=bt(nu(e)),{builtins:n,extras:r,allow:o}=PH();for(let i of r)if(Hi(t,i))return{denied:!0,matched:i};if(o.includes(t))return{denied:!1};for(let i of n)if(Hi(t,i))return{denied:!0,matched:i};return{denied:!1}}var M_,zo,aSe,Vrt,zm,CH,Ki,ru,so=b(()=>{"use strict";F();Wi();B();Km();TH();Gm();tu();M_=[`${ct()}/.ssh`,`${ct()}/.aws`,`${ct()}/.gnupg`,`${ct()}/.config/gcloud`,`${ct()}/.afk/config`,`${ct()}/.npmrc`,`${ct()}/.docker/config.json`,`${ct()}/.git-credentials`,`${ct()}/.netrc`,`${ct()}/.config/gh/hosts.yml`,`${ct()}/.kube/config`,"/etc/shadow","/etc/sudoers","/private/etc/master.passwd",`${ct()}/.password-store`,`${ct()}/Library/Application Support/Google/Chrome`,`${ct()}/Library/Application Support/Chromium`,`${ct()}/Library/Application Support/BraveSoftware`,`${ct()}/Library/Application Support/Microsoft Edge`,`${ct()}/Library/Application Support/Arc`,`${ct()}/Library/Application Support/Firefox`,...process.platform==="win32"&&k.USERPROFILE?[`${k.USERPROFILE}\\.ssh`,`${k.USERPROFILE}\\.aws`,`${k.USERPROFILE}\\.gnupg`]:[],...process.platform==="win32"&&k.APPDATA?[`${k.APPDATA}\\gcloud`,`${k.APPDATA}\\Docker`,`${k.APPDATA}\\Mozilla\\Firefox`]:[],...process.platform==="win32"&&k.LOCALAPPDATA?[`${k.LOCALAPPDATA}\\Google\\Chrome`,`${k.LOCALAPPDATA}\\Chromium`,`${k.LOCALAPPDATA}\\BraveSoftware`,`${k.LOCALAPPDATA}\\Microsoft\\Edge`]:[]],zo=[".afk/config/mcp.json",".afk/config/schedules.json",".ssh/config",".ssh/known_hosts"],aSe=`${ct()}/.afk/config`,Vrt=zo.map(e=>sw(ct(),e));CH=".afk/";Ki="read-denylist entry:",ru="is a protected credential/secret path"});import Oa from"path";import{realpathSync as uSe}from"fs";function sn(e){try{return uSe.native(e)}catch{let t=Oa.dirname(e),n=Oa.basename(e);return t===e?e:Oa.join(sn(t),n)}}function dSe(e){let t=MH.get(e);if(t!==void 0)return t;let n=sn(e);return MH.set(e,n),n}function OH(e,t,n,r){let o=t?.resolveBase??t?.cwd??r,i=Oa.isAbsolute(e)?e:Oa.resolve(o??process.cwd(),e);if(t?.allowAll===!0)return{restricted:!1,resolved:i,roots:[]};if(o===void 0)return{restricted:!1,resolved:i,roots:[]};let s=sn(i),a=n==="read"?t?.readRoots??[o]:t?.writeRoots??[o];for(let l of a){let c=dSe(l),u=Oa.relative(c,s);if(!u.startsWith("..")&&!Oa.isAbsolute(u))return{restricted:!1,resolved:i,roots:a}}return{restricted:!0,resolved:i,roots:a}}function nt(e,t,n="read",r){let{restricted:o,resolved:i,roots:s}=OH(e,t,n,r);if(n==="read"){let a=yn(i);if(a.denied)throw new Error(`Path \`${e}\` ${ru} (${Ki} \`${a.matched}\`) and cannot be read.`)}if(o){let a=s.map(c=>`\`${c}\``).join(", "),l=n==="read"?"read roots":"write roots";throw new Error(`Path \`${e}\` is outside the allowed ${l} [${a}].`)}return i}function Vm(e,t,n="read",r){return OH(e,t,n,r)}function $H(e){let t=new Set,n=[];for(let r of e.split(/\s+/)){if(r.length===0)continue;let o=r.replace(/^\d*[<>|&]+/,"").replace(/^['"]/,"").replace(/['";,)]+$/,"");if(o.length===0)continue;let i=o.startsWith("/"),s=o==="~"||o.startsWith("~/");!i&&!s||t.has(o)||(t.add(o),n.push(o))}return n}var MH,Ut=b(()=>{"use strict";so();MH=new Map});import{execFileSync as pSe}from"node:child_process";function Qn(e,t="SIGKILL"){if(!(e<=0))try{process.platform==="win32"?pSe("taskkill",["/F","/T","/PID",String(e)],{stdio:"ignore",timeout:5e3}):process.kill(-e,t)}catch{}}var Jm=b(()=>{"use strict"});import{mkdirSync as mSe,openSync as fSe,writeSync as gSe,closeSync as hSe}from"fs";function D_(e,t,n){try{let r=Iy(e);if(r===void 0)return;mSe(r,{recursive:!0,mode:448});let o=t.replace(/[^A-Za-z0-9_-]/g,"_").slice(0,128)||"capture",i=`${r}/${o}.txt`,s=Buffer.from(n,"utf8"),a=s.length<=DH?s:s.subarray(0,DH),l=fSe(i,"wx",384);try{gSe(l,a)}finally{hSe(l)}return i}catch{return}}var DH,LH=b(()=>{"use strict";B();DH=8e6});var ySe,bSe,aw,FH=b(()=>{"use strict";Le();ySe=5,bSe=300,aw=class{constructor(t,n=ySe,r=bSe){this.onChange=t;this.maxLines=n;this.throttleMs=r}onChange;maxLines;throttleMs;lines=[];lastNotifiedAt=0;pendingFlush;cleared=!1;push(t){if(this.cleared||t.length===0)return;let n=t.split(`
|
|
317
|
-
`);for(let r=0;r<n.length;r++){let i=n[r].split("\r"),s=i[i.length-1];if(r===0)if(this.lines.length===0)this.lines.push(s);else{let a=this.lines[this.lines.length-1];this.lines[this.lines.length-1]=i.length>1?s:a+s}else{if(this.lines.length>0){let a=ie(this.lines[this.lines.length-1]);a.length>0?this.lines[this.lines.length-1]=a:this.lines.pop()}s.length>0
|
|
318
|
-
`)||void 0}clear(){this.cleared||(this.cleared=!0,this.lines=[],this.pendingFlush!==void 0&&(clearTimeout(this.pendingFlush),this.pendingFlush=void 0),this.onChange(void 0))}scheduleNotify(){let t=Date.now(),n=t-this.lastNotifiedAt;if(n>=this.throttleMs)this.lastNotifiedAt=t,this.pendingFlush!==void 0&&(clearTimeout(this.pendingFlush),this.pendingFlush=void 0),this.fireNotify();else if(this.pendingFlush===void 0){let r=this.throttleMs-n;this.pendingFlush=setTimeout(()=>{this.pendingFlush=void 0,!this.cleared&&(this.lastNotifiedAt=Date.now(),this.fireNotify())},r),typeof this.pendingFlush=="object"&&"unref"in this.pendingFlush&&this.pendingFlush.unref()}}fireNotify(){let t=this.peek()
|
|
316
|
+
`;await gwe(t,r,{flag:"a"})}catch{}}var Er=b(()=>{"use strict";F();B()});function Pwe(e){let t=e.match(Swe);if(!t)return null;let n=parseInt(t[1]??"0",10),r=parseInt(t[2]??"0",10),o=t[3]!==void 0?parseInt(t[3],10):void 0;return{runner:"vitest",passed:n,failed:r,...o!==void 0?{skipped:o}:{}}}function Iwe(e){let t=e.match(vwe);if(!t)return null;let n=parseInt(t[1]??"0",10);return{runner:"jest",passed:parseInt(t[2]??"0",10),failed:n}}function Mwe(e){let t=e.match(kwe);if(!t)return null;if(t[2]!==void 0){let n=parseInt(t[2],10),r=parseInt(t[1]??"0",10);return{runner:"pytest",passed:n,failed:r}}return t[4]!==void 0?{runner:"pytest",passed:parseInt(t[4],10),failed:0}:null}function Owe(e){let t=e.match(Twe);if(!t)return null;let n=parseInt(t[1]??"0",10),r=e.match(Ewe),o=r?parseInt(r[1]??"0",10):0;return{runner:"mocha",passed:n,failed:o}}function $we(e){let t=[...e.matchAll(xwe)];if(t.length===0)return null;let n=0,r=0;for(let o of t)o[1]==="ok"?n++:o[1]==="FAIL"&&r++;return{runner:"go-test",passed:n,failed:r}}function Dwe(e){let t=e.match(Rwe);if(!t)return null;let n=parseInt(t[1]??"0",10),r=parseInt(t[2]??"0",10),o=t[3]!==void 0?parseInt(t[3],10):void 0;return{runner:"cargo",passed:n,failed:r,...o!==void 0?{skipped:o}:{}}}function Lwe(e){let t=e.match(Awe);if(!t)return null;let n=parseInt(t[1]??"0",10),r=parseInt(t[2]??"0",10);return{runner:"rspec",passed:n-r,failed:r}}function Fwe(e){let t=e.match(Cwe);if(t)return{runner:"phpunit",passed:parseInt(t[1]??"0",10),failed:0};let n=e.match(_we);if(n){let r=parseInt(n[1]??"0",10),o=parseInt(n[2]??"0",10);return{runner:"phpunit",passed:r-o,failed:o}}return null}function Hm(e){return Pwe(e)??Iwe(e)??Mwe(e)??Owe(e)??$we(e)??Dwe(e)??Lwe(e)??Fwe(e)??null}var Swe,vwe,kwe,Twe,Ewe,xwe,Rwe,Awe,Cwe,_we,R_=b(()=>{"use strict";Swe=/Tests\s+(\d+)\s+passed(?:\s*\|\s*(\d+)\s+failed)?(?:\s*\|\s*(\d+)\s+skipped)?/,vwe=/Tests:\s+(?:(\d+)\s+failed,\s*)?(\d+)\s+passed,\s*\d+\s+total/,kwe=/={3,}\s*(?:(\d+)\s+failed,\s*)?(\d+)\s+passed(?:,\s*(\d+)\s+warning)?.*in\s+[\d.]+s\s*={3,}|={3,}\s*(\d+)\s+passed.*in\s+[\d.]+s\s*={3,}/,Twe=/(\d+)\s+passing/,Ewe=/(\d+)\s+failing/,xwe=/^(ok|FAIL)\s+\S+\s+[\d.]+s/gm,Rwe=/test result: (?:ok|FAILED)\. (\d+) passed; (\d+) failed(?:; (\d+) ignored)?/,Awe=/(\d+) examples?, (\d+) failures?/,Cwe=/OK \((\d+) tests?/,_we=/Tests:\s*(\d+)[^]*?Failures:\s*(\d+)/});import{statSync as Nwe}from"node:fs";function Wm(e){if(typeof e!="object"||e===null)return!1;let t=e;return t.code==="ENOENT"&&typeof t.syscall=="string"&&t.syscall.startsWith("spawn")}function Bwe(e){if(e===void 0)return!1;try{return Nwe(e),!1}catch{return!0}}function Qc(e,t){let n=e instanceof Error?e.message:typeof e?.message=="string"?String(e.message):String(e);return Wm(e)&&Bwe(t)?`working directory does not exist: ${t} (deleted worktree?) \u2014 underlying: ${n}`:n}var A_=b(()=>{"use strict"});function io(e){let t=e instanceof Error?e.message:String(e);hH.has(t)||(hH.add(t),console.warn(`[afk-home] Malformed AFK home/state env var ignored while deriving the credential floor: ${t}. The relocated tree is NOT protected \u2014 the default ~/.afk entries still apply. Fix the env var to restore coverage.`))}var hH,Km=b(()=>{"use strict";hH=new Set});import{statSync as __}from"node:fs";import{homedir as Uwe}from"node:os";import{basename as jwe,dirname as bH,join as Hwe}from"node:path";function wH(e){return typeof e=="object"&&e!==null&&"code"in e?String(e.code):void 0}function Wwe(e){let t=jwe(e),n=t===t.toLowerCase()?t.toUpperCase():t.toLowerCase();if(n===t)return;let r;try{r=__(e)}catch{return}let o=C_.get(r.dev);if(o!==void 0)return o;try{let i=__(Hwe(bH(e),n)),s=r.dev===i.dev&&r.ino===i.ino;return C_.set(r.dev,s),s}catch(i){let s=wH(i);return s==="ENOENT"||s==="ENOTDIR"?(C_.set(r.dev,!1),!1):void 0}}function SH(e=Uwe()){if(yH!==void 0)return yH;let t=e;for(;;)try{return __(t),Wwe(t)??!0}catch(n){let r=wH(n);if(r!=="ENOENT"&&r!=="ENOTDIR")return!0;let o=bH(t);if(o===t)return!0;t=o}}function Hi(e,t,n=t){if(e===t||e.startsWith(t+"/")||e.startsWith(t+"\\"))return!0;if(!SH(n))return!1;let r=e.toLowerCase(),o=t.toLowerCase();return r===o||r.startsWith(o+"/")||r.startsWith(o+"\\")}function tw(e,t){return e.includes(t)?!0:SH(t)?e.toLowerCase().includes(t.toLowerCase()):!1}var yH,C_,Gm=b(()=>{"use strict";C_=new Map});import{realpathSync as vH}from"fs";import{dirname as Kwe,resolve as Ia,join as rw}from"path";import{homedir as Xn}from"os";function qwe(){let e=[];try{let t=ye();e.push(Ia(rw(t,"config"))),e.push(Ia(rw(t,"state")))}catch(t){io(t)}try{e.push(Ia(ue()))}catch(t){io(t)}return e}function P_(){let e=`${k.AFK_WRITE_DENYLIST??""}\0${k.AFK_HOME??""}\0${k.AFK_STATE_DIR??""}`;if(!nw||nw.key!==e){let t=k.AFK_WRITE_DENYLIST,n=process.platform==="win32"?";":":",r=t?t.split(n).map(o=>o.trim()).filter(Boolean).map(o=>o==="~"||o.startsWith("~/")||o.startsWith("~\\")?rw(Xn(),o.slice(2)):o).map(o=>Ia(o)).filter(Boolean):[];nw={key:e,unresolved:[...new Set([...Gwe.map(o=>Ia(o)),...qwe()]),...r]}}return[...new Set(nw.unresolved.map(t=>bt(t)))]}function bt(e){let t=Ia(e);try{return vH(t)}catch{}let n=[],r=t;for(let o=0;o<64;o++){let i=Kwe(r);if(i===r)break;n.unshift(r.slice(i.length+1)),r=i;try{let s=vH(r);return rw(s,...n)}catch{}}return t}function Zc(e,t="write_file"){let n=bt(Ia(e));for(let r of P_())if(Hi(n,r))throw new Error(`${t}: refusing to write to protected path: ${n} (matches denylist entry: ${r})`)}var Gwe,nw,Wi=b(()=>{"use strict";F();B();Km();Gm();Gwe=[`${Xn()}/.ssh`,`${Xn()}/.aws`,`${Xn()}/.gnupg`,`${Xn()}/.config/gcloud`,"/etc","/System","/private/etc","/usr/local/etc",`${Xn()}/.afk/config`,`${Xn()}/.afk/state`,`${Xn()}/.npmrc`,`${Xn()}/.docker/config.json`,`${Xn()}/Library/LaunchAgents`,`${Xn()}/Library/LaunchDaemons`,"/Library/LaunchAgents","/Library/LaunchDaemons",`${Xn()}/.config/systemd`,...process.platform==="win32"&&k.APPDATA?[`${k.APPDATA}\\gcloud`,`${k.APPDATA}\\Docker`]:[],...process.platform==="win32"&&k.USERPROFILE?[`${k.USERPROFILE}\\.ssh`,`${k.USERPROFILE}\\.aws`,`${k.USERPROFILE}\\.gnupg`]:[]]});import{isAbsolute as zwe,relative as Vwe,sep as Jwe}from"node:path";import{homedir as ow}from"node:os";function Ywe(e,t){let n=Vwe(t,e);return n===""||n!==".."&&!n.startsWith(`..${Jwe}`)&&!zwe(n)}function I_(e,t){return e.filter(n=>!t.some(r=>Ywe(n,r)))}function Xwe(e,t){return e.filter(({source:n})=>n!==t).map(({root:n})=>n)}function kH(e,t){return e.flatMap(({rel:n,resolved:r})=>I_([r],Xwe(t,Qwe[n])))}var Qwe,TH=b(()=>{"use strict";Qwe={".afk/config/mcp.json":`${ow()}/.afk/config`,".afk/config/schedules.json":`${ow()}/.afk/config`,".ssh/config":`${ow()}/.ssh`,".ssh/known_hosts":`${ow()}/.ssh`}});import{existsSync as EH}from"fs";import{isAbsolute as Zwe,resolve as AH}from"path";import{homedir as xH}from"os";function Ma(e){return e==="~"?xH():e.startsWith("~/")?AH(xH(),e.slice(2)):e}function iw(e){if(!e.startsWith("https://"))throw new Error(`Plugin source must use https:// (got: ${e}). git://, http://, ssh://, file://, and git@ are rejected to avoid downgrade attacks and unauthenticated clones.`)}function eu(e){let t=e.trim();if(!t)throw new Error('plugin source is required (examples: "owner/repo", "https://github.com/owner/repo.git", "./my-plugin")');if(rSe(t)){let o=RH(t);if(!EH(o))throw new Error(`could not resolve plugin source: "${t}" looks like a local path but does not exist on disk`);return{type:"local",path:o}}if(eSe.test(t))return{type:"git",url:t};let n=nSe.exec(t);if(n&&n[1]&&n[2])return{type:"marketplace-ref",marketplace:n[1],plugin:n[2]};let r=tSe.exec(t);if(r&&r[1]&&r[2]){let o=r[1],i=r[2];return{type:"github",owner:o,repo:i,url:`https://github.com/${o}/${i}.git`}}if(EH(t))return{type:"local",path:RH(t)};throw new Error(`could not resolve plugin source: "${t}". Use a git URL (https://\u2026/repo.git), GitHub shorthand (owner/repo), or a local path to a directory that exists on disk.`)}function rSe(e){return e.startsWith("./")||e.startsWith("../")||e.startsWith("~")||e.startsWith("/")}function RH(e){let t=Ma(e);return Zwe(t)?t:AH(process.cwd(),t)}var eSe,tSe,nSe,tu=b(()=>{"use strict";eSe=/^(?:https?:\/\/|git:\/\/|ssh:\/\/|git\+ssh:\/\/|file:\/\/|git@[^:]+:)/,tSe=/^([a-zA-Z0-9][a-zA-Z0-9_.-]*)\/([a-zA-Z0-9][a-zA-Z0-9._-]*?)(?:\.git)?$/,nSe=/^([a-zA-Z0-9][a-zA-Z0-9_.-]*):([a-zA-Z0-9][a-zA-Z0-9_.-]*)$/});import{basename as oSe,dirname as iSe,join as sw,relative as sSe,resolve as nu,sep as qm}from"path";import{homedir as ct}from"os";function _H(e){let t=nu(e);return sw(bt(iSe(t)),oSe(t))}function O_(e){if(!e)return[];let t=process.platform==="win32"?";":":";return e.split(t).map(n=>n.trim()).filter(Boolean).map(n=>n==="~"||n.startsWith("~/")||n.startsWith("~\\")?Ma(n.replace(/^~[/\\]+/,"~/")):n).map(n=>nu(n))}function lSe(){try{return[bt(nu(sw(ye(),"config")))]}catch(e){return io(e),[]}}function cSe(){try{let e=ye();return zo.filter(t=>t.startsWith(CH)).map(t=>_H(sw(e,t.slice(CH.length))))}catch(e){return io(e),[]}}function PH(){let e=`${k.AFK_READ_DENYLIST??""}\0${k.AFK_HOME??""}`;if(zm&&zm.key===e)return zm;let t=O_(k.AFK_READ_DENYLIST).map(s=>bt(s)).filter(Boolean),n=M_.map(s=>({source:s,root:bt(nu(s))})),r=lSe(),o=[...new Set([...n.map(({root:s})=>s),...r])],i=n.filter(({source:s,root:a})=>s!==aSe||!r.includes(a)).map(({root:s})=>s);return zm={key:e,builtins:o,extras:t,allow:[...new Set([...kH(zo.map(s=>({rel:s,resolved:_H(`${ct()}/${s}`)})),n),...I_(cSe(),i)])]},zm}function $_(){let{builtins:e,extras:t}=PH();return[...e,...t]}function IH(e){let t=bt(nu(e));return $_().filter(n=>n!==t&&Hi(n,t,n)).map(n=>(n.startsWith(t+qm)?sSe(t,n):n.split(qm).slice(t.split(qm).length).join(qm)).split(qm).join("/"))}function yn(e){let t=bt(nu(e)),{builtins:n,extras:r,allow:o}=PH();for(let i of r)if(Hi(t,i))return{denied:!0,matched:i};if(o.includes(t))return{denied:!1};for(let i of n)if(Hi(t,i))return{denied:!0,matched:i};return{denied:!1}}var M_,zo,aSe,Vrt,zm,CH,Ki,ru,so=b(()=>{"use strict";F();Wi();B();Km();TH();Gm();tu();M_=[`${ct()}/.ssh`,`${ct()}/.aws`,`${ct()}/.gnupg`,`${ct()}/.config/gcloud`,`${ct()}/.afk/config`,`${ct()}/.npmrc`,`${ct()}/.docker/config.json`,`${ct()}/.git-credentials`,`${ct()}/.netrc`,`${ct()}/.config/gh/hosts.yml`,`${ct()}/.kube/config`,"/etc/shadow","/etc/sudoers","/private/etc/master.passwd",`${ct()}/.password-store`,`${ct()}/Library/Application Support/Google/Chrome`,`${ct()}/Library/Application Support/Chromium`,`${ct()}/Library/Application Support/BraveSoftware`,`${ct()}/Library/Application Support/Microsoft Edge`,`${ct()}/Library/Application Support/Arc`,`${ct()}/Library/Application Support/Firefox`,...process.platform==="win32"&&k.USERPROFILE?[`${k.USERPROFILE}\\.ssh`,`${k.USERPROFILE}\\.aws`,`${k.USERPROFILE}\\.gnupg`]:[],...process.platform==="win32"&&k.APPDATA?[`${k.APPDATA}\\gcloud`,`${k.APPDATA}\\Docker`,`${k.APPDATA}\\Mozilla\\Firefox`]:[],...process.platform==="win32"&&k.LOCALAPPDATA?[`${k.LOCALAPPDATA}\\Google\\Chrome`,`${k.LOCALAPPDATA}\\Chromium`,`${k.LOCALAPPDATA}\\BraveSoftware`,`${k.LOCALAPPDATA}\\Microsoft\\Edge`]:[]],zo=[".afk/config/mcp.json",".afk/config/schedules.json",".ssh/config",".ssh/known_hosts"],aSe=`${ct()}/.afk/config`,Vrt=zo.map(e=>sw(ct(),e));CH=".afk/";Ki="read-denylist entry:",ru="is a protected credential/secret path"});import Oa from"path";import{realpathSync as uSe}from"fs";function sn(e){try{return uSe.native(e)}catch{let t=Oa.dirname(e),n=Oa.basename(e);return t===e?e:Oa.join(sn(t),n)}}function dSe(e){let t=MH.get(e);if(t!==void 0)return t;let n=sn(e);return MH.set(e,n),n}function OH(e,t,n,r){let o=t?.resolveBase??t?.cwd??r,i=Oa.isAbsolute(e)?e:Oa.resolve(o??process.cwd(),e);if(t?.allowAll===!0)return{restricted:!1,resolved:i,roots:[]};if(o===void 0)return{restricted:!1,resolved:i,roots:[]};let s=sn(i),a=n==="read"?t?.readRoots??[o]:t?.writeRoots??[o];for(let l of a){let c=dSe(l),u=Oa.relative(c,s);if(!u.startsWith("..")&&!Oa.isAbsolute(u))return{restricted:!1,resolved:i,roots:a}}return{restricted:!0,resolved:i,roots:a}}function nt(e,t,n="read",r){let{restricted:o,resolved:i,roots:s}=OH(e,t,n,r);if(n==="read"){let a=yn(i);if(a.denied)throw new Error(`Path \`${e}\` ${ru} (${Ki} \`${a.matched}\`) and cannot be read.`)}if(o){let a=s.map(c=>`\`${c}\``).join(", "),l=n==="read"?"read roots":"write roots";throw new Error(`Path \`${e}\` is outside the allowed ${l} [${a}].`)}return i}function Vm(e,t,n="read",r){return OH(e,t,n,r)}function $H(e){let t=new Set,n=[];for(let r of e.split(/\s+/)){if(r.length===0)continue;let o=r.replace(/^\d*[<>|&]+/,"").replace(/^['"]/,"").replace(/['";,)]+$/,"");if(o.length===0)continue;let i=o.startsWith("/"),s=o==="~"||o.startsWith("~/");!i&&!s||t.has(o)||(t.add(o),n.push(o))}return n}var MH,Ut=b(()=>{"use strict";so();MH=new Map});import{execFileSync as pSe}from"node:child_process";function Qn(e,t="SIGKILL"){if(!(e<=0))try{process.platform==="win32"?pSe("taskkill",["/F","/T","/PID",String(e)],{stdio:"ignore",timeout:5e3}):process.kill(-e,t)}catch{}}var Jm=b(()=>{"use strict"});import{mkdirSync as mSe,openSync as fSe,writeSync as gSe,closeSync as hSe}from"fs";function D_(e,t,n){try{let r=Iy(e);if(r===void 0)return;mSe(r,{recursive:!0,mode:448});let o=t.replace(/[^A-Za-z0-9_-]/g,"_").slice(0,128)||"capture",i=`${r}/${o}.txt`,s=Buffer.from(n,"utf8"),a=s.length<=DH?s:s.subarray(0,DH),l=fSe(i,"wx",384);try{gSe(l,a)}finally{hSe(l)}return i}catch{return}}var DH,LH=b(()=>{"use strict";B();DH=8e6});var ySe,bSe,aw,FH=b(()=>{"use strict";Le();ySe=5,bSe=300,aw=class{constructor(t,n=ySe,r=bSe){this.onChange=t;this.maxLines=n;this.throttleMs=r}onChange;maxLines;throttleMs;lines=[];lastNotifiedAt=0;pendingFlush;cleared=!1;atLineBoundary=!0;push(t){if(this.cleared||t.length===0)return;let n=t.split(`
|
|
317
|
+
`);for(let r=0;r<n.length;r++){let i=n[r].split("\r"),s=i[i.length-1];if(r===0){if(this.atLineBoundary||this.lines.length===0)s.length>0&&this.lines.push(s);else{let a=this.lines[this.lines.length-1];this.lines[this.lines.length-1]=i.length>1?s:a+s}s.length>0&&(this.atLineBoundary=!1)}else{if(this.lines.length>0){let a=ie(this.lines[this.lines.length-1]);a.length>0?this.lines[this.lines.length-1]=a:this.lines.pop()}s.length>0?(this.lines.push(s),this.atLineBoundary=!1):this.atLineBoundary=!0}}this.lines.length>this.maxLines&&(this.lines=this.lines.slice(this.lines.length-this.maxLines)),this.scheduleNotify()}peek(){if(!(this.cleared||this.lines.length===0))return this.lines.map(t=>ie(t)).filter(t=>t.length>0).join(`
|
|
318
|
+
`)||void 0}clear(){this.cleared||(this.cleared=!0,this.lines=[],this.pendingFlush!==void 0&&(clearTimeout(this.pendingFlush),this.pendingFlush=void 0),this.onChange(void 0))}scheduleNotify(){let t=Date.now(),n=t-this.lastNotifiedAt;if(n>=this.throttleMs)this.lastNotifiedAt=t,this.pendingFlush!==void 0&&(clearTimeout(this.pendingFlush),this.pendingFlush=void 0),this.fireNotify();else if(this.pendingFlush===void 0){let r=this.throttleMs-n;this.pendingFlush=setTimeout(()=>{this.pendingFlush=void 0,!this.cleared&&(this.lastNotifiedAt=Date.now(),this.fireNotify())},r),typeof this.pendingFlush=="object"&&"unref"in this.pendingFlush&&this.pendingFlush.unref()}}fireNotify(){let t=this.peek();!this.cleared&&t===void 0||this.onChange(t)}}});import{spawn as NH}from"child_process";import wSe from"os";function SSe(e){if(typeof e!="object"||e===null)throw new Error("Input must be an object");let t=e;if(typeof t.command!="string")throw new Error('Input must have a "command" field of type string');let n=12e4;if(t.timeout_ms!==void 0){if(typeof t.timeout_ms!="number")throw new Error("timeout_ms must be a number");if(t.timeout_ms<0||t.timeout_ms>6e5)throw new Error("timeout_ms must be between 0 and 600000");n=t.timeout_ms}return{command:t.command,timeout_ms:n}}function lw(e,t){let n=!1,r=!1;function o(){n||e==="bypassPermissions"&&(n=!0,console.warn("[security] bash handler: shell=true with bypassPermissions \u2014 all shell metacharacters are interpreted without confirmation. Migrate to execFile to eliminate this risk (tracked: C4)."))}function i(s,a){if(r)return;let l=a.resolveBase??a.cwd??t,c=wSe.homedir(),u=[];for(let d of $H(s)){let p=d==="~"?c:d.startsWith("~/")?c+d.slice(1):d,f=Vm(p,a,"write",l);f.restricted&&u.push(f.resolved)}u.length!==0&&(r=!0,console.warn(`[security] bash: command references path(s) outside writeRoots: ${u.join(", ")} \u2014 bash containment is best-effort (tracked C4); use file tools for contained writes.`),Fe({event:"tool.bash_path_escape",tool:"bash",restricted_count:u.length,mode:"write"}))}return async(s,a,l)=>{let{command:c,timeout_ms:u}=SSe(s);if(a.aborted)return{content:"Command aborted",isError:!0};if(o(),l!==void 0)try{i(c,l)}catch{}let d=Date.now();return new Promise(p=>{let f=!1,g=l?.onBashOutputTail!==void 0?new aw(C=>{try{l.onBashOutputTail(C)}catch{}}):void 0;function h(C){f||(f=!0,clearTimeout(v),a.removeEventListener("abort",R),g?.clear(),p(C))}let y=x1(),w={detached:!0,stdio:["ignore","pipe","pipe"],...(l?.resolveBase??l?.cwd??t)!==void 0?{cwd:l?.resolveBase??l?.cwd??t}:{},...l?.env!==void 0?{env:{...process.env,...l.env}}:{}},S=y.shell===!0?NH(c,{shell:!0,...w}):NH(y.shell,[...y.args??[],c],w);S.unref(),l?.spawnedPidRegistry!==void 0&&S.pid!==void 0&&l.spawnedPidRegistry.register(S.pid);let v=setTimeout(()=>{S.pid!==void 0&&Qn(S.pid),h({content:`Command timed out after ${u}ms`,isError:!0,durationMs:Date.now()-d})},u),E="",T="",x=0,_=!1;function P(C){if(_||f||x<8e6)return;_=!0,console.warn(`[bash] overflow kill: stream=${C} totalBytes=${x} command="${c}"`),Fe({event:"tool.overflow_kill",tool:"bash",total_bytes:x,stream:C}),S.kill("SIGKILL");let I=Se((E+T).trimEnd()),M=Hm(I)??void 0,U=kr(I,1e5)+d1;h({content:U,truncated:!0,durationMs:Date.now()-d,...M!==void 0?{testResult:M}:{}})}S.stdout.on("data",C=>{let I=8e6-x,M=C.length<=I?C:C.subarray(0,Math.max(0,I));x+=M.length;let U=M.toString("utf8");E+=U,g?.push(U),P("stdout")}),S.stderr.on("data",C=>{let I=8e6-x,M=C.length<=I?C:C.subarray(0,Math.max(0,I));x+=M.length;let U=M.toString("utf8");T+=U,g?.push(U),P("stderr")});let R=()=>{S.pid!==void 0&&Qn(S.pid),h({content:"Command aborted",isError:!0,durationMs:Date.now()-d})};a.addEventListener("abort",R),a.aborted&&R(),S.on("close",C=>{if(a.aborted){h({content:"Command aborted",isError:!0,durationMs:Date.now()-d});return}if(C!==null&&C!==0){let q=T.trimEnd()||E.trimEnd(),H=xa(q),K=Date.now()-d,X=H.truncated?D_(l?.sessionId,l?.toolUseId??"",q):void 0;h({content:`Command exited with code ${C}${H.content?`
|
|
319
319
|
`+H.content:""}`,isError:!0,...H.truncated?{truncated:!0}:{},...X!==void 0?{capturePath:X}:{},durationMs:K,exitCode:C});return}if(_)return;let I=Se((E+T).trimEnd()),M=Hm(I)??void 0,U=xa(I),O=Date.now()-d,j=U.truncated?D_(l?.sessionId,l?.toolUseId??"",I):void 0;h({content:U.content,...U.truncated?{truncated:!0}:{},...j!==void 0?{capturePath:j}:{},durationMs:O,...C!==null?{exitCode:C}:{},...M!==void 0?{testResult:M}:{}})}),S.on("error",C=>{let I=l?.resolveBase??l?.cwd??t,M;if(I===void 0&&Wm(C))try{let U=process.cwd();M=Qc(C,U)}catch{M=`working directory does not exist (process cwd deleted \u2014 deleted worktree?) \u2014 underlying: ${C.message}`}else M=Qc(C,I);h({content:`Failed to execute: ${M}`,isError:!0,durationMs:Date.now()-d})})})}}var BH,UH=b(()=>{"use strict";Er();R_();Le();A_();ro();Ut();Jm();LH();e_();FH();BH=lw("default")});function Zn(e,t,n="Path"){if(!(e instanceof Error))return;let r=e.code;if(r==="ENOENT")return{content:`${n} not found: ${t}`,isError:!0};if(r==="EACCES")return{content:`Permission denied: ${t}`,isError:!0};if(r==="ENOTDIR")return{content:`Not a directory: ${t}`,isError:!0}}var $a=b(()=>{"use strict"});import{promises as vSe}from"fs";function F_(e){return(t,n,r)=>kSe(t,n,r,e)}var kSe,jH,HH=b(()=>{"use strict";Ut();$a();kSe=async(e,t,n,r)=>{if(!e||typeof e!="object")return{content:"Invalid input: expected an object",isError:!0};let o=e,i=o.file_path,s=o.offset??1,a=o.limit??2e3;if(typeof i!="string")return{content:"Invalid input: file_path must be a string",isError:!0};if(typeof s!="number"||s<1)return{content:"Invalid input: offset must be a positive number",isError:!0};if(typeof a!="number"||a<1)return{content:"Invalid input: limit must be a positive number",isError:!0};let l;try{l=nt(i,n,"read",r)}catch(c){return{content:c instanceof Error?c.message:String(c),isError:!0}}try{let c=await vSe.readFile(l),u=Math.min(8192,c.length);for(let v=0;v<u;v++)if(c[v]===0)return{content:`File appears to be binary: ${l}. Use extract_document for .docx, .pdf, .xlsx, .pptx, and .zip files.`,isError:!0};let d=c.toString("utf-8");if(d.length===0)return{content:""};let p=d.split(`
|
|
320
320
|
`),f=Math.max(0,s-1),g=Math.min(p.length,f+a),h=p.slice(f,g),y=p.length;if(h.length===0)return{content:`... (offset ${s} is past end of file \u2014 file has ${y} lines)`};let w=String(y).length,S=h.map((v,E)=>{let T=f+E+1;return`${String(T).padStart(w," ")} ${v}`}).join(`
|
|
321
321
|
`);if(h.length<y){let v=f+1,E=f+h.length,T=E<y?` \u2014 pass offset=${E+1} to continue`:"";return{content:`${S}
|
|
@@ -436,7 +436,7 @@ ${o}`,paths:[t,n]}:o!==null?i={content:o,paths:[n]}:r!==null?i={content:r,paths:
|
|
|
436
436
|
|
|
437
437
|
${t}`}var Xke,pP=b(()=>{"use strict";Xke=new Set(["script","style","noscript","template","svg"])});function eTe(e,t){return new Promise((n,r)=>{if(t?.aborted){r(t.reason??new Error("aborted"));return}let o=()=>{clearTimeout(i),r(t?.reason??new Error("aborted"))},i=setTimeout(()=>{t?.removeEventListener("abort",o),n()},e);t?.addEventListener("abort",o,{once:!0})})}function CK(e,t,n){let r=Math.min(t*2**e,n);return Math.round(Math.random()*r)}function tTe(e,t){let n=e.headers.get("retry-after");if(n===null)return null;let r=Number(n.trim());return!Number.isFinite(r)||r<0?null:Math.min(r*1e3,t)}async function _K(e,t,n={},r={}){let o=r.retries??3,i=r.baseDelayMs??500,s=r.maxDelayMs??1e4,a=r.sleep??eTe,l=n.signal??void 0,c;for(let u=0;u<=o;u++){if(l?.aborted)throw l.reason??new Error("aborted");try{let d=await e(t,n);if(!Zke.has(d.status)||u===o)return d;let p=tTe(d,s)??CK(u,i,s);N("[web/retryFetch] retrying",{url:t,attempt:u,status:d.status,waitMs:p}),await d.body?.cancel().catch(()=>{}),await a(p,l)}catch(d){if(l?.aborted||(c=d,u===o))throw d;let p=CK(u,i,s);N("[web/retryFetch] retrying after error",{url:t,attempt:u,waitMs:p}),await a(p,l)}}throw c??new Error("retryFetch: exhausted without a result")}var Zke,PK=b(()=>{"use strict";fe();Zke=new Set([429,502,503,504])});import{BlockList as nTe,isIP as fP}from"node:net";import{lookup as rTe}from"node:dns/promises";import{Agent as oTe}from"undici";function MK(){let e=k.AFK_WEB_ALLOW_PRIVATE_HOSTS?.trim().toLowerCase();return e==="1"||e==="true"}function lTe(e){return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e}function mP(e){let t=fP(e);return t===0?!1:aTe.check(e,t===4?"ipv4":"ipv6")}async function OK(e){return rTe(e,{all:!0,verbatim:!0})}async function La(e,t={}){if(t.allowPrivateHosts??MK())return{allowed:!0};let n;try{n=new URL(e)}catch{return{allowed:!1,reason:`"${e}" is not a valid absolute URL`}}if(n.protocol!=="http:"&&n.protocol!=="https:")return{allowed:!1,reason:`protocol "${n.protocol}" not supported (http/https only)`};let r=lTe(n.hostname),o=(a,l)=>`refusing to fetch ${l} \u2014 internal/private address ${a} (loopback, link-local, cloud metadata, or RFC1918 space). Set AFK_WEB_ALLOW_PRIVATE_HOSTS=1 to allow private-host access.`;if(fP(r)!==0)return mP(r)?{allowed:!1,reason:o(r,r)}:{allowed:!0};let i=t.lookupFn??OK,s;try{s=await i(r)}catch{return{allowed:!0}}for(let a of s)if(mP(a.address))return{allowed:!1,reason:o(a.address,`${r} (resolved)`)};return{allowed:!0}}async function mf(e,t={}){let n=await La(e,t);if(!n.allowed)throw new Jt(n.reason)}async function zi(e,t,n={},r={}){let o={...r.lookupFn!==void 0?{lookupFn:r.lookupFn}:{},...r.allowPrivateHosts!==void 0?{allowPrivateHosts:r.allowPrivateHosts}:{}},i=t;for(let s=0;s<=IK;s++){await mf(i,o);let a={...n,redirect:"manual",...e===globalThis.fetch&&!(r.allowPrivateHosts??MK())?{dispatcher:cTe}:{}},l=await _K(e,i,a,r.retry??{});if(!uTe.has(l.status))return l;let c=l.headers.get("location");if(c===null||c.trim()==="")return l;let u;try{u=new URL(c,l.url||i).toString()}catch{return l}await l.body?.cancel().catch(()=>{}),i=u}throw new Jt(`too many redirects (>${IK}) starting from ${t}`)}var iTe,sTe,aTe,Jt,cTe,IK,uTe,Fa=b(()=>{"use strict";F();PK();iTe=[["0.0.0.0",8],["10.0.0.0",8],["100.64.0.0",10],["127.0.0.0",8],["169.254.0.0",16],["172.16.0.0",12],["192.168.0.0",16]],sTe=[["::",96],["64:ff9b::",96],["fc00::",7],["fe80::",10]],aTe=(()=>{let e=new nTe;for(let[t,n]of iTe)e.addSubnet(t,n,"ipv4");for(let[t,n]of sTe)e.addSubnet(t,n,"ipv6");return e})(),Jt=class extends Error{constructor(t){super(t),this.name="EgressBlockedError"}};cTe=new oTe({connect:{lookup(e,t,n){OK(e).then(r=>{let o=r.find(s=>mP(s.address));if(o!==void 0){n(new Jt(`refusing to connect to ${e} (resolved) \u2014 internal/private address ${o.address} (loopback, link-local, cloud metadata, or RFC1918 space). Set AFK_WEB_ALLOW_PRIVATE_HOSTS=1 to allow private-host access.`),"",0);return}let i=r[0];if(i===void 0){n(new Error(`DNS lookup returned no addresses for ${e}`),"",0);return}n(null,i.address,fP(i.address))},r=>n(r,"",0))}}});IK=20,uTe=new Set([301,302,303,307,308])});var hP={};In(hP,{enforceDomainPolicy:()=>Rr,loadBrowserConfig:()=>gP});import{readFileSync as dTe}from"node:fs";import{join as pTe}from"path";function mTe(e){let n=e.replace(/[.+?()[\]{}/\\^$|]/g,"\\$&").replace(/\*/g,"[^.]*");return new RegExp(`^${n}$`,"i")}function $K(e,t){return mTe(t).test(e)}function hTe(e,t){if(e!==void 0){let n=e.trim().toLowerCase();if(n==="1"||n==="true"||n==="yes")return!0;if(n==="0"||n==="false"||n==="no")return!1}if(t!==void 0){if(fTe.has(t))return!0;if(gTe.has(t))return!1}return!1}function DK(e){return e===void 0||e.trim()===""?[]:e.split(",").map(t=>t.trim().toLowerCase()).filter(t=>t.length>0)}function yTe(e){if(e===void 0||e==="")return"auto";if(e==="playwright"||e==="agent-browser"||e==="auto")return e;throw new Error(`AFK_BROWSER_BACKEND: must be "playwright", "agent-browser", or "auto", got: ${e}`)}function LK(e){let t=e===void 0||e.trim()===""?"default":e.trim();return Sc(t),t}function bTe(e){if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"}function wTe(e){try{return dTe(e,"utf8")}catch(t){if(t.code==="ENOENT")return;throw t}}function STe(e,t){let n={...e};if(typeof t.headless=="boolean"&&(n.headless=t.headless),Array.isArray(t.allowedDomains)&&(n.allowedDomains=t.allowedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),Array.isArray(t.blockedDomains)&&(n.blockedDomains=t.blockedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),typeof t.domSnapshots=="boolean"&&(n.domSnapshots=t.domSnapshots),t.backend==="playwright"||t.backend==="agent-browser"||t.backend==="auto")n.backend=t.backend;else if(t.backend!==void 0)throw new Error(`AFK_BROWSER_BACKEND: must be "playwright", "agent-browser", or "auto", got: ${String(t.backend)}`);return typeof t.defaultProfile=="string"&&(n.defaultProfile=LK(t.defaultProfile)),n}function gP(e){let t=e?.env??k,n=e?.readFileSync??wTe,r=e?.surface??t.AGENT_SURFACE,o=hTe(t.AFK_BROWSER_HEADLESS,r),i=DK(t.AFK_BROWSER_ALLOWED_DOMAINS),s=DK(t.AFK_BROWSER_BLOCKED_DOMAINS),a=bTe(t.AFK_BROWSER_DOM_SNAPSHOTS),l=yTe(t.AFK_BROWSER_BACKEND),c=LK(t.AFK_BROWSER_DEFAULT_PROFILE),u={headless:o,allowedDomains:i,blockedDomains:s,domSnapshots:a,backend:l,configPath:null,defaultProfile:c},d=t.AFK_BROWSER_CONFIG,p=d!==void 0&&d.trim()!==""?d.trim():pTe(Gn(),"browser.json"),f=n(p);if(f===void 0)return u;let g;try{g=JSON.parse(f)}catch(y){throw new Error(`Failed to parse browser config at ${p}: ${String(y)}`)}if(typeof g!="object"||g===null||Array.isArray(g))throw new Error(`Browser config at ${p} must be a JSON object`);let h=STe(u,g);return h.configPath=p,h}function Rr(e,t){let n;try{n=new URL(e).hostname.toLowerCase()}catch{return{allowed:!1,reason:`invalid URL: ${e}`}}for(let r of t.blockedDomains)if($K(n,r))return{allowed:!1,reason:`blocked by AFK_BROWSER_BLOCKED_DOMAINS: ${r}`};return t.allowedDomains.length>0&&!t.allowedDomains.some(o=>$K(n,o))?{allowed:!1,reason:"not in AFK_BROWSER_ALLOWED_DOMAINS"}:{allowed:!0}}var fTe,gTe,Vi=b(()=>{"use strict";F();B();fTe=new Set(["daemon","subagent","telegram","afk"]),gTe=new Set(["repl","interactive","cli"])});import{readFileSync as vTe}from"node:fs";import{join as kTe}from"node:path";import{homedir as TTe}from"node:os";function xTe(e){let t=e??ETe,n;try{n=vTe(t,"utf8")}catch{return null}let r;try{r=JSON.parse(n)}catch{return null}if(typeof r!="object"||r===null||Array.isArray(r))return null;let o=r;if(typeof o.url!="string"||typeof o.token!="string"||typeof o.pid!="number")return null;let i;try{i=new URL(o.url)}catch{return null}let{hostname:s,protocol:a}=i;if(!(s==="127.0.0.1"||s==="localhost"||s==="::1")||a!=="http:")throw new Error(`Agent Browser connection file contains an untrusted URL: ${o.url}. Only http://127.0.0.1 or http://localhost is permitted.`);return{url:o.url,token:o.token,pid:o.pid,version:typeof o.version=="string"?o.version:"unknown"}}function RTe(e){try{return process.kill(e,0),!0}catch{return!1}}async function ATe(e,t,n=2e3){try{let r=new AbortController,o=setTimeout(()=>r.abort(),n),i=await fetch(`${e}/health`,{method:"GET",headers:{Authorization:`Bearer ${t}`,Host:"127.0.0.1:8833"},signal:r.signal});return clearTimeout(o),i.ok}catch{return!1}}async function yP(e){let t=xTe(e);return t===null?{available:!1,connection:null,reason:"connection file missing or invalid"}:RTe(t.pid)?await ATe(t.url,t.token)?{available:!0,connection:t,reason:null}:{available:!1,connection:t,reason:`health probe failed at ${t.url}`}:{available:!1,connection:t,reason:`stale connection file: PID ${t.pid} not alive`}}var ETe,FK=b(()=>{"use strict";ETe=kTe(TTe(),".config","agent-browser","connection.json")});async function NK(e){let{config:t,surface:n}=e;if(t.backend==="playwright")return{backend:"playwright",reason:"explicit config: backend=playwright",probeMs:0,availability:null};if(t.backend==="agent-browser"){let s=Date.now(),a=await yP(),l=Date.now()-s;if(!a.available)throw new Error(`AFK_BROWSER_BACKEND=agent-browser but Agent Browser is not available: ${a.reason}`);return{backend:"agent-browser",reason:"explicit config: backend=agent-browser",probeMs:l,availability:a}}if(n&&CTe.has(n))return{backend:"playwright",reason:`auto: surface "${n}" excluded from Agent Browser`,probeMs:0,availability:null};if(t.headless)return{backend:"playwright",reason:"auto: headless mode requires Playwright",probeMs:0,availability:null};let r=Date.now(),o=await yP(),i=Date.now()-r;return o.available?{backend:"agent-browser",reason:"auto: Agent Browser available and preferred",probeMs:i,availability:o}:{backend:"playwright",reason:`auto: Agent Browser unavailable (${o.reason})`,probeMs:i,availability:o}}var CTe,BK=b(()=>{"use strict";FK();CTe=new Set(["daemon","subagent"])});import{createHash as _Te}from"crypto";function UK(e){return!!(e.role==="textbox"&&e.kind==="password"||e.label&&PTe.test(e.label))}function jK(e){return _Te("sha256").update(e,"utf8").digest("hex").slice(0,8)}function HK(e){let t=e.replace(/\s+/g," ").trim();return t.length<=80?t:t.slice(0,77)+"..."}var PTe,Iw=b(()=>{"use strict";PTe=/password|secret|token|api[_-]?key|otp|2fa/i});import{randomBytes as ITe}from"crypto";import{mkdir as MTe,stat as OTe,writeFile as $Te}from"fs/promises";import{join as bP}from"path";import{gzip as DTe}from"zlib";import{promisify as LTe}from"util";function FTe(e){return bP(qt(e),"browser")}function NTe(e){return bP(FTe(e),"screenshots")}function BTe(){return new Date().toISOString().replace(/[:.]/g,"-")}function UTe(){return ITe(3).toString("hex")}async function pu(e,t,n){if(t.length>WK)throw new Error(`writeScreenshotSidecar: buffer exceeds ${WK} byte cap (received ${t.length} bytes). Refusing to write oversized screenshot.`);let r=NTe(e);await MTe(r,{recursive:!0});let o=`${BTe()}-${UTe()}-${n}.png`,i=bP(r,o);await $Te(i,t);let{size:s}=await OTe(i);return{path:i,bytes:s}}var Wat,WK,wP=b(()=>{"use strict";B();Iw();Wat=LTe(DTe);WK=5*1024*1024});var Mw,KK=b(()=>{"use strict";Mw=class{baseUrl;token;constructor(t){this.baseUrl=t.url,this.token=t.token}async call(t,n,r=3e4){let o={version:1,method:t,params:n},i=new AbortController,s=setTimeout(()=>i.abort(),r);try{let a=await fetch(`${this.baseUrl}/agent`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.token}`,Host:new URL(this.baseUrl).host},body:JSON.stringify(o),signal:i.signal});if(!a.ok){let l=await a.text().catch(()=>"");throw new Error(`Agent Browser ${t} failed (HTTP ${a.status}): ${l}`)}return await a.json()}finally{clearTimeout(s)}}async listTabs(){return(await this.call("tabs.list",null)).tabs}async openTab(t){return{tabId:(await this.call("tabs.open",{url:t},6e4)).tab_id}}async closeTab(t){await this.call("tabs.close",{tab_id:t})}async read(t,n){return this.call("page.read",{tab_id:t,mode:n?.mode??"main",...n?.query?{query:n.query}:{},...n?.budget?{budget:n.budget}:{}})}async inspect(t,n){return this.call("page.inspect",{tab_id:t,mode:n?.mode??"interactive",...n?.query?{query:n.query}:{},...n?.limit?{limit:n.limit}:{}})}async click(t,n){await this.call("page.click",{tab_id:t,element_id:n})}async fill(t,n,r){await this.call("page.fill",{tab_id:t,element_id:n,value:r})}async press(t,n,r){await this.call("page.press",{tab_id:t,key:n,...r?{element_id:r}:{}})}async select(t,n,r){await this.call("page.select",{tab_id:t,element_id:n,value:r})}async waitFor(t,n,r){await this.call("page.wait",{tab_id:t,condition:n,...r?.value?{value:r.value}:{},...r?.timeout?{timeout:r.timeout}:{}},(r?.timeout??3e4)+5e3)}async evalScript(t,n){return this.call("page.eval",{tab_id:t,script:n})}async screenshot(t){return this.call("page.screenshot",{tab_id:t})}}});function SP(e){return{id:e.id,role:e.role,label:e.label,kind:e.kind,value:e.value,state:{disabled:e.disabled,...e.checked!==void 0?{checked:e.checked}:{},...e.selected!==void 0?{selected:e.selected}:{},...e.expanded!==void 0?{expanded:e.expanded}:{}},bbox:e.bbox,...e.selector?{selector:e.selector}:{}}}function GK(e,t){switch(t.kind){case"element_id":if(e.has(t.elementId))return t.elementId;throw new Error(`Element ${t.elementId} not found in current observation. Call browser_observe to refresh.`);case"selector":return null;case"semantic":return null}}async function vP(e,t,n,r,o,i){switch(n){case"click":await e.click(t,r);break;case"fill":if(o===void 0)throw new Error("fill requires a value");await e.fill(t,r,o);break;case"press":if(o===void 0)throw new Error("press requires a value (key combo)");await e.press(t,o,r);break;case"select":if(o===void 0)throw new Error("select requires a value");await e.select(t,r,o);break;case"hover":throw new Error("hover is not supported by Agent Browser; use element_id from a prior observation to target clicks instead");case"scroll_to":{let s=r.replace(/\\/g,"\\\\").replace(/"/g,'\\"');await e.evalScript(t,`document.querySelector('[data-element-id="${s}"]')?.scrollIntoView({behavior:'smooth',block:'center'})`);break}case"wait_for":await e.waitFor(t,"element",{value:r,timeout:i??1e4});break;default:throw new Error(`Unknown action: ${n}`)}}async function qK(e,t){if(t.target.kind!=="semantic")throw new Error("resolveSemanticAndAct called with non-semantic target");let{elements:n}=await e.client.inspect(e.tabId,{mode:"interactive",query:t.target.text,limit:10}),r=n;if(t.target.role){let l=t.target.role.toLowerCase();r=n.filter(c=>c.role.toLowerCase()===l)}if(r.length===0)throw new Error(`No element found matching semantic target: text="${t.target.text}"`+(t.target.role?`, role="${t.target.role}"`:""));if(r.length>1)return{outcome:"ambiguous_target",query:{text:t.target.text,...t.target.role?{role:t.target.role}:{}},candidates:r.slice(0,5).map(SP)};let i=r[0].id;await vP(e.client,e.tabId,t.action,i,t.value,t.timeoutMs);let s=await e.client.read(e.tabId,{mode:"main"}),a=Rr(s.url,e.config);return a.allowed?{elementId:i}:{outcome:"blocked_by_policy",url:s.url,reason:`action navigated to blocked domain: ${a.reason}`}}var zK=b(()=>{"use strict";Vi()});var VK={};In(VK,{AgentBrowserProvider:()=>kP});var kP,JK=b(()=>{"use strict";Vi();wP();KK();zK();kP=class{name="agent-browser";config;client;sessions=new Map;constructor(t,n){this.config=t,this.client=new Mw(n)}async open(t){let n=Rr(t.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:t.url,reason:n.reason};let r=this.sessions.get(t.sessionId);if(r)await this.client.evalScript(r.tabId,`window.location.href = ${JSON.stringify(t.url)}`),await this.client.waitFor(r.tabId,"load",{timeout:t.timeoutMs??3e4});else{let{tabId:s}=await this.client.openTab(t.url);await this.client.waitFor(s,"load",{timeout:t.timeoutMs??3e4}),r={tabId:s,observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null},this.sessions.set(t.sessionId,r)}let o=await this.client.read(r.tabId,{mode:"main"}),i=Rr(o.url,this.config);return i.allowed?this.buildObservation(r,t.sessionId,t.screenshot,void 0,"browser_open"):(await this.client.evalScript(r.tabId,"window.location.href = 'about:blank'").catch(()=>{}),{outcome:"blocked_by_policy",url:o.url,reason:`redirected to blocked domain: ${i.reason}`})}async observe(t){let n=this.sessions.get(t.sessionId);if(!n)throw new Error(`No Agent Browser tab open for session ${t.sessionId}. Call browser_open first.`);return this.buildObservation(n,t.sessionId,t.screenshot,t.maxElements,"browser_observe")}async act(t){let n=this.sessions.get(t.sessionId);if(!n)throw new Error(`No Agent Browser tab open for session ${t.sessionId}. Call browser_open first.`);let r=GK(n.knownElements,t.target);if(r===null){if(t.target.kind==="semantic"){let s=await qK({client:this.client,config:this.config,tabId:n.tabId},t);return"outcome"in s?s:(n.lastAction=`browser_act:${t.action}`,n.lastActionAt=new Date().toISOString(),this.buildObservation(n,t.sessionId,t.screenshot,void 0,"browser_act"))}throw t.target.kind==="selector"?new Error("selector targets are not supported by Agent Browser; use element_id or semantic targets"):new Error(`Cannot resolve target: ${JSON.stringify(t.target)}`)}await vP(this.client,n.tabId,t.action,r,t.value,t.timeoutMs),n.lastAction=`browser_act:${t.action}`,n.lastActionAt=new Date().toISOString();let o=await this.client.read(n.tabId,{mode:"main"}),i=Rr(o.url,this.config);return i.allowed?this.buildObservation(n,t.sessionId,t.screenshot,void 0,"browser_act"):(await this.client.evalScript(n.tabId,"window.location.href = 'about:blank'").catch(()=>{}),{outcome:"blocked_by_policy",url:o.url,reason:`action navigated to blocked domain: ${i.reason}`})}async render(t){throw new Error("AgentBrowserProvider does not support render(). Use PlaywrightProvider for one-shot content fetches.")}async screenshot(t){let n=this.sessions.get(t.sessionId);if(!n)throw new Error(`No Agent Browser tab open for session ${t.sessionId}. Call browser_open first.`);if(t.target!==void 0||t.fullPage)throw new Error("Agent Browser does not support element or full-page screenshots; omit target and fullPage.");let r=await this.client.screenshot(n.tabId),o=Buffer.from(r.data,"base64"),i=o.length>=24?o.readUInt32BE(16):0,s=o.length>=24?o.readUInt32BE(20):0;return{path:(await pu(t.sessionId,o,"browser_screenshot")).path,bytes:o.length,width:i,height:s,dataBase64:r.data,mediaType:"image/png"}}async extract(t){throw new Error("AgentBrowserProvider does not support extract() yet.")}async close(t){let n=this.sessions.get(t.sessionId);if(n){try{await this.client.closeTab(n.tabId)}catch{}this.sessions.delete(t.sessionId)}}describe(t){let n=this.sessions.get(t);return n?{active:!0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:1}:null}async shutdown(){let t=Array.from(this.sessions.entries()).map(async([,n])=>{try{await this.client.closeTab(n.tabId)}catch{}});await Promise.all(t),this.sessions.clear()}async buildObservation(t,n,r,o,i="browser_open"){let[s,a]=await Promise.all([this.client.read(t.tabId,{mode:"main",budget:4e3}),this.client.inspect(t.tabId,{mode:"interactive",limit:o??80})]),l=a.elements.map(SP),c=o??80,u=l.slice(0,c);t.observationCounter+=1,t.knownElements=new Map(u.map(h=>[h.id,h])),t.currentUrl=s.url,t.currentTitle=s.title;let d=[];l.length>c&&d.push(`page has ${l.length} interactive elements; showing first ${c}`);let p=null;if(r)try{let h=await this.client.screenshot(t.tabId),y=Buffer.from(h.data,"base64");p=(await pu(n,y,i)).path}catch{d.push("screenshot capture failed")}let f=`obs_${t.observationCounter.toString(36)}`,g={httpStatus:null,loadingState:"idle",hasDialog:!1,consoleErrors:0};return{observationId:f,url:s.url,title:s.title,textSummary:s.content.slice(0,4e3),interactive:u,status:g,warnings:d,screenshotPath:p,capturedAt:new Date().toISOString()}}}});import{existsSync as jTe,readFileSync as HTe}from"node:fs";import{createRequire as WTe}from"node:module";import{dirname as KTe,join as GTe}from"node:path";function QK(e){if(typeof e=="string")return e;let t=[],n=e;for(let r=0;r<zTe&&n instanceof Error;r++)t.push(n.message),n=n.cause;return t.length>0?t.join(" | "):String(e)}function wn(e){let t=QK(e);return XK.some(n=>t.includes(n))}function VTe(){try{let t=WTe(import.meta.url).resolve("playwright/package.json"),n=JSON.parse(HTe(t,"utf8"));if(typeof n!="object"||n===null)return;let r=n.bin,o=typeof r=="string"?r:typeof r=="object"&&r!==null?r.playwright:void 0;if(typeof o!="string"||o.length===0)return;let i=GTe(KTe(t),o);return jTe(i)?`node ${/\s/.test(i)?`"${i}"`:i} install chromium`:void 0}catch{return}}function ff(){return YK??=VTe()??qTe,YK}function TP(e){return e.includes("install chromium")}function er(e,t){let n=QK(e),r=t?.latched===!0?` ${JTe}`:"";if(n.includes("Executable doesn't exist")){let o="";return t?.headless===!0?o=" This launch was headless, which needs the `chromium_headless_shell-*` build.":t?.headless===!1&&(o=" This launch was headed, which needs the full `chromium-*` build \u2014 the headless shell alone does not satisfy it."),`browser tools require the Playwright chromium binary. Install via: ${ff()}.${o}${r}`}return`browser tools require the optional \`playwright\` peer dependency. Install via: pnpm add playwright (then ${ff()}). Or pick a different tool.${r}`}function mu(e,t,n=!1){if(!wn(e))return e;let r=e instanceof Error?e.message:String(e);return new Error(`${r}
|
|
438
438
|
|
|
439
|
-
${er(e,{headless:t,latched:n})}`,{cause:e})}var XK,qTe,zTe,YK,JTe,Ow=b(()=>{"use strict";XK=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],qTe="pnpm exec playwright install chromium",zTe=4;JTe="This session already latched the failure, so browser tools keep fast-failing with this same error \u2014 after installing, call browser_close once to retry."});import Na from"node:fs";import $w from"node:path";import{randomBytes as YTe}from"node:crypto";function XTe(){try{return"5.201.0"}catch{}try{let e=$w.resolve(import.meta.dirname,"../../../package.json"),t=Na.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var QTe,Dw,ZK=b(()=>{"use strict";Ow();B();fe();QTe=XTe(),Dw=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(t){this.config=t}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(t){this.launchFailure={error:t}}async ensureBrowser(){if(this.browser!==void 0&&this.browser.isConnected())return this.browser;if(this.launchFailure!==void 0)throw this.launchFailure.error;return this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=(async()=>{let t;try{({chromium:t}=await import("playwright"))}catch(n){let r=mu(n,this.config.headless,!0);throw this.latchLaunchFailure(r),this.launchPromise=void 0,r}try{let n=await t.launch({headless:this.config.headless});return this.browser=n,this.clearLaunchFailure(),n}catch(n){let r=mu(n,this.config.headless,!0);throw this.latchLaunchFailure(r),r}finally{this.launchPromise=void 0}})(),this.launchPromise)}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(t){let n=this.sessions.get(t);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),i=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),s={context:i,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(t,s),i}async ensurePage(t){let n=this.sessions.get(t);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(t);let r=this.sessions.get(t);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${t}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",i=>{i.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",i=>{i.isNavigationRequest()&&i.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",i=>{i.frame()===o.mainFrame()&&i.request().isNavigationRequest()&&(r.lastHttpStatus=i.status())}),o.on("dialog",i=>{r.openDialog=i}),o}getPage(t){return this.sessions.get(t)?.page}async renderHtml(t,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),i;n.requestGuard!==void 0&&await o.route("**/*",async a=>{try{await n.requestGuard(a.request().url()),await a.continue()}catch(l){i=l,await a.abort("blockedbyclient")}});let s=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",s,{once:!0});try{let a=await o.newPage(),l;try{l=await a.goto(t,{timeout:n.timeoutMs,waitUntil:n.waitUntil})}catch(p){throw i??p}if(i!==void 0)throw i;let c=await a.content();if(i!==void 0)throw i;let u=a.url(),d=l!==null?l.status():null;return{html:c,finalUrl:u,httpStatus:d}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",s),await o.close().catch(()=>{})}}getConsoleErrorCount(t){return this.sessions.get(t)?.consoleErrors??0}getLastHttpStatus(t){return this.sessions.get(t)?.lastHttpStatus??null}hasOpenDialog(t){return this.sessions.get(t)?.openDialog!==void 0}async dismissDialog(t,n=!0){let r=this.sessions.get(t);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(t){this.clearLaunchFailure();let n=this.sessions.get(t);n!==void 0&&(this.sessions.delete(t),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.clearLaunchFailure(),this.shutdownComplete)return;this.shutdownComplete=!0;let t=[...this.sessions.keys()];if(await Promise.all(t.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${QTe}`}}loadStorageState(t){let n=vc(t);try{if(!Na.existsSync(n))return;let r=JSON.parse(Na.readFileSync(n,"utf8"));return N("[browser/vault] restored session",{profile:t,file:n}),r}catch(r){N("[browser/vault] ignoring unreadable vault",{profile:t,file:n,err:r});return}}async saveStorageState(t,n){try{let r=vc(t);if(!Na.existsSync(r))return;let o=await n.storageState(),i=$w.join($w.dirname(r),`.${$w.basename(r)}.${process.pid}.${YTe(4).toString("hex")}.tmp`);Na.writeFileSync(i,JSON.stringify(o),{mode:384}),Na.chmodSync(i,384),Na.renameSync(i,r),N("[browser/vault] saved session",{profile:t,file:r})}catch(r){N("[browser/vault] save failed",{profile:t,err:r})}}}});import{createHash as ZTe}from"node:crypto";function eEe(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function tEe(e,t,n){return`el_${ZTe("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function nEe(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function eG(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function nG(e,t){let n=e.role??"",r=e.name??"";tG.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let i of e.children??[])nG(i,t)}async function rEe(e){return e.evaluate(t=>{let n=Array.from(document.querySelectorAll(t)),r=[];for(let o of n){let i=o.getBoundingClientRect(),s=o;if(i.width===0&&i.height===0){let u=window.getComputedStyle(s);if(u.display==="none"||u.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),l=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a==="input"?o.type||null:o.getAttribute("type");r.push({name:l,tagName:a,type:c,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(i.left),y:Math.round(i.top),w:Math.round(i.width),h:Math.round(i.height)}})}return r},rG).catch(()=>[])}async function oEe(e){return e.evaluate(t=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(t)),o=[];for(let i of r){let s=i.tagName.toLowerCase(),a=i.getAttribute("role")??"",l=i.getAttribute("aria-label")??i.getAttribute("placeholder")??(i.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a||(n[s]??"");if(s==="input"){let h=i.type;h==="checkbox"?c="checkbox":h==="radio"?c="radio":h==="button"||h==="submit"||h==="reset"?c="button":h==="search"?c="searchbox":c="textbox"}if(!c)continue;let u="value"in i?i.value:void 0,d=u!==void 0?String(u):void 0,p=i.disabled??!1,f=s==="input"?i.checked:void 0,g={role:c,name:l,disabled:p};d!==void 0&&(g.value=d),f!==void 0&&(g.checked=f),o.push(g)}return o},rG).catch(()=>[])}function iEe(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function Lw(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],i=iEe(e),s=i?i.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=rEe(e),l=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(e.url()),u=e.title().catch(()=>""),[d,p,f,g,h]=await Promise.all([s,a,l,c,u]),y,w=!1;d!==null?(y=[],nG(d,y)):(o.push("observation skipped accessibility tree (returned null)"),w=!0,y=(await oEe(e)).filter(M=>tG.has(M.role??"")));let S=new Map;for(let I of p){let M=eG(I.name),U=S.get(M);(!U||U.bbox.w===0&&I.bbox.w>0)&&S.set(M,I)}let v=y.map(I=>({ax:I,dom:S.get(eG(I.name??""))})),E=r?v:v.filter(I=>I.dom?I.dom.bbox.w>0||I.dom.bbox.h>0:!0);E.sort((I,M)=>{let U=I.dom?.bbox.y??0,O=M.dom?.bbox.y??0;if(U!==O)return U-O;let j=I.dom?.bbox.x??0,q=M.dom?.bbox.x??0;return j-q}),E.length>200&&o.push("page has 200+ interactive elements; consider scoping");let x=E.slice(0,n).map((I,M)=>{let U=I.ax.role??"generic",O=I.ax.name??"",j=tEe(U,O,M),q=I.dom?.bbox??{x:0,y:0,w:0,h:0},H=I.dom?.type??null,K=null;I.ax.value!==void 0&&I.ax.value!==null&&(K=String(I.ax.value)),I.ax.checked!==void 0&&(K=String(I.ax.checked)),UK({role:U,kind:H})&&(K="[redacted]");let X={disabled:I.ax.disabled??!1};I.ax.checked!==void 0&&(X.checked=I.ax.checked===!0||I.ax.checked==="mixed"),I.ax.selected!==void 0&&(X.selected=I.ax.selected),I.ax.expanded!==void 0&&(X.expanded=I.ax.expanded);let D;I.dom?.testId?D=`[data-testid="${I.dom.testId}"]`:I.dom?.id&&(D=`#${I.dom.id}`);let G={id:j,role:U,label:eEe(O),kind:H,value:K,state:X,bbox:q};return D!==void 0&&(G.selector=D),G}),_="idle";try{let I=await e.evaluate(()=>document.readyState);I==="loading"?_="loading":I==="interactive"?_="navigating":_="idle"}catch{_="navigating"}_!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),w&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let P=nEe(f),R=`obs_${t.observationCounter.toString(36)}`,C=new Date().toISOString();return{observationId:R,url:g,title:h,textSummary:P,interactive:x,status:{httpStatus:t.httpStatus??null,loadingState:_,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:C}}var tG,rG,oG=b(()=>{"use strict";Iw();tG=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);rG="a[href], button, input, select, textarea, [role], [tabindex], label"});async function iG(e,t){try{let n=await e.nth(t).evaluate(s=>{let a=s,l=a.getAttribute("role")??a.tagName.toLowerCase(),c=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",u=a.getBoundingClientRect();return{role:l,label:c,x:Math.round(u.x),y:Math.round(u.y),w:Math.round(u.width),h:Math.round(u.height)}}),r=`${n.role}:${n.label}:${t}`,o=0;for(let s=0;s<r.length;s++)o=o*31+r.charCodeAt(s)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function EP(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,i)=>iG(e,i)))).filter(o=>o!==null)}async function sEe(e){let t=new Set,n=[];for(let{loc:r,count:o}of e)for(let i=0;i<o;i++){let s;try{s=await r.nth(i).evaluate(a=>{let l=a,c=l.getBoundingClientRect();return`${l.tagName}@${Math.round(c.x)},${Math.round(c.y)}`})}catch{continue}t.has(s)||(t.add(s),n.push({key:s,locator:r,index:i}))}return n}async function xP(e,t,n){switch(t.kind){case"element_id":return aEe(e,t,n);case"selector":return lEe(e,t);case"semantic":return cEe(e,t)}}async function aEe(e,t,n){let r=n.get(t.elementId);if(r===void 0)return{outcome:"not_found",query:t};if(r.selector!==void 0){let l=e.locator(r.selector);if(await l.count()===1)return{outcome:"resolved",locator:l}}let o=e.getByRole(r.role,{name:r.label,exact:!0}),i=await o.count();if(i===0)return{outcome:"not_found",query:t};if(i===1)return{outcome:"resolved",locator:o};let s=await EP(o,i);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:s}}async function lEe(e,t){let n=e.locator(t.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:t};if(r===1)return{outcome:"resolved",locator:n};let o=await EP(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function cEe(e,t){return t.role!==void 0?uEe(e,t.text,t.role):dEe(e,t.text,t)}async function uEe(e,t,n){let r=e.getByRole(n,{name:t}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:t,role:n}};if(o===1)return{outcome:"resolved",locator:r};let i=await EP(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:i}}async function dEe(e,t,n){let r=e.getByRole("button",{name:t}),o=e.getByRole("link",{name:t}),i=e.getByLabel(t,{exact:!1}),[s,a,l]=await Promise.all([r.count(),o.count(),i.count()]);if(s+a+l===0)return{outcome:"not_found",query:n};let u=[];s>0&&u.push({loc:r,count:s}),a>0&&u.push({loc:o,count:a}),l>0&&u.push({loc:i,count:l});let d=await sEe(u);if(d.length===0)return{outcome:"not_found",query:n};if(d.length===1){let h=d[0];return h===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:h.locator.nth(h.index)}}let p=d.slice(0,5),f=[];for(let h=0;h<p.length;h++){let y=p[h];if(y===void 0)continue;let w=await iG(y.locator,y.index);if(w!==null){let S=`${w.role}:${w.label}:${h}`,v=0;for(let E=0;E<S.length;E++)v=v*31+S.charCodeAt(E)>>>0;f.push({...w,id:`el_${v.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var sG=b(()=>{"use strict"});async function RP(e,t,n,r){let o=e.url();if(o===n)return null;let i=Rr(o,t);if(i.allowed)return null;try{await e.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:i.reason}}var aG=b(()=>{"use strict";Vi()});var CP={};In(CP,{PlaywrightProvider:()=>AP});function lG(e){switch(e.kind){case"semantic":return e.role!==void 0?`semantic('${e.text}', role='${e.role}')`:`semantic('${e.text}')`;case"element_id":return`element_id(${e.elementId})`;case"selector":return`selector(${e.selector})`}}var AP,_P=b(()=>{"use strict";ZK();oG();sG();Vi();aG();wP();AP=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new Dw(t)}async open(t){let n=Rr(t.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:t.url,reason:n.reason};let{sessionId:r}=t,o=await this.launcher.ensurePage(r),i=this.ensureSessionState(r),s=null,a=null;try{await o.goto(t.url,{timeout:t.timeoutMs??3e4,waitUntil:t.waitFor??"load"})}catch(d){a=d}let l=o.url();if(!(a!==null&&(l===""||l==="about:blank"))){let d=await RP(o,this.config,t.url,()=>this.close({sessionId:r}));if(d!==null)return d}(t.screenshot===!0||a!==null)&&(s=await this.captureScreenshot(o,r,"browser_open")),i.observationCounter+=1;let u=await Lw(o,{observationCounter:i.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(i,u.interactive,u.url,u.title,"browser_open"),a!==null)throw a;return u}async observe(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),i=null;t.screenshot===!0&&(i=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let s=await Lw(r,{observationCounter:o.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:t.includeHidden,maxElements:t.maxElements});return this.updateSessionFromObservation(o,s.interactive,s.url,s.title,"browser_observe"),s}async act(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),i=r.url(),s=t.timeoutMs??3e4,a=await xP(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${lG(t.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:l}=a,c=null,u=async()=>{switch(t.action){case"click":await l.click({timeout:s});break;case"fill":await l.fill(t.value??"");break;case"press":await l.press(t.value??"");break;case"select":await l.selectOption(t.value??"");break;case"hover":await l.hover({timeout:s});break;case"scroll_to":await l.scrollIntoViewIfNeeded({timeout:s});break;case"wait_for":await l.waitFor({timeout:s,state:"visible"});break}};try{await u()}catch(h){if(h instanceof Error&&/navigation|net::ERR/i.test(h.message))try{await u()}catch(y){c=y}else c=h}let d=await RP(r,this.config,i,()=>this.close({sessionId:n}));if(d!==null)return d;let p=null;(t.screenshot===!0||c!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Lw(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),g=`browser_act:${t.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,g),c!==null)throw c;return f}async render(t){return this.launcher.renderHtml(t.url,{timeoutMs:t.timeoutMs??3e4,waitUntil:t.waitFor??"load",signal:t.signal,requestGuard:t.requestGuard})}async screenshot(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),i;if(t.target!==void 0){let u=await xP(r,t.target,o.knownElements);if(u.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${lG(t.target)}`);if(u.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");i=await u.locator.screenshot()}else i=await r.screenshot({fullPage:t.fullPage??!1});let{path:s,bytes:a}=await pu(n,i,"browser_screenshot"),l=0,c=0;if(t.fullPage===!0)try{let u=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));l=u.w,c=u.h}catch{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}else{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}return{path:s,bytes:a,width:l,height:c,dataBase64:i.toString("base64"),mediaType:"image/png"}}async extract(t){throw new Error("browser_extract not implemented in Phase 1")}async close(t){await this.launcher.closeSession(t.sessionId),this.sessions.delete(t.sessionId)}describe(t){let n=this.sessions.get(t);if(n===void 0)return null;let r=this.launcher.getPage(t);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(t){let n=this.sessions.get(t);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(t,r),r}updateSessionFromObservation(t,n,r,o,i){t.knownElements=new Map(n.map(s=>[s.id,s])),t.currentUrl=r,t.currentTitle=o,t.lastAction=i,t.lastActionAt=new Date().toISOString()}async captureScreenshot(t,n,r){try{let o=await t.screenshot({fullPage:!1}),{path:i}=await pu(n,o,r);return i}catch{return null}}}});var Ua={};In(Ua,{__resetBrowserRegistryForTests:()=>yEe,browserProviderActive:()=>fEe,closeBrowserProvider:()=>IP,getBrowserProvider:()=>mEe,getLastRoutingDecision:()=>hEe,peekBrowserProvider:()=>gEe});function cG(){Promise.resolve(IP()).then(()=>{process.exit(130)})}function uG(){Promise.resolve(IP()).then(()=>{process.exit(143)})}function dG(){mo=null}function pEe(){Fw||(process.on("SIGINT",cG),process.on("SIGTERM",uG),process.on("exit",dG),Fw=!0)}function pG(){Fw&&(process.removeListener("SIGINT",cG),process.removeListener("SIGTERM",uG),process.removeListener("exit",dG),Fw=!1)}async function mEe(e){return mo!==null?mo:(Ba!==null||(Ba=(async()=>{let t=gP(e),n=e?.surface??(e?.env??{}).AGENT_SURFACE??k.AGENT_SURFACE,r=await NK({config:t,surface:n});PP=r;let o;if(r.backend==="agent-browser"){let{AgentBrowserProvider:i}=await Promise.resolve().then(()=>(JK(),VK)),s=r.availability.connection;o=new i(t,s)}else{let{PlaywrightProvider:i}=await Promise.resolve().then(()=>(_P(),CP));o=new i(t)}return pEe(),mo=o,Ba=null,o})()),Ba)}async function IP(){if(mo===null)return;let e=mo;mo=null,Ba=null,pG(),await e.shutdown()}function fEe(){return mo!==null}function gEe(){return mo}function hEe(){return PP}function yEe(){mo=null,Ba=null,PP=null,pG()}var mo,Ba,Fw,PP,ja=b(()=>{"use strict";Vi();BK();F();mo=null,Ba=null,Fw=!1,PP=null});async function mG(e,t){try{return await xK(e,t)}catch(n){return N("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function TEe(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(ja(),Ua)),r=await n();try{return await r.render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}catch(o){if(r.name==="agent-browser"){let{PlaywrightProvider:i}=await Promise.resolve().then(()=>(_P(),CP)),{loadBrowserConfig:s}=await Promise.resolve().then(()=>(Vi(),hP)),a=s(),l=new i(a);try{return await l.render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}finally{await l.shutdown()}}throw o}}async function fG(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??TEe,o=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},i=null,s="",a=e,l=null,c=null;try{let d=await zi(n,e,{headers:kEe,signal:t.signal},o);l=d.status,a=d.url||e;let p=d.headers.get("content-type")??"";if(d.ok){if(vEe.test(p))throw new Error(`web_scrape markdown mode received binary content (${p.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let f=await d.text();if(SEe.test(p)&&!wEe.test(p))return{title:"",markdown:f.trim(),finalUrl:a,usedRender:!1};if(s=f,i=await mG(f,a),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(d){if(t.signal.aborted||d instanceof Jt||d instanceof Error&&d.message.startsWith("web_scrape markdown mode received binary"))throw d;c=d}if(!(i===null||i.textLength<200)&&i!==null){let d=dP({html:s,extractedTextLength:i.textLength});return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1,...d!==void 0?{advisory:d}:{}}}try{await mf(e,o);let d=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:f=>mf(f,o)});d.finalUrl!==e&&/^https?:\/\//i.test(d.finalUrl)&&await mf(d.finalUrl,o);let p=await mG(d.html,d.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(i===null||p.textLength>=i.textLength){let f=dP({html:d.html,extractedTextLength:p.textLength});return{title:p.title,markdown:p.markdown,finalUrl:d.finalUrl,usedRender:!0,...f!==void 0?{advisory:f}:{}}}}catch(d){if(t.signal.aborted||d instanceof Jt)throw d;if(i===null){let p=d instanceof Error?d.message:String(d),f=c instanceof Error?c.message:`HTTP ${l??"error"}`,g=new Error(`web_scrape could not retrieve ${e}: fetch failed (${f}) and render failed (${p}).`);throw g.cause=d,g}}if(i!==null)return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${l??"error"}).`)}var wEe,SEe,vEe,kEe,gG=b(()=>{"use strict";RK();pP();Fa();fe();wEe=/(text\/html|application\/xhtml\+xml)/i,SEe=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,vEe=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,kEe={"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 REe(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let i=await t(EEe,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":e.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),xEe),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!i.ok){let l="";try{let u=await i.text(),d=ie(u);d&&(l=`: ${d.length>200?d.slice(0,200)+"\u2026":d}`)}catch{}let c=i.statusText?` ${i.statusText}`:"";throw new Error(`Exa Search HTTP ${i.status}${c}${l}`)}let s;try{s=await i.json()}catch(l){throw new Error(`Exa Search response was not JSON: ${l instanceof Error?l.message:String(l)}`)}return(s.results??[]).slice(0,r).map(l=>({title:(l.title??"").trim()||"(untitled)",url:l.url??"",description:(l.highlights?.[0]??"").trim()})).filter(l=>l.url.length>0)}}}function hG(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?REe({apiKey:e.exaApiKey,fetchFn:e.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function yG(e,t){if(t.length===0)return`# Search results for "${e}"
|
|
439
|
+
${er(e,{headless:t,latched:n})}`,{cause:e})}var XK,qTe,zTe,YK,JTe,Ow=b(()=>{"use strict";XK=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],qTe="pnpm exec playwright install chromium",zTe=4;JTe="This session already latched the failure, so browser tools keep fast-failing with this same error \u2014 after installing, call browser_close once to retry."});import Na from"node:fs";import $w from"node:path";import{randomBytes as YTe}from"node:crypto";function XTe(){try{return"5.201.1"}catch{}try{let e=$w.resolve(import.meta.dirname,"../../../package.json"),t=Na.readFileSync(e,"utf8"),n=JSON.parse(t);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var QTe,Dw,ZK=b(()=>{"use strict";Ow();B();fe();QTe=XTe(),Dw=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(t){this.config=t}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(t){this.launchFailure={error:t}}async ensureBrowser(){if(this.browser!==void 0&&this.browser.isConnected())return this.browser;if(this.launchFailure!==void 0)throw this.launchFailure.error;return this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=(async()=>{let t;try{({chromium:t}=await import("playwright"))}catch(n){let r=mu(n,this.config.headless,!0);throw this.latchLaunchFailure(r),this.launchPromise=void 0,r}try{let n=await t.launch({headless:this.config.headless});return this.browser=n,this.clearLaunchFailure(),n}catch(n){let r=mu(n,this.config.headless,!0);throw this.latchLaunchFailure(r),r}finally{this.launchPromise=void 0}})(),this.launchPromise)}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(t){let n=this.sessions.get(t);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),i=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),s={context:i,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(t,s),i}async ensurePage(t){let n=this.sessions.get(t);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(t);let r=this.sessions.get(t);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${t}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",i=>{i.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",i=>{i.isNavigationRequest()&&i.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",i=>{i.frame()===o.mainFrame()&&i.request().isNavigationRequest()&&(r.lastHttpStatus=i.status())}),o.on("dialog",i=>{r.openDialog=i}),o}getPage(t){return this.sessions.get(t)?.page}async renderHtml(t,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),i;n.requestGuard!==void 0&&await o.route("**/*",async a=>{try{await n.requestGuard(a.request().url()),await a.continue()}catch(l){i=l,await a.abort("blockedbyclient")}});let s=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",s,{once:!0});try{let a=await o.newPage(),l;try{l=await a.goto(t,{timeout:n.timeoutMs,waitUntil:n.waitUntil})}catch(p){throw i??p}if(i!==void 0)throw i;let c=await a.content();if(i!==void 0)throw i;let u=a.url(),d=l!==null?l.status():null;return{html:c,finalUrl:u,httpStatus:d}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",s),await o.close().catch(()=>{})}}getConsoleErrorCount(t){return this.sessions.get(t)?.consoleErrors??0}getLastHttpStatus(t){return this.sessions.get(t)?.lastHttpStatus??null}hasOpenDialog(t){return this.sessions.get(t)?.openDialog!==void 0}async dismissDialog(t,n=!0){let r=this.sessions.get(t);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(t){this.clearLaunchFailure();let n=this.sessions.get(t);n!==void 0&&(this.sessions.delete(t),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.clearLaunchFailure(),this.shutdownComplete)return;this.shutdownComplete=!0;let t=[...this.sessions.keys()];if(await Promise.all(t.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${QTe}`}}loadStorageState(t){let n=vc(t);try{if(!Na.existsSync(n))return;let r=JSON.parse(Na.readFileSync(n,"utf8"));return N("[browser/vault] restored session",{profile:t,file:n}),r}catch(r){N("[browser/vault] ignoring unreadable vault",{profile:t,file:n,err:r});return}}async saveStorageState(t,n){try{let r=vc(t);if(!Na.existsSync(r))return;let o=await n.storageState(),i=$w.join($w.dirname(r),`.${$w.basename(r)}.${process.pid}.${YTe(4).toString("hex")}.tmp`);Na.writeFileSync(i,JSON.stringify(o),{mode:384}),Na.chmodSync(i,384),Na.renameSync(i,r),N("[browser/vault] saved session",{profile:t,file:r})}catch(r){N("[browser/vault] save failed",{profile:t,err:r})}}}});import{createHash as ZTe}from"node:crypto";function eEe(e){return e?e.replace(/\s+/g," ").trim().slice(0,200):""}function tEe(e,t,n){return`el_${ZTe("sha256").update(`${e}:${t}:${n}`).digest("hex").slice(0,6)}`}function nEe(e){let t=e.replace(/\s+/g," ").trim(),n=4e3;return t.length<=n?t:t.slice(0,n)+"\u2026[truncated]"}function eG(e){return e.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function nG(e,t){let n=e.role??"",r=e.name??"";tG.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&t.push(e);for(let i of e.children??[])nG(i,t)}async function rEe(e){return e.evaluate(t=>{let n=Array.from(document.querySelectorAll(t)),r=[];for(let o of n){let i=o.getBoundingClientRect(),s=o;if(i.width===0&&i.height===0){let u=window.getComputedStyle(s);if(u.display==="none"||u.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),l=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a==="input"?o.type||null:o.getAttribute("type");r.push({name:l,tagName:a,type:c,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(i.left),y:Math.round(i.top),w:Math.round(i.width),h:Math.round(i.height)}})}return r},rG).catch(()=>[])}async function oEe(e){return e.evaluate(t=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(t)),o=[];for(let i of r){let s=i.tagName.toLowerCase(),a=i.getAttribute("role")??"",l=i.getAttribute("aria-label")??i.getAttribute("placeholder")??(i.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a||(n[s]??"");if(s==="input"){let h=i.type;h==="checkbox"?c="checkbox":h==="radio"?c="radio":h==="button"||h==="submit"||h==="reset"?c="button":h==="search"?c="searchbox":c="textbox"}if(!c)continue;let u="value"in i?i.value:void 0,d=u!==void 0?String(u):void 0,p=i.disabled??!1,f=s==="input"?i.checked:void 0,g={role:c,name:l,disabled:p};d!==void 0&&(g.value=d),f!==void 0&&(g.checked=f),o.push(g)}return o},rG).catch(()=>[])}function iEe(e){let n=e.accessibility;return n!==null&&typeof n=="object"?n:null}async function Lw(e,t){let n=t.maxElements??80,r=t.includeHidden??!1,o=[],i=iEe(e),s=i?i.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=rEe(e),l=e.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(e.url()),u=e.title().catch(()=>""),[d,p,f,g,h]=await Promise.all([s,a,l,c,u]),y,w=!1;d!==null?(y=[],nG(d,y)):(o.push("observation skipped accessibility tree (returned null)"),w=!0,y=(await oEe(e)).filter(M=>tG.has(M.role??"")));let S=new Map;for(let I of p){let M=eG(I.name),U=S.get(M);(!U||U.bbox.w===0&&I.bbox.w>0)&&S.set(M,I)}let v=y.map(I=>({ax:I,dom:S.get(eG(I.name??""))})),E=r?v:v.filter(I=>I.dom?I.dom.bbox.w>0||I.dom.bbox.h>0:!0);E.sort((I,M)=>{let U=I.dom?.bbox.y??0,O=M.dom?.bbox.y??0;if(U!==O)return U-O;let j=I.dom?.bbox.x??0,q=M.dom?.bbox.x??0;return j-q}),E.length>200&&o.push("page has 200+ interactive elements; consider scoping");let x=E.slice(0,n).map((I,M)=>{let U=I.ax.role??"generic",O=I.ax.name??"",j=tEe(U,O,M),q=I.dom?.bbox??{x:0,y:0,w:0,h:0},H=I.dom?.type??null,K=null;I.ax.value!==void 0&&I.ax.value!==null&&(K=String(I.ax.value)),I.ax.checked!==void 0&&(K=String(I.ax.checked)),UK({role:U,kind:H})&&(K="[redacted]");let X={disabled:I.ax.disabled??!1};I.ax.checked!==void 0&&(X.checked=I.ax.checked===!0||I.ax.checked==="mixed"),I.ax.selected!==void 0&&(X.selected=I.ax.selected),I.ax.expanded!==void 0&&(X.expanded=I.ax.expanded);let D;I.dom?.testId?D=`[data-testid="${I.dom.testId}"]`:I.dom?.id&&(D=`#${I.dom.id}`);let G={id:j,role:U,label:eEe(O),kind:H,value:K,state:X,bbox:q};return D!==void 0&&(G.selector=D),G}),_="idle";try{let I=await e.evaluate(()=>document.readyState);I==="loading"?_="loading":I==="interactive"?_="navigating":_="idle"}catch{_="navigating"}_!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),w&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let P=nEe(f),R=`obs_${t.observationCounter.toString(36)}`,C=new Date().toISOString();return{observationId:R,url:g,title:h,textSummary:P,interactive:x,status:{httpStatus:t.httpStatus??null,loadingState:_,hasDialog:t.hasDialog??!1,consoleErrors:t.consoleErrors??0},warnings:o,screenshotPath:t.screenshotPath??null,capturedAt:C}}var tG,rG,oG=b(()=>{"use strict";Iw();tG=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);rG="a[href], button, input, select, textarea, [role], [tabindex], label"});async function iG(e,t){try{let n=await e.nth(t).evaluate(s=>{let a=s,l=a.getAttribute("role")??a.tagName.toLowerCase(),c=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",u=a.getBoundingClientRect();return{role:l,label:c,x:Math.round(u.x),y:Math.round(u.y),w:Math.round(u.width),h:Math.round(u.height)}}),r=`${n.role}:${n.label}:${t}`,o=0;for(let s=0;s<r.length;s++)o=o*31+r.charCodeAt(s)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function EP(e,t){let n=Math.min(t,5);return(await Promise.all(Array.from({length:n},(o,i)=>iG(e,i)))).filter(o=>o!==null)}async function sEe(e){let t=new Set,n=[];for(let{loc:r,count:o}of e)for(let i=0;i<o;i++){let s;try{s=await r.nth(i).evaluate(a=>{let l=a,c=l.getBoundingClientRect();return`${l.tagName}@${Math.round(c.x)},${Math.round(c.y)}`})}catch{continue}t.has(s)||(t.add(s),n.push({key:s,locator:r,index:i}))}return n}async function xP(e,t,n){switch(t.kind){case"element_id":return aEe(e,t,n);case"selector":return lEe(e,t);case"semantic":return cEe(e,t)}}async function aEe(e,t,n){let r=n.get(t.elementId);if(r===void 0)return{outcome:"not_found",query:t};if(r.selector!==void 0){let l=e.locator(r.selector);if(await l.count()===1)return{outcome:"resolved",locator:l}}let o=e.getByRole(r.role,{name:r.label,exact:!0}),i=await o.count();if(i===0)return{outcome:"not_found",query:t};if(i===1)return{outcome:"resolved",locator:o};let s=await EP(o,i);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:s}}async function lEe(e,t){let n=e.locator(t.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:t};if(r===1)return{outcome:"resolved",locator:n};let o=await EP(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${t.selector}]`},candidates:o}}async function cEe(e,t){return t.role!==void 0?uEe(e,t.text,t.role):dEe(e,t.text,t)}async function uEe(e,t,n){let r=e.getByRole(n,{name:t}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:t,role:n}};if(o===1)return{outcome:"resolved",locator:r};let i=await EP(r,o);return{outcome:"ambiguous_target",query:{text:t,role:n},candidates:i}}async function dEe(e,t,n){let r=e.getByRole("button",{name:t}),o=e.getByRole("link",{name:t}),i=e.getByLabel(t,{exact:!1}),[s,a,l]=await Promise.all([r.count(),o.count(),i.count()]);if(s+a+l===0)return{outcome:"not_found",query:n};let u=[];s>0&&u.push({loc:r,count:s}),a>0&&u.push({loc:o,count:a}),l>0&&u.push({loc:i,count:l});let d=await sEe(u);if(d.length===0)return{outcome:"not_found",query:n};if(d.length===1){let h=d[0];return h===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:h.locator.nth(h.index)}}let p=d.slice(0,5),f=[];for(let h=0;h<p.length;h++){let y=p[h];if(y===void 0)continue;let w=await iG(y.locator,y.index);if(w!==null){let S=`${w.role}:${w.label}:${h}`,v=0;for(let E=0;E<S.length;E++)v=v*31+S.charCodeAt(E)>>>0;f.push({...w,id:`el_${v.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:t},candidates:f}}var sG=b(()=>{"use strict"});async function RP(e,t,n,r){let o=e.url();if(o===n)return null;let i=Rr(o,t);if(i.allowed)return null;try{await e.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:i.reason}}var aG=b(()=>{"use strict";Vi()});var CP={};In(CP,{PlaywrightProvider:()=>AP});function lG(e){switch(e.kind){case"semantic":return e.role!==void 0?`semantic('${e.text}', role='${e.role}')`:`semantic('${e.text}')`;case"element_id":return`element_id(${e.elementId})`;case"selector":return`selector(${e.selector})`}}var AP,_P=b(()=>{"use strict";ZK();oG();sG();Vi();aG();wP();AP=class{name="playwright";config;launcher;sessions=new Map;constructor(t){this.config=t,this.launcher=new Dw(t)}async open(t){let n=Rr(t.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:t.url,reason:n.reason};let{sessionId:r}=t,o=await this.launcher.ensurePage(r),i=this.ensureSessionState(r),s=null,a=null;try{await o.goto(t.url,{timeout:t.timeoutMs??3e4,waitUntil:t.waitFor??"load"})}catch(d){a=d}let l=o.url();if(!(a!==null&&(l===""||l==="about:blank"))){let d=await RP(o,this.config,t.url,()=>this.close({sessionId:r}));if(d!==null)return d}(t.screenshot===!0||a!==null)&&(s=await this.captureScreenshot(o,r,"browser_open")),i.observationCounter+=1;let u=await Lw(o,{observationCounter:i.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(i,u.interactive,u.url,u.title,"browser_open"),a!==null)throw a;return u}async observe(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),i=null;t.screenshot===!0&&(i=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let s=await Lw(r,{observationCounter:o.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:t.includeHidden,maxElements:t.maxElements});return this.updateSessionFromObservation(o,s.interactive,s.url,s.title,"browser_observe"),s}async act(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),i=r.url(),s=t.timeoutMs??3e4,a=await xP(r,t.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${lG(t.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:l}=a,c=null,u=async()=>{switch(t.action){case"click":await l.click({timeout:s});break;case"fill":await l.fill(t.value??"");break;case"press":await l.press(t.value??"");break;case"select":await l.selectOption(t.value??"");break;case"hover":await l.hover({timeout:s});break;case"scroll_to":await l.scrollIntoViewIfNeeded({timeout:s});break;case"wait_for":await l.waitFor({timeout:s,state:"visible"});break}};try{await u()}catch(h){if(h instanceof Error&&/navigation|net::ERR/i.test(h.message))try{await u()}catch(y){c=y}else c=h}let d=await RP(r,this.config,i,()=>this.close({sessionId:n}));if(d!==null)return d;let p=null;(t.screenshot===!0||c!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Lw(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),g=`browser_act:${t.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,g),c!==null)throw c;return f}async render(t){return this.launcher.renderHtml(t.url,{timeoutMs:t.timeoutMs??3e4,waitUntil:t.waitFor??"load",signal:t.signal,requestGuard:t.requestGuard})}async screenshot(t){let{sessionId:n}=t,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),i;if(t.target!==void 0){let u=await xP(r,t.target,o.knownElements);if(u.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${lG(t.target)}`);if(u.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");i=await u.locator.screenshot()}else i=await r.screenshot({fullPage:t.fullPage??!1});let{path:s,bytes:a}=await pu(n,i,"browser_screenshot"),l=0,c=0;if(t.fullPage===!0)try{let u=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));l=u.w,c=u.h}catch{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}else{let u=r.viewportSize();l=u?.width??0,c=u?.height??0}return{path:s,bytes:a,width:l,height:c,dataBase64:i.toString("base64"),mediaType:"image/png"}}async extract(t){throw new Error("browser_extract not implemented in Phase 1")}async close(t){await this.launcher.closeSession(t.sessionId),this.sessions.delete(t.sessionId)}describe(t){let n=this.sessions.get(t);if(n===void 0)return null;let r=this.launcher.getPage(t);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(t){let n=this.sessions.get(t);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(t,r),r}updateSessionFromObservation(t,n,r,o,i){t.knownElements=new Map(n.map(s=>[s.id,s])),t.currentUrl=r,t.currentTitle=o,t.lastAction=i,t.lastActionAt=new Date().toISOString()}async captureScreenshot(t,n,r){try{let o=await t.screenshot({fullPage:!1}),{path:i}=await pu(n,o,r);return i}catch{return null}}}});var Ua={};In(Ua,{__resetBrowserRegistryForTests:()=>yEe,browserProviderActive:()=>fEe,closeBrowserProvider:()=>IP,getBrowserProvider:()=>mEe,getLastRoutingDecision:()=>hEe,peekBrowserProvider:()=>gEe});function cG(){Promise.resolve(IP()).then(()=>{process.exit(130)})}function uG(){Promise.resolve(IP()).then(()=>{process.exit(143)})}function dG(){mo=null}function pEe(){Fw||(process.on("SIGINT",cG),process.on("SIGTERM",uG),process.on("exit",dG),Fw=!0)}function pG(){Fw&&(process.removeListener("SIGINT",cG),process.removeListener("SIGTERM",uG),process.removeListener("exit",dG),Fw=!1)}async function mEe(e){return mo!==null?mo:(Ba!==null||(Ba=(async()=>{let t=gP(e),n=e?.surface??(e?.env??{}).AGENT_SURFACE??k.AGENT_SURFACE,r=await NK({config:t,surface:n});PP=r;let o;if(r.backend==="agent-browser"){let{AgentBrowserProvider:i}=await Promise.resolve().then(()=>(JK(),VK)),s=r.availability.connection;o=new i(t,s)}else{let{PlaywrightProvider:i}=await Promise.resolve().then(()=>(_P(),CP));o=new i(t)}return pEe(),mo=o,Ba=null,o})()),Ba)}async function IP(){if(mo===null)return;let e=mo;mo=null,Ba=null,pG(),await e.shutdown()}function fEe(){return mo!==null}function gEe(){return mo}function hEe(){return PP}function yEe(){mo=null,Ba=null,PP=null,pG()}var mo,Ba,Fw,PP,ja=b(()=>{"use strict";Vi();BK();F();mo=null,Ba=null,Fw=!1,PP=null});async function mG(e,t){try{return await xK(e,t)}catch(n){return N("[web/scrape] extraction failed",{url:t,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function TEe(e,t){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(ja(),Ua)),r=await n();try{return await r.render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}catch(o){if(r.name==="agent-browser"){let{PlaywrightProvider:i}=await Promise.resolve().then(()=>(_P(),CP)),{loadBrowserConfig:s}=await Promise.resolve().then(()=>(Vi(),hP)),a=s(),l=new i(a);try{return await l.render({url:e,timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:t.requestGuard})}finally{await l.shutdown()}}throw o}}async function fG(e,t){let n=t.fetchFn??globalThis.fetch,r=t.renderFn??TEe,o=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},i=null,s="",a=e,l=null,c=null;try{let d=await zi(n,e,{headers:kEe,signal:t.signal},o);l=d.status,a=d.url||e;let p=d.headers.get("content-type")??"";if(d.ok){if(vEe.test(p))throw new Error(`web_scrape markdown mode received binary content (${p.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let f=await d.text();if(SEe.test(p)&&!wEe.test(p))return{title:"",markdown:f.trim(),finalUrl:a,usedRender:!1};if(s=f,i=await mG(f,a),t.signal.aborted)throw t.signal.reason??new Error("aborted")}}catch(d){if(t.signal.aborted||d instanceof Jt||d instanceof Error&&d.message.startsWith("web_scrape markdown mode received binary"))throw d;c=d}if(!(i===null||i.textLength<200)&&i!==null){let d=dP({html:s,extractedTextLength:i.textLength});return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1,...d!==void 0?{advisory:d}:{}}}try{await mf(e,o);let d=await r(e,{timeoutMs:t.timeoutMs,signal:t.signal,requestGuard:f=>mf(f,o)});d.finalUrl!==e&&/^https?:\/\//i.test(d.finalUrl)&&await mf(d.finalUrl,o);let p=await mG(d.html,d.finalUrl);if(t.signal.aborted)throw t.signal.reason??new Error("aborted");if(i===null||p.textLength>=i.textLength){let f=dP({html:d.html,extractedTextLength:p.textLength});return{title:p.title,markdown:p.markdown,finalUrl:d.finalUrl,usedRender:!0,...f!==void 0?{advisory:f}:{}}}}catch(d){if(t.signal.aborted||d instanceof Jt)throw d;if(i===null){let p=d instanceof Error?d.message:String(d),f=c instanceof Error?c.message:`HTTP ${l??"error"}`,g=new Error(`web_scrape could not retrieve ${e}: fetch failed (${f}) and render failed (${p}).`);throw g.cause=d,g}}if(i!==null)return{title:i.title,markdown:i.markdown,finalUrl:a,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${e} (HTTP ${l??"error"}).`)}var wEe,SEe,vEe,kEe,gG=b(()=>{"use strict";RK();pP();Fa();fe();wEe=/(text\/html|application\/xhtml\+xml)/i,SEe=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,vEe=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,kEe={"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 REe(e){let t=e.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let i=await t(EEe,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":e.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),xEe),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!i.ok){let l="";try{let u=await i.text(),d=ie(u);d&&(l=`: ${d.length>200?d.slice(0,200)+"\u2026":d}`)}catch{}let c=i.statusText?` ${i.statusText}`:"";throw new Error(`Exa Search HTTP ${i.status}${c}${l}`)}let s;try{s=await i.json()}catch(l){throw new Error(`Exa Search response was not JSON: ${l instanceof Error?l.message:String(l)}`)}return(s.results??[]).slice(0,r).map(l=>({title:(l.title??"").trim()||"(untitled)",url:l.url??"",description:(l.highlights?.[0]??"").trim()})).filter(l=>l.url.length>0)}}}function hG(e){return e.exaApiKey!==void 0&&e.exaApiKey.trim()!==""?REe({apiKey:e.exaApiKey,fetchFn:e.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function yG(e,t){if(t.length===0)return`# Search results for "${e}"
|
|
440
440
|
|
|
441
441
|
(no results)`;let n=[`# Search results for "${e}"`,""];return t.forEach((r,o)=>{n.push(`## ${o+1}. ${r.title}`),r.url&&n.push(r.url),r.description&&n.push(r.description),n.push("")}),n.join(`
|
|
442
442
|
`).trimEnd()}var EEe,xEe,bG=b(()=>{"use strict";Le();EEe="https://api.exa.ai/search",xEe=10});function Nw(e){if(e instanceof Error&&e.name==="TimeoutError")return"timeout";let t=e instanceof Error?e.message:String(e);return/Timeout\s+\d+\s*ms exceeded/i.test(t)?"timeout":void 0}var Ha=b(()=>{"use strict";Ow()});function MEe(e){if(!e||typeof e!="object")return{error:"Invalid input: expected an object"};let t=e,n=t.mode??"markdown";if(n!=="markdown"&&n!=="raw"&&n!=="search")return{error:`Invalid input: mode must be one of "markdown", "raw", "search" (got ${JSON.stringify(n)})`};let r=n,o,i;if(r==="search"){if(typeof t.query!="string"||t.query.length===0)return{error:'Invalid input: search mode requires a non-empty "query" string'};i=t.query}else{if(typeof t.url!="string"||t.url.length===0)return{error:`Invalid input: ${r} mode requires a non-empty "url" string`};let l;try{l=new URL(t.url)}catch{return{error:`Invalid input: "${t.url}" is not a valid absolute URL`}}if(l.protocol!=="http:"&&l.protocol!=="https:")return{error:`Invalid input: protocol "${l.protocol}" not supported (http/https only)`};o=l.toString()}let s=AEe;if(t.timeout_ms!==void 0){if(typeof t.timeout_ms!="number"||!Number.isFinite(t.timeout_ms)||t.timeout_ms<=0)return{error:"Invalid input: timeout_ms must be a positive finite number"};s=Math.min(t.timeout_ms,CEe)}let a=_Ee;if(t.max_bytes!==void 0){if(typeof t.max_bytes!="number"||!Number.isFinite(t.max_bytes)||t.max_bytes<=0)return{error:"Invalid input: max_bytes must be a positive finite number"};a=Math.min(t.max_bytes,PEe)}return{mode:r,url:o,query:i,timeoutMs:s,maxBytes:a}}function MP(e,t){return Buffer.byteLength(e,"utf8")<=t?{content:e,truncated:!1}:{content:kr(e,t),truncated:!0}}function OEe(e={}){let t=e.fetchFn??globalThis.fetch,n=e.env??process.env,r=e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{};return async(o,i)=>{if(typeof t!="function")return{content:"web_scrape unavailable: global fetch() is not present in this runtime (agent-afk requires Node 20+).",isError:!0};let s=MEe(o);if("error"in s)return{content:s.error,isError:!0};if(i.aborted){let d=i.reason;return{content:`web_scrape aborted: ${d instanceof Error?d.message:String(d??"aborted")}`,isError:!0}}let a=new AbortController,l=()=>{a.abort(i.reason)},c,u=()=>{let d=a.signal.reason;return d instanceof Error?d.message:String(d??"aborted")};try{if(i.addEventListener("abort",l,{once:!0}),c=setTimeout(()=>{a.abort(new Error(`web_scrape timeout after ${s.timeoutMs}ms`))},s.timeoutMs),s.url!==void 0){let p=await La(s.url,r);if(a.signal.aborted)return{content:`web_scrape aborted: ${u()}`,isError:!0};if(!p.allowed)return{content:`web_scrape blocked: ${p.reason}`,isError:!0}}if(s.mode==="raw"){let p;try{let h={method:"GET",headers:{"User-Agent":"agent-afk/web_scrape",Accept:"*/*"},signal:a.signal};p=await zi(t,s.url,h,r)}catch(h){return a.signal.aborted?{content:`web_scrape aborted: ${u()}`,isError:!0}:h instanceof Jt?{content:`web_scrape blocked: ${h.message}`,isError:!0}:{content:`web_scrape network error: ${h instanceof Error?h.message:String(h)}`,isError:!0}}if(!p.ok)return{content:`web_scrape HTTP ${p.status} ${p.statusText||""}`.trimEnd()+` for ${s.url}`,isError:!0};let f;try{f=await p.text()}catch(h){return{content:`web_scrape read error: ${h instanceof Error?h.message:String(h)}`,isError:!0}}let g=MP(f,s.maxBytes);return{content:g.content,...g.truncated?{truncated:!0}:{}}}if(s.mode==="markdown")try{let p=await fG(s.url,{fetchFn:t,renderFn:e.renderFn,timeoutMs:s.timeoutMs,signal:a.signal,...e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{}});if(p.markdown.trim().length===0)return{content:`web_scrape extracted no readable content from ${s.url}.`,isError:!0};let f=MP(AK(p.markdown,p.advisory),s.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(p){if(a.signal.aborted)return{content:`web_scrape aborted: ${u()}`,isError:!0};if(p instanceof Jt)return{content:`web_scrape blocked: ${p.message}`,isError:!0};let f=p instanceof Error?p.message:String(p),g=wn(p)&&!TP(f)?` (the render fallback needs the optional Playwright browser \u2014 run \`${ff()}\`)`:"";return{content:`web_scrape markdown error: ${f}${g}`,isError:!0}}let d=hG({exaApiKey:n.EXA_API_KEY,fetchFn:t});if("error"in d)return{content:d.error,isError:!0};try{let p=await d.search(s.query,{limit:IEe,timeoutMs:s.timeoutMs,signal:a.signal}),f=MP(yG(s.query,p),s.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(p){return a.signal.aborted?{content:`web_scrape aborted: ${u()}`,isError:!0}:{content:`web_scrape search error (${d.name}): ${p instanceof Error?p.message:String(p)}`,isError:!0}}}finally{c!==void 0&&clearTimeout(c),i.removeEventListener("abort",l)}}}var AEe,CEe,_Ee,PEe,IEe,wG,SG=b(()=>{"use strict";gG();bG();Fa();ro();pP();Ha();AEe=3e4,CEe=12e4,_Ee=1e5,PEe=1e6,IEe=10;wG=OEe()});function LEe(e){return $Ee.has(e)?"low":e==="DELETE"?"high":"medium"}function FEe(e){return DEe.has(e)}function UEe(e){let t={};return e.forEach((n,r)=>{let o=r.toLowerCase();BEe.has(o)||NEe.some(i=>o.startsWith(i))||(t[r]=n)}),t}function jEe(e,t){if(e==null)return{serialized:void 0,inferredContentType:void 0};let n=Object.keys(t).some(o=>o.toLowerCase()==="content-type");return typeof e=="string"?{serialized:e,inferredContentType:n?void 0:"text/plain"}:{serialized:JSON.stringify(e),inferredContentType:n?void 0:"application/json"}}function HEe(e,t,n){let r=Buffer.byteLength(e,"utf8"),o=e,i=!1;if(r>n&&(o=kr(e,n),i=!0),!i&&/application\/json/i.test(t))try{return{body:JSON.parse(o),truncated:!1}}catch{}return{body:o,truncated:i}}async function TG(e){let{url:t,method:n,signal:r,domainCheck:o,recordEffect:i}=e,s=Math.min(e.maxResponseBytes??OP,$P),a={...e.headers},l=e.fetchFn??globalThis.fetch,c=e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{},u=LEe(n);if(o!==void 0){let R=o(t);if(!R.allowed)throw Object.assign(new Error(`web_request blocked by domain policy: ${R.reason}`),{name:"DomainPolicyError"})}let d=await La(t,c);if(!d.allowed)throw new Jt(d.reason);let{serialized:p,inferredContentType:f}=jEe(e.body,a);f!==void 0&&(a["content-type"]=f);let g={method:n,headers:Object.keys(a).length>0?a:void 0,body:p,signal:r},y=FEe(n)?{retries:2,baseDelayMs:300,maxDelayMs:5e3}:{retries:0},w=Date.now(),S;try{S=await zi(l,t,g,{...c,retry:y})}catch(R){throw R instanceof Jt,R}let v=Date.now()-w,E=S.headers.get("content-type")??"",T;try{let R=S.body?.getReader();if(!R)T="";else{let C=[],I=0,M=s*2;for(;;){let{done:U,value:O}=await R.read();if(U||!O)break;if(C.push(O),I+=O.byteLength,I>=M){await R.cancel();break}}T=new TextDecoder().decode(Buffer.concat(C,I))}}catch{T=""}let{body:x,truncated:_}=HEe(T,E,s),P=UEe(S.headers);return i!==void 0&&Promise.resolve(i({url:t,method:n,status:S.status,risk:u,timing_ms:v})).catch(()=>{}),{status:S.status,headers:P,body:x,truncated:_,timing_ms:v,risk:u}}function EG(e){if(typeof e!="string"||e.trim().length===0)return{error:"method must be a non-empty string (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS)"};let t=e.trim().toUpperCase(),n=["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"];return n.includes(t)?t:{error:`method "${e}" is not supported \u2014 must be one of: ${n.join(", ")}`}}var vG,kG,OP,$P,$Ee,DEe,NEe,BEe,xG=b(()=>{"use strict";Fa();ro();vG=3e4,kG=12e4,OP=1e5,$P=1e6,$Ee=new Set(["GET","HEAD","OPTIONS"]),DEe=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]);NEe=["set-cookie","x-"],BEe=new Set(["server","via","age","vary","authorization","www-authenticate"])});function WEe(e){if(!e||typeof e!="object")return{error:"Invalid input: expected an object"};let t=e;if(typeof t.url!="string"||t.url.length===0)return{error:'Invalid input: "url" must be a non-empty string'};let n;try{n=new URL(t.url)}catch{return{error:`Invalid input: "${t.url}" is not a valid absolute URL`}}if(n.protocol!=="http:"&&n.protocol!=="https:")return{error:`Invalid input: protocol "${n.protocol}" not supported (http/https only)`};n.username="",n.password="";let r=n.toString(),o=EG(t.method);if(typeof o=="object"&&"error"in o)return{error:`Invalid input: ${o.error}`};let i=o,s;if(t.body!==void 0&&t.body!==null){if(typeof t.body!="string"&&typeof t.body!="object")return{error:'Invalid input: "body" must be a string, object, or array'};s=t.body}let a={};if(t.headers!==void 0){if(typeof t.headers!="object"||t.headers===null||Array.isArray(t.headers))return{error:'Invalid input: "headers" must be a string-keyed object'};let d=t.headers;for(let[p,f]of Object.entries(d)){if(typeof f!="string")return{error:`Invalid input: header value for "${p}" must be a string`};a[p]=f}}let l=vG;if(t.timeout_ms!==void 0){if(typeof t.timeout_ms!="number"||!Number.isFinite(t.timeout_ms)||t.timeout_ms<=0)return{error:'Invalid input: "timeout_ms" must be a positive finite number'};l=Math.min(t.timeout_ms,kG)}let c=OP;if(t.max_response_bytes!==void 0){if(typeof t.max_response_bytes!="number"||!Number.isFinite(t.max_response_bytes)||t.max_response_bytes<=0)return{error:'Invalid input: "max_response_bytes" must be a positive finite number'};c=Math.min(t.max_response_bytes,$P)}let u;if(t.credential!==void 0){if(typeof t.credential!="string"||t.credential.length===0)return{error:'Invalid input: "credential" must be a non-empty string (an env var name)'};u=t.credential}return{url:r,method:i,body:s,headers:a,timeoutMs:l,maxResponseBytes:c,credential:u}}function KEe(e={}){let t=e.fetchFn??globalThis.fetch,n=e.env??process.env;async function r(){if(e.domainCheck!==void 0)return e.domainCheck;try{let{loadBrowserConfig:o,enforceDomainPolicy:i}=await Promise.resolve().then(()=>(Vi(),hP)),s=o();return a=>i(a,s)}catch{return}}return async(o,i)=>{if(typeof t!="function")return{content:"web_request unavailable: global fetch() is not present (agent-afk requires Node 20+).",isError:!0};let s=WEe(o);if("error"in s)return{content:s.error,isError:!0};if(i.aborted){let p=i.reason;return{content:`web_request aborted: ${p instanceof Error?p.message:String(p??"aborted")}`,isError:!0}}let a={...s.headers};if(s.credential!==void 0){let p=n[s.credential];if(p===void 0||p.trim().length===0)return{content:`web_request credential error: environment variable "${s.credential}" is not set. Set it in afk.env or export it in the shell before starting AFK.`,isError:!0};if(Object.keys(a).some(g=>g.toLowerCase()==="authorization"))return{content:'web_request credential error: both "credential" and an explicit Authorization header were provided. Use one or the other.',isError:!0};a.Authorization=`Bearer ${p}`}let l=new AbortController,c=()=>l.abort(i.reason),u,d=()=>{let p=l.signal.reason;return p instanceof Error?p.message:String(p??"aborted")};try{i.addEventListener("abort",c,{once:!0}),u=setTimeout(()=>{l.abort(new Error(`web_request timeout after ${s.timeoutMs}ms`))},s.timeoutMs);let p=await r(),f={url:s.url,method:s.method,body:s.body,headers:a,maxResponseBytes:s.maxResponseBytes,signal:l.signal,fetchFn:t,lookupFn:e.lookupFn,domainCheck:p,recordEffect:e.recordEffect},g;try{g=await TG(f)}catch(S){if(l.signal.aborted)return{content:`web_request aborted: ${d()}`,isError:!0};if(S instanceof Jt)return{content:`web_request blocked: ${S.message}`,isError:!0};let v=S instanceof Error&&S.name==="DomainPolicyError"?"blocked":"network error",E=S instanceof Error?S.message:String(S);return{content:`web_request ${v}: ${E}`,isError:!0}}if(l.signal.aborted)return{content:`web_request aborted: ${d()}`,isError:!0};let h=g.body;if(typeof h=="string")h=pt(h);else if(typeof h=="object"&&h!==null){let S=pt(JSON.stringify(h));try{h=JSON.parse(S)}catch{h=S}}let y={status:g.status,headers:g.headers,body:h,timing_ms:g.timing_ms,...g.truncated?{truncated:!0}:{}};return{content:JSON.stringify(y,null,2),...g.truncated?{truncated:!0}:{}}}finally{u!==void 0&&clearTimeout(u),i.removeEventListener("abort",c)}}}var RG,AG=b(()=>{"use strict";xG();Fa();wr();RG=KEe()});import{existsSync as _G,mkdirSync as GEe,readFileSync as qEe,renameSync as zEe,unlinkSync as VEe,writeFileSync as JEe}from"node:fs";import{dirname as CG,join as YEe}from"node:path";import{randomBytes as XEe}from"node:crypto";function Fn(e){let t=e??My();if(!_G(t))return[];try{let n=qEe(t,"utf-8");return JSON.parse(n)}catch(n){let r=n instanceof Error?n.message:String(n);return console.error(`[schedule-store] failed to parse ${t}: ${r}`),[]}}function Ji(e,t){let n=t??My();GEe(CG(n),{recursive:!0});let r=YEe(CG(n),`.schedules.json.${process.pid}.${XEe(4).toString("hex")}.tmp`),o=JSON.stringify(e,null,2);try{JEe(r,o,"utf-8"),zEe(r,n)}catch(i){try{_G(r)&&VEe(r)}catch{}throw i}}function Bw(e,t){let n=Fn(t),r=n.map(l=>l.id),o=QEe(e.name),i=ZEe(o,r),s=new Date().toISOString(),a={...e,notifyOn:e.notifyOn??"failure",id:i,createdAt:s,updatedAt:s};return n.push(a),Ji(n,t),a}function Uw(e,t){let n=Fn(t),r=n.length,o=n.filter(i=>i.id!==e);return o.length===r?!1:(Ji(o,t),!0)}function gf(e,t){return Fn(t).find(n=>n.id===e)}function QEe(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"")}function ZEe(e,t){if(!t.includes(e))return e;let n=2;for(;t.includes(`${e}-${n}`);)n+=1;return`${e}-${n}`}function jw(e){return{taskId:e.id,command:e.command,trigger:e.trigger??"cron",...e.cron!==void 0?{cronExpression:e.cron}:{},...e.notifyOn!==void 0?{notifyOn:e.notifyOn}:{},...e.notifyChat!==void 0?{notifyChat:e.notifyChat}:{}}}var Hw=b(()=>{"use strict";B()});import{existsSync as exe,readFileSync as txe}from"node:fs";import{join as nxe}from"node:path";async function tr(e,t,n){let r,o;try{let i=nxe(em("default"),"port");if(!exe(i))return{synced:!1,detail:"daemon-not-detected (no port file)"};let s=txe(i,"utf-8").trim(),a=rxe(s);if(!a)return{synced:!1,detail:"daemon-not-detected (invalid port file)"};({host:r,port:o}=a)}catch{return{synced:!1,detail:"daemon-not-detected (unreadable port file)"}}try{let i=r.includes(":")?`[${r}]`:r,s=await fetch(`http://${i}:${o}${t}`,{method:e,headers:{"Content-Type":"application/json"},body:n!==void 0?JSON.stringify(n):void 0,signal:AbortSignal.timeout(2e3)});return s.ok?{synced:!0,detail:"synced"}:e==="POST"&&s.status===409?{synced:!0,detail:"already-registered"}:e==="DELETE"&&s.status===404?{synced:!0,detail:"not-registered"}:{synced:!1,detail:`daemon-rejected (HTTP ${s.status})`}}catch{return{synced:!1,detail:"daemon-unreachable (stale port file or network error)"}}}function rxe(e){let t=parseInt(e,10);if(String(t)===e&&!Number.isNaN(t))return t<1||t>65535?null:{host:"localhost",port:t};let n=e.lastIndexOf(":");if(n<1)return null;let r=e.slice(0,n),o=e.slice(n+1);if(!/^\d+$/.test(o))return null;let i=parseInt(o,10);return Number.isNaN(i)||i<1||i>65535||/^:+$/.test(r)?null:{host:r.startsWith("[")&&r.endsWith("]")?r.slice(1,-1):r,port:i}}var Yi,DP=b(()=>{"use strict";B();Yi="Change saved to schedules.json, but a running daemon (if any) did not pick it up \u2014 it will apply on the next daemon (re)start."});import{existsSync as oxe}from"node:fs";import{readFile as ixe}from"node:fs/promises";var PG,IG,MG,OG,$G=b(()=>{"use strict";Hw();B();DP();PG=async(e,t)=>{if(!e||typeof e!="object")return{content:"Invalid input: expected object",isError:!0};let n=e;if(typeof n.name!="string"||!n.name)return{content:"Invalid input: name required",isError:!0};if(typeof n.command!="string"||!n.command)return{content:"Invalid input: command required",isError:!0};if(typeof n.cron!="string"||!n.cron)return{content:"Invalid input: cron required",isError:!0};let r=n.cron.trim().split(/\s+/);if(r.length!==5&&r.length!==6)return{content:"Invalid input: cron must be a 5 or 6-field expression",isError:!0};let o=n.notifyChat;if(o!==void 0&&typeof o!="number"&&typeof o!="string")return{content:"Invalid input: notifyChat must be a number (chat id) or string (chat id or alias name)",isError:!0};let i=Bw({name:n.name,command:n.command,cron:n.cron,trigger:n.trigger??"cron",notifyOn:n.notifyOn,...o!==void 0?{notifyChat:o}:{},enabled:typeof n.enabled=="boolean"?n.enabled:!0}),s=i.enabled?await tr("POST","/tasks",{taskId:i.id,command:i.command,cron:i.cron,trigger:i.trigger,notifyOn:i.notifyOn,...i.notifyChat!==void 0?{notifyChat:i.notifyChat}:{}}):await tr("DELETE",`/tasks/${i.id}`);return{content:JSON.stringify({id:i.id,name:i.name,cron:i.cron,enabled:i.enabled,daemonSynced:s.synced,syncDetail:s.detail,...s.synced?{}:{syncNote:Yi}})}},IG=async(e,t)=>{let n=Fn();return{content:JSON.stringify(n.map(r=>({id:r.id,name:r.name,cron:r.cron,trigger:r.trigger,enabled:r.enabled,notifyOn:r.notifyOn})))}},MG=async(e,t)=>{if(!e||typeof e!="object")return{content:"Invalid input: expected object",isError:!0};let n=e;if(typeof n.taskId!="string"||!n.taskId)return{content:"Invalid input: taskId required",isError:!0};let r=n.taskId,o=typeof n.limit=="number"?Math.min(Math.max(1,n.limit),50):10,i=yr();if(!oxe(i))return{content:JSON.stringify([])};let s;try{let c=await ixe(i);s=(c.length>1048576?c.subarray(c.length-1048576):c).toString("utf-8")}catch{return{content:JSON.stringify([])}}let a=s.split(`
|
|
@@ -1283,7 +1283,7 @@ ${y}`:l,sessionId:this.initSessionId}:(yield{type:"assistant.message",text:l,ses
|
|
|
1283
1283
|
|
|
1284
1284
|
`+a})}if(r!==null){let a=r===Ir?Sv:Ev;o.push({role:"user",content:a})}let i=r!==null?void 0:this.activeOpenAITools(),s={controller:t,traceWriter:this.traceWriter,initSessionId:this.initSessionId,currentModel:this.currentModel,isClosed:()=>this.closed};if(this.wireMode==="responses"){let a=this.opts.auth.source==="chatgpt-oauth";if(a&&tv(this.currentModel))return yield{type:"error",error:new Error(`Model "${this.currentModel}" can't run on a ChatGPT subscription \u2014 the ChatGPT/Codex backend only supports OpenAI gpt-5.x models. This usually means a subagent or skill requested a Claude model. Pass a gpt-5.x model to it (e.g. model: "gpt-5.5"); for an auto-dispatched agent you can't pass a model to (e.g. git-investigator), set AFK_DEFAULT_SUBAGENT_MODEL to a gpt-5.x id. Or run it on a provider configured with the matching API key.`)},null;let l=sv({model:this.currentModel,messages:o,activeTools:i,maxOutputTokens:this.opts.config.maxOutputTokens,effort:this.opts.config.effort,temperature:this.opts.config.temperature,isChatGptBackend:a});return yield*xM(s,{createStream:async c=>await this.client.responses.create(l,{signal:c}),translate:(c,u)=>ev(c,u,this.initSessionId),clarifyError:c=>this.clarifyResponsesError(c,a)})}else{let a=PV({model:this.currentModel,messages:o,activeTools:i,maxOutputTokens:this.opts.config.maxOutputTokens,effort:this.opts.config.effort,temperature:this.opts.config.temperature});return yield*xM(s,{createStream:async l=>await this.client.chat.completions.create(a,{signal:l}),translate:(l,c)=>sV(l,c,this.initSessionId),clarifyError:l=>l instanceof Error?l:new Error(String(l))})}}async*dispatchAndAppend(t,n,r){return yield*BV({state:t,signal:n,vision:r,toolDispatcher:this.toolDispatcher,traceWriter:this.traceWriter,priorTurns:this.priorTurns,sessionId:this.initSessionId,subagentId:this.opts.config.subagentId})}async interrupt(t="interrupted"){this.abort.requestAbort(t)}async compact(){let t=await this.compactHistory("manual");return t.compacted&&(this.lastUsage=null),t}async compactHistory(t){let n=this.priorTurns.length;if(this.opts.auth.apiKey===null)return{compacted:!1,reason:"no-usable-auth",messagesBefore:n,messagesAfter:n};if(this.wireMode==="responses"&&this.responsesCompactionUnavailable){let i=Du(k.AFK_MICROCOMPACT_TOOL_RESULT_BYTES,k.AFK_MICROCOMPACT_KEEP_LAST),{blocksCleared:s,bytesReclaimed:a}=pM(this.priorTurns,i);return s>0?{compacted:!1,reason:"microcompacted",messagesBefore:n,messagesAfter:this.priorTurns.length,microcompaction:{blocksCleared:s,bytesReclaimed:a}}:{compacted:!1,reason:"responses-compaction-unavailable",messagesBefore:n,messagesAfter:n}}let r=k.AFK_COMPACT_MODEL??this.currentModel,o=km(Nt(this.lastUsage??{}),Wo(this.currentModel));return TV({priorTurns:this.priorTurns,usedFraction:o,shrinkAtFraction:kV(),summarize:(i,s)=>this.wireMode==="responses"?this.summarizeViaResponses(i,s,r):lv({client:this.client,model:r,system:Hf,user:Gf(i),maxTokens:1024,signal:s}),isClosed:this.closed,isIdle:this.abort.isIdle(),beginAbort:()=>this.abort.begin(),clearAbort:i=>this.abort.clear(i),trigger:t,traceWriter:this.traceWriter})}async summarizeViaResponses(t,n,r){try{return await MV({client:this.client,model:r,system:Hf,user:Gf(t),isChatGptBackend:this.opts.auth.source==="chatgpt-oauth",maxTokens:1024,signal:n})}catch(o){if(!n.aborted&&JV(o)){this.responsesCompactionUnavailable=!0;let i=cs(o);re(this.traceWriter,{phase:"compaction_disabled",metadata:{wire:"responses",reason:"responses-compaction-unavailable",error:o instanceof Error?o.message:String(o),...i!==void 0?{status:i}:{}}})}throw o}}async setModel(t){t!==void 0&&(this.currentModel=Ft(t)??t)}async setPermissionMode(t){this.currentPermissionMode=mM(t);let n=vr(this.currentPermissionMode);this.toolDispatcher?.setAllowAll?.(n),this.onPermissionMode?.(this.currentPermissionMode)}setCwd(t){this.toolDispatcher?.setResolveBase?.(t),this.onCwdChange?.(t)}async supportedCommands(){return VS()}async supportedModels(){return[{value:"gpt-5.6",displayName:"GPT-5.6 (Sol)",description:"OpenAI flagship \u2014 alias for gpt-5.6-sol"},{value:"gpt-5.6-sol",displayName:"GPT-5.6 Sol",description:"Frontier capability"},{value:"gpt-5.6-terra",displayName:"GPT-5.6 Terra",description:"Balanced intelligence/cost"},{value:"gpt-5.6-luna",displayName:"GPT-5.6 Luna",description:"Fast, high-volume workloads"},{value:"gpt-5.5",displayName:"GPT-5.5",description:"Prior flagship (ChatGPT backend)"},{value:"gpt-4o",displayName:"GPT-4o",description:"OpenAI flagship multimodal"},{value:"gpt-4o-mini",displayName:"GPT-4o mini",description:"Fast/cheap GPT-4o"},{value:"gpt-4.1",displayName:"GPT-4.1",description:"Long-context GPT-4"},{value:"gpt-4.1-mini",displayName:"GPT-4.1 mini",description:"Fast 4.1 variant"},{value:"o1",displayName:"o1",description:"Reasoning model"},{value:"o1-mini",displayName:"o1 mini",description:"Fast reasoning"},{value:"o3-mini",displayName:"o3 mini",description:"Newer reasoning, faster"}]}async supportedAgents(){return[]}async getContextUsage(){let t=this.lastUsage,n=lt(this.currentModel),r;if(t&&n>0){let s=Nt(t);r=Math.min(100,Math.max(0,s/n*100))}let{totalTokens:o,apiUsage:i}=Sm(t);return{tools:[],agents:[],isAutoCompactEnabled:this.autoCompactThreshold!==void 0,apiUsage:i,totalTokens:o,...r!==void 0?{percentage:r}:{},maxTokens:n}}async mcpServerStatus(){return this.opts.mcpManager?this.opts.mcpManager.getServerStates().map(t=>({name:t.serverName,status:t.status})):[]}async accountInfo(){return{authSource:this.opts.auth.source}}async rewindFiles(t,n){return{canRewind:!1,error:`${RM} provider does not support file checkpoint rewind yet.`}}close(){this.closed=!0,this.abort.requestAbort("closed"),this.abort.markClosed(),N(`\u{1F7E2} ${RM}: closed`)}}});var CM,Qt,NPe,Bu=b(()=>{"use strict";MS();Mb();Xc();xb();Hc();CI();OI();Va();Dn();cn();Bi();Ya();Kc();Gb();B();VI();Pr();AM();cv();Vt();WI();Pu();AM();CM="openai-compatible",Qt=class{name=CM;providerOpts;memoryStore;workspaceStore;stateStore;schemas;_defaultHeaders;_sharedReadRoots;_sharedWriteRoots;_currentPermissionMode="default";_sharedCurrentCwd;_presenceSessionId=null;_mintedSessionId=null;_spawnedPidRegistry=new ku;constructor(t={}){this.providerOpts=t,this._defaultHeaders=t.defaultHeaders,this.memoryStore=t.memoryStore??new Bt,this.workspaceStore=t.workspaceStore,this.stateStore=t.stateStore??new Sn(On());let n=[...oo];t.subagentExecutor&&n.push(t.subagentExecutor.describeAgentTool?.()??$n),t.skillExecutor&&n.push(Ra),t.composeExecutor&&n.push(Aa),t.readOnlyMemory===!0?n.push(Gc):n.push(...ji),t.readOnlyMemory===!0?n.push(...Kb):n.push(...qc),n.push(...this.workspaceStore!==void 0?[Am,Cm]:[],Tr);for(let r of t.customTools??[])n.some(o=>o.name===r.schema.name)||n.push(r.schema);this.schemas=n}setEndpointDefaults(t){t.baseURL!==void 0&&(this.providerOpts.baseURL=t.baseURL),t.defaultHeaders!==void 0&&(this._defaultHeaders=t.defaultHeaders)}query(t){let n=t.config,r=n.permissionMode??"default";this._currentPermissionMode=r,this.ensureSharedRoots(n.cwd),n.readRoots&&this._sharedReadRoots&&this._sharedReadRoots.length<=1&&(this._sharedReadRoots.length=0,this._sharedReadRoots.push(...n.readRoots)),n.writeRoots&&this._sharedWriteRoots&&this._sharedWriteRoots.length<=1&&(this._sharedWriteRoots.length=0,this._sharedWriteRoots.push(...n.writeRoots));let o,i=typeof n.model=="string"?n.model:String(n.model),s=n.cwd??process.cwd(),a=Lm({surface:this.providerOpts.surface??"cli",getCwd:()=>s,modelName:i,providerName:CM,permissionMode:r,...n.sessionId!==void 0?{sessionId:n.sessionId}:{},...n.parentSessionId!==void 0?{parentSessionId:n.parentSessionId}:{},...n.depth!==void 0?{depth:n.depth}:{},...n.maxDepth!==void 0?{maxDepth:n.maxDepth}:{},...n.phaseRole!==void 0?{phaseRole:n.phaseRole}:{},getEnabledToolNames:()=>o instanceof hn?o.toolDefs.map(E=>E.name):[],getMcpTools:()=>this.providerOpts.mcpManager?.getMcpTools()??[],getSubagents:()=>this.providerOpts.subagentExecutor?this.providerOpts.subagentExecutor.getSubagentsLite():{active:[],backgroundJobs:[]}});o=this.providerOpts.tools?Fm(this.providerOpts.tools,a):this.buildDispatcher(r,{...n.cwd!==void 0?{cwd:n.cwd}:{},...this._sharedReadRoots!==void 0?{readRoots:this._sharedReadRoots}:{},...this._sharedWriteRoots!==void 0?{writeRoots:this._sharedWriteRoots}:{},...n.sessionId!==void 0?{sessionId:n.sessionId}:{},...n.parentSessionId!==void 0?{parentSessionId:n.parentSessionId}:{},...n.subagentId!==void 0?{subagentId:n.subagentId}:{},...n.subagentToolOutputCapBytes!==void 0?{subagentToolOutputCapBytes:n.subagentToolOutputCapBytes}:{},...n.traceWriter!==void 0?{traceWriter:n.traceWriter}:{},...n.bashOutputTailReporter!==void 0?{bashOutputTailReporter:n.bashOutputTailReporter}:{},runtimeStateSource:a,...n.isSkillDispatch?{isSkillDispatch:!0}:{},...n.isNonInteractive?{isNonInteractive:!0}:{},...n.hookRegistry!==void 0?{hookRegistry:n.hookRegistry}:{},...n.planExitControls!==void 0?{planExitControls:n.planExitControls}:{}});let l=Mf({sessionId:n.sessionId,resume:n.resume,depth:n.depth,parentSessionId:n.parentSessionId,surface:this.providerOpts.surface??"cli",memoized:this._mintedSessionId});this._mintedSessionId=l.memoized;let c={};l.id!==void 0&&(c.sessionIdOverride=l.id);let u=n.openaiBaseUrl??this.providerOpts.baseURL;u!==void 0&&(c.baseURL=u),this._defaultHeaders!==void 0&&(c.defaultHeaders=this._defaultHeaders),c.toolDispatcher=o,c.onPermissionMode=E=>{this._currentPermissionMode=E},this.providerOpts.mcpManager!==void 0&&(c.mcpManager=this.providerOpts.mcpManager),this._presenceSessionId=Of({depth:n.depth,parentSessionId:n.parentSessionId,sessionId:l.id,currentPresenceSessionId:this._presenceSessionId,runtimeStateSource:a,surface:this.providerOpts.surface??"cli",cwd:n.cwd,providerName:CM,model:i});let d=GS(n.isSkillDispatch),p=qS(this.providerOpts.readOnlyMemory),f=this.providerOpts.skillExecutor?Cv(void 0,{...typeof n.cwd=="string"&&n.cwd.length>0?{cwd:n.cwd}:{},...typeof n.skillDispatchName=="string"&&n.skillDispatchName.length>0?{excludeName:n.skillDispatchName}:{}}):"",g=typeof n.hotMemory=="string"?n.hotMemory:"",h=typeof n.systemPrompt=="string"?n.systemPrompt:void 0,y=E=>{let T=[d];h!==void 0&&h.length>0&&T.push(h),T.push(p);let x=zS(this.workspaceStore!==void 0);return x&&T.push(x),g.length>0&&T.push(g),T.push(E),f.length>0&&T.push(f),T.join(`
|
|
1285
1285
|
|
|
1286
|
-
`)},w=()=>Dm({cwd:s,...n.sessionId!==void 0?{sessionId:n.sessionId}:{},surface:this.providerOpts.surface??"cli",...n.depth!==void 0?{depth:n.depth}:{},...n.maxDepth!==void 0?{maxDepth:n.maxDepth}:{},workspace:a.getWorkspace()}),S={...n,systemPrompt:y(w())},v=E=>{s=E,this._sharedCurrentCwd=E,S.systemPrompt=y(w())};return c.onCwdChange=v,XV(S,t.prompt,c)}buildDispatcher(t,n){let r=RS(t,n.cwd),o=$m(this.memoryStore,void 0,this.providerOpts.surface??"cli");for(let[u,d]of o)this.providerOpts.readOnlyMemory===!0&&u!=="memory_search"||r.set(u,d);if(this.workspaceStore!==void 0)for(let[u,d]of _m(this.workspaceStore,n.sessionId??"",n.subagentId))r.set(u,d);for(let[u,d]of Ab(this.stateStore,n.sessionId))this.providerOpts.readOnlyMemory===!0&&u!=="state_get"&&u!=="state_query"||r.set(u,d);n.runtimeStateSource&&r.set("get_runtime_state",zc(n.runtimeStateSource));for(let u of this.providerOpts.customTools??[])r.has(u.schema.name)||r.set(u.schema.name,u.handler);let i=n.planExitControls;i&&r.set(Bn,_S(i));let s=this.providerOpts.mcpManager?this.providerOpts.mcpManager.getMcpTools():[];if(this.providerOpts.mcpManager)for(let[u,d]of this.providerOpts.mcpManager.getMcpHandlers())r.set(u,d);let a=n.isSkillDispatch?this.schemas.filter(u=>u.name!=="ask_question"&&u.name!=="terminal_font_size"&&u.name!=="clipboard_write"&&u.name!=="clipboard_read"):n.isNonInteractive?this.schemas.filter(u=>u.name!=="ask_question"&&u.name!=="clipboard_read"&&u.name!=="clipboard_write"):this.schemas,l={handlers:r,schemas:[...a,...s,...i?[CS]:[]],hookRegistry:IS(n.hookRegistry,this.providerOpts.hookRegistry)},c=Ib(this.providerOpts.mcpManager?Pb(this.providerOpts.permissions,this.providerOpts.mcpManager.getMcpToolWireNames()):this.providerOpts.permissions,(this.providerOpts.customTools??[]).map(u=>u.schema.name));return c!==void 0&&(l.permissions=c),this.providerOpts.subagentExecutor!==void 0&&(l.subagentExecutor=this.providerOpts.subagentExecutor),this.providerOpts.skillExecutor!==void 0&&(l.skillExecutor=this.providerOpts.skillExecutor),this.providerOpts.composeExecutor!==void 0&&(l.composeExecutor=this.providerOpts.composeExecutor),this.providerOpts.canUseTool!==void 0&&(l.canUseTool=this.providerOpts.canUseTool),n.cwd!==void 0&&(l.cwd=n.cwd),n.readRoots!==void 0&&(l.readRoots=n.readRoots),n.writeRoots!==void 0&&(l.writeRoots=n.writeRoots),n.sessionId!==void 0&&(l.sessionId=n.sessionId),n.parentSessionId!==void 0&&(l.parentSessionId=n.parentSessionId),n.subagentId!==void 0&&(l.subagentId=n.subagentId),n.subagentToolOutputCapBytes!==void 0&&(l.maxOutputBytes=n.subagentToolOutputCapBytes),n.traceWriter!==void 0&&(l.traceWriter=n.traceWriter),this.providerOpts.readOnlyBash===!0&&(l.readOnlyBash=!0),l.allowAll=vr(t),l.sessionGrantManager=this,l.spawnedPidRegistry=this._spawnedPidRegistry,new hn(l)}ensureSharedRoots(t){if(!this._sharedReadRoots){let n=t?[t]:[];this._sharedReadRoots=n.slice(),this._sharedWriteRoots=n.slice(),t&&!this._sharedCurrentCwd&&(this._sharedCurrentCwd=t)}}grantManager=new Ni({getReadRoots:()=>this._sharedReadRoots,getWriteRoots:()=>this._sharedWriteRoots,ensureInitialized:()=>this.ensureSharedRoots(),getProtectedRoot:()=>this._sharedCurrentCwd,getAllowAll:()=>vr(this._currentPermissionMode)});addReadRoot(t,n="slash",r){this.grantManager.addReadRoot(t,n,r)}addWriteRoot(t,n="slash",r){this.grantManager.addWriteRoot(t,n,r)}revokeRoot(t,n="slash",r){this.grantManager.revokeRoot(t,n,r)}getGrants(){return this.grantManager.getGrants()}close(){this.memoryStore.close(),this.workspaceStore?.close(),this.stateStore.close()}async complete(t){let n={model:t.model??"gpt-4o-mini",system:t.system,user:t.user,maxTokens:t.maxTokens??64};t.apiKey!==void 0&&(n.apiKey=t.apiKey);let r=t.baseUrl??this.providerOpts.baseURL;return r!==void 0&&(n.baseURL=r),this._defaultHeaders!==void 0&&(n.defaultHeaders=this._defaultHeaders),t.signal&&(n.signal=t.signal),lv(n)}},NPe=new Qt});function _v(e,t){return`Skill tool not available at nesting depth ${e} (max ${t}). ${ps}`}function QV(e,t){return`Agent tool not available at nesting depth ${e} (max ${t}). ${ps}`}function ZV(e,t){return`Compose tool not available at nesting depth ${e} (max ${t}). ${ps}`}var ps,Xf=b(()=>{"use strict";ps="You are too deeply nested to delegate further \u2014 perform the work inline with your own tools instead of calling skill/agent/compose."});function tJ(e){eJ.add(e)}function nJ(e){return eJ.has(e)}var eJ,_M=b(()=>{"use strict";eJ=new Set});function rJ(e){PM.add(e)}function oJ(e){PM.delete(e)}function iJ(e){IM.add(e)}function sJ(e){IM.delete(e)}function aJ(e){for(let t of PM)t(e)}function lJ(e){for(let t of IM)t(e)}var PM,IM,MM=b(()=>{"use strict";PM=new Set,IM=new Set});function Pv(e){return BPe.has(e)}function cJ(e,t=UPe){return e.length<=t?e:e.slice(0,t)+"\u2026"}function Uu(e){return e.surface!==void 0?{origin:rs(e.surface),actor:os(e.depth)}:{}}var BPe,UPe,OM=b(()=>{"use strict";Ja();BPe=new Set(["ask-gate","fanout-pace","right-size-delegation","premise-gate","long-bash-gate","exploration-gate","irreversible-action-gate","safe-destruct","plan-probe"]);UPe=240});function uJ(e){let t=[],n="",r=null,o=!1;for(let i of e){if(r!==null){i===r?r=null:n+=i;continue}if(i==='"'||i==="'"){r=i,o=!0;continue}if(/\s/.test(i)){o&&(t.push(n),n="",o=!1);continue}n+=i,o=!0}return o&&t.push(n),t}function ms(e,t){let n=t??"",r;return e.replace(/(\\?)\$(ARGUMENTS?\b|\{(\d+)\})/g,(o,i,s,a)=>{if(i==="\\")return o.slice(1);if(s==="ARGUMENT"||s==="ARGUMENTS")return n;let l=Number(a);return l<1?o:(r??=uJ(n),r[l-1]??o)})}var Iv=b(()=>{"use strict"});function dJ(e,t,n){let r=n&&n.trim().length>0?n.trim():"(none)";return{content:`${`[Skill "${e}" loaded into your current context \u2014 act on it now]
|
|
1286
|
+
`)},w=()=>Dm({cwd:s,...n.sessionId!==void 0?{sessionId:n.sessionId}:{},surface:this.providerOpts.surface??"cli",...n.depth!==void 0?{depth:n.depth}:{},...n.maxDepth!==void 0?{maxDepth:n.maxDepth}:{},workspace:a.getWorkspace()}),S={...n,systemPrompt:y(w())},v=E=>{s=E,this._sharedCurrentCwd=E,S.systemPrompt=y(w())};return c.onCwdChange=v,XV(S,t.prompt,c)}buildDispatcher(t,n){let r=RS(t,n.cwd),o=$m(this.memoryStore,void 0,this.providerOpts.surface??"cli");for(let[u,d]of o)this.providerOpts.readOnlyMemory===!0&&u!=="memory_search"||r.set(u,d);if(this.workspaceStore!==void 0)for(let[u,d]of _m(this.workspaceStore,n.sessionId??"",n.subagentId))r.set(u,d);for(let[u,d]of Ab(this.stateStore,n.sessionId))this.providerOpts.readOnlyMemory===!0&&u!=="state_get"&&u!=="state_query"||r.set(u,d);n.runtimeStateSource&&r.set("get_runtime_state",zc(n.runtimeStateSource));for(let u of this.providerOpts.customTools??[])r.has(u.schema.name)||r.set(u.schema.name,u.handler);let i=n.planExitControls;i&&r.set(Bn,_S(i));let s=this.providerOpts.mcpManager?this.providerOpts.mcpManager.getMcpTools():[];if(this.providerOpts.mcpManager)for(let[u,d]of this.providerOpts.mcpManager.getMcpHandlers())r.set(u,d);let a=n.isSkillDispatch?this.schemas.filter(u=>u.name!=="ask_question"&&u.name!=="terminal_font_size"&&u.name!=="clipboard_write"&&u.name!=="clipboard_read"):n.isNonInteractive?this.schemas.filter(u=>u.name!=="ask_question"&&u.name!=="clipboard_read"&&u.name!=="clipboard_write"):this.schemas,l={handlers:r,schemas:[...a,...s,...i?[CS]:[]],hookRegistry:IS(n.hookRegistry,this.providerOpts.hookRegistry)},c=Ib(this.providerOpts.mcpManager?Pb(this.providerOpts.permissions,this.providerOpts.mcpManager.getMcpToolWireNames()):this.providerOpts.permissions,(this.providerOpts.customTools??[]).map(u=>u.schema.name));return c!==void 0&&(l.permissions=c),this.providerOpts.subagentExecutor!==void 0&&(l.subagentExecutor=this.providerOpts.subagentExecutor),this.providerOpts.skillExecutor!==void 0&&(l.skillExecutor=this.providerOpts.skillExecutor),this.providerOpts.composeExecutor!==void 0&&(l.composeExecutor=this.providerOpts.composeExecutor),this.providerOpts.canUseTool!==void 0&&(l.canUseTool=this.providerOpts.canUseTool),n.cwd!==void 0&&(l.cwd=n.cwd),n.readRoots!==void 0&&(l.readRoots=n.readRoots),n.writeRoots!==void 0&&(l.writeRoots=n.writeRoots),n.sessionId!==void 0&&(l.sessionId=n.sessionId),n.parentSessionId!==void 0&&(l.parentSessionId=n.parentSessionId),n.subagentId!==void 0&&(l.subagentId=n.subagentId),n.subagentToolOutputCapBytes!==void 0&&(l.maxOutputBytes=n.subagentToolOutputCapBytes),n.traceWriter!==void 0&&(l.traceWriter=n.traceWriter),n.bashOutputTailReporter!==void 0&&(l.bashOutputTailReporter=n.bashOutputTailReporter),this.providerOpts.readOnlyBash===!0&&(l.readOnlyBash=!0),l.allowAll=vr(t),l.sessionGrantManager=this,l.spawnedPidRegistry=this._spawnedPidRegistry,new hn(l)}ensureSharedRoots(t){if(!this._sharedReadRoots){let n=t?[t]:[];this._sharedReadRoots=n.slice(),this._sharedWriteRoots=n.slice(),t&&!this._sharedCurrentCwd&&(this._sharedCurrentCwd=t)}}grantManager=new Ni({getReadRoots:()=>this._sharedReadRoots,getWriteRoots:()=>this._sharedWriteRoots,ensureInitialized:()=>this.ensureSharedRoots(),getProtectedRoot:()=>this._sharedCurrentCwd,getAllowAll:()=>vr(this._currentPermissionMode)});addReadRoot(t,n="slash",r){this.grantManager.addReadRoot(t,n,r)}addWriteRoot(t,n="slash",r){this.grantManager.addWriteRoot(t,n,r)}revokeRoot(t,n="slash",r){this.grantManager.revokeRoot(t,n,r)}getGrants(){return this.grantManager.getGrants()}close(){this.memoryStore.close(),this.workspaceStore?.close(),this.stateStore.close()}async complete(t){let n={model:t.model??"gpt-4o-mini",system:t.system,user:t.user,maxTokens:t.maxTokens??64};t.apiKey!==void 0&&(n.apiKey=t.apiKey);let r=t.baseUrl??this.providerOpts.baseURL;return r!==void 0&&(n.baseURL=r),this._defaultHeaders!==void 0&&(n.defaultHeaders=this._defaultHeaders),t.signal&&(n.signal=t.signal),lv(n)}},NPe=new Qt});function _v(e,t){return`Skill tool not available at nesting depth ${e} (max ${t}). ${ps}`}function QV(e,t){return`Agent tool not available at nesting depth ${e} (max ${t}). ${ps}`}function ZV(e,t){return`Compose tool not available at nesting depth ${e} (max ${t}). ${ps}`}var ps,Xf=b(()=>{"use strict";ps="You are too deeply nested to delegate further \u2014 perform the work inline with your own tools instead of calling skill/agent/compose."});function tJ(e){eJ.add(e)}function nJ(e){return eJ.has(e)}var eJ,_M=b(()=>{"use strict";eJ=new Set});function rJ(e){PM.add(e)}function oJ(e){PM.delete(e)}function iJ(e){IM.add(e)}function sJ(e){IM.delete(e)}function aJ(e){for(let t of PM)t(e)}function lJ(e){for(let t of IM)t(e)}var PM,IM,MM=b(()=>{"use strict";PM=new Set,IM=new Set});function Pv(e){return BPe.has(e)}function cJ(e,t=UPe){return e.length<=t?e:e.slice(0,t)+"\u2026"}function Uu(e){return e.surface!==void 0?{origin:rs(e.surface),actor:os(e.depth)}:{}}var BPe,UPe,OM=b(()=>{"use strict";Ja();BPe=new Set(["ask-gate","fanout-pace","right-size-delegation","premise-gate","long-bash-gate","exploration-gate","irreversible-action-gate","safe-destruct","plan-probe"]);UPe=240});function uJ(e){let t=[],n="",r=null,o=!1;for(let i of e){if(r!==null){i===r?r=null:n+=i;continue}if(i==='"'||i==="'"){r=i,o=!0;continue}if(/\s/.test(i)){o&&(t.push(n),n="",o=!1);continue}n+=i,o=!0}return o&&t.push(n),t}function ms(e,t){let n=t??"",r;return e.replace(/(\\?)\$(ARGUMENTS?\b|\{(\d+)\})/g,(o,i,s,a)=>{if(i==="\\")return o.slice(1);if(s==="ARGUMENT"||s==="ARGUMENTS")return n;let l=Number(a);return l<1?o:(r??=uJ(n),r[l-1]??o)})}var Iv=b(()=>{"use strict"});function dJ(e,t,n){let r=n&&n.trim().length>0?n.trim():"(none)";return{content:`${`[Skill "${e}" loaded into your current context \u2014 act on it now]
|
|
1287
1287
|
The instructions below are your operating procedure for THIS task. Execute them immediately, in this session, using the tools you already have. This is an instruction set, not reference material: follow it directly \u2014 do not merely summarize or describe it. No sub-agent was forked; you are the one carrying it out.
|
|
1288
1288
|
Arguments: ${r}`}
|
|
1289
1289
|
|
|
@@ -1922,7 +1922,7 @@ ${f.body}`);if(g.length>0){let y=n.get(p)??[],w=new Set([...y,...g]);n.set(p,Arr
|
|
|
1922
1922
|
`)),e.compositor.setOverlay(t.join(`
|
|
1923
1923
|
`))}var XE,QD=b(()=>{"use strict";vh();Jte();UE();JE();Ao();HE();Ng();be();XD();L();XD();XE="__rate_limit__"});function tne(e,t,n,r){let o=n.syntheticAgentToolUseId;if(o)switch(e.type){case"progress":e.progress.totalTokens&&(n.stats.tokens=e.progress.totalTokens),e.progress.toolUses!==void 0&&(n.stats.progressReportedToolUses=e.progress.toolUses),e.progress.summary&&(n.lastProgressSummary=e.progress.summary),r.isTTY&&r.orchestratorCtx&>(r.orchestratorCtx);return;case"chunk":{let i=e.chunk;if(i.type==="tool_use_detail"){n.thinkingLane?.markEnded(),n.currentTextEntryId=void 0;let s=r.streamingMarkdown.get(t);s&&s.commitPending(),r.toolLane.setThinkingTail(o,void 0);let a=oe(),l=Ht(Math.max(20,a-14));r.toolLane.addStartWithAgentContext(i.toolUseId,i.toolName,i.toolInput,o,l),n.stats.toolUses+=1,r.isTTY&&r.orchestratorCtx&>(r.orchestratorCtx)}else if(i.type==="tool_result"){let s=r.streamingMarkdown.get(t);s&&s.commitPending(),r.toolLane.addResult(i.toolUseId,i),r.isTTY&&r.orchestratorCtx&>(r.orchestratorCtx)}else if(i.type==="tool_diff")r.toolLane.addDiff(i.toolUseId,i.diff),r.isTTY&&r.orchestratorCtx&>(r.orchestratorCtx);else if(i.type==="content")if(n.thinkingLane?.markEnded(),n.currentTextEntryId||(n.currentTextEntryId="__in_text_block__"),n.contentBuffer+=i.content,r.isTTY&&r.compositor){if(i.content.trim()){let s=oe(),a=Ht(Math.max(20,s-14)),l=$g(n.contentBuffer,a),c=Date.now(),u=QE.get(o)??0,d=l?/[.!?…]$/.test(l):!1;l&&(c-u>=1500||d)&&(QE.set(o,c),r.toolLane.setThinkingTail(o,l))}if(r.orchestratorCtx){let s=Date.now(),a=lp.get(o)??0;s-a>=1500&&(lp.set(o,s),gt(r.orchestratorCtx))}}else{let s=n.contentBuffer.lastIndexOf(`
|
|
1924
1924
|
`);if(s!==-1){let a=n.contentBuffer.slice(0,s);n.contentBuffer=n.contentBuffer.slice(s+1),TT(a,r)}}else if(i.type==="thinking"){if(r.thinkingMode==="off")return;if(n.thinkingLane||(n.thinkingLane=new rp),n.thinkingLane.push(i.content),r.thinkingMode==="live"&&r.isTTY&&r.orchestratorCtx){let s=oe(),a=Ht(Math.max(20,s-14)),l=$g(n.thinkingLane.peek(),a);l&&r.toolLane.setThinkingTail(o,l);{let c=Date.now(),u=lp.get(o)??0;c-u>=1500&&(lp.set(o,c),gt(r.orchestratorCtx))}}}return}case"message":return;case"error":n.errored=!0,r.toolLane.setThinkingTail(o,void 0),QE.delete(o),lp.delete(o);{let i=`error \u2014 ${e.error.message}`;r.toolLane.setAgentResultSummary(o,i),r.toolLane.addResult(o,Sh(i,!0))}r.isTTY&&r.orchestratorCtx&>(r.orchestratorCtx);return;case"done":n.done=!0,e.metadata&&(n.responseMetadata=e.metadata),b1e(t,n,r);return;case"suggestion":return;case"panel":y1e(e.spec,t,n,r);return;case"notice":r.isTTY||r.out.line(e.text);return;case"tool-activity":return}}function y1e(e,t,n,r){if(r.isTTY){let s=n.syntheticAgentToolUseId;s&&r.toolLane.setThinkingTail(s,void 0),n.contentBuffer=""}else n.contentBuffer.trim()&&(TT(n.contentBuffer,r),n.contentBuffer="");let i=Oc(e).split(`
|
|
1925
|
-
`);if(r.isTTY&&r.compositor)Rn(r.compositor,i);else for(let s of i)r.out.line(s);r.isTTY&&r.compositor?r.compositor.commitAbove(""):r.out.line("")}function b1e(e,t,n){let r=t.syntheticAgentToolUseId;if(!r||t.errored)return;if(!n.isTTY&&t.contentBuffer&&TT(t.contentBuffer,n),t.contentBuffer="",!n.isTTY&&t.thinkingLane?.hasBufferedContent()){let i=t.thinkingLane.collapse();i&&(n.out.line(i),n.out.line(""))}n.toolLane.setThinkingTail(r,void 0),QE.delete(r),lp.delete(r);let o=Tte(t);n.toolLane.setAgentResultSummary(r,o),n.toolLane.addResult(r,Sh(o,!1)),n.isTTY&&n.orchestratorCtx&>(n.orchestratorCtx)}var QE,lp,nne=b(()=>{"use strict";yt();sp();be();Cs();IE();op();QD();d$();QE=new Map,lp=new Map});function rne(e,t,n){oZ(t,e.inFlightTools,e.compositor);let r=n?.subagentId??Wl,o=r===Wl,i=e.sources.get(r);if(!i&&(i=kte(n?.agentType),e.sources.set(r,i),!o)){let s=Ute({parentId:n?.parentId,sources:e.sources,toolLane:e.toolLane,sourceId:r});u$(r,i,UD({isTTY:e.isTTY,compositor:e.compositor,toolLane:e.toolLane,out:e.out,streamingMarkdown:e.subagentMarkdown,thinkingMode:e.thinkingMode,orchestratorCtx:e.buildOrchestratorCtx()}),s);let a=n?.agentType??r,l=Date.now();e.subagentStartedAt.set(r,l),e.activeSubagents.set(r,{label:a,elapsedMs:0}),e.overlayComposerForStatus&&(e.overlayComposerForStatus.markDirty("subagent-status"),e.overlayComposerForStatus.flush())}if(o){let s=e.stageTracker.stage;ene(t,i,e.buildOrchestratorCtx());let a=t.type==="chunk"&&t.chunk.type==="tool_result"&&t.chunk.isError===!0;if(e.onStageChange&&(e.stageTracker.stage!==s||a))try{a?e.onStageChange(e.stageTracker.stage,{toolErrored:!0}):e.onStageChange(e.stageTracker.stage)}catch{}}else{if(tne(t,r,i,UD({isTTY:e.isTTY,compositor:e.compositor,toolLane:e.toolLane,out:e.out,streamingMarkdown:e.subagentMarkdown,thinkingMode:e.thinkingMode,orchestratorCtx:e.buildOrchestratorCtx()})),i.lastEventAt=Date.now(),i.quietBannerAnnounced=!1,i.pauseAnnotation!==void 0&&i.syntheticAgentToolUseId){i.pauseAnnotation=void 0,i.stalledTicks=0;let a=i.agentType??r;e.toolLane.addStartWithAgentContext(i.syntheticAgentToolUseId,"Agent",`(${a})`,void 0)}let s=t.type==="done"||t.type==="error";if(s&&e.activeSubagents.has(r)&&(e.activeSubagents.delete(r),e.subagentStartedAt.delete(r),e.overlayComposerForStatus&&(e.overlayComposerForStatus.markDirty("subagent-status"),e.overlayComposerForStatus.flush())),s&&e.isTTY){let a=i.syntheticAgentToolUseId;if(a&&e.toolLane.hasEntry(a)){let l=e.toolLane.flushSource(a),c=e.compositor,u=e.overlayComposer,d=e.toolLane,p=e.out;e.coordinator.schedule({anchor:`after-subagent:${r}`,commits:[()=>{if(c)Rn(c,l),c.commitAbove(""),u?(u.markDirty("tool-lane"),u.flush()):c.setOverlay(d.getOverlay());else{for(let f of l)p.line(f);p.line("")}}]});try{e.streamingMarkdownRef.current&&e.streamingMarkdownRef.current.commitPending()}finally{e.coordinator.drainSubagent(r)}}gt(e.buildOrchestratorCtx())}}}var one=b(()=>{"use strict";op();lE();QD();nne();sp();jD()});async function ine(e){e.resizeUnsubRef.current&&(e.resizeUnsubRef.current(),e.resizeUnsubRef.current=null),e.lastProgressByTask.clear(),e.softStoppingRef.current=!1;let t=e.streamingMarkdownRef.current?()=>e.streamingMarkdownRef.current.flush():void 0;await e.coordinator.flushAll(t),e.streamingMarkdownRef.current&&(e.streamingMarkdownRef.current.dispose(),e.streamingMarkdownRef.current=null);for(let r of e.subagentMarkdown.values()){try{await r.flush()}catch{}r.dispose()}if(e.subagentMarkdown.clear(),e.toolLane.hasPending()){let r=e.toolLane.flushCompletedRoots();if(e.isTTY&&e.compositorRef.current)r.length>0&&(Rn(e.compositorRef.current,r),e.compositorRef.current.commitAbove("")),e.overlayComposerRef.current?(e.overlayComposerRef.current.markDirty("tool-lane"),e.overlayComposerRef.current.flush()):e.compositorRef.current.setOverlay(e.toolLane.getOverlay());else if(r.length>0){for(let o of r)e.out.line(o);e.out.line("")}}if(e.pauseTickIntervalRef.current&&(clearInterval(e.pauseTickIntervalRef.current),e.pauseTickIntervalRef.current=null),e.compositorRef.current){if(e.ownsCompositor){try{e.compositorRef.current.endTurn()}catch{}try{e.compositorRef.current.disarm()}catch{}}else{try{e.compositorRef.current.setSpinner({enabled:!1})}catch(r){N("[stream-renderer] borrow-dispose setSpinner: "+String(r))}try{e.overlayComposerRef.current?(e.overlayComposerRef.current.invalidate(),e.overlayComposerRef.current.flush()):e.compositorRef.current.setOverlay("")}catch(r){N("[stream-renderer] borrow-dispose setOverlay: "+String(r))}try{e.compositorRef.current.setInputMode("idle")}catch(r){N("[stream-renderer] borrow-dispose setInputMode: "+String(r))}try{e.compositorRef.current.setOnCancel(e.priorOnCancelRef.current??null)}catch(r){N("[stream-renderer] borrow-dispose setOnCancel: "+String(r))}e.priorOnCancelRef.current=void 0}e.compositorRef.current=null,e.borrowedCompositorRef.current=null}let n=e.out;if(typeof n.flush=="function")try{n.flush()}catch{}}var sne=b(()=>{"use strict";fe();sp()});var cp,ZD=b(()=>{"use strict";TD();F();dh();Wt();PE();IE();vh();lE();xte();Rte();UE();gi();Pte();Lte();Nte();jD();one();sne();BD();cp=class{out;thinkingMode;isTTY;captureMode;reducedMotion;onCancel;onBackground;activeSkillName;history;autocompleteState;promptText;scrollRegion;onStageChange;ownsCompositor=!0;borrowedCompositor=null;priorOnCancel=void 0;interrupting=!1;softStopping=!1;coordinator=new FE;compositor=null;overlayComposer=null;streamingMarkdownRef={current:null};toolLane=new wh;thinkingLane=new rp;stageTracker=Ate();sources=new Map;subagentMarkdown=new Map;lastProgressByTask=new Map;childActivity=new ME;inFlightTools=new aE;disposed=!1;pauseTickInterval=null;resizeUnsub=null;subagentTickInterval=null;activeSubagents=new Map;subagentStartedAt=new Map;lastSubagentTotalSec=-1;ttfbStartedAt;ttfbDone;lastTtfbAnnotation="";addPreviewDiffRef;sink;constructor(t){this.captureMode=t.captureMode??JT(),this.reducedMotion=t.reducedMotion??YT(),this.out=this.captureMode?_te(t.out,2):t.out;let n=t.thinkingMode??(t.verbose===!0?"live":"summary");this.thinkingMode=this.captureMode&&n==="live"?"summary":n,this.onCancel=t.onCancel,this.onBackground=t.onBackground,this.isTTY=!(t.forceNonTty??!1)&&!Ue()&&!!process.stdout.isTTY&&!!process.stdin.isTTY,this.activeSkillName=t.activeSkillName,this.history=t.history,this.autocompleteState=t.autocompleteState,this.promptText=t.promptText,this.scrollRegion=t.scrollRegion,this.onStageChange=t.onStageChange,t.compositor&&(this.borrowedCompositor=t.compositor,this.ownsCompositor=!1),this.ttfbStartedAt=t.turnStartedAt,this.ttfbDone=t.turnStartedAt===void 0,this.addPreviewDiffRef=t.addPreviewDiffRef,this.sink=(r,o)=>this.process(r,o)}async arm(){if(this.disposed||!this.isTTY||this.compositor)return;let t;if(this.borrowedCompositor)t=this.borrowedCompositor,t.setInputMode("streaming"),this.priorOnCancel=t.getOnCancel(),this.onCancel&&t.setOnCancel(this.onCancel);else{let n=jd();t=new Zd({stdout:process.stdout,stdin:process.stdin,...this.onCancel?{onCancel:this.onCancel}:{},...this.onBackground?{onBackground:this.onBackground}:{},...this.history?{history:this.history}:{},...this.autocompleteState?{autocompleteState:this.autocompleteState}:{},...this.promptText!==void 0?{promptText:this.promptText}:{},formatInputBuffer:r=>yi(r,n),...this.scrollRegion?{scrollRegion:this.scrollRegion}:{},captureMode:this.captureMode,goblinSpinner:XT()}),await t.arm()}this.compositor=t,this.addPreviewDiffRef&&(this.addPreviewDiffRef.current=(n,r)=>{this.toolLane.addPreviewDiff(n,r),this.overlayComposer?.markDirty("tool-lane"),this.overlayComposer?.flush()}),this.overlayComposer=new NE(t,["thinking-live","subagent-status","markdown-pending","tool-lane","progress-banner","interrupt"]),Ote(this.overlayComposer,{stageTracker:this.stageTracker,thinkingMode:this.thinkingMode,thinkingLane:this.thinkingLane,streamingMarkdownRef:this.streamingMarkdownRef,toolLane:this.toolLane,lastProgressByTask:this.lastProgressByTask,sources:this.sources,childActivity:this.childActivity,getInterrupting:()=>this.interrupting,getSoftStopping:()=>this.softStopping,getActiveSubagents:()=>this.activeSubagents}),t.setSpinner({enabled:!this.reducedMotion,rotateVerbEveryMs:3500}),this.pauseTickInterval=setInterval(()=>this.checkPauseAnnotations(),80).unref(),this.subagentTickInterval=setInterval(()=>{if(this.disposed||this.activeSubagents.size===0)return;let n=Date.now(),r=0;for(let[o,i]of this.activeSubagents){let s=this.subagentStartedAt.get(o)??n,a=n-s;this.activeSubagents.set(o,{...i,elapsedMs:a}),r+=Math.floor(a/1e3)}this.overlayComposer&&r!==this.lastSubagentTotalSec&&(this.lastSubagentTotalSec=r,this.overlayComposer.markDirty("subagent-status"),this.overlayComposer.flush())},250).unref(),this.resizeUnsub=$te(this.overlayComposer,!1)}getCompositor(){return this.compositor}setInterrupting(t){this.disposed||(this.interrupting=t,this.overlayComposer&&(this.overlayComposer.markDirty("interrupt"),setTimeout(()=>{this.disposed||this.overlayComposer?.flush()},0)))}setSoftStopping(t){this.disposed||(this.softStopping=t,this.overlayComposer&&(this.overlayComposer.markDirty("progress-banner"),setTimeout(()=>{this.disposed||this.overlayComposer?.flush()},0)))}stripPendingTerminalState(t){if(this.disposed)return!1;let n=this.streamingMarkdownRef.current;return n?n.stripPendingFrom(t):!1}getPendingBuffer(){return this.disposed?"":this.streamingMarkdownRef.current?.getPendingBuffer()??""}setBashOutputTail(t,n){this.disposed||this.toolLane.setBashOutputTail(t,n)}notifyFirstContent(){if(this.disposed)return;Mte(this.ttfbDone,()=>{this.ttfbDone=!0},this.overlayComposer)&&setTimeout(()=>{this.disposed||this.overlayComposer?.flush()},0)}buildOrchestratorCtx(){return Bte({out:this.out,isTTY:this.isTTY,compositor:this.compositor,overlayComposer:this.overlayComposer,toolLane:this.toolLane,thinkingLane:this.thinkingLane,thinkingMode:this.thinkingMode,streamingMarkdown:this.streamingMarkdownRef,coordinator:this.coordinator,lastProgressByTask:this.lastProgressByTask,sources:this.sources,childActivity:this.childActivity,...this.isTTY?{stageTracker:this.stageTracker}:{},...this.activeSkillName?{activeSkillName:this.activeSkillName}:{}})}process(t,n){if(this.disposed)return;let r={out:this.out,isTTY:this.isTTY,compositor:this.compositor,overlayComposer:this.overlayComposer,toolLane:this.toolLane,thinkingLane:this.thinkingLane,streamingMarkdownRef:this.streamingMarkdownRef,stageTracker:this.stageTracker,coordinator:this.coordinator,childActivity:this.childActivity,inFlightTools:this.inFlightTools,sources:this.sources,subagentMarkdown:this.subagentMarkdown,lastProgressByTask:this.lastProgressByTask,thinkingMode:this.thinkingMode,activeSkillName:this.activeSkillName,onStageChange:this.onStageChange,buildOrchestratorCtx:()=>this.buildOrchestratorCtx(),activeSubagents:this.activeSubagents,subagentStartedAt:this.subagentStartedAt,overlayComposerForStatus:this.overlayComposer};rne(r,t,n)}async dispose(){if(this.disposed)return;this.disposed=!0,this.addPreviewDiffRef&&(this.addPreviewDiffRef.current=()=>{}),this.subagentTickInterval!==null&&(clearInterval(this.subagentTickInterval),this.subagentTickInterval=null),this.softStopping=!1;let t={out:this.out,isTTY:this.isTTY,ownsCompositor:this.ownsCompositor,compositorRef:{current:this.compositor},overlayComposerRef:{current:this.overlayComposer},toolLane:this.toolLane,streamingMarkdownRef:this.streamingMarkdownRef,subagentMarkdown:this.subagentMarkdown,lastProgressByTask:this.lastProgressByTask,coordinator:this.coordinator,resizeUnsubRef:{current:this.resizeUnsub},pauseTickIntervalRef:{current:this.pauseTickInterval},softStoppingRef:{current:this.softStopping},priorOnCancelRef:{current:this.priorOnCancel},borrowedCompositorRef:{current:this.borrowedCompositor}};await ine(t),this.compositor=t.compositorRef.current,this.resizeUnsub=t.resizeUnsubRef.current,this.pauseTickInterval=t.pauseTickIntervalRef.current,this.softStopping=t.softStoppingRef.current,this.priorOnCancel=t.priorOnCancelRef.current,this.borrowedCompositor=t.borrowedCompositorRef.current}checkPauseAnnotations(){let t={compositor:this.compositor,disposed:this.disposed,sources:this.sources,toolLane:this.toolLane,isTTY:this.isTTY,overlayComposer:this.overlayComposer,stageTracker:this.stageTracker,thinkingMode:this.thinkingMode,thinkingLane:this.thinkingLane,streamingMarkdownRef:this.streamingMarkdownRef,lastProgressByTask:this.lastProgressByTask,out:this.out,pauseTickInterval:this.pauseTickInterval,resizeUnsub:this.resizeUnsub,ttfbStartedAt:this.ttfbStartedAt,ttfbDone:this.ttfbDone,lastTtfbAnnotation:this.lastTtfbAnnotation};Fte(t),Dte(t),this.lastTtfbAnnotation=t.lastTtfbAnnotation}}});function ZE(e,t){let n=t.verbose??k.AFK_SKILL_STREAM_VERBOSE==="1",r=t.out??e.out,o=e.getCompositor?.()??null;return new cp({out:r,verbose:n,activeSkillName:t.skillName,onCancel:t.onCancel??(()=>{}),...o?{compositor:o}:{},...e.onStageChange?{onStageChange:e.onStageChange}:{}})}var eL=b(()=>{"use strict";F();ZD()});async function ane(e,t,n,r,o){let i=VE(e.name,t),s=e.context==="fork"?" This skill runs with context: 'fork' \u2014 the executor will fork a subagent.":"",a=`Use the \`skill\` tool with {"name": "${e.name}", "arguments": "${t}"} to dispatch this skill.${s}`,l=[];return n&&n.trim().length>0&&l.push({type:"text",text:n}),l.push({type:"text",text:i}),l.push({type:"text",text:a}),r!==void 0&&r.length>0&&o!==void 0?await nk(l,o,r):bs(l,r),l}var lne=b(()=>{"use strict";JE();og();Xu()});async function ex(e,t){let n=ZE(e,{skillName:t.skillName,onCancel:()=>{e.session.current.interrupt().catch(()=>{})}}),r=!1,o=`/${t.skillName}${t.args?" "+t.args:""}`;await e.transcript?.appendUser?.(o).catch(()=>{});let i="",s=!1,a,l=0,c=[],u=new Map;try{await n.arm(),e.setSoftStopHandler?.(()=>{r=!0,e.session.current.interrupt().catch(()=>{})});let d;if(t.preflight)try{d=await t.preflight()}catch{d=void 0}let p=await ane(t.skillMeta,t.args,d,t.attachments,e.stats.sessionId);await Ru(n.sink,async()=>{for await(let f of e.session.current.sendMessageStream(p)){if(r)break;if(f.type==="message"&&f.message.role==="assistant"&&(i=f.message.content),f.type==="chunk"&&f.chunk.type==="tool_use_detail"){let g=f.chunk,h={toolName:g.toolName,toolUseId:g.toolUseId,input:g.toolInput};u.set(g.toolUseId,h),c.push(h)}else if(f.type==="chunk"&&f.chunk.type==="tool_result"){let g=f.chunk,h=u.get(g.toolUseId);if(h&&(h.result=g.content,h.isError=g.isError,u.delete(g.toolUseId)),e.onContextProgress){let y=Date.now();if(y-l>=w1e){l=y;try{let w=e.onContextProgress();w instanceof Promise&&await w}catch{}}}}else f.type==="done"&&(s=!0,a=f.metadata);n.sink(f)}})}finally{e.setSoftStopHandler?.(null),await n.dispose();try{e.onStageChange?.("observing")}catch{}}if(s&&!r){vl(e.stats,o,i,a,c);try{e.ui.repaintStatusLine()}catch{}await e.transcript?.appendTurn(o,i).catch(()=>{})}return i}var w1e,tL=b(()=>{"use strict";eL();Od();ni();lne();w1e=15e3});import{execFile as S1e}from"child_process";import{promisify as v1e}from"util";import{writeFileSync as k1e}from"fs";import{join as T1e}from"path";function rL(e){let t=e.trim();if(!t)return null;if(/^#?\d+$/.test(t)){let r=t.replace(/^#/,""),o=parseInt(r,10);if(!(o>0&&o<1e6))throw new Error(`[afk preflight] Invalid PR number: ${r}. Must be 1\u2013999999.`);return r}let n=t.match(/github\.com\/[^/]+\/[^/]+\/pull\/(\d+)/);if(n&&n[1]){let r=n[1],o=parseInt(r,10);if(!(o>0&&o<1e6))throw new Error(`[afk preflight] Invalid PR number in URL: ${r}. Must be 1\u2013999999.`);return r}return null}async function R1e(e,t,n){try{let{stdout:r}=await E1e(e,t,{encoding:"utf-8",...n?.cwd?{cwd:n.cwd}:{},maxBuffer:n?.maxBuffer??x1e,timeout:8e3});return r}catch(r){if(k.AFK_DEBUG==="1"&&r instanceof Error&&"stderr"in r){let o=String(r.stderr??""),i=Se(o).slice(0,200).trim();i&&process.stderr.write(`[afk preflight] ${e} stderr: ${i}
|
|
1925
|
+
`);if(r.isTTY&&r.compositor)Rn(r.compositor,i);else for(let s of i)r.out.line(s);r.isTTY&&r.compositor?r.compositor.commitAbove(""):r.out.line("")}function b1e(e,t,n){let r=t.syntheticAgentToolUseId;if(!r||t.errored)return;if(!n.isTTY&&t.contentBuffer&&TT(t.contentBuffer,n),t.contentBuffer="",!n.isTTY&&t.thinkingLane?.hasBufferedContent()){let i=t.thinkingLane.collapse();i&&(n.out.line(i),n.out.line(""))}n.toolLane.setThinkingTail(r,void 0),QE.delete(r),lp.delete(r);let o=Tte(t);n.toolLane.setAgentResultSummary(r,o),n.toolLane.addResult(r,Sh(o,!1)),n.isTTY&&n.orchestratorCtx&>(n.orchestratorCtx)}var QE,lp,nne=b(()=>{"use strict";yt();sp();be();Cs();IE();op();QD();d$();QE=new Map,lp=new Map});function rne(e,t,n){oZ(t,e.inFlightTools,e.compositor);let r=n?.subagentId??Wl,o=r===Wl,i=e.sources.get(r);if(!i&&(i=kte(n?.agentType),e.sources.set(r,i),!o)){let s=Ute({parentId:n?.parentId,sources:e.sources,toolLane:e.toolLane,sourceId:r});u$(r,i,UD({isTTY:e.isTTY,compositor:e.compositor,toolLane:e.toolLane,out:e.out,streamingMarkdown:e.subagentMarkdown,thinkingMode:e.thinkingMode,orchestratorCtx:e.buildOrchestratorCtx()}),s);let a=n?.agentType??r,l=Date.now();e.subagentStartedAt.set(r,l),e.activeSubagents.set(r,{label:a,elapsedMs:0}),e.overlayComposerForStatus&&(e.overlayComposerForStatus.markDirty("subagent-status"),e.overlayComposerForStatus.flush())}if(o){let s=e.stageTracker.stage;ene(t,i,e.buildOrchestratorCtx());let a=t.type==="chunk"&&t.chunk.type==="tool_result"&&t.chunk.isError===!0;if(e.onStageChange&&(e.stageTracker.stage!==s||a))try{a?e.onStageChange(e.stageTracker.stage,{toolErrored:!0}):e.onStageChange(e.stageTracker.stage)}catch{}}else{if(tne(t,r,i,UD({isTTY:e.isTTY,compositor:e.compositor,toolLane:e.toolLane,out:e.out,streamingMarkdown:e.subagentMarkdown,thinkingMode:e.thinkingMode,orchestratorCtx:e.buildOrchestratorCtx()})),i.lastEventAt=Date.now(),i.quietBannerAnnounced=!1,i.pauseAnnotation!==void 0&&i.syntheticAgentToolUseId){i.pauseAnnotation=void 0,i.stalledTicks=0;let a=i.agentType??r;e.toolLane.addStartWithAgentContext(i.syntheticAgentToolUseId,"Agent",`(${a})`,void 0)}let s=t.type==="done"||t.type==="error";if(s&&e.activeSubagents.has(r)&&(e.activeSubagents.delete(r),e.subagentStartedAt.delete(r),e.overlayComposerForStatus&&(e.overlayComposerForStatus.markDirty("subagent-status"),e.overlayComposerForStatus.flush())),s&&e.isTTY){let a=i.syntheticAgentToolUseId;if(a&&e.toolLane.hasEntry(a)){let l=e.toolLane.flushSource(a),c=e.compositor,u=e.overlayComposer,d=e.toolLane,p=e.out;e.coordinator.schedule({anchor:`after-subagent:${r}`,commits:[()=>{if(c)Rn(c,l),c.commitAbove(""),u?(u.markDirty("tool-lane"),u.flush()):c.setOverlay(d.getOverlay());else{for(let f of l)p.line(f);p.line("")}}]});try{e.streamingMarkdownRef.current&&e.streamingMarkdownRef.current.commitPending()}finally{e.coordinator.drainSubagent(r)}}gt(e.buildOrchestratorCtx())}}}var one=b(()=>{"use strict";op();lE();QD();nne();sp();jD()});async function ine(e){e.resizeUnsubRef.current&&(e.resizeUnsubRef.current(),e.resizeUnsubRef.current=null),e.lastProgressByTask.clear(),e.softStoppingRef.current=!1;let t=e.streamingMarkdownRef.current?()=>e.streamingMarkdownRef.current.flush():void 0;await e.coordinator.flushAll(t),e.streamingMarkdownRef.current&&(e.streamingMarkdownRef.current.dispose(),e.streamingMarkdownRef.current=null);for(let r of e.subagentMarkdown.values()){try{await r.flush()}catch{}r.dispose()}if(e.subagentMarkdown.clear(),e.toolLane.hasPending()){let r=e.toolLane.flushCompletedRoots();if(e.isTTY&&e.compositorRef.current)r.length>0&&(Rn(e.compositorRef.current,r),e.compositorRef.current.commitAbove("")),e.overlayComposerRef.current?(e.overlayComposerRef.current.markDirty("tool-lane"),e.overlayComposerRef.current.flush()):e.compositorRef.current.setOverlay(e.toolLane.getOverlay());else if(r.length>0){for(let o of r)e.out.line(o);e.out.line("")}}if(e.pauseTickIntervalRef.current&&(clearInterval(e.pauseTickIntervalRef.current),e.pauseTickIntervalRef.current=null),e.compositorRef.current){if(e.ownsCompositor){try{e.compositorRef.current.endTurn()}catch{}try{e.compositorRef.current.disarm()}catch{}}else{try{e.compositorRef.current.setSpinner({enabled:!1})}catch(r){N("[stream-renderer] borrow-dispose setSpinner: "+String(r))}try{e.overlayComposerRef.current?(e.overlayComposerRef.current.invalidate(),e.overlayComposerRef.current.flush()):e.compositorRef.current.setOverlay("")}catch(r){N("[stream-renderer] borrow-dispose setOverlay: "+String(r))}try{e.compositorRef.current.setInputMode("idle")}catch(r){N("[stream-renderer] borrow-dispose setInputMode: "+String(r))}try{e.compositorRef.current.setOnCancel(e.priorOnCancelRef.current??null)}catch(r){N("[stream-renderer] borrow-dispose setOnCancel: "+String(r))}e.priorOnCancelRef.current=void 0}e.compositorRef.current=null,e.borrowedCompositorRef.current=null}let n=e.out;if(typeof n.flush=="function")try{n.flush()}catch{}}var sne=b(()=>{"use strict";fe();sp()});var cp,ZD=b(()=>{"use strict";TD();F();dh();Wt();PE();IE();vh();lE();xte();Rte();UE();gi();Pte();Lte();Nte();jD();one();sne();BD();cp=class{out;thinkingMode;isTTY;captureMode;reducedMotion;onCancel;onBackground;activeSkillName;history;autocompleteState;promptText;scrollRegion;onStageChange;ownsCompositor=!0;borrowedCompositor=null;priorOnCancel=void 0;interrupting=!1;softStopping=!1;coordinator=new FE;compositor=null;overlayComposer=null;streamingMarkdownRef={current:null};toolLane=new wh;thinkingLane=new rp;stageTracker=Ate();sources=new Map;subagentMarkdown=new Map;lastProgressByTask=new Map;childActivity=new ME;inFlightTools=new aE;disposed=!1;pauseTickInterval=null;resizeUnsub=null;subagentTickInterval=null;activeSubagents=new Map;subagentStartedAt=new Map;lastSubagentTotalSec=-1;ttfbStartedAt;ttfbDone;lastTtfbAnnotation="";addPreviewDiffRef;sink;constructor(t){this.captureMode=t.captureMode??JT(),this.reducedMotion=t.reducedMotion??YT(),this.out=this.captureMode?_te(t.out,2):t.out;let n=t.thinkingMode??(t.verbose===!0?"live":"summary");this.thinkingMode=this.captureMode&&n==="live"?"summary":n,this.onCancel=t.onCancel,this.onBackground=t.onBackground,this.isTTY=!(t.forceNonTty??!1)&&!Ue()&&!!process.stdout.isTTY&&!!process.stdin.isTTY,this.activeSkillName=t.activeSkillName,this.history=t.history,this.autocompleteState=t.autocompleteState,this.promptText=t.promptText,this.scrollRegion=t.scrollRegion,this.onStageChange=t.onStageChange,t.compositor&&(this.borrowedCompositor=t.compositor,this.ownsCompositor=!1),this.ttfbStartedAt=t.turnStartedAt,this.ttfbDone=t.turnStartedAt===void 0,this.addPreviewDiffRef=t.addPreviewDiffRef,this.sink=(r,o)=>this.process(r,o)}async arm(){if(this.disposed||!this.isTTY||this.compositor)return;let t;if(this.borrowedCompositor)t=this.borrowedCompositor,t.setInputMode("streaming"),this.priorOnCancel=t.getOnCancel(),this.onCancel&&t.setOnCancel(this.onCancel);else{let n=jd();t=new Zd({stdout:process.stdout,stdin:process.stdin,...this.onCancel?{onCancel:this.onCancel}:{},...this.onBackground?{onBackground:this.onBackground}:{},...this.history?{history:this.history}:{},...this.autocompleteState?{autocompleteState:this.autocompleteState}:{},...this.promptText!==void 0?{promptText:this.promptText}:{},formatInputBuffer:r=>yi(r,n),...this.scrollRegion?{scrollRegion:this.scrollRegion}:{},captureMode:this.captureMode,goblinSpinner:XT()}),await t.arm()}this.compositor=t,this.addPreviewDiffRef&&(this.addPreviewDiffRef.current=(n,r)=>{this.toolLane.addPreviewDiff(n,r),this.overlayComposer?.markDirty("tool-lane"),this.overlayComposer?.flush()}),this.overlayComposer=new NE(t,["thinking-live","subagent-status","markdown-pending","tool-lane","progress-banner","interrupt"]),Ote(this.overlayComposer,{stageTracker:this.stageTracker,thinkingMode:this.thinkingMode,thinkingLane:this.thinkingLane,streamingMarkdownRef:this.streamingMarkdownRef,toolLane:this.toolLane,lastProgressByTask:this.lastProgressByTask,sources:this.sources,childActivity:this.childActivity,getInterrupting:()=>this.interrupting,getSoftStopping:()=>this.softStopping,getActiveSubagents:()=>this.activeSubagents}),t.setSpinner({enabled:!this.reducedMotion,rotateVerbEveryMs:3500}),this.pauseTickInterval=setInterval(()=>this.checkPauseAnnotations(),80).unref(),this.subagentTickInterval=setInterval(()=>{if(this.disposed||this.activeSubagents.size===0)return;let n=Date.now(),r=0;for(let[o,i]of this.activeSubagents){let s=this.subagentStartedAt.get(o)??n,a=n-s;this.activeSubagents.set(o,{...i,elapsedMs:a}),r+=Math.floor(a/1e3)}this.overlayComposer&&r!==this.lastSubagentTotalSec&&(this.lastSubagentTotalSec=r,this.overlayComposer.markDirty("subagent-status"),this.overlayComposer.flush())},250).unref(),this.resizeUnsub=$te(this.overlayComposer,!1)}getCompositor(){return this.compositor}setInterrupting(t){this.disposed||(this.interrupting=t,this.overlayComposer&&(this.overlayComposer.markDirty("interrupt"),setTimeout(()=>{this.disposed||this.overlayComposer?.flush()},0)))}setSoftStopping(t){this.disposed||(this.softStopping=t,this.overlayComposer&&(this.overlayComposer.markDirty("progress-banner"),setTimeout(()=>{this.disposed||this.overlayComposer?.flush()},0)))}stripPendingTerminalState(t){if(this.disposed)return!1;let n=this.streamingMarkdownRef.current;return n?n.stripPendingFrom(t):!1}getPendingBuffer(){return this.disposed?"":this.streamingMarkdownRef.current?.getPendingBuffer()??""}setBashOutputTail(t,n){this.disposed||(this.toolLane.setBashOutputTail(t,n),this.overlayComposer&&(this.overlayComposer.markDirty("tool-lane"),setTimeout(()=>{this.disposed||this.overlayComposer?.flush()},0)))}notifyFirstContent(){if(this.disposed)return;Mte(this.ttfbDone,()=>{this.ttfbDone=!0},this.overlayComposer)&&setTimeout(()=>{this.disposed||this.overlayComposer?.flush()},0)}buildOrchestratorCtx(){return Bte({out:this.out,isTTY:this.isTTY,compositor:this.compositor,overlayComposer:this.overlayComposer,toolLane:this.toolLane,thinkingLane:this.thinkingLane,thinkingMode:this.thinkingMode,streamingMarkdown:this.streamingMarkdownRef,coordinator:this.coordinator,lastProgressByTask:this.lastProgressByTask,sources:this.sources,childActivity:this.childActivity,...this.isTTY?{stageTracker:this.stageTracker}:{},...this.activeSkillName?{activeSkillName:this.activeSkillName}:{}})}process(t,n){if(this.disposed)return;let r={out:this.out,isTTY:this.isTTY,compositor:this.compositor,overlayComposer:this.overlayComposer,toolLane:this.toolLane,thinkingLane:this.thinkingLane,streamingMarkdownRef:this.streamingMarkdownRef,stageTracker:this.stageTracker,coordinator:this.coordinator,childActivity:this.childActivity,inFlightTools:this.inFlightTools,sources:this.sources,subagentMarkdown:this.subagentMarkdown,lastProgressByTask:this.lastProgressByTask,thinkingMode:this.thinkingMode,activeSkillName:this.activeSkillName,onStageChange:this.onStageChange,buildOrchestratorCtx:()=>this.buildOrchestratorCtx(),activeSubagents:this.activeSubagents,subagentStartedAt:this.subagentStartedAt,overlayComposerForStatus:this.overlayComposer};rne(r,t,n)}async dispose(){if(this.disposed)return;this.disposed=!0,this.addPreviewDiffRef&&(this.addPreviewDiffRef.current=()=>{}),this.subagentTickInterval!==null&&(clearInterval(this.subagentTickInterval),this.subagentTickInterval=null),this.softStopping=!1;let t={out:this.out,isTTY:this.isTTY,ownsCompositor:this.ownsCompositor,compositorRef:{current:this.compositor},overlayComposerRef:{current:this.overlayComposer},toolLane:this.toolLane,streamingMarkdownRef:this.streamingMarkdownRef,subagentMarkdown:this.subagentMarkdown,lastProgressByTask:this.lastProgressByTask,coordinator:this.coordinator,resizeUnsubRef:{current:this.resizeUnsub},pauseTickIntervalRef:{current:this.pauseTickInterval},softStoppingRef:{current:this.softStopping},priorOnCancelRef:{current:this.priorOnCancel},borrowedCompositorRef:{current:this.borrowedCompositor}};await ine(t),this.compositor=t.compositorRef.current,this.resizeUnsub=t.resizeUnsubRef.current,this.pauseTickInterval=t.pauseTickIntervalRef.current,this.softStopping=t.softStoppingRef.current,this.priorOnCancel=t.priorOnCancelRef.current,this.borrowedCompositor=t.borrowedCompositorRef.current}checkPauseAnnotations(){let t={compositor:this.compositor,disposed:this.disposed,sources:this.sources,toolLane:this.toolLane,isTTY:this.isTTY,overlayComposer:this.overlayComposer,stageTracker:this.stageTracker,thinkingMode:this.thinkingMode,thinkingLane:this.thinkingLane,streamingMarkdownRef:this.streamingMarkdownRef,lastProgressByTask:this.lastProgressByTask,out:this.out,pauseTickInterval:this.pauseTickInterval,resizeUnsub:this.resizeUnsub,ttfbStartedAt:this.ttfbStartedAt,ttfbDone:this.ttfbDone,lastTtfbAnnotation:this.lastTtfbAnnotation};Fte(t),Dte(t),this.lastTtfbAnnotation=t.lastTtfbAnnotation}}});function ZE(e,t){let n=t.verbose??k.AFK_SKILL_STREAM_VERBOSE==="1",r=t.out??e.out,o=e.getCompositor?.()??null;return new cp({out:r,verbose:n,activeSkillName:t.skillName,onCancel:t.onCancel??(()=>{}),...o?{compositor:o}:{},...e.onStageChange?{onStageChange:e.onStageChange}:{}})}var eL=b(()=>{"use strict";F();ZD()});async function ane(e,t,n,r,o){let i=VE(e.name,t),s=e.context==="fork"?" This skill runs with context: 'fork' \u2014 the executor will fork a subagent.":"",a=`Use the \`skill\` tool with {"name": "${e.name}", "arguments": "${t}"} to dispatch this skill.${s}`,l=[];return n&&n.trim().length>0&&l.push({type:"text",text:n}),l.push({type:"text",text:i}),l.push({type:"text",text:a}),r!==void 0&&r.length>0&&o!==void 0?await nk(l,o,r):bs(l,r),l}var lne=b(()=>{"use strict";JE();og();Xu()});async function ex(e,t){let n=ZE(e,{skillName:t.skillName,onCancel:()=>{e.session.current.interrupt().catch(()=>{})}}),r=!1,o=`/${t.skillName}${t.args?" "+t.args:""}`;await e.transcript?.appendUser?.(o).catch(()=>{});let i="",s=!1,a,l=0,c=[],u=new Map;try{await n.arm(),e.setSoftStopHandler?.(()=>{r=!0,e.session.current.interrupt().catch(()=>{})});let d;if(t.preflight)try{d=await t.preflight()}catch{d=void 0}let p=await ane(t.skillMeta,t.args,d,t.attachments,e.stats.sessionId);await Ru(n.sink,async()=>{for await(let f of e.session.current.sendMessageStream(p)){if(r)break;if(f.type==="message"&&f.message.role==="assistant"&&(i=f.message.content),f.type==="chunk"&&f.chunk.type==="tool_use_detail"){let g=f.chunk,h={toolName:g.toolName,toolUseId:g.toolUseId,input:g.toolInput};u.set(g.toolUseId,h),c.push(h)}else if(f.type==="chunk"&&f.chunk.type==="tool_result"){let g=f.chunk,h=u.get(g.toolUseId);if(h&&(h.result=g.content,h.isError=g.isError,u.delete(g.toolUseId)),e.onContextProgress){let y=Date.now();if(y-l>=w1e){l=y;try{let w=e.onContextProgress();w instanceof Promise&&await w}catch{}}}}else f.type==="done"&&(s=!0,a=f.metadata);n.sink(f)}})}finally{e.setSoftStopHandler?.(null),await n.dispose();try{e.onStageChange?.("observing")}catch{}}if(s&&!r){vl(e.stats,o,i,a,c);try{e.ui.repaintStatusLine()}catch{}await e.transcript?.appendTurn(o,i).catch(()=>{})}return i}var w1e,tL=b(()=>{"use strict";eL();Od();ni();lne();w1e=15e3});import{execFile as S1e}from"child_process";import{promisify as v1e}from"util";import{writeFileSync as k1e}from"fs";import{join as T1e}from"path";function rL(e){let t=e.trim();if(!t)return null;if(/^#?\d+$/.test(t)){let r=t.replace(/^#/,""),o=parseInt(r,10);if(!(o>0&&o<1e6))throw new Error(`[afk preflight] Invalid PR number: ${r}. Must be 1\u2013999999.`);return r}let n=t.match(/github\.com\/[^/]+\/[^/]+\/pull\/(\d+)/);if(n&&n[1]){let r=n[1],o=parseInt(r,10);if(!(o>0&&o<1e6))throw new Error(`[afk preflight] Invalid PR number in URL: ${r}. Must be 1\u2013999999.`);return r}return null}async function R1e(e,t,n){try{let{stdout:r}=await E1e(e,t,{encoding:"utf-8",...n?.cwd?{cwd:n.cwd}:{},maxBuffer:n?.maxBuffer??x1e,timeout:8e3});return r}catch(r){if(k.AFK_DEBUG==="1"&&r instanceof Error&&"stderr"in r){let o=String(r.stderr??""),i=Se(o).slice(0,200).trim();i&&process.stderr.write(`[afk preflight] ${e} stderr: ${i}
|
|
1926
1926
|
`)}return null}}async function A1e(e,t,n={}){let r=n.exec??R1e,o=n.writeFile??((f,g)=>k1e(f,g,"utf-8")),[i,s,a]=await Promise.all([r("gh",["pr","view",e,"--json","title,baseRefName,headRefName,additions,deletions,changedFiles,files"],{cwd:t.cwd}),r("gh",["pr","diff",e],{cwd:t.cwd}),r("git",["status","--porcelain"],{cwd:t.cwd})]),l=null;if(i)try{l=JSON.parse(i)}catch{l=null}let c=null,u=null;if(s!==null){let f=T1e(t.artifactDir,`pr-${e}.diff`);try{o(f,s),c=f,u=s.trimEnd().split(`
|
|
1927
1927
|
`).length}catch{}}let d=a?a.split(`
|
|
1928
1928
|
`).filter(f=>f.trim().length>0).length:0,p=d>0;return{pr:e,metadata:l,diffPath:c,diffLineCount:u,dirty:p,dirtyFiles:d}}function tx(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/[\r\n]/g,"")}function C1e(e){let t=[];if(t.push(`<preflight-context skill="review" pr="${e.pr}">`),e.metadata){let n=e.metadata;n.title&&t.push(`Title: ${tx(n.title)}`),n.baseRefName&&n.headRefName&&t.push(`Branch: ${tx(n.headRefName)} \u2192 ${tx(n.baseRefName)}`);let r=[];if(n.additions!==void 0&&r.push(`+${n.additions}`),n.deletions!==void 0&&r.push(`-${n.deletions}`),n.changedFiles!==void 0&&r.push(`${n.changedFiles} file${n.changedFiles===1?"":"s"}`),r.length>0&&t.push(`Stats: ${r.join(" / ")}`),n.files&&n.files.length>0){let i=n.files.filter(s=>!!s.path);t.push("Files changed:");for(let s of i.slice(0,40)){let a=s.additions!==void 0?`+${s.additions}`:"",l=s.deletions!==void 0?`-${s.deletions}`:"",c=a||l?` (${[a,l].filter(Boolean).join("/")})`:"";t.push(` - ${tx(s.path)}${c}`)}i.length>40&&t.push(` \u2026and ${i.length-40} more (see diff artifact)`)}}else t.push("PR metadata: UNAVAILABLE (gh pr view failed \u2014 check `gh auth status`)");return e.diffPath&&e.diffLineCount!==null?t.push(`Diff artifact: ${e.diffPath} (${e.diffLineCount} lines)`):t.push("Diff artifact: UNAVAILABLE (gh pr diff failed)"),e.dirty?(t.push(`Working tree: DIRTY (${e.dirtyFiles} uncommitted change${e.dirtyFiles===1?"":"s"})`),t.push(" \u2192 DO NOT stash, commit, reset, or otherwise mutate the working tree."),t.push(" \u2192 Review is read-only. The user is mid-work; preserve their state.")):(t.push("Working tree: clean"),t.push(" \u2192 Review is read-only. Do not stash, commit, or modify files.")),t.push("Capabilities: compose available, subagents available."),t.push("Use the diff artifact path above instead of re-running `gh pr diff`."),t.push("</preflight-context>"),t.join(`
|
|
@@ -2180,7 +2180,7 @@ ${E}
|
|
|
2180
2180
|
${T}`})}return{fileBlocks:l,warnings:c}}function Jae(e){let t=e.replace(/\s+/g," ").trim();return t.length<=60?t:`${t.slice(0,59)}\u2026`}async function Yae(e,t,n){let r=t?.peekQueuedText(),o=r!==void 0?{text:r.text,claimed:!1}:void 0;r!==void 0&&t?.reserveQueued?.(r);let i;try{i=await e.promoteActiveForeground(o)}catch(s){throw r!==void 0&&t?.releaseQueued?.(r),s}if(o?.claimed===!0&&t!==null&&r!==void 0){try{await n?.(o.text)}catch{}return t.dropQueued(r),{jobs:i,flushedText:o.text,flushedPreview:r.preview}}return r!==void 0&&t?.releaseQueued?.(r),{jobs:i}}F();L();F();tt();L();hl();function Xae(){return{toolStartTimes:new Map,subagentStartTimes:new Map,subagentLabels:new Map}}function Qae(e,t){Ue()&&(t.pending||e.toolStartTimes.has(t.toolUseId)||e.toolStartTimes.set(t.toolUseId,Date.now()))}function Zae(e,t,n,r){if(!Ue())return;let o=e.toolStartTimes.get(t.toolUseId),i=o!==void 0?Date.now()-o:void 0;e.toolStartTimes.delete(t.toolUseId);let s=Oe(n??"tool"),a=t.isError?m.error("err"):m.success("ok"),l=i!==void 0?` \xB7 ${he(i)}`:"";r.fn(m.dim(` \u25E6 ${s}${l} \xB7 `)+a)}function ele(e,t,n,r){if(!Ue())return;let{subagentId:o,agentType:i}=n,s=Oe(i??o);if(e.subagentStartTimes.has(o)||(e.subagentStartTimes.set(o,Date.now()),e.subagentLabels.set(o,s),r.fn(m.dim(` \u25E6 worker ${s} started`))),t.type==="done"||t.type==="error"){let l=e.subagentStartTimes.get(o),c=l!==void 0?Date.now()-l:void 0;e.subagentStartTimes.delete(o),e.subagentLabels.delete(o);let u=c!==void 0?` \xB7 ${he(c)}`:"",d=t.type==="error"?m.error("failed"):m.success("done");r.fn(m.dim(` \u25E6 worker ${s}${u} \xB7 `)+d)}}var RR=class{state;writer;ttfb;constructor(t,n){this.state=Xae(),this.writer=t,this.ttfb=n}onToolStart(t){Qae(this.state,t)}onToolResult(t,n){Zae(this.state,t,n,this.writer)}onSubagentEvent(t,n){ele(this.state,t,n,this.writer)}onFirstContent(t){this.ttfb.waitingLineEmitted&&(this.ttfb.waitingLineEmitted=!1,t.write("\r\x1B[2K"))}};function tle(e){return{startedAt:e,received:!1,waitingLineEmitted:!1}}function nle(e){return e.received?{}:{turnStartedAt:e.startedAt}}function rle(e,t,n){let r=t.type==="chunk"&&t.chunk.type==="content"&&!n;return r&&(e.received=!0),r}function ole(e,t=process.stdout,n){if(!Ue()||!t.isTTY)return;(e?.fn??console.log)(m.dim(" \u25E6 waiting for response\u2026")),n&&(n.waitingLineEmitted=!0,e&&(n.plainHooks=new RR(e,n)))}fe();L();var Sze=3e3;async function ile(e,t){if(!e)return t;let n=Date.now();if(n-t<Sze)return t;try{let r=e();r instanceof Promise&&await r}catch(r){Ge()&&console.error(" "+m.error("onContextProgress (status refresh) failed:"),r)}return n}L();fe();yt();Us();var vze="Keep waiting \u2014 auto-resume in progress",sle="Switch model / provider (type /model after)",kze="Stop waiting";async function ale(e){let{event:t,session:n,borrowedCompositor:r,pickerRef:o,completionWriter:i,disposeRendererOnce:s,setPausedState:a,onPauseInterrupt:l}=e;if(a?.(!0),await s(),r&&t.autoResume===!0){let c=new AbortController;o.abort=c;let u=t.resetsAt?t.resetsAt.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}):null,d=u?`Keep waiting \u2014 auto-resumes at ${u}`:vze,p=[m.warning(" \u23F3 Usage limit reached.")+(u?m.dim(` Auto-resumes at ${u}.`):""),m.dim(" Tip: run `claude login` in another terminal to switch account \u2014 this turn resumes on it automatically."),""];An(r,{header:p,options:[d,sle,kze],signal:c.signal,initialIndex:0}).then(f=>{if(o.abort=null,!f)return;let g=f[0];g===void 0||g===d||(l(),g===sle&&(i??{fn:console.log}).fn(m.dim(" Hint: type /model <name> to switch, then send your message again.")),n.interrupt().catch(h=>{Ge()&&console.error(" "+m.error("picker pause-interrupt session.interrupt() failed:"),h)}))}).catch(f=>{Ge()&&console.error(" "+m.error("picker promise rejected:"),f)})}else(i??{fn:console.log}).fn(vU({reason:t.reason,...t.resetsAt!==void 0?{resetsAt:t.resetsAt}:{},...t.accountId!==void 0?{accountId:t.accountId}:{},...t.autoResume!==void 0?{autoResume:t.autoResume}:{}}))}PE();async function lle(e,t,n,r,o="summary",i,s){let a=uee(e.text,e.attachments);r.onUserMessage&&await Promise.resolve(r.onUserMessage(a)).catch(()=>{}),r.setInFlight(!0);let l=Date.now(),c=tle(l);ole(i,process.stdout,c),Bd(process.stdout,qg(process.cwd(),!0));let u="",d=0,p=!1,f=!1,g=!1,h=!1,y=!1,w,S=!1,v=!1,E={abort:null},T=0,x=[],_=new Map,P=e.text.startsWith("/")?e.text.split(/[\s:]/)[0]?.slice(1):void 0,R=()=>{let j=r.subagentControl;j?.hasPromotableForeground()&&Yae(j,C,r.onQueuedUserMessage).then(({jobs:q,flushedText:H,flushedPreview:K})=>{let X=(i??{fn:console.log}).fn;for(let D of q)X(m.dim(` \u2192 subagent backgrounded as ${D.jobId}: ${D.label}`));q.some(D=>D.sharesWorktree)&&X(m.warning("\u26A0 Background child is writing to your worktree \u2014 edits may conflict until it finishes")),H!==void 0&&X(m.dim(` \u2192 queued message sent to this turn: ${Jae(K??H)}`))}).catch(()=>{})},C=r.getCompositor?r.getCompositor():null,I=()=>new cp({out:dp(i),thinkingMode:o,...P?{activeSkillName:P}:{},onCancel:()=>{t.interrupt().catch(j=>{Ge()&&console.error(" "+m.error("session.interrupt() failed:"),j)})},...r.subagentControl?{onBackground:R}:{},...s?.history?{history:s.history}:{},...s?.autocompleteState?{autocompleteState:s.autocompleteState}:{},...s?.promptText!==void 0?{promptText:s.promptText}:{},...r.scrollRegion?{scrollRegion:r.scrollRegion}:{},...C?{compositor:C}:{},...r.onStageChange?{onStageChange:r.onStageChange}:{},...nle(c),...r.addPreviewDiffRef?{addPreviewDiffRef:r.addPreviewDiffRef}:{}}),M=I();r.bashTailSetter&&(r.bashTailSetter.current=(j,q)=>M.setBashOutputTail(j,q));let U=async()=>{if(!h){h=!0,r.bashTailSetter&&(r.bashTailSetter.current=void 0);try{await M.dispose()}catch{}}},O=async()=>{await M.arm();let j=M.getCompositor();if(i&&j){let q=j;i.fn=H=>q.commitAbove(H),i.suppressSubagentCompletion=!0}r.setActiveCompositor?.(j),r.setInterruptNotifier?.(q=>M.setInterrupting(q)),r.rearmStatus?.()};try{C?C.commitAbove(""):console.log(),r.setSoftStopHandler&&r.setSoftStopHandler(()=>{S=!0,M.setSoftStopping(!0),t.interrupt().catch(Z=>{Ge()&&console.error(" "+m.error("soft-stop session.interrupt() failed:"),Z)});let W=r.subagentControl;W?.hasActiveForeground()&&W.cancelActiveForeground().catch(Z=>{Ge()&&console.error(" "+m.error("soft-stop cancelActiveForeground() failed:"),Z)})}),r.setPauseInterruptHandler&&r.setPauseInterruptHandler(()=>{v=!0,t.interrupt().catch(W=>{Ge()&&console.error(" "+m.error("pause-interrupt session.interrupt() failed:"),W)})}),await O(),r.setBackgroundHandler&&r.subagentControl&&r.setBackgroundHandler(R),r.setTaskViewHandler?.(Wae(r));let{fileBlocks:j,warnings:q}=Vae(e.text,{rootDir:process.cwd()});for(let W of q)(i??{fn:console.log}).fn(m.dim(` @-file: ${W}`));if(e.attachments.length>0&&(await t.waitForInitialization(),t.sessionId===void 0))throw new Error("CLI session initialized without a session id");let H=j.length>0||e.attachments.length>0?await zae(e.text,e.attachments,void 0,j,t.sessionId):e.text,K=t.sendMessageStream(H);await Ru((W,Z)=>{M.process(W,Z),Z&&c.plainHooks?.onSubagentEvent(W,Z)},async()=>{for await(let W of K){if(S||v)break;let Z=rle(c,W,f);if(W.type==="chunk"&&W.chunk.type==="content"?(u=p?jae(u,W.chunk.content):u+W.chunk.content,p=!1,f=!0):W.type==="message"&&!f&&(u=W.message.content),W.type==="stream_retry"&&(u=u.slice(0,d),p=u.length>0),W.type==="chunk"&&W.chunk.type==="tool_use_detail"){let le=W.chunk,te={toolName:le.toolName,toolUseId:le.toolUseId,input:le.toolInput,...le.toolInputRaw!==void 0&&{inputRaw:le.toolInputRaw}};_.set(le.toolUseId,te),x.push(te),c.plainHooks?.onToolStart(le)}else if(W.type==="chunk"&&W.chunk.type==="tool_result"){let le=W.chunk;d=u.length,p=!0;let te=_.get(le.toolUseId);te&&(te.result=le.content,te.isError=le.isError,_.delete(le.toolUseId)),c.plainHooks?.onToolResult(le,te?.toolName),T=await ile(r.onContextProgress,T)}if(W.type==="paused"){await ale({event:W,session:t,borrowedCompositor:C,pickerRef:E,completionWriter:i,disposeRendererOnce:U,setPausedState:r.setPausedState,onPauseInterrupt:()=>{v=!0}});continue}if(W.type==="resumed"){r.setPausedState?.(!1),E.abort?.abort(),E.abort=null;let le=W.hotSwapped&&W.accountId?`\u25B6 Resumed on ${W.accountId}`:"\u25B6 Resumed";u="",d=0,p=!1,f=!1,x.length=0,_.clear(),y=!1,w=void 0,g=!1,M=I(),h=!1,await O(),(i??{fn:console.log}).fn(m.success(le));continue}if(W.type==="error"){await U(),Dc(Rc(W.error)),g=!0;continue}M.process(W),Z&&(c.plainHooks?.onFirstContent(process.stdout),M.notifyFirstContent()),W.type==="done"&&(y=!0,w=W.metadata)}});let D=!1;if(y&&!S&&!v){let W=Bae(M.getPendingBuffer());W>=0?M.stripPendingTerminalState(W):Kh(u)!==null&&(D=!0)}await U();let G=i?i.fn:console.log;if(S){let W=C?C.getPendingCount():0,Z=W>0?` \xB7 ${W} queued`:"";G(m.warning(`\u23F8 Stopped${Z} \u2014 work so far kept.`)+m.dim(" Send a message to continue.")),G("")}if(v&&(G(m.dim("\u25B6 Ending wait \u2014 running your next command\u2026")),G("")),y&&!S&&!v){vl(n,a,u,w,x),await r.onTurnComplete?.(a,u).catch(()=>{}),Nd(process.stdout),b7(process.stdout,"afk: turn complete");let W=le=>{i?i.fn(le):console.log(le)},Z=Kh(u);if(Z&&!D){W(Hae(Z,{durationMs:w?.durationMs,totalCostUsd:w?.totalCostUsd,toolCount:x.length})),W("");let le=WL(x),te=Bre(x);if(r.onTerminalState)try{r.onTerminalState(Z,{doneHasCorroboratingEvidence:te,doneEvidenceClassification:le})}catch{}if(n.permissionMode==="autonomous"){let _e=Z.kind==="done"&&uf().verifyDone===!0&&!te;jre(Z,void 0,{unverified:_e})}}if(zF(w,n,W),VF(W,process.stdout),r.onAfterTurn){let le=r.onAfterTurn();le instanceof Promise&&await le.catch(()=>{})}}}catch(j){await U(),g||Dc(Rc(j))}finally{await U(),Bd(process.stdout,qg(process.cwd(),!1)),i&&(i.fn=i.idleFn,i.suppressSubagentCompletion=!1),r.setActiveCompositor?.(null),r.setInterruptNotifier?.(null),r.setBackgroundHandler?.(null),r.setTaskViewHandler?.(null),r.setSoftStopHandler?.(null),r.setPausedState?.(!1),r.setPauseInterruptHandler?.(null),E.abort?.abort(),E.abort=null,r.setInFlight(!1),r.rearmStatus?.()}}Ps();dm();var Tze=5e3,Eze=3,xze="[auto-resume] The background task above has finished. Continue the work it was dispatched for.";async function Rze(e,t){if(e.firstTurnHook&&e.stats.totalTurns===0){let n=e.firstTurnHook;e.firstTurnHook=void 0;try{await n(t)}catch(r){e.completionWriter.fn(m.warning("\u26A0 ")+"first-turn hook failed: "+(r instanceof Error?r.message:String(r)))}}}async function cle(e,t,n,r,o,i,s,a){let{contextPane:l,loopStageBar:c,mascotBar:u,healthRail:d,verdictLedger:p,shellPassthrough:f,bgResultNotifier:g}=s,h=null,y=[];e.session.current.waitForInitialization().then(async I=>{Ge()&&(h=Px(I)),await Th(e.session.current),Ge()&&(y=dL())}).catch(()=>{});let w=e.initialInput!==void 0?{text:e.initialInput,attachments:[]}:void 0,S,v=!1,E=!1,T;e.clearPendingStopInjection=()=>{T=void 0};let x,_,P,R=(()=>{let I=parseInt(e.options.maxTurns,10);return I>0?I:void 0})(),C=0;for(g.onInjectable=()=>{C>=Eze||!o.isAwaitingInput()||!o.bufferIsEmpty()||(C++,Nd(process.stdout),w={text:xze,attachments:[]},o.abortPendingRead())};;){if(C=0,h&&(e.replRenderer.writeLine(h),e.replRenderer.writeLine(""),h=null),y.length>0){for(let D of y)e.replRenderer.writeLine(D);e.replRenderer.writeLine(""),y=[]}let I=f.drainNotifications();for(let{job:D,result:G}of I){let W=G.errorReason===void 0?"\u2713":"\u2717",Z=G.errorReason==="abort"?"killed":G.errorReason==="timeout"?"timed out":G.errorReason==="signal-killed"?"killed by signal":`exit ${G.exitCode??0}`,le=Math.max(0,Math.round(G.durationMs/100)/10);e.replRenderer.writeLine(m.dim(` ${W} [${D.id}] ${Z} \xB7 ${le}s \xB7 `)+D.command)}let M=g.drainNotifications();for(let{job:D}of M){let G=D.status==="completed"?"\u2713":D.status==="failed"?"\u2717":"\u2298",W=D.endedAt!==void 0?Math.max(0,Math.round((D.endedAt-D.startedAt)/100)/10):0,Z=ee(D.label,60);e.replRenderer.writeLine(m.dim(` ${G} [${D.jobId}] subagent ${D.status} \xB7 ${W}s \xB7 `)+Z)}let U=l.renderIfChanged(e.stats.sessionId);if(U.length>0){for(let D of U)e.replRenderer.writeLine(D);e.replRenderer.writeLine("")}let O,j;if(w===void 0){let D=await e.session.current.takePendingPlanExitSeed();D!==void 0&&(e.stats.permissionMode=D.mode,w={text:D.message,attachments:[]})}if(w!==void 0){let D=w;w=void 0;let G=Sp(e.stats.permissionMode),W=Rl({buffer:D.text,promptText:G,isTTY:!!process.stdout.isTTY,attachmentSummary:Jd([...D.attachments])});e.replRenderer.writeLine(W),O=D.text.trim(),j=D.attachments}else{let D=S;S=void 0;let G=await o.readLine({promptFn:()=>Sp(e.stats.permissionMode),...D!==void 0?{initialBuffer:D}:{},primePromptSuggestion:!0,onSigint:r,onShiftTab:()=>{wR(e.slashCtx).catch(()=>{}),e.statusLine.rearm()}});O=G.text.trim(),j=G.attachments}if(!O&&j.length===0)continue;if(O.startsWith("!")){let D=/^(0|false|off|no)$/i.test(k.AFK_SHELL_PASSTHROUGH??"");if(e.options.shellPassthrough!==!1&&!D&&(v||(v=!0,e.replRenderer.writeLine(m.dim(" \u2139 ! prefix shells out. Pass --no-shell-passthrough (or set AFK_SHELL_PASSTHROUGH=0) to send ! text to the model instead."))),await f.dispatch(O))){e.statusLine.rearm();continue}}let q=!1;if(O.startsWith("/")){let D=await v7(O,e.slashCtx,j);if(D.handled){if(D.result==="exit"){await e.resolveWorktreeDisposition?.(!0),e.rl.close();return}if((O==="/clear"||O.startsWith("/clear "))&&(await t.rotateOnClear(),e.replRenderer.writeLine(m.dim(` transcript: ${t.path()}`)),p.reset(),T=void 0),D.result!==null&&typeof D.result=="object"&&"kind"in D.result&&D.result.kind==="submit"){w={text:D.result.message,attachments:j??[]},e.statusLine.rearm();continue}if(D.result!==null&&typeof D.result=="object"&&"kind"in D.result&&D.result.kind==="prefill"){S=D.result.message,e.statusLine.rearm();continue}e.statusLine.rearm();continue}q=!0}a.push(O),await Rze(e,O);let H=O;if(q){let D=$$(O);if(D){let G=D.name.replace(/^\//,"").split(":").pop()??"";if(G&&sL(G)){let W={skillName:G,rawArgs:D.args,source:"plugin",capabilities:{compose:!0,subagents:!0}},Z=e.session.current.sessionId,le=Gl(Z),te=Date.now();N(`[afk trace] preflight.start commandName=${G}`);let _e=!1,qe=await Kl(W,{cwd:e.stats.cwd??process.cwd(),artifactDir:le},Hr=>{Ge()&&e.replRenderer.writeLine(m.warning(`\u26A0 preflight(${G}) failed: `)+(Hr instanceof Error?Hr.message:String(Hr)))});_e=qe!==null,N(`[afk trace] preflight.end commandName=${G} durationMs=${Date.now()-te} success=${_e}`),H=cL(qe?.manifestBlock,O)}}}let K=f.drainInjections();K.length>0&&(H=K+H);let X=g.drainInjections();if(X.length>0&&(H=X+H),T!==void 0&&(H=T+`
|
|
2181
2181
|
|
|
2182
2182
|
`+H,T=void 0),e.hookRegistry)try{let D={event:"UserPromptSubmit",prompt:H,sessionId:e.stats.sessionId},G=await e.hookRegistry.dispatch(D);G.injectContext&&(H=G.injectContext+H)}catch(D){if(D instanceof Re){e.replRenderer.writeLine(m.warning("\u2298 Turn blocked by hook")+(D.reason?m.dim(`: ${ie(D.reason)}`):"")),e.statusLine.rearm();continue}if(D instanceof to){e.replRenderer.writeLine(m.warning("\u2298 Turn blocked by hook")+m.dim(`: handler timed out after ${D.timeoutMs}ms`)),e.statusLine.rearm();continue}throw D}if(x=_=P=void 0,CU(),MU(),await lle({text:H,attachments:j},e.session.current,e.stats,{setInFlight(D){n.turnInFlight=D},...e.subagentControl?{subagentControl:e.subagentControl}:{},async onUserMessage(D){await t.appendUser(D)},async onQueuedUserMessage(D){await t.appendQueuedUser(D)},async onTurnComplete(D,G){if(await t.appendTurn(D,G),e.stats.sessionId)try{_s(e.stats)}catch(W){E||(E=!0,e.replRenderer.writeLine(m.warning("\u26A0 ")+"session autosave failed \u2014 this conversation may not be resumable: "+(W instanceof Error?W.message:String(W))))}},async onAfterTurn(){await e.contextSampler.onTurn(e.stats.totalTurns),await e.gitStatusSampler.refresh(),e.statusLine.repaint(pr(e.stats,e.contextSampler,e.gitStatusSampler,R)),e.statusLine.rearm(),c?.repaint("observing"),d?.update(e.stats)},rearmStatus:()=>e.statusLine.rearm(),onTerminalState:(D,G)=>{p?.push(D),x=D.kind,_=G?.doneHasCorroboratingEvidence,P=G?.doneEvidenceClassification},setActiveCompositor:D=>{n.activeCompositor=D,D===null&&n.interruptPickerAbort&&(n.interruptPickerAbort.abort(),n.interruptPickerAbort=null)},setInterruptNotifier:D=>{n.notifyInterrupting=D},scrollRegion:e.statusLine,getCompositor:()=>o.getCompositor(),setBackgroundHandler:D=>o.setBackgroundHandler(D),setTaskViewHandler:D=>o.setTaskViewHandler(D),setSoftStopHandler:i,setPausedState:D=>o.setPausedState(D),setPauseInterruptHandler:D=>o.setPauseInterruptHandler(D),async onContextProgress(){await e.contextSampler.refresh(),e.statusLine.repaint(pr(e.stats,e.contextSampler,e.gitStatusSampler,R)),d?.update(e.stats,e.contextSampler.getRatio())},...c?{onStageChange:(D,G)=>{c.repaint(D),u?.onStage(D,G)}}:{},...e.addPreviewDiffRef?{addPreviewDiffRef:e.addPreviewDiffRef}:{},bashTailSetter:e.bashTailSetter},e.stats.thinkingUi??e.options.thinkingUi,e.completionWriter,o.toRunTurnRefs(Sp(e.stats.permissionMode))),e.hookRegistry)try{let D=await e.hookRegistry.dispatch({event:"Stop",sessionId:e.stats.sessionId,...x!==void 0?{terminalState:x}:{},..._!==void 0?{doneHasCorroboratingEvidence:_}:{},...P!==void 0?{doneEvidenceClassification:P}:{}},void 0,Tze);D.injectContext&&D.injectContext.trim().length>0&&(T=D.injectContext)}catch(D){if(D instanceof Lt)throw D;D instanceof to?(N("[stop hook] handler timed out"),e.completionWriter.fn(m.dim(" [stop hook] timed out"))):D instanceof Re?e.completionWriter.fn(m.dim(` [stop hook] blocked: ${ie(D.reason??"no reason given")}`)):N("[stop hook] unexpected error: "+String(D))}}}function Aze(e,t){if(e!==void 0){let n=e.toLowerCase();return!(n==="0"||n==="false"||n==="off"||n==="no")}return typeof t=="boolean"?t:!0}async function ule(e,t,n,r){let o=await Zse(),i=new bR({rl:e.rl,history:o,statusLine:e.statusLine}),s=Aze(k.AFK_SUGGEST_GHOST,e.suggestGhostConfig),a;try{let{installSoftStop:l}=await vae(e,i,n,t,r,s,{getLoopStageBar:()=>a?.loopStageBar,getMascotBar:()=>a?.mascotBar});a=Nae(e,n);let c=a;e.slashCtx.suspendFooter=()=>{c.bgStatusBar.stop(),c.mascotBar.stop(),c.healthRail.stop(),e.statusLine.stop()},e.slashCtx.resumeFooter=()=>{e.statusLine.start(),c.healthRail.start(),c.mascotBar.start(),c.bgStatusBar.start(),c.bgStatusBar.redraw()},await cle(e,t,n,r,i,l,a,o),await e.resolveWorktreeDisposition?.(!0)}finally{n.tryAbortShellForeground=null,a?.shellPassthrough.drainOnExit(),a?.bgResultNotifier.dispose(),a?.healthRail.stop(),a?.loopStageBar.stop(),a?.mascotBar.stop(),a?.bgStatusBar.stop(),a?.verdictLedger.stop(),a?.contextPane.dispose();let l=c=>console.log(c);e.completionWriter.fn=l,e.completionWriter.idleFn=l,await i.dispose(),e.inputSurfaceRef&&(e.inputSurfaceRef.current=null)}}tf();fu();import{execFile as Cze}from"node:child_process";import{dirname as _ze,isAbsolute as Pze,resolve as Ize}from"node:path";import{promisify as Mze}from"node:util";var dle=Mze(Cze),Oze=3e3,$ze=new Set(["empty","orphaned-dir","orphaned-registration","dead-owner"]);async function Dze(){let t=(await dle("git",["rev-parse","--git-common-dir"])).stdout.trim();if(!t)throw new Error("Not in a git repository.");let n=Pze(t)?t:Ize(process.cwd(),t);return _ze(n)}async function ple(e){if(e?.disabled)return{ran:!1,removedCount:0,skippedReason:"disabled"};let t;try{t=await Dze()}catch{return{ran:!1,removedCount:0,skippedReason:"not-in-repo"}}let n,r=new Promise(o=>{n=setTimeout(()=>o("timeout"),Oze)});try{let o=rr({execFile:dle,repoRoot:t,dryRun:!1,scope:"interactive",bypassSoftLaunch:!0}),i=await Promise.race([o,r]);if(i==="timeout")return{ran:!1,removedCount:0,skippedReason:"timeout"};let s=i;return s.warnings.some(c=>c.toLowerCase().includes("contested"))?{ran:!1,removedCount:0,skippedReason:"lock-contested"}:{ran:!0,removedCount:s.candidates.filter(c=>$ze.has(c.verdict)&&s.removed.includes(c.path)).length}}catch{return{ran:!1,removedCount:0,skippedReason:"error"}}finally{n&&clearTimeout(n)}}gb();tf();import{promises as Lze}from"node:fs";import{dirname as Fze,join as gle}from"node:path";import{randomBytes as Nze}from"node:crypto";var Bze=["Generate a 2-4 word kebab-case slug describing this work request.","Rules:","- ASCII lowercase letters and digits only, separated by single hyphens","- 2 to 4 hyphen-separated words","- Maximum 30 characters total","- No prefix, no quotes, no punctuation other than hyphens","- Output ONLY the slug \u2014 no explanation, no preamble","Examples: fix-cleanup-race, add-telegram-allowlist, refactor-prompt-loader, debug-flaky-test"].join(`
|
|
2183
|
-
`),mle=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,YF=30,Uze=1024,jze=8e3,Hze="haiku";async function Wze(e,t){let n=e.trim();if(n.length===0)return t.onSkip?.("empty-message"),null;if(n.startsWith("/"))return t.onSkip?.("slash-command"),null;let r=zze(n,Uze),o=new AbortController,i=setTimeout(()=>o.abort(),t.timeoutMs??jze),s=t.signal?Vze([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,s):a=await Bc({token:t.token,model:t.model??Hze,system:Bze,user:r,maxTokens:32,signal:s})}catch(d){let p=d instanceof Error?d.message:String(d);return t.onSkip?.("slug-generator-error",p.slice(0,200)),null}finally{clearTimeout(i)}let l=Kze(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=Fze(t.worktreePath);return await Gze(l,c)}function Kze(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(mle.test(t)&&t.length<=YF)return t;let n=t.replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(n.length===0)return null;let r=n.split("-").filter(i=>i.length>0).slice(0,4);if(r.length<2)return null;let o=r[0];for(let i=1;i<r.length;i++){let s=`${o}-${r[i]}`;if(s.length>YF)break;o=s}return mle.test(o)?o:null}async function Gze(e,t){if(!await qze(gle(t,e)))return e;let n=Nze(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,YF-5)}-${n}`}async function qze(e){try{return await Lze.access(e),!0}catch{return!1}}function zze(e,t){let n=Buffer.from(e,"utf8");if(n.length<=t)return e;let r=t;for(;r>0&&n[r]!==void 0&&(n[r]&192)===128;)r--;return n.slice(0,r).toString("utf8")}function Vze(e){let t=AbortSignal.any;if(typeof t=="function")return t.call(AbortSignal,e);let n=new AbortController;for(let r of e){if(r.aborted)return n.abort(r.reason),n.signal;r.addEventListener("abort",()=>n.abort(r.reason),{once:!0})}return n.signal}async function hle(e){let t,n,r=gle(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await Wze(e.message,{token:e.token,...e.model!==void 0?{model:e.model}:{},...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},worktreePath:r,...e.signal!==void 0?{signal:e.signal}:{},...e.slugGenerator!==void 0?{slugGenerator:e.slugGenerator}:{},onSkip:(a,l)=>{t=a,n=l}}),i=t??"unknown",s=n;if(o!==null){let l=`${Tw(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return fle(e.session,c.path),{status:"created",path:c.path,branch:c.branch,slug:o}}catch(c){i="create-failed",s=(c instanceof Error?c.message:String(c)).slice(0,200)}}try{let a=await e.deferred.create(!0);return fle(e.session,a.path),{status:"created-fallback",path:a.path,branch:a.branch,reason:i,...s!==void 0?{detail:s}:{}}}catch(a){return{status:"failed",reason:a instanceof Error?a.message:String(a)}}}function fle(e,t){e&&e.setCwd(t),Jze(t)}function Jze(e){try{process.chdir(e)}catch{}}Tt();Mt();Ec();Mo();B();import{spawn as ble}from"child_process";import{existsSync as wle,mkdirSync as eVe,readFileSync as Sle,unlinkSync as yle,writeFileSync as vle}from"fs";import{get as tVe}from"https";import{join as kle}from"path";import{readFileSync as Yze}from"fs";import{dirname as Xze,join as Qze}from"path";import{fileURLToPath as Zze}from"url";function Do(){try{return"5.201.
|
|
2183
|
+
`),mle=/^[a-z0-9]+(-[a-z0-9]+){1,3}$/,YF=30,Uze=1024,jze=8e3,Hze="haiku";async function Wze(e,t){let n=e.trim();if(n.length===0)return t.onSkip?.("empty-message"),null;if(n.startsWith("/"))return t.onSkip?.("slash-command"),null;let r=zze(n,Uze),o=new AbortController,i=setTimeout(()=>o.abort(),t.timeoutMs??jze),s=t.signal?Vze([t.signal,o.signal]):o.signal,a;try{t.slugGenerator?a=await t.slugGenerator(r,s):a=await Bc({token:t.token,model:t.model??Hze,system:Bze,user:r,maxTokens:32,signal:s})}catch(d){let p=d instanceof Error?d.message:String(d);return t.onSkip?.("slug-generator-error",p.slice(0,200)),null}finally{clearTimeout(i)}let l=Kze(a);if(l===null)return t.onSkip?.("invalid-slug-output",a.slice(0,60)),null;let c=Fze(t.worktreePath);return await Gze(l,c)}function Kze(e){let t=e.trim().toLowerCase();if(t.length===0)return null;if(mle.test(t)&&t.length<=YF)return t;let n=t.replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(n.length===0)return null;let r=n.split("-").filter(i=>i.length>0).slice(0,4);if(r.length<2)return null;let o=r[0];for(let i=1;i<r.length;i++){let s=`${o}-${r[i]}`;if(s.length>YF)break;o=s}return mle.test(o)?o:null}async function Gze(e,t){if(!await qze(gle(t,e)))return e;let n=Nze(2).toString("hex");return`${e.split("-").slice(0,3).join("-").slice(0,YF-5)}-${n}`}async function qze(e){try{return await Lze.access(e),!0}catch{return!1}}function zze(e,t){let n=Buffer.from(e,"utf8");if(n.length<=t)return e;let r=t;for(;r>0&&n[r]!==void 0&&(n[r]&192)===128;)r--;return n.slice(0,r).toString("utf8")}function Vze(e){let t=AbortSignal.any;if(typeof t=="function")return t.call(AbortSignal,e);let n=new AbortController;for(let r of e){if(r.aborted)return n.abort(r.reason),n.signal;r.addEventListener("abort",()=>n.abort(r.reason),{once:!0})}return n.signal}async function hle(e){let t,n,r=gle(e.deferred.repoRoot,".afk-worktrees","unnamed"),o=await Wze(e.message,{token:e.token,...e.model!==void 0?{model:e.model}:{},...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{},worktreePath:r,...e.signal!==void 0?{signal:e.signal}:{},...e.slugGenerator!==void 0?{slugGenerator:e.slugGenerator}:{},onSkip:(a,l)=>{t=a,n=l}}),i=t??"unknown",s=n;if(o!==null){let l=`${Tw(e.branchPrefix)}${o}`;try{let c=await e.deferred.create(l);return fle(e.session,c.path),{status:"created",path:c.path,branch:c.branch,slug:o}}catch(c){i="create-failed",s=(c instanceof Error?c.message:String(c)).slice(0,200)}}try{let a=await e.deferred.create(!0);return fle(e.session,a.path),{status:"created-fallback",path:a.path,branch:a.branch,reason:i,...s!==void 0?{detail:s}:{}}}catch(a){return{status:"failed",reason:a instanceof Error?a.message:String(a)}}}function fle(e,t){e&&e.setCwd(t),Jze(t)}function Jze(e){try{process.chdir(e)}catch{}}Tt();Mt();Ec();Mo();B();import{spawn as ble}from"child_process";import{existsSync as wle,mkdirSync as eVe,readFileSync as Sle,unlinkSync as yle,writeFileSync as vle}from"fs";import{get as tVe}from"https";import{join as kle}from"path";import{readFileSync as Yze}from"fs";import{dirname as Xze,join as Qze}from"path";import{fileURLToPath as Zze}from"url";function Do(){try{return"5.201.1"}catch{}try{let e=Xze(Zze(import.meta.url));for(let t of["../../package.json","../package.json"])try{let n=JSON.parse(Yze(Qze(e,t),"utf-8"));if(typeof n.version=="string")return n.version}catch{}}catch{}return"0.0.0-unknown"}L();F();var nVe=64*1024,rVe=10800*1e3,oVe=800,iVe=3600*1e3,sVe="update-check.json",aVe="pending-update.json";function XF(){return kle(sa(),sVe)}function Gh(){return kle(sa(),aVe)}function QF(){let e=sa();wle(e)||eVe(e,{recursive:!0})}function Tle(e,t){let n=a=>a.split(/[-+]/,1)[0]??a,r=a=>a.includes("-"),o=n(e).split(".").map(Number),i=n(t).split(".").map(Number),s=Math.max(o.length,i.length);for(let a=0;a<s;a++){let l=o[a]??0,c=i[a]??0;if(c>l)return!0;if(c<l)return!1}return r(e)&&!r(t)}function Ele(){try{let e=Sle(XF(),"utf-8"),t=JSON.parse(e);if(typeof t.latestVersion=="string"&&typeof t.checkedAt=="number")return t}catch{}return null}function xle(){try{QF();let e=`
|
|
2184
2184
|
const https = require('https');
|
|
2185
2185
|
const fs = require('fs');
|
|
2186
2186
|
const url = 'https://registry.npmjs.org/agent-afk/latest';
|