agent-afk 5.85.1 → 5.85.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/provider.d.ts +2 -0
- package/dist/agent/trace/types.d.ts +1 -0
- package/dist/agent/types/message-types.d.ts +2 -0
- package/dist/cli/commands/interactive/tool-lane-format.d.ts +3 -1
- package/dist/cli.mjs +477 -477
- package/dist/index.mjs +5 -5
- package/dist/telegram.mjs +5 -5
- package/package.json +1 -1
package/dist/telegram.mjs
CHANGED
|
@@ -817,7 +817,7 @@ ${t}`:e:[{type:"text",text:e},...t]}var ia,db=h(()=>{"use strict";Eu();_u();le()
|
|
|
817
817
|
`),this.errored=!0,this.pendingLines=[],this.readyResolve?.(),this.readyResolve=null}}}_writeLine(e){if(!(!this.stream||this.errored))try{this.stream.write(e,n=>{n&&(process.stderr.write(`[afk] session-ledger: write error for ${this.sessionId}: ${String(n)}
|
|
818
818
|
`),this.errored=!0)})}catch(n){process.stderr.write(`[afk] session-ledger: write threw for ${this.sessionId}: ${String(n)}
|
|
819
819
|
`),this.errored=!0}}async close(e){if(!this.closed)return this.record({kind:"closed",...e!==void 0?{reason:e}:{}}),this.closed=!0,this.readyPromise&&await this.readyPromise,new Promise(n=>{if(!this.stream){n();return}this.stream.end(()=>n())})}};OO=250});var ma,Pb=h(()=>{"use strict";$();B();fa();ma=class{writer=null;initAttempted=!1;ensure(e){if(this.initAttempted||(this.initAttempted=!0,e.depth!==void 0||e.parentSessionId!==void 0)||v.AFK_SESSION_LEDGER_DISABLED==="1")return;let n=e.sessionId;if(!n)return;let r=new Jt(n);if(!r.active)return;this.writer=r;let o=e.getMetadata();r.record({kind:"meta",sessionId:n,model:o.model??e.fallbackModel,...o.cwd!==void 0?{cwd:o.cwd}:{},traceLabel:si(e.tracePath)})}recordUser(e){this.writer?.recordUser(e)}recordEvent(e){this.writer?.recordEvent(e)}recordElicitation(e,n){this.writer?.record({kind:"elicitation",reqId:e,request:n})}seal(e){let n=this.writer;return n?(this.writer=null,this.initAttempted=!1,n.close(e)):Promise.resolve()}}});var ga,Mb=h(()=>{"use strict";ga=class{pendingSeed;prePlanMode;modeBeforeDefault;recordModeTransition(e,n){if(e==="plan"){if(n!=="plan"){let r=n==="default"&&this.modeBeforeDefault!==void 0?this.modeBeforeDefault:n;this.prePlanMode=r==="autonomous"?void 0:r}}else e==="default"?this.modeBeforeDefault=n!=="default"&&n!=="plan"?n:void 0:this.modeBeforeDefault=void 0}clearModeBeforeDefault(){this.modeBeforeDefault=void 0}getPrePlanMode(){return this.prePlanMode}requestImplementSeed(e,n){this.pendingSeed={message:e,mode:n}}takeSeed(){let e=this.pendingSeed;return this.pendingSeed=void 0,e}}});function Ob(t,e,n){t&&(t.aborted?e.abort(t.reason):t.addEventListener("abort",()=>{e.signal.aborted||e.abort(t.reason)},{once:!0})),e.signal.addEventListener("abort",n,{once:!0})}function Db(t,e){let n=t.permissionMode??"default",r=t.persistSession??!0,o={sessionId:t.sessionId,configuredSessionId:t.sessionId,resume:t.resume,resumeSessionAt:t.resumeSessionAt,continue:t.continue,forkSession:t.forkSession,persistSession:r},s={sessionId:t.sessionId,model:e,permissionMode:n};return{sessionIdentity:o,metadata:s}}var Fb=h(()=>{"use strict"});var ha,Lb=h(()=>{"use strict";ha=class{initializationPromise;resolveInitialization;rejectInitialization;initializationSettled=!1;sessionMetadata;sessionIdentity;constructor(e,n){this.sessionIdentity=e,this.sessionMetadata=n,this.initializationPromise=new Promise((r,o)=>{this.resolveInitialization=r,this.rejectInitialization=o})}waitForInitialization(){return this.initializationPromise}getSessionIdentity(){return{...this.sessionIdentity,sessionId:this.getSessionId()}}getSessionMetadata(){return{...this.sessionMetadata,sessionId:this.getSessionId()}}getSessionId(){return this.sessionMetadata.sessionId??this.sessionIdentity.sessionId}updateSessionIdentity(e){e&&(this.sessionIdentity={...this.sessionIdentity,sessionId:e},this.sessionMetadata={...this.sessionMetadata,sessionId:e})}setSessionMetadata(e){this.sessionMetadata=e(this.sessionMetadata)}resolveInitializationIfNeeded(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}resolveInitializationOnce(){this.initializationSettled||(this.initializationSettled=!0,this.resolveInitialization(this.getSessionMetadata()))}rejectInitializationOnce(e){this.initializationSettled||(this.initializationSettled=!0,this.rejectInitialization(e))}isInitializationSettled(){return this.initializationSettled}}});function Nb(t){try{let e=JSON.parse(t);if(!Array.isArray(e))return null;let n=e.length;if(n===0)return"no results";let r=0,o=0;for(let a of e)if(a&&typeof a=="object"){let l=a.type;l==="fact"?r++:l==="procedure"&&o++}let s=`${n} result${n===1?"":"s"}`;if(r+o!==n)return s;let i=[];return r>0&&i.push(`${r} fact${r===1?"":"s"}`),o>0&&i.push(`${o} procedure${o===1?"":"s"}`),i.length===0?s:`${s} (${i.join(", ")})`}catch{return null}}function $b(t){try{let e=JSON.parse(t);if(!e||typeof e!="object")return null;let n=e;if(n.target==="hot"&&n.saved===!0){if(n.truncated===!0)return"hot memory saved (truncated to fit cap)";let r=n.usage;if(r&&typeof r=="object"){let o=r.pct;if(typeof o=="number")return`hot memory saved (${o}% of cap)`}return"hot memory saved"}if(n.target==="fact"){if(n.action==="remove")return n.removed===!0?"fact removed":"fact not found";if(n.action==="set"&&typeof n.id=="number")return`fact #${n.id} set`;if(n.action==="supersede"&&typeof n.id=="number"&&typeof n.supersedes=="number")return`fact #${n.id} supersedes #${n.supersedes}`}return null}catch{return null}}function Ub(t){try{let e=JSON.parse(t);if(!e||typeof e!="object")return null;let n=e;return typeof n.name=="string"&&n.written===!0?`wrote procedure '${n.name}'`:null}catch{return null}}var Bb=h(()=>{"use strict"});function xu(t){let e=t.trim();if(e.length===0)return null;let n=e[0];if(n!=="{"&&n!=="[")return null;let r=e[e.length-1];if(n==="{"&&r!=="}"||n==="["&&r!=="]")return null;let o;try{o=JSON.parse(e)}catch{return null}return Array.isArray(o)?Hb(DO(o)):o!==null&&typeof o=="object"?Hb(FO(o)):null}function DO(t){return t.length===0?"[empty array]":t.length===1?"[1 item]":`[${t.length} items]`}function FO(t){let e=Object.keys(t);if(e.length===0)return"{empty object}";let n=e.slice(0,4),r=e.length>4?", \u2026":"";return`{${n.join(", ")}${r}}`}function Hb(t){return t.length<=80?t:t.slice(0,79)+"\u2026"}var jb=h(()=>{"use strict"});function yr(t){return t.replace(Wb,"").replace(LO," ").trim()}function ht(t){return t.replace(Wb,"")}var Wb,LO,_n=h(()=>{"use strict";Wb=/\x1B\][^\x07\x1B]*(?:\x07|\x1B\\)|\x1B[P^_X][^\x1B]*\x1B\\|\x1B\[[0-?]*[ -/]*[@-~]|\x9B[0-?]*[ -/]*[@-~]|\x1B[@-_]/g,LO=/[\x00-\x1F\x7F-\x9F]/g});function Kb(t,e){if(!t)return null;let n=NO.get(t);if(!n)return null;try{let r=n(e);if(r===null)return null;let o=yr(r);return o.length>0?o:null}catch{return null}}var NO,Gb=h(()=>{"use strict";Bb();jb();_n();NO=new Map([["memory_search",Nb],["memory_update",$b],["procedure_write",Ub],["bash",xu],["Bash",xu]])});function $O(t){let e=/Output too large \((\d+(?:\.\d+)?)\s*(B|KB|MB|GB)\)\.\s*Full output saved to:\s*(\/[^\n]+)/,n=t.match(e);if(!n||!n[1]||!n[2]||!n[3])return null;let r=n[1],o=n[2],s=n[3],i=parseFloat(r),a=i;o==="KB"?a=i*1024:o==="MB"?a=i*1024*1024:o==="GB"&&(a=i*1024*1024*1024);let l=r;return i%1===0&&(l=String(Math.floor(i))),l+=o,{sizeLabel:l,sizeBytes:Math.round(a),absolutePath:s.trim()}}function UO(t){if(t<1024)return`${t}B`;let e=t/1024;if(e<1024)return e%1===0?`${Math.floor(e)}KB`:`${e.toFixed(1)}KB`;let n=e/1024;if(n<1024)return n%1===0?`${Math.floor(n)}MB`:`${n.toFixed(1)}MB`;let r=n/1024;return r%1===0?`${Math.floor(r)}GB`:`${r.toFixed(1)}GB`}function BO(t){let e=Buffer.byteLength(t,"utf8"),n=UO(e),r=t.split(`
|
|
820
|
-
`);if(r.length<=1&&t.length<=80)return{content:t,truncated:!1,sizeBytes:e,sizeLabel:n};if(r.length<=1)return t.length<=80?{content:t,truncated:!1,sizeBytes:e,sizeLabel:n}:{content:t.substring(0,80)+"\u2026",truncated:!0,sizeBytes:e,sizeLabel:n};if(t.length<=80)return{content:t,truncated:!1,sizeBytes:e,sizeLabel:n};let o=r[0]??"",s=o;return o.length>80&&(s=o.substring(0,80)+"\u2026"),{content:s+`\u2026+${r.length} lines`,truncated:!0,lineCount:r.length,sizeBytes:e,sizeLabel:n}}function HO(t,e){let n={...t.raw??{}};return t.inputTokens!==void 0&&(n.input_tokens=t.inputTokens),t.outputTokens!==void 0&&(n.output_tokens=t.outputTokens),t.cachedInputTokens!==void 0&&(n.cache_read_input_tokens=t.cachedInputTokens),t.cacheCreationTokens!==void 0&&(n.cache_creation_input_tokens=t.cacheCreationTokens),t.totalTokens!==void 0&&(n.total_tokens=t.totalTokens),t.contextWindowTokens!==void 0&&(n.context_window_tokens=t.contextWindowTokens),{sessionId:e,stopReason:t.stopReason??void 0,resultSubtype:t.resultSubtype,durationMs:t.durationMs,durationApiMs:t.durationApiMs,totalCostUsd:t.totalCostUsd,isError:t.isError,usage:Object.keys(n).length>0?n:void 0,modelUsage:t.modelUsage,permissionDenials:t.permissionDenials,errors:t.errors}}function jO(t){let e=t.isError===!0?null:Kb(t.toolName,t.content),n=e!==null?{display:e}:{},r=typeof t.batchIndex=="number"&&typeof t.batchSize=="number"?{batchIndex:t.batchIndex,batchSize:t.batchSize}:{},o=$O(t.content);if(
|
|
820
|
+
`);if(r.length<=1&&t.length<=80)return{content:t,truncated:!1,sizeBytes:e,sizeLabel:n};if(r.length<=1)return t.length<=80?{content:t,truncated:!1,sizeBytes:e,sizeLabel:n}:{content:t.substring(0,80)+"\u2026",truncated:!0,sizeBytes:e,sizeLabel:n};if(t.length<=80)return{content:t,truncated:!1,sizeBytes:e,sizeLabel:n};let o=r[0]??"",s=o;return o.length>80&&(s=o.substring(0,80)+"\u2026"),{content:s+`\u2026+${r.length} lines`,truncated:!0,lineCount:r.length,sizeBytes:e,sizeLabel:n}}function HO(t,e){let n={...t.raw??{}};return t.inputTokens!==void 0&&(n.input_tokens=t.inputTokens),t.outputTokens!==void 0&&(n.output_tokens=t.outputTokens),t.cachedInputTokens!==void 0&&(n.cache_read_input_tokens=t.cachedInputTokens),t.cacheCreationTokens!==void 0&&(n.cache_creation_input_tokens=t.cacheCreationTokens),t.totalTokens!==void 0&&(n.total_tokens=t.totalTokens),t.contextWindowTokens!==void 0&&(n.context_window_tokens=t.contextWindowTokens),{sessionId:e,stopReason:t.stopReason??void 0,resultSubtype:t.resultSubtype,durationMs:t.durationMs,durationApiMs:t.durationApiMs,totalCostUsd:t.totalCostUsd,isError:t.isError,usage:Object.keys(n).length>0?n:void 0,modelUsage:t.modelUsage,permissionDenials:t.permissionDenials,errors:t.errors}}function jO(t){let e=t.isError===!0?null:Kb(t.toolName,t.content),n=e!==null?{display:e}:{},r=typeof t.batchIndex=="number"&&typeof t.batchSize=="number"?{batchIndex:t.batchIndex,batchSize:t.batchSize}:{},o=t.failureClass?{failureClass:t.failureClass}:{},s=$O(t.content);if(s)return{type:"chunk",chunk:{type:"tool_result",toolUseId:t.toolUseId,content:`Output persisted (${s.sizeLabel}) \u2192 ${s.absolutePath}`,isError:t.isError===!0,persistedPath:s.absolutePath,sizeBytes:s.sizeBytes,sizeLabel:s.sizeLabel,...n,...r,...o}};let{content:i,lineCount:a,sizeBytes:l,sizeLabel:c}=BO(t.content);return{type:"chunk",chunk:{type:"tool_result",toolUseId:t.toolUseId,content:i,isError:t.isError===!0,sizeBytes:l,sizeLabel:c,...t.truncated===!0&&{truncated:!0},...a!==void 0&&{lineCount:a},...n,...r,...o}}}function Cu(t,e){switch(t.type){case"session.init":{let n=t.info;return e.setSessionMetadata(r=>({...r,sessionId:n.sessionId,model:n.model??r.model,...n.permissionMode!==void 0?{permissionMode:n.permissionMode}:{},...n.cwd!==void 0?{cwd:n.cwd}:{},tools:n.tools?[...n.tools]:r.tools,slashCommands:n.slashCommands?[...n.slashCommands]:r.slashCommands,skills:n.skills?[...n.skills]:r.skills,plugins:n.plugins?n.plugins.map(o=>({...o})):r.plugins,mcpServers:n.mcpServers?n.mcpServers.map(o=>({...o})):r.mcpServers,...n.apiKeySource!==void 0?{apiKeySource:n.apiKeySource}:{},...n.version!==void 0?{claudeCodeVersion:n.version}:{},...n.outputStyle!==void 0?{outputStyle:n.outputStyle}:{}})),e.updateSessionIdentity(n.sessionId),e.resolveInitialization(),null}case"session.status":return e.setSessionMetadata(n=>({...n,sessionId:t.sessionId,...t.permissionMode!==void 0?{permissionMode:t.permissionMode}:{permissionMode:n.permissionMode},...t.status!==void 0?{status:t.status}:{}})),null;case"delta.text":return{type:"chunk",chunk:{type:"content",content:t.text,metadata:{eventType:"delta",deltaType:"text_delta"}}};case"delta.reasoning":return{type:"chunk",chunk:{type:"thinking",content:t.text,metadata:{eventType:"delta",deltaType:"thinking_delta"}}};case"assistant.message":if(t.sessionId&&e.updateSessionIdentity(t.sessionId),t.text){let n={role:"assistant",content:t.text,timestamp:new Date};return e.conversationHistory.push(n),{type:"message",message:n}}return null;case"tool.use.start":return{type:"chunk",chunk:{type:"tool_use_detail",toolUseId:t.toolUseId,toolName:t.toolName,toolInput:t.toolInput,toolInputRaw:t.toolInputRaw}};case"tool.use":return{type:"chunk",chunk:{type:"tool_use",content:t.summary,metadata:{eventType:"tool_use_summary",precedingToolUseIds:t.toolUseIds}}};case"tool.output":return t.isError!==!0&&t.toolName&&(e._successfulToolNames??=[]).push(t.toolName),jO(t);case"tool.diff":return{type:"chunk",chunk:{type:"tool_diff",toolUseId:t.toolUseId,diff:t.diff}};case"progress":return{type:"progress",progress:{taskId:t.progress.taskId,description:t.progress.description,...t.progress.summary!==void 0?{summary:t.progress.summary}:{},...t.progress.lastToolName!==void 0?{lastToolName:t.progress.lastToolName}:{},totalTokens:t.progress.totalTokens,toolUses:t.progress.toolUses,durationMs:t.progress.durationMs}};case"suggestion":return{type:"suggestion",suggestion:t.suggestion};case"turn.completed":{let n=HO(t.usage,t.sessionId??e.getSessionMetadata().sessionId);e._successfulToolNames!==void 0&&e._successfulToolNames.length>0&&(n.successfulToolNames=[...e._successfulToolNames]),e.setLastResponseMetadata(n);for(let r=e.conversationHistory.length-1;r>=0;r--){let o=e.conversationHistory[r];if(o?.role==="assistant"){o.metadata=n;break}}if(e.maxBudgetUsd!==void 0&&e.abortBudget!==void 0&&typeof n.totalCostUsd=="number"&&(e._runningCostUsd=(e._runningCostUsd??0)+n.totalCostUsd,e._runningCostUsd>=e.maxBudgetUsd)){nb(e.traceWriter,{kind:"monetary",runningCostUsd:e._runningCostUsd,maxBudgetUsd:e.maxBudgetUsd,lastTurnCostUsd:n.totalCostUsd});let r=new Zn(e._runningCostUsd,e.maxBudgetUsd);return e.abortBudget(r.message),{type:"error",error:r}}return{type:"done",metadata:n}}case"error":return{type:"error",error:t.error};case"paused":return{type:"paused",reason:t.reason,...t.resetsAt!==void 0?{resetsAt:t.resetsAt}:{},...t.accountId!==void 0?{accountId:t.accountId}:{},...t.autoResume!==void 0?{autoResume:t.autoResume}:{}};case"resumed":return{type:"resumed",hotSwapped:t.hotSwapped,...t.accountId!==void 0?{accountId:t.accountId}:{}};case"stream.retry":return{type:"stream_retry"};case"rate_limit":return{type:"rate_limit",...t.retryAfterMs!==void 0?{retryAfterMs:t.retryAfterMs}:{}};default:return null}}var qb=h(()=>{"use strict";pe();Q();Gb()});import{stat as WO,readFile as KO,writeFile as GO,rename as qO,unlink as zO}from"node:fs/promises";async function Vb(t,{maxBytes:e,keepTailLines:n}){let r={trimmed:!1,removedLines:0},o;try{if((await WO(t)).size<=e)return r;let a=(await KO(t,"utf8")).split(`
|
|
821
821
|
`);if(a.length>0&&a[a.length-1]===""&&a.pop(),a.length<=n)return r;let l=a.slice(a.length-n),c=a.length-l.length;return o=`${t}.tmp-${process.pid}-${Math.random().toString(36).slice(2,8)}`,await GO(o,l.join(`
|
|
822
822
|
`)+`
|
|
823
823
|
`,{mode:384}),await qO(o,t),o=void 0,{trimmed:!0,removedLines:c}}catch{if(o!==void 0)try{await zO(o)}catch{}return r}}var zb,Jb,Yb=h(()=>{"use strict";zb=5*1024*1024,Jb=5e3});import{z as JO}from"zod";var An,Xb=h(()=>{"use strict";le();cb();pe();Q();ke();db();xe();Tu();mb();pe();Tb();Ru();Eu();Pb();Mb();qe();fn();yn();Ge();_u();Fb();Lb();qb();B();Yb();An=class t{static claimedTraceWriters=new WeakSet;config;planExit=new ga;currentState="idle";providerQuery;providerIterator;conversationHistory=[];turnCount=0;inboundMessageCount=0;pendingFrameworkContext=[];lastResponseMetadata=null;initPromise=null;inputStream;abortController;_hookRegistry;sessionEndDispatched=!1;ownsTraceSeal;stateManager;sessionRunningCostUsd=0;sessionRunningTokens={input:0,output:0,cacheRead:0,cacheCreation:0};lastStopReason;maxTurnsHit=!1;hookBlocked=!1;sawProviderError=!1;sessionStartedAt=Date.now();subagentCompletedCount=0;subagentRunningTokens={input:0,output:0,cacheRead:0,cacheCreation:0};subagentRunningCostUsd=0;ledger=new ma;constructor(e){this.ownsTraceSeal=e.traceWriter!==void 0&&e.isSubagentFork!==!0&&!t.claimedTraceWriters.has(e.traceWriter),this.ownsTraceSeal&&t.claimedTraceWriters.add(e.traceWriter),this.config=e.parentSessionId===void 0&&e.planExitControls===void 0?{...e,planExitControls:{setPermissionMode:r=>this.setPermissionMode(r),requestImplementSeed:(r,o)=>this.planExit.requestImplementSeed(r,o),getPrePlanMode:()=>this.planExit.getPrePlanMode()}}:e,this.abortController=new AbortController,this._hookRegistry=e.hookRegistry,Ob(e.abortSignal,this.abortController,()=>{this.onAbort()});let n=String(e.model);K(e.traceWriter,{phase:"session_init_start",model:n,resolvedModel:Se(e.model)??n,origin:Ht(e.surface),actor:hi(e.parentSessionId)}),this.initSdkLifecycle(),this.config.parentSessionId===void 0&&Vb(ri(),{maxBytes:zb,keepTailLines:Jb})}initSdkLifecycle(){this.config.models&&Mi(this.config.models),sa(this.config);let e=Se(this.config.model)??this.config.model,{sessionIdentity:n,metadata:r}=Db(this.config,e);this.stateManager=new ha(n,r),this.inputStream=new mr(()=>this.sessionId);let o=this.inputStream.createIterable();if(this.config.provider)O(`\u{1F7E2} AgentSession: Creating query session via injected provider=${this.config.provider.name}`),this.providerQuery=this.config.provider.query({prompt:o,config:this.config});else{O("\u{1F7E2} AgentSession: Creating query session via ProviderRouter");let i=this.config.providerFactory?this.config.providerFactory:a=>Qb(a,void 0,{customTools:this.config.customTools,canUseTool:this.config.canUseTool});this.providerQuery=new ia({prompt:o,config:this.config},{resolveProvider:i,providerNameForModel:a=>V(a),resolveApiKey:a=>se(a)})}this.conversationHistory=[],this.turnCount=0,this.lastResponseMetadata=null,this.sessionRunningCostUsd=0,this.sessionRunningTokens={input:0,output:0,cacheRead:0,cacheCreation:0},this.lastStopReason=void 0,this.maxTurnsHit=!1,this.hookBlocked=!1,this.sawProviderError=!1,this.sessionEndDispatched=!1,this.currentState="idle",this.subagentCompletedCount=0,this.subagentRunningTokens={input:0,output:0,cacheRead:0,cacheCreation:0},this.subagentRunningCostUsd=0,this.pendingFrameworkContext=[];let s=this.providerQuery;this.providerIterator=s[Symbol.asyncIterator](),this.initPromise=this.pullInitialization()}async pullInitialization(){try{let e=await pb(this._hookRegistry,{event:"SessionStart",sessionId:this.sessionId,parentSessionId:this.config.parentSessionId},{signal:this.abortController.signal,...this.config.traceWriter?{traceWriter:this.config.traceWriter}:{}});for(e&&this.config.parentSessionId===void 0&&this.queueFrameworkContext(e);;){let n=await this.providerIterator.next();if(n.done){this.stateManager.resolveInitializationIfNeeded();return}let r=n.value,o=Cu(r,this.buildTransformDeps());if(r.type==="session.init"){await K(this.config.traceWriter,{phase:"session_init_done",durationMs:Date.now()-this.sessionStartedAt});return}if(o&&o.type==="error"){this.sawProviderError=!0;return}}}catch(e){let n=e instanceof Error?e:new Error(String(e));n instanceof Z&&(this.hookBlocked=!0),this.stateManager.isInitializationSettled()||this.stateManager.rejectInitializationOnce(n),await this.dispatchSessionEndOnce("error").catch(()=>{})}}buildTransformDeps(){return{_successfulToolNames:[],conversationHistory:this.conversationHistory,getSessionMetadata:()=>this.stateManager.getSessionMetadata(),setSessionMetadata:e=>this.stateManager.setSessionMetadata(e),updateSessionIdentity:e=>this.stateManager.updateSessionIdentity(e),resolveInitialization:()=>this.stateManager.resolveInitializationOnce(),setLastResponseMetadata:e=>{this.lastResponseMetadata=e,typeof e.totalCostUsd=="number"&&Number.isFinite(e.totalCostUsd)&&(this.sessionRunningCostUsd+=e.totalCostUsd);let n=e.usage;if(n&&typeof n=="object"){let r=n,o=(s,i)=>{let a=r[s];typeof a=="number"&&Number.isFinite(a)&&(this.sessionRunningTokens[i]+=a)};o("input_tokens","input"),o("output_tokens","output"),o("cache_read_input_tokens","cacheRead"),o("cache_creation_input_tokens","cacheCreation")}typeof e.stopReason=="string"&&(this.lastStopReason=e.stopReason)},maxBudgetUsd:this.config.maxBudgetUsd,abortBudget:e=>{this.abortController.signal.aborted||this.abortController.abort(e)},...this.config.traceWriter?{traceWriter:this.config.traceWriter}:{}}}get state(){return this.currentState}get sessionId(){return this.stateManager.getSessionId()}get cwd(){return this.config.cwd}get abortSignal(){return this.abortController.signal}get hookRegistry(){return this._hookRegistry}abort(e){if(e==="closed"||e.startsWith("Budget ")||e.includes("timed out"))throw new Error(`AgentSession.abort: reserved reason "${e}" (use a caller-specific string like 'sigint')`);this.abortController.signal.aborted||this.abortController.abort(e)}async sendMessage(e,n={}){this.assertCanSend();let r=this.config.timeoutMs??ub,o=async()=>{let s=null,i="";this.currentState=n.stream?"streaming":"processing";for await(let a of this.sendMessageStreamInternal(e)){if(a.type==="chunk"&&a.chunk.type==="content"&&(i+=a.chunk.content),a.type==="message"&&a.message.role==="assistant"&&(s=a.message),a.type==="error")throw a.error;if(a.type==="done"){if(s)return{...s,metadata:a.metadata};if(i)return{role:"assistant",content:i,metadata:a.metadata,timestamp:new Date}}}if(s)return s;if(i)return{role:"assistant",content:i,timestamp:new Date};throw new Error("No assistant response received")};try{return await aa(o(),r,{controller:this.abortController,label:this.sessionId??"session"})}finally{this.currentState==="processing"&&(this.currentState="idle")}}async sendMessageStructured(e,n,r={}){let{maxRetries:o=2,injectSchemaPrompt:s=!0,...i}=r,a=s?"\n\nRespond with ONLY a JSON object (optionally in a ```json fence) that conforms to this JSON Schema:\n```json\n"+JSON.stringify(JO.toJSONSchema(n,{target:"openapi-3.0"}))+"\n```":"",l="";for(let c=0;c<=o;c++){let d=c===0?e+a:`Your previous response did not match the required JSON schema.
|
|
@@ -872,7 +872,7 @@ Retrying it verbatim will fail the same way. Fix the underlying cause, change th
|
|
|
872
872
|
|
|
873
873
|
`).trim()}function eL(t){return(t?.textContent??"").replace(/\s+/g," ").trim().length}async function oS(t,e){let{JSDOM:n,Readability:r,turndown:o}=await ZF(),i=new n(t,{url:e}).window.document,a=(i.title??"").trim(),l=(()=>{try{let p=i.cloneNode(!0);return new r(p).parse()}catch{return null}})();if(l&&typeof l.content=="string"&&l.content.trim().length>0){let p=rS(o.turndown(l.content)),f=(l.title??"").trim()||a,m=typeof l.length=="number"&&l.length>0?l.length:(l.textContent??"").replace(/\s+/g," ").trim().length;return{title:f,markdown:p,textLength:m,usedFallback:!1}}let c=i.body,d=c?.innerHTML??"",u=rS(o.turndown(d));return{title:a,markdown:u,textLength:eL(c),usedFallback:!0}}var cp,sS=h(()=>{"use strict";cp=null});function nL(t,e){return new Promise((n,r)=>{if(e?.aborted){r(e.reason??new Error("aborted"));return}let o=()=>{clearTimeout(s),r(e?.reason??new Error("aborted"))},s=setTimeout(()=>{e?.removeEventListener("abort",o),n()},t);e?.addEventListener("abort",o,{once:!0})})}function iS(t,e,n){let r=Math.min(e*2**t,n);return Math.round(Math.random()*r)}function rL(t,e){let n=t.headers.get("retry-after");if(n===null)return null;let r=Number(n.trim());return!Number.isFinite(r)||r<0?null:Math.min(r*1e3,e)}async function aS(t,e,n={},r={}){let o=r.retries??3,s=r.baseDelayMs??500,i=r.maxDelayMs??1e4,a=r.sleep??nL,l=n.signal??void 0,c;for(let d=0;d<=o;d++){if(l?.aborted)throw l.reason??new Error("aborted");try{let u=await t(e,n);if(!tL.has(u.status)||d===o)return u;let p=rL(u,i)??iS(d,s,i);O("[web/retryFetch] retrying",{url:e,attempt:d,status:u.status,waitMs:p}),await u.body?.cancel().catch(()=>{}),await a(p,l)}catch(u){if(l?.aborted||(c=u,d===o))throw u;let p=iS(d,s,i);O("[web/retryFetch] retrying after error",{url:e,attempt:d,waitMs:p}),await a(p,l)}}throw c??new Error("retryFetch: exhausted without a result")}var tL,lS=h(()=>{"use strict";le();tL=new Set([429,502,503,504])});import{BlockList as oL,isIP as up}from"node:net";import{lookup as sL}from"node:dns/promises";import{Agent as iL}from"undici";function dS(){let t=v.AFK_WEB_ALLOW_PRIVATE_HOSTS?.trim().toLowerCase();return t==="1"||t==="true"}function dL(t){return t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):t}function dp(t){let e=up(t);return e===0?!1:cL.check(t,e===4?"ipv4":"ipv6")}async function uS(t){return sL(t,{all:!0,verbatim:!0})}async function pp(t,e={}){if(e.allowPrivateHosts??dS())return{allowed:!0};let n;try{n=new URL(t)}catch{return{allowed:!1,reason:`"${t}" 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=dL(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(up(r)!==0)return dp(r)?{allowed:!1,reason:o(r,r)}:{allowed:!0};let s=e.lookupFn??uS,i;try{i=await s(r)}catch{return{allowed:!0}}for(let a of i)if(dp(a.address))return{allowed:!1,reason:o(a.address,`${r} (resolved)`)};return{allowed:!0}}async function Bo(t,e={}){let n=await pp(t,e);if(!n.allowed)throw new lt(n.reason)}async function Na(t,e,n={},r={}){let o={...r.lookupFn!==void 0?{lookupFn:r.lookupFn}:{},...r.allowPrivateHosts!==void 0?{allowPrivateHosts:r.allowPrivateHosts}:{}},s=e;for(let i=0;i<=cS;i++){await Bo(s,o);let a={...n,redirect:"manual",...t===globalThis.fetch&&!(r.allowPrivateHosts??dS())?{dispatcher:uL}:{}},l=await aS(t,s,a,r.retry??{});if(!pL.has(l.status))return l;let c=l.headers.get("location");if(c===null||c.trim()==="")return l;let d;try{d=new URL(c,l.url||s).toString()}catch{return l}await l.body?.cancel().catch(()=>{}),s=d}throw new lt(`too many redirects (>${cS}) starting from ${e}`)}var aL,lL,cL,lt,uL,cS,pL,fp=h(()=>{"use strict";$();lS();aL=[["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]],lL=[["::",96],["64:ff9b::",96],["fc00::",7],["fe80::",10]],cL=(()=>{let t=new oL;for(let[e,n]of aL)t.addSubnet(e,n,"ipv4");for(let[e,n]of lL)t.addSubnet(e,n,"ipv6");return t})(),lt=class extends Error{constructor(e){super(e),this.name="EgressBlockedError"}};uL=new iL({connect:{lookup(t,e,n){uS(t).then(r=>{let o=r.find(i=>dp(i.address));if(o!==void 0){n(new lt(`refusing to connect to ${t} (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 s=r[0];if(s===void 0){n(new Error(`DNS lookup returned no addresses for ${t}`),"",0);return}n(null,s.address,up(s.address))},r=>n(r,"",0))}}});cS=20,pL=new Set([301,302,303,307,308])});import{readFileSync as fL}from"node:fs";import{join as mL}from"path";function gL(t){let n=t.replace(/[.+?()[\]{}/\\^$|]/g,"\\$&").replace(/\*/g,"[^.]*");return new RegExp(`^${n}$`,"i")}function pS(t,e){return gL(e).test(t)}function bL(t,e){if(t!==void 0){let n=t.trim().toLowerCase();if(n==="1"||n==="true"||n==="yes")return!0;if(n==="0"||n==="false"||n==="no")return!1}if(e!==void 0){if(hL.has(e))return!0;if(yL.has(e))return!1}return!1}function fS(t){return t===void 0||t.trim()===""?[]:t.split(",").map(e=>e.trim().toLowerCase()).filter(e=>e.length>0)}function wL(t){if(t===void 0||t===""||t==="playwright")return"playwright";throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${t}`)}function mS(t){let e=t===void 0||t.trim()===""?"default":t.trim();return hd(e),e}function SL(t){if(t===void 0)return!1;let e=t.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function vL(t){try{return fL(t,"utf8")}catch(e){if(e.code==="ENOENT")return;throw e}}function kL(t,e){let n={...t};if(typeof e.headless=="boolean"&&(n.headless=e.headless),Array.isArray(e.allowedDomains)&&(n.allowedDomains=e.allowedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),Array.isArray(e.blockedDomains)&&(n.blockedDomains=e.blockedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),typeof e.domSnapshots=="boolean"&&(n.domSnapshots=e.domSnapshots),e.backend==="playwright")n.backend="playwright";else if(e.backend!==void 0)throw new Error(`AFK_BROWSER_BACKEND: only "playwright" is supported in Phase 1, got: ${String(e.backend)}`);return typeof e.defaultProfile=="string"&&(n.defaultProfile=mS(e.defaultProfile)),n}function gS(t){let e=t?.env??v,n=t?.readFileSync??vL,r=t?.surface??e.AGENT_SURFACE,o=bL(e.AFK_BROWSER_HEADLESS,r),s=fS(e.AFK_BROWSER_ALLOWED_DOMAINS),i=fS(e.AFK_BROWSER_BLOCKED_DOMAINS),a=SL(e.AFK_BROWSER_DOM_SNAPSHOTS),l=wL(e.AFK_BROWSER_BACKEND),c=mS(e.AFK_BROWSER_DEFAULT_PROFILE),d={headless:o,allowedDomains:s,blockedDomains:i,domSnapshots:a,backend:l,configPath:null,defaultProfile:c},u=e.AFK_BROWSER_CONFIG,p=u!==void 0&&u.trim()!==""?u.trim():mL(Tt(),"browser.json"),f=n(p);if(f===void 0)return d;let m;try{m=JSON.parse(f)}catch(y){throw new Error(`Failed to parse browser config at ${p}: ${String(y)}`)}if(typeof m!="object"||m===null||Array.isArray(m))throw new Error(`Browser config at ${p} must be a JSON object`);let g=kL(d,m);return g.configPath=p,g}function $a(t,e){let n;try{n=new URL(t).hostname.toLowerCase()}catch{return{allowed:!1,reason:`invalid URL: ${t}`}}for(let r of e.blockedDomains)if(pS(n,r))return{allowed:!1,reason:`blocked by AFK_BROWSER_BLOCKED_DOMAINS: ${r}`};return e.allowedDomains.length>0&&!e.allowedDomains.some(o=>pS(n,o))?{allowed:!1,reason:"not in AFK_BROWSER_ALLOWED_DOMAINS"}:{allowed:!0}}var hL,yL,Ua=h(()=>{"use strict";$();B();hL=new Set(["daemon","subagent","telegram","afk"]),yL=new Set(["repl","interactive","cli"])});import{existsSync as EL,readFileSync as _L}from"node:fs";import{createRequire as AL}from"node:module";import{dirname as TL,join as RL}from"node:path";function bS(t){if(typeof t=="string")return t;let e=[],n=t;for(let r=0;r<CL&&n instanceof Error;r++)e.push(n.message),n=n.cause;return e.length>0?e.join(" | "):String(t)}function Me(t){let e=bS(t);return yS.some(n=>e.includes(n))}function IL(){try{let e=AL(import.meta.url).resolve("playwright/package.json"),n=JSON.parse(_L(e,"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 s=RL(TL(e),o);return EL(s)?`node ${/\s/.test(s)?`"${s}"`:s} install chromium`:void 0}catch{return}}function Ho(){return hS??=IL()??xL,hS}function mp(t){return t.includes("install chromium")}function et(t,e){let n=bS(t),r=e?.latched===!0?` ${PL}`:"";if(n.includes("Executable doesn't exist")){let o="";return e?.headless===!0?o=" This launch was headless, which needs the `chromium_headless_shell-*` build.":e?.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: ${Ho()}.${o}${r}`}return`browser tools require the optional \`playwright\` peer dependency. Install via: pnpm add playwright (then ${Ho()}). Or pick a different tool.${r}`}function gp(t,e,n=!1){if(!Me(t))return t;let r=t instanceof Error?t.message:String(t);return new Error(`${r}
|
|
874
874
|
|
|
875
|
-
${et(t,{headless:e,latched:n})}`,{cause:t})}var yS,xL,CL,hS,PL,hp=h(()=>{"use strict";yS=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],xL="pnpm exec playwright install chromium",CL=4;PL="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 Ln from"node:fs";import Ba from"node:path";import{randomBytes as ML}from"node:crypto";import{chromium as OL}from"playwright";function DL(){try{return"5.85.1"}catch{}try{let t=Ba.resolve(import.meta.dirname,"../../../package.json"),e=Ln.readFileSync(t,"utf8"),n=JSON.parse(e);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var FL,Ha,wS=h(()=>{"use strict";hp();B();le();FL=DL(),Ha=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(e){this.config=e}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(e){this.launchFailure={error:e}}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=OL.launch({headless:this.config.headless}).then(e=>(this.browser=e,this.launchPromise=void 0,this.clearLaunchFailure(),e)).catch(e=>{this.launchPromise=void 0;let n=gp(e,this.config.headless,!0);throw this.latchLaunchFailure(n),n}),this.launchPromise)}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(e){let n=this.sessions.get(e);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),s=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),i={context:s,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(e,i),s}async ensurePage(e){let n=this.sessions.get(e);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(e);let r=this.sessions.get(e);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${e}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",s=>{s.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",s=>{s.isNavigationRequest()&&s.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",s=>{s.frame()===o.mainFrame()&&s.request().isNavigationRequest()&&(r.lastHttpStatus=s.status())}),o.on("dialog",s=>{r.openDialog=s}),o}getPage(e){return this.sessions.get(e)?.page}async renderHtml(e,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),s;n.requestGuard!==void 0&&await o.route("**/*",async a=>{try{await n.requestGuard(a.request().url()),await a.continue()}catch(l){s=l,await a.abort("blockedbyclient")}});let i=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",i,{once:!0});try{let a=await o.newPage(),l;try{l=await a.goto(e,{timeout:n.timeoutMs,waitUntil:n.waitUntil})}catch(p){throw s??p}if(s!==void 0)throw s;let c=await a.content();if(s!==void 0)throw s;let d=a.url(),u=l!==null?l.status():null;return{html:c,finalUrl:d,httpStatus:u}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",i),await o.close().catch(()=>{})}}getConsoleErrorCount(e){return this.sessions.get(e)?.consoleErrors??0}getLastHttpStatus(e){return this.sessions.get(e)?.lastHttpStatus??null}hasOpenDialog(e){return this.sessions.get(e)?.openDialog!==void 0}async dismissDialog(e,n=!0){let r=this.sessions.get(e);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(e){this.clearLaunchFailure();let n=this.sessions.get(e);n!==void 0&&(this.sessions.delete(e),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.clearLaunchFailure(),this.shutdownComplete)return;this.shutdownComplete=!0;let e=[...this.sessions.keys()];if(await Promise.all(e.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${FL}`}}loadStorageState(e){let n=yd(e);try{if(!Ln.existsSync(n))return;let r=JSON.parse(Ln.readFileSync(n,"utf8"));return O("[browser/vault] restored session",{profile:e,file:n}),r}catch(r){O("[browser/vault] ignoring unreadable vault",{profile:e,file:n,err:r});return}}async saveStorageState(e,n){try{let r=yd(e);if(!Ln.existsSync(r))return;let o=await n.storageState(),s=Ba.join(Ba.dirname(r),`.${Ba.basename(r)}.${process.pid}.${ML(4).toString("hex")}.tmp`);Ln.writeFileSync(s,JSON.stringify(o),{mode:384}),Ln.chmodSync(s,384),Ln.renameSync(s,r),O("[browser/vault] saved session",{profile:e,file:r})}catch(r){O("[browser/vault] save failed",{profile:e,err:r})}}}});import{createHash as LL}from"crypto";function SS(t){return!!(t.role==="textbox"&&t.kind==="password"||t.label&&NL.test(t.label))}function vS(t){return LL("sha256").update(t,"utf8").digest("hex").slice(0,8)}function kS(t){let e=t.replace(/\s+/g," ").trim();return e.length<=80?e:e.slice(0,77)+"..."}var NL,ja=h(()=>{"use strict";NL=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as $L}from"node:crypto";function UL(t){return t?t.replace(/\s+/g," ").trim().slice(0,200):""}function BL(t,e,n){return`el_${$L("sha256").update(`${t}:${e}:${n}`).digest("hex").slice(0,6)}`}function HL(t){let e=t.replace(/\s+/g," ").trim(),n=4e3;return e.length<=n?e:e.slice(0,n)+"\u2026[truncated]"}function ES(t){return t.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function AS(t,e){let n=t.role??"",r=t.name??"";_S.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&e.push(t);for(let s of t.children??[])AS(s,e)}async function jL(t){return t.evaluate(e=>{let n=Array.from(document.querySelectorAll(e)),r=[];for(let o of n){let s=o.getBoundingClientRect(),i=o;if(s.width===0&&s.height===0){let d=window.getComputedStyle(i);if(d.display==="none"||d.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),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(s.left),y:Math.round(s.top),w:Math.round(s.width),h:Math.round(s.height)}})}return r},TS).catch(()=>[])}async function WL(t){return t.evaluate(e=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(e)),o=[];for(let s of r){let i=s.tagName.toLowerCase(),a=s.getAttribute("role")??"",l=s.getAttribute("aria-label")??s.getAttribute("placeholder")??(s.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a||(n[i]??"");if(i==="input"){let g=s.type;g==="checkbox"?c="checkbox":g==="radio"?c="radio":g==="button"||g==="submit"||g==="reset"?c="button":g==="search"?c="searchbox":c="textbox"}if(!c)continue;let d="value"in s?s.value:void 0,u=d!==void 0?String(d):void 0,p=s.disabled??!1,f=i==="input"?s.checked:void 0,m={role:c,name:l,disabled:p};u!==void 0&&(m.value=u),f!==void 0&&(m.checked=f),o.push(m)}return o},TS).catch(()=>[])}function KL(t){let n=t.accessibility;return n!==null&&typeof n=="object"?n:null}async function Wa(t,e){let n=e.maxElements??80,r=e.includeHidden??!1,o=[],s=KL(t),i=s?s.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=jL(t),l=t.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(t.url()),d=t.title().catch(()=>""),[u,p,f,m,g]=await Promise.all([i,a,l,c,d]),y,w=!1;u!==null?(y=[],AS(u,y)):(o.push("observation skipped accessibility tree (returned null)"),w=!0,y=(await WL(t)).filter(L=>_S.has(L.role??"")));let S=new Map;for(let I of p){let L=ES(I.name),z=S.get(L);(!z||z.bbox.w===0&&I.bbox.w>0)&&S.set(L,I)}let E=y.map(I=>({ax:I,dom:S.get(ES(I.name??""))})),k=r?E:E.filter(I=>I.dom?I.dom.bbox.w>0||I.dom.bbox.h>0:!0);k.sort((I,L)=>{let z=I.dom?.bbox.y??0,D=L.dom?.bbox.y??0;if(z!==D)return z-D;let H=I.dom?.bbox.x??0,N=L.dom?.bbox.x??0;return H-N}),k.length>200&&o.push("page has 200+ interactive elements; consider scoping");let T=k.slice(0,n).map((I,L)=>{let z=I.ax.role??"generic",D=I.ax.name??"",H=BL(z,D,L),N=I.dom?.bbox??{x:0,y:0,w:0,h:0},P=I.dom?.type??null,F=null;I.ax.value!==void 0&&I.ax.value!==null&&(F=String(I.ax.value)),I.ax.checked!==void 0&&(F=String(I.ax.checked)),SS({role:z,kind:P})&&(F="[redacted]");let j={disabled:I.ax.disabled??!1};I.ax.checked!==void 0&&(j.checked=I.ax.checked===!0||I.ax.checked==="mixed"),I.ax.selected!==void 0&&(j.selected=I.ax.selected),I.ax.expanded!==void 0&&(j.expanded=I.ax.expanded);let Y;I.dom?.testId?Y=`[data-testid="${I.dom.testId}"]`:I.dom?.id&&(Y=`#${I.dom.id}`);let ee={id:H,role:z,label:UL(D),kind:P,value:F,state:j,bbox:N};return Y!==void 0&&(ee.selector=Y),ee}),C="idle";try{let I=await t.evaluate(()=>document.readyState);I==="loading"?C="loading":I==="interactive"?C="navigating":C="idle"}catch{C="navigating"}C!=="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 A=HL(f),_=`obs_${e.observationCounter.toString(36)}`,x=new Date().toISOString();return{observationId:_,url:m,title:g,textSummary:A,interactive:T,status:{httpStatus:e.httpStatus??null,loadingState:C,hasDialog:e.hasDialog??!1,consoleErrors:e.consoleErrors??0},warnings:o,screenshotPath:e.screenshotPath??null,capturedAt:x}}var _S,TS,RS=h(()=>{"use strict";ja();_S=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);TS="a[href], button, input, select, textarea, [role], [tabindex], label"});async function xS(t,e){try{let n=await t.nth(e).evaluate(i=>{let a=i,l=a.getAttribute("role")??a.tagName.toLowerCase(),c=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",d=a.getBoundingClientRect();return{role:l,label:c,x:Math.round(d.x),y:Math.round(d.y),w:Math.round(d.width),h:Math.round(d.height)}}),r=`${n.role}:${n.label}:${e}`,o=0;for(let i=0;i<r.length;i++)o=o*31+r.charCodeAt(i)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function yp(t,e){let n=Math.min(e,5);return(await Promise.all(Array.from({length:n},(o,s)=>xS(t,s)))).filter(o=>o!==null)}async function GL(t){let e=new Set,n=[];for(let{loc:r,count:o}of t)for(let s=0;s<o;s++){let i;try{i=await r.nth(s).evaluate(a=>{let l=a,c=l.getBoundingClientRect();return`${l.tagName}@${Math.round(c.x)},${Math.round(c.y)}`})}catch{continue}e.has(i)||(e.add(i),n.push({key:i,locator:r,index:s}))}return n}async function bp(t,e,n){switch(e.kind){case"element_id":return qL(t,e,n);case"selector":return zL(t,e);case"semantic":return JL(t,e)}}async function qL(t,e,n){let r=n.get(e.elementId);if(r===void 0)return{outcome:"not_found",query:e};if(r.selector!==void 0){let l=t.locator(r.selector);if(await l.count()===1)return{outcome:"resolved",locator:l}}let o=t.getByRole(r.role,{name:r.label,exact:!0}),s=await o.count();if(s===0)return{outcome:"not_found",query:e};if(s===1)return{outcome:"resolved",locator:o};let i=await yp(o,s);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:i}}async function zL(t,e){let n=t.locator(e.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:e};if(r===1)return{outcome:"resolved",locator:n};let o=await yp(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${e.selector}]`},candidates:o}}async function JL(t,e){return e.role!==void 0?VL(t,e.text,e.role):YL(t,e.text,e)}async function VL(t,e,n){let r=t.getByRole(n,{name:e}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:e,role:n}};if(o===1)return{outcome:"resolved",locator:r};let s=await yp(r,o);return{outcome:"ambiguous_target",query:{text:e,role:n},candidates:s}}async function YL(t,e,n){let r=t.getByRole("button",{name:e}),o=t.getByRole("link",{name:e}),s=t.getByLabel(e,{exact:!1}),[i,a,l]=await Promise.all([r.count(),o.count(),s.count()]);if(i+a+l===0)return{outcome:"not_found",query:n};let d=[];i>0&&d.push({loc:r,count:i}),a>0&&d.push({loc:o,count:a}),l>0&&d.push({loc:s,count:l});let u=await GL(d);if(u.length===0)return{outcome:"not_found",query:n};if(u.length===1){let g=u[0];return g===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:g.locator.nth(g.index)}}let p=u.slice(0,5),f=[];for(let g=0;g<p.length;g++){let y=p[g];if(y===void 0)continue;let w=await xS(y.locator,y.index);if(w!==null){let S=`${w.role}:${w.label}:${g}`,E=0;for(let k=0;k<S.length;k++)E=E*31+S.charCodeAt(k)>>>0;f.push({...w,id:`el_${E.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:e},candidates:f}}var CS=h(()=>{"use strict"});async function wp(t,e,n,r){let o=t.url();if(o===n)return null;let s=$a(o,e);if(s.allowed)return null;try{await t.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:s.reason}}var IS=h(()=>{"use strict";Ua()});import{randomBytes as XL}from"crypto";import{mkdir as QL,stat as ZL,writeFile as eN}from"fs/promises";import{join as Sp}from"path";import{gzip as tN}from"zlib";import{promisify as nN}from"util";function rN(t){return Sp(eo(t),"browser")}function oN(t){return Sp(rN(t),"screenshots")}function sN(){return new Date().toISOString().replace(/[:.]/g,"-")}function iN(){return XL(3).toString("hex")}async function vp(t,e,n){if(e.length>PS)throw new Error(`writeScreenshotSidecar: buffer exceeds ${PS} byte cap (received ${e.length} bytes). Refusing to write oversized screenshot.`);let r=oN(t);await QL(r,{recursive:!0});let o=`${sN()}-${iN()}-${n}.png`,s=Sp(r,o);await eN(s,e);let{size:i}=await ZL(s);return{path:s,bytes:i}}var V6,PS,MS=h(()=>{"use strict";B();ja();V6=nN(tN);PS=5*1024*1024});var DS={};ld(DS,{PlaywrightProvider:()=>kp});function OS(t){switch(t.kind){case"semantic":return t.role!==void 0?`semantic('${t.text}', role='${t.role}')`:`semantic('${t.text}')`;case"element_id":return`element_id(${t.elementId})`;case"selector":return`selector(${t.selector})`}}var kp,FS=h(()=>{"use strict";wS();RS();CS();Ua();IS();MS();kp=class{name="playwright";config;launcher;sessions=new Map;constructor(e){this.config=e,this.launcher=new Ha(e)}async open(e){let n=$a(e.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:e.url,reason:n.reason};let{sessionId:r}=e,o=await this.launcher.ensurePage(r),s=this.ensureSessionState(r),i=null,a=null;try{await o.goto(e.url,{timeout:e.timeoutMs??3e4,waitUntil:e.waitFor??"load"})}catch(u){a=u}let l=o.url();if(!(a!==null&&(l===""||l==="about:blank"))){let u=await wp(o,this.config,e.url,()=>this.close({sessionId:r}));if(u!==null)return u}(e.screenshot===!0||a!==null)&&(i=await this.captureScreenshot(o,r,"browser_open")),s.observationCounter+=1;let d=await Wa(o,{observationCounter:s.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(s,d.interactive,d.url,d.title,"browser_open"),a!==null)throw a;return d}async observe(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),s=null;e.screenshot===!0&&(s=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let i=await Wa(r,{observationCounter:o.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:e.includeHidden,maxElements:e.maxElements});return this.updateSessionFromObservation(o,i.interactive,i.url,i.title,"browser_observe"),i}async act(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),s=r.url(),i=e.timeoutMs??3e4,a=await bp(r,e.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${OS(e.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:l}=a,c=null,d=async()=>{switch(e.action){case"click":await l.click({timeout:i});break;case"fill":await l.fill(e.value??"");break;case"press":await l.press(e.value??"");break;case"select":await l.selectOption(e.value??"");break;case"hover":await l.hover({timeout:i});break;case"scroll_to":await l.scrollIntoViewIfNeeded({timeout:i});break;case"wait_for":await l.waitFor({timeout:i,state:"visible"});break}};try{await d()}catch(g){if(g instanceof Error&&/navigation|net::ERR/i.test(g.message))try{await d()}catch(y){c=y}else c=g}let u=await wp(r,this.config,s,()=>this.close({sessionId:n}));if(u!==null)return u;let p=null;(e.screenshot===!0||c!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Wa(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),m=`browser_act:${e.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,m),c!==null)throw c;return f}async render(e){return this.launcher.renderHtml(e.url,{timeoutMs:e.timeoutMs??3e4,waitUntil:e.waitFor??"load",signal:e.signal,requestGuard:e.requestGuard})}async screenshot(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),s;if(e.target!==void 0){let d=await bp(r,e.target,o.knownElements);if(d.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${OS(e.target)}`);if(d.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");s=await d.locator.screenshot()}else s=await r.screenshot({fullPage:e.fullPage??!1});let{path:i,bytes:a}=await vp(n,s,"browser_screenshot"),l=0,c=0;if(e.fullPage===!0)try{let d=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));l=d.w,c=d.h}catch{let d=r.viewportSize();l=d?.width??0,c=d?.height??0}else{let d=r.viewportSize();l=d?.width??0,c=d?.height??0}return{path:i,bytes:a,width:l,height:c,dataBase64:s.toString("base64"),mediaType:"image/png"}}async extract(e){throw new Error("browser_extract not implemented in Phase 1")}async close(e){await this.launcher.closeSession(e.sessionId),this.sessions.delete(e.sessionId)}describe(e){let n=this.sessions.get(e);if(n===void 0)return null;let r=this.launcher.getPage(e);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(e){let n=this.sessions.get(e);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(e,r),r}updateSessionFromObservation(e,n,r,o,s){e.knownElements=new Map(n.map(i=>[i.id,i])),e.currentUrl=r,e.currentTitle=o,e.lastAction=s,e.lastActionAt=new Date().toISOString()}async captureScreenshot(e,n,r){try{let o=await e.screenshot({fullPage:!1}),{path:s}=await vp(n,o,r);return s}catch{return null}}}});var $n={};ld($n,{__resetBrowserRegistryForTests:()=>uN,browserProviderActive:()=>cN,closeBrowserProvider:()=>Ep,getBrowserProvider:()=>lN,peekBrowserProvider:()=>dN});function LS(){Promise.resolve(Ep()).then(()=>{process.exit(130)})}function NS(){Promise.resolve(Ep()).then(()=>{process.exit(143)})}function $S(){kt=null}function aN(){Ka||(process.on("SIGINT",LS),process.on("SIGTERM",NS),process.on("exit",$S),Ka=!0)}function US(){Ka&&(process.removeListener("SIGINT",LS),process.removeListener("SIGTERM",NS),process.removeListener("exit",$S),Ka=!1)}async function lN(t){return kt!==null?kt:(Nn!==null||(Nn=(async()=>{let{PlaywrightProvider:e}=await Promise.resolve().then(()=>(FS(),DS)),n=gS(t),r=new e(n);return aN(),kt=r,Nn=null,r})()),Nn)}async function Ep(){if(kt===null)return;let t=kt;kt=null,Nn=null,US(),await t.shutdown()}function cN(){return kt!==null}function dN(){return kt}function uN(){kt=null,Nn=null,US()}var kt,Nn,Ka,Un=h(()=>{"use strict";Ua();kt=null,Nn=null,Ka=!1});async function BS(t,e){try{return await oS(t,e)}catch(n){return O("[web/scrape] extraction failed",{url:e,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function yN(t,e){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Un(),$n));return(await n()).render({url:t,timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:e.requestGuard})}async function HS(t,e){let n=e.fetchFn??globalThis.fetch,r=e.renderFn??yN,o=e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{},s=null,i=t,a=null,l=null;try{let d=await Na(n,t,{headers:hN,signal:e.signal},o);a=d.status,i=d.url||t;let u=d.headers.get("content-type")??"";if(d.ok){if(gN.test(u))throw new Error(`web_scrape markdown mode received binary content (${u.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let p=await d.text();if(mN.test(u)&&!fN.test(u))return{title:"",markdown:p.trim(),finalUrl:i,usedRender:!1};if(s=await BS(p,i),e.signal.aborted)throw e.signal.reason??new Error("aborted")}}catch(d){if(e.signal.aborted||d instanceof lt||d instanceof Error&&d.message.startsWith("web_scrape markdown mode received binary"))throw d;l=d}if(!(s===null||s.textLength<200)&&s!==null)return{title:s.title,markdown:s.markdown,finalUrl:i,usedRender:!1};try{await Bo(t,o);let d=await r(t,{timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:p=>Bo(p,o)});d.finalUrl!==t&&/^https?:\/\//i.test(d.finalUrl)&&await Bo(d.finalUrl,o);let u=await BS(d.html,d.finalUrl);if(e.signal.aborted)throw e.signal.reason??new Error("aborted");if(s===null||u.textLength>=s.textLength)return{title:u.title,markdown:u.markdown,finalUrl:d.finalUrl,usedRender:!0}}catch(d){if(e.signal.aborted||d instanceof lt)throw d;if(s===null){let u=d instanceof Error?d.message:String(d),p=l instanceof Error?l.message:`HTTP ${a??"error"}`,f=new Error(`web_scrape could not retrieve ${t}: fetch failed (${p}) and render failed (${u}).`);throw f.cause=d,f}}if(s!==null)return{title:s.title,markdown:s.markdown,finalUrl:i,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${t} (HTTP ${a??"error"}).`)}var fN,mN,gN,hN,jS=h(()=>{"use strict";sS();fp();le();fN=/(text\/html|application\/xhtml\+xml)/i,mN=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,gN=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,hN={"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 SN(t){let e=t.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let s=await e(bN,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":t.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),wN),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!s.ok){let l="";try{let d=await s.text(),u=yr(d);u&&(l=`: ${u.length>200?u.slice(0,200)+"\u2026":u}`)}catch{}let c=s.statusText?` ${s.statusText}`:"";throw new Error(`Exa Search HTTP ${s.status}${c}${l}`)}let i;try{i=await s.json()}catch(l){throw new Error(`Exa Search response was not JSON: ${l instanceof Error?l.message:String(l)}`)}return(i.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 WS(t){return t.exaApiKey!==void 0&&t.exaApiKey.trim()!==""?SN({apiKey:t.exaApiKey,fetchFn:t.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function KS(t,e){if(e.length===0)return`# Search results for "${t}"
|
|
875
|
+
${et(t,{headless:e,latched:n})}`,{cause:t})}var yS,xL,CL,hS,PL,hp=h(()=>{"use strict";yS=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],xL="pnpm exec playwright install chromium",CL=4;PL="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 Ln from"node:fs";import Ba from"node:path";import{randomBytes as ML}from"node:crypto";import{chromium as OL}from"playwright";function DL(){try{return"5.85.2"}catch{}try{let t=Ba.resolve(import.meta.dirname,"../../../package.json"),e=Ln.readFileSync(t,"utf8"),n=JSON.parse(e);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var FL,Ha,wS=h(()=>{"use strict";hp();B();le();FL=DL(),Ha=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(e){this.config=e}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(e){this.launchFailure={error:e}}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=OL.launch({headless:this.config.headless}).then(e=>(this.browser=e,this.launchPromise=void 0,this.clearLaunchFailure(),e)).catch(e=>{this.launchPromise=void 0;let n=gp(e,this.config.headless,!0);throw this.latchLaunchFailure(n),n}),this.launchPromise)}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(e){let n=this.sessions.get(e);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),s=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),i={context:s,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(e,i),s}async ensurePage(e){let n=this.sessions.get(e);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(e);let r=this.sessions.get(e);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${e}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",s=>{s.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",s=>{s.isNavigationRequest()&&s.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",s=>{s.frame()===o.mainFrame()&&s.request().isNavigationRequest()&&(r.lastHttpStatus=s.status())}),o.on("dialog",s=>{r.openDialog=s}),o}getPage(e){return this.sessions.get(e)?.page}async renderHtml(e,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),s;n.requestGuard!==void 0&&await o.route("**/*",async a=>{try{await n.requestGuard(a.request().url()),await a.continue()}catch(l){s=l,await a.abort("blockedbyclient")}});let i=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",i,{once:!0});try{let a=await o.newPage(),l;try{l=await a.goto(e,{timeout:n.timeoutMs,waitUntil:n.waitUntil})}catch(p){throw s??p}if(s!==void 0)throw s;let c=await a.content();if(s!==void 0)throw s;let d=a.url(),u=l!==null?l.status():null;return{html:c,finalUrl:d,httpStatus:u}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",i),await o.close().catch(()=>{})}}getConsoleErrorCount(e){return this.sessions.get(e)?.consoleErrors??0}getLastHttpStatus(e){return this.sessions.get(e)?.lastHttpStatus??null}hasOpenDialog(e){return this.sessions.get(e)?.openDialog!==void 0}async dismissDialog(e,n=!0){let r=this.sessions.get(e);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(e){this.clearLaunchFailure();let n=this.sessions.get(e);n!==void 0&&(this.sessions.delete(e),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.clearLaunchFailure(),this.shutdownComplete)return;this.shutdownComplete=!0;let e=[...this.sessions.keys()];if(await Promise.all(e.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${FL}`}}loadStorageState(e){let n=yd(e);try{if(!Ln.existsSync(n))return;let r=JSON.parse(Ln.readFileSync(n,"utf8"));return O("[browser/vault] restored session",{profile:e,file:n}),r}catch(r){O("[browser/vault] ignoring unreadable vault",{profile:e,file:n,err:r});return}}async saveStorageState(e,n){try{let r=yd(e);if(!Ln.existsSync(r))return;let o=await n.storageState(),s=Ba.join(Ba.dirname(r),`.${Ba.basename(r)}.${process.pid}.${ML(4).toString("hex")}.tmp`);Ln.writeFileSync(s,JSON.stringify(o),{mode:384}),Ln.chmodSync(s,384),Ln.renameSync(s,r),O("[browser/vault] saved session",{profile:e,file:r})}catch(r){O("[browser/vault] save failed",{profile:e,err:r})}}}});import{createHash as LL}from"crypto";function SS(t){return!!(t.role==="textbox"&&t.kind==="password"||t.label&&NL.test(t.label))}function vS(t){return LL("sha256").update(t,"utf8").digest("hex").slice(0,8)}function kS(t){let e=t.replace(/\s+/g," ").trim();return e.length<=80?e:e.slice(0,77)+"..."}var NL,ja=h(()=>{"use strict";NL=/password|secret|token|api[_-]?key|otp|2fa/i});import{createHash as $L}from"node:crypto";function UL(t){return t?t.replace(/\s+/g," ").trim().slice(0,200):""}function BL(t,e,n){return`el_${$L("sha256").update(`${t}:${e}:${n}`).digest("hex").slice(0,6)}`}function HL(t){let e=t.replace(/\s+/g," ").trim(),n=4e3;return e.length<=n?e:e.slice(0,n)+"\u2026[truncated]"}function ES(t){return t.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function AS(t,e){let n=t.role??"",r=t.name??"";_S.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&e.push(t);for(let s of t.children??[])AS(s,e)}async function jL(t){return t.evaluate(e=>{let n=Array.from(document.querySelectorAll(e)),r=[];for(let o of n){let s=o.getBoundingClientRect(),i=o;if(s.width===0&&s.height===0){let d=window.getComputedStyle(i);if(d.display==="none"||d.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),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(s.left),y:Math.round(s.top),w:Math.round(s.width),h:Math.round(s.height)}})}return r},TS).catch(()=>[])}async function WL(t){return t.evaluate(e=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(e)),o=[];for(let s of r){let i=s.tagName.toLowerCase(),a=s.getAttribute("role")??"",l=s.getAttribute("aria-label")??s.getAttribute("placeholder")??(s.textContent??"").replace(/\s+/g," ").trim().slice(0,100),c=a||(n[i]??"");if(i==="input"){let g=s.type;g==="checkbox"?c="checkbox":g==="radio"?c="radio":g==="button"||g==="submit"||g==="reset"?c="button":g==="search"?c="searchbox":c="textbox"}if(!c)continue;let d="value"in s?s.value:void 0,u=d!==void 0?String(d):void 0,p=s.disabled??!1,f=i==="input"?s.checked:void 0,m={role:c,name:l,disabled:p};u!==void 0&&(m.value=u),f!==void 0&&(m.checked=f),o.push(m)}return o},TS).catch(()=>[])}function KL(t){let n=t.accessibility;return n!==null&&typeof n=="object"?n:null}async function Wa(t,e){let n=e.maxElements??80,r=e.includeHidden??!1,o=[],s=KL(t),i=s?s.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=jL(t),l=t.evaluate(()=>document.body?.innerText??"").catch(()=>""),c=Promise.resolve(t.url()),d=t.title().catch(()=>""),[u,p,f,m,g]=await Promise.all([i,a,l,c,d]),y,w=!1;u!==null?(y=[],AS(u,y)):(o.push("observation skipped accessibility tree (returned null)"),w=!0,y=(await WL(t)).filter(L=>_S.has(L.role??"")));let S=new Map;for(let I of p){let L=ES(I.name),z=S.get(L);(!z||z.bbox.w===0&&I.bbox.w>0)&&S.set(L,I)}let E=y.map(I=>({ax:I,dom:S.get(ES(I.name??""))})),k=r?E:E.filter(I=>I.dom?I.dom.bbox.w>0||I.dom.bbox.h>0:!0);k.sort((I,L)=>{let z=I.dom?.bbox.y??0,D=L.dom?.bbox.y??0;if(z!==D)return z-D;let H=I.dom?.bbox.x??0,N=L.dom?.bbox.x??0;return H-N}),k.length>200&&o.push("page has 200+ interactive elements; consider scoping");let T=k.slice(0,n).map((I,L)=>{let z=I.ax.role??"generic",D=I.ax.name??"",H=BL(z,D,L),N=I.dom?.bbox??{x:0,y:0,w:0,h:0},P=I.dom?.type??null,F=null;I.ax.value!==void 0&&I.ax.value!==null&&(F=String(I.ax.value)),I.ax.checked!==void 0&&(F=String(I.ax.checked)),SS({role:z,kind:P})&&(F="[redacted]");let j={disabled:I.ax.disabled??!1};I.ax.checked!==void 0&&(j.checked=I.ax.checked===!0||I.ax.checked==="mixed"),I.ax.selected!==void 0&&(j.selected=I.ax.selected),I.ax.expanded!==void 0&&(j.expanded=I.ax.expanded);let Y;I.dom?.testId?Y=`[data-testid="${I.dom.testId}"]`:I.dom?.id&&(Y=`#${I.dom.id}`);let ee={id:H,role:z,label:UL(D),kind:P,value:F,state:j,bbox:N};return Y!==void 0&&(ee.selector=Y),ee}),C="idle";try{let I=await t.evaluate(()=>document.readyState);I==="loading"?C="loading":I==="interactive"?C="navigating":C="idle"}catch{C="navigating"}C!=="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 A=HL(f),_=`obs_${e.observationCounter.toString(36)}`,x=new Date().toISOString();return{observationId:_,url:m,title:g,textSummary:A,interactive:T,status:{httpStatus:e.httpStatus??null,loadingState:C,hasDialog:e.hasDialog??!1,consoleErrors:e.consoleErrors??0},warnings:o,screenshotPath:e.screenshotPath??null,capturedAt:x}}var _S,TS,RS=h(()=>{"use strict";ja();_S=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);TS="a[href], button, input, select, textarea, [role], [tabindex], label"});async function xS(t,e){try{let n=await t.nth(e).evaluate(i=>{let a=i,l=a.getAttribute("role")??a.tagName.toLowerCase(),c=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",d=a.getBoundingClientRect();return{role:l,label:c,x:Math.round(d.x),y:Math.round(d.y),w:Math.round(d.width),h:Math.round(d.height)}}),r=`${n.role}:${n.label}:${e}`,o=0;for(let i=0;i<r.length;i++)o=o*31+r.charCodeAt(i)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function yp(t,e){let n=Math.min(e,5);return(await Promise.all(Array.from({length:n},(o,s)=>xS(t,s)))).filter(o=>o!==null)}async function GL(t){let e=new Set,n=[];for(let{loc:r,count:o}of t)for(let s=0;s<o;s++){let i;try{i=await r.nth(s).evaluate(a=>{let l=a,c=l.getBoundingClientRect();return`${l.tagName}@${Math.round(c.x)},${Math.round(c.y)}`})}catch{continue}e.has(i)||(e.add(i),n.push({key:i,locator:r,index:s}))}return n}async function bp(t,e,n){switch(e.kind){case"element_id":return qL(t,e,n);case"selector":return zL(t,e);case"semantic":return JL(t,e)}}async function qL(t,e,n){let r=n.get(e.elementId);if(r===void 0)return{outcome:"not_found",query:e};if(r.selector!==void 0){let l=t.locator(r.selector);if(await l.count()===1)return{outcome:"resolved",locator:l}}let o=t.getByRole(r.role,{name:r.label,exact:!0}),s=await o.count();if(s===0)return{outcome:"not_found",query:e};if(s===1)return{outcome:"resolved",locator:o};let i=await yp(o,s);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:i}}async function zL(t,e){let n=t.locator(e.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:e};if(r===1)return{outcome:"resolved",locator:n};let o=await yp(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${e.selector}]`},candidates:o}}async function JL(t,e){return e.role!==void 0?VL(t,e.text,e.role):YL(t,e.text,e)}async function VL(t,e,n){let r=t.getByRole(n,{name:e}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:e,role:n}};if(o===1)return{outcome:"resolved",locator:r};let s=await yp(r,o);return{outcome:"ambiguous_target",query:{text:e,role:n},candidates:s}}async function YL(t,e,n){let r=t.getByRole("button",{name:e}),o=t.getByRole("link",{name:e}),s=t.getByLabel(e,{exact:!1}),[i,a,l]=await Promise.all([r.count(),o.count(),s.count()]);if(i+a+l===0)return{outcome:"not_found",query:n};let d=[];i>0&&d.push({loc:r,count:i}),a>0&&d.push({loc:o,count:a}),l>0&&d.push({loc:s,count:l});let u=await GL(d);if(u.length===0)return{outcome:"not_found",query:n};if(u.length===1){let g=u[0];return g===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:g.locator.nth(g.index)}}let p=u.slice(0,5),f=[];for(let g=0;g<p.length;g++){let y=p[g];if(y===void 0)continue;let w=await xS(y.locator,y.index);if(w!==null){let S=`${w.role}:${w.label}:${g}`,E=0;for(let k=0;k<S.length;k++)E=E*31+S.charCodeAt(k)>>>0;f.push({...w,id:`el_${E.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:e},candidates:f}}var CS=h(()=>{"use strict"});async function wp(t,e,n,r){let o=t.url();if(o===n)return null;let s=$a(o,e);if(s.allowed)return null;try{await t.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:s.reason}}var IS=h(()=>{"use strict";Ua()});import{randomBytes as XL}from"crypto";import{mkdir as QL,stat as ZL,writeFile as eN}from"fs/promises";import{join as Sp}from"path";import{gzip as tN}from"zlib";import{promisify as nN}from"util";function rN(t){return Sp(eo(t),"browser")}function oN(t){return Sp(rN(t),"screenshots")}function sN(){return new Date().toISOString().replace(/[:.]/g,"-")}function iN(){return XL(3).toString("hex")}async function vp(t,e,n){if(e.length>PS)throw new Error(`writeScreenshotSidecar: buffer exceeds ${PS} byte cap (received ${e.length} bytes). Refusing to write oversized screenshot.`);let r=oN(t);await QL(r,{recursive:!0});let o=`${sN()}-${iN()}-${n}.png`,s=Sp(r,o);await eN(s,e);let{size:i}=await ZL(s);return{path:s,bytes:i}}var V6,PS,MS=h(()=>{"use strict";B();ja();V6=nN(tN);PS=5*1024*1024});var DS={};ld(DS,{PlaywrightProvider:()=>kp});function OS(t){switch(t.kind){case"semantic":return t.role!==void 0?`semantic('${t.text}', role='${t.role}')`:`semantic('${t.text}')`;case"element_id":return`element_id(${t.elementId})`;case"selector":return`selector(${t.selector})`}}var kp,FS=h(()=>{"use strict";wS();RS();CS();Ua();IS();MS();kp=class{name="playwright";config;launcher;sessions=new Map;constructor(e){this.config=e,this.launcher=new Ha(e)}async open(e){let n=$a(e.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:e.url,reason:n.reason};let{sessionId:r}=e,o=await this.launcher.ensurePage(r),s=this.ensureSessionState(r),i=null,a=null;try{await o.goto(e.url,{timeout:e.timeoutMs??3e4,waitUntil:e.waitFor??"load"})}catch(u){a=u}let l=o.url();if(!(a!==null&&(l===""||l==="about:blank"))){let u=await wp(o,this.config,e.url,()=>this.close({sessionId:r}));if(u!==null)return u}(e.screenshot===!0||a!==null)&&(i=await this.captureScreenshot(o,r,"browser_open")),s.observationCounter+=1;let d=await Wa(o,{observationCounter:s.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(s,d.interactive,d.url,d.title,"browser_open"),a!==null)throw a;return d}async observe(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),s=null;e.screenshot===!0&&(s=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let i=await Wa(r,{observationCounter:o.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:e.includeHidden,maxElements:e.maxElements});return this.updateSessionFromObservation(o,i.interactive,i.url,i.title,"browser_observe"),i}async act(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),s=r.url(),i=e.timeoutMs??3e4,a=await bp(r,e.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${OS(e.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:l}=a,c=null,d=async()=>{switch(e.action){case"click":await l.click({timeout:i});break;case"fill":await l.fill(e.value??"");break;case"press":await l.press(e.value??"");break;case"select":await l.selectOption(e.value??"");break;case"hover":await l.hover({timeout:i});break;case"scroll_to":await l.scrollIntoViewIfNeeded({timeout:i});break;case"wait_for":await l.waitFor({timeout:i,state:"visible"});break}};try{await d()}catch(g){if(g instanceof Error&&/navigation|net::ERR/i.test(g.message))try{await d()}catch(y){c=y}else c=g}let u=await wp(r,this.config,s,()=>this.close({sessionId:n}));if(u!==null)return u;let p=null;(e.screenshot===!0||c!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await Wa(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),m=`browser_act:${e.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,m),c!==null)throw c;return f}async render(e){return this.launcher.renderHtml(e.url,{timeoutMs:e.timeoutMs??3e4,waitUntil:e.waitFor??"load",signal:e.signal,requestGuard:e.requestGuard})}async screenshot(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),s;if(e.target!==void 0){let d=await bp(r,e.target,o.knownElements);if(d.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${OS(e.target)}`);if(d.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");s=await d.locator.screenshot()}else s=await r.screenshot({fullPage:e.fullPage??!1});let{path:i,bytes:a}=await vp(n,s,"browser_screenshot"),l=0,c=0;if(e.fullPage===!0)try{let d=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));l=d.w,c=d.h}catch{let d=r.viewportSize();l=d?.width??0,c=d?.height??0}else{let d=r.viewportSize();l=d?.width??0,c=d?.height??0}return{path:i,bytes:a,width:l,height:c,dataBase64:s.toString("base64"),mediaType:"image/png"}}async extract(e){throw new Error("browser_extract not implemented in Phase 1")}async close(e){await this.launcher.closeSession(e.sessionId),this.sessions.delete(e.sessionId)}describe(e){let n=this.sessions.get(e);if(n===void 0)return null;let r=this.launcher.getPage(e);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(e){let n=this.sessions.get(e);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(e,r),r}updateSessionFromObservation(e,n,r,o,s){e.knownElements=new Map(n.map(i=>[i.id,i])),e.currentUrl=r,e.currentTitle=o,e.lastAction=s,e.lastActionAt=new Date().toISOString()}async captureScreenshot(e,n,r){try{let o=await e.screenshot({fullPage:!1}),{path:s}=await vp(n,o,r);return s}catch{return null}}}});var $n={};ld($n,{__resetBrowserRegistryForTests:()=>uN,browserProviderActive:()=>cN,closeBrowserProvider:()=>Ep,getBrowserProvider:()=>lN,peekBrowserProvider:()=>dN});function LS(){Promise.resolve(Ep()).then(()=>{process.exit(130)})}function NS(){Promise.resolve(Ep()).then(()=>{process.exit(143)})}function $S(){kt=null}function aN(){Ka||(process.on("SIGINT",LS),process.on("SIGTERM",NS),process.on("exit",$S),Ka=!0)}function US(){Ka&&(process.removeListener("SIGINT",LS),process.removeListener("SIGTERM",NS),process.removeListener("exit",$S),Ka=!1)}async function lN(t){return kt!==null?kt:(Nn!==null||(Nn=(async()=>{let{PlaywrightProvider:e}=await Promise.resolve().then(()=>(FS(),DS)),n=gS(t),r=new e(n);return aN(),kt=r,Nn=null,r})()),Nn)}async function Ep(){if(kt===null)return;let t=kt;kt=null,Nn=null,US(),await t.shutdown()}function cN(){return kt!==null}function dN(){return kt}function uN(){kt=null,Nn=null,US()}var kt,Nn,Ka,Un=h(()=>{"use strict";Ua();kt=null,Nn=null,Ka=!1});async function BS(t,e){try{return await oS(t,e)}catch(n){return O("[web/scrape] extraction failed",{url:e,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function yN(t,e){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Un(),$n));return(await n()).render({url:t,timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:e.requestGuard})}async function HS(t,e){let n=e.fetchFn??globalThis.fetch,r=e.renderFn??yN,o=e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{},s=null,i=t,a=null,l=null;try{let d=await Na(n,t,{headers:hN,signal:e.signal},o);a=d.status,i=d.url||t;let u=d.headers.get("content-type")??"";if(d.ok){if(gN.test(u))throw new Error(`web_scrape markdown mode received binary content (${u.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let p=await d.text();if(mN.test(u)&&!fN.test(u))return{title:"",markdown:p.trim(),finalUrl:i,usedRender:!1};if(s=await BS(p,i),e.signal.aborted)throw e.signal.reason??new Error("aborted")}}catch(d){if(e.signal.aborted||d instanceof lt||d instanceof Error&&d.message.startsWith("web_scrape markdown mode received binary"))throw d;l=d}if(!(s===null||s.textLength<200)&&s!==null)return{title:s.title,markdown:s.markdown,finalUrl:i,usedRender:!1};try{await Bo(t,o);let d=await r(t,{timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:p=>Bo(p,o)});d.finalUrl!==t&&/^https?:\/\//i.test(d.finalUrl)&&await Bo(d.finalUrl,o);let u=await BS(d.html,d.finalUrl);if(e.signal.aborted)throw e.signal.reason??new Error("aborted");if(s===null||u.textLength>=s.textLength)return{title:u.title,markdown:u.markdown,finalUrl:d.finalUrl,usedRender:!0}}catch(d){if(e.signal.aborted||d instanceof lt)throw d;if(s===null){let u=d instanceof Error?d.message:String(d),p=l instanceof Error?l.message:`HTTP ${a??"error"}`,f=new Error(`web_scrape could not retrieve ${t}: fetch failed (${p}) and render failed (${u}).`);throw f.cause=d,f}}if(s!==null)return{title:s.title,markdown:s.markdown,finalUrl:i,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${t} (HTTP ${a??"error"}).`)}var fN,mN,gN,hN,jS=h(()=>{"use strict";sS();fp();le();fN=/(text\/html|application\/xhtml\+xml)/i,mN=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,gN=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,hN={"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 SN(t){let e=t.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let s=await e(bN,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":t.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),wN),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!s.ok){let l="";try{let d=await s.text(),u=yr(d);u&&(l=`: ${u.length>200?u.slice(0,200)+"\u2026":u}`)}catch{}let c=s.statusText?` ${s.statusText}`:"";throw new Error(`Exa Search HTTP ${s.status}${c}${l}`)}let i;try{i=await s.json()}catch(l){throw new Error(`Exa Search response was not JSON: ${l instanceof Error?l.message:String(l)}`)}return(i.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 WS(t){return t.exaApiKey!==void 0&&t.exaApiKey.trim()!==""?SN({apiKey:t.exaApiKey,fetchFn:t.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function KS(t,e){if(e.length===0)return`# Search results for "${t}"
|
|
876
876
|
|
|
877
877
|
(no results)`;let n=[`# Search results for "${t}"`,""];return e.forEach((r,o)=>{n.push(`## ${o+1}. ${r.title}`),r.url&&n.push(r.url),r.description&&n.push(r.description),n.push("")}),n.join(`
|
|
878
878
|
`).trimEnd()}var bN,wN,GS=h(()=>{"use strict";_n();bN="https://api.exa.ai/search",wN=10});function Ga(t){if(t instanceof Error&&t.name==="TimeoutError")return"timeout";let e=t instanceof Error?t.message:String(t);return/Timeout\s+\d+\s*ms exceeded/i.test(e)?"timeout":void 0}var Bn=h(()=>{"use strict";hp()});function TN(t){if(!t||typeof t!="object")return{error:"Invalid input: expected an object"};let e=t,n=e.mode??"markdown";if(n!=="markdown"&&n!=="raw"&&n!=="search")return{error:`Invalid input: mode must be one of "markdown", "raw", "search" (got ${JSON.stringify(n)})`};let r=n,o,s;if(r==="search"){if(typeof e.query!="string"||e.query.length===0)return{error:'Invalid input: search mode requires a non-empty "query" string'};s=e.query}else{if(typeof e.url!="string"||e.url.length===0)return{error:`Invalid input: ${r} mode requires a non-empty "url" string`};let l;try{l=new URL(e.url)}catch{return{error:`Invalid input: "${e.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 i=vN;if(e.timeout_ms!==void 0){if(typeof e.timeout_ms!="number"||!Number.isFinite(e.timeout_ms)||e.timeout_ms<=0)return{error:"Invalid input: timeout_ms must be a positive finite number"};i=Math.min(e.timeout_ms,kN)}let a=EN;if(e.max_bytes!==void 0){if(typeof e.max_bytes!="number"||!Number.isFinite(e.max_bytes)||e.max_bytes<=0)return{error:"Invalid input: max_bytes must be a positive finite number"};a=Math.min(e.max_bytes,_N)}return{mode:r,url:o,query:s,timeoutMs:i,maxBytes:a}}function _p(t,e){return Buffer.byteLength(t,"utf8")<=e?{content:t,truncated:!1}:{content:Ot(t,e),truncated:!0}}function RN(t={}){let e=t.fetchFn??globalThis.fetch,n=t.env??process.env,r=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{};return async(o,s)=>{if(typeof e!="function")return{content:"web_scrape unavailable: global fetch() is not present in this runtime (agent-afk requires Node 20+).",isError:!0};let i=TN(o);if("error"in i)return{content:i.error,isError:!0};if(s.aborted){let u=s.reason;return{content:`web_scrape aborted: ${u instanceof Error?u.message:String(u??"aborted")}`,isError:!0}}let a=new AbortController,l=()=>{a.abort(s.reason)},c,d=()=>{let u=a.signal.reason;return u instanceof Error?u.message:String(u??"aborted")};try{if(s.addEventListener("abort",l,{once:!0}),c=setTimeout(()=>{a.abort(new Error(`web_scrape timeout after ${i.timeoutMs}ms`))},i.timeoutMs),i.url!==void 0){let p=await pp(i.url,r);if(a.signal.aborted)return{content:`web_scrape aborted: ${d()}`,isError:!0};if(!p.allowed)return{content:`web_scrape blocked: ${p.reason}`,isError:!0}}if(i.mode==="raw"){let p;try{let g={method:"GET",headers:{"User-Agent":"agent-afk/web_scrape",Accept:"*/*"},signal:a.signal};p=await Na(e,i.url,g,r)}catch(g){return a.signal.aborted?{content:`web_scrape aborted: ${d()}`,isError:!0}:g instanceof lt?{content:`web_scrape blocked: ${g.message}`,isError:!0}:{content:`web_scrape network error: ${g instanceof Error?g.message:String(g)}`,isError:!0}}if(!p.ok)return{content:`web_scrape HTTP ${p.status} ${p.statusText||""}`.trimEnd()+` for ${i.url}`,isError:!0};let f;try{f=await p.text()}catch(g){return{content:`web_scrape read error: ${g instanceof Error?g.message:String(g)}`,isError:!0}}let m=_p(f,i.maxBytes);return{content:m.content,...m.truncated?{truncated:!0}:{}}}if(i.mode==="markdown")try{let p=await HS(i.url,{fetchFn:e,renderFn:t.renderFn,timeoutMs:i.timeoutMs,signal:a.signal,...t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{}});if(p.markdown.trim().length===0)return{content:`web_scrape extracted no readable content from ${i.url}.`,isError:!0};let f=_p(p.markdown,i.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(p){if(a.signal.aborted)return{content:`web_scrape aborted: ${d()}`,isError:!0};if(p instanceof lt)return{content:`web_scrape blocked: ${p.message}`,isError:!0};let f=p instanceof Error?p.message:String(p),m=Me(p)&&!mp(f)?` (the render fallback needs the optional Playwright browser \u2014 run \`${Ho()}\`)`:"";return{content:`web_scrape markdown error: ${f}${m}`,isError:!0}}let u=WS({exaApiKey:n.EXA_API_KEY,fetchFn:e});if("error"in u)return{content:u.error,isError:!0};try{let p=await u.search(i.query,{limit:AN,timeoutMs:i.timeoutMs,signal:a.signal}),f=_p(KS(i.query,p),i.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(p){return a.signal.aborted?{content:`web_scrape aborted: ${d()}`,isError:!0}:{content:`web_scrape search error (${u.name}): ${p instanceof Error?p.message:String(p)}`,isError:!0}}}finally{c!==void 0&&clearTimeout(c),s.removeEventListener("abort",l)}}}var vN,kN,EN,_N,AN,qS,zS=h(()=>{"use strict";jS();GS();fp();In();Bn();vN=3e4,kN=12e4,EN=1e5,_N=1e6,AN=10;qS=RN()});import{existsSync as VS,mkdirSync as xN,readFileSync as CN,renameSync as IN,unlinkSync as PN,writeFileSync as MN}from"node:fs";import{dirname as JS,join as ON}from"node:path";import{randomBytes as DN}from"node:crypto";function Ar(t){let e=t??fd();if(!VS(e))return[];try{let n=CN(e,"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 ${e}: ${r}`),[]}}function qa(t,e){let n=e??fd();xN(JS(n),{recursive:!0});let r=ON(JS(n),`.schedules.json.${process.pid}.${DN(4).toString("hex")}.tmp`),o=JSON.stringify(t,null,2);try{MN(r,o,"utf-8"),IN(r,n)}catch(s){try{VS(r)&&PN(r)}catch{}throw s}}function YS(t,e){let n=Ar(e),r=n.map(l=>l.id),o=FN(t.name),s=LN(o,r),i=new Date().toISOString(),a={...t,notifyOn:t.notifyOn??"failure",id:s,createdAt:i,updatedAt:i};return n.push(a),qa(n,e),a}function XS(t,e){let n=Ar(e),r=n.length,o=n.filter(s=>s.id!==t);return o.length===r?!1:(qa(o,e),!0)}function QS(t,e){return Ar(e).find(n=>n.id===t)}function FN(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"")}function LN(t,e){if(!e.includes(t))return t;let n=2;for(;e.includes(`${t}-${n}`);)n+=1;return`${t}-${n}`}var ZS=h(()=>{"use strict";B()});import{existsSync as NN,readFileSync as $N}from"node:fs";import{join as UN}from"node:path";async function jo(t,e,n){let r;try{let o=UN(Fg("default"),"port");if(!NN(o))return{synced:!1,detail:"daemon-not-detected (no port file)"};let s=$N(o,"utf-8").trim();if(r=parseInt(s,10),Number.isNaN(r))return{synced:!1,detail:"daemon-not-detected (invalid port file)"}}catch{return{synced:!1,detail:"daemon-not-detected (unreadable port file)"}}try{let o=await fetch(`http://localhost:${r}${e}`,{method:t,headers:{"Content-Type":"application/json"},body:n!==void 0?JSON.stringify(n):void 0,signal:AbortSignal.timeout(2e3)});return o.ok?{synced:!0,detail:"synced"}:t==="POST"&&o.status===409?{synced:!0,detail:"already-registered"}:t==="DELETE"&&o.status===404?{synced:!0,detail:"not-registered"}:{synced:!1,detail:`daemon-rejected (HTTP ${o.status})`}}catch{return{synced:!1,detail:"daemon-unreachable (stale port file or network error)"}}}var Ap,ev=h(()=>{"use strict";B();Ap="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 BN}from"node:fs";import{readFile as HN}from"node:fs/promises";var tv,nv,rv,ov,sv=h(()=>{"use strict";ZS();B();ev();tv=async(t,e)=>{if(!t||typeof t!="object")return{content:"Invalid input: expected object",isError:!0};let n=t;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 s=YS({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}),i=s.enabled?await jo("POST","/tasks",{taskId:s.id,command:s.command,cron:s.cron,trigger:s.trigger,notifyOn:s.notifyOn,...s.notifyChat!==void 0?{notifyChat:s.notifyChat}:{}}):await jo("DELETE",`/tasks/${s.id}`);return{content:JSON.stringify({id:s.id,name:s.name,cron:s.cron,enabled:s.enabled,daemonSynced:i.synced,syncDetail:i.detail,...i.synced?{}:{syncNote:Ap}})}},nv=async(t,e)=>{let n=Ar();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})))}},rv=async(t,e)=>{if(!t||typeof t!="object")return{content:"Invalid input: expected object",isError:!0};let n=t;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,s=Qs();if(!BN(s))return{content:JSON.stringify([])};let i;try{let c=await HN(s);i=(c.length>1048576?c.subarray(c.length-1048576):c).toString("utf-8")}catch{return{content:JSON.stringify([])}}let a=i.split(`
|
|
@@ -963,9 +963,9 @@ ${o}`:o}function TU(t){let e=t.systemPrompt;if(e!==void 0){if(typeof e=="string"
|
|
|
963
963
|
|
|
964
964
|
`+t},{role:"assistant",content:os}]},countChars:NU}});function Zk(t,e){let n=[],r=[];for(let i of t){if(i.role==="system"){typeof i.content=="string"&&i.content.length>0&&n.push(i.content);continue}if(i.role==="tool"){r.push({type:"function_call_output",call_id:i.tool_call_id??"",output:typeof i.content=="string"?i.content:""});continue}if(i.role==="assistant"){if(typeof i.content=="string"&&i.content.length>0&&r.push({role:"assistant",content:i.content}),Array.isArray(i.tool_calls))for(let a of i.tool_calls)r.push({type:"function_call",call_id:a.id,name:a.function.name,arguments:a.function.arguments});continue}r.push({role:"user",content:WU(i.content)})}let o={input:r};n.length>0&&(o.instructions=n.join(`
|
|
965
965
|
|
|
966
|
-
`));let s=KU(e);return s.length>0&&(o.tools=s),o}function WU(t){if(t===null)return"";if(typeof t=="string")return t;let e=[];for(let n of t)n.type==="text"?e.push({type:"input_text",text:n.text}):e.push({type:"input_image",image_url:n.image_url.url,detail:"auto"});return e}function KU(t){return!t||t.length===0?[]:t.map(e=>{let n={type:"function",name:e.function.name,parameters:e.function.parameters};return e.function.description!==void 0&&(n.description=e.function.description),n})}var eE=h(()=>{"use strict"});function mf(t,e){let n=ul(t);return typeof e=="number"&&Number.isFinite(e)&&e>0?Math.floor(e):n}function tE(t,e){let n=mf(t,e);return zo(t)?{max_completion_tokens:n}:{max_tokens:n}}function gf(t){return t??"default"}function nE(t){switch(t){case"low":return"low";case"medium":return"medium";case"high":case"xhigh":case"max":return"high"}}function bl(t,e){if(t!==void 0&&zo(e))return nE(t)}var wl=h(()=>{"use strict";xr();Rr()});function Sl(t){let e=Zk(t.messages,t.activeTools),n={model:t.model,input:e.input,stream:!0};t.isChatGptBackend||(n.max_output_tokens=mf(t.model,t.maxOutputTokens));let r=e.instructions??(t.isChatGptBackend?Hk:void 0);r!==void 0&&(n.instructions=r),t.isChatGptBackend&&(n.store=!1),e.tools&&e.tools.length>0&&(n.tools=e.tools);let o=bl(t.effort,t.model);return o!==void 0&&(n.reasoning={effort:o}),n}function rE(t){let e={model:t.model,messages:t.messages,stream:!0,stream_options:{include_usage:!0}};Object.assign(e,tE(t.model,t.maxOutputTokens)),t.activeTools&&t.activeTools.length>0&&(e.tools=t.activeTools);let n=bl(t.effort,t.model);return n!==void 0&&(e.reasoning_effort=n),e}var hf=h(()=>{"use strict";eE();gl();wl()});async function*Fr(t,e){if(e.aborted)throw oE(e);let n=t[Symbol.asyncIterator](),r=!1,o=Symbol("aborted"),s,i=new Promise(a=>{s=()=>a(o),e.addEventListener("abort",s,{once:!0})});try{for(;;){let a=n.next(),l=await Promise.race([a,i]);if(l===o)throw Promise.resolve(a).catch(()=>{}),r=!0,oE(e);if(l.done)return;yield l.value}}finally{e.removeEventListener("abort",s);let a=Promise.resolve(n.return?.()).catch(()=>{});r||await a}}function oE(t){let e=t.reason;if(e instanceof Error)return e;let n=new Error(typeof e=="string"&&e.length>0?e:"The operation was aborted");return n.name="AbortError",n}var vl=h(()=>{"use strict"});import GU from"openai";async function kl(t){let{apiKey:e,baseURL:n,model:r,system:o,user:s,maxTokens:i=64,signal:a,clientFactory:l}=t,c;if(t.client!==void 0)c=t.client;else{let f=nn(e);if(f.apiKey===null)throw new Error("oneShotChatCompletion: no usable OpenAI auth (set OPENAI_API_KEY or pass apiKey)");let m={apiKey:f.apiKey};n!==void 0&&(m.baseURL=n);let g=l??qU;c=g?g(m):new GU(m)}let d=zo(r)?{max_completion_tokens:i}:{max_tokens:i},p=(await c.chat.completions.create({model:r,...d,stream:!1,messages:[{role:"system",content:o},{role:"user",content:s}]},a?{signal:a}:void 0)).choices?.[0]?.message?.content;return typeof p=="string"?p.trim():""}async function sE(t){let{client:e,model:n,system:r,user:o,isChatGptBackend:s,maxTokens:i=1024,signal:a}=t,c=Sl({model:n,messages:[{role:"system",content:r},{role:"user",content:o}],activeTools:void 0,maxOutputTokens:i,effort:void 0,isChatGptBackend:s}),d=await e.responses.create(c,a?{signal:a}:void 0),u=a?Fr(d,a):d,p=pl(),f=!1;for await(let m of u){m.type==="response.completed"&&(f=!0);let g=ml(m,p,"compact-oneshot");for(;!g.next().done;);}if(!f)throw new as(p.finishReason);return p.assistantText.trim()}var as,qU,yf=h(()=>{"use strict";Vo();Rr();hf();Yo();of();vl();as=class extends Error{constructor(n){super(`responses summarize did not complete (terminal status: ${n??"none"})`);this.finishReason=n;this.name="ResponsesSummaryIncompleteError"}finishReason},qU=null});function Ee(t,e){if(t===null||typeof t!="object")return;let n=t.headers;if(n==null)return;if(typeof n.get=="function")return n.get(e)??void 0;if(typeof n=="object"){let o=n,s=o[e]??o[e.toUpperCase()];return typeof s=="string"?s:void 0}}function Kn(t){let e=Ee(t,"retry-after-ms");if(e!==void 0){let r=Number(e);if(Number.isFinite(r)&&r>=0)return r}let n=Ee(t,"retry-after");if(n!==void 0){let r=Number(n);if(Number.isFinite(r)&&r>=0)return Math.round(r*1e3);let o=Date.parse(n);if(!Number.isNaN(o)){let s=o-Date.now();if(s>=0)return s}}}var bf=h(()=>{"use strict"});function wf(t){return zU*Math.pow(2,t)}function Sf(t){let e=Kn(t);if(e!==void 0)return Math.min(e,JU)}function ls(t){if(t===null||typeof t!="object")return;let e=t;return typeof e.status=="number"?e.status:void 0}function El(t){let e=ls(t);return e===void 0?!1:iE.has(e)}function _l(t){let e=ls(t);return e===void 0?!1:iE.has(e)}var iE,aE,lE,zU,JU,Al=h(()=>{"use strict";bf();iE=new Set([429,500,502,503,529]),aE=3,lE=3,zU=2e3;JU=12e4});function cE(t){return t.replace(/\bauthorization:\s*bearer\s+\S+/gi,"Authorization: Bearer [REDACTED]").replace(/\bsk-ant-[A-Za-z0-9_-]{20,}/g,"[REDACTED]").replace(/\beyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g,"[REDACTED]").replace(/\b(?:AKIA|ASIA|AROA|AIDA|AGPA|AIPA|ANPA|ANVA|APKA|ABIA|ACCA)[A-Z0-9]{16}\b/g,"[REDACTED]").replace(/(?<![/.\w])[A-Za-z0-9+/=_-]{32,}(?![/.\w])/g,e=>VU(e)||YU(e)?e:"[REDACTED]")}function VU(t){if(!t.includes("/")||/[+=]/.test(t))return!1;let e=n=>n.length>=32&&!n.includes(".")&&/[A-Za-z]/.test(n)&&/[0-9]/.test(n);return!t.split("/").some(e)}function YU(t){if(/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/.test(t))return!0;let e=/^([A-Za-z_][A-Za-z0-9_]*)=(?:[0-9a-f]{40}|[0-9a-f]{64})$/.exec(t);return e!==null&&/^(?:ref|sha|commit|base)$/i.test(e[1]??"")}var dE=h(()=>{"use strict"});function rn(t,e){if(!e||typeof e!="object")return"";let n=e;if(t==="skill"||t==="Skill"){let i=n.name;return typeof i=="string"&&i.length>0?`(${i.length>60?i.slice(0,59)+"\u2026":i})`:""}let r=n.file_path??n.path??n.filePath;if(typeof r=="string")return" "+r;let o=n.command??n.cmd;if(typeof o=="string"){let i=cE(o.replace(/\\\r?\n/g," ").replace(/\s+/g," ").trim());return" "+(i.length>uE?i.slice(0,uE-1)+"\u2026":i)}let s=n.query??n.pattern??n.url??n.description;return typeof s=="string"?" "+s:""}var uE,cs=h(()=>{"use strict";dE();uE=160});function Tl(t){if(!t||typeof t!="object")return;let e=t,n={};for(let r of XU){let o=e[r];o!==void 0&&(n[r]=typeof o=="string"&&o.length>4096?o.slice(0,4096):o)}return Object.keys(n).length>0?JSON.stringify(n):void 0}var XU,vf=h(()=>{"use strict";XU=["file_path","name","id_prefix"]});function Rl(t){let{toolUseId:e,name:n,input:r,subagentId:o}=t;return{phase:"started",toolUseId:e,name:n,inputBytes:Buffer.byteLength(JSON.stringify(r??{}),"utf8"),...o!==void 0?{subagentId:o}:{}}}function xl(t){let{toolUseId:e,name:n,result:r,truncated:o,durationMs:s,subagentId:i}=t;return{phase:"completed",toolUseId:e,name:n,resultBytes:Buffer.byteLength(r.content,"utf8"),isError:r.isError===!0,truncated:o,durationMs:s,...r.incomplete===!0?{incomplete:!0}:{},...r.incompleteReason?{incompleteReason:r.incompleteReason}:{},...r.circuitBreaker===!0?{circuitBreaker:!0}:{},...r.failureClass?{failureClass:r.failureClass}:{},...typeof r.batchIndex=="number"&&typeof r.batchSize=="number"?{batchIndex:r.batchIndex,batchSize:r.batchSize}:{},...i!==void 0?{subagentId:i}:{}}}var Cl=h(()=>{"use strict"});import{randomUUID as QU}from"node:crypto";async function*pE({state:t,signal:e,vision:n,toolDispatcher:r,traceWriter:o,priorTurns:s,sessionId:i,subagentId:a}){if(!r)return void 0;let l=fl(t);for(let m of l)m.id.length===0&&(m.id=QU());let{calls:c,parseErrors:d}=Nk(l,e),u=new Map;for(let m of c){let g=Date.now();u.set(m.id,g),kn(o,Rl({toolUseId:m.id,name:m.name,input:m.input,subagentId:a})),yield{type:"tool.use.start",toolUseId:m.id,toolName:m.name,toolInput:rn(m.name,m.input),toolInputRaw:Tl(m.input),sessionId:i}}let p=[];if(e.aborted)for(let m of c){let g={content:"Tool call aborted",isError:!0};p.push({call:m,result:g}),yield{type:"tool.output",toolUseId:m.id,toolName:m.name,content:g.content,isError:!0,sessionId:i}}else{let m;try{if(r.executeBatch)m=await r.executeBatch(c);else{m=[];for(let g of c){if(e.aborted){m.push({content:"Tool call aborted",isError:!0});continue}try{m.push(await r.execute(g))}catch(y){let w=y instanceof Error?y.message:String(y);m.push({content:`Tool execution threw: ${w}`,isError:!0})}}}}catch(g){let y=g instanceof Error?g.message:String(g);m=c.map(()=>({content:`Tool batch execution failed: ${y}`,isError:!0}))}for(let g=0;g<c.length;g++){let y=c[g],w=m[g],S=d.get(y.id);S!==void 0&&(w={content:`${S}
|
|
966
|
+
`));let s=KU(e);return s.length>0&&(o.tools=s),o}function WU(t){if(t===null)return"";if(typeof t=="string")return t;let e=[];for(let n of t)n.type==="text"?e.push({type:"input_text",text:n.text}):e.push({type:"input_image",image_url:n.image_url.url,detail:"auto"});return e}function KU(t){return!t||t.length===0?[]:t.map(e=>{let n={type:"function",name:e.function.name,parameters:e.function.parameters};return e.function.description!==void 0&&(n.description=e.function.description),n})}var eE=h(()=>{"use strict"});function mf(t,e){let n=ul(t);return typeof e=="number"&&Number.isFinite(e)&&e>0?Math.floor(e):n}function tE(t,e){let n=mf(t,e);return zo(t)?{max_completion_tokens:n}:{max_tokens:n}}function gf(t){return t??"default"}function nE(t){switch(t){case"low":return"low";case"medium":return"medium";case"high":case"xhigh":case"max":return"high"}}function bl(t,e){if(t!==void 0&&zo(e))return nE(t)}var wl=h(()=>{"use strict";xr();Rr()});function Sl(t){let e=Zk(t.messages,t.activeTools),n={model:t.model,input:e.input,stream:!0};t.isChatGptBackend||(n.max_output_tokens=mf(t.model,t.maxOutputTokens));let r=e.instructions??(t.isChatGptBackend?Hk:void 0);r!==void 0&&(n.instructions=r),t.isChatGptBackend&&(n.store=!1),e.tools&&e.tools.length>0&&(n.tools=e.tools);let o=bl(t.effort,t.model);return o!==void 0&&(n.reasoning={effort:o}),n}function rE(t){let e={model:t.model,messages:t.messages,stream:!0,stream_options:{include_usage:!0}};Object.assign(e,tE(t.model,t.maxOutputTokens)),t.activeTools&&t.activeTools.length>0&&(e.tools=t.activeTools);let n=bl(t.effort,t.model);return n!==void 0&&(e.reasoning_effort=n),e}var hf=h(()=>{"use strict";eE();gl();wl()});async function*Fr(t,e){if(e.aborted)throw oE(e);let n=t[Symbol.asyncIterator](),r=!1,o=Symbol("aborted"),s,i=new Promise(a=>{s=()=>a(o),e.addEventListener("abort",s,{once:!0})});try{for(;;){let a=n.next(),l=await Promise.race([a,i]);if(l===o)throw Promise.resolve(a).catch(()=>{}),r=!0,oE(e);if(l.done)return;yield l.value}}finally{e.removeEventListener("abort",s);let a=Promise.resolve(n.return?.()).catch(()=>{});r||await a}}function oE(t){let e=t.reason;if(e instanceof Error)return e;let n=new Error(typeof e=="string"&&e.length>0?e:"The operation was aborted");return n.name="AbortError",n}var vl=h(()=>{"use strict"});import GU from"openai";async function kl(t){let{apiKey:e,baseURL:n,model:r,system:o,user:s,maxTokens:i=64,signal:a,clientFactory:l}=t,c;if(t.client!==void 0)c=t.client;else{let f=nn(e);if(f.apiKey===null)throw new Error("oneShotChatCompletion: no usable OpenAI auth (set OPENAI_API_KEY or pass apiKey)");let m={apiKey:f.apiKey};n!==void 0&&(m.baseURL=n);let g=l??qU;c=g?g(m):new GU(m)}let d=zo(r)?{max_completion_tokens:i}:{max_tokens:i},p=(await c.chat.completions.create({model:r,...d,stream:!1,messages:[{role:"system",content:o},{role:"user",content:s}]},a?{signal:a}:void 0)).choices?.[0]?.message?.content;return typeof p=="string"?p.trim():""}async function sE(t){let{client:e,model:n,system:r,user:o,isChatGptBackend:s,maxTokens:i=1024,signal:a}=t,c=Sl({model:n,messages:[{role:"system",content:r},{role:"user",content:o}],activeTools:void 0,maxOutputTokens:i,effort:void 0,isChatGptBackend:s}),d=await e.responses.create(c,a?{signal:a}:void 0),u=a?Fr(d,a):d,p=pl(),f=!1;for await(let m of u){m.type==="response.completed"&&(f=!0);let g=ml(m,p,"compact-oneshot");for(;!g.next().done;);}if(!f)throw new as(p.finishReason);return p.assistantText.trim()}var as,qU,yf=h(()=>{"use strict";Vo();Rr();hf();Yo();of();vl();as=class extends Error{constructor(n){super(`responses summarize did not complete (terminal status: ${n??"none"})`);this.finishReason=n;this.name="ResponsesSummaryIncompleteError"}finishReason},qU=null});function Ee(t,e){if(t===null||typeof t!="object")return;let n=t.headers;if(n==null)return;if(typeof n.get=="function")return n.get(e)??void 0;if(typeof n=="object"){let o=n,s=o[e]??o[e.toUpperCase()];return typeof s=="string"?s:void 0}}function Kn(t){let e=Ee(t,"retry-after-ms");if(e!==void 0){let r=Number(e);if(Number.isFinite(r)&&r>=0)return r}let n=Ee(t,"retry-after");if(n!==void 0){let r=Number(n);if(Number.isFinite(r)&&r>=0)return Math.round(r*1e3);let o=Date.parse(n);if(!Number.isNaN(o)){let s=o-Date.now();if(s>=0)return s}}}var bf=h(()=>{"use strict"});function wf(t){return zU*Math.pow(2,t)}function Sf(t){let e=Kn(t);if(e!==void 0)return Math.min(e,JU)}function ls(t){if(t===null||typeof t!="object")return;let e=t;return typeof e.status=="number"?e.status:void 0}function El(t){let e=ls(t);return e===void 0?!1:iE.has(e)}function _l(t){let e=ls(t);return e===void 0?!1:iE.has(e)}var iE,aE,lE,zU,JU,Al=h(()=>{"use strict";bf();iE=new Set([429,500,502,503,529]),aE=3,lE=3,zU=2e3;JU=12e4});function cE(t){return t.replace(/\bauthorization:\s*bearer\s+\S+/gi,"Authorization: Bearer [REDACTED]").replace(/\bsk-ant-[A-Za-z0-9_-]{20,}/g,"[REDACTED]").replace(/\beyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g,"[REDACTED]").replace(/\b(?:AKIA|ASIA|AROA|AIDA|AGPA|AIPA|ANPA|ANVA|APKA|ABIA|ACCA)[A-Z0-9]{16}\b/g,"[REDACTED]").replace(/(?<![/.\w])[A-Za-z0-9+/=_-]{32,}(?![/.\w])/g,e=>VU(e)||YU(e)?e:"[REDACTED]")}function VU(t){if(!t.includes("/")||/[+=]/.test(t))return!1;let e=n=>n.length>=32&&!n.includes(".")&&/[A-Za-z]/.test(n)&&/[0-9]/.test(n);return!t.split("/").some(e)}function YU(t){if(/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/.test(t))return!0;let e=/^([A-Za-z_][A-Za-z0-9_]*)=(?:[0-9a-f]{40}|[0-9a-f]{64})$/.exec(t);return e!==null&&/^(?:ref|sha|commit|base)$/i.test(e[1]??"")}var dE=h(()=>{"use strict"});function rn(t,e){if(!e||typeof e!="object")return"";let n=e;if(t==="skill"||t==="Skill"){let i=n.name;return typeof i=="string"&&i.length>0?`(${i.length>60?i.slice(0,59)+"\u2026":i})`:""}let r=n.file_path??n.path??n.filePath;if(typeof r=="string")return" "+r;let o=n.command??n.cmd;if(typeof o=="string"){let i=cE(o.replace(/\\\r?\n/g," ").replace(/\s+/g," ").trim());return" "+(i.length>uE?i.slice(0,uE-1)+"\u2026":i)}let s=n.query??n.pattern??n.url??n.description;return typeof s=="string"?" "+s:""}var uE,cs=h(()=>{"use strict";dE();uE=160});function Tl(t){if(!t||typeof t!="object")return;let e=t,n={};for(let r of XU){let o=e[r];o!==void 0&&(n[r]=typeof o=="string"&&o.length>4096?o.slice(0,4096):o)}return Object.keys(n).length>0?JSON.stringify(n):void 0}var XU,vf=h(()=>{"use strict";XU=["file_path","name","id_prefix"]});function Rl(t){let{toolUseId:e,name:n,input:r,subagentId:o}=t;return{phase:"started",toolUseId:e,name:n,inputBytes:Buffer.byteLength(JSON.stringify(r??{}),"utf8"),...o!==void 0?{subagentId:o}:{}}}function xl(t){let{toolUseId:e,name:n,result:r,truncated:o,durationMs:s,subagentId:i}=t;return{phase:"completed",toolUseId:e,name:n,resultBytes:Buffer.byteLength(r.content,"utf8"),isError:r.isError===!0,truncated:o,durationMs:s,...r.incomplete===!0?{incomplete:!0}:{},...r.incompleteReason?{incompleteReason:r.incompleteReason}:{},...r.circuitBreaker===!0?{circuitBreaker:!0}:{},...r.failureClass?{failureClass:r.failureClass}:{},...typeof r.batchIndex=="number"&&typeof r.batchSize=="number"?{batchIndex:r.batchIndex,batchSize:r.batchSize}:{},...i!==void 0?{subagentId:i}:{}}}var Cl=h(()=>{"use strict"});import{randomUUID as QU}from"node:crypto";async function*pE({state:t,signal:e,vision:n,toolDispatcher:r,traceWriter:o,priorTurns:s,sessionId:i,subagentId:a}){if(!r)return void 0;let l=fl(t);for(let m of l)m.id.length===0&&(m.id=QU());let{calls:c,parseErrors:d}=Nk(l,e),u=new Map;for(let m of c){let g=Date.now();u.set(m.id,g),kn(o,Rl({toolUseId:m.id,name:m.name,input:m.input,subagentId:a})),yield{type:"tool.use.start",toolUseId:m.id,toolName:m.name,toolInput:rn(m.name,m.input),toolInputRaw:Tl(m.input),sessionId:i}}let p=[];if(e.aborted)for(let m of c){let g={content:"Tool call aborted",isError:!0,failureClass:"abort"};p.push({call:m,result:g}),yield{type:"tool.output",toolUseId:m.id,toolName:m.name,content:g.content,isError:!0,failureClass:"abort",sessionId:i}}else{let m;try{if(r.executeBatch)m=await r.executeBatch(c);else{m=[];for(let g of c){if(e.aborted){m.push({content:"Tool call aborted",isError:!0,failureClass:"abort"});continue}try{m.push(await r.execute(g))}catch(y){let w=y instanceof Error?y.message:String(y);m.push({content:`Tool execution threw: ${w}`,isError:!0})}}}}catch(g){let y=g instanceof Error?g.message:String(g);m=c.map(()=>({content:`Tool batch execution failed: ${y}`,isError:!0}))}for(let g=0;g<c.length;g++){let y=c[g],w=m[g],S=d.get(y.id);S!==void 0&&(w={content:`${S}
|
|
967
967
|
--
|
|
968
|
-
${w.content}`,isError:!0,...w.truncated===!0?{truncated:!0}:{}}),p.push({call:y,result:w});let E=u.get(y.id),k=typeof E=="number"?Date.now()-E:0,R=w.truncated===!0||w.content.includes("[output truncated");kn(o,xl({toolUseId:y.id,name:y.name,result:w,truncated:R,durationMs:k,subagentId:a})),yield{type:"tool.output",toolUseId:y.id,toolName:y.name,content:w.content,...w.isError===!0?{isError:!0}:{},...w.truncated===!0?{truncated:!0}:{},...w.incomplete===!0?{incomplete:!0}:{},...w.incompleteReason?{incompleteReason:w.incompleteReason}:{},...typeof w.batchIndex=="number"&&typeof w.batchSize=="number"?{batchIndex:w.batchIndex,batchSize:w.batchSize}:{},sessionId:i},w.render?.diff&&(yield{type:"tool.diff",toolUseId:y.id,diff:w.render.diff,sessionId:i})}}s.push($k(t.assistantText,l,t.reasoningText));for(let m of Uk(p))s.push(m);let f=Bk(p,{vision:n});return f&&s.push(f),p.find(m=>m.result.failureClass===Sr)?.result}var fE=h(()=>{"use strict";Q();vf();Ca();cs();Cl();Yo();nf()});function Pl(t){return t!==void 0&&t>0?Math.floor(t):0}function Ml(t,e){return e>0&&t>=e}var Ft,Il,Lr=h(()=>{"use strict";Ft="tool_use_loop_capped",Il="You have reached your tool-use budget for this turn. Do not request any more tools \u2014 give your final answer now using only the information already gathered."});import ZU from"openai";function tB(t){let e={apiKey:t.apiKey};return t.baseURL!==void 0&&(e.baseURL=t.baseURL),t.defaultHeaders!==void 0&&(e.defaultHeaders=t.defaultHeaders),new ZU(e)}function mE(){return eB??tB}var eB,kf=h(()=>{"use strict";eB=null});function Et(t,e){return new Promise(n=>{if(e.aborted){n();return}let r=setTimeout(n,t);r.unref(),e.addEventListener("abort",()=>{clearTimeout(r),n()},{once:!0})})}var ds=h(()=>{"use strict"});async function*Ef(t,e){let n=0;for(;;){let r=pl(),o=Date.now(),s,i=null;for(let d=0;;d++)try{s=await e.createStream(t.controller.signal);break}catch(u){if(t.controller.signal.aborted)return null;if(El(u)&&d<aE){let p=Sf(u),f=p??wf(d);if(K(t.traceWriter,{phase:"rate_limit",durationMs:f,resolvedModel:t.currentModel,metadata:{source:"connection",reason:p!==void 0?"retry-after":"backoff",attempt:d}}),await Et(f,t.controller.signal),t.controller.signal.aborted)return null;continue}i=u;break}if(i!==null)return yield{type:"error",error:e.clarifyError(i)},null;let a=null,l=!1;try{for await(let d of Fr(s,t.controller.signal)){if(t.isClosed())return null;for(let u of e.translate(d,r))l||(l=!0,K(t.traceWriter,{phase:"model_ttfb",durationMs:Date.now()-o,resolvedModel:t.currentModel})),yield u}}catch(d){if(t.controller.signal.aborted)return null;if(_l(d)&&n<lE){n++,yield{type:"stream.retry",sessionId:t.initSessionId};let u=Sf(d),p=u??wf(n-1);if(K(t.traceWriter,{phase:"rate_limit",durationMs:p,resolvedModel:t.currentModel,metadata:{source:"stream",reason:u!==void 0?"retry-after":"backoff",attempt:n}}),await Et(p,t.controller.signal),t.controller.signal.aborted)return null;continue}a=d}if(a!==null)return yield{type:"error",error:e.clarifyError(a)},null;if(t.controller.signal.aborted)return null;let c=Fk(r)&&r.toolCallsByIndex.size>0;return r.finishReason===null&&r.assistantText.length===0&&!c?(yield{type:"error",error:new pt("the model stream ended without a finish_reason and without a dispatchable response (no visible answer text and no complete tool call): the response was empty or cut off before any usable content arrived. The turn is incomplete.")},null):{state:r,events:[],text:r.assistantText,needsToolDispatch:c}}}var gE=h(()=>{"use strict";Q();vl();ds();Yo();pe();Al()});import{randomUUID as rB}from"node:crypto";function sB(t){if(t instanceof as||El(t)||_l(t))return!1;let e=ls(t);return e!==void 0&&oB.has(e)}function hE(t,e,n={}){let r=nn(t.apiKey,n.authDeps,t.forceChatgptOAuth??!1),o=n.sessionIdOverride??t.resume??`openai-pending-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,s=typeof t.model=="string"?t.model:"gpt-4o-mini",i=Se(s)??s,a={auth:r,model:i,synthesizedSessionId:o,promptStream:e,config:t};return n.baseURL!==void 0&&(a.baseURL=n.baseURL),n.toolDispatcher!==void 0&&(a.toolDispatcher=n.toolDispatcher),n.onPermissionMode!==void 0&&(a.onPermissionMode=n.onPermissionMode),n.mcpManager!==void 0&&(a.mcpManager=n.mcpManager),n.useResponsesApi!==void 0&&(a.useResponsesApi=n.useResponsesApi),t.traceWriter!==void 0&&(a.traceWriter=t.traceWriter),new Ol(a)}var _f,oB,Ol,Af=h(()=>{"use strict";Q();ir();Qp();xr();qe();Tf();le();Vo();Mk();Rr();Yo();nf();of();gl();$();ts();af();pe();is();Qk();yf();Al();jd();Kd();vn();cs();fE();Lr();wl();kf();gE();hf();Al();kf();wl();_f="openai-compatible",oB=new Set([400,404,405,415,422,501]);Ol=class{client;opts;initSessionId;toolDispatcher;onPermissionMode;openAITools;wireMode;traceWriter;priorTurns=[];currentModel;currentPermissionMode;responsesCompactionUnavailable=!1;abort=new Pr;closed=!1;lastUsage=null;autoCompactThreshold;constructor(e){if(this.opts=e,this.initSessionId=e.synthesizedSessionId,this.currentModel=e.model,this.currentPermissionMode=gf(e.config.permissionMode),this.toolDispatcher=e.toolDispatcher,this.onPermissionMode=e.onPermissionMode,this.traceWriter=e.traceWriter,this.autoCompactThreshold=Ir(e.config.autoCompact),this.toolDispatcher){let o=this.toolDispatcher;Array.isArray(o.toolDefs)&&o.toolDefs.length>0&&(this.openAITools=Lk(o.toolDefs))}let n=(e.useResponsesApi??!1)||jk(v.AFK_OPENAI_USE_RESPONSES),r=Wk(e.auth,n);if(this.wireMode=r.mode,e.auth.apiKey===null)this.client=null;else{let o=mE(),s={apiKey:e.auth.apiKey},i=r.baseURL??e.baseURL;i!==void 0&&(s.baseURL=i),r.headers!==void 0&&(s.defaultHeaders=r.headers),this.client=o(s)}}activeOpenAITools(){if(!this.openAITools)return;if(this.currentPermissionMode==="plan")return this.openAITools;let e=this.openAITools.filter(n=>n.function.name!==ze);return e.length>0?e:void 0}async*[Symbol.asyncIterator](){if(yield{type:"session.init",info:{sessionId:this.initSessionId,model:this.currentModel,permissionMode:this.currentPermissionMode,cwd:process.cwd(),tools:this.openAITools?this.openAITools.map(r=>r.function.name):[],slashCommands:[],skills:[],plugins:[],mcpServers:this.opts.mcpManager?.getServerStates().map(r=>({name:r.serverName,status:r.status}))??[],apiKeySource:this.opts.auth.source,version:_f}},this.opts.auth.apiKey===null){yield{type:"error",error:new Error(tf(this.opts.auth))};return}let n=this.opts.promptStream[Symbol.asyncIterator]();try{for(;!this.closed;){let r=await Promise.race([n.next(),this.abort.closedPromise]);if(r===sf)break;let o=r;if(o.done)break;if(yield*this.runTurn(o.value.content),this.autoCompactThreshold!==void 0&&!this.closed){let s=this.lastUsage,i=jn(this.currentModel);if(s!==null&&i>0){let a=ct(s);if(Zo(a,i,this.autoCompactThreshold))try{await this.opts.config.hookRegistry?.dispatch({event:"PreCompact",sessionId:this.initSessionId,trigger:"auto"}),await this.compactHistory("token_threshold")}catch(l){if(!(l instanceof Z))throw l}}}}}catch(r){yield{type:"error",error:r instanceof Error?r:new Error(String(r))}}finally{try{await n.return?.()}catch{}}}async*runTurn(e){let n=this.abort.begin();if(n.signal.aborted)return;let r=Date.now(),o=rB(),s=n.signal.aborted?Date.now():null,i=()=>{s===null&&(s=Date.now())};this.traceWriter&&!n.signal.aborted&&n.signal.addEventListener("abort",i,{once:!0}),K(this.traceWriter,{phase:"loop_start"});try{yield*this._runTurnInner(e,n,r,o)}finally{n.signal.removeEventListener("abort",i),s!==null&&n.signal.reason==="interrupted"&&K(this.traceWriter,{phase:"interrupt_halt",durationMs:Date.now()-s,metadata:{provider:"openai-compatible"}}),K(this.traceWriter,{phase:"loop_end",durationMs:Date.now()-r})}}async*_runTurnInner(e,n,r,o){let s=Ek(this.currentModel);this.priorTurns.push({role:"user",content:Ik(e,{vision:s,model:this.currentModel})});let i={stopReason:null,resultSubtype:"success",isError:!1},a="",l="",c=Pl(this.opts.config.maxToolUseIterations),d=!1,u=0,p=0;for(;;){if(n.signal.aborted){this.abort.clear(n),yield*this.finishTurn(i,r);return}let f=yield*this.runIteration(n,s,d);if(f===null){this.abort.clear(n),(n.signal.aborted||this.closed)&&(yield*this.finishTurn(i,r));return}let m=Dk(f.state);if(i=qo(i,m),i.contextWindowTokens=(m.inputTokens??0)+(m.outputTokens??0),this.lastUsage=i,f.text.length>0&&(a=f.text),l=f.state.reasoningText,!f.needsToolDispatch||d)break;let g=yield*this.dispatchAndAppend(f.state,n.signal,s);if(g){this.abort.clear(n),yield{type:"error",error:new er(g.content)};return}u+=1;{let y=fl(f.state);p+=y.length;let w=y.at(-1),S=w?.name,E;try{E=w?JSON.parse(w.argumentsRaw||"{}"):void 0}catch{E=void 0}let k=w?`${w.name}${rn(w.name,E)}`:"unknown";yield{type:"progress",progress:{taskId:o,description:"Working",summary:`round ${u}: ${k}`,lastToolName:S,totalTokens:i.totalTokens??0,toolUses:p,durationMs:Date.now()-r},sessionId:this.initSessionId}}if(n.signal.aborted){this.abort.clear(n),yield*this.finishTurn(i,r);return}if(Ml(u,c)){d=!0;continue}}if(this.abort.clear(n),a.length>0){let f={role:"assistant",content:a};l.length>0&&(f.reasoning_content=l),this.priorTurns.push(f)}yield{type:"assistant.message",text:a,sessionId:this.initSessionId},yield*this.finishTurn(d?{...i,stopReason:Ft}:i,r)}*finishTurn(e,n){this.lastUsage=e,yield{type:"turn.completed",usage:{...e,durationMs:Date.now()-n},sessionId:this.initSessionId}}clarifyResponsesError(e,n){let r=e instanceof Error?e:new Error(String(e));if(!n||(e&&typeof e=="object"&&"status"in e?e.status:void 0)!==400&&!/\b400\b/.test(r.message))return r;let s,i=e?.error;if(i&&typeof i=="object"){let a=i;typeof a.detail=="string"?s=a.detail:typeof a.message=="string"&&(s=a.message)}return new Error(`ChatGPT/Codex backend rejected model "${this.currentModel}" (HTTP 400). A ChatGPT subscription only serves certain OpenAI models on this backend (gpt-5.6 and gpt-5.5 work; gpt-5, gpt-5.1, gpt-5.2 and *-codex do not). `+(s?`Backend said: ${s}`:"No error body was returned."))}async*runIteration(e,n,r=!1){let o=Pk({config:this.opts.config,...this.opts.config.resumeHistory!==void 0?{resumeHistory:this.opts.config.resumeHistory}:{},priorTurns:this.priorTurns,vision:n});if(o[0]?.role==="system"){let a=this.currentPermissionMode==="plan"?Fi:this.currentPermissionMode==="autonomous"?Li:null;a!==null&&(o[0]={...o[0],content:o[0].content+`
|
|
968
|
+
${w.content}`,isError:!0,...w.truncated===!0?{truncated:!0}:{}}),p.push({call:y,result:w});let E=u.get(y.id),k=typeof E=="number"?Date.now()-E:0,R=w.truncated===!0||w.content.includes("[output truncated");kn(o,xl({toolUseId:y.id,name:y.name,result:w,truncated:R,durationMs:k,subagentId:a})),yield{type:"tool.output",toolUseId:y.id,toolName:y.name,content:w.content,...w.isError===!0?{isError:!0}:{},...w.truncated===!0?{truncated:!0}:{},...w.incomplete===!0?{incomplete:!0}:{},...w.incompleteReason?{incompleteReason:w.incompleteReason}:{},...typeof w.batchIndex=="number"&&typeof w.batchSize=="number"?{batchIndex:w.batchIndex,batchSize:w.batchSize}:{},...w.failureClass?{failureClass:w.failureClass}:{},sessionId:i},w.render?.diff&&(yield{type:"tool.diff",toolUseId:y.id,diff:w.render.diff,sessionId:i})}}s.push($k(t.assistantText,l,t.reasoningText));for(let m of Uk(p))s.push(m);let f=Bk(p,{vision:n});return f&&s.push(f),p.find(m=>m.result.failureClass===Sr)?.result}var fE=h(()=>{"use strict";Q();vf();Ca();cs();Cl();Yo();nf()});function Pl(t){return t!==void 0&&t>0?Math.floor(t):0}function Ml(t,e){return e>0&&t>=e}var Ft,Il,Lr=h(()=>{"use strict";Ft="tool_use_loop_capped",Il="You have reached your tool-use budget for this turn. Do not request any more tools \u2014 give your final answer now using only the information already gathered."});import ZU from"openai";function tB(t){let e={apiKey:t.apiKey};return t.baseURL!==void 0&&(e.baseURL=t.baseURL),t.defaultHeaders!==void 0&&(e.defaultHeaders=t.defaultHeaders),new ZU(e)}function mE(){return eB??tB}var eB,kf=h(()=>{"use strict";eB=null});function Et(t,e){return new Promise(n=>{if(e.aborted){n();return}let r=setTimeout(n,t);r.unref(),e.addEventListener("abort",()=>{clearTimeout(r),n()},{once:!0})})}var ds=h(()=>{"use strict"});async function*Ef(t,e){let n=0;for(;;){let r=pl(),o=Date.now(),s,i=null;for(let d=0;;d++)try{s=await e.createStream(t.controller.signal);break}catch(u){if(t.controller.signal.aborted)return null;if(El(u)&&d<aE){let p=Sf(u),f=p??wf(d);if(K(t.traceWriter,{phase:"rate_limit",durationMs:f,resolvedModel:t.currentModel,metadata:{source:"connection",reason:p!==void 0?"retry-after":"backoff",attempt:d}}),await Et(f,t.controller.signal),t.controller.signal.aborted)return null;continue}i=u;break}if(i!==null)return yield{type:"error",error:e.clarifyError(i)},null;let a=null,l=!1;try{for await(let d of Fr(s,t.controller.signal)){if(t.isClosed())return null;for(let u of e.translate(d,r))l||(l=!0,K(t.traceWriter,{phase:"model_ttfb",durationMs:Date.now()-o,resolvedModel:t.currentModel})),yield u}}catch(d){if(t.controller.signal.aborted)return null;if(_l(d)&&n<lE){n++,yield{type:"stream.retry",sessionId:t.initSessionId};let u=Sf(d),p=u??wf(n-1);if(K(t.traceWriter,{phase:"rate_limit",durationMs:p,resolvedModel:t.currentModel,metadata:{source:"stream",reason:u!==void 0?"retry-after":"backoff",attempt:n}}),await Et(p,t.controller.signal),t.controller.signal.aborted)return null;continue}a=d}if(a!==null)return yield{type:"error",error:e.clarifyError(a)},null;if(t.controller.signal.aborted)return null;let c=Fk(r)&&r.toolCallsByIndex.size>0;return r.finishReason===null&&r.assistantText.length===0&&!c?(yield{type:"error",error:new pt("the model stream ended without a finish_reason and without a dispatchable response (no visible answer text and no complete tool call): the response was empty or cut off before any usable content arrived. The turn is incomplete.")},null):{state:r,events:[],text:r.assistantText,needsToolDispatch:c}}}var gE=h(()=>{"use strict";Q();vl();ds();Yo();pe();Al()});import{randomUUID as rB}from"node:crypto";function sB(t){if(t instanceof as||El(t)||_l(t))return!1;let e=ls(t);return e!==void 0&&oB.has(e)}function hE(t,e,n={}){let r=nn(t.apiKey,n.authDeps,t.forceChatgptOAuth??!1),o=n.sessionIdOverride??t.resume??`openai-pending-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,s=typeof t.model=="string"?t.model:"gpt-4o-mini",i=Se(s)??s,a={auth:r,model:i,synthesizedSessionId:o,promptStream:e,config:t};return n.baseURL!==void 0&&(a.baseURL=n.baseURL),n.toolDispatcher!==void 0&&(a.toolDispatcher=n.toolDispatcher),n.onPermissionMode!==void 0&&(a.onPermissionMode=n.onPermissionMode),n.mcpManager!==void 0&&(a.mcpManager=n.mcpManager),n.useResponsesApi!==void 0&&(a.useResponsesApi=n.useResponsesApi),t.traceWriter!==void 0&&(a.traceWriter=t.traceWriter),new Ol(a)}var _f,oB,Ol,Af=h(()=>{"use strict";Q();ir();Qp();xr();qe();Tf();le();Vo();Mk();Rr();Yo();nf();of();gl();$();ts();af();pe();is();Qk();yf();Al();jd();Kd();vn();cs();fE();Lr();wl();kf();gE();hf();Al();kf();wl();_f="openai-compatible",oB=new Set([400,404,405,415,422,501]);Ol=class{client;opts;initSessionId;toolDispatcher;onPermissionMode;openAITools;wireMode;traceWriter;priorTurns=[];currentModel;currentPermissionMode;responsesCompactionUnavailable=!1;abort=new Pr;closed=!1;lastUsage=null;autoCompactThreshold;constructor(e){if(this.opts=e,this.initSessionId=e.synthesizedSessionId,this.currentModel=e.model,this.currentPermissionMode=gf(e.config.permissionMode),this.toolDispatcher=e.toolDispatcher,this.onPermissionMode=e.onPermissionMode,this.traceWriter=e.traceWriter,this.autoCompactThreshold=Ir(e.config.autoCompact),this.toolDispatcher){let o=this.toolDispatcher;Array.isArray(o.toolDefs)&&o.toolDefs.length>0&&(this.openAITools=Lk(o.toolDefs))}let n=(e.useResponsesApi??!1)||jk(v.AFK_OPENAI_USE_RESPONSES),r=Wk(e.auth,n);if(this.wireMode=r.mode,e.auth.apiKey===null)this.client=null;else{let o=mE(),s={apiKey:e.auth.apiKey},i=r.baseURL??e.baseURL;i!==void 0&&(s.baseURL=i),r.headers!==void 0&&(s.defaultHeaders=r.headers),this.client=o(s)}}activeOpenAITools(){if(!this.openAITools)return;if(this.currentPermissionMode==="plan")return this.openAITools;let e=this.openAITools.filter(n=>n.function.name!==ze);return e.length>0?e:void 0}async*[Symbol.asyncIterator](){if(yield{type:"session.init",info:{sessionId:this.initSessionId,model:this.currentModel,permissionMode:this.currentPermissionMode,cwd:process.cwd(),tools:this.openAITools?this.openAITools.map(r=>r.function.name):[],slashCommands:[],skills:[],plugins:[],mcpServers:this.opts.mcpManager?.getServerStates().map(r=>({name:r.serverName,status:r.status}))??[],apiKeySource:this.opts.auth.source,version:_f}},this.opts.auth.apiKey===null){yield{type:"error",error:new Error(tf(this.opts.auth))};return}let n=this.opts.promptStream[Symbol.asyncIterator]();try{for(;!this.closed;){let r=await Promise.race([n.next(),this.abort.closedPromise]);if(r===sf)break;let o=r;if(o.done)break;if(yield*this.runTurn(o.value.content),this.autoCompactThreshold!==void 0&&!this.closed){let s=this.lastUsage,i=jn(this.currentModel);if(s!==null&&i>0){let a=ct(s);if(Zo(a,i,this.autoCompactThreshold))try{await this.opts.config.hookRegistry?.dispatch({event:"PreCompact",sessionId:this.initSessionId,trigger:"auto"}),await this.compactHistory("token_threshold")}catch(l){if(!(l instanceof Z))throw l}}}}}catch(r){yield{type:"error",error:r instanceof Error?r:new Error(String(r))}}finally{try{await n.return?.()}catch{}}}async*runTurn(e){let n=this.abort.begin();if(n.signal.aborted)return;let r=Date.now(),o=rB(),s=n.signal.aborted?Date.now():null,i=()=>{s===null&&(s=Date.now())};this.traceWriter&&!n.signal.aborted&&n.signal.addEventListener("abort",i,{once:!0}),K(this.traceWriter,{phase:"loop_start"});try{yield*this._runTurnInner(e,n,r,o)}finally{n.signal.removeEventListener("abort",i),s!==null&&n.signal.reason==="interrupted"&&K(this.traceWriter,{phase:"interrupt_halt",durationMs:Date.now()-s,metadata:{provider:"openai-compatible"}}),K(this.traceWriter,{phase:"loop_end",durationMs:Date.now()-r})}}async*_runTurnInner(e,n,r,o){let s=Ek(this.currentModel);this.priorTurns.push({role:"user",content:Ik(e,{vision:s,model:this.currentModel})});let i={stopReason:null,resultSubtype:"success",isError:!1},a="",l="",c=Pl(this.opts.config.maxToolUseIterations),d=!1,u=0,p=0;for(;;){if(n.signal.aborted){this.abort.clear(n),yield*this.finishTurn(i,r);return}let f=yield*this.runIteration(n,s,d);if(f===null){this.abort.clear(n),(n.signal.aborted||this.closed)&&(yield*this.finishTurn(i,r));return}let m=Dk(f.state);if(i=qo(i,m),i.contextWindowTokens=(m.inputTokens??0)+(m.outputTokens??0),this.lastUsage=i,f.text.length>0&&(a=f.text),l=f.state.reasoningText,!f.needsToolDispatch||d)break;let g=yield*this.dispatchAndAppend(f.state,n.signal,s);if(g){this.abort.clear(n),yield{type:"error",error:new er(g.content)};return}u+=1;{let y=fl(f.state);p+=y.length;let w=y.at(-1),S=w?.name,E;try{E=w?JSON.parse(w.argumentsRaw||"{}"):void 0}catch{E=void 0}let k=w?`${w.name}${rn(w.name,E)}`:"unknown";yield{type:"progress",progress:{taskId:o,description:"Working",summary:`round ${u}: ${k}`,lastToolName:S,totalTokens:i.totalTokens??0,toolUses:p,durationMs:Date.now()-r},sessionId:this.initSessionId}}if(n.signal.aborted){this.abort.clear(n),yield*this.finishTurn(i,r);return}if(Ml(u,c)){d=!0;continue}}if(this.abort.clear(n),a.length>0){let f={role:"assistant",content:a};l.length>0&&(f.reasoning_content=l),this.priorTurns.push(f)}yield{type:"assistant.message",text:a,sessionId:this.initSessionId},yield*this.finishTurn(d?{...i,stopReason:Ft}:i,r)}*finishTurn(e,n){this.lastUsage=e,yield{type:"turn.completed",usage:{...e,durationMs:Date.now()-n},sessionId:this.initSessionId}}clarifyResponsesError(e,n){let r=e instanceof Error?e:new Error(String(e));if(!n||(e&&typeof e=="object"&&"status"in e?e.status:void 0)!==400&&!/\b400\b/.test(r.message))return r;let s,i=e?.error;if(i&&typeof i=="object"){let a=i;typeof a.detail=="string"?s=a.detail:typeof a.message=="string"&&(s=a.message)}return new Error(`ChatGPT/Codex backend rejected model "${this.currentModel}" (HTTP 400). A ChatGPT subscription only serves certain OpenAI models on this backend (gpt-5.6 and gpt-5.5 work; gpt-5, gpt-5.1, gpt-5.2 and *-codex do not). `+(s?`Backend said: ${s}`:"No error body was returned."))}async*runIteration(e,n,r=!1){let o=Pk({config:this.opts.config,...this.opts.config.resumeHistory!==void 0?{resumeHistory:this.opts.config.resumeHistory}:{},priorTurns:this.priorTurns,vision:n});if(o[0]?.role==="system"){let a=this.currentPermissionMode==="plan"?Fi:this.currentPermissionMode==="autonomous"?Li:null;a!==null&&(o[0]={...o[0],content:o[0].content+`
|
|
969
969
|
|
|
970
970
|
`+a})}r&&o.push({role:"user",content:Il});let s=r?void 0:this.activeOpenAITools(),i={controller:e,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&&Xo(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=Sl({model:this.currentModel,messages:o,activeTools:s,maxOutputTokens:this.opts.config.maxOutputTokens,effort:this.opts.config.effort,isChatGptBackend:a});return yield*Ef(i,{createStream:async c=>await this.client.responses.create(l,{signal:c}),translate:(c,d)=>ml(c,d,this.initSessionId),clarifyError:c=>this.clarifyResponsesError(c,a)})}else{let a=rE({model:this.currentModel,messages:o,activeTools:s,maxOutputTokens:this.opts.config.maxOutputTokens,effort:this.opts.config.effort});return yield*Ef(i,{createStream:async l=>await this.client.chat.completions.create(a,{signal:l}),translate:(l,c)=>Ok(l,c,this.initSessionId),clarifyError:l=>l instanceof Error?l:new Error(String(l))})}}async*dispatchAndAppend(e,n,r){return yield*pE({state:e,signal:n,vision:r,toolDispatcher:this.toolDispatcher,traceWriter:this.traceWriter,priorTurns:this.priorTurns,sessionId:this.initSessionId,subagentId:this.opts.config.subagentId})}async interrupt(){this.abort.requestAbort("interrupted")}async compact(){return this.compactHistory("manual")}async compactHistory(e){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 s=Dr(v.AFK_MICROCOMPACT_TOOL_RESULT_BYTES,v.AFK_MICROCOMPACT_KEEP_LAST),{blocksCleared:i,bytesReclaimed:a}=ff(this.priorTurns,s);return i>0?{compacted:!1,reason:"microcompacted",messagesBefore:n,messagesAfter:this.priorTurns.length,microcompaction:{blocksCleared:i,bytesReclaimed:a}}:{compacted:!1,reason:"responses-compaction-unavailable",messagesBefore:n,messagesAfter:n}}let r=v.AFK_COMPACT_MODEL??this.currentModel,o=es(ct(this.lastUsage??{}),jn(this.currentModel));return Xk({priorTurns:this.priorTurns,usedFraction:o,shrinkAtFraction:Yk(),summarize:(s,i)=>this.wireMode==="responses"?this.summarizeViaResponses(s,i,r):kl({client:this.client,model:r,system:ns,user:ss(s),maxTokens:1024,signal:i}),isClosed:this.closed,isIdle:this.abort.isIdle(),beginAbort:()=>this.abort.begin(),clearAbort:s=>this.abort.clear(s),trigger:e,traceWriter:this.traceWriter})}async summarizeViaResponses(e,n,r){try{return await sE({client:this.client,model:r,system:ns,user:ss(e),isChatGptBackend:this.opts.auth.source==="chatgpt-oauth",maxTokens:1024,signal:n})}catch(o){if(!n.aborted&&sB(o)){this.responsesCompactionUnavailable=!0;let s=ls(o);K(this.traceWriter,{phase:"compaction_disabled",metadata:{wire:"responses",reason:"responses-compaction-unavailable",error:o instanceof Error?o.message:String(o),...s!==void 0?{status:s}:{}}})}throw o}}async setModel(e){e!==void 0&&(this.currentModel=Se(e)??e)}async setPermissionMode(e){this.currentPermissionMode=gf(e);let n=rt(this.currentPermissionMode);this.toolDispatcher?.setAllowAll?.(n),this.onPermissionMode?.(this.currentPermissionMode)}setCwd(e){this.toolDispatcher?.setResolveBase?.(e)}async supportedCommands(){return Dl()}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 e=this.lastUsage,n=Jo(this.currentModel),r;if(e&&n>0){let i=ct(e);r=Math.min(100,Math.max(0,i/n*100))}let{totalTokens:o,apiUsage:s}=Qo(e);return{tools:[],agents:[],isAutoCompactEnabled:this.autoCompactThreshold!==void 0,apiUsage:s,totalTokens:o,...r!==void 0?{percentage:r}:{},maxTokens:n}}async mcpServerStatus(){return this.opts.mcpManager?this.opts.mcpManager.getServerStates().map(e=>({name:e.serverName,status:e.status})):[]}async accountInfo(){return{authSource:this.opts.auth.source}}async rewindFiles(e,n){return{canRewind:!1,error:`${_f} provider does not support file checkpoint rewind yet.`}}close(){this.closed=!0,this.abort.requestAbort("closed"),this.abort.markClosed(),O(`\u{1F7E2} ${_f}: closed`)}}});function Rf(){for(let t of xf)bo(t)}function iB(){if(yE)return;yE=!0,bE=()=>Rf(),process.on("exit",bE);let t=process.listenerCount("SIGINT")>0;wE=()=>{Rf(),t||process.exit(130)},process.on("SIGINT",wE);let e=process.listenerCount("SIGTERM")>0;SE=()=>{Rf(),e||process.exit(143)},process.on("SIGTERM",SE)}function vE(t){iB(),xf.add(t)}function kE(t){xf.delete(t)}var xf,yE,bE,wE,SE,EE=h(()=>{"use strict";Re();xf=new Set,yE=!1,bE=null,wE=null,SE=null});import{randomUUID as aB}from"node:crypto";function Cf(t,e){return(t===void 0||t===0)&&e===void 0}function us(t){let e=t.sessionId??t.resume;if(e!==void 0)return{id:e,memoized:t.memoized};if(!Cf(t.depth,t.parentSessionId))return{id:void 0,memoized:t.memoized};if(t.surface===void 0||!lB.has(t.surface))return{id:void 0,memoized:t.memoized};let n=t.memoized??aB();return{id:n,memoized:n}}function ps(t){let e=t.sessionId;if(!Cf(t.depth,t.parentSessionId)||e===void 0)return t.currentPresenceSessionId;if(t.currentPresenceSessionId===e)return e;let n=t.currentPresenceSessionId;n!==null&&(O(`\u2691 presence: advertised id changed ${n} \u2192 ${e} \u2014 rewriting`),kE(n),bo(n));let r=t.runtimeStateSource.getWorkspace();return Zd({sessionId:e,surface:t.surface,actor:jt(t.depth),cwd:t.cwd??process.cwd(),startedAt:new Date().toISOString(),model:{provider:t.providerName,name:t.model},workspace:r,pid:process.pid}),vE(e),e}var lB,If=h(()=>{"use strict";Re();fn();le();EE();lB=new Set(["cli"])});var Pf,Oe,cB,fs=h(()=>{"use strict";Sa();Ea();Ma();xa();ir();Yp();vn();Ye();xt();Xp();on();Af();yf();Re();If();Vo();Af();Pf="openai-compatible",Oe=class{name=Pf;providerOpts;memoryStore;schemas;_sharedReadRoots;_sharedWriteRoots;_currentPermissionMode="default";_initialResolveBase;_presenceSessionId=null;_mintedSessionId=null;constructor(e={}){this.providerOpts=e,this.memoryStore=e.memoryStore??new Le;let n=[...wt];e.subagentExecutor&&n.push(e.subagentExecutor.describeAgentTool?.()??je),e.skillExecutor&&n.push(Pn),e.composeExecutor&&n.push(Mn),e.readOnlyMemory===!0?n.push(Xn):n.push(...Wt),n.push(ot);for(let r of e.customTools??[])n.some(o=>o.name===r.schema.name)||n.push(r.schema);this.schemas=n}query(e){let n=e.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,s=typeof n.model=="string"?n.model:String(n.model),i=ho({surface:this.providerOpts.surface??"cli",cwd:n.cwd??process.cwd(),modelName:s,providerName:Pf,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 St?o.toolDefs.map(S=>S.name):[],getMcpTools:()=>this.providerOpts.mcpManager?.getMcpTools()??[],getSubagents:()=>this.providerOpts.subagentExecutor?this.providerOpts.subagentExecutor.getSubagentsLite():{active:[],backgroundJobs:[]}});o=this.providerOpts.tools?yo(this.providerOpts.tools,i):this.buildDispatcher(r,{...n.cwd!==void 0?{cwd:n.cwd}:{},...this._sharedReadRoots!==void 0?{readRoots:this._sharedReadRoots}:{},...this._sharedWriteRoots!==void 0?{writeRoots:this._sharedWriteRoots}:{},...n.sessionId!==void 0?{sessionId:n.sessionId}:{},...n.parentSessionId!==void 0?{parentSessionId:n.parentSessionId}:{},...n.subagentId!==void 0?{subagentId:n.subagentId}:{},...n.subagentToolOutputCapBytes!==void 0?{subagentToolOutputCapBytes:n.subagentToolOutputCapBytes}:{},...n.traceWriter!==void 0?{traceWriter:n.traceWriter}:{},runtimeStateSource:i,...n.isSkillDispatch?{isSkillDispatch:!0}:{},...n.isNonInteractive?{isNonInteractive:!0}:{},...n.hookRegistry!==void 0?{hookRegistry:n.hookRegistry}:{},...n.planExitControls!==void 0?{planExitControls:n.planExitControls}:{}});let a=us({sessionId:n.sessionId,resume:n.resume,depth:n.depth,parentSessionId:n.parentSessionId,surface:this.providerOpts.surface??"cli",memoized:this._mintedSessionId});this._mintedSessionId=a.memoized;let l={};a.id!==void 0&&(l.sessionIdOverride=a.id);let c=n.openaiBaseUrl??this.providerOpts.baseURL;c!==void 0&&(l.baseURL=c),l.toolDispatcher=o,l.onPermissionMode=S=>{this._currentPermissionMode=S},this.providerOpts.mcpManager!==void 0&&(l.mcpManager=this.providerOpts.mcpManager),this._presenceSessionId=ps({depth:n.depth,parentSessionId:n.parentSessionId,sessionId:a.id,currentPresenceSessionId:this._presenceSessionId,runtimeStateSource:i,surface:this.providerOpts.surface??"cli",cwd:n.cwd,providerName:Pf,model:s});let d=go({cwd:n.cwd??process.cwd(),...n.sessionId!==void 0?{sessionId:n.sessionId}:{},surface:this.providerOpts.surface??"cli",...n.depth!==void 0?{depth:n.depth}:{},...n.maxDepth!==void 0?{maxDepth:n.maxDepth}:{},workspace:i.getWorkspace()}),u=cl(n.isSkillDispatch),p=dl(this.providerOpts.readOnlyMemory),f=this.providerOpts.skillExecutor?Fl(void 0,{...typeof n.cwd=="string"&&n.cwd.length>0?{cwd:n.cwd}:{},...typeof n.skillDispatchName=="string"&&n.skillDispatchName.length>0?{excludeName:n.skillDispatchName}:{}}):"",m=typeof n.hotMemory=="string"?n.hotMemory:"",g=typeof n.systemPrompt=="string"?n.systemPrompt:void 0,y=[u];g!==void 0&&g.length>0&&y.push(g),y.push(p),m.length>0&&y.push(m),y.push(d),f.length>0&&y.push(f);let w={...n,systemPrompt:y.join(`
|
|
971
971
|
|
|
@@ -1123,7 +1123,7 @@ ${e}`:s,a=new X({parentAbortSignal:n?.abortSignal,...r?.traceWriter!==void 0?{tr
|
|
|
1123
1123
|
`),0}let r=0;for(let o of n){if(!o.isDirectory()||o.name.startsWith("_")||o.name.startsWith("."))continue;let s;try{s=pj(LA(t,o.name,"SKILL.md"),"utf-8")}catch(c){let d=c;d.code!=="ENOENT"&&process.stderr.write(`[afk] skipping skill ${o.name}: ${d.message}
|
|
1124
1124
|
`);continue}let i=mj(s,o.name);if(!i)continue;i.dir=LA(t,o.name);let l={name:hj(i.name,e),description:i.description,handler:gj(i),origin:e};i.argumentHint&&(l.argumentHint=i.argumentHint),i.flags&&i.flags.length>0&&(l.flags=i.flags),i.context!=="fork"&&(l.context="load",l.loadBody=i.body.replace(/\$\{?SKILL_ROOT\}?/g,()=>i.dir)),Pe(l),r++}return r}var NA,mm=h(()=>{"use strict";B();mt();FA();we();NA=1024});var $A=h(()=>{"use strict";oA();sA();IA();PA();MA();mm()});import{isAbsolute as yj,resolve as bj}from"path";import{pathToFileURL as wj}from"url";async function BA(t,e={}){let n=e.importer??(r=>import(r));for(let r of t){if(r.main===void 0)continue;let o=yj(r.main)?r.main:bj(r.path,r.main);if(!UA.has(o)){UA.add(o);try{let i=(await n(wj(o).href))?.default;typeof i=="function"&&await i(e.pluginApi)}catch(s){e.onError?.(r,s)}}}}var UA,HA=h(()=>{"use strict";UA=new Set});import{existsSync as Sj,readFileSync as vj}from"fs";import{join as kj}from"path";function jA(t){let e=kj(t,".claude-plugin","plugin.json");if(!Sj(e))return{name:null,version:null};try{let n=JSON.parse(vj(e,"utf8"));return{name:typeof n.name=="string"&&n.name.trim()?n.name.trim():null,version:typeof n.version=="string"&&n.version.trim()?n.version.trim():null}}catch{return{name:null,version:null}}}var WA=h(()=>{"use strict"});import{z as M}from"zod";var As,Ej,_j,gm,KA,GA,qA,zA,Ts,uc=h(()=>{"use strict";As=1,Ej=M.object({toolName:M.string(),toolUseId:M.string().optional(),input:M.string().optional(),inputRaw:M.string().optional(),result:M.string().optional(),isError:M.boolean().optional()}).passthrough(),_j=M.object({user:M.string().default(""),assistant:M.string().default(""),timestamp:M.number().optional(),toolEvents:M.array(Ej).optional()}).passthrough(),gm=M.object({sessionId:M.string().optional(),name:M.string().optional(),source:M.enum(["cli","telegram"]).optional(),telegramChatId:M.number().optional(),model:M.string(),startedAt:M.number(),savedAt:M.number(),totalTurns:M.number(),totalCostUsd:M.number().optional(),totalTokens:M.number().optional(),totalDurationMs:M.number().optional(),turns:M.array(_j).default([]),forkedFrom:M.string().optional(),forkedAt:M.number().optional()}).passthrough(),KA=M.enum(["fully_achieved","partially_achieved","not_achieved","aborted"]),GA=M.enum(["not_persisted","persisted","unknown"]),qA=M.object({tool:M.string(),label:M.string().optional()}),zA=M.object({files_written:M.number().int(),files_edited:M.number().int(),bash_commands:M.number().int(),commits:M.number().int(),mutated:M.boolean()}),Ts=M.object({facet_version:M.number().int(),session_id:M.string(),source:M.enum(["cli","telegram","unknown"]),model:M.string(),derived_at:M.string(),derived_from:M.literal("afk-session"),source_session_path:M.string(),source_session_mtime_ms:M.number(),subagent_persistence:GA,start_time:M.string(),end_time:M.string(),duration_minutes:M.number(),underlying_goal:M.string(),first_prompt:M.string(),goal_categories:M.record(M.string(),M.number()),session_type:M.string(),brief_summary:M.string(),total_turns:M.number().int(),user_message_count:M.number().int(),assistant_message_count:M.number().int(),tool_counts:M.record(M.string(),M.number()),commands:M.array(M.string()),skills:M.array(M.string()),subagents:M.array(qA),tool_errors:M.number().int(),tool_error_categories:M.record(M.string(),M.number()),friction_counts:M.record(M.string(),M.number()),friction_detail:M.string(),outcome:KA,primary_success:M.string(),world_changes:zA,decisions:M.array(M.string()),evidence_pointers:M.array(M.string())}).passthrough()});import{basename as Aj}from"path";function Pj(t){if(t)try{let e=JSON.parse(t);return e&&typeof e=="object"?e:void 0}catch{return}}function pc(t){return typeof t=="string"?t:void 0}function fc(t,e){let n=t.replace(/\s+/g," ").trim();return n.length>e?`${n.slice(0,e-1)}\u2026`:n}function Mj(t){return t.replace(/[-_]+/g," ").trim()}function Oj(t,e){return VA.test(t)?"slash_command":e==="telegram"?"chat":"task"}function Dj(t){let e=new Map,n=[];for(let r of t)r.toolUseId===void 0?n.push(r):e.set(r.toolUseId,r);return[...e.values(),...n]}function Rs(t,e={}){let n=t.turns??[],r=Dj(n.flatMap(N=>N.toolEvents??[])),o={},s={},i=[],a=[],l=[],c=0,d=0,u=0,p=0,f=0;for(let N of r){let P=N.toolName;o[P]=(o[P]??0)+1,N.isError===!0&&(c+=1,s[P]=(s[P]??0)+1);let F=Pj(N.inputRaw??N.input);if(P==="write_file"&&(d+=1),P==="edit_file"&&(u+=1),P==="bash"){p+=1;let j=pc(F?.command)??N.input;j&&Ij.test(j)&&(f+=1)}if(Rj.has(P)){let j=pc(F?.file_path);j&&!l.includes(j)&&l.length<Cj&&l.push(j)}if(Tj.has(P)){let j;P==="skill"?(j=pc(F?.name),j&&!a.includes(j)&&a.push(j)):P==="agent"?j=pc(F?.id_prefix):j="compose",i.push(j?{tool:P,label:j}:{tool:P})}}let m=n[0]?.user??"",g=t.source??"cli",y=Oj(m,g),w=[];for(let N of n){let F=VA.exec(N.user??"")?.[1];F&&!w.includes(F)&&w.push(F)}let S=n.filter(N=>(N.user??"").trim().length>0).length,E=n.filter(N=>(N.assistant??"").trim().length>0).length,k=[...n].reverse().find(N=>(N.assistant??"").trim().length>0)?.assistant??"",R;n.length===0?R="aborted":k.trim().length===0?R="partially_achieved":R="fully_achieved";let C=R==="fully_achieved"||R==="partially_achieved"?fc(k||m||y,160)||y:"none",A=c>0?`${c} tool error(s): ${Object.entries(s).map(([N,P])=>`${N}\xD7${P}`).join(", ")}`:"",_=t.name?Mj(t.name):fc(m,80),x=fc(k||m,xj),I=fc(_?`${_} \u2014 ${x}`:x,400)||"empty session",L=t.sessionId??(e.sourceSessionPath?Aj(e.sourceSessionPath,".json"):"unknown"),z=t.totalDurationMs&&t.totalDurationMs>0?t.totalDurationMs:Math.max(0,t.savedAt-t.startedAt),D=e.sourceSessionPath?[...l,e.sourceSessionPath]:l,H={facet_version:As,session_id:L,source:g==="telegram"?"telegram":"cli",model:t.model,derived_at:(e.derivedAt??new Date).toISOString(),derived_from:"afk-session",source_session_path:e.sourceSessionPath??"",source_session_mtime_ms:e.sourceSessionMtimeMs??t.savedAt,subagent_persistence:"not_persisted",start_time:new Date(t.startedAt).toISOString(),end_time:new Date(t.savedAt).toISOString(),duration_minutes:Number((z/6e4).toFixed(2)),underlying_goal:m.slice(0,JA),first_prompt:m.slice(0,JA),goal_categories:{[y]:1},session_type:y,brief_summary:I,total_turns:n.length,user_message_count:S,assistant_message_count:E,tool_counts:o,commands:w,skills:a,subagents:i,tool_errors:c,tool_error_categories:s,friction_counts:{...s},friction_detail:A,outcome:R,primary_success:C,world_changes:{files_written:d,files_edited:u,bash_commands:p,commits:f,mutated:d>0||u>0||f>0},decisions:[],evidence_pointers:D};return Ts.parse(H)}var Tj,Rj,JA,xj,Cj,Ij,VA,hm=h(()=>{"use strict";uc();Tj=new Set(["agent","compose","skill"]),Rj=new Set(["read_file","write_file","edit_file"]),JA=1e3,xj=240,Cj=50,Ij=/\bgit\s+commit(?![\w-])/,VA=/^\s*\/([a-zA-Z][\w-]*)/});import{existsSync as mc,mkdirSync as Fj,readFileSync as YA,readdirSync as Lj,renameSync as Nj,statSync as $j,writeFileSync as Uj}from"fs";import{basename as Bj,dirname as Hj,join as XA}from"path";function QA(t,e){return oi(t),XA(e,`${t}.json`)}function jj(t,e){return oi(t),XA(e,`${t}.json`)}function gc(t,e=Ae()){let n=QA(t,e);if(mc(n))try{let r=JSON.parse(YA(n,"utf8")),o=gm.safeParse(r);return o.success?o.data:void 0}catch{return}}function Wj(t){if(mc(t))try{let e=JSON.parse(YA(t,"utf8")),n=Ts.safeParse(e);return n.success?n.data:void 0}catch{return}}function Kj(t,e){Fj(Hj(t),{recursive:!0});let n=`${t}.${process.pid}.tmp`;Uj(n,`${JSON.stringify(e,null,2)}
|
|
1125
1125
|
`,"utf8"),Nj(n,t)}function Gj(t,e){return t.facet_version===As&&t.source_session_mtime_ms===e}function ym(t,e={}){let n=e.sessionsDir??Ae(),r=e.cacheDir??Tg(),o=QA(t,n);if(!mc(o))return;let s=$j(o).mtimeMs,i=jj(t,r);if(!e.force){let c=Wj(i);if(c&&Gj(c,s))return c}let a=gc(t,n);if(!a)return;let l=Rs(a,{sourceSessionPath:o,sourceSessionMtimeMs:s});return Kj(i,l),l}function bm(t={}){let e=t.sessionsDir??Ae();return mc(e)?Lj(e).filter(n=>n.endsWith(".json")).map(n=>Bj(n,".json")):[]}var ZA=h(()=>{"use strict";B();hm();uc()});var eT=h(()=>{"use strict";uc();hm();ZA()});import{readFileSync as qj}from"node:fs";import{join as zj}from"node:path";function Fl(t,e){let n=Ss(t,e),r=e?.excludeName,o=r!==void 0&&r.length>0?n.filter(i=>i.name!==r&&!i.name.endsWith(`:${r}`)):n;if(o.length===0)return"";let s=[];for(let i of o){let a=i.argumentHint?`${i.argumentHint}`:"",l=a?`- \`${i.name} ${a}\`: ${i.description}`:`- ${i.name}: ${i.description}`;s.push(l),i.whenToUse&&s.push(` When to use: ${i.whenToUse}`)}return["Available skills (invoke via the `skill` tool):","","Each skill either dispatches one or more context-isolated subagents (delegation \u2014 preserves the main session's context) or loads its instructions directly into your current context (`load` mode). Calling `skill` is the entry point for both; the executor picks the mode per skill. Prefer a skill over inline investigation when the task shape matches.","",...s].join(`
|
|
1126
|
-
`)}function Ss(t,e){let n=[],r=new Set,o=v.AFK_INTERNAL==="1",s=Ro(To());_s(Zs(),"user"),tb("project"),_s(xg(e?.cwd),"project");for(let{dir:a,origin:l}of s.skillRoots)_s(a,l);for(let a of vu()){let l=Pt(a);Su(l,o)&&(n.push({name:a,description:l.description,source:l.origin==="user"?"user":l.origin==="project"?"project":l.origin?.startsWith("imported:")?"imported":"builtin",argumentHint:l.argumentHint,whenToUse:l.whenToUse}),r.add(a))}let i=t??hc(e);for(let a of i){if(a.type!=="local")continue;let l=Ff(a.path);for(let c of l)!c.name||r.has(c.name)||Su({audience:c.audience},o)&&(n.push({name:c.name,description:c.description??`Skill from plugin at ${a.path}`,source:"plugin"}),r.add(c.name))}return n}function vs(t,e){let n=new Map,r=t??hc(e);for(let o of r){if(o.type!=="local")continue;let s=Ff(o.path);for(let i of s)i.name&&i.body&&i.body.length>0&&!n.has(i.name)&&n.set(i.name,{body:i.body,pluginPath:o.path,...i.allowedTools!==void 0?{allowedTools:i.allowedTools}:{},...i.context!==void 0?{context:i.context}:{},...i.readOnly===!0?{readOnly:!0}:{},...i.model!==void 0?{model:i.model}:{}})}return n}function tT(t){let e=t??hc(),n=[],r=new Set;for(let o of e){if(o.type!=="local")continue;let s=jA(o.path).name;if(s!==null)for(let i of Gl(zj(o.path,"agents"))){let a;try{a=qj(i,"utf8")}catch{continue}let l=Gn(a);if(l===void 0)continue;let c=`${s}:${l.name}`;r.has(c)||(r.add(c),n.push({name:c,definition:l.definition,source:`plugin:${s}`,filePath:i,...l.bashReadOnly===!0?{bashReadOnly:!0}:{},...l.ignoredKeys!==void 0?{ignoredKeys:l.ignoredKeys}:{}}))}}return n}function hc(t){return[...Nt(Cg(t?.cwd)),...Nt(),...Nt(Pg()),...Ro(To()).pluginRoots.flatMap(({dir:e,binary:n})=>Nt(e,{trustAll:!0,sourceEnabled:By(n)}))]}async function nT(){await BA(hc(),{pluginApi:{registerSkill:Pe,listSkills:vu,getSkill:Pt,loadSkillPrompts:fe,env:v,SubagentManager:X,describeFailure:_e,discoverPluginSkillBodies:vs,getAgentFrameworkDir:nt,getSkillsDir:Zs,getSessionsDir:Ae,getOrDeriveFacet:ym,listSessionIds:bm,deriveSessionFacet:Rs,loadStoredSession:gc}})}var on=h(()=>{"use strict";$A();mt();Je();mm();ac();HA();hs();WA();ys();Gf();we();Ce();eT();B();$();Vi()});function Dl(){try{let t=Ss();return Promise.resolve(t.map(e=>{let n={name:e.name,description:e.description};return e.argumentHint&&(n.argumentHint=e.argumentHint),n}))}catch{return Promise.resolve([])}}var Tf=h(()=>{"use strict";on()});function yc(t){if(t.length===0)return;let e=t[t.length-1];if(!e||e.role!=="assistant"||typeof e.content=="string")return;let n=e.content,r=[];for(let s of n)s.type==="tool_use"&&typeof s.id=="string"&&r.push(s.id);if(r.length===0)return;let o={role:"user",content:r.map(s=>({type:"tool_result",tool_use_id:s,content:"Tool call interrupted before completing \u2014 no result recorded.",is_error:!0}))};t.push(o)}var wm=h(()=>{"use strict"});function rT(t){return{messages:t.initialMessages?[...t.initialMessages]:[],currentModel:t.model,requestedModel:t.requestedModel??t.model,currentPermissionMode:t.permissionMode,userSystem:t.userSystem,toolDispatcher:t.toolDispatcher,lastUsage:null,closed:!1,autoCompactThreshold:t.autoCompactThreshold}}var oT=h(()=>{"use strict"});function Vj(t,e,n,r,o){let s=Jj.get(t);if(!s)return;let i=1e6,l=Math.max(0,e-r-o)/i*s.inputPerMTok,c=n/i*s.outputPerMTok,d=s.cacheWritePerMTok??s.inputPerMTok*1.25,u=s.cacheReadPerMTok??s.inputPerMTok*.1,p=o/i*d,f=r/i*u;return l+c+p+f}function sT(t,e,n){if(!t)return{stopReason:e??null};let r={inputTokens:t.input_tokens,outputTokens:t.output_tokens,stopReason:e??null};if(t.cache_read_input_tokens!=null&&(r.cachedInputTokens=t.cache_read_input_tokens),t.cache_creation_input_tokens!=null&&(r.cacheCreationTokens=t.cache_creation_input_tokens),r.totalTokens=(t.input_tokens??0)+(t.output_tokens??0),n){let o=Vj(n,t.input_tokens??0,t.output_tokens??0,t.cache_read_input_tokens??0,t.cache_creation_input_tokens??0);o!==void 0&&(r.totalCostUsd=o)}return r}var Jj,Sm=h(()=>{"use strict";Qp();Jj=new Map([["claude-sonnet-5",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-opus-5",{inputPerMTok:5,outputPerMTok:25,cacheWritePerMTok:6.25,cacheReadPerMTok:.5}],["claude-sonnet-4-5-20250929",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-opus-4-5-20250929",{inputPerMTok:15,outputPerMTok:75,cacheWritePerMTok:18.75,cacheReadPerMTok:1.5}],["claude-haiku-4-5-20250929",{inputPerMTok:1,outputPerMTok:5,cacheWritePerMTok:1.25,cacheReadPerMTok:.1}],["claude-haiku-4-5-20251001",{inputPerMTok:1,outputPerMTok:5,cacheWritePerMTok:1.25,cacheReadPerMTok:.1}],["claude-3-7-sonnet-20250219",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-3-5-sonnet-20241022",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-3-5-sonnet-20240620",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-3-5-haiku-20241022",{inputPerMTok:.8,outputPerMTok:4,cacheWritePerMTok:1,cacheReadPerMTok:.08}],["claude-3-opus-20240229",{inputPerMTok:15,outputPerMTok:75,cacheWritePerMTok:18.75,cacheReadPerMTok:1.5}],["claude-3-sonnet-20240229",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-3-haiku-20240307",{inputPerMTok:.25,outputPerMTok:1.25,cacheWritePerMTok:.3,cacheReadPerMTok:.03}]])});function xs(t){return t>2147483647?2147483647:t}var vm=h(()=>{"use strict"});function aT(){let t=v.AFK_MODEL_TTFB_TIMEOUT_MS;if(t===void 0||t.trim()==="")return iT;let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<0?iT:xs(e)}function lT(t){return typeof t!="number"||!Number.isFinite(t)||t<=0?void 0:(t<Qj?t:Zj)+Xj}function cT(t,e){if(e<=0)return{signal:t,timedOut:()=>!1,firstByteSeen:()=>{},extend:()=>{},dispose:()=>{}};let n=new AbortController,r=AbortSignal.any([t,n.signal]),o=!1,s=!1,i=Date.now()+e,a,l=u=>{a=setTimeout(()=>{o=!0,n.abort(new Error(Yj))},xs(u)),a.unref()};l(e);let c=()=>{s||(s=!0,clearTimeout(a))};return{signal:r,timedOut:()=>o,firstByteSeen:c,extend:u=>{s||o||typeof u!="number"||!Number.isFinite(u)||u<=0||(i+=u,clearTimeout(a),l(Math.max(1,i-Date.now())))},dispose:c}}var iT,Yj,Xj,Qj,Zj,km=h(()=>{"use strict";$();vm();iT=18e4;Yj="model_ttfb_timeout",Xj=3e4,Qj=6e4,Zj=8e3});function uT(){let t=v.AFK_MODEL_STALL_TIMEOUT_MS;if(t===void 0||t.trim()==="")return dT;let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<0?dT:xs(e)}function fT(t){return t instanceof Error&&t.message===pT}function Em(t){return new Error(`Model stream stalled: no output for ${Math.round(t/1e3)}s after the response had already started streaming. The round was aborted rather than left hanging (issue #762: two sessions hung 38 and 63 minutes with no terminal event). A round that keeps producing output is never cut off, no matter how long it runs. Raise AFK_MODEL_STALL_TIMEOUT_MS, or set it to 0 to disable this bound.`)}function mT(t,e,n){if(e<=0)return{signal:t,timedOut:()=>!1,progress:()=>{},dispose:()=>{}};let r=new AbortController,o=AbortSignal.any([t,r.signal]),s,i=!1,a=!1,l=u=>{if(!(a||i)){i=!0,s=void 0;try{n?.({stallTimeoutMs:e,elapsedSinceLastProgressMs:Date.now()-u})}catch{}r.signal.aborted||r.abort(new Error(pT))}};return{signal:o,timedOut:()=>i,progress:()=>{if(a||i)return;s!==void 0&&clearTimeout(s);let u=Date.now(),p=setTimeout(()=>l(u),e);p.unref(),s=p},dispose:()=>{a||(a=!0,s!==void 0&&clearTimeout(s),s=void 0)}}}var dT,pT,bc=h(()=>{"use strict";$();vm();dT=12e5;pT="model_stream_stall_timeout"});function gT(t){if(!("status"in t))return!1;let e=t.status;return e===529||e===503}function Cs(t){if(t===null||typeof t!="object")return!1;let e=t;if(e.status===529||e.status===503)return!0;let n=e.error;if(n===null||typeof n!="object")return!1;let r=n;return((r.error!==null&&typeof r.error=="object"?r.error.type:void 0)??r.type)==="overloaded_error"}var wc,Is=h(()=>{"use strict";wc=class{overloadRetries=0;streamIncompleteRetries=0;ttfbRetried=!1;canRetryOverload(){return this.overloadRetries<3}canRetryStreamIncomplete(){return this.streamIncompleteRetries<2}canRetryTtfb(){return!this.ttfbRetried}reset(){this.overloadRetries=0,this.streamIncompleteRetries=0,this.ttfbRetried=!1}}});async function*tW(t,e){K(t.traceWriter,{phase:"ttfb_timeout",durationMs:Date.now()-e,metadata:{reason:"ttfb-timeout",source:"first-byte",resolvedModel:t.model}}),yield{type:"stream.retry",sessionId:t.ctx.sessionId}}async function*Am(t,{input:e,turn:n,retry:r,requestStartedAt:o}){return t==="ttfb"?(yield*tW(e,o),r.ttfbRetried=!0,"continue"):t==="overload"?(r.overloadRetries+=1,K(e.traceWriter,{phase:"rate_limit",metadata:{reason:"overloaded",source:"mid-stream",attempt:r.overloadRetries}}),yield{type:"stream.retry",sessionId:e.ctx.sessionId},yield*hT(ca(5e3*Math.pow(2,r.overloadRetries-1)),e,n),e.signal.aborted?"terminated":"continue"):(r.streamIncompleteRetries+=1,K(e.traceWriter,{phase:"rate_limit",metadata:{reason:"stream-incomplete",source:"mid-stream",attempt:r.streamIncompleteRetries}}),yield{type:"stream.retry",sessionId:e.ctx.sessionId},yield*hT(1e3*Math.pow(2,r.streamIncompleteRetries-1),e,n),e.signal.aborted?"terminated":"continue")}async function*hT(t,e,n){await Et(t,e.signal),e.signal.aborted&&(yield{type:"turn.completed",usage:n.terminalUsage(),sessionId:e.ctx.sessionId})}var yT=h(()=>{"use strict";Q();ds();zt();Is()});async function*bT(t,e,n){let r=e.throttleQueue;if(!r)return await t;r.resetAttempts();let o=Symbol("create-done"),s=!1,i=t.then(a=>(s=!0,a),a=>{throw s=!0,a});for(;;){for(let l of r.takeAll())n?.(l.retryAfterMs),yield{type:"rate_limit",sessionId:e.ctx.sessionId,status:l.status,attempt:l.attempt,...l.retryAfterMs!==void 0?{retryAfterMs:l.retryAfterMs}:{}};if(s)return await i;await Promise.race([i.then(()=>o,()=>o),r.waitForItem().then(()=>{})])}}var wT=h(()=>{"use strict"});function ST(t,e){try{let n=[];for(let r=0;r<t.length;r++){let o=t[r];if(o.role!=="assistant"||typeof o.content=="string")continue;let s=o.content;for(let i=0;i<s.length;i++){let a=s[i];if(a.type==="thinking"){let l=a;(!l.thinking||!l.signature)&&n.push({msgIdx:r,blockIdx:i,thinking:l.thinking?`(${l.thinking.length} chars)`:"(empty)",sigLen:l.signature?.length??0})}}}console.error("[afk] thinking-block diagnostic \u2014 API rejected request with:",e.message),console.error(`[afk] messages.length=${t.length}, invalid thinking blocks:`,n.length>0?JSON.stringify(n):"none found (cause may be elsewhere)")}catch{}}var vT=h(()=>{"use strict"});function nW(t){let{name:e,description:n,input_schema:r}=t;return{name:e,...n!==void 0?{description:n}:{},input_schema:r}}async function rW(t,e,n,r,o){for(let s=0;;s++){if(s>0){let i=ca(5e3*Math.pow(2,s-1));if(await Et(i,o),o.aborted)throw new Error("aborted")}try{return await Promise.resolve(t.messages.create(e,{headers:n,signal:r}))}catch(i){if(r.aborted)throw i;let a=i instanceof Error?i:new Error(String(i));if(gT(a)&&s<3)continue;throw a}}}async function*kT({input:t,turn:e,retry:n,ttfbTimeoutMs:r,stallTimeoutMs:o}){let s=fo({baseUrl:t.baseUrl})?Vh(t.messages,mo()):t.messages,i={model:t.model,max_tokens:t.maxTokens,messages:s,stream:!0,...t.system!==null?{system:t.system}:{},...t.tools!==null&&t.tools.length>0&&!e.capReached?{tools:t.tools.map(nW)}:{},...t.thinking!==void 0?{thinking:t.thinking}:{},...t.effort!==void 0?{output_config:{effort:t.effort}}:{}},a=Date.now(),l=cT(t.signal,r),c=mT(l.signal,o,d=>{K(t.traceWriter,{phase:"idle_watchdog_fired",durationMs:d.elapsedSinceLastProgressMs,resolvedModel:t.model,metadata:{source:"model-stream",stallTimeoutMs:d.stallTimeoutMs,elapsedSinceLastProgressMs:d.elapsedSinceLastProgressMs}})});try{return{kind:"opened",events:yield*bT(rW(t.client,i,t.headers,c.signal,t.signal),t,u=>{let p=lT(u);p!==void 0&&l.extend(p)}),ttfb:l,stall:c,requestStartedAt:a}}catch(d){if(l.timedOut()&&!t.signal.aborted&&n.canRetryTtfb())return l.dispose(),c.dispose(),{kind:"retry-ttfb",requestStartedAt:a};if(l.dispose(),c.dispose(),t.signal.aborted)return yield{type:"turn.completed",usage:e.terminalUsage(),sessionId:t.ctx.sessionId},{kind:"terminated"};let u=d instanceof Error?d:new Error(String(d));return u.message.includes("thinking")&&ST(t.messages,u),yield{type:"error",error:u},{kind:"terminated"}}}var ET=h(()=>{"use strict";Di();Q();ds();km();bc();zt();Is();wT();vT()});function _T(t,e){return t||e!==null}function AT(){return new pt("the model stream ended without a terminal message (no message_stop and no stop_reason): the turn is incomplete. The cause is not knowable at this layer \u2014 a client-side abort carrying an AbortError reason (including the SDK request timeout) and an upstream peer close are indistinguishable here. Check the trace for a preceding ttfb_timeout, idle_watchdog_fired, or rate_limit phase before suspecting the network.")}var TT=h(()=>{"use strict";pe()});function oW(t){let e=t.trim();if(e.length===0)return{};try{return JSON.parse(e)}catch{return{}}}function sW(t,e,n){let r=[],o=[];for(let a of t)a&&(a.kind==="text"?(r.push({type:"text",text:a.text}),o.push(a.text)):a.kind==="thinking"?a.thinking&&a.signature&&r.push({type:"thinking",thinking:a.thinking,signature:a.signature}):a.kind==="redacted_thinking"?r.push({type:"redacted_thinking",data:a.data}):r.push({type:"tool_use",id:a.id,name:a.name,input:oW(a.partialJson)}));let s=a=>a.type==="tool_use",i=r.filter(s);return{stopReason:e,assistantBlocks:r,toolUseBlocks:i,usage:n,text:o.join("")}}async function*RT(t,e,n){let r=[],o=null,s=null,i=!1,a=!!v.AFK_TELEGRAM_TRACE;try{a&&console.log("[translate] starting SDK event iteration");for await(let l of t){switch(a&&console.log("[translate] SDK evt:",l.type),l.type){case"message_start":{let c=l.message?.usage;c&&(s={...c});break}case"content_block_start":{let c=l.content_block;c.type==="text"?r[l.index]={kind:"text",text:""}:c.type==="thinking"?r[l.index]={kind:"thinking",thinking:"",signature:""}:c.type==="redacted_thinking"?r[l.index]={kind:"redacted_thinking",data:c.data}:c.type==="tool_use"&&(r[l.index]={kind:"tool_use",id:c.id,name:c.name,partialJson:""},yield{kind:"event",event:{type:"tool.use.start",toolUseId:c.id,toolName:c.name,toolInput:" \u2026",sessionId:e.sessionId}});break}case"content_block_delta":{let c=r[l.index],d=l.delta;d.type==="text_delta"?(c&&c.kind==="text"&&(c.text+=d.text),yield{kind:"event",event:{type:"delta.text",text:d.text,sessionId:e.sessionId}}):d.type==="input_json_delta"?(c&&c.kind==="tool_use"&&(c.partialJson+=d.partial_json),n?.()):d.type==="thinking_delta"?(c&&c.kind==="thinking"&&(c.thinking+=d.thinking),yield{kind:"event",event:{type:"delta.reasoning",text:d.thinking,sessionId:e.sessionId}}):(d.type==="signature_delta"&&c&&c.kind==="thinking"&&(c.signature=d.signature),n?.());break}case"content_block_stop":{let c=r[l.index];c&&c.kind==="tool_use"&&(yield{kind:"event",event:{type:"tool.use",summary:c.name,toolUseIds:[c.id],sessionId:e.sessionId}});break}case"message_delta":{l.delta&&l.delta.stop_reason!==void 0&&(o=l.delta.stop_reason);let c=l.usage;c&&(s!==null?(s.output_tokens=c.output_tokens,c.cache_creation_input_tokens!=null&&(s.cache_creation_input_tokens=c.cache_creation_input_tokens),c.cache_read_input_tokens!=null&&(s.cache_read_input_tokens=c.cache_read_input_tokens),c.input_tokens!=null&&(s.input_tokens=c.input_tokens)):s={cache_creation:null,cache_creation_input_tokens:c.cache_creation_input_tokens??null,cache_read_input_tokens:c.cache_read_input_tokens??null,inference_geo:null,input_tokens:c.input_tokens??0,output_tokens:c.output_tokens,server_tool_use:null,service_tier:null});break}case"message_stop":{i=!0;break}default:break}if(i)break}a&&console.log("[translate] SDK iteration ended naturally, stopped=",i)}catch(l){a&&console.log("[translate] SDK iteration threw:",l.message),yield{kind:"event",event:{type:"error",error:l instanceof Error?l:new Error(String(l))}};return}if(!_T(i,o)){yield{kind:"event",event:{type:"error",error:AT()}};return}a&&console.log("[translate] yielding turn-result"),yield{kind:"turn-result",result:sW(r,o,s)}}var xT=h(()=>{"use strict";$();TT()});async function*CT({events:t,input:e,turn:n,retry:r,ttfb:o,stall:s,stallTimeoutMs:i,requestStartedAt:a}){let l=null,c=!1,d=!1,u=!1,p=!1,f=!1,m=!1;try{v.AFK_TELEGRAM_TRACE&&console.log("[loop] awaiting translateMessageStream events");for await(let g of RT(Fr(t,e.signal),e.ctx,()=>s.progress()))if(!m&&(g.kind==="turn-result"||g.event.type!=="error")&&(m=!0,o.firstByteSeen(),K(e.traceWriter,{phase:"model_ttfb",durationMs:Date.now()-a,resolvedModel:e.model})),s.progress(),v.AFK_TELEGRAM_TRACE&&console.log("[loop] translate yielded:",g.kind,g.kind==="event"?g.event.type:""),g.kind==="event"){if(g.event.type==="error"){if(o.timedOut()&&!e.signal.aborted&&!r.ttfbRetried&&!m){d=!0;break}if(s.timedOut()&&!e.signal.aborted){yield{type:"error",error:Em(i)},c=!0;break}if(Cs(g.event.error)&&r.canRetryOverload()&&!e.signal.aborted){u=!0;break}if(Cs(g.event.error)&&!e.signal.aborted){f=!0;break}if(e.signal.aborted)break;if(g.event.error instanceof pt&&r.canRetryStreamIncomplete()&&!e.signal.aborted){p=!0;break}yield g.event,c=!0;break}yield g.event}else{l=g.result;break}v.AFK_TELEGRAM_TRACE&&console.log("[loop] translate loop exited, turnResult=",l?"set":"null")}catch(g){if(o.timedOut()&&!e.signal.aborted&&!r.ttfbRetried&&!m)o.dispose(),s.dispose(),d=!0;else{if(o.dispose(),s.dispose(),e.signal.aborted)return yield{type:"turn.completed",usage:n.terminalUsage(),sessionId:e.ctx.sessionId},{kind:"terminated"};let y=g instanceof Error?g:new Error(String(g));if((s.timedOut()||fT(y))&&!e.signal.aborted)return yield{type:"error",error:Em(i)},{kind:"terminated"};if(Cs(y)&&r.canRetryOverload()&&!e.signal.aborted)u=!0;else if(Cs(y)&&!e.signal.aborted)f=!0;else return yield{type:"error",error:y},{kind:"terminated"}}}return o.dispose(),s.dispose(),d?{kind:"retry",reason:"ttfb"}:u?{kind:"retry",reason:"overload"}:p?{kind:"retry",reason:"stream-incomplete"}:f?{kind:"overload-exhausted"}:c?{kind:"translator-errored"}:{kind:"streamed",turnResult:l}}var IT=h(()=>{"use strict";xT();pe();vl();Q();$();bc();Is()});async function*PT(t,e,n){let r=[],o=new Map;for(let i of t.toolUseBlocks)r.push({id:i.id,name:i.name,input:i.input,signal:e.signal}),o.set(i.id,Date.now()),kn(e.traceWriter,Rl({toolUseId:i.id,name:i.name,input:i.input,subagentId:e.subagentId})),yield{type:"tool.use.start",toolUseId:i.id,toolName:i.name,toolInput:rn(i.name,i.input),toolInputRaw:Tl(i.input),sessionId:e.ctx.sessionId};if(e.signal.aborted){let i=r.map(a=>({type:"tool_result",tool_use_id:a.id,content:"Tool call aborted",is_error:!0}));return e.messages.push({role:"user",content:i}),yield{type:"turn.completed",usage:n.terminalUsage(),sessionId:e.ctx.sessionId},{kind:"aborted"}}let s;if(e.toolDispatcher.executeBatch)try{s=await e.toolDispatcher.executeBatch(r)}catch(i){s=r.map(()=>({content:`Tool batch execution failed: ${i instanceof Error?i.message:String(i)}`,isError:!0}))}else{s=[];for(let i of r){if(e.signal.aborted){s.push({content:"Tool call aborted",isError:!0});continue}try{s.push(await e.toolDispatcher.execute(i))}catch(a){let l=a instanceof Error?a.message:String(a);s.push({content:`Tool execution threw: ${l}`,isError:!0})}}}return{kind:"dispatched",calls:r,results:s,startTimes:o}}var MT=h(()=>{"use strict";Q();vf();cs();Cl()});async function*OT(t,e,n,r){let o=[];for(let a=0;a<t.length;a++){let l=t[a],c=e[a],d=n.get(l.id),u=typeof d=="number"?Date.now()-d:0,p=c.truncated===!0||c.content.includes("[output truncated");kn(r.traceWriter,xl({toolUseId:l.id,name:l.name,result:c,truncated:p,durationMs:u,subagentId:r.subagentId})),yield{type:"tool.output",toolUseId:l.id,toolName:l.name,content:c.content,...c.isError===!0?{isError:!0}:{},...p?{truncated:!0}:{},...c.incomplete===!0?{incomplete:!0}:{},...c.incompleteReason?{incompleteReason:c.incompleteReason}:{},...typeof c.batchIndex=="number"&&typeof c.batchSize=="number"?{batchIndex:c.batchIndex,batchSize:c.batchSize}:{},sessionId:r.ctx.sessionId},c.render?.diff&&(yield{type:"tool.diff",toolUseId:l.id,diff:c.render.diff,sessionId:r.ctx.sessionId});let{content:f,isError:m,image:g}=c,y=g!==void 0?[{type:"image",source:{type:"base64",media_type:g.mediaType,data:g.data}},...f.length>0?[{type:"text",text:f}]:[]]:f;o.push({type:"tool_result",tool_use_id:l.id,content:y,...m===!0?{is_error:!0}:{}})}let s={role:"user",content:o};r.messages.push(s);let i=e.find(a=>a.failureClass===Sr);return i?(yield{type:"error",error:new er(i.content)},"denial-tripped"):"committed"}var DT=h(()=>{"use strict";Q();Cl();Ca();pe()});async function*FT(t,e,n,r){let o=e.messages.length;e.messages.push({role:"assistant",content:t.assistantBlocks});try{n.toolCallCount+=t.toolUseBlocks.length;let a=yield*PT(t,e,n);if(a.kind==="aborted"||(yield*OT(a.calls,a.results,a.startTimes,e))==="denial-tripped")return"terminated"}catch(a){throw e.messages.splice(o),a}n.iterations+=1;let s=t.toolUseBlocks[t.toolUseBlocks.length-1],i=s?`${s.name}${rn(s.name,s.input)}`:"unknown";if(yield{type:"progress",progress:{taskId:n.taskId,description:"Working",summary:`round ${n.iterations}: ${i}`,lastToolName:s?.name,totalTokens:n.usage.totalTokens??0,toolUses:n.toolCallCount,durationMs:Date.now()-n.startedAt},sessionId:e.ctx.sessionId},n.capReached)return yield{type:"turn.completed",usage:n.withDuration({...n.usage,stopReason:Ft}),sessionId:e.ctx.sessionId},"terminated";if(Ml(n.iterations,r)){let a=e.messages[e.messages.length-1];a!==void 0&&a.role==="user"&&Array.isArray(a.content)&&a.content.push({type:"text",text:Il}),n.capReached=!0}return"continue"}var LT=h(()=>{"use strict";cs();Lr();MT();DT()});function*NT(t,e,n){if(t.stopReason==="refusal"){yield{type:"assistant.message",text:t.text.length>0?t.text:`The model stopped with a content-safety refusal (stop_reason: "refusal") and returned no output. This is Anthropic's safety system declining the request \u2014 not an afk error. Because the flagged context stays in the conversation, follow-up messages will likely be refused the same way; rephrase the request or start a fresh session to continue.`,sessionId:e.ctx.sessionId},yield{type:"turn.completed",usage:n.terminalUsage(),sessionId:e.ctx.sessionId};return}t.text.length>0&&(yield{type:"assistant.message",text:t.text,sessionId:e.ctx.sessionId},t.text.length<=iW&&(yield{type:"suggestion",suggestion:t.text,sessionId:e.ctx.sessionId}));let r=t.assistantBlocks.filter(o=>o.type!=="tool_use");r.length>0&&e.messages.push({role:"assistant",content:r}),yield{type:"turn.completed",usage:n.withDuration(n.capReached?{...n.usage,stopReason:Ft}:n.usage),sessionId:e.ctx.sessionId}}var iW,$T=h(()=>{"use strict";Lr();iW=200});import{randomUUID as aW}from"node:crypto";var Sc,UT=h(()=>{"use strict";Sm();Sc=class{usage={stopReason:null};iterations=0;toolCallCount=0;capReached=!1;taskId=aW();startedAt=Date.now();elapsedMs(){return Date.now()-this.startedAt}withDuration(e){return{...e,durationMs:this.elapsedMs()}}terminalUsage(){return this.withDuration(this.usage)}addRoundUsage(e){this.usage=qo(this.usage,e),this.usage.contextWindowTokens=(e.inputTokens??0)+(e.outputTokens??0)+(e.cachedInputTokens??0)+(e.cacheCreationTokens??0)}}});var vc,BT=h(()=>{"use strict";Q();vc=class{constructor(e,n){this.signal=e;this.traceWriter=n;K(n,{phase:"loop_start"}),this.interruptedAt=e.aborted?Date.now():null,n&&!e.aborted&&e.addEventListener("abort",this.onInterrupt,{once:!0})}signal;traceWriter;interruptedAt;onInterrupt=()=>{this.interruptedAt===null&&(this.interruptedAt=Date.now())};finish(e){this.signal.removeEventListener("abort",this.onInterrupt),this.interruptedAt!==null&&this.signal.reason==="interrupted"&&K(this.traceWriter,{phase:"interrupt_halt",durationMs:Date.now()-this.interruptedAt,metadata:{provider:"anthropic-direct"}}),K(this.traceWriter,{phase:"loop_end",durationMs:e})}}});async function*Rm(t){let e=Pl(t.maxToolUseIterations),n=new Sc,r=new wc,o=l=>({input:t,turn:n,retry:r,requestStartedAt:l}),s=aT(),i=uT(),a=new vc(t.signal,t.traceWriter);try{for(;;){if(t.signal.aborted){yield{type:"turn.completed",usage:n.terminalUsage(),sessionId:t.ctx.sessionId};return}let l=yield*kT({input:t,turn:n,retry:r,ttfbTimeoutMs:s,stallTimeoutMs:i});if(l.kind==="terminated")return;if(l.kind==="retry-ttfb"){if((yield*Am("ttfb",o(l.requestStartedAt)))==="terminated")return;continue}let{events:c,ttfb:d,stall:u,requestStartedAt:p}=l,f=yield*CT({events:c,input:t,turn:n,retry:r,ttfb:d,stall:u,stallTimeoutMs:i,requestStartedAt:p});if(f.kind==="terminated")return;if(f.kind==="retry"){if((yield*Am(f.reason,o(p)))==="terminated")return;continue}if(r.reset(),f.kind==="overload-exhausted"){K(t.traceWriter,{phase:"rate_limit",metadata:{reason:"overloaded",source:"mid-stream",attempt:3,exhausted:!0}}),yield{type:"assistant.message",text:hb,sessionId:t.ctx.sessionId},yield{type:"turn.completed",usage:n.withDuration({...n.usage,stopReason:gt}),sessionId:t.ctx.sessionId};return}if(f.kind==="translator-errored"){t.signal.aborted&&(yield{type:"turn.completed",usage:n.terminalUsage(),sessionId:t.ctx.sessionId});return}let m=f.turnResult;if(m===null){yield{type:"turn.completed",usage:n.terminalUsage(),sessionId:t.ctx.sessionId};return}if(n.addRoundUsage(sT(m.usage,m.stopReason,t.model)),t.onUsageProgress?.(n.usage),m.stopReason!=="tool_use"){yield*NT(m,t,n);return}if((yield*FT(m,t,n,e))==="terminated")return}}finally{a.finish(n.elapsedMs())}}var HT=h(()=>{"use strict";Sm();Q();km();bc();Lr();zt();Is();yT();ET();IT();LT();$T();UT();BT()});function jT(t){if(!Number.isFinite(t)||t<=0)return;let e=t*1e3;if(!(e>cW))return new Date(e)}function kc(t){if(!("status"in t))return null;let e=t.status;if(e===429){let n=t.message.split("|");if(n.length>=2){let l=jT(parseInt(n[1].trim(),10));if(l!==void 0)return{kind:"oauth-limit",resetsAt:l}}let r=Ee(t,"anthropic-ratelimit-unified-representative-claim"),o=Ee(t,"anthropic-ratelimit-unified-overage-status"),s=Ee(t,"anthropic-ratelimit-unified-status");if(r!==void 0||o!==void 0||s==="rejected"){let l=Ee(t,"anthropic-ratelimit-unified-reset");if(l!==void 0){let c=jT(Number(l));if(c!==void 0)return{kind:"oauth-limit",resetsAt:c}}return{kind:"oauth-limit-no-ts"}}if(Ee(t,"anthropic-ratelimit-requests-remaining")!==void 0||Ee(t,"anthropic-ratelimit-requests-limit")!==void 0||Ee(t,"anthropic-ratelimit-requests-reset")!==void 0||Ee(t,"anthropic-ratelimit-input-tokens-remaining")!==void 0||Ee(t,"anthropic-ratelimit-input-tokens-limit")!==void 0||Ee(t,"anthropic-ratelimit-input-tokens-reset")!==void 0||Ee(t,"anthropic-ratelimit-output-tokens-remaining")!==void 0||Ee(t,"anthropic-ratelimit-output-tokens-limit")!==void 0||Ee(t,"anthropic-ratelimit-output-tokens-reset")!==void 0)return{kind:"rate-limit-transient",retryAfterMs:Kn(t)};let a=Kn(t);return a!==void 0&&a<=lW?{kind:"rate-limit-transient",retryAfterMs:a}:{kind:"oauth-limit-no-ts"}}return e===400&&t.message.includes("invalid_request_error")&&t.message.includes("credit balance")?{kind:"credit-exhausted"}:null}async function WT(t){let{resetsAt:e,signal:n,readToken:r=Be}=t,o=r(),s=e.getTime()+3e4;return new Promise(i=>{let a,l=!1,c=p=>{l||(l=!0,a!==void 0&&clearInterval(a),n.removeEventListener("abort",d),i(p))},d=()=>{c("aborted")},u=()=>n.aborted?(c("aborted"),!0):Date.now()>=s?(c("timer"),!0):r()!==o?(c("hot-swap"),!0):!1;u()||(a=setInterval(()=>{u()},3e4),a.unref(),n.addEventListener("abort",d,{once:!0}))})}async function KT(t){let{signal:e,readToken:n=Be,retryAfterMs:r}=t,o=n(),s=r!==void 0?Date.now()+r:void 0;return new Promise(i=>{let a,l=!1,c=p=>{l||(l=!0,a!==void 0&&clearInterval(a),e.removeEventListener("abort",d),i(p))},d=()=>{c("aborted")},u=()=>e.aborted?(c("aborted"),!0):n()!==o?(c("hot-swap"),!0):s!==void 0&&Date.now()>=s?(c("timer"),!0):!1;u()||(a=setInterval(()=>{u()},3e4),a.unref(),e.addEventListener("abort",d,{once:!0}))})}var lW,cW,Ec=h(()=>{"use strict";cr();bf();lW=300*1e3,cW=864e13});var GT=h(()=>{"use strict";cr()});import{randomUUID as dW}from"node:crypto";var qT,uW,pW,fW,mW,gW,_c,zT=h(()=>{"use strict";HT();Gt();Di();Ec();zt();GT();ds();Q();qT=7200*1e3,uW=3,pW=12e4,fW=5e3,mW=1e3,gW=60*1e3,_c=class{_client;_authMode;initSessionId;baseUrl;tokenRefresher;autoResumeOnUsageLimit;surface;refreshPromise=null;usageLimitWaitPromise=null;credentialSnapshotStale=!1;constructor(e){this._client=e.client,this._authMode=e.authMode,this.initSessionId=e.initSessionId,this.baseUrl=e.baseUrl,this.tokenRefresher=e.tokenRefresher,this.autoResumeOnUsageLimit=e.autoResumeOnUsageLimit,e.surface!==void 0&&(this.surface=e.surface)}get client(){return this._client}rotateHeaders(){return Kt(this._authMode,this.initSessionId,dW(),void 0,Oi({...this.baseUrl!==void 0?{baseUrl:this.baseUrl}:{}}))}get authMode(){return this._authMode}async forceClientRefresh(){if(!this.tokenRefresher)return null;let e=Be(),n=null;try{if(this.refreshPromise)n=await this.refreshPromise;else{this.refreshPromise=this.tokenRefresher();try{n=await this.refreshPromise??null}finally{this.refreshPromise=null}}}catch{return this.refreshPromise=null,null}if(!n)return null;this._client=n;let r=Be();return{accountId:ko(r??""),swapped:e!==r}}async*turnWithRetries(e,n){this.credentialSnapshotStale&&(await this.forceClientRefresh()&&(e.client=this._client,e.headers=this.rotateHeaders()),this.credentialSnapshotStale=!1),yield*this.turnWithOverloadPause(e,n)}async*turnWithOverloadPause(e,n){let r=wb(this.surface),o=null,s=!1;for(;;){let i=null;for await(let l of this.turnWithUsageLimitRetry(e,n)){if(bb(l)){i=l;break}yield l}if(!i){s&&o!==null&&K(e.traceWriter,{phase:"overload_resume",durationMs:Date.now()-o,metadata:{source:"retry-layer",outcome:"recovered"}});return}if(n()||e.signal.aborted||r===0){yield i;return}o??=Date.now();let a=r-(Date.now()-o);if(a<=0){s&&K(e.traceWriter,{phase:"overload_resume",durationMs:Date.now()-o,metadata:{source:"retry-layer",outcome:"ceiling-reached"}}),yield i;return}if(s||(K(e.traceWriter,{phase:"overload_pause",metadata:{reason:"overloaded",source:"retry-layer",hasResetTimestamp:!1,ceilingMs:r,surface:this.surface??"unknown"}}),s=!0),await Et(Math.min(yb(),a),e.signal),n()||e.signal.aborted)return;e.headers=this.rotateHeaders(),yield{type:"stream.retry",sessionId:e.ctx.sessionId}}}async*turnWithUsageLimitRetry(e,n){let r=null,o=null,s=!1,i=0;for(;;){let u,p=!1;for await(let g of this.turnWithAuthRetry(e,n)){if(g.type==="error"){let y=kc(g.error);if(y&&y.kind==="oauth-limit"){o=y.resetsAt,r=g;break}if(y&&y.kind==="oauth-limit-no-ts"){s=!0,r=g;break}if(y&&y.kind==="rate-limit-transient"&&i<uW){p=!0,u=y.retryAfterMs;break}}yield g}if(!p)break;if(i+=1,n()||e.signal.aborted)return;let m=Math.min(u??fW,pW)+Math.floor(Math.random()*mW);if(K(e.traceWriter,{phase:"rate_limit",metadata:{reason:"retry-after",source:"retry-layer",attempt:i,waitMs:m}}),await Et(m,e.signal),n()||e.signal.aborted)return;e.headers=this.rotateHeaders()}if(!r)return;if(s){let u=ko(Be()??"");if(yield{type:"paused",reason:"usage-limit",accountId:u,autoResume:this.autoResumeOnUsageLimit},K(e.traceWriter,{phase:"usage_limit_pause",metadata:{reason:"usage-limit",source:"retry-layer",hasResetTimestamp:!1,autoResume:this.autoResumeOnUsageLimit}}),!this.autoResumeOnUsageLimit){this.credentialSnapshotStale=!0,yield r;return}let p=Date.now(),f=!1;for(;;){let m;if(this.usageLimitWaitPromise)m="aborted";else{this.usageLimitWaitPromise=KT({signal:e.signal,retryAfterMs:gW});try{m=await this.usageLimitWaitPromise}finally{this.usageLimitWaitPromise=null}}if(m==="aborted")return;let g=u;if(m==="hot-swap"){let w=await this.forceClientRefresh();w&&(e.client=this._client,g=w.accountId)}e.headers=this.rotateHeaders();let y=null;for await(let w of this.turnWithAuthRetry(e,n)){if(!f&&w.type==="error"){let S=kc(w.error);if(S&&(S.kind==="oauth-limit"||S.kind==="oauth-limit-no-ts")){y=w;break}}f||(yield{type:"resumed",hotSwapped:m==="hot-swap",accountId:g},K(e.traceWriter,{phase:"usage_limit_resume",durationMs:Date.now()-p,metadata:{source:"retry-layer",hotSwapped:m==="hot-swap"}}),f=!0),yield w}if(!y)return;if(Date.now()-p>qT){yield y;return}}}if(!o)return;if(o.getTime()-Date.now()>qT){this.credentialSnapshotStale=!0,yield r;return}let a=ko(Be()??""),l=Date.now();if(yield{type:"paused",reason:"usage-limit",resetsAt:o,accountId:a,autoResume:this.autoResumeOnUsageLimit},K(e.traceWriter,{phase:"usage_limit_pause",metadata:{reason:"usage-limit",source:"retry-layer",hasResetTimestamp:!0,autoResume:this.autoResumeOnUsageLimit,resetsAt:o.toISOString()}}),!this.autoResumeOnUsageLimit){this.credentialSnapshotStale=!0,yield r;return}let c;if(this.usageLimitWaitPromise)c=await this.usageLimitWaitPromise;else{this.usageLimitWaitPromise=WT({resetsAt:o,signal:e.signal});try{c=await this.usageLimitWaitPromise}finally{this.usageLimitWaitPromise=null}}if(c==="aborted")return;let d=a;if(c==="hot-swap"){let u=await this.forceClientRefresh();u&&(e.client=this._client,d=u.accountId)}e.headers=this.rotateHeaders(),yield{type:"resumed",hotSwapped:c==="hot-swap",accountId:d},K(e.traceWriter,{phase:"usage_limit_resume",durationMs:Date.now()-l,metadata:{source:"retry-layer",hotSwapped:c==="hot-swap"}}),yield*this.turnWithAuthRetry(e,n)}async*turnWithAuthRetry(e,n){let r=null;for await(let s of Rm(e)){if(n())return;if(s.type==="error"&&this.isRetryableAuth(s.error)){r=s;break}yield s}if(!r)return;if(!await this.forceClientRefresh()){yield r;return}e.client=this._client,e.headers=this.rotateHeaders(),yield*Rm(e)}isRetryableAuth(e){return this._authMode==="oauth"&&this.tokenRefresher!==void 0&&"status"in e&&e.status===401}}});function hW(t){if(t.role!=="user")return!1;let e=t.content;if(typeof e=="string")return!0;if(!Array.isArray(e))return!1;for(let n of e)if(n.type==="tool_result")return!1;return!0}function yW(t){let n=[(t.role==="user"?"User":"Assistant")+":"];if(typeof t.content=="string")n.push(t.content);else if(Array.isArray(t.content))for(let r of t.content){let o=r.type;if(o==="text"&&"text"in r)n.push(r.text);else if(o==="tool_use"){let s=r.name??"unknown",i=ZT(r.input);n.push(`[tool call: ${s} ${i}]`)}else if(o==="tool_result"){let s=r.content;n.push(`[tool result: ${eR(s)}]`)}else o==="image"?n.push("[image]"):o==="document"&&n.push("[document]")}return n.join(`
|
|
1126
|
+
`)}function Ss(t,e){let n=[],r=new Set,o=v.AFK_INTERNAL==="1",s=Ro(To());_s(Zs(),"user"),tb("project"),_s(xg(e?.cwd),"project");for(let{dir:a,origin:l}of s.skillRoots)_s(a,l);for(let a of vu()){let l=Pt(a);Su(l,o)&&(n.push({name:a,description:l.description,source:l.origin==="user"?"user":l.origin==="project"?"project":l.origin?.startsWith("imported:")?"imported":"builtin",argumentHint:l.argumentHint,whenToUse:l.whenToUse}),r.add(a))}let i=t??hc(e);for(let a of i){if(a.type!=="local")continue;let l=Ff(a.path);for(let c of l)!c.name||r.has(c.name)||Su({audience:c.audience},o)&&(n.push({name:c.name,description:c.description??`Skill from plugin at ${a.path}`,source:"plugin"}),r.add(c.name))}return n}function vs(t,e){let n=new Map,r=t??hc(e);for(let o of r){if(o.type!=="local")continue;let s=Ff(o.path);for(let i of s)i.name&&i.body&&i.body.length>0&&!n.has(i.name)&&n.set(i.name,{body:i.body,pluginPath:o.path,...i.allowedTools!==void 0?{allowedTools:i.allowedTools}:{},...i.context!==void 0?{context:i.context}:{},...i.readOnly===!0?{readOnly:!0}:{},...i.model!==void 0?{model:i.model}:{}})}return n}function tT(t){let e=t??hc(),n=[],r=new Set;for(let o of e){if(o.type!=="local")continue;let s=jA(o.path).name;if(s!==null)for(let i of Gl(zj(o.path,"agents"))){let a;try{a=qj(i,"utf8")}catch{continue}let l=Gn(a);if(l===void 0)continue;let c=`${s}:${l.name}`;r.has(c)||(r.add(c),n.push({name:c,definition:l.definition,source:`plugin:${s}`,filePath:i,...l.bashReadOnly===!0?{bashReadOnly:!0}:{},...l.ignoredKeys!==void 0?{ignoredKeys:l.ignoredKeys}:{}}))}}return n}function hc(t){return[...Nt(Cg(t?.cwd)),...Nt(),...Nt(Pg()),...Ro(To()).pluginRoots.flatMap(({dir:e,binary:n})=>Nt(e,{trustAll:!0,sourceEnabled:By(n)}))]}async function nT(){await BA(hc(),{pluginApi:{registerSkill:Pe,listSkills:vu,getSkill:Pt,loadSkillPrompts:fe,env:v,SubagentManager:X,describeFailure:_e,discoverPluginSkillBodies:vs,getAgentFrameworkDir:nt,getSkillsDir:Zs,getSessionsDir:Ae,getOrDeriveFacet:ym,listSessionIds:bm,deriveSessionFacet:Rs,loadStoredSession:gc}})}var on=h(()=>{"use strict";$A();mt();Je();mm();ac();HA();hs();WA();ys();Gf();we();Ce();eT();B();$();Vi()});function Dl(){try{let t=Ss();return Promise.resolve(t.map(e=>{let n={name:e.name,description:e.description};return e.argumentHint&&(n.argumentHint=e.argumentHint),n}))}catch{return Promise.resolve([])}}var Tf=h(()=>{"use strict";on()});function yc(t){if(t.length===0)return;let e=t[t.length-1];if(!e||e.role!=="assistant"||typeof e.content=="string")return;let n=e.content,r=[];for(let s of n)s.type==="tool_use"&&typeof s.id=="string"&&r.push(s.id);if(r.length===0)return;let o={role:"user",content:r.map(s=>({type:"tool_result",tool_use_id:s,content:"Tool call interrupted before completing \u2014 no result recorded.",is_error:!0}))};t.push(o)}var wm=h(()=>{"use strict"});function rT(t){return{messages:t.initialMessages?[...t.initialMessages]:[],currentModel:t.model,requestedModel:t.requestedModel??t.model,currentPermissionMode:t.permissionMode,userSystem:t.userSystem,toolDispatcher:t.toolDispatcher,lastUsage:null,closed:!1,autoCompactThreshold:t.autoCompactThreshold}}var oT=h(()=>{"use strict"});function Vj(t,e,n,r,o){let s=Jj.get(t);if(!s)return;let i=1e6,l=Math.max(0,e-r-o)/i*s.inputPerMTok,c=n/i*s.outputPerMTok,d=s.cacheWritePerMTok??s.inputPerMTok*1.25,u=s.cacheReadPerMTok??s.inputPerMTok*.1,p=o/i*d,f=r/i*u;return l+c+p+f}function sT(t,e,n){if(!t)return{stopReason:e??null};let r={inputTokens:t.input_tokens,outputTokens:t.output_tokens,stopReason:e??null};if(t.cache_read_input_tokens!=null&&(r.cachedInputTokens=t.cache_read_input_tokens),t.cache_creation_input_tokens!=null&&(r.cacheCreationTokens=t.cache_creation_input_tokens),r.totalTokens=(t.input_tokens??0)+(t.output_tokens??0),n){let o=Vj(n,t.input_tokens??0,t.output_tokens??0,t.cache_read_input_tokens??0,t.cache_creation_input_tokens??0);o!==void 0&&(r.totalCostUsd=o)}return r}var Jj,Sm=h(()=>{"use strict";Qp();Jj=new Map([["claude-sonnet-5",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-opus-5",{inputPerMTok:5,outputPerMTok:25,cacheWritePerMTok:6.25,cacheReadPerMTok:.5}],["claude-sonnet-4-5-20250929",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-opus-4-5-20250929",{inputPerMTok:15,outputPerMTok:75,cacheWritePerMTok:18.75,cacheReadPerMTok:1.5}],["claude-haiku-4-5-20250929",{inputPerMTok:1,outputPerMTok:5,cacheWritePerMTok:1.25,cacheReadPerMTok:.1}],["claude-haiku-4-5-20251001",{inputPerMTok:1,outputPerMTok:5,cacheWritePerMTok:1.25,cacheReadPerMTok:.1}],["claude-3-7-sonnet-20250219",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-3-5-sonnet-20241022",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-3-5-sonnet-20240620",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-3-5-haiku-20241022",{inputPerMTok:.8,outputPerMTok:4,cacheWritePerMTok:1,cacheReadPerMTok:.08}],["claude-3-opus-20240229",{inputPerMTok:15,outputPerMTok:75,cacheWritePerMTok:18.75,cacheReadPerMTok:1.5}],["claude-3-sonnet-20240229",{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3}],["claude-3-haiku-20240307",{inputPerMTok:.25,outputPerMTok:1.25,cacheWritePerMTok:.3,cacheReadPerMTok:.03}]])});function xs(t){return t>2147483647?2147483647:t}var vm=h(()=>{"use strict"});function aT(){let t=v.AFK_MODEL_TTFB_TIMEOUT_MS;if(t===void 0||t.trim()==="")return iT;let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<0?iT:xs(e)}function lT(t){return typeof t!="number"||!Number.isFinite(t)||t<=0?void 0:(t<Qj?t:Zj)+Xj}function cT(t,e){if(e<=0)return{signal:t,timedOut:()=>!1,firstByteSeen:()=>{},extend:()=>{},dispose:()=>{}};let n=new AbortController,r=AbortSignal.any([t,n.signal]),o=!1,s=!1,i=Date.now()+e,a,l=u=>{a=setTimeout(()=>{o=!0,n.abort(new Error(Yj))},xs(u)),a.unref()};l(e);let c=()=>{s||(s=!0,clearTimeout(a))};return{signal:r,timedOut:()=>o,firstByteSeen:c,extend:u=>{s||o||typeof u!="number"||!Number.isFinite(u)||u<=0||(i+=u,clearTimeout(a),l(Math.max(1,i-Date.now())))},dispose:c}}var iT,Yj,Xj,Qj,Zj,km=h(()=>{"use strict";$();vm();iT=18e4;Yj="model_ttfb_timeout",Xj=3e4,Qj=6e4,Zj=8e3});function uT(){let t=v.AFK_MODEL_STALL_TIMEOUT_MS;if(t===void 0||t.trim()==="")return dT;let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<0?dT:xs(e)}function fT(t){return t instanceof Error&&t.message===pT}function Em(t){return new Error(`Model stream stalled: no output for ${Math.round(t/1e3)}s after the response had already started streaming. The round was aborted rather than left hanging (issue #762: two sessions hung 38 and 63 minutes with no terminal event). A round that keeps producing output is never cut off, no matter how long it runs. Raise AFK_MODEL_STALL_TIMEOUT_MS, or set it to 0 to disable this bound.`)}function mT(t,e,n){if(e<=0)return{signal:t,timedOut:()=>!1,progress:()=>{},dispose:()=>{}};let r=new AbortController,o=AbortSignal.any([t,r.signal]),s,i=!1,a=!1,l=u=>{if(!(a||i)){i=!0,s=void 0;try{n?.({stallTimeoutMs:e,elapsedSinceLastProgressMs:Date.now()-u})}catch{}r.signal.aborted||r.abort(new Error(pT))}};return{signal:o,timedOut:()=>i,progress:()=>{if(a||i)return;s!==void 0&&clearTimeout(s);let u=Date.now(),p=setTimeout(()=>l(u),e);p.unref(),s=p},dispose:()=>{a||(a=!0,s!==void 0&&clearTimeout(s),s=void 0)}}}var dT,pT,bc=h(()=>{"use strict";$();vm();dT=12e5;pT="model_stream_stall_timeout"});function gT(t){if(!("status"in t))return!1;let e=t.status;return e===529||e===503}function Cs(t){if(t===null||typeof t!="object")return!1;let e=t;if(e.status===529||e.status===503)return!0;let n=e.error;if(n===null||typeof n!="object")return!1;let r=n;return((r.error!==null&&typeof r.error=="object"?r.error.type:void 0)??r.type)==="overloaded_error"}var wc,Is=h(()=>{"use strict";wc=class{overloadRetries=0;streamIncompleteRetries=0;ttfbRetried=!1;canRetryOverload(){return this.overloadRetries<3}canRetryStreamIncomplete(){return this.streamIncompleteRetries<2}canRetryTtfb(){return!this.ttfbRetried}reset(){this.overloadRetries=0,this.streamIncompleteRetries=0,this.ttfbRetried=!1}}});async function*tW(t,e){K(t.traceWriter,{phase:"ttfb_timeout",durationMs:Date.now()-e,metadata:{reason:"ttfb-timeout",source:"first-byte",resolvedModel:t.model}}),yield{type:"stream.retry",sessionId:t.ctx.sessionId}}async function*Am(t,{input:e,turn:n,retry:r,requestStartedAt:o}){return t==="ttfb"?(yield*tW(e,o),r.ttfbRetried=!0,"continue"):t==="overload"?(r.overloadRetries+=1,K(e.traceWriter,{phase:"rate_limit",metadata:{reason:"overloaded",source:"mid-stream",attempt:r.overloadRetries}}),yield{type:"stream.retry",sessionId:e.ctx.sessionId},yield*hT(ca(5e3*Math.pow(2,r.overloadRetries-1)),e,n),e.signal.aborted?"terminated":"continue"):(r.streamIncompleteRetries+=1,K(e.traceWriter,{phase:"rate_limit",metadata:{reason:"stream-incomplete",source:"mid-stream",attempt:r.streamIncompleteRetries}}),yield{type:"stream.retry",sessionId:e.ctx.sessionId},yield*hT(1e3*Math.pow(2,r.streamIncompleteRetries-1),e,n),e.signal.aborted?"terminated":"continue")}async function*hT(t,e,n){await Et(t,e.signal),e.signal.aborted&&(yield{type:"turn.completed",usage:n.terminalUsage(),sessionId:e.ctx.sessionId})}var yT=h(()=>{"use strict";Q();ds();zt();Is()});async function*bT(t,e,n){let r=e.throttleQueue;if(!r)return await t;r.resetAttempts();let o=Symbol("create-done"),s=!1,i=t.then(a=>(s=!0,a),a=>{throw s=!0,a});for(;;){for(let l of r.takeAll())n?.(l.retryAfterMs),yield{type:"rate_limit",sessionId:e.ctx.sessionId,status:l.status,attempt:l.attempt,...l.retryAfterMs!==void 0?{retryAfterMs:l.retryAfterMs}:{}};if(s)return await i;await Promise.race([i.then(()=>o,()=>o),r.waitForItem().then(()=>{})])}}var wT=h(()=>{"use strict"});function ST(t,e){try{let n=[];for(let r=0;r<t.length;r++){let o=t[r];if(o.role!=="assistant"||typeof o.content=="string")continue;let s=o.content;for(let i=0;i<s.length;i++){let a=s[i];if(a.type==="thinking"){let l=a;(!l.thinking||!l.signature)&&n.push({msgIdx:r,blockIdx:i,thinking:l.thinking?`(${l.thinking.length} chars)`:"(empty)",sigLen:l.signature?.length??0})}}}console.error("[afk] thinking-block diagnostic \u2014 API rejected request with:",e.message),console.error(`[afk] messages.length=${t.length}, invalid thinking blocks:`,n.length>0?JSON.stringify(n):"none found (cause may be elsewhere)")}catch{}}var vT=h(()=>{"use strict"});function nW(t){let{name:e,description:n,input_schema:r}=t;return{name:e,...n!==void 0?{description:n}:{},input_schema:r}}async function rW(t,e,n,r,o){for(let s=0;;s++){if(s>0){let i=ca(5e3*Math.pow(2,s-1));if(await Et(i,o),o.aborted)throw new Error("aborted")}try{return await Promise.resolve(t.messages.create(e,{headers:n,signal:r}))}catch(i){if(r.aborted)throw i;let a=i instanceof Error?i:new Error(String(i));if(gT(a)&&s<3)continue;throw a}}}async function*kT({input:t,turn:e,retry:n,ttfbTimeoutMs:r,stallTimeoutMs:o}){let s=fo({baseUrl:t.baseUrl})?Vh(t.messages,mo()):t.messages,i={model:t.model,max_tokens:t.maxTokens,messages:s,stream:!0,...t.system!==null?{system:t.system}:{},...t.tools!==null&&t.tools.length>0&&!e.capReached?{tools:t.tools.map(nW)}:{},...t.thinking!==void 0?{thinking:t.thinking}:{},...t.effort!==void 0?{output_config:{effort:t.effort}}:{}},a=Date.now(),l=cT(t.signal,r),c=mT(l.signal,o,d=>{K(t.traceWriter,{phase:"idle_watchdog_fired",durationMs:d.elapsedSinceLastProgressMs,resolvedModel:t.model,metadata:{source:"model-stream",stallTimeoutMs:d.stallTimeoutMs,elapsedSinceLastProgressMs:d.elapsedSinceLastProgressMs}})});try{return{kind:"opened",events:yield*bT(rW(t.client,i,t.headers,c.signal,t.signal),t,u=>{let p=lT(u);p!==void 0&&l.extend(p)}),ttfb:l,stall:c,requestStartedAt:a}}catch(d){if(l.timedOut()&&!t.signal.aborted&&n.canRetryTtfb())return l.dispose(),c.dispose(),{kind:"retry-ttfb",requestStartedAt:a};if(l.dispose(),c.dispose(),t.signal.aborted)return yield{type:"turn.completed",usage:e.terminalUsage(),sessionId:t.ctx.sessionId},{kind:"terminated"};let u=d instanceof Error?d:new Error(String(d));return u.message.includes("thinking")&&ST(t.messages,u),yield{type:"error",error:u},{kind:"terminated"}}}var ET=h(()=>{"use strict";Di();Q();ds();km();bc();zt();Is();wT();vT()});function _T(t,e){return t||e!==null}function AT(){return new pt("the model stream ended without a terminal message (no message_stop and no stop_reason): the turn is incomplete. The cause is not knowable at this layer \u2014 a client-side abort carrying an AbortError reason (including the SDK request timeout) and an upstream peer close are indistinguishable here. Check the trace for a preceding ttfb_timeout, idle_watchdog_fired, or rate_limit phase before suspecting the network.")}var TT=h(()=>{"use strict";pe()});function oW(t){let e=t.trim();if(e.length===0)return{};try{return JSON.parse(e)}catch{return{}}}function sW(t,e,n){let r=[],o=[];for(let a of t)a&&(a.kind==="text"?(r.push({type:"text",text:a.text}),o.push(a.text)):a.kind==="thinking"?a.thinking&&a.signature&&r.push({type:"thinking",thinking:a.thinking,signature:a.signature}):a.kind==="redacted_thinking"?r.push({type:"redacted_thinking",data:a.data}):r.push({type:"tool_use",id:a.id,name:a.name,input:oW(a.partialJson)}));let s=a=>a.type==="tool_use",i=r.filter(s);return{stopReason:e,assistantBlocks:r,toolUseBlocks:i,usage:n,text:o.join("")}}async function*RT(t,e,n){let r=[],o=null,s=null,i=!1,a=!!v.AFK_TELEGRAM_TRACE;try{a&&console.log("[translate] starting SDK event iteration");for await(let l of t){switch(a&&console.log("[translate] SDK evt:",l.type),l.type){case"message_start":{let c=l.message?.usage;c&&(s={...c});break}case"content_block_start":{let c=l.content_block;c.type==="text"?r[l.index]={kind:"text",text:""}:c.type==="thinking"?r[l.index]={kind:"thinking",thinking:"",signature:""}:c.type==="redacted_thinking"?r[l.index]={kind:"redacted_thinking",data:c.data}:c.type==="tool_use"&&(r[l.index]={kind:"tool_use",id:c.id,name:c.name,partialJson:""},yield{kind:"event",event:{type:"tool.use.start",toolUseId:c.id,toolName:c.name,toolInput:" \u2026",sessionId:e.sessionId}});break}case"content_block_delta":{let c=r[l.index],d=l.delta;d.type==="text_delta"?(c&&c.kind==="text"&&(c.text+=d.text),yield{kind:"event",event:{type:"delta.text",text:d.text,sessionId:e.sessionId}}):d.type==="input_json_delta"?(c&&c.kind==="tool_use"&&(c.partialJson+=d.partial_json),n?.()):d.type==="thinking_delta"?(c&&c.kind==="thinking"&&(c.thinking+=d.thinking),yield{kind:"event",event:{type:"delta.reasoning",text:d.thinking,sessionId:e.sessionId}}):(d.type==="signature_delta"&&c&&c.kind==="thinking"&&(c.signature=d.signature),n?.());break}case"content_block_stop":{let c=r[l.index];c&&c.kind==="tool_use"&&(yield{kind:"event",event:{type:"tool.use",summary:c.name,toolUseIds:[c.id],sessionId:e.sessionId}});break}case"message_delta":{l.delta&&l.delta.stop_reason!==void 0&&(o=l.delta.stop_reason);let c=l.usage;c&&(s!==null?(s.output_tokens=c.output_tokens,c.cache_creation_input_tokens!=null&&(s.cache_creation_input_tokens=c.cache_creation_input_tokens),c.cache_read_input_tokens!=null&&(s.cache_read_input_tokens=c.cache_read_input_tokens),c.input_tokens!=null&&(s.input_tokens=c.input_tokens)):s={cache_creation:null,cache_creation_input_tokens:c.cache_creation_input_tokens??null,cache_read_input_tokens:c.cache_read_input_tokens??null,inference_geo:null,input_tokens:c.input_tokens??0,output_tokens:c.output_tokens,server_tool_use:null,service_tier:null});break}case"message_stop":{i=!0;break}default:break}if(i)break}a&&console.log("[translate] SDK iteration ended naturally, stopped=",i)}catch(l){a&&console.log("[translate] SDK iteration threw:",l.message),yield{kind:"event",event:{type:"error",error:l instanceof Error?l:new Error(String(l))}};return}if(!_T(i,o)){yield{kind:"event",event:{type:"error",error:AT()}};return}a&&console.log("[translate] yielding turn-result"),yield{kind:"turn-result",result:sW(r,o,s)}}var xT=h(()=>{"use strict";$();TT()});async function*CT({events:t,input:e,turn:n,retry:r,ttfb:o,stall:s,stallTimeoutMs:i,requestStartedAt:a}){let l=null,c=!1,d=!1,u=!1,p=!1,f=!1,m=!1;try{v.AFK_TELEGRAM_TRACE&&console.log("[loop] awaiting translateMessageStream events");for await(let g of RT(Fr(t,e.signal),e.ctx,()=>s.progress()))if(!m&&(g.kind==="turn-result"||g.event.type!=="error")&&(m=!0,o.firstByteSeen(),K(e.traceWriter,{phase:"model_ttfb",durationMs:Date.now()-a,resolvedModel:e.model})),s.progress(),v.AFK_TELEGRAM_TRACE&&console.log("[loop] translate yielded:",g.kind,g.kind==="event"?g.event.type:""),g.kind==="event"){if(g.event.type==="error"){if(o.timedOut()&&!e.signal.aborted&&!r.ttfbRetried&&!m){d=!0;break}if(s.timedOut()&&!e.signal.aborted){yield{type:"error",error:Em(i)},c=!0;break}if(Cs(g.event.error)&&r.canRetryOverload()&&!e.signal.aborted){u=!0;break}if(Cs(g.event.error)&&!e.signal.aborted){f=!0;break}if(e.signal.aborted)break;if(g.event.error instanceof pt&&r.canRetryStreamIncomplete()&&!e.signal.aborted){p=!0;break}yield g.event,c=!0;break}yield g.event}else{l=g.result;break}v.AFK_TELEGRAM_TRACE&&console.log("[loop] translate loop exited, turnResult=",l?"set":"null")}catch(g){if(o.timedOut()&&!e.signal.aborted&&!r.ttfbRetried&&!m)o.dispose(),s.dispose(),d=!0;else{if(o.dispose(),s.dispose(),e.signal.aborted)return yield{type:"turn.completed",usage:n.terminalUsage(),sessionId:e.ctx.sessionId},{kind:"terminated"};let y=g instanceof Error?g:new Error(String(g));if((s.timedOut()||fT(y))&&!e.signal.aborted)return yield{type:"error",error:Em(i)},{kind:"terminated"};if(Cs(y)&&r.canRetryOverload()&&!e.signal.aborted)u=!0;else if(Cs(y)&&!e.signal.aborted)f=!0;else return yield{type:"error",error:y},{kind:"terminated"}}}return o.dispose(),s.dispose(),d?{kind:"retry",reason:"ttfb"}:u?{kind:"retry",reason:"overload"}:p?{kind:"retry",reason:"stream-incomplete"}:f?{kind:"overload-exhausted"}:c?{kind:"translator-errored"}:{kind:"streamed",turnResult:l}}var IT=h(()=>{"use strict";xT();pe();vl();Q();$();bc();Is()});async function*PT(t,e,n){let r=[],o=new Map;for(let i of t.toolUseBlocks)r.push({id:i.id,name:i.name,input:i.input,signal:e.signal}),o.set(i.id,Date.now()),kn(e.traceWriter,Rl({toolUseId:i.id,name:i.name,input:i.input,subagentId:e.subagentId})),yield{type:"tool.use.start",toolUseId:i.id,toolName:i.name,toolInput:rn(i.name,i.input),toolInputRaw:Tl(i.input),sessionId:e.ctx.sessionId};if(e.signal.aborted){let i=r.map(a=>({type:"tool_result",tool_use_id:a.id,content:"Tool call aborted",is_error:!0}));return e.messages.push({role:"user",content:i}),yield{type:"turn.completed",usage:n.terminalUsage(),sessionId:e.ctx.sessionId},{kind:"aborted"}}let s;if(e.toolDispatcher.executeBatch)try{s=await e.toolDispatcher.executeBatch(r)}catch(i){s=r.map(()=>({content:`Tool batch execution failed: ${i instanceof Error?i.message:String(i)}`,isError:!0}))}else{s=[];for(let i of r){if(e.signal.aborted){s.push({content:"Tool call aborted",isError:!0,failureClass:"abort"});continue}try{s.push(await e.toolDispatcher.execute(i))}catch(a){let l=a instanceof Error?a.message:String(a);s.push({content:`Tool execution threw: ${l}`,isError:!0})}}}return{kind:"dispatched",calls:r,results:s,startTimes:o}}var MT=h(()=>{"use strict";Q();vf();cs();Cl()});async function*OT(t,e,n,r){let o=[];for(let a=0;a<t.length;a++){let l=t[a],c=e[a],d=n.get(l.id),u=typeof d=="number"?Date.now()-d:0,p=c.truncated===!0||c.content.includes("[output truncated");kn(r.traceWriter,xl({toolUseId:l.id,name:l.name,result:c,truncated:p,durationMs:u,subagentId:r.subagentId})),yield{type:"tool.output",toolUseId:l.id,toolName:l.name,content:c.content,...c.isError===!0?{isError:!0}:{},...p?{truncated:!0}:{},...c.incomplete===!0?{incomplete:!0}:{},...c.incompleteReason?{incompleteReason:c.incompleteReason}:{},...typeof c.batchIndex=="number"&&typeof c.batchSize=="number"?{batchIndex:c.batchIndex,batchSize:c.batchSize}:{},...c.failureClass?{failureClass:c.failureClass}:{},sessionId:r.ctx.sessionId},c.render?.diff&&(yield{type:"tool.diff",toolUseId:l.id,diff:c.render.diff,sessionId:r.ctx.sessionId});let{content:f,isError:m,image:g}=c,y=g!==void 0?[{type:"image",source:{type:"base64",media_type:g.mediaType,data:g.data}},...f.length>0?[{type:"text",text:f}]:[]]:f;o.push({type:"tool_result",tool_use_id:l.id,content:y,...m===!0?{is_error:!0}:{}})}let s={role:"user",content:o};r.messages.push(s);let i=e.find(a=>a.failureClass===Sr);return i?(yield{type:"error",error:new er(i.content)},"denial-tripped"):"committed"}var DT=h(()=>{"use strict";Q();Cl();Ca();pe()});async function*FT(t,e,n,r){let o=e.messages.length;e.messages.push({role:"assistant",content:t.assistantBlocks});try{n.toolCallCount+=t.toolUseBlocks.length;let a=yield*PT(t,e,n);if(a.kind==="aborted"||(yield*OT(a.calls,a.results,a.startTimes,e))==="denial-tripped")return"terminated"}catch(a){throw e.messages.splice(o),a}n.iterations+=1;let s=t.toolUseBlocks[t.toolUseBlocks.length-1],i=s?`${s.name}${rn(s.name,s.input)}`:"unknown";if(yield{type:"progress",progress:{taskId:n.taskId,description:"Working",summary:`round ${n.iterations}: ${i}`,lastToolName:s?.name,totalTokens:n.usage.totalTokens??0,toolUses:n.toolCallCount,durationMs:Date.now()-n.startedAt},sessionId:e.ctx.sessionId},n.capReached)return yield{type:"turn.completed",usage:n.withDuration({...n.usage,stopReason:Ft}),sessionId:e.ctx.sessionId},"terminated";if(Ml(n.iterations,r)){let a=e.messages[e.messages.length-1];a!==void 0&&a.role==="user"&&Array.isArray(a.content)&&a.content.push({type:"text",text:Il}),n.capReached=!0}return"continue"}var LT=h(()=>{"use strict";cs();Lr();MT();DT()});function*NT(t,e,n){if(t.stopReason==="refusal"){yield{type:"assistant.message",text:t.text.length>0?t.text:`The model stopped with a content-safety refusal (stop_reason: "refusal") and returned no output. This is Anthropic's safety system declining the request \u2014 not an afk error. Because the flagged context stays in the conversation, follow-up messages will likely be refused the same way; rephrase the request or start a fresh session to continue.`,sessionId:e.ctx.sessionId},yield{type:"turn.completed",usage:n.terminalUsage(),sessionId:e.ctx.sessionId};return}t.text.length>0&&(yield{type:"assistant.message",text:t.text,sessionId:e.ctx.sessionId},t.text.length<=iW&&(yield{type:"suggestion",suggestion:t.text,sessionId:e.ctx.sessionId}));let r=t.assistantBlocks.filter(o=>o.type!=="tool_use");r.length>0&&e.messages.push({role:"assistant",content:r}),yield{type:"turn.completed",usage:n.withDuration(n.capReached?{...n.usage,stopReason:Ft}:n.usage),sessionId:e.ctx.sessionId}}var iW,$T=h(()=>{"use strict";Lr();iW=200});import{randomUUID as aW}from"node:crypto";var Sc,UT=h(()=>{"use strict";Sm();Sc=class{usage={stopReason:null};iterations=0;toolCallCount=0;capReached=!1;taskId=aW();startedAt=Date.now();elapsedMs(){return Date.now()-this.startedAt}withDuration(e){return{...e,durationMs:this.elapsedMs()}}terminalUsage(){return this.withDuration(this.usage)}addRoundUsage(e){this.usage=qo(this.usage,e),this.usage.contextWindowTokens=(e.inputTokens??0)+(e.outputTokens??0)+(e.cachedInputTokens??0)+(e.cacheCreationTokens??0)}}});var vc,BT=h(()=>{"use strict";Q();vc=class{constructor(e,n){this.signal=e;this.traceWriter=n;K(n,{phase:"loop_start"}),this.interruptedAt=e.aborted?Date.now():null,n&&!e.aborted&&e.addEventListener("abort",this.onInterrupt,{once:!0})}signal;traceWriter;interruptedAt;onInterrupt=()=>{this.interruptedAt===null&&(this.interruptedAt=Date.now())};finish(e){this.signal.removeEventListener("abort",this.onInterrupt),this.interruptedAt!==null&&this.signal.reason==="interrupted"&&K(this.traceWriter,{phase:"interrupt_halt",durationMs:Date.now()-this.interruptedAt,metadata:{provider:"anthropic-direct"}}),K(this.traceWriter,{phase:"loop_end",durationMs:e})}}});async function*Rm(t){let e=Pl(t.maxToolUseIterations),n=new Sc,r=new wc,o=l=>({input:t,turn:n,retry:r,requestStartedAt:l}),s=aT(),i=uT(),a=new vc(t.signal,t.traceWriter);try{for(;;){if(t.signal.aborted){yield{type:"turn.completed",usage:n.terminalUsage(),sessionId:t.ctx.sessionId};return}let l=yield*kT({input:t,turn:n,retry:r,ttfbTimeoutMs:s,stallTimeoutMs:i});if(l.kind==="terminated")return;if(l.kind==="retry-ttfb"){if((yield*Am("ttfb",o(l.requestStartedAt)))==="terminated")return;continue}let{events:c,ttfb:d,stall:u,requestStartedAt:p}=l,f=yield*CT({events:c,input:t,turn:n,retry:r,ttfb:d,stall:u,stallTimeoutMs:i,requestStartedAt:p});if(f.kind==="terminated")return;if(f.kind==="retry"){if((yield*Am(f.reason,o(p)))==="terminated")return;continue}if(r.reset(),f.kind==="overload-exhausted"){K(t.traceWriter,{phase:"rate_limit",metadata:{reason:"overloaded",source:"mid-stream",attempt:3,exhausted:!0}}),yield{type:"assistant.message",text:hb,sessionId:t.ctx.sessionId},yield{type:"turn.completed",usage:n.withDuration({...n.usage,stopReason:gt}),sessionId:t.ctx.sessionId};return}if(f.kind==="translator-errored"){t.signal.aborted&&(yield{type:"turn.completed",usage:n.terminalUsage(),sessionId:t.ctx.sessionId});return}let m=f.turnResult;if(m===null){yield{type:"turn.completed",usage:n.terminalUsage(),sessionId:t.ctx.sessionId};return}if(n.addRoundUsage(sT(m.usage,m.stopReason,t.model)),t.onUsageProgress?.(n.usage),m.stopReason!=="tool_use"){yield*NT(m,t,n);return}if((yield*FT(m,t,n,e))==="terminated")return}}finally{a.finish(n.elapsedMs())}}var HT=h(()=>{"use strict";Sm();Q();km();bc();Lr();zt();Is();yT();ET();IT();LT();$T();UT();BT()});function jT(t){if(!Number.isFinite(t)||t<=0)return;let e=t*1e3;if(!(e>cW))return new Date(e)}function kc(t){if(!("status"in t))return null;let e=t.status;if(e===429){let n=t.message.split("|");if(n.length>=2){let l=jT(parseInt(n[1].trim(),10));if(l!==void 0)return{kind:"oauth-limit",resetsAt:l}}let r=Ee(t,"anthropic-ratelimit-unified-representative-claim"),o=Ee(t,"anthropic-ratelimit-unified-overage-status"),s=Ee(t,"anthropic-ratelimit-unified-status");if(r!==void 0||o!==void 0||s==="rejected"){let l=Ee(t,"anthropic-ratelimit-unified-reset");if(l!==void 0){let c=jT(Number(l));if(c!==void 0)return{kind:"oauth-limit",resetsAt:c}}return{kind:"oauth-limit-no-ts"}}if(Ee(t,"anthropic-ratelimit-requests-remaining")!==void 0||Ee(t,"anthropic-ratelimit-requests-limit")!==void 0||Ee(t,"anthropic-ratelimit-requests-reset")!==void 0||Ee(t,"anthropic-ratelimit-input-tokens-remaining")!==void 0||Ee(t,"anthropic-ratelimit-input-tokens-limit")!==void 0||Ee(t,"anthropic-ratelimit-input-tokens-reset")!==void 0||Ee(t,"anthropic-ratelimit-output-tokens-remaining")!==void 0||Ee(t,"anthropic-ratelimit-output-tokens-limit")!==void 0||Ee(t,"anthropic-ratelimit-output-tokens-reset")!==void 0)return{kind:"rate-limit-transient",retryAfterMs:Kn(t)};let a=Kn(t);return a!==void 0&&a<=lW?{kind:"rate-limit-transient",retryAfterMs:a}:{kind:"oauth-limit-no-ts"}}return e===400&&t.message.includes("invalid_request_error")&&t.message.includes("credit balance")?{kind:"credit-exhausted"}:null}async function WT(t){let{resetsAt:e,signal:n,readToken:r=Be}=t,o=r(),s=e.getTime()+3e4;return new Promise(i=>{let a,l=!1,c=p=>{l||(l=!0,a!==void 0&&clearInterval(a),n.removeEventListener("abort",d),i(p))},d=()=>{c("aborted")},u=()=>n.aborted?(c("aborted"),!0):Date.now()>=s?(c("timer"),!0):r()!==o?(c("hot-swap"),!0):!1;u()||(a=setInterval(()=>{u()},3e4),a.unref(),n.addEventListener("abort",d,{once:!0}))})}async function KT(t){let{signal:e,readToken:n=Be,retryAfterMs:r}=t,o=n(),s=r!==void 0?Date.now()+r:void 0;return new Promise(i=>{let a,l=!1,c=p=>{l||(l=!0,a!==void 0&&clearInterval(a),e.removeEventListener("abort",d),i(p))},d=()=>{c("aborted")},u=()=>e.aborted?(c("aborted"),!0):n()!==o?(c("hot-swap"),!0):s!==void 0&&Date.now()>=s?(c("timer"),!0):!1;u()||(a=setInterval(()=>{u()},3e4),a.unref(),e.addEventListener("abort",d,{once:!0}))})}var lW,cW,Ec=h(()=>{"use strict";cr();bf();lW=300*1e3,cW=864e13});var GT=h(()=>{"use strict";cr()});import{randomUUID as dW}from"node:crypto";var qT,uW,pW,fW,mW,gW,_c,zT=h(()=>{"use strict";HT();Gt();Di();Ec();zt();GT();ds();Q();qT=7200*1e3,uW=3,pW=12e4,fW=5e3,mW=1e3,gW=60*1e3,_c=class{_client;_authMode;initSessionId;baseUrl;tokenRefresher;autoResumeOnUsageLimit;surface;refreshPromise=null;usageLimitWaitPromise=null;credentialSnapshotStale=!1;constructor(e){this._client=e.client,this._authMode=e.authMode,this.initSessionId=e.initSessionId,this.baseUrl=e.baseUrl,this.tokenRefresher=e.tokenRefresher,this.autoResumeOnUsageLimit=e.autoResumeOnUsageLimit,e.surface!==void 0&&(this.surface=e.surface)}get client(){return this._client}rotateHeaders(){return Kt(this._authMode,this.initSessionId,dW(),void 0,Oi({...this.baseUrl!==void 0?{baseUrl:this.baseUrl}:{}}))}get authMode(){return this._authMode}async forceClientRefresh(){if(!this.tokenRefresher)return null;let e=Be(),n=null;try{if(this.refreshPromise)n=await this.refreshPromise;else{this.refreshPromise=this.tokenRefresher();try{n=await this.refreshPromise??null}finally{this.refreshPromise=null}}}catch{return this.refreshPromise=null,null}if(!n)return null;this._client=n;let r=Be();return{accountId:ko(r??""),swapped:e!==r}}async*turnWithRetries(e,n){this.credentialSnapshotStale&&(await this.forceClientRefresh()&&(e.client=this._client,e.headers=this.rotateHeaders()),this.credentialSnapshotStale=!1),yield*this.turnWithOverloadPause(e,n)}async*turnWithOverloadPause(e,n){let r=wb(this.surface),o=null,s=!1;for(;;){let i=null;for await(let l of this.turnWithUsageLimitRetry(e,n)){if(bb(l)){i=l;break}yield l}if(!i){s&&o!==null&&K(e.traceWriter,{phase:"overload_resume",durationMs:Date.now()-o,metadata:{source:"retry-layer",outcome:"recovered"}});return}if(n()||e.signal.aborted||r===0){yield i;return}o??=Date.now();let a=r-(Date.now()-o);if(a<=0){s&&K(e.traceWriter,{phase:"overload_resume",durationMs:Date.now()-o,metadata:{source:"retry-layer",outcome:"ceiling-reached"}}),yield i;return}if(s||(K(e.traceWriter,{phase:"overload_pause",metadata:{reason:"overloaded",source:"retry-layer",hasResetTimestamp:!1,ceilingMs:r,surface:this.surface??"unknown"}}),s=!0),await Et(Math.min(yb(),a),e.signal),n()||e.signal.aborted)return;e.headers=this.rotateHeaders(),yield{type:"stream.retry",sessionId:e.ctx.sessionId}}}async*turnWithUsageLimitRetry(e,n){let r=null,o=null,s=!1,i=0;for(;;){let u,p=!1;for await(let g of this.turnWithAuthRetry(e,n)){if(g.type==="error"){let y=kc(g.error);if(y&&y.kind==="oauth-limit"){o=y.resetsAt,r=g;break}if(y&&y.kind==="oauth-limit-no-ts"){s=!0,r=g;break}if(y&&y.kind==="rate-limit-transient"&&i<uW){p=!0,u=y.retryAfterMs;break}}yield g}if(!p)break;if(i+=1,n()||e.signal.aborted)return;let m=Math.min(u??fW,pW)+Math.floor(Math.random()*mW);if(K(e.traceWriter,{phase:"rate_limit",metadata:{reason:"retry-after",source:"retry-layer",attempt:i,waitMs:m}}),await Et(m,e.signal),n()||e.signal.aborted)return;e.headers=this.rotateHeaders()}if(!r)return;if(s){let u=ko(Be()??"");if(yield{type:"paused",reason:"usage-limit",accountId:u,autoResume:this.autoResumeOnUsageLimit},K(e.traceWriter,{phase:"usage_limit_pause",metadata:{reason:"usage-limit",source:"retry-layer",hasResetTimestamp:!1,autoResume:this.autoResumeOnUsageLimit}}),!this.autoResumeOnUsageLimit){this.credentialSnapshotStale=!0,yield r;return}let p=Date.now(),f=!1;for(;;){let m;if(this.usageLimitWaitPromise)m="aborted";else{this.usageLimitWaitPromise=KT({signal:e.signal,retryAfterMs:gW});try{m=await this.usageLimitWaitPromise}finally{this.usageLimitWaitPromise=null}}if(m==="aborted")return;let g=u;if(m==="hot-swap"){let w=await this.forceClientRefresh();w&&(e.client=this._client,g=w.accountId)}e.headers=this.rotateHeaders();let y=null;for await(let w of this.turnWithAuthRetry(e,n)){if(!f&&w.type==="error"){let S=kc(w.error);if(S&&(S.kind==="oauth-limit"||S.kind==="oauth-limit-no-ts")){y=w;break}}f||(yield{type:"resumed",hotSwapped:m==="hot-swap",accountId:g},K(e.traceWriter,{phase:"usage_limit_resume",durationMs:Date.now()-p,metadata:{source:"retry-layer",hotSwapped:m==="hot-swap"}}),f=!0),yield w}if(!y)return;if(Date.now()-p>qT){yield y;return}}}if(!o)return;if(o.getTime()-Date.now()>qT){this.credentialSnapshotStale=!0,yield r;return}let a=ko(Be()??""),l=Date.now();if(yield{type:"paused",reason:"usage-limit",resetsAt:o,accountId:a,autoResume:this.autoResumeOnUsageLimit},K(e.traceWriter,{phase:"usage_limit_pause",metadata:{reason:"usage-limit",source:"retry-layer",hasResetTimestamp:!0,autoResume:this.autoResumeOnUsageLimit,resetsAt:o.toISOString()}}),!this.autoResumeOnUsageLimit){this.credentialSnapshotStale=!0,yield r;return}let c;if(this.usageLimitWaitPromise)c=await this.usageLimitWaitPromise;else{this.usageLimitWaitPromise=WT({resetsAt:o,signal:e.signal});try{c=await this.usageLimitWaitPromise}finally{this.usageLimitWaitPromise=null}}if(c==="aborted")return;let d=a;if(c==="hot-swap"){let u=await this.forceClientRefresh();u&&(e.client=this._client,d=u.accountId)}e.headers=this.rotateHeaders(),yield{type:"resumed",hotSwapped:c==="hot-swap",accountId:d},K(e.traceWriter,{phase:"usage_limit_resume",durationMs:Date.now()-l,metadata:{source:"retry-layer",hotSwapped:c==="hot-swap"}}),yield*this.turnWithAuthRetry(e,n)}async*turnWithAuthRetry(e,n){let r=null;for await(let s of Rm(e)){if(n())return;if(s.type==="error"&&this.isRetryableAuth(s.error)){r=s;break}yield s}if(!r)return;if(!await this.forceClientRefresh()){yield r;return}e.client=this._client,e.headers=this.rotateHeaders(),yield*Rm(e)}isRetryableAuth(e){return this._authMode==="oauth"&&this.tokenRefresher!==void 0&&"status"in e&&e.status===401}}});function hW(t){if(t.role!=="user")return!1;let e=t.content;if(typeof e=="string")return!0;if(!Array.isArray(e))return!1;for(let n of e)if(n.type==="tool_result")return!1;return!0}function yW(t){let n=[(t.role==="user"?"User":"Assistant")+":"];if(typeof t.content=="string")n.push(t.content);else if(Array.isArray(t.content))for(let r of t.content){let o=r.type;if(o==="text"&&"text"in r)n.push(r.text);else if(o==="tool_use"){let s=r.name??"unknown",i=ZT(r.input);n.push(`[tool call: ${s} ${i}]`)}else if(o==="tool_result"){let s=r.content;n.push(`[tool result: ${eR(s)}]`)}else o==="image"?n.push("[image]"):o==="document"&&n.push("[document]")}return n.join(`
|
|
1127
1127
|
`)}function bW(t){let e=0;if(typeof t.content=="string")e+=t.content.length;else if(Array.isArray(t.content))for(let n of t.content){let r=n.type;r==="text"&&"text"in n?e+=n.text.length:r==="tool_use"?e+=ZT(n.input).length:r==="tool_result"&&(e+=eR(n.content).length)}return e}function wW(t){if(typeof t=="string")return Wn(t);if(Array.isArray(t)){let e=0;for(let n of t)n.type==="text"&&"text"in n&&(e+=Wn(n.text));return e}return 0}function SW(t){if(typeof t=="string")return Or(t);if(Array.isArray(t)){for(let e of t)if(e.type==="text"&&"text"in e)return Or(e.text)}return!1}function JT(t,e){return yl(t,vW,e??{})}function VT(t,e,n,r){return cf(t,e,Ac,n,r)}function YT(t,e,n){let r=df(t,Ac);return{model:e,max_tokens:n,system:ns,messages:[{role:"user",content:ss(r)}],stream:!0}}function XT(t,e,n){return uf(t,e,n,Ac)}function QT(t,e,n){return pf(t,e,n,Ac)}function ZT(t){try{let e=JSON.stringify(t);return e.length>240?e.slice(0,237)+"...":e}catch{return"{}"}}function eR(t){if(typeof t=="string")return t.length>320?t.slice(0,317)+"...":t;if(Array.isArray(t)){let e=[];for(let r of t)r.type==="text"&&"text"in r&&e.push(r.text);let n=e.join(" ");return n.length>320?n.slice(0,317)+"...":n}return""}var Ac,vW,tR=h(()=>{"use strict";is();Ac={isFreshUserTurn:hW,renderMessage:yW,buildPreamble(t){return[{role:"user",content:rs+`
|
|
1128
1128
|
|
|
1129
1129
|
`+t},{role:"assistant",content:os}]},countChars:bW};vW={listToolResults(t){let e=[];for(let n of t){if(n.role!=="user"||!Array.isArray(n.content))continue;let r=n.content;for(let o of r){if(o.type!=="tool_result")continue;let s=o;e.push({byteLength:wW(s.content),isPlaceholder:SW(s.content),clear(i){s.content=i}})}}return e}}});import{randomUUID as kW}from"node:crypto";async function rR(t){let{state:e,abort:n,retry:r,initSessionId:o,traceWriter:s}=t,i=e.messages.length;if(e.closed)return{compacted:!1,reason:"session-closed",messagesBefore:i,messagesAfter:i};if(!n.isIdle())return{compacted:!1,reason:"turn-in-flight",messagesBefore:i,messagesAfter:i};let a=TW(),l=es(ct(e.lastUsage??{}),jn(e.requestedModel)),c=VT(e.messages,a,l,RW());if(c<0)return nR(e,i,"history-too-short");if(c===0)return nR(e,i,"nothing-to-summarize");let d=e.messages.slice(0,c),u=CW(),p=YT(d,u,AW),f=n.begin(),m;try{if(f.signal.aborted)return{compacted:!1,reason:"aborted",messagesBefore:i,messagesAfter:i};let S=Kt(r.authMode,o,kW()),E=r.client,k=await Promise.resolve(E.messages.create(p,{headers:S,signal:f.signal}));m=await IW(k)}catch(S){return f.signal.aborted?{compacted:!1,reason:"aborted",messagesBefore:i,messagesAfter:i}:{compacted:!1,reason:"summarization-failed: "+(S instanceof Error?S.message:String(S)),messagesBefore:i,messagesAfter:i}}finally{n.clear(f)}if(m.trim().length===0)return{compacted:!1,reason:"empty-summary",messagesBefore:i,messagesAfter:i};let g=QT(e.messages,c,m),y=XT(e.messages,c,m);e.messages.splice(0,e.messages.length,...y);let w=e.messages.length;return ta(s,{trigger:"manual",preCompactionMessages:d,summary:m,keptTailCount:i-c,keepLastNConfig:a,messagesBefore:i,messagesAfter:w,tokensSavedEstimate:g}),{compacted:!0,messagesBefore:i,messagesAfter:w,tokensSavedEstimate:g}}function TW(){let t=v.AFK_COMPACT_KEEP_LAST_TURNS;if(t!==void 0&&t.length>0){let e=Number.parseInt(t,10);if(Number.isFinite(e)&&e>0)return e}return EW}function RW(){let t=v.AFK_COMPACT_SHRINK_FRACTION;if(t!==void 0&&t.length>0){let e=Number.parseFloat(t);if(Number.isFinite(e)&&e>0&&e<1)return e}return Mr}function nR(t,e,n){let r=xW(),{blocksCleared:o,bytesReclaimed:s}=JT(t.messages,r);return o>0?{compacted:!1,reason:"microcompacted",messagesBefore:e,messagesAfter:t.messages.length,microcompaction:{blocksCleared:o,bytesReclaimed:s}}:{compacted:!1,reason:n,messagesBefore:e,messagesAfter:e}}function xW(){return Dr(v.AFK_MICROCOMPACT_TOOL_RESULT_BYTES,v.AFK_MICROCOMPACT_KEEP_LAST)}function CW(){let t=v.AFK_COMPACT_MODEL;return t!==void 0&&t.length>0?Se(t)??t:_W}async function IW(t){let e="";for await(let n of t)if(n.type==="content_block_delta"){let r=n.delta;r.type==="text_delta"&&typeof r.text=="string"&&(e+=r.text)}return e}var EW,_W,AW,oR=h(()=>{"use strict";Gt();tR();is();ts();xr();Q();qe();$();EW=2,_W="claude-haiku-4-5-20251001",AW=1024});function xm(t){if(typeof t=="string")return t;let e=[];for(let n of t)n.type==="text"&&typeof n.text=="string"&&e.push(n.text);return e.join(" ")}function iR(t){return t.role!=="user"?!1:xm(t.content).trim().length>0}function PW(t){let e=t.replace(/\s+/g," ").trim();return e.length<=sR?e:e.slice(0,sR-1)+"\u2026"}function aR(t){let e=[];for(let n=0;n<t.length;n++){let r=t[n];r&&iR(r)&&e.push({turnIndex:n,preview:PW(xm(r.content))})}return e.reverse()}function lR(t,e){let{state:n,abort:r}=t,o=n.messages.length;if(n.closed)return{rewound:!1,reason:"session-closed",messagesBefore:o,messagesAfter:o};if(!r.isIdle())return{rewound:!1,reason:"turn-in-flight",messagesBefore:o,messagesAfter:o};if(!Number.isInteger(e)||e<0||e>=o)return{rewound:!1,reason:"invalid-target",messagesBefore:o,messagesAfter:o};let s=n.messages[e];if(!s||!iR(s))return{rewound:!1,reason:"invalid-target",messagesBefore:o,messagesAfter:o};let i=xm(s.content);return n.messages.splice(e),yc(n.messages),{rewound:!0,reloadText:i,messagesBefore:o,messagesAfter:n.messages.length}}var sR,cR=h(()=>{"use strict";wm();sR=72});var dR=h(()=>{"use strict";ts()});import{randomUUID as uR}from"node:crypto";var MW,Tc,pR=h(()=>{"use strict";ir();Gt();Di();Xh();Qh();ay();vn();Tf();xr();qe();wm();oT();af();zT();oR();cR();dR();pe();MW=[{value:"claude-sonnet-5",displayName:"Claude Sonnet 5",description:"Latest balanced Claude \u2014 recommended default"},{value:"claude-opus-5",displayName:"Claude Opus 5",description:"Highest-capability Claude for agentic coding"},{value:"claude-haiku-4-5-20251001",displayName:"Claude Haiku 4.5",description:"Fastest, cheapest Claude"}],Tc=class{initSessionId;promptStream;maxTokens;tools;systemPrefix;thinking;effort;baseUrl;maxToolUseIterations;traceWriter;subagentId;state;abort;retry;cwdDependentsFactory;onPermissionMode;mcpManager;hookRegistry;throttleQueue;constructor(e){this.initSessionId=e.sessionId??uR(),this.promptStream=e.promptStream,this.maxTokens=e.maxTokens,this.tools=e.tools,this.systemPrefix=e.systemPrefix,this.thinking=e.thinking,e.effort!==void 0&&(this.effort=e.effort),e.baseUrl!==void 0&&(this.baseUrl=e.baseUrl),e.maxToolUseIterations!==void 0&&(this.maxToolUseIterations=e.maxToolUseIterations),this.traceWriter=e.traceWriter,e.subagentId!==void 0&&(this.subagentId=e.subagentId),this.cwdDependentsFactory=e.cwdDependentsFactory,this.onPermissionMode=e.onPermissionMode,this.mcpManager=e.mcpManager,e.hookRegistry!==void 0&&(this.hookRegistry=e.hookRegistry),e.throttleQueue!==void 0&&(this.throttleQueue=e.throttleQueue),this.retry=new _c({client:e.client,authMode:e.authMode,initSessionId:this.initSessionId,...e.baseUrl!==void 0?{baseUrl:e.baseUrl}:{},...e.tokenRefresher?{tokenRefresher:e.tokenRefresher}:{},autoResumeOnUsageLimit:e.autoResumeOnUsageLimit??!0,...e.surface!==void 0?{surface:e.surface}:{}}),this.state=rT({model:e.model,...e.requestedModel!==void 0?{requestedModel:e.requestedModel}:{},permissionMode:e.permissionMode??"default",userSystem:e.userSystem,toolDispatcher:e.toolDispatcher,...e.initialMessages?{initialMessages:e.initialMessages}:{},...e.autoCompactThreshold!==void 0?{autoCompactThreshold:e.autoCompactThreshold}:{}}),this.abort=new Pr}async*[Symbol.asyncIterator](){yield{type:"session.init",info:{sessionId:this.initSessionId,model:this.state.currentModel,permissionMode:this.state.currentPermissionMode,cwd:process.cwd(),tools:[],slashCommands:[],skills:[],plugins:[],mcpServers:this.mcpManager?.getServerStates().map(r=>({name:r.serverName,status:r.status}))??[],apiKeySource:this.retry.authMode,version:"anthropic-direct-v1"}};let n=this.promptStream[Symbol.asyncIterator]();try{for(;!this.state.closed;){let r=await Promise.race([n.next(),this.abort.closedPromise]);if(r==="__closed__")break;let o=r;if(o.done)break;let s=o.value,i=this.abort.begin();if(i.signal.aborted){this.abort.clear(i);return}yc(this.state.messages),this.state.messages.push({role:"user",content:s.content});let a=this.composeSystem(),l=Kt(this.retry.authMode,this.initSessionId,uR(),this.effort!==void 0,Oi({...this.baseUrl!==void 0?{baseUrl:this.baseUrl}:{}})),c={client:this.retry.client,messages:this.state.messages,system:a,tools:this.state.currentPermissionMode==="plan"?this.tools:this.tools?.filter(u=>u.name!==ze)??null,toolDispatcher:this.state.toolDispatcher,model:this.state.currentModel,maxTokens:this.maxTokens,headers:l,signal:i.signal,ctx:{sessionId:this.initSessionId},...this.thinking!==void 0?{thinking:this.thinking}:{},...this.effort!==void 0?{effort:this.effort}:{},...this.baseUrl!==void 0?{baseUrl:this.baseUrl}:{},...this.maxToolUseIterations!==void 0?{maxToolUseIterations:this.maxToolUseIterations}:{},...this.traceWriter?{traceWriter:this.traceWriter}:{},...this.subagentId!==void 0?{subagentId:this.subagentId}:{},...this.throttleQueue?{throttleQueue:this.throttleQueue}:{},onUsageProgress:u=>{this.state.lastUsage=u}},d=!1;try{for await(let u of this.retry.turnWithRetries(c,()=>this.state.closed)){if(this.state.closed)return;u.type==="turn.completed"&&(this.state.lastUsage=u.usage,this.abort.clear(i)),(u.type==="turn.completed"||u.type==="error")&&(d=!0),yield u}}catch(u){if(this.state.closed)return;if(i.signal.aborted){this.abort.clear(i),d||(yield this.makeInterruptedTurnEvent());continue}yield{type:"error",error:u instanceof Error?u:new Error(String(u))};return}finally{this.abort.clear(i)}if(this.state.closed)return;if(i.signal.aborted){d||(yield this.makeInterruptedTurnEvent());continue}if(this.state.autoCompactThreshold!==void 0&&!this.state.closed){let u=this.state.lastUsage,p=jn(this.state.requestedModel);if(u!==null&&p>0){let f=ct(u);if(Zo(f,p,this.state.autoCompactThreshold))try{this.hookRegistry&&await this.hookRegistry.dispatch({event:"PreCompact",sessionId:this.initSessionId,trigger:"auto"}),await this.compact()}catch(m){if(!(m instanceof Z))throw m}}}}}catch(r){yield{type:"error",error:r instanceof Error?r:new Error(String(r))}}finally{try{await n.return?.()}catch{}}}composeSystem(){this.state.userSystem&&(this.state.userSystem=So(this.state.userSystem));let e=this.systemPrefix,n=this.state.userSystem,r=[];e&&e.length>0&&r.push(...e),n&&n.length>0&&r.push({type:"text",text:n});let o=Hd(this.state.currentPermissionMode);o!==null&&r.push(o);let s=Wd(this.state.currentPermissionMode);return s!==null&&r.push(s),r.length===0?null:fo({baseUrl:this.baseUrl})?Jh(r,mo()):r}async interrupt(){this.abort.requestAbort("interrupted")}makeInterruptedTurnEvent(){return{type:"turn.completed",usage:{stopReason:"interrupted",resultSubtype:"interrupted",isError:!1},sessionId:this.initSessionId}}async setModel(e){e!==void 0&&e.length>0&&(this.state.requestedModel=e,this.state.currentModel=Se(e)??e)}async setPermissionMode(e){this.state.currentPermissionMode=e;let n=rt(e);this.state.toolDispatcher.setAllowAll?.(n),this.onPermissionMode?.(e)}setCwd(e){if(this.state.toolDispatcher.setResolveBase?.(e),!this.cwdDependentsFactory)return;let{userSystem:n,dispatcher:r}=this.cwdDependentsFactory(e);this.state.userSystem=n,this.state.toolDispatcher=r}async supportedCommands(){return Dl()}async supportedModels(){return MW.map(e=>({...e}))}async supportedAgents(){return[]}async getContextUsage(){let e=this.state.lastUsage,n=Jo(this.state.requestedModel),r;if(e&&n>0){let i=ct(e);r=Math.min(100,Math.max(0,i/n*100))}let{totalTokens:o,apiUsage:s}=Qo(e);return{tools:[],agents:[],isAutoCompactEnabled:this.state.autoCompactThreshold!==void 0,apiUsage:s,totalTokens:o,...r!==void 0?{percentage:r}:{},maxTokens:n}}async mcpServerStatus(){return this.mcpManager?this.mcpManager.getServerStates().map(e=>({name:e.serverName,status:e.status})):[]}async accountInfo(){return{subscriptionType:this.retry.authMode==="oauth"?"claude-subscription":"api-key"}}async reauth(){return this.retry.forceClientRefresh()}async rewindFiles(e,n){return{canRewind:!1,error:"anthropic-direct provider does not support file checkpoint rewind"}}async compact(){return rR({state:this.state,abort:this.abort,retry:this.retry,initSessionId:this.initSessionId,...this.traceWriter?{traceWriter:this.traceWriter}:{}})}listRewindTargets(){return aR(this.state.messages)}async rewindConversation(e){return lR({state:this.state,abort:this.abort},e)}close(){this.state.closed=!0,this.abort.requestAbort("closed"),this.abort.markClosed()}}});function Cm(t,e){let n=ul(e),r=t.maxOutputTokens;if(typeof r=="number"&&Number.isFinite(r)&&r>0){let o=Math.floor(r);if(o>n){let s=`max:${e}:${o}`;return Rc.has(s)||(Rc.add(s),console.warn(`[afk] maxOutputTokens ${o} exceeds the ${e} output ceiling (${n}); clamping to ${n}.`)),n}return o}return n}function fR(t){if(!t||t.length===0)return;let e=[];for(let n of t)n.user.length>0&&e.push({role:"user",content:n.user}),n.assistant.length>0&&e.push({role:"assistant",content:n.assistant});return e.length>0?e:void 0}function Im(t,e,n){switch(t.type){case"adaptive":return{type:"adaptive",display:"summarized"};case"disabled":return{type:"disabled"};case"enabled":{if(typeof n=="string"&&DW(n))return{type:"adaptive",display:"summarized"};let r=Math.floor(e*FW),o=Math.max(1024,e-1-r),s=t.budgetTokens!==void 0&&Number.isFinite(t.budgetTokens)?Math.floor(t.budgetTokens):void 0,i=Math.min(Math.max(s??o,1024),o);if(s!==void 0&&s>o){let a=`think:${n??"default"}:${s}:${e}`;Rc.has(a)||(Rc.add(a),console.warn(`[afk] thinking budgetTokens ${s} leaves too little of max_tokens ${e} for the reply; clamping to ${o}.`))}return{type:"enabled",budget_tokens:i,display:"summarized"}}}}function Pm(t,e){if(t!==void 0)return t;let n=e.toLowerCase();if(/(claude-)?(opus|sonnet)-(4-[678]|5)/.test(n))return"max"}var OW,DW,Rc,FW,Mm=h(()=>{"use strict";xr();ts();OW=t=>/opus-4-(7|[89])/.test(t),DW=t=>OW(t)||/(claude-)?(opus|sonnet)-5/.test(t),Rc=new Set,FW=.25});function mR(t,e,n){let r=ll(e,n?.cwd),o=oo(t.memoryStore,void 0,t.surface);for(let[a,l]of o)t.readOnlyMemory&&a!=="memory_search"||r.set(a,l);n?.runtimeStateSource&&r.set("get_runtime_state",ar(n.runtimeStateSource));for(let a of t.customTools)r.has(a.schema.name)||r.set(a.schema.name,a.handler);if(t.mcpManager){t.getMcpToolsCache()||t.setMcpToolsCache(t.mcpManager.getMcpTools()),t.getMcpHandlersCache()||t.setMcpHandlersCache(t.mcpManager.getMcpHandlers());for(let[a,l]of t.getMcpHandlersCache())r.set(a,l)}let s=t.getMcpToolsCache()??[],i=n?.planExitControls;return i&&r.set(ze,ea(i)),new St({handlers:r,sessionGrantManager:t.sessionGrantManager,allowAll:rt(e),schemas:[...t.schemas,...s,...i?[Zi]:[]],hookRegistry:wa(n?.hookRegistry,t.hookRegistry),permissions:ka(t.mcpManager?va(t.permissions,t.mcpManager.getMcpToolWireNames()):t.permissions,t.customTools.map(a=>a.schema.name)),subagentExecutor:t.subagentExecutor,skillExecutor:t.skillExecutor,composeExecutor:t.composeExecutor,...t.canUseTool!==void 0?{canUseTool:t.canUseTool}:{},cwd:n?.cwd,readRoots:n?.readRoots,writeRoots:n?.writeRoots,...n?.env!==void 0?{env:n.env}:{},sessionId:n?.sessionId,parentSessionId:n?.parentSessionId,...n?.subagentId!==void 0?{subagentId:n.subagentId}:{},...n?.subagentToolOutputCapBytes!==void 0?{maxOutputBytes:n.subagentToolOutputCapBytes}:{},...n?.traceWriter?{traceWriter:n.traceWriter}:{},readOnlyBash:t.readOnlyBash})}var gR=h(()=>{"use strict";Ma();Yp();vn();xt();Re();Sa();Ea();ir()});function Om(){return LW}var LW,Dm=h(()=>{"use strict";LW=null});function hR(t){let e=typeof t.baseUrl=="string"&&t.baseUrl.length>0,n=e?t.apiKey&&t.apiKey.length>0?t.apiKey:v.AFK_LOCAL_API_KEY||"local":t.apiKey&&t.apiKey.length>0?t.apiKey:v.ANTHROPIC_API_KEY||v.CLAUDE_CODE_OAUTH_TOKEN||"";return{localMode:e,token:n}}var yR=h(()=>{"use strict";$()});function xc(t,e,n){let r=go({cwd:e,...n.sessionId!==void 0?{sessionId:n.sessionId}:{},surface:n.surface,...n.depth!==void 0?{depth:n.depth}:{},...n.maxDepth!==void 0?{maxDepth:n.maxDepth}:{},workspace:n.workspace}),o=[t.toolBase];return t.userSystem&&o.push(t.userSystem),o.push(t.memoryPrompt),t.hotMemory.length>0&&o.push(t.hotMemory),o.push(r),t.manifest.length>0&&o.push(t.manifest),o.join(`
|