@x-otto/agent 0.0.1-alpha.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/engine-nodes.ts","../src/ports.ts","../src/trace.ts","../src/debug-port.ts","../src/tool-executor.ts","../src/vision-gate.ts","../src/work-loop-stream-error.ts","../src/types.ts","../src/agent.ts","../src/tool-result-clamp.ts","../src/lifecycle-async-tool.ts","../src/pipeline.ts","../src/context-pipeline.ts","../src/memory-lifecycle.ts","../src/trace-views.ts","../src/errors.ts"],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ import{AgentError as e,PROVIDER_IMAGE_INLINE_MAX_BYTES as t,TypedEventEmitter as n,createLogger as r}from"@x-otto/shared";import{CONVERSATION_SUMMARY_PREFIX as i,extractToolResultText as a,getToolCallsByAssistantMessage as o,hasToolCalls as s,modelSupportsImages as c}from"@x-otto/interchange";import{randomUUID as l}from"node:crypto";import{classifyAuthErrorType as u,classifyStreamError as d,extractAnthropicRateLimit as f,extractRetryAfterMs as p,hasTrailingInvokeXml as m,isAuthError as h,isNetworkDisconnectError as g}from"@x-otto/provider";var _=class extends e{constructor(e){super(e??`Agent aborted`,{code:`AGENT_ABORTED`}),this.name=`AbortError`}},v=class extends e{maxTurns;partialText;extensions;constructor(e,t=``,n=0){let r=e*(1+n);super(n>0?`Max tool turns exceeded: ${r} (base ${e} × ${1+n} extensions)`:`Max tool turns exceeded: ${e}`,{code:`AGENT_MAX_TOOL_TURNS`}),this.name=`MaxToolTurnsError`,this.maxTurns=e,this.partialText=t,this.extensions=n}get effectiveMaxTurns(){return this.maxTurns*(1+this.extensions)}},y=class extends e{dimension;used;budget;partialText;constructor(e,t,n,r=``){super(e===`tokens`?`Prompt output-token budget exceeded: ${t} / ${n} tokens`:`Prompt wall-clock budget exceeded: ${Math.round(t/1e3)}s / ${Math.round(n/1e3)}s`,{code:`AGENT_PROMPT_BUDGET_EXCEEDED`}),this.name=`PromptBudgetExceededError`,this.dimension=e,this.used=t,this.budget=n,this.partialText=r}};const b={now:()=>Date.now()},x={random:()=>Math.random()},S={uuid:()=>l()},C=(e,t)=>new Promise(n=>{if(t?.aborted){n();return}let r=()=>{clearTimeout(i),n()},i=setTimeout(()=>{t?.removeEventListener(`abort`,r),n()},e);t?.addEventListener(`abort`,r,{once:!0})}),w=[{id:`loop.start`,category:`agent_work_loop`,label:`Loop Start`,pausable:!0,traceable:!0},{id:`model.before`,category:`agent_work_loop`,label:`Model Before`,pausable:!0},{id:`model.after`,category:`agent_work_loop`,label:`Model After`,pausable:!0},{id:`tool.before`,category:`agent_work_loop`,label:`Tool Before`,pausable:!0},{id:`tool.after`,category:`agent_work_loop`,label:`Tool After`,pausable:!0},{id:`loop.end`,category:`agent_work_loop`,label:`Loop End`,pausable:!0,traceable:!0},{id:`loop.cleanup`,category:`agent_work_loop`,label:`Loop Cleanup`,pausable:!0},{id:`agent.aborted`,category:`agent_work_loop`,label:`Agent Aborted`,pausable:!0,traceable:!0},{id:`agent.error`,category:`agent_work_loop`,label:`Agent Error`,pausable:!0,traceable:!0},{id:`agent.done`,category:`agent_work_loop`,label:`Agent Done`,pausable:!0,traceable:!0},{id:`steering.check`,category:`work_loop_injection`,label:`Steering Check`,pausable:!0},{id:`follow.up.check`,category:`work_loop_injection`,label:`Follow Up Check`,pausable:!0},{id:`context.transform`,category:`work_loop_injection`,label:`Context Transform`,pausable:!0},{id:`tool.resolve`,category:`tool_executor`,label:`Tool Resolve`,pausable:!0},{id:`tool.validate`,category:`tool_executor`,label:`Tool Validate`,pausable:!0},{id:`tool.hook.before`,category:`tool_executor`,label:`Tool Hook Before`,pausable:!0},{id:`tool.hook.after`,category:`tool_executor`,label:`Tool Hook After`,pausable:!0},{id:`prompt.before`,category:`session_prompt_lifecycle`,label:`Prompt Before`,pausable:!0,traceable:!0},{id:`prompt.after`,category:`session_prompt_lifecycle`,label:`Prompt After`,pausable:!0,traceable:!0},{id:`context.build`,category:`session_prompt_lifecycle`,label:`Context Build`,pausable:!0,traceable:!0},{id:`messages.persist`,category:`session_prompt_lifecycle`,label:`Messages Persist`,pausable:!0,traceable:!0},{id:`memory.prune`,category:`work_loop_injection`,label:`Memory Prune`,traceable:!0},{id:`memory.archive`,category:`session_prompt_lifecycle`,label:`Memory Archive`,traceable:!0},{id:`chat.message.before`,category:`lifecycle_hook`,label:`Chat Message Before`,hook:`interceptor`},{id:`chat.message.after`,category:`lifecycle_hook`,label:`Chat Message After`,hook:`interceptor`},{id:`chat.params`,category:`lifecycle_hook`,label:`Chat Params`,hook:`interceptor`},{id:`system.prompt.transform`,category:`lifecycle_hook`,label:`System Prompt Transform`,hook:`interceptor`},{id:`messages.transform`,category:`lifecycle_hook`,label:`Messages Transform`,hook:`interceptor`},{id:`tool.execute.before`,category:`lifecycle_hook`,label:`Tool Execute Before`,hook:`interceptor`},{id:`tool.execute.after`,category:`lifecycle_hook`,label:`Tool Execute After`,hook:`interceptor`},{id:`memory.prune.before`,category:`lifecycle_hook`,label:`Memory Prune Before`,hook:`interceptor`},{id:`session.idle`,category:`lifecycle_hook`,label:`Session Idle`,hook:`observer`},{id:`session.error`,category:`lifecycle_hook`,label:`Session Error`,hook:`observer`},{id:`status.change`,category:`turn_observable`,label:`Status Change`,observable:!0},{id:`turn.start`,category:`turn_observable`,label:`Turn Start`,observable:!0,traceable:!0},{id:`turn.end`,category:`turn_observable`,label:`Turn End`,observable:!0,traceable:!0},{id:`stream.event`,category:`turn_observable`,label:`Stream Event`,observable:!0,traceable:!0},{id:`tool.call.start`,category:`turn_observable`,label:`Tool Call Start`,observable:!0,traceable:!0},{id:`tool.call.end`,category:`turn_observable`,label:`Tool Call End`,observable:!0,traceable:!0},{id:`steering.injected`,category:`turn_observable`,label:`Steering Injected`,observable:!0},{id:`follow.up.start`,category:`turn_observable`,label:`Follow Up Start`,observable:!0},{id:`max.turns`,category:`turn_observable`,label:`Max Tool Turns Reached`,observable:!0,traceable:!0},{id:`progress.stall`,category:`turn_observable`,label:`Progress Stall Detected`,observable:!0,traceable:!0},{id:`tool.call.mismatch`,category:`turn_observable`,label:`Tool Call Protocol Mismatch`,observable:!0,traceable:!0},{id:`prompt.budget`,category:`turn_observable`,label:`Prompt Budget Exceeded`,observable:!0,traceable:!0},{id:`compaction.reactive`,category:`turn_observable`,label:`Reactive Compaction`,observable:!0,traceable:!0},{id:`image.cap`,category:`turn_observable`,label:`Image Cap`,traceable:!0},{id:`image.vision-gate`,category:`turn_observable`,label:`Vision Capability Gate`,traceable:!0},{id:`image.vision-delegate`,category:`turn_observable`,label:`Vision Delegation Result`,observable:!0,traceable:!0},{id:`image.degradation`,category:`turn_observable`,label:`Image Degradation`,observable:!0,traceable:!0},{id:`process.memory.sample`,category:`turn_observable`,label:`Process Memory Sample`,traceable:!0},{id:`stream.retry`,category:`turn_observable`,label:`Stream Retry`,observable:!0,traceable:!0},{id:`stream.retry.accelerated`,category:`turn_observable`,label:`Stream Retry Accelerated`,observable:!0,traceable:!0},{id:`turn.truncated`,category:`turn_observable`,label:`Turn Truncated`,observable:!0,traceable:!0},{id:`rate.limit.exhausted`,category:`turn_observable`,label:`Rate Limit Exhausted`,observable:!0,traceable:!0},{id:`stream.auth-failed`,category:`turn_observable`,label:`Stream Auth Failed`,observable:!0,traceable:!0},{id:`error`,category:`turn_observable`,label:`Error`,observable:!0},{id:`abort`,category:`turn_observable`,label:`Abort`,observable:!0},{id:`lifecycle.tool.completed`,category:`turn_observable`,label:`Lifecycle Tool Completed`,observable:!0},{id:`lifecycle.tool.completed.crossBoundary`,category:`turn_observable`,label:`Lifecycle Tool Completed (Cross Prompt Boundary)`,observable:!0}],T=w;function E(e){return T.filter(t=>t[e]!==void 0&&t[e]!==!1)}const D=T.filter(e=>e.hook!==void 0).map(e=>e.id),O=T.filter(e=>e.observable===!0).map(e=>e.id),k=T.filter(e=>e.traceable===!0).map(e=>e.id),A=T.filter(e=>e.pausable===!0).map(e=>({point:e.id,name:e.label,category:e.category})),j={maxToolTurns:120,traceResultMaxChars:512,maxToolResultChars:1e5,minToolResultChars:2e3,promptToolResultFraction:.5,maxToolConcurrency:10,progressDistinctRatio:.5,progressSignatureCap:512,progressSignatureArgsMaxChars:1024,stallWindowTurns:8,stallRepeatThreshold:4};function M(e,t){let n=Math.max(0,e.length-t);return e.slice(n).map((e,t)=>{let r=typeof e.content==`string`?e.content:JSON.stringify(e.content);return{index:n+t,role:e.role,preview:r.slice(0,200),toolName:e.role===`tool_result`?e.toolName:void 0,tokenEstimate:Math.ceil(r.length/4)}})}function N(e){return{turn:0,frameDepth:0,messagesCount:0,tokenUsage:{input:0,output:0},metadata:{},systemPrompt:``,messagesSummary:[],llmParams:{},...e}}function P(e){return(t,n,r={})=>{let i=e.getLlmParams?.(),a=r.summarySource??e.getMessagesForSummary?.();return e.debug?.pause(N({turn:e.getTurn(),point:t,frameDepth:n,messagesCount:r.messagesCount??e.getMessagesCount(),lastToolName:r.lastToolName,tokenUsage:e.getTokenUsage()??{input:0,output:0},metadata:r.metadata??{},...i?{systemPrompt:i.systemPrompt??``,llmParams:{temperature:i.temperature,maxTokens:i.maxTokens,thinkingLevel:i.thinkingLevel}}:{},...a?{messagesSummary:M(a,10)}:{}}))}}function F(e,t){if(e?.command.type===`stop`)throw new _(`Stopped by debugger`);let n=e?.payload;if(!(!n||!t)){if(n.systemPrompt!==void 0&&t.setSystemPrompt?.(n.systemPrompt),t.messages&&n.removeMessageIndices?.length){let e=[...n.removeMessageIndices].sort((e,t)=>t-e);for(let n of e)n>=0&&n<t.messages.length&&t.messages.splice(n,1)}if(t.messages&&n.injectMessages?.length){let e=t.now??b.now;for(let r of n.injectMessages)r.role===`user`&&t.messages.push({role:`user`,content:r.content,timestamp:e()})}n.llmParams&&(n.llmParams.temperature!==void 0&&t.setTemperature?.(n.llmParams.temperature),n.llmParams.maxTokens!==void 0&&t.setMaxTokens?.(n.llmParams.maxTokens),n.llmParams.thinkingLevel!==void 0&&t.setThinkingLevel?.(n.llmParams.thinkingLevel))}}const I={prune:`memory.prune`,archive:`memory.archive`};function L(e,t){let n=I[t.phase];n!==void 0&&e.record({kind:`lifecycle`,node:n,turn:t.turn,payload:{trigger:t.trigger,sessionId:t.sessionId,...t.metrics}})}const R=t;function z(e){return e.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g,``).replace(/\x1b\[[\d;?]*[ -/]*[@-~]/g,``).replace(/\x1b\[[\d;?]*(?![\d;@-~])/g,``).replace(/(?:3[89]|4[0-9]);2;\d{1,3};\d{1,3};\d{1,3}m/g,``).replace(/(?:3[89]|4[0-9]);5;\d{1,3}m/g,``).replace(/(?:^|(?<=[\s;m]))(?:\d{1,3}(?:;\d{1,3})+|;\d{1,3})m/gi,``)}function B(e){return e.map(e=>e.type===`text`&&typeof e.text==`string`?{...e,text:z(e.text)}:e)}function V(e,t){return e.map(e=>{if(e.type!==`text`)return e;let n=z(e.text);if(n.length<=t)return{...e,text:n};let r=Math.floor(t*.7),i=t-r,a=n.length-t;return{...e,text:`${n.slice(0,r)}\n\n[… ${a} chars truncated (tool result exceeded ${t} char budget) …]\n\n${n.slice(n.length-i)}`}})}const H=2e3,ee=4e3;function U(e){let t=0;for(let n of e)n.type===`text`?t+=n.text.length:t+=ee;return t}var te=class{consumed=0;constructor(e,t){this.totalChars=e,this.minPerTool=t}budgetFor(e){if(this.totalChars===void 0)return e;let t=Math.max(0,this.totalChars-this.consumed),n=Math.min(this.minPerTool,e);return Math.max(n,Math.min(e,t))}charge(e){this.consumed+=Math.max(0,e)}get consumedChars(){return this.consumed}};function ne(e,t){if(!(!e||e<=0))return Math.max(0,Math.floor(e*t*4))}async function re(e,t,n,r){if(!e.some(e=>e.type===`text`&&e.text.length>t||e.type===`image`&&e.source.length*.75>R))return V(e,t);let i=0,a=0,o=e.filter(e=>e.type===`image`).length,s=[];for(let c of e){if(c.type===`image`){let e=c.source.length*.75;if(e<=R){s.push(c);continue}if(!r){s.push({type:`text`,text:`[image: ${Math.round(e)} bytes — omitted, no spill port configured]`});continue}let t=o>1?`${n}_img${a}`:`${n}_img`;a++;let i=await r(t,c.source);if(!i){s.push({type:`text`,text:`[image: ${Math.round(e)} bytes — omitted, no spill port configured]`});continue}s.push({type:`text`,text:`[image: ${Math.round(e)} bytes, stored to ${i}, use read tool to inspect if needed]`});continue}if(c.type!==`text`||c.text.length<=t){s.push(c.type===`text`?{...c,text:z(c.text)}:c);continue}if(!r){s.push(...V([c],t));continue}let l=e.filter(e=>e.type===`text`).length>1?`${n}_b${i}`:n;i++;let u=await r(l,c.text);if(!u){s.push(...V([c],t));continue}let d=z(c.text),f=Math.floor(H*.7),p=H-f;s.push({...c,text:`[tool result stored to ${u} (${d.length} chars). Use the read tool on that path to recover the full output.]\n\nPreview:\n${d.slice(0,f)}\n\n[… ${d.length-H} chars omitted …]\n\n${d.slice(d.length-p)}`})}return s}async function ie(e,t,n){let r=Array(e.length),i=0,a=async()=>{for(;;){let t=i++;if(t>=e.length)return;try{await n(e[t]),r[t]={status:`fulfilled`,value:void 0}}catch(e){r[t]={status:`rejected`,reason:e}}}},o=Math.min(Number.isFinite(t)&&t>=1?Math.floor(t):1,e.length);return await Promise.all(Array.from({length:o},()=>a())),r}function ae(e,t){let n=e.buildContext(),r=[];n.summary&&r.push({role:`user`,timestamp:t.now(),content:[{type:`text`,text:`${i}\n${n.summary}`}]}),r.push(...n.messages);let a=r.map(e=>{if(!Array.isArray(e.content))return e;let t=e.content.map(e=>e.type===`text`&&typeof e.text==`string`?{...e,text:z(e.text)}:e);return{...e,content:t}});return{messages:a,messagesBefore:a.length,hasSummary:!!n.summary}}function oe(e,t){return t.length===0?{fullSystemPrompt:e,systemPromptSegments:void 0}:{fullSystemPrompt:[e,...t].join(`
2
+
3
+ `),systemPromptSegments:[{text:e,cache:`stable`},...t.map(e=>({text:e,cache:`volatile`}))]}}async function se(e,t,n,r,i,a){e.pruned&&t?.notifyPrune&&t.notifyPrune(e.pruneMetrics?.tokensSaved??0,e.pruneMetrics?{prunedCount:e.pruneMetrics.prunedCount,messagesBefore:e.pruneMetrics.messagesBefore,messagesAfter:e.pruneMetrics.messagesAfter}:void 0),e.compacted&&e.summary&&e.replacement&&t?.recordCompaction&&(t.recordCompaction(e.summary,e.replacement),n&&(n.compacted=!0,n.replacement=e.replacement),await le(r,i,a,e.messages.length))}async function ce(e,t,n,r,i={}){let{recorder:a,hooks:o,persistence:s,sink:c}=i;if(!e||r?.aborted)return t;let l=t,u=e.needsPrune(l);if(!u&&!e.needsCompaction(l))return t;let d=!1;if(u&&o){let e={cancelled:!1};await o.execute(`memory.prune.before`,{sessionId:n,messageCount:l.length},e),d=e.cancelled}let f=await e.process(l,n,r,{skipPrune:d});return W(a,n,`in_loop`,f),await se(f,s,c,o,n,l.length),f.messages}async function le(e,t,n,r){e&&(await e.emit(`compaction.before`,{sessionId:t,messageCount:n}),await e.emit(`compaction.after`,{sessionId:t,retainedCount:r}))}function W(e,t,n,r){e&&(r.pruned&&L(e,{phase:`prune`,sessionId:t,trigger:n,metrics:{...r.pruneMetrics}}),r.archivePath&&L(e,{phase:`archive`,sessionId:t,trigger:n,metrics:{archivePath:r.archivePath}}))}async function ue(e,t,n,r,i={}){let{recorder:a,hooks:o,persistence:s,sink:c}=i;if(!e||r?.aborted)return null;let l=await e.process(t,n,r,{force:!0});return W(a,n,`reactive_overflow`,l),await se(l,s,c,o,n,t.length),!l.compacted&&!l.pruned?null:l.messages}function de(e){let{agentName:t,sessionId:n,tools:r,hooks:i,memory:a,recorder:o,persistence:s,onCompaction:c}=e;return{transformContext:async(e,l)=>{if(l?.aborted)return e;let u={messages:e};await i.execute(`messages.transform`,{messages:e,tools:r,agentName:t,sessionId:n},u);let d=e.length,f={compacted:!1},p=await ce(a,u.messages,n,l,{recorder:o,hooks:i,persistence:s,sink:f});return f.compacted&&f.replacement&&c?.(d,f.replacement),p},reactiveCompact:a?async(e,t)=>{let r=e.length,l={compacted:!1},u=await ue(a,e,n,t,{recorder:o,persistence:s,sink:l,hooks:i});return l.compacted&&l.replacement&&c?.(r,l.replacement),u}:void 0}}function fe(e){return e===`low`||e===`medium`||e===`high`||e===`xhigh`||e===`max`}async function pe(e,t,n,r){let i={temperature:t.temperature,maxTokens:t.maxTokens,thinkingLevel:t.thinkingLevel,metadata:{}};await e.execute(`chat.params`,{sessionId:r,model:n.id,provider:n.provider,thinkingLevel:t.thinkingLevel},i),t.temperature=i.temperature,t.maxTokens=i.maxTokens,fe(i.thinkingLevel)&&(t.thinkingLevel=i.thinkingLevel)}function me(e){if(e.role===`user`){if(typeof e.content==`string`)return e.content;if(Array.isArray(e.content))return e.content.map(e=>e.type===`text`?e.text:``).filter(e=>e.length>0).join(`
4
+ `)}}async function he(e,t,n,r,i){let a={systemPrompt:t.systemPrompt,systemTail:t.systemTail?[...t.systemTail]:[]};return await e.execute(`system.prompt.transform`,{systemPrompt:t.systemPrompt,sessionId:n,tools:r,userText:i},a),{systemPrompt:a.systemPrompt,systemTail:a.systemTail}}const ge={async planPromptContext(e){let{persistence:t,clock:n,hooks:r,params:i,model:a,sessionId:o,tools:s,onContextSelected:c}=e,{messages:l,messagesBefore:u,hasSummary:d}=ae(t,n);await c?.(l,d),await pe(r,i,a,o);let{systemPrompt:f,systemTail:p}=await he(r,i,o,s,e.userText??[...l].reverse().map(me).find(Boolean));return{messages:l,messagesBefore:u,hasSummary:d,stableSystem:f,systemTail:p}},buildTurnInput(e){let{fullSystemPrompt:t,systemPromptSegments:n}=oe(e.stableSystem,e.volatileTail);return{model:e.model,systemPrompt:t,...n?{systemPromptSegments:n}:{},...e.cacheRetention?{cacheRetention:e.cacheRetention}:{},messages:e.llmMessages,tools:e.tools.length>0?e.tools:void 0,thinkingLevel:e.thinkingLevel,maxTokens:e.maxTokens,temperature:e.temperature}}};function _e(e,t,n){return`${e===`capped`?`[earlier image capped`:`[earlier image omitted to fit context`}: ${t??`attachment`}, turn ${n}]`}function ve(e,t){if(e.length===0)return{messages:e,degradedCount:0};let n=Math.max(0,Math.min(t,e.length)),r=0;return{messages:e.map((e,t)=>{if(t>=n||!Array.isArray(e.content)||!e.content.some(e=>e.type===`image`))return e;let i=`toolName`in e?e.toolName:void 0,a=e.content.map(e=>e.type===`image`?(r++,{type:`text`,text:_e(`omitted`,i,t)}):e);return{...e,content:a}}),degradedCount:r}}function ye(e,t=20){let n=0;for(let t of e)if(Array.isArray(t.content))for(let e of t.content)e.type===`image`&&n++;if(n<=t)return{messages:e,cappedCount:0};let r=n-t,i=0;return{messages:e.map((e,t)=>{if(!Array.isArray(e.content)||i>=r)return e;let n=!1;for(let t of e.content)if(t.type===`image`){n=!0;break}if(!n)return e;let a=`toolName`in e?e.toolName:void 0,o=e.content.map(e=>e.type!==`image`||i>=r?e:(i++,{type:`text`,text:_e(`capped`,a,t)}));return{...e,content:o}}),cappedCount:i}}async function be(e,t,n,r){if(c(t))return{messages:e,gatedCount:0,describedCount:0};let i=[];for(let t of e)if(Array.isArray(t.content))for(let e of t.content)e.type===`image`&&i.push({mime:e.mime,source:e.source});if(i.length===0)return{messages:e,gatedCount:0,describedCount:0};let a=i.map(()=>null);if(n)try{a=await n(i,r)}catch{a=i.map(()=>null)}let o=0,s=0;return{messages:e.map(e=>{if(!Array.isArray(e.content)||!e.content.some(e=>e.type===`image`))return e;let t=e.content.map(e=>{if(e.type!==`image`)return e;let t=a[s];return s++,t?(o++,{type:`text`,text:t}):{type:`text`,text:`[image not viewable: current model has no vision capability and no vision model is available for delegation]`}});return{...e,content:t}}),gatedCount:i.length,describedCount:o}}async function xe(e,t){let n=t.model.imageConstraints?.maxImagesPerRequest??t.maxImagesDefault,r=ye(e,n);r.cappedCount>0&&t.record(`image.cap`,{cappedCount:r.cappedCount,maxImages:n});let i=await be(r.messages,t.model,t.describeImages,t.signal);if(i.gatedCount>0&&(t.record(`image.vision-gate`,{gatedCount:i.gatedCount,describedCount:i.describedCount,modelId:t.model.id}),t.describeImages)){let e={turnIndex:t.turnIndex,attemptedCount:i.gatedCount,describedCount:i.describedCount,failedCount:i.gatedCount-i.describedCount};t.record(`image.vision-delegate`,e),t.emitDelegate(e)}return i.messages}function Se(){return{writeToolSuccesses:0,signatures:new Map,totalCalls:0}}function Ce(e){e.writeToolSuccesses=0,e.signatures.clear(),e.totalCalls=0}function we(e,t){let n;if(typeof t==`object`&&t&&!Array.isArray(t)){let e=t,r=Object.keys(e).sort(),i=[];for(let t of r){let n;try{n=JSON.stringify(e[t])??`undefined`}catch{n=`[unserializable]`}i.push(`${t}:${n}`)}n=i.join(`,`)}else try{n=JSON.stringify(t)??`undefined`}catch{n=`[unserializable]`}let r=j.progressSignatureArgsMaxChars;return`${e}(${n.length>r?n.slice(0,r):n})`}function Te(e,t){if(e.totalCalls++,!t.readonly&&!t.isError&&e.writeToolSuccesses++,e.signatures.size<j.progressSignatureCap){let n=we(t.toolName,t.args);e.signatures.set(n,(e.signatures.get(n)??0)+1)}}function Ee(e){return e.writeToolSuccesses>0?!0:e.totalCalls===0?!1:e.signatures.size/e.totalCalls>=j.progressDistinctRatio}var De=class{windowTurns;repeatThreshold;buckets=[];current={signatures:[],writeToolSuccesses:0};constructor(e={}){this.windowTurns=e.windowTurns??j.stallWindowTurns,this.repeatThreshold=e.repeatThreshold??j.stallRepeatThreshold}recordCall(e){this.current.signatures.length<j.progressSignatureCap&&this.current.signatures.push(we(e.toolName,e.args)),!e.readonly&&!e.isError&&this.current.writeToolSuccesses++}onTurnEnd(){this.buckets.push(this.current),this.buckets.length>this.windowTurns&&this.buckets.shift(),this.current={signatures:[],writeToolSuccesses:0}}evaluate(){let e=this.buckets.length;if(e<this.windowTurns)return{stalled:!1,maxRepeat:0,windowTurns:e};let t=0,n=new Map,r=0;for(let e of this.buckets){t+=e.writeToolSuccesses;for(let t of e.signatures){let e=(n.get(t)??0)+1;n.set(t,e),e>r&&(r=e)}}return{stalled:t===0&&r>=this.repeatThreshold,maxRepeat:r,windowTurns:e}}reset(){this.buckets.length=0,this.current={signatures:[],writeToolSuccesses:0}}};function Oe(e){let{sink:t,sessionId:n}=e,r=e.clock??b,i=e.onError??(()=>{});return{record(e){let a={ts:r.now(),sessionId:n,turn:e.turn,kind:e.kind,node:e.node,payload:e.payload,parentEventId:e.parentEventId,causalChain:e.causalChain,evalRunId:e.evalRunId};try{let e=t.append(a);e instanceof Promise&&e.catch(i)}catch(e){i(e)}}}}const G={record(){}},ke=new Set([`start`,`text_start`,`text_end`,`thinking_start`,`thinking_end`,`tool_call_start`,`tool_call_end`,`done`]);function Ae(e){return ke.has(e)}const je=new Set([`text_end`,`thinking_end`,`tool_call_end`]);function Me(e){if(!(`partial`in e))return e;let{partial:t,...n}=e;return n}function Ne(e){let t,n=n=>{if(!t)return;let{payload:r,turn:i}=t;t=void 0,e.record({kind:`stream`,node:`stream.event`,turn:i,payload:n?r:Me(r)})};return{push(r,i){let a=r.type;if(!(typeof a!=`string`||!Ae(a))){if(n(!1),je.has(a)){t={payload:r,turn:i};return}e.record({kind:`stream`,node:`stream.event`,turn:i,payload:r})}},flush(){n(!0)}}}function Pe(e,t){let n=[],r=()=>{if(n.length===0)return;let e=n;n=[],t.record({kind:`nondet`,payload:{draws:e}})},i=e=>{n.push(e),n.length>=4096&&r()};return{clock:{now(){let t=e.clock.now();return i({source:`clock`,value:t}),t}},random:{random(){let t=e.random.random();return i({source:`random`,value:t}),t}},id:{uuid(){let t=e.id.uuid();return i({source:`uuid`,value:t}),t}},flushNondetBatch:r}}function Fe(e){let t={clock:[],random:[],uuid:[]};for(let n of e)t[n.source].push(n.value);let n=e=>{let n=t[e];if(n.length===0)throw Error(`Replay underrun: no more recorded "${e}" draws`);return n.shift()};return{clock:{now:()=>n(`clock`)},random:{random:()=>n(`random`)},id:{uuid:()=>n(`uuid`)}}}function Ie(e){let t=[];for(let n of e){if(n.kind!==`nondet`)continue;let e=n.payload;if(e&&Array.isArray(e.draws))for(let n of e.draws)Le(n)&&t.push(n);else Le(n.payload)&&t.push(n.payload)}return t}function Le(e){return typeof e==`object`&&!!e&&`source`in e&&`value`in e}function Re(e){return typeof e.content==`string`?e.content:e.content.map(e=>e.type===`text`?e.text:``).filter(e=>e.length>0).join(`
5
+ `)}function ze(){return{usage:{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0},hadToolActivity:!1,lastAssistantApi:void 0,count:0}}function K(e,t){for(let n of t){if(n.role!==`assistant`)continue;let t=n;e.usage.inputTokens+=t.usage.inputTokens,e.usage.outputTokens+=t.usage.outputTokens,e.usage.cacheReadTokens+=t.usage.cacheReadTokens,e.usage.cacheWriteTokens+=t.usage.cacheWriteTokens,e.lastAssistantApi=t.api,e.count+=1,s(t)&&(e.hadToolActivity=!0)}}function Be(e,t,n){return{async pause(r,i,a){F(await e?.pause(N({point:r,messagesCount:i.length,metadata:a,systemPrompt:t.systemPrompt,messagesSummary:M(i,10),llmParams:{temperature:t.temperature,maxTokens:t.maxTokens,thinkingLevel:t.thinkingLevel}})),{now:()=>n.now(),setSystemPrompt:e=>{t.systemPrompt=e},setTemperature:e=>{t.temperature=e},setMaxTokens:e=>{t.maxTokens=e},setThinkingLevel:e=>{fe(e)&&(t.thinkingLevel=e)}})}}}function Ve(e,t,n,r){let i=[{type:`text`,text:e}];if(r&&r.length>0)for(let e of r)i.push({type:`image`,mime:e.mediaType,source:e.data});return{role:`user`,timestamp:t.now(),content:i,...n?{internal:!0}:{}}}function He(e){return e?.code===`AGENT_ABORTED`?`Tool call interrupted: aborted by user.`:e?.message?`Tool call interrupted: ${e.message}`:`Tool call interrupted before completion (session aborted or errored).`}function q(e,t,n,r){let i=r.resolvedFrom??e,a=new Set(i.filter(e=>e.role===`tool_result`).map(e=>e.toolCallId));for(let i of t)a.has(i.id)||e.push({role:`tool_result`,toolCallId:i.id,toolName:i.name,content:[{type:`text`,text:r.text}],isError:r.isError,details:{},timestamp:n.now(),...r.internal?{internal:!0}:{}})}function Ue(e,t,n){let r=-1;for(let t=e.length-1;t>=0;t--)if(e[t]?.role===`assistant`){r=t;break}if(r===-1)return;let i=o(e[r]);i.length!==0&&q(e,i,t,{isError:!0,text:He(n),resolvedFrom:e.slice(r+1)})}async function We(e){let{agentName:t,sessionId:n,model:r,tools:i,runner:a,hooks:o,memory:s,params:c,systemPrompt:l,systemTail:u,messages:d,recorder:f,persistence:p,onCompaction:m,onTurnPersist:h,isPauseRequested:g,describeImages:_}=e,{transformContext:v,reactiveCompact:y}=de({agentName:t,sessionId:n,tools:i,hooks:o,memory:s,recorder:f,persistence:p,onCompaction:m});return a.run({model:r,systemPrompt:l,systemTail:u,cacheRetention:c.cacheRetention,tools:i,messages:d,thinkingLevel:c.thinkingLevel,temperature:c.temperature,maxTokens:c.maxTokens,transformContext:v,reactiveCompact:y,onTurnPersist:h,isPauseRequested:g,describeImages:_})}function J(e,t,n){e.record({kind:`lifecycle`,node:t,payload:n})}async function Ge(e){let{text:t,sessionId:n,agentName:r,model:i,tools:a,runner:o,hooks:s,persistence:c,memory:l,debug:u}=e,d=e.clock??b,f=e.recorder??G,p={...e.params},m=Be(u,p,d),h=c.messages(),g=h.length===0;await m.pause(`prompt.before`,h,{sessionId:n,isFirstMessage:g}),J(f,`prompt.before`,{sessionId:n,isFirstMessage:g,text:t});let _={message:Ve(t,d,e.internal,e.images),sessionId:n,isFirstMessage:g,metadata:{}},v={message:_.message,cancelled:!1,metadata:{}};if(await s.execute(`chat.message.before`,_,v),v.cancelled)return{cancelled:!0,newMessages:[],newMessagesUsageSummary:ze(),params:p};let y=v.message,x,S,C,w;try{c.append(y);let e=await ge.planPromptContext({persistence:c,clock:d,hooks:s,params:p,model:i,sessionId:n,tools:a,userText:Re(y),onContextSelected:async(e,t)=>{await m.pause(`context.build`,e,{sessionId:n,hasSummary:t}),J(f,`context.build`,{sessionId:n,hasSummary:t,messages:e.length})}});x=e.messages,S=e.messagesBefore,C=e.stableSystem,w=e.systemTail,c.persistInputBoundary?.()}catch(e){throw c.removeLast?.(),e}let T,E=[],D=ze(),O=(e,t)=>{let n=T??S,r=x.slice(n);E.push(...r),K(D,r),x.splice(0,x.length,...t),T=t.length},k=()=>{let e=T??S;if(e>=x.length)return;let t=x.slice(e);E.push(...t),K(D,t),c.persistNew(x,e),T=x.length};try{let t=await We({agentName:r,sessionId:n,model:i,tools:a,runner:o,hooks:s,memory:l,params:p,systemPrompt:C,systemTail:w,messages:x,recorder:f,persistence:c,onCompaction:O,onTurnPersist:k,isPauseRequested:e.isPauseRequested,describeImages:e.describeImages}),u=T??S;c.persistNew(x,u);let d=x.slice(u);K(D,d);let h=[...E,...d];return await m.pause(`messages.persist`,x,{sessionId:n,newMessages:h.length}),J(f,`messages.persist`,{sessionId:n,newMessages:h.length}),await s.execute(`chat.message.after`,_,{message:v.message,cancelled:!1,metadata:{}}),await m.pause(`prompt.after`,x,{sessionId:n}),J(f,`prompt.after`,{sessionId:n}),await s.emit(`session.idle`,{sessionId:n,metadata:{}}),{cancelled:!1,message:t,newMessages:h,newMessagesUsageSummary:D,params:p}}catch(e){let t=e instanceof Error?e:Error(String(e));throw Ue(x,d,{code:t.code,message:t.message}),c.persistNew(x,T??S),await s.emit(`session.error`,{sessionId:n,metadata:{},error:t}),t}}async function Ke(e){let t={totalEvents:0,kinds:{},turns:0,toolCalls:0};for await(let{entry:n}of e)t.totalEvents++,t.kinds[n.kind]=(t.kinds[n.kind]??0)+1,n.turn!==void 0&&n.turn+1>t.turns&&(t.turns=n.turn+1),n.kind===`tool`&&n.node===`tool.call.end`&&t.toolCalls++,t.firstTs===void 0&&(t.firstTs=n.ts),t.lastTs=n.ts;return t}async function qe(e,t={}){let n=t.digestMax??120,r=[];for await(let t of e){let e=t.entry;r.push({seq:t.seq,ts:e.ts,kind:e.kind,node:e.node,turn:e.turn,digest:Ye(e.payload,n,e.node)})}return r}function Je(e,t,n){switch(e){case`stream.auth-failed`:{let e=typeof t.provider==`string`?t.provider:void 0,r=typeof t.modelId==`string`?t.modelId:void 0;return!e||!r?void 0:Y(`auth-failed ${r} (${e}): ${typeof t.reason==`string`?t.reason:``}`,n)}case`stream.retry`:case`stream.retry.accelerated`:{let e=typeof t.attempt==`number`?t.attempt:void 0,r=typeof t.maxRetries==`number`?t.maxRetries:void 0;if(e===void 0||r===void 0)return;let i=typeof t.reason==`string`?t.reason:``;return Y(`retry ${e}/${r}${typeof t.delayMs==`number`?` in ${t.delayMs}ms`:``}: ${i}`,n)}case`model.switch`:{let e=typeof t.from==`string`?t.from:null,r=typeof t.to==`string`?t.to:``;return Y(`model ${e?`${e} → `:``}${r}`,n)}case`effort.change`:{let e=typeof t.from==`string`?t.from:null,r=typeof t.to==`string`?t.to:``;return Y(`effort ${e?`${e} → `:``}${r}`,n)}case`retry.queued`:{let e=typeof t.attempt==`number`?t.attempt:void 0,r=typeof t.max==`number`?t.max:void 0;return e===void 0||r===void 0?void 0:Y(`retry ${e}/${r}${typeof t.mode==`string`&&t.mode?` [${t.mode}]`:``}`,n)}case`retry.cancelled`:{let e=typeof t.attempt==`number`?t.attempt:void 0;return e===void 0?`retry cancelled`:Y(`retry cancelled (after ${e})`,n)}case`retry.reset`:return`retry counter reset`;case`pause.requested`:return`pause requested`;case`pause.paused`:return`paused`;case`pause.cancelled`:return`pause cancelled`;case`pause.resumed`:return`resumed`;default:return}}function Ye(e,t=120,n){if(e!=null){if(typeof e==`string`)return Y(e,t);if(typeof e==`object`){let r=e;if(n!==void 0){let e=Je(n,r,t);if(e!==void 0)return e}if(typeof r.resultSummary==`object`&&r.resultSummary!==null){let e=r.resultSummary,n=typeof r.name==`string`?r.name:`tool`,i=e.isError?` ERR`:``,a=Array.isArray(e.contentPreview)&&e.contentPreview.length>0?e.contentPreview[0]:void 0,o=a?typeof a.preview==`string`?a.preview:typeof a.text==`string`?a.text:``:``,s=typeof r.durationMs==`number`?` ${r.durationMs}ms`:``;return Y(`${n}${i}${typeof r.errorCategory==`string`?` [${r.errorCategory}]`:``}${s}: ${o}`,t)}if(typeof r.result==`object`&&r.result!==null){let e=r.result,n=typeof r.name==`string`?r.name:`tool`,i=e.isError?` ERR`:``,a=Array.isArray(e.content)?e.content[0]:void 0;return Y(`${n}${i}: ${a&&typeof a.text==`string`?a.text:``}`,t)}if(typeof r.text==`string`)return Y(`"${r.text}"`,t);if(typeof r.name==`string`){let e=typeof r.arguments==`object`&&r.arguments!==null?JSON.stringify(r.arguments):``,n=typeof r.durationMs==`number`?` (${r.durationMs}ms)`:``;return Y(`${typeof r.toolCallIndex==`number`?`#${r.toolCallIndex} `:``}${r.name}(${e})${n}`,t)}if(typeof r.provider==`string`&&typeof r.modelId==`string`){let e=typeof r.reason==`string`?r.reason:``;return Y(`auth-failed ${r.modelId} (${r.provider}): ${e}`,t)}if(typeof r.attempt==`number`&&typeof r.maxRetries==`number`){let e=typeof r.reason==`string`?r.reason:``,n=typeof r.delayMs==`number`?` in ${r.delayMs}ms`:``;return Y(`retry ${r.attempt}/${r.maxRetries}${n}: ${e}`,t)}if(typeof r.reason==`string`)return Y(`done:${r.reason}`,t);if(typeof r.message==`object`&&r.message!==null){let e=r.message;if(typeof e.role==`string`&&e.content!==void 0)return Y(`${e.role}:${JSON.stringify(e.content)}`,t)}return Y(JSON.stringify(r),t)}return Y(String(e),t)}}function Y(e,t){return e.length<=t?e:`${e.slice(0,t)}…`}function Xe(e){let t=new Map,n=new Map,r=new Map;for(let i of e){let e=i.entry,a=String(i.seq);if(t.set(a,{eventId:a,seq:i.seq,kind:e.kind,node:e.node,turn:e.turn,parentEventId:e.parentEventId,causalChain:e.causalChain}),e.parentEventId){let t=e.parentEventId;n.set(a,[...n.get(a)??[],t]),r.set(t,[...r.get(t)??[],a])}if(e.causalChain)for(let t of e.causalChain)t!==e.parentEventId&&(n.set(a,[...n.get(a)??[],t]),r.set(t,[...r.get(t)??[],a]))}let i=[...t.values()],a=[];for(let[e,t]of n)for(let n of t)a.push({from:n,to:e});return{nodes:i,edges:a,roots:i.filter(e=>!n.has(e.eventId)).map(e=>e.eventId),leaves:i.filter(e=>!r.has(e.eventId)).map(e=>e.eventId)}}function Ze(e,t){let n=e.find(e=>e.seq===t);if(!n?.entry.parentEventId)return[];let r=[String(t)],i=n.entry.parentEventId;for(let t=0;t<100&&i;t++){let t=e.find(e=>e.seq===Number(i));if(!t)break;r.unshift(String(t.seq)),i=t.entry.parentEventId??``}return r}function Qe(e,t=512){return{isError:e.isError??!1,contentCount:e.content.length,contentPreview:e.content.map(e=>{if(e.type===`text`){let n=z(e.text);return n.length>t?{type:`text`,preview:n.slice(0,t),totalLength:n.length}:{type:`text`,text:n}}return e}),details:e.details??void 0}}function $e(e,t,n){let r=`[BACKGROUND TASK STARTED — DO NOT TREAT AS COMPLETE]\nTool '${e}' (task id: ${t}) has started running in the background and has NOT finished yet.\nDo NOT attempt to read its output, assume its result, or take any action that depends on\nits completion. You will receive a separate system message titled '[Tool completion]'\nwhen — and only when — this specific task actually finishes. Continue with other work\nor wait; do not fabricate or guess the result.`;return n?`${r}\n${n}`:r}function et(e,t,n,r){return{role:`tool_result`,toolCallId:e,toolName:t,content:[{type:`text`,text:$e(t,e,r)}],isError:!1,details:{},timestamp:n.now()}}function tt(e,t,n,r){let i=nt(n),a=n.isError??!1;return{role:`system_notification`,content:`[Tool completion] '${e}' ${a?`failed`:`completed`}: ${i}`,isError:a,relatedToolCallId:t,timestamp:r.now()}}function nt(e){let t=e.content.find(e=>e.type===`text`);if(!t||t.type!==`text`)return e.isError?`error (no text output)`:`done (no text output)`;let n=z(t.text);return n.length>500?`${n.slice(0,500)}… [truncated]`:n}function rt(e){if(e.isError)return e.errorKind??`unknown`}async function it(e,t,n,r,i,a,s){let{toolExecutor:c,messages:l,signal:u,emitter:d,logger:f,getSteeringMessages:p}=t,m=t.ports?.debug,h=t.ports?.clock??b,g=t.ports?.recorder??G,v=P({debug:m,getTurn:()=>n,getMessagesCount:()=>l.length,getTokenUsage:()=>r}),y=o(e).filter(e=>e.argumentsParseFailed!==!0),x=c.list(),S=new Map(x.map(e=>[e.name,e])),C=t.lifecycleAsync!==void 0,w=e=>{let t=S.get(e.name)?.lifecycleAsync;if(typeof t==`function`)try{return t(e.arguments)===!0}catch{return!1}return t===!0},T=C?y.filter(w):[],E=C?y.filter(e=>!w(e)):y;if(!C){let e=y.filter(w);e.length>0&&f.warn(`lifecycleAsync tool(s) called but ctx.lifecycleAsync controller not wired (falling back to synchronous execution, loop will block): %s`,e.map(e=>e.name).join(`, `))}let D=e=>{let t=S.get(e.name);return t?t.readonly?!0:t.isConcurrencySafe?.(e.arguments)===!0:!1},O=E.filter(D),k=E.filter(e=>!D(e));for(let e of y){let t=S.get(e.name);if(t?.async&&!t.readonly&&!t.isConcurrencySafe)throw Error(`Tool "${e.name}" declared async:true but is neither readonly nor isConcurrencySafe. Async tools must be concurrency-safe (isConcurrencySafe or readonly) to enter the parallel bucket.`)}let A=O.filter(e=>S.get(e.name)?.async===!0),M=O.filter(e=>!S.get(e.name)?.async),N=!1,F=t.lifecycleAsync?.currentPromptSeq()??0;for(let e of T){let n=et(e.id,e.name,h,S.get(e.name)?.lifecycleAsyncNote);l.push(n);let r=new AbortController,i=AbortSignal.any([u,r.signal]),a=c.execute(e,i);t.lifecycleAsync?.register({toolCallId:e.id,toolName:e.name,promise:(async()=>{let n;try{n=await a,n.content=B(n.content)}catch(t){f.warn(`lifecycleAsync tool %s (task id: %s) promise rejected: %s`,e.name,e.id,t instanceof Error?t.message:String(t)),n={content:[{type:`text`,text:`Tool ${e.name} failed: ${t instanceof Error?t.message:String(t)}`}],isError:!0}}let{consumed:r}=await t.lifecycleAsync.notifyCompletion(e.id,n);if(!r)return;let i=t.lifecycleAsync?.currentPromptSeq();if(i!==void 0&&i!==F){f.info(`lifecycleAsync tool %s (task id: %s) crossed prompt boundary (startSeq=%d, nowSeq=%d) — completion notice suppressed, emitting crossBoundary event instead`,e.name,e.id,F,i),d.emit(`lifecycle.tool.completed.crossBoundary`,{toolCallId:e.id,toolName:e.name,result:n});return}let o=tt(e.name,e.id,n,h);l.push(o)})(),promptSeq:F,consumed:!1,abortController:r}),d.emit(`tool.call.start`,{toolCall:{id:e.id,name:e.name,arguments:e.arguments}}),f.info(`Started lifecycleAsync tool %s (task id: %s), not blocking loop`,e.name,e.id)}T.length>0&&(N=!0);let I=await p();await v(`steering.check`,1,{metadata:{hasSteeringMessages:I.length>0,steeringCount:I.length}});let L=N,R=()=>{q(l,E,h,{isError:!1,text:`Skipped: superseded by the user’s new instruction (not executed; no error).`})};if(I.length>0)return R(),l.push(...I),d.emit(`steering.injected`,{messages:I}),{ranAnyTool:N};let z=0,V=async e=>{if(u.aborted)throw new _;let r=z++;d.emit(`tool.call.start`,{toolCall:{id:e.id,name:e.name,arguments:e.arguments}}),g.record({kind:`tool`,node:`tool.call.start`,turn:n,payload:{id:e.id,name:e.name,arguments:e.arguments,turnIndex:n,toolCallIndex:r}}),f.info(`Executing tool %s`,e.name),await v(`tool.before`,1,{lastToolName:e.name});let o=h.now(),l=await c.execute(e,u);if(l.content=B(l.content),u.aborted)throw new _;let p=h.now()-o;f.info(`Tool %s completed%s (%d ms)`,e.name,l.isError?` with error`:``,p);let m=S.get(e.name)?.resultBudgetChars??j.maxToolResultChars,y=s?.budgetFor(m)??m,b=await re(l.content,y,e.id,t.ports?.spill);s?.charge(U(b));let x={role:`tool_result`,toolCallId:e.id,toolName:e.name,content:b,isError:l.isError??!1,details:l.details??{},timestamp:h.now()};i&&Te(i,{toolName:e.name,args:e.arguments,readonly:S.get(e.name)?.readonly===!0,isError:l.isError??!1}),a?.recordCall({toolName:e.name,args:e.arguments,readonly:S.get(e.name)?.readonly===!0,isError:l.isError??!1});let C=rt(l);return d.emit(`tool.call.end`,{toolCall:{id:e.id,name:e.name,arguments:e.arguments},result:l,contextChars:U(b)}),g.record({kind:`tool`,node:`tool.call.end`,turn:n,payload:{id:e.id,name:e.name,resultSummary:Qe(l,j.traceResultMaxChars),durationMs:p,toolCallIndex:r,...C?{errorCategory:C}:{}}}),await v(`tool.after`,1,{lastToolName:e.name}),x},H=async e=>{let t=await V(e);l.push(t)};if(M.length>0){let e=j.maxToolConcurrency;f.info(`Executing %d concurrency-safe tools in parallel (cap %d)`,M.length,e);let t=await ie(M,e,H);if(L=!0,t.some(e=>e.status===`rejected`&&e.reason instanceof _)||u.aborted)throw new _;let n=t.find(e=>e.status===`rejected`);if(n&&n.status===`rejected`)throw n.reason}if(A.length>0){f.info(`Starting %d async tools in parallel (Promise.all, no worker slot)`,A.length);let e=A.map(e=>V(e)),t=await Promise.all(e);for(let e of t)l.push(e);L=!0}for(let e of k){if(u.aborted)throw new _;let t=await p();if(t.length>0)return R(),l.push(...t),d.emit(`steering.injected`,{messages:t}),{ranAnyTool:L};await H(e),L=!0}return{ranAnyTool:L}}const at={maxRetries:5,initialDelayMs:500,backoffFactor:2,maxDelayMs:6e4},ot={maxRetries:5,initialDelayMs:3e4,backoffFactor:1,maxDelayMs:3e4};function st(e,t,n,r){if(r!==void 0&&r>=0)return Math.min(Math.round(r),t.maxDelayMs);let i=t.initialDelayMs*t.backoffFactor**+e,a=.9+.2*n;return Math.min(Math.round(i*a),t.maxDelayMs)}function ct(e,t,n,r,i){r.hasAttemptedImageDegradation=!0;let a=0;for(let e=t.length-1;e>=0;e--)if(t[e].role===`user`){a=e;break}let{messages:o,degradedCount:s}=ve(t,a);if(s===0)return;let{logger:c,emitter:l}=i,u=i.ports?.recorder??G;return c.warn(`Image degradation triggered (turn %d, trigger=%s): degraded %d images`,n+1,e,s),l.emit(`image.degradation`,{turnIndex:n,degradedCount:s,trigger:e}),u.record({kind:`lifecycle`,node:`image.degradation`,turn:n,payload:{degradedCount:s,trigger:e}}),{action:`retry`,contextMessages:o}}async function lt(e,t,n,r,i,a,o,s,c){let{signal:l,emitter:m,logger:v}=t,y=t.ports?.recorder??G;if(e instanceof _||e instanceof Error&&e.name===`AbortError`||l.aborted)throw e;let b=d(e);if(b===`context-overflow`&&t.contextTransform?.reactiveCompact&&!i.hasAttemptedReactiveCompact){i.hasAttemptedReactiveCompact=!0;let e=r.length,a=await t.contextTransform.reactiveCompact(r,l);if(a)return v.warn(`Reactive compaction on context overflow (turn %d): %d -> %d messages`,n+1,e,a.length),m.emit(`compaction.reactive`,{turnIndex:n,messagesBefore:e,messagesAfter:a.length}),y.record({kind:`lifecycle`,node:`compaction.reactive`,turn:n,payload:{messagesBefore:e,messagesAfter:a.length}}),{action:`retry`,contextMessages:a}}if((b===`context-overflow`||b===`image-constraint`)&&!i.hasAttemptedImageDegradation){let e=ct(b,r,n,i,t);if(e)return e}let x=b===`retryable`&&g(e)?t.retry?.networkDisconnectRetry??ot:a;if(b===`retryable`&&i.transientRetries<x.maxRetries){let t=e instanceof Error?e.message:String(e),r=p(e),a=st(i.transientRetries,x,s.random(),r);i.transientRetries++,v.warn(`Retryable stream error (turn %d, attempt %d/%d, delay %dms): %s`,n+1,i.transientRetries,x.maxRetries,a,t),m.emit(`stream.retry`,{turnIndex:n,attempt:i.transientRetries,maxRetries:x.maxRetries,delayMs:a,reason:t}),y.record({kind:`lifecycle`,node:`stream.retry`,turn:n,payload:{attempt:i.transientRetries,maxRetries:x.maxRetries,delayMs:a,reason:t}}),o&&(o.skip=!1);let u=0;for(;u<a;){if(l.aborted)throw new _;if(o?.skip){o.skip=!1,v.info(`Retry accelerated by user (turn %d, attempt %d/%d, after %dms of %dms)`,n+1,i.transientRetries,x.maxRetries,u,a),m.emit(`stream.retry.accelerated`,{turnIndex:n,attempt:i.transientRetries,maxRetries:x.maxRetries}),y.record({kind:`lifecycle`,node:`stream.retry.accelerated`,turn:n,payload:{attempt:i.transientRetries,maxRetries:x.maxRetries,elapsedMs:u}});break}let e=Math.min(1e3,a-u);await c(e,l),u+=e}if(l.aborted)throw new _;return{action:`retry`}}let S=f(e);if(S?.status===`rejected`){let t=e instanceof Error?e.message:String(e);m.emit(`rate.limit.exhausted`,{limitType:S.type,resetsAt:S.resetsAt,message:t}),y.record({kind:`lifecycle`,node:`rate.limit.exhausted`,turn:n,payload:{limitType:S.type,resetsAt:S.resetsAt}})}else if(h(e)){if(!i.hasAttemptedAuthRetry){i.hasAttemptedAuthRetry=!0;let r=e instanceof Error?e.message:String(e);return v.warn(`Auth error on first attempt (turn %d, provider=%s, model=%s), retrying once: %s`,n+1,t.model.provider,t.model.id,r),{action:`retry`}}let r=e instanceof Error?e.message:String(e);v.warn(`Auth failed (turn %d, provider=%s, model=%s): %s`,n+1,t.model.provider,t.model.id,r);let a=u(e);m.emit(`stream.auth-failed`,{turnIndex:n,provider:t.model.provider,modelId:t.model.id,reason:r,errorType:a}),y.record({kind:`lifecycle`,node:`stream.auth-failed`,turn:n,payload:{provider:t.model.provider,modelId:t.model.id,reason:r,errorType:a}})}return{action:`rethrow`}}function ut(e){for(let t=e.content.length-1;t>=0;t--){let n=e.content[t];if(n.type===`text`)return n.text}return null}function dt(e,t,n){return`${e===`tokens`?`You have used ${t} of your ${n} output-token budget for this prompt.`:`You have used ${Math.round(t/1e3)}s of your ${Math.round(n/1e3)}s time budget for this prompt.`} Do not start any new tool work or call any tools. Wrap up now: briefly summarize the concrete progress you made, list what still remains or is blocked, and give the user a clear next step. Respond with text only.`}function ft(e,t,n,r,i){if(e.stopReason!==`refusal`)return null;let{emitter:a,logger:o}=t;return o.warn(`Model refused to respond on turn %d; terminating cleanly`,n+1),a.emit(`turn.truncated`,{turnIndex:n,action:`refusal`}),i.recorder.record({kind:`lifecycle`,node:`turn.truncated`,turn:n,payload:{action:`refusal`}}),{kind:`terminate`}}function pt(e,t,n,r,i){if(e.stopReason!==`max_tokens`||s(e))return null;let{emitter:a,logger:o,messages:c}=t,{clock:l,recorder:u}=i;return r.continuationCount<5?(r.continuationCount++,c.push({role:`user`,content:[{type:`text`,text:`Your previous response was cut off because it reached the output token limit. Continue exactly where you left off — do not repeat content already produced.`}],timestamp:l.now(),internal:!0}),o.warn(`Output truncated (max_tokens) on turn %d; appending continuation prompt (%d/%d)`,n+1,r.continuationCount,5),a.emit(`turn.truncated`,{turnIndex:n,action:`continue`}),u.record({kind:`lifecycle`,node:`turn.truncated`,turn:n,payload:{action:`continue`,continuation:r.continuationCount}}),{kind:`continue`}):(o.warn(`Output still truncated after %d continuations; returning partial response`,5),{kind:`terminate`})}function mt(e,t,n,r,i){let{emitter:a,logger:o,messages:s}=t,{clock:c,recorder:l}=i,u=St(t,r,c);if(!u)return null;let{dimension:d,used:f,budget:p}=u;if(t.budget.budgetSteerWrapUp&&!r.budgetSteeringIssued)return r.budgetSteeringIssued=!0,Z(e,s,c),s.push({role:`user`,content:[{type:`text`,text:dt(d,f,p)}],timestamp:c.now(),internal:!0}),a.emit(`prompt.budget`,{turnIndex:n,dimension:d,used:f,budget:p,steered:!0}),l.record({kind:`lifecycle`,node:`prompt.budget`,turn:n,payload:{dimension:d,used:f,budget:p,steered:!0}}),o.info(`Prompt %s budget exceeded (%d/%d); steering model to wrap up`,d,f,p),{kind:`continue`};let m=e.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
6
+ `).trim();throw a.emit(`prompt.budget`,{turnIndex:n,dimension:d,used:f,budget:p,steered:!1}),l.record({kind:`lifecycle`,node:`prompt.budget`,turn:n,payload:{dimension:d,used:f,budget:p,steered:!1}}),new y(d,f,p,m)}function ht(e,t,n,r,i){let{emitter:a,logger:o,messages:s}=t,{clock:c,recorder:l}=i;if(r.toolTurnCount<X(t))return{kind:`run-tools`};let u=X(t),d=t.budget.maxToolTurnExtensions??0,f=Ee(r.windowStats);if(r.extensionsUsed<d&&f)return r.extensionsUsed++,a.emit(`max.turns`,{turnIndex:n,maxTurns:u,extended:!0}),l.record({kind:`lifecycle`,node:`max.turns`,turn:n,payload:{maxTurns:u,extended:!0,extension:r.extensionsUsed,maxExtensions:d}}),o.info(`Tool budget exhausted (%d); extending %d/%d (per-turn transformContext compacts on token threshold)`,u,r.extensionsUsed,d),r.toolTurnCount=0,Ce(r.windowStats),{kind:`run-tools`};if(t.budget.budgetSteerWrapUp&&!r.budgetSteeringIssued){r.budgetSteeringIssued=!0,Z(e,s,c),s.push({role:`user`,content:[{type:`text`,text:`You have reached your tool-call budget for this turn. Do not start any new tool work or call any tools. Wrap up now: briefly summarize the concrete progress you made, list what still remains or is blocked, and give the user a clear next step. Respond with text only.`}],timestamp:c.now(),internal:!0});let t=r.extensionsUsed<d&&!f;return a.emit(`max.turns`,{turnIndex:n,maxTurns:u,extended:!1,steered:!0,...t?{progressDenied:!0}:{}}),l.record({kind:`lifecycle`,node:`max.turns`,turn:n,payload:{maxTurns:u,extended:!1,steered:!0,progressDenied:t,extension:r.extensionsUsed,maxExtensions:d}}),o.info(t?`Tool budget window showed no progress (loop suspected); steering model to wrap up`:`Tool budget exhausted (%d); steering model to wrap up in one final turn`,u),{kind:`continue`}}let p=e.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
7
+ `).trim(),m=r.extensionsUsed<d&&!f;throw a.emit(`max.turns`,{turnIndex:n,maxTurns:u,extended:!1,...m?{progressDenied:!0}:{}}),l.record({kind:`lifecycle`,node:`max.turns`,turn:n,payload:{maxTurns:u,extended:!1,steered:!1,progressDenied:m,extension:r.extensionsUsed,maxExtensions:d}}),new v(u,p,d)}function gt(e,t,n,r,i){if(e.stopReason!==`max_tokens`)return null;let a=o(e).filter(e=>e.argumentsParseFailed===!0);if(a.length===0)return null;let{logger:s,messages:c}=t;for(let e of a)c.push({role:`tool_result`,toolCallId:e.id,toolName:e.name,content:[{type:`text`,text:`Tool call arguments were cut off by the output token limit and could not be parsed. Re-issue the call, splitting large content into smaller pieces if necessary.`}],isError:!0,details:{},timestamp:i.clock.now(),internal:!0}),s.warn(`Tool call %s (%s) had truncated arguments (max_tokens) on turn %d; synthesized error result`,e.id,e.name,n+1);return i.recorder.record({kind:`lifecycle`,node:`turn.truncated`,turn:n,payload:{action:`broken-tool-call`,count:a.length}}),null}function _t(e,t,n,r,i){let a=r.stallDetector;if(!a||(a.onTurnEnd(),r.stallSteeringIssued))return null;let o=a.evaluate();if(!o.stalled)return null;let{emitter:s,logger:c,messages:l}=t,{clock:u,recorder:d}=i;return r.stallSteeringIssued=!0,Z(e,l,u),l.push({role:`user`,content:[{type:`text`,text:`Progress check: your recent tool calls repeat the same operations without producing changes — you may be stuck in a loop. Either switch to a different approach now (different tools, different angle, or narrower scope), or if the task genuinely cannot advance, stop and report: what you tried, what blocked you, and what the user should do next.`}],timestamp:u.now(),internal:!0}),s.emit(`progress.stall`,{turnIndex:n,windowTurns:o.windowTurns,maxRepeat:o.maxRepeat}),d.record({kind:`lifecycle`,node:`progress.stall`,turn:n,payload:{windowTurns:o.windowTurns,maxRepeat:o.maxRepeat}}),c.info(`Stall detected (same signature repeated %d times over %d turns, zero write successes); steering model to change approach`,o.maxRepeat,o.windowTurns),{kind:`continue`}}function vt(e,t,n,r,i){return s(e)?mt(e,t,n,r,i)??ht(e,t,n,r,i):null}function yt(e,t,n,r,i){if(s(e))return null;let a=ut(e);if(a===null||!m(a,new Set(t.toolExecutor.list().map(e=>e.name))))return null;let{emitter:o,logger:c,messages:l}=t,{clock:u,recorder:d}=i;return r.protocolMismatchRetryCount<2?(r.protocolMismatchRetryCount++,l.push({role:`user`,content:[{type:`text`,text:`Your previous response indicated a tool call (stop reason was tool_use) but contained no valid tool invocation — do NOT write tool calls as literal text or XML in the response body. Re-issue the tool call using the proper tool-calling mechanism, or respond with text only.`}],timestamp:u.now(),internal:!0}),c.warn(`Tool-call protocol mismatch on turn %d (stopReason=%s, message ends with literal <invoke> XML instead of a structured tool call — wire-layer recovery did not catch it); injecting correction prompt (%d/%d)`,n+1,e.stopReason,r.protocolMismatchRetryCount,2),o.emit(`tool.call.mismatch`,{turnIndex:n,outcome:`retry`,retryCount:r.protocolMismatchRetryCount}),d.record({kind:`lifecycle`,node:`tool.call.mismatch`,turn:n,payload:{outcome:`retry`,retryCount:r.protocolMismatchRetryCount}}),{kind:`continue`}):(c.warn(`Tool-call protocol mismatch persisted after %d retries on turn %d; terminating (not silently)`,2,n+1),o.emit(`tool.call.mismatch`,{turnIndex:n,outcome:`terminate`,retryCount:r.protocolMismatchRetryCount}),d.record({kind:`lifecycle`,node:`tool.call.mismatch`,turn:n,payload:{outcome:`terminate`,retryCount:r.protocolMismatchRetryCount}}),{kind:`terminate`})}const bt=[ft,pt,gt,_t,yt,vt];function xt(e,t,n,r,i={}){let a={clock:i.clock??b,recorder:i.recorder??G};for(let i of bt){let o=i(e,t,n,r,a);if(o)return o}return{kind:`terminate`}}function X(e){let t=e.budget.maxToolTurns??j.maxToolTurns;return e.budget.promptOutputTokenBudget!==void 0&&e.budget.promptOutputTokenBudget>0?t*4:t}function St(e,t,n){let r=e.budget.promptOutputTokenBudget;if(r!==void 0&&r>0&&t.promptOutputTokens>=r)return{dimension:`tokens`,used:t.promptOutputTokens,budget:r};let i=e.budget.promptWallClockBudgetMs;if(i!==void 0&&i>0){let e=n.now()-t.promptStartedAt;if(e>=i)return{dimension:`time`,used:e,budget:i}}return null}function Z(e,t,n){q(t,o(e),n,{isError:!0,text:`Tool budget reached; not executed — wrap-up requested.`,internal:!0})}function Ct(e,t){let n=t.maxOutputTokens;if(!n||n<=0)return e?e*8:void 0;if(e===void 0)return n;if(!(e>=n))return Math.min(e*8,n)}async function wt(e,t,n){let r=!1,i=[],a=n.aborted,o=e.then(()=>{r=!0}),s=new Promise(e=>{if(n.aborted){a=!0,r=!0,e();return}n.addEventListener(`abort`,()=>{a=!0,r=!0,e()},{once:!0})}),c=(async()=>{for(;!r;){let e=await t().catch(()=>[]);if(e.length>0){i=e,r=!0;return}if(r)return;await new Promise(e=>{setTimeout(e,200).unref?.()})}})();return await Promise.race([o,s,c]),{steeringMessages:i,aborted:a}}async function Tt(e,t){if(t.aborted)return!0;let n=!1,r=new Promise(e=>{t.addEventListener(`abort`,()=>{n=!0,e()},{once:!0})});return await Promise.race([e,r]),n}async function Et(e,t,n,r){let{signal:i,emitter:a,logger:o}=e,c=e.ports?.debug,l=e.ports?.recorder??G,u=P({debug:c,getTurn:()=>n,getMessagesCount:()=>e.messages.length,getTokenUsage:()=>r,getLlmParams:()=>t,getMessagesForSummary:()=>e.messages}),d=[...e.messages];e.contextTransform?.transformContext&&(d=await e.contextTransform.transformContext(d,i),d.length!==e.messages.length&&o.info(`Context transformed for turn %d: %d -> %d messages`,n+1,e.messages.length,d.length),await u(`context.transform`,0,{messagesCount:d.length,summarySource:d,metadata:{originalCount:e.messages.length,transformedCount:d.length}}));let f=Ot(e.toolExecutor.list());F(await u(`model.before`,0),{messages:e.messages,setSystemPrompt:e=>{t.systemPrompt=e},setTemperature:e=>{t.temperature=e},setMaxTokens:e=>{t.maxTokens=e},setThinkingLevel:e=>{t.thinkingLevel=e}});let p={hasAttemptedReactiveCompact:!1,hasAttemptedImageDegradation:!1,transientRetries:0,hasAttemptedAuthRetry:!1},m=e.retry?.streamRetry??at,h=e.ports?.random??x,g=e.ports?.sleep??C,v=!1,y=(e.systemTail??[]).filter(e=>e.length>0);for(;;){let r=await xe(d,{model:e.model,describeImages:e.contextTransform?.describeImages,signal:e.signal,turnIndex:n,maxImagesDefault:20,record:(e,t)=>l.record({kind:`lifecycle`,node:e,turn:n,payload:t}),emitDelegate:t=>e.emitter.emit(`image.vision-delegate`,t)}),c=await e.convertToLLM(r),b=ge.buildTurnInput({stableSystem:t.systemPrompt,volatileTail:y,llmMessages:c,model:e.model,tools:f,cacheRetention:e.cacheRetention,thinkingLevel:t.thinkingLevel,maxTokens:t.maxTokens,temperature:t.temperature}),x=e.stream(b,i),S=Ne(l);try{for await(let e of x)if(e.type!==`error`&&(a.emit(`stream.event`,{event:e}),S.push(e,n)),i.aborted)throw new _;S.flush();let r=await x.result();if(o.info(`Turn %d completed with stop reason %s (input=%d, output=%d)`,n+1,r.stopReason,r.usage.inputTokens,r.usage.outputTokens),r.stopReason===`max_tokens`&&!s(r)&&!v){let r=Ct(t.maxTokens,e.model);if(r!==void 0&&r>(t.maxTokens??0)){v=!0,o.warn(`Output truncated (max_tokens, no tool calls) on turn %d; escalating maxTokens %s -> %d and re-running`,n+1,t.maxTokens??`(default)`,r),t.maxTokens=r,a.emit(`turn.truncated`,{turnIndex:n,action:`escalate`,maxTokens:r}),l.record({kind:`lifecycle`,node:`turn.truncated`,turn:n,payload:{action:`escalate`,maxTokens:r}});continue}}return await u(`model.after`,0),r}catch(t){S.flush();let r=await lt(t,e,n,d,p,m,e.retry?.retryAccelerate,h,g);if(r.action===`retry`){r.contextMessages&&(d=r.contextMessages);continue}throw t}}}async function Dt(e){let t=0,n=e.budget.stallDetection,r={continuationCount:0,toolTurnCount:0,extensionsUsed:0,budgetSteeringIssued:!1,windowStats:Se(),promptOutputTokens:0,promptStartedAt:(e.ports?.clock??b).now(),stallDetector:n===!1?void 0:new De(n??{}),stallSteeringIssued:!1,protocolMismatchRetryCount:0},i=null,a,o=()=>new te(ne(e.model.contextWindow,j.promptToolResultFraction),j.minToolResultChars),s=o(),{messages:c,signal:l,logger:u,emitter:d,transitionTo:f,getSteeringMessages:p}=e,m=e.ports?.debug,h=e.ports?.clock??b,g=e.ports?.recorder??G,v={systemPrompt:e.systemPrompt,thinkingLevel:e.thinkingLevel,maxTokens:e.maxTokens,temperature:e.temperature},y=P({debug:m,getTurn:()=>t,getMessagesCount:()=>c.length,getTokenUsage:()=>a,getLlmParams:()=>v,getMessagesForSummary:()=>c});try{u.info(`Agent loop started for model %s with %d messages`,e.model.id,c.length),await y(`loop.start`,0),g.record({kind:`lifecycle`,node:`loop.start`,turn:t});let n=async()=>{for(;;){if(l.aborted)throw new _;d.emit(`turn.start`,{turnIndex:t,toolTurnCount:r.toolTurnCount,maxToolTurns:X(e),promptOutputTokens:r.promptOutputTokens,promptOutputTokenBudget:e.budget.promptOutputTokenBudget}),g.record({kind:`lifecycle`,node:`turn.start`,turn:t}),u.info(`Turn %d started`,t+1);let n=await Et(e,v,t,a);c.push(n),i=n,a={input:n.usage.inputTokens,output:n.usage.outputTokens},r.promptOutputTokens+=n.usage.outputTokens,d.emit(`turn.end`,{turnIndex:t,message:n}),g.record({kind:`lifecycle`,node:`turn.end`,turn:t,payload:{stopReason:n.stopReason,usage:n.usage,model:n.model,provider:n.provider}});let o=t;t++;let p=xt(n,e,o,r,{clock:h,recorder:g});if(p.kind===`terminate`)return e.lifecycleAsync?.hasPending()?`pending`:(e.onTurnPersist?.(),`terminate`);if(p.kind===`continue`){e.onTurnPersist?.();continue}f(`tool_executing`);let{ranAnyTool:m}=await it(n,e,o,a,r.windowStats,r.stallDetector,s);if(m&&r.toolTurnCount++,e.onTurnPersist?.(),e.ports?.nondetFlush?.(),e.lifecycleAsync?.hasPending())return`pending`;f(`streaming`)}};for(;;){if(l.aborted)throw new _;if(f(`streaming`),await n()===`pending`){if(e.lifecycleAsync){let{steeringMessages:t,aborted:n}=await wt(e.lifecycleAsync.waitForPending(),p,l);if(n)throw new _;t.length>0&&(c.push(...t),d.emit(`steering.injected`,{messages:t}),u.info(`Steering message(s) consumed while %d lifecycleAsync tool(s) still pending`,t.length))}continue}if(e.budget.isPauseRequested?.()){u.info(`Turn boundary reached with pause requested — yielding without followUp check`);break}await y(`loop.end`,0),g.record({kind:`lifecycle`,node:`loop.end`,turn:t});let i=await e.getFollowUpMessages();if(await y(`follow.up.check`,0,{metadata:{hasFollowUp:i.length>0,followUpCount:i.length}}),i.length===0)break;c.push(...i),u.info(`Queued %d follow-up message(s)`,i.length),d.emit(`follow.up.start`,{messages:i}),r.toolTurnCount=0,r.extensionsUsed=0,r.budgetSteeringIssued=!1,Ce(r.windowStats),r.promptOutputTokens=0,r.promptStartedAt=h.now(),r.stallDetector?.reset(),r.stallSteeringIssued=!1,r.protocolMismatchRetryCount=0,s=o()}if(e.lifecycleAsync?.hasPending()&&(u.info(`Waiting for remaining lifecycleAsync pending tool(s) to settle before returning (reached loop exit with pending still outstanding)`),await Tt(e.lifecycleAsync.waitForPending(),l)))throw new _;if(!i)throw Error(`Agent loop completed without producing a message`);return await y(`agent.done`,0),g.record({kind:`lifecycle`,node:`agent.done`,turn:t}),u.info(`Agent loop finished after %d turn(s)`,t),i}catch(e){throw e instanceof _||l.aborted?(u.warn(`Agent loop aborted at turn %d`,t+1),await y(`agent.aborted`,0),g.record({kind:`lifecycle`,node:`agent.aborted`,turn:t}),e):(u.error(`Agent loop failed at turn %d: %s`,t+1,e instanceof Error?e.message:String(e)),await y(`agent.error`,0),g.record({kind:`lifecycle`,node:`agent.error`,turn:t,payload:{message:e instanceof Error?e.message:String(e)}}),e)}finally{e.ports?.nondetFlush?.(),await y(`loop.cleanup`,0)}}function Ot(e){return e.filter(e=>e.exposure!==`deferred`&&e.exposure!==`hidden`).map(e=>({name:e.name,description:e.description,parameters:e.parameters}))}const kt=r(`@x-otto/agent:tool-executor`);function At(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.keys(e);if(t.length!==1||t[0]!==`_truncated`)return!1;let n=e._truncated;return typeof n==`object`&&!!n&&!Array.isArray(n)}function Q(e){return{content:[{type:`text`,text:`Tool ${e} execution was aborted`}],isError:!0,errorKind:`aborted`,details:{}}}var jt=class{tools;hookExecutor;agentName;sessionId;debug;clock;depth;approval;constructor(e){this.tools=new Map;for(let t of e.tools)this.tools.set(t.name,t);this.hookExecutor=e.hookExecutor,this.agentName=e.agentName??``,this.sessionId=e.sessionId??``,this.debug=e.debug,this.clock=e.clock??b,this.depth=e.depth,this.approval=e.approval}list(){return[...this.tools.values()]}async execute(e,t){let{id:n,name:r}=e,i=this.tools.get(r),a=(e,t)=>this.debug?.pause(N({point:e,frameDepth:2,lastToolName:r,metadata:{...t,sessionId:this.sessionId}}));if(F(await a(`tool.resolve`,{found:!!i,toolCallId:n})),!i)return{content:[{type:`text`,text:`Unknown tool: ${r}`}],isError:!0,errorKind:`not_found`};let o=this.clock.now(),s=e.arguments;try{if(this.hookExecutor){F(await a(`tool.hook.before`,{toolCallId:n}));let e=await this.hookExecutor.executeBeforeHooks({toolName:r,toolCallId:n,args:s,agentName:this.agentName,sessionId:this.sessionId,paths:Mt(i,s),readonly:i.readonly});if(e.kind===`deny`)return{content:[{type:`text`,text:e.reason}],isError:!0,errorKind:`permission`};if(s=e.args,e.kind===`ask`){let n=e.reason;if(!this.approval)return{content:[{type:`text`,text:`Tool ${r} requires approval but no approval handler is configured: ${n}`}],isError:!0,errorKind:`permission`};let i=await this.approval(r,s,n,e.risk);if(t.aborted)return Q(r);if(!i)return{content:[{type:`text`,text:`Tool ${r} was rejected by user: ${n}`}],isError:!0,errorKind:`permission`}}}let c=i.parameters.safeParse(s);if(!c.success&&At(s)){let e=s._truncated,t=i.parameters.safeParse(e);t.success&&(kt.warn({toolName:r,toolCallId:n},`RFC-142: unwrapped legacy _truncated wrapper from model tool-call arguments (context-poisoning residue); executing with inner arguments`),c=t)}let{success:l}=c;if(F(await a(`tool.validate`,{valid:l,toolCallId:n})),!c.success)return{content:[{type:`text`,text:`Invalid arguments for tool ${r}: ${String(c.error)}\n\nDo NOT wrap arguments in any extra key; emit the tool's schema fields at the top level and retry.`}],isError:!0,errorKind:`validation`};if(t.aborted)return Q(r);let u=await i.execute({id:e.id,params:c.data,signal:t,sessionId:this.sessionId||void 0,agentName:this.agentName||void 0,depth:this.depth});return t.aborted||(this.hookExecutor&&(u=(await this.hookExecutor.executeAfterHooks({toolName:e.name,toolCallId:e.id,args:s,result:u,agentName:this.agentName,sessionId:this.sessionId,durationMs:this.clock.now()-o,readonly:i.readonly})).result,F(await a(`tool.hook.after`,{toolCallId:n,durationMs:this.clock.now()-o}))),t.aborted)?Q(r):u}catch(n){if(t.aborted)return Q(r);let i=n instanceof Error?n.message:String(n),a=n?.errorKind,o=n?.pluginSource;return{content:[{type:`text`,text:`Tool ${e.name} failed: ${i}`}],isError:!0,errorKind:a??`runtime`,details:{error:n instanceof Error?n.name:`UnknownError`},...o?{pluginSource:o}:{}}}}};function Mt(e,t){if(!e.pathParams?.length)return[];let n=[];for(let r of e.pathParams){let i=t[r];typeof i==`string`&&n.push(e.resolvePath?e.resolvePath(i):i)}return n}function $(e,t){return new jt({tools:e,...t})}const Nt=r(`@x-otto/agent`),Pt={idle:new Set([`streaming`,`aborted`,`error`,`archived`]),streaming:new Set([`tool_executing`,`completed`,`aborted`,`error`]),tool_executing:new Set([`streaming`,`aborted`,`error`]),completed:new Set([`streaming`,`idle`,`aborted`,`error`,`archived`]),error:new Set([`idle`,`aborted`,`streaming`,`archived`]),aborted:new Set([`streaming`,`idle`,`error`,`archived`]),archived:new Set([`idle`])};var Ft=class extends n{state;abortController=null;pendingAbort=!1;steeringQueue=[];followUpQueue=[];pendingLifecycleTools=new Map;promptSeq=0;get currentPromptSeq(){return this.promptSeq}config;get status(){return this.state.status}get turnCount(){return this.state.turnCount}constructor(e){super(),this.config={stream:e.stream,agentLogger:e.logger,maxToolTurns:e.maxToolTurns??j.maxToolTurns,maxToolTurnExtensions:e.maxToolTurnExtensions??0,budgetSteerWrapUp:e.budgetSteerWrapUp??!1,promptOutputTokenBudget:e.promptOutputTokenBudget,promptWallClockBudgetMs:e.promptWallClockBudgetMs,stallDetection:e.stallDetection,agentName:e.agentName??``,sessionId:e.sessionId??``,toolHookExecutor:e.toolHookExecutor,debug:e.debug,clock:e.clock,recorder:e.recorder,nondetFlush:e.nondetFlush,depth:e.depth,retryAccelerate:e.retryAccelerate,streamRetry:e.streamRetry,networkDisconnectRetry:e.networkDisconnectRetry,spill:e.spill,approval:e.approval},this.state={status:`idle`,turnCount:0,tokenUsage:{input:0,output:0,cacheRead:0},isStreaming:!1,currentStreamMessage:null,error:void 0},this.on(`status.change`,({to:e})=>{this.state.isStreaming=e===`streaming`}),this.on(`turn.end`,({message:e})=>{this.state.turnCount++,this.state.currentStreamMessage=null,this.state.tokenUsage.input+=e.usage.inputTokens,this.state.tokenUsage.output+=e.usage.outputTokens,this.state.tokenUsage.cacheRead+=e.usage.cacheReadTokens}),this.on(`stream.event`,({event:e})=>{e.type===`start`&&(this.state.currentStreamMessage=e.partial)})}getState(){return{...this.state,tokenUsage:{...this.state.tokenUsage}}}async run(e){if(this.state.status===`streaming`||this.state.status===`tool_executing`)throw Error(`Cannot run in ${this.state.status} status`);if(this.state.status===`archived`)throw Error(`Cannot run: session is archived`);return this.state.status===`error`&&(this.state.error=void 0),this.cancelStalePendingLifecycleTools(),this.promptSeq++,this.runLoop(e)}cancelStalePendingLifecycleTools(){for(let[e,t]of this.pendingLifecycleTools){if(t.consumed){this.pendingLifecycleTools.delete(e);continue}t.abortController.abort(),this.config.agentLogger.info(`Cancelling stale lifecycleAsync tool %s (task id: %s) from prompt %d — new prompt %d starting`,t.toolName,t.toolCallId,t.promptSeq,this.promptSeq+1)}}steer(e){this.steeringQueue.push(e)}removeSteer(e){let t=this.steeringQueue.findIndex(t=>t.uuid===e);return t===-1?!1:(this.steeringQueue.splice(t,1),!0)}followUp(e){this.followUpQueue.push(e)}registerPendingLifecycleTool(e){this.pendingLifecycleTools.set(e.toolCallId,e)}hasPendingLifecycleTools(){for(let e of this.pendingLifecycleTools.values())if(!e.consumed)return!0;return!1}async waitForPendingLifecycleTools(){let e=[...this.pendingLifecycleTools.values()].filter(e=>!e.consumed).map(e=>e.promise);e.length!==0&&await Promise.allSettled(e)}async notifyToolCompletion(e,t){let n=this.pendingLifecycleTools.get(e);return!n||n.consumed?{consumed:!1}:(n.consumed=!0,this.emit(`lifecycle.tool.completed`,{toolCallId:e,toolName:n.toolName,isError:t.isError??!1,result:t}),{consumed:!0,entry:n})}abort(){this.state.status===`aborted`&&!this.abortController||(this.abortController?this.abortController.abort():this.pendingAbort=!0,this.transitionTo(`aborted`),this.emit(`abort`))}archive(){this.transitionTo(`archived`)}unarchive(){this.transitionTo(`idle`)}reset(){this.abortController&&=(this.abortController.abort(),null),this.pendingAbort=!1,this.steeringQueue=[],this.followUpQueue=[],this.pendingLifecycleTools.clear(),this.state.turnCount=0,this.state.tokenUsage={input:0,output:0,cacheRead:0},this.state.currentStreamMessage=null,this.state.error=void 0;let e=this.state.status;this.state.status=`idle`,e!==`idle`&&this.emit(`status.change`,{from:e,to:`idle`})}async runLoop(e){let t=new AbortController;this.abortController=t,this.pendingAbort&&(this.pendingAbort=!1,t.abort());let n=t.signal,r=$(e.tools,{hookExecutor:this.config.toolHookExecutor,agentName:this.config.agentName,sessionId:this.config.sessionId,debug:this.config.debug,clock:this.config.clock,depth:this.config.depth,approval:this.config.approval});try{let t=await Dt({model:e.model,systemPrompt:e.systemPrompt,systemTail:e.systemTail,cacheRetention:e.cacheRetention,messages:e.messages,thinkingLevel:e.thinkingLevel,maxTokens:e.maxTokens,temperature:e.temperature,convertToLLM:e.convertToLLM??It,onTurnPersist:e.onTurnPersist,logger:this.config.agentLogger,toolExecutor:r,stream:this.config.stream,signal:n,emitter:this,getSteeringMessages:()=>this.drainSteeringQueue(),getFollowUpMessages:()=>this.drainFollowUpQueue(),transitionTo:e=>this.transitionTo(e),lifecycleAsync:{register:e=>this.registerPendingLifecycleTool(e),hasPending:()=>this.hasPendingLifecycleTools(),waitForPending:()=>this.waitForPendingLifecycleTools(),notifyCompletion:(e,t)=>this.notifyToolCompletion(e,t),currentPromptSeq:()=>this.currentPromptSeq},ports:{clock:this.config.clock,debug:this.config.debug,recorder:this.config.recorder,nondetFlush:this.config.nondetFlush,spill:this.config.spill},budget:{maxToolTurns:this.config.maxToolTurns,maxToolTurnExtensions:this.config.maxToolTurnExtensions,budgetSteerWrapUp:this.config.budgetSteerWrapUp,promptOutputTokenBudget:this.config.promptOutputTokenBudget,promptWallClockBudgetMs:this.config.promptWallClockBudgetMs,stallDetection:this.config.stallDetection,isPauseRequested:e.isPauseRequested},retry:{retryAccelerate:this.config.retryAccelerate,streamRetry:this.config.streamRetry,networkDisconnectRetry:this.config.networkDisconnectRetry},contextTransform:{transformContext:e.transformContext,reactiveCompact:e.reactiveCompact,describeImages:e.describeImages}});return this.transitionTo(`completed`),t}catch(e){throw e instanceof _||n.aborted?(this.transitionTo(`aborted`),e):(this.state.error=e instanceof Error?e:Error(String(e)),this.transitionTo(`error`),this.emit(`error`,{error:this.state.error}),this.state.error)}finally{this.abortController===t&&(this.abortController=null),this.state.isStreaming=!1}}transitionTo(e){let t=this.state.status;if(t!==e){if(!Pt[t]?.has(e)){Nt.warn(`Invalid state transition: %s → %s (ignored)`,t,e);return}this.state.status=e,this.emit(`status.change`,{from:t,to:e})}}async drainSteeringQueue(){let e=[...this.steeringQueue];return this.steeringQueue=[],e}async drainFollowUpQueue(){let e=[...this.followUpQueue];return this.followUpQueue=[],e}};function It(e){return e.filter(e=>typeof e==`object`&&!!e&&`role`in e&&(e.role===`user`||e.role===`assistant`||e.role===`tool_result`||e.role===`system_notification`))}function Lt(e){return new Ft(e)}export{_ as AbortError,Ft as Agent,A as BREAKPOINT_POINTS,j as ENGINE_DEFAULTS,D as ENGINE_LIFECYCLE_TIMINGS,w as ENGINE_NODES,ee as IMAGE_CONTEXT_CHARS_EQUIVALENT,R as MAX_IMAGE_INLINE_BYTES,v as MaxToolTurnsError,O as OBSERVABLE_NODE_IDS,y as PromptBudgetExceededError,k as TRACEABLE_NODE_IDS,ce as applyMemoryTransform,be as applyVisionGate,tt as buildLifecycleAsyncCompletionNotice,et as buildLifecycleAsyncPlaceholder,$e as buildLifecycleAsyncPlaceholderText,Xe as causalDag,V as clampToolResultContent,re as clampWithSpill,F as consumePause,Lt as createAgent,Pe as createRecordingPorts,Fe as createReplayPorts,Ne as createStreamTracePersister,$ as createToolExecutor,Oe as createTraceRecorder,Ye as digestTracePayload,Ie as extractNondetDraws,a as extractToolResultText,ue as forceMemoryTransform,E as nodesWithCapability,G as noopRecorder,B as normalizeToolResultContent,Ge as prompt,L as recordMemoryLifecycle,ie as runBounded,Ae as shouldPersistStreamEvent,z as stripAnsi,M as summarizeMessages,Ke as summarizeTrace,b as systemClock,S as systemId,x as systemRandom,U as toolResultContextChars,qe as traceToSpans,Ze as traceWhy};
8
+ //# sourceMappingURL=index.js.map