@robota-sdk/agent-session 3.2.2 → 3.2.3

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/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import{_ as e,a as t,b as n,c as r,d as i,f as a,g as o,h as s,l as c,m as l,o as u,p as d,r as f,s as p,t as m,u as h,v as g,y as _}from"./session-claims-DB4Q00_J.js";import{CONTEXT_ESTIMATE_CHARS_PER_TOKEN as v,ConversationAgent as y,DEFAULT_ABSTRACT_EVENT_SERVICE as b,ExecutionRecoveryError as x,ExecutionSuspendedError as S,ObservableEventService as ee,PROVIDER_CALL_EVENTS as C,PROVIDER_FALLBACK_EVENTS as te,TOOL_BODY_EVENTS as ne,TOOL_PERMISSION_EVENTS as re,TRUST_TO_MODE as ie,allowRulesForAutoMode as ae,applyPresetToolLists as oe,callJournaledProvider as se,createAbortError as ce,createLogger as w,createSystemMessage as le,createToolMessage as ue,createUserMessage as de,estimateContextTokensFromMessages as fe,evaluatePermission as pe,findInvalidPermissionPatterns as me,findPermissionPatternWarnings as he,getModelContextWindow as ge,getProviderCapabilities as _e,getToolPermissionProfile as T,isAbortFailure as ve,isAbsolutePath as E,isEnforcing as ye,isExecutionControlError as be,isModelEffort as xe,isToolDeniedOutright as Se,matchesAnyPattern as Ce,messageToHistoryEntry as we,nonVisualObservationText as Te,peerDriverOf as Ee,printablePeerDriver as De,projectPermissionPolicy as Oe,randomId as D,readModelFallbackNotice as ke,registerToolPermissionProfile as Ae,requiresFreshApproval as je,resolvePath as Me,runHooks as O,sha256Hex as Ne,snapshotToolProvenance as Pe,traceEnvFor as Fe,utf8ByteLength as Ie,wasToolResultAdmitted as Le,withToolProvenance as Re}from"@robota-sdk/agent-core";function ze(e){if((typeof e==`object`&&e||typeof e==`function`)&&`then`in e&&typeof e.then==`function`)throw Promise.resolve(e).catch(()=>void 0),Error(`Session checkpoint must acknowledge synchronously; asynchronous persistence is unsupported`)}function Be(e){if(typeof e!=`string`||e.length===0)throw Error("Session requires `cwd`: the absolute path this session executes in (ARCH-010). It feeds every hook input, CLAUDE_PROJECT_DIR, the permission root and the persisted record. Pass `process.cwd()` explicitly if that is genuinely what you mean.");if(!E(e))throw Error(`Session requires an ABSOLUTE \`cwd\`; got ${JSON.stringify(e)} (ARCH-010). A relative root is resolved against the process directory downstream, which is the ambient value this field exists to replace. Resolve it at your composition root.`);return e}var Ve=class extends Error{recoverable=!0;constructor(e){super(e),this.name=`SessionBusyError`}},He=class{controller=null;settlement=Promise.resolve();settle;get drained(){return this.settlement}claim(){if(this.controller!==null)throw new Ve(`This session is already running a turn. A session is a single conversation: await the turn in flight, abort() it and await it, or use a separate session for concurrent work.`);return this.settlement=new Promise(e=>{this.settle=e}),this.controller=new AbortController,this.controller}release(e){this.controller===e&&(this.controller=null,this.settle?.(),this.settle=void 0)}abort(){this.controller?.abort()}isRunning(){return this.controller!==null}},Ue=class{cwd;constructor(e){this.cwd=Be(e)}turnClaim=new He;permissionModeGuards=new Set;getPermissionMode(){return this.permissionMode}setPermissionMode(e){for(let t of this.permissionModeGuards)t(e);this.permissionMode=e}addPermissionModeGuard(e){return this.permissionModeGuards.add(e),()=>this.permissionModeGuards.delete(e)}getActivePresetId(){return this.activePresetId}setActivePresetId(e){this.activePresetId=e}getParallelSubagentsEnabled(){return this.parallelSubagentsEnabled}setParallelSubagentsEnabled(e){this.parallelSubagentsEnabled=e}getSessionId(){return this.sessionId}getCwd(){return this.cwd}getSystemMessage(){return this.systemMessage}updateSystemMessage(e){this.assertInputAllowed(),this.systemMessage=e,this.agent.updateSystemPrompt(e)}async applyModelOptions(e){await this.agent.ensureReady();let t=e.model??this.model;this.agent.setModel({provider:this.aiProvider.name,model:t,...e.effort!==void 0&&{effort:e.effort},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxOutputTokens!==void 0&&{maxTokens:e.maxOutputTokens}}),this.setActiveModel(t)}setActiveModel(e){this.model=e,this.contextTracker.setModel(e),this.compactionOrchestrator.setModel(e)}getModelEffort(){let e=this.agent.getModel;if(e===void 0)return`auto`;try{return e.call(this.agent).effort??`auto`}catch(e){if(e instanceof Error&&/disposed/i.test(e.message))return`auto`;throw e}}async withScopedModelEffort(e,t){let n=this.getModelEffort();await this.applyModelOptions({effort:e});try{return await t()}finally{await this.applyModelOptions({effort:n})}}async applyAgentName(e){await this.agent.updateConfiguration({name:e})}getToolSchemas(){return this.toolSchemas}getMessageCount(){return this.messageCount}applyPresetToolLists(e){this.permissionEnforcer.applyPresetToolLists(e)}getPermissionRules(){let e=this.permissionEnforcer.currentPermissionRules();return{allow:[...e.allow],deny:[...e.deny],ask:[...e.ask]}}getSessionAllowedTools(){return this.permissionEnforcer.getSessionAllowedTools()}checkToolPermission(e,t,n){return this.permissionEnforcer.checkDelegatedToolCall(e,t,n)}requireClassifierFor(e){if(e===`auto`&&!this.permissionEnforcer.hasPermissionClassifier())throw Error(`Auto mode is unavailable: this session has no permission classifier.`)}retryPermissionDenial(e){return this.permissionEnforcer.allowRetryOfDenial(e)}getRecentPermissionDenials(){return this.permissionEnforcer.getRecentDenials()}clearSessionAllowedTools(){this.permissionEnforcer.clearSessionAllowedTools()}abort(){this.turnClaim.abort()}isRunning(){return this.turnClaim.isRunning()}getContextState(){return this.contextTracker.getContextState()}syncContextFromHistory(){this.contextTracker.updateFromHistory(this.agent.getHistory())}getAutoCompactThreshold(){return this.contextTracker.getAutoCompactThreshold()}setAutoCompactThreshold(e){this.contextTracker.setAutoCompactThreshold(e)}getHistory(){return structuredClone(this.agent.getHistory())}getFullHistory(){return structuredClone(this.agent.getFullHistory())}getSessionTokenUsage(){let e=0,t=0,n=!1;for(let r of this.getFullHistory()){if(r.category!==`event`||r.type!==`usage-summary`)continue;let i=r.data;e+=i?.promptTokens??0,t+=i?.completionTokens??0,n=!0}return n?{inputTokens:e,outputTokens:t}:void 0}getModelId(){return this.model}getOfferedToolSchemas(){return this.agent.getOfferedToolSchemas()}getProvider(){return this.aiProvider}getProviderId(){return this.aiProvider.name}addHistoryEntry(e){this.assertInputAllowed(),this.agent.addHistoryEntry(e)}injectMessage(e,t,n){this.assertInputAllowed(),this.agent.injectMessage(e,t,n)}injectRawMessage(e){this.assertInputAllowed(),this.agent.injectRawMessage(e)}clearHistory(){this.assertInputAllowed(),this.agent.clearHistory(),this.contextTracker.reset()}};function We(e){return JSON.stringify(typeof e==`string`?e:e??``)}function k(e){let t=(e.parts??[]).flatMap(e=>{let t=Te(e);return t===void 0?[]:[t]});return t.length>0?JSON.stringify({content:e.content,observations:t}):We(e.content)}function Ge(e){let t=Ee(e);return t?`user [from ${JSON.stringify(De(t))}]`:`user`}function Ke(e){switch(e.role){case`user`:return[`${Ge(e)}: ${k(e)}`];case`assistant`:{let t=[];e.content!==null&&e.content!==``&&t.push(`assistant: ${k(e)}`);for(let n of e.toolCalls??[])t.push(`assistant tool call ${JSON.stringify(n.function.name)} [${JSON.stringify(n.id)}]: ${We(n.function.arguments)}`);return t.length>0?t:[`assistant: ""`]}case`tool`:return[`tool result${e.name?` ${JSON.stringify(e.name)}`:``} [${JSON.stringify(e.toolCallId)}]: ${k(e)}`];case`system`:return[`system: ${k(e)}`]}}function qe(e){return e.map(e=>Ke(e).join(`
1
+ import{_ as e,a as t,b as n,c as r,d as i,f as a,g as o,h as s,l as c,m as l,o as u,p as d,r as f,s as p,t as m,u as h,v as g,y as _}from"./session-claims-DB4Q00_J.js";import{CONTEXT_ESTIMATE_CHARS_PER_TOKEN as v,ConversationAgent as y,DEFAULT_ABSTRACT_EVENT_SERVICE as b,ExecutionRecoveryError as x,ExecutionSuspendedError as S,ObservableEventService as ee,PROVIDER_CALL_EVENTS as C,PROVIDER_FALLBACK_EVENTS as te,TOOL_BODY_EVENTS as ne,TOOL_PERMISSION_EVENTS as re,TRUST_TO_MODE as ie,allowRulesForAutoMode as ae,applyPresetToolLists as oe,callJournaledProvider as se,createAbortError as ce,createLogger as w,createSystemMessage as le,createToolMessage as ue,createUserMessage as de,estimateContextTokensFromMessages as fe,evaluatePermission as pe,findInvalidPermissionPatterns as me,findPermissionPatternWarnings as he,getModelContextWindow as ge,getProviderCapabilities as _e,getToolPermissionProfile as T,isAbortFailure as ve,isAbsolutePath as E,isEnforcing as ye,isExecutionControlError as be,isModelEffort as xe,isToolDeniedOutright as Se,matchesAnyPattern as Ce,messageToHistoryEntry as we,nonVisualObservationText as Te,peerDriverOf as Ee,printablePeerDriver as De,projectPermissionPolicy as Oe,randomId as D,readModelFallbackNotice as ke,registerToolPermissionProfile as Ae,requiresFreshApproval as je,resolvePath as Me,runHooks as O,sha256Hex as Ne,snapshotToolProvenance as Pe,traceEnvFor as Fe,utf8ByteLength as Ie,wasToolResultAdmitted as Le,withToolProvenance as Re}from"@robota-sdk/agent-core";function ze(e){if((typeof e==`object`&&e||typeof e==`function`)&&`then`in e&&typeof e.then==`function`)throw Promise.resolve(e).catch(()=>void 0),Error(`Session checkpoint must acknowledge synchronously; asynchronous persistence is unsupported`)}function Be(e){if(typeof e!=`string`||e.length===0)throw Error("Session requires `cwd`: the absolute path this session executes in. It feeds every hook input, CLAUDE_PROJECT_DIR, the permission root and the persisted record. Pass `process.cwd()` explicitly if that is genuinely what you mean.");if(!E(e))throw Error(`Session requires an ABSOLUTE \`cwd\`; got ${JSON.stringify(e)}. A relative root is resolved against the process directory downstream, which is the ambient value this field exists to replace. Resolve it at your composition root.`);return e}var Ve=class extends Error{recoverable=!0;constructor(e){super(e),this.name=`SessionBusyError`}},He=class{controller=null;settlement=Promise.resolve();settle;get drained(){return this.settlement}claim(){if(this.controller!==null)throw new Ve(`This session is already running a turn. A session is a single conversation: await the turn in flight, abort() it and await it, or use a separate session for concurrent work.`);return this.settlement=new Promise(e=>{this.settle=e}),this.controller=new AbortController,this.controller}release(e){this.controller===e&&(this.controller=null,this.settle?.(),this.settle=void 0)}abort(){this.controller?.abort()}isRunning(){return this.controller!==null}},Ue=class{cwd;constructor(e){this.cwd=Be(e)}turnClaim=new He;permissionModeGuards=new Set;getPermissionMode(){return this.permissionMode}setPermissionMode(e){for(let t of this.permissionModeGuards)t(e);this.permissionMode=e}addPermissionModeGuard(e){return this.permissionModeGuards.add(e),()=>this.permissionModeGuards.delete(e)}getActivePresetId(){return this.activePresetId}setActivePresetId(e){this.activePresetId=e}getParallelSubagentsEnabled(){return this.parallelSubagentsEnabled}setParallelSubagentsEnabled(e){this.parallelSubagentsEnabled=e}getSessionId(){return this.sessionId}getCwd(){return this.cwd}getSystemMessage(){return this.systemMessage}updateSystemMessage(e){this.assertInputAllowed(),this.systemMessage=e,this.agent.updateSystemPrompt(e)}async applyModelOptions(e){await this.agent.ensureReady();let t=e.model??this.model;this.agent.setModel({provider:this.aiProvider.name,model:t,...e.effort!==void 0&&{effort:e.effort},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxOutputTokens!==void 0&&{maxTokens:e.maxOutputTokens}}),this.setActiveModel(t)}setActiveModel(e){this.model=e,this.contextTracker.setModel(e),this.compactionOrchestrator.setModel(e)}getModelEffort(){let e=this.agent.getModel;if(e===void 0)return`auto`;try{return e.call(this.agent).effort??`auto`}catch(e){if(e instanceof Error&&/disposed/i.test(e.message))return`auto`;throw e}}async withScopedModelEffort(e,t){let n=this.getModelEffort();await this.applyModelOptions({effort:e});try{return await t()}finally{await this.applyModelOptions({effort:n})}}async applyAgentName(e){await this.agent.updateConfiguration({name:e})}getToolSchemas(){return this.toolSchemas}getMessageCount(){return this.messageCount}applyPresetToolLists(e){this.permissionEnforcer.applyPresetToolLists(e)}getPermissionRules(){let e=this.permissionEnforcer.currentPermissionRules();return{allow:[...e.allow],deny:[...e.deny],ask:[...e.ask]}}getSessionAllowedTools(){return this.permissionEnforcer.getSessionAllowedTools()}checkToolPermission(e,t,n){return this.permissionEnforcer.checkDelegatedToolCall(e,t,n)}requireClassifierFor(e){if(e===`auto`&&!this.permissionEnforcer.hasPermissionClassifier())throw Error(`Auto mode is unavailable: this session has no permission classifier.`)}retryPermissionDenial(e){return this.permissionEnforcer.allowRetryOfDenial(e)}getRecentPermissionDenials(){return this.permissionEnforcer.getRecentDenials()}clearSessionAllowedTools(){this.permissionEnforcer.clearSessionAllowedTools()}abort(){this.turnClaim.abort()}isRunning(){return this.turnClaim.isRunning()}getContextState(){return this.contextTracker.getContextState()}syncContextFromHistory(){this.contextTracker.updateFromHistory(this.agent.getHistory())}getAutoCompactThreshold(){return this.contextTracker.getAutoCompactThreshold()}setAutoCompactThreshold(e){this.contextTracker.setAutoCompactThreshold(e)}getHistory(){return structuredClone(this.agent.getHistory())}getFullHistory(){return structuredClone(this.agent.getFullHistory())}getSessionTokenUsage(){let e=0,t=0,n=!1;for(let r of this.getFullHistory()){if(r.category!==`event`||r.type!==`usage-summary`)continue;let i=r.data;e+=i?.promptTokens??0,t+=i?.completionTokens??0,n=!0}return n?{inputTokens:e,outputTokens:t}:void 0}getModelId(){return this.model}getOfferedToolSchemas(){return this.agent.getOfferedToolSchemas()}getProvider(){return this.aiProvider}getProviderId(){return this.aiProvider.name}addHistoryEntry(e){this.assertInputAllowed(),this.agent.addHistoryEntry(e)}injectMessage(e,t,n){this.assertInputAllowed(),this.agent.injectMessage(e,t,n)}injectRawMessage(e){this.assertInputAllowed(),this.agent.injectRawMessage(e)}clearHistory(){this.assertInputAllowed(),this.agent.clearHistory(),this.contextTracker.reset()}};function We(e){return JSON.stringify(typeof e==`string`?e:e??``)}function k(e){let t=(e.parts??[]).flatMap(e=>{let t=Te(e);return t===void 0?[]:[t]});return t.length>0?JSON.stringify({content:e.content,observations:t}):We(e.content)}function Ge(e){let t=Ee(e);return t?`user [from ${JSON.stringify(De(t))}]`:`user`}function Ke(e){switch(e.role){case`user`:return[`${Ge(e)}: ${k(e)}`];case`assistant`:{let t=[];e.content!==null&&e.content!==``&&t.push(`assistant: ${k(e)}`);for(let n of e.toolCalls??[])t.push(`assistant tool call ${JSON.stringify(n.function.name)} [${JSON.stringify(n.id)}]: ${We(n.function.arguments)}`);return t.length>0?t:[`assistant: ""`]}case`tool`:return[`tool result${e.name?` ${JSON.stringify(e.name)}`:``} [${JSON.stringify(e.toolCallId)}]: ${k(e)}`];case`system`:return[`system: ${k(e)}`]}}function qe(e){return e.map(e=>Ke(e).join(`
2
2
  `))}function A(e,t){if(!Array.isArray(e))throw Error(`${t} requires \`hookTypeExecutors\`: the executors that run a hook's handlers. On Node pass \`[new CommandExecutor(), new HttpExecutor()]\` from \`@robota-sdk/agent-core/node\`; pass \`[]\` to run no hook handlers.`);return e}var j=class extends Error{constructor(e){super(e),this.name=`CompactionError`}};const Je=[`Summarize the following conversation concisely, preserving:`,`- User's original requests and goals`,`- Key decisions, conclusions, and important state`,`- Identifiers, names, and references needed to continue the work`,`- Current task status and next steps`,`Drop verbose intermediate outputs and exploratory work that didn't lead to results.`].join(`
3
3
  `);var Ye=class{sessionId;cwd;model;hooks;compactInstructions;basePrompt;hookTypeExecutors;constructor(e){this.sessionId=e.sessionId,this.cwd=e.cwd,this.model=e.model,this.hooks=e.hooks,this.compactInstructions=e.compactInstructions,this.basePrompt=e.basePrompt,this.hookTypeExecutors=A(e.hookTypeExecutors,`CompactionOrchestrator`)}setModel(e){this.model=e}async compact(e,t,n,r,i=`manual`,a,o){if(r?.throwIfAborted(),t.length===0)throw new j(`Compaction was asked to summarise an empty history; conversation history preserved untouched`);let s={session_id:this.sessionId,cwd:this.cwd,hook_event_name:`PreCompact`,trigger:i};await O(this.hooks,`PreCompact`,s,this.hookTypeExecutors,a);let c=this.buildCompactionPrompt(t,n),l=D(),u=D(),d=e.resolveModelRoute?.(this.model,u)??{provider:e.name,model:this.model},f=await se(async(t,n)=>{try{return await e.chat(t,n)}catch(e){throw r?.aborted?ce(`Compaction cancelled`,e):e}},[{id:D(),role:`user`,content:c,state:`complete`,timestamp:new Date}],{model:this.model,executionId:u,onTextDelta:()=>{},onModelFallback:e=>{d={...e.to}},toolChoice:`none`,preserveContextWindow:!0,...r===void 0?{}:{signal:r}},o?{journal:o,executionId:u,callId:l,route:()=>({providerId:d.provider,modelId:d.model})}:void 0);if(r?.throwIfAborted(),typeof f.content!=`string`||f.content.trim()===``)throw new j(`Compaction produced an invalid summary (provider=${e.name}, content type=${typeof f.content}); conversation history preserved untouched`);return f.content}buildCompactionPrompt(e,t){let n=t??this.compactInstructions??``,r=n?`\nAdditional focus:\n${n}\n`:``,i=qe(e).join(`
4
4
  `);return[this.basePrompt??Je,r,``,`Conversation:`,i].join(`
5
- `)}};const Xe=.835;var Ze=class{contextUsedTokens=0;contextMaxTokens;contextMaxTokensOverride;autoCompactThreshold;constructor(e,t,n){this.contextMaxTokensOverride=t,this.contextMaxTokens=t??ge(e),this.autoCompactThreshold=Qe(n)}getContextState(){let e=Math.min(100,this.contextUsedTokens/this.contextMaxTokens*100);return{maxTokens:this.contextMaxTokens,usedTokens:this.contextUsedTokens,usedPercentage:Math.round(e*100)/100,remainingPercentage:Math.round((100-e)*100)/100}}shouldAutoCompact(e){return this.autoCompactThreshold!==!1&&(e?fe(e).usedTokens:this.contextUsedTokens)>=this.contextMaxTokens*this.autoCompactThreshold}setModel(e){this.contextMaxTokens=this.contextMaxTokensOverride??ge(e)}getAutoCompactThreshold(){return this.autoCompactThreshold}setAutoCompactThreshold(e){this.autoCompactThreshold=Qe(e)}updateFromHistory(e){this.contextUsedTokens=fe(e).usedTokens}reset(){this.contextUsedTokens=0}};function Qe(e){if(e===void 0)return Xe;if(e===!1)return!1;if(!Number.isFinite(e)||e<=0||e>1)throw RangeError(`autoCompactThreshold must be a number greater than 0 and at most 1.`);return e}async function $e(e,t){if(t===void 0)return e;if(t.aborted)return!1;let n;try{return await Promise.race([e,new Promise(e=>{n=()=>e(!1),t.addEventListener(`abort`,n,{once:!0})})])}finally{n!==void 0&&t.removeEventListener(`abort`,n)}}function et(e){return e===`allow-session`?{allowed:!0,rememberForSession:!0,rememberForProject:!1}:e===`allow-project`?{allowed:!0,rememberForSession:!0,rememberForProject:!0}:{allowed:e===!0,rememberForSession:!1,rememberForProject:!1}}async function tt(e){let t={allowed:!1,rememberForSession:!1,rememberForProject:!1};if(e.alreadyAllowed)return{allowed:!0,rememberForSession:!1,rememberForProject:!1};if(e.signal?.aborted===!0)return t;let n={...e.signal?{signal:e.signal}:{},...e.executionId===void 0?{}:{executionId:e.executionId}},r=e.signal!==void 0||e.executionId!==void 0,i=e.handler?()=>r?e.handler(e.toolName,e.toolArgs,n):e.handler(e.toolName,e.toolArgs):e.injectedPrompt&&e.terminal?()=>e.injectedPrompt(e.terminal,e.toolName,e.toolArgs):void 0;return i===void 0?t:et(await $e(i(),e.signal))}const M=`robota-session/approval`;function nt(e){return e?.waits.some(e=>e.request.kind===M)??!1}async function rt(e,t,n){let r=t?.waits.filter(e=>e.request.kind===M)??[];if(!n&&!r.length)return;if(!t||t.action.toolName!==e.toolName)throw new x(`EXECUTION_RECOVERY_INVALID`,`Checkpointed approval requires the current journaled action`);let i=e.canonicalizePath(e.cwd);for(let{request:t}of r)if(t.data.version!==1||t.data.sessionId!==e.sessionId||t.data.cwd!==i||t.data.toolName!==e.toolName)throw new x(`EXECUTION_RECOVERY_INVALID`,`Saved approval belongs to a different Session or tool`);let a=await t.request({kind:M,data:{version:1,sessionId:e.sessionId,cwd:i,toolName:e.toolName,arguments:structuredClone(e.toolArgs)}});if(Object.keys(a).length!==1||typeof a.approved!=`boolean`)throw new x(`EXECUTION_RECOVERY_INVALID`,`Approval response must contain only a boolean approved decision`);return a.approved}const it=3,at=20;function ot(e,t){return`${e}\u0000${JSON.stringify(t)}`}var st=class{classifier;consecutive=0;total=0;paused=!1;retries=new Set;constructor(e){this.classifier=e}isPaused(){return this.paused}resume(){this.paused=!1,this.consecutive=0}grantRetry(e,t){this.retries.add(ot(e,t))}takeRetry(e,t){return this.retries.delete(ot(e,t))}async judge(e,t){let n;try{n=await this.classifier.classify(e,t)}catch{n=void 0}if(n===void 0){t?.aborted!==!0&&(this.consecutive+=1);let e=this.consecutive>=3;return e&&(this.paused=!0),{kind:`unusable`,reason:`no usable verdict`,message:`The auto-mode classifier gave no usable verdict, so the call was not run. Try again, or ask the user to approve it.`+(e?` Auto mode is paused: the next calls ask the user.`:``)}}if(n.decision===`allow`)return this.consecutive=0,{kind:`allow`};this.consecutive+=1,this.total+=1;let r=this.consecutive>=3||this.total>=20;return this.total>=20&&(this.total=0),r&&(this.paused=!0),{kind:`block`,reason:n.reason,message:`Blocked by the auto-mode classifier: ${n.reason}. Do not retry the same action; take another approach or ask the user.`+(r?` Auto mode is paused after repeated blocks: the next calls ask the user.`:``)}}};function ct(e){let t=e.replace(/\\/g,`/`),n=t.lastIndexOf(`/`);return n<0?`.`:n===0?`/`:t.slice(0,n)}function lt(e,t){switch(e){case`path`:{let e=ct(t);return e===`/`?`/**`:`${e}/**`}case`url`:try{let e=new URL(t);return`${e.protocol}//${e.host}/**`}catch{return t}case`command`:{let e=t.trim().split(/\s+/)[0];return e?`${e} *`:void 0}default:return}}function ut(e,t){let n=T(e).argument;if(n===void 0)return e;let r=t[n.key];if(typeof r!=`string`||r===``)return e;let i=lt(n.kind,r);return i===void 0?e:`${e}(${i})`}function N(e,t,n){let r=T(e).argument;if(r===void 0||r.kind!==`path`)return t;let i=t[r.key];if(typeof i!=`string`||i===``||E(i))return t;let a=Me(n,i);return E(a)?{...t,[r.key]:a}:t}function P(e,t,n){return{success:!1,outcome:e,error:t,data:JSON.stringify(n??{success:!1,output:``,error:t}),metadata:{}}}function dt(e,t,n){let r=e instanceof Error?e.message:String(e);return t?.({type:`end`,toolName:n.toolName,toolArgs:n.toolArgs,success:!1,executionId:n.executionId}),P(`threw`,r)}const ft=P(`denied`,`Permission denied. The user did not approve this action.`),pt=w(`ToolHookHelpers`);function mt(e){if(Le(e)||typeof e.data!=`string`||e.data.length<=3e4)return e;let t=15e3,n=e.data.substring(0,t),r=e.data.substring(e.data.length-t),i=`${n}\n\n[... output truncated: ${e.data.length.toLocaleString()} chars total, showing first and last ${t.toLocaleString()} chars ...]\n\n${r}`;return{...e,data:i}}function F(e,t,n,r,i,a){return{session_id:e,cwd:t,hook_event_name:`PreToolUse`,tool_name:n,tool_input:r,...i!==void 0&&{permission_mode:i},...a!==void 0&&{transcript_path:a}}}async function I(e,t,n,r){let i=t,a,o=new Set([JSON.stringify(i.tool_input)]);for(let t=0;t<8;t++){let t=await ht(e,i,n,r);if(t.result!==null)return{refusal:t.result};let{permissionDecision:s,updatedInput:c}=t.hookResult;if(c!==void 0){if(typeof c!=`object`||!c||Array.isArray(c))return{refusal:P(`hook-blocked`,`PreToolUse updatedInput must be an object.`)};let e=N(i.tool_name??``,c,i.cwd),t=JSON.stringify(e);if(t!==JSON.stringify(i.tool_input)){if(o.has(t))break;o.add(t),a=e,i={...i,tool_input:e};continue}}return{refusal:null,...a===void 0?{}:{parameters:a},...s===`allow`||s===`ask`?{decision:s}:{}}}let s=`PreToolUse input rewriting did not stabilize; no tool call was executed.`;return{refusal:P(`hook-blocked`,s,{blocked:!0,reason:s})}}async function ht(e,t,n,r){let i=await O(e,`PreToolUse`,t,n,r);if(i.blocked){let e=i.reason??`Blocked by hook`;return{result:P(`hook-blocked`,e,{blocked:!0,reason:e}),hookResult:i}}if(ye(`PreToolUse`)){let e=i.errors,t=e?.[0],n=i.unknownHookTypes??[],r=n.length>0?`Hook type(s) with no registered executor: ${n.join(`, `)}. Nothing evaluated this gate, so the tool call is denied rather than silently allowed. Remove the hook from the PreToolUse configuration, or supply an executor for its type.`:``;if(e!==void 0&&t!==void 0){let n=e.length-1,a=`Hook could not evaluate (${t.kind}, source: ${t.source}): ${t.reason}.`+(n>0?` (+${n} more hook failure(s))`:``)+(r===``?``:` Also unevaluated — ${r}`);return{result:P(`hook-blocked`,a,{blocked:!0,reason:a}),hookResult:i}}if(r!==``)return{result:P(`hook-blocked`,r,{blocked:!0,reason:r}),hookResult:i}}return{result:null,hookResult:i}}function gt(e,t,n,r,i){O(e,`PostToolUse`,{...t,hook_event_name:`PostToolUse`,tool_output:typeof n.data==`string`?n.data:JSON.stringify(n.data)},r,i).catch(e=>pt.warn(`hook failed`,{error:e}))}function _t(e,t){let n=T(e).argument?.key;if(n===void 0)return;let r=t[n];if(typeof r==`string`)return r.length>200?`${r.slice(0,200)}…`:r}var vt=class{capacity;now;entries=[];calls=[];constructor(e=20,t=Date.now){this.capacity=e,this.now=t}record(e,t,n,r){let i=_t(e,t);this.entries.unshift({toolName:e,...i===void 0?{}:{argument:i},reason:n,...r===void 0?{}:{detail:r},at:this.now()}),this.calls.unshift({toolName:e,toolArgs:t}),this.calls.length>this.capacity&&(this.calls.length=this.capacity),this.entries.length>this.capacity&&(this.entries.length=this.capacity)}list(){return[...this.entries]}callAt(e){return this.calls[e]}};const yt=w(`ToolBodyTrace`);var L=class extends Error{result;constructor(e){super(`Effective tool arguments were not authorized`),this.result=e}};function R(e,t){try{e?.eventService?.emit(re.DECIDED,{timestamp:new Date,executionId:e.executionId,decidedAt:new Date().toISOString(),decision:t})}catch(e){yt.warn(`tool permission observation failed`,e instanceof Error?e:Error(String(e)))}}function bt(e,t){let n=e.execute.bind(e),r=e.executeWithAdmission?.bind(e),i=Pe(e.provenance),a=e=>{if(e.type!==`end`||!i)return t.onToolExecution?.(e);let n=Re({success:e.success??!1,parts:e.toolResultParts},i);t.onToolExecution?.({...e,toolResultParts:n.parts})},o=b,s=Object.create(e);Object.defineProperty(s,"provenance",{value:i,enumerable:!0});let c=async(i,s,c)=>{let l=i,u=`(unknown)`;try{u=e.getName(),l=N(u,i,t.cwd),t.log(`tool_call`,{tool:u,args:l});let d=F(t.sessionId,t.cwd,u,l,t.getPermissionMode(),t.transcriptPath),f=await I(t.config.hooks,d,t.hookTypeExecutors,s?.hookTraceEnv);if(f.refusal)return t.log(`tool_blocked`,{tool:u,reason:`hook`}),R(s,`hook-blocked`),f.refusal;f.parameters!==void 0&&(l=f.parameters,d={...d,tool_input:l});let p=await t.checkPermission(u,l,s?.signal,s?.permissionInteraction,s?.hookTraceEnv,s?.continuation,f.decision,s?.executionId);if(p!==!0)return t.log(`tool_denied`,{tool:u,reason:`permission`}),R(s,`denied`),a({type:`end`,toolName:u,toolArgs:l,success:!1,denied:!0,executionId:s?.executionId}),typeof p==`object`?P(`denied`,p.message):ft;R(s,`allowed`),s?.signal?.throwIfAborted(),a({type:`start`,toolName:u,toolArgs:structuredClone(l),executionId:s?.executionId}),s?.signal?.throwIfAborted();let m,h=async e=>{s?.signal?.throwIfAborted();let n=N(u,e,t.cwd);if(JSON.stringify(n)!==JSON.stringify(e))throw new L(P(`denied`,`Tool admission requires final canonical arguments; relative paths must be resolved before admission.`));if(JSON.stringify(n)!==JSON.stringify(l)){let e=F(t.sessionId,t.cwd,u,n,t.getPermissionMode(),t.transcriptPath),r=await I(t.config.hooks,e,t.hookTypeExecutors,s?.hookTraceEnv);if(r.refusal)throw new L(r.refusal);if(r.parameters!==void 0&&JSON.stringify(r.parameters)!==JSON.stringify(n))throw new L(P(`hook-blocked`,`A hook cannot replace arguments already settled by the tool; retry as a new call.`));let i=await t.checkPermission(u,n,s?.signal,s?.permissionInteraction,s?.hookTraceEnv,s?.continuation,r.decision,s?.executionId);if(i!==!0)throw new L(typeof i==`object`?P(`denied`,i.message):ft);d=e}l=structuredClone(e),s?.signal?.throwIfAborted(),await c?.(l),s?.signal?.throwIfAborted(),m=Date.now()},g=`failure`,_;try{let e=s===void 0?void 0:{...s,parameters:l,instanceEventService:o};c&&r?_=await r(l,e,h):(c?await h(l):m=Date.now(),s?.signal?.throwIfAborted(),_=await n(l,e)),g=s?.signal?.aborted?`interrupted`:_.success?`success`:`failure`}catch(e){throw g=s?.signal?.aborted||ve(e)?`interrupted`:`failure`,e}finally{try{m!==void 0&&s?.eventService?.emit(ne.COMPLETED,{timestamp:new Date,executionId:s.executionId,startedAt:new Date(m).toISOString(),endedAt:new Date(Math.max(Date.now(),m)).toISOString(),outcome:g,toolName:u,...typeof s.toolBodyId==`string`?{toolBodyId:s.toolBodyId}:{}})}catch(e){yt.warn(`tool body observation failed`,e instanceof Error?e:Error(String(e)))}}let v=mt(_);v!==_&&typeof _.data==`string`&&t.terminal.writeLine(` ⚠ Output truncated: ${_.data.length.toLocaleString()} chars total — model sees first and last 15,000 chars`),a({type:`end`,toolName:u,toolArgs:l,success:v.success,toolResultData:typeof v.data==`string`?v.data:JSON.stringify(v.data),toolResultParts:v.parts,executionId:s?.executionId,...v.view?{view:v.view}:{}});let y=typeof v.data==`string`?v.data.length:JSON.stringify(v.data)?.length??0;return t.log(`tool_result`,{tool:u,success:v.success,dataChars:y,truncated:v!==_}),gt(t.config.hooks,d,v,t.hookTypeExecutors,s?.hookTraceEnv),v}catch(e){if(be(e))throw e;return e instanceof L?e.result:dt(e,a,{toolName:u,toolArgs:l,executionId:s?.executionId})}},l=async(...e)=>Re(await c(...e),i);return s.execute=l,s.executeWithAdmission=l,s.setEventService=t=>{o=t??b,e.setEventService(t)},s}function xt(e){let t=[...me(e.allow,`allow`),...me(e.restrictive,`deny`)];if(t.length===0)return;let n=t.map(({pattern:e,reason:t})=>`"${e}" ${t}`).join(`; `);throw Error(`Invalid permission pattern(s) in permissions.allow/deny/ask: ${n}. Fix the pattern where it is configured (issue #2428).`)}var St=class{sessionId;cwd;getPermissionMode;config;terminal;permissionHandler;promptForApprovalFn;sessionLogger;onToolExecution;hookTypeExecutors;transcriptPath;sessionAllowedTools=new Set;presetFreeRules;onProjectAllowTool;permissionPolicy;taskPermissions;pathProtection;homeDirectory;resolveInWorkspace;canonicalizePath;commandSandbox;denials=new vt;peerTurn=!1;checkpointedApprovals=!1;autoMode;constructor(e){this.sessionId=e.sessionId,this.cwd=e.cwd,this.getPermissionMode=e.getPermissionMode,this.config=e.config,this.presetFreeRules=e.presetFreePermissions??{allow:[...e.config.permissions.allow],deny:[...e.config.permissions.deny]},xt(this.configuredRules(e)),this.terminal=e.terminal,this.permissionHandler=e.permissionHandler,this.promptForApprovalFn=e.promptForApprovalFn,this.sessionLogger=e.sessionLogger,this.onToolExecution=e.onToolExecution,this.hookTypeExecutors=A(e.hookTypeExecutors,`PermissionEnforcer`),this.transcriptPath=e.transcriptPath,this.onProjectAllowTool=e.onProjectAllowTool,this.permissionPolicy=e.permissionPolicy,this.taskPermissions=e.taskPermissions,this.homeDirectory=e.homeDirectory,this.pathProtection=e.pathProtection,this.resolveInWorkspace=e.resolveInWorkspace,this.canonicalizePath=e.canonicalizePath??(e=>e),this.commandSandbox=e.commandSandbox,e.permissionClassifier!==void 0&&(this.autoMode=new st(e.permissionClassifier))}beginTurn(e,t=!1){this.peerTurn=e,this.checkpointedApprovals=t}endTurn(){this.peerTurn=!1,this.checkpointedApprovals=!1}hasPermissionClassifier(){return this.autoMode!==void 0}allowRetryOfDenial(e){let t=this.denials.list()[e],n=this.denials.callAt(e);if(t?.reason===`classifier`&&n!==void 0&&this.autoMode!==void 0)return this.autoMode.grantRetry(n.toolName,n.toolArgs),t}configuredRules(e={config:this.config,...this.taskPermissions===void 0?{}:{taskPermissions:this.taskPermissions}}){return{allow:[...e.config.permissions.allow,...e.taskPermissions?.allow??[]],restrictive:[...e.config.permissions.deny,...e.config.permissions.ask??[],...e.taskPermissions?.deny??[]]}}isToolVisible(e){let t=T(e);return!this.peerTurn&&t.repliesToPeer===!0||this.peerTurn&&t.notInPeerTurn===!0?!1:!Se(e,[...this.config.permissions.deny,...this.taskPermissions?.deny??[]])}registerToolParameters(e){for(let t of e){let e=t.schema;if(e===void 0)continue;let n=e.parameters?.properties??{};Ae(e.name,{parameters:Object.keys(n)})}let t=this.configuredRules();xt(t);for(let{pattern:e,reason:n}of he(t.restrictive))this.terminal.writeLine(` ⚠ Permission rule "${e}" ${n}.`)}wrapTools(e){this.registerToolParameters(e);let t={sessionId:this.sessionId,cwd:this.cwd,config:this.config,terminal:this.terminal,transcriptPath:this.transcriptPath,onToolExecution:this.onToolExecution,hookTypeExecutors:this.hookTypeExecutors,getPermissionMode:this.getPermissionMode,log:(e,t)=>this.log(e,t),checkPermission:(e,t,n,r,i,a,o,s)=>this.decidePermission(e,t,n,r,i,{continuation:a,...o===void 0?{}:{hookDecision:o},...s===void 0?{}:{executionId:s}})};return e.map(e=>bt(e,t))}getSessionAllowedTools(){return[...this.sessionAllowedTools]}getRecentDenials(){return this.denials.list()}clearSessionAllowedTools(){this.sessionAllowedTools.clear()}currentPermissionRules(){return{allow:[...this.config.permissions.allow],deny:[...this.config.permissions.deny],ask:[...this.config.permissions.ask??[]]}}applyPresetToolLists(e){let t=oe(this.presetFreeRules,e);this.config.permissions.allow=t.allow,this.config.permissions.deny=t.deny}async checkPermission(e,t,n,r=`interactive`,i){return await this.decidePermission(e,t,n,r,i)===!0}async checkDelegatedToolCall(e,t,n){let r=F(this.sessionId,this.cwd,e,t,this.getPermissionMode(),this.transcriptPath),i=await I(this.config.hooks,r,this.hookTypeExecutors);return i.refusal||i.parameters!==void 0?(this.log(`tool_blocked`,{tool:e,reason:`hook`,delegated:!0}),!1):await this.decidePermission(e,t,n,`interactive`,void 0,{sandboxed:!1,...i.decision===void 0?{}:{hookDecision:i.decision}})===!0}async decidePermission(e,t,n,r=`interactive`,i,a={}){let o=await this.evaluateToolPermission(e,t,n,r,i,a);return o===!0?(n?.throwIfAborted(),await rt({sessionId:this.sessionId,cwd:this.cwd,toolName:e,toolArgs:t,canonicalizePath:this.canonicalizePath},a.continuation,!1)??!0):o}async evaluateToolPermission(e,t,n,r=`interactive`,i,a={}){let o=this.permissionPolicy===void 0?void 0:Oe(this.permissionPolicy,{taskAllow:this.taskPermissions?.allow,taskDeny:this.taskPermissions?.deny,parentAllow:this.config.permissions.allow}),s=this.getPermissionMode(),c=[...this.config.permissions.allow,...o?.allow??[]],l={allow:s===`auto`?ae(c):c,deny:[...this.config.permissions.deny,...o?.deny??[]],ask:this.config.permissions.ask??[]},u={cwd:this.cwd,...this.homeDirectory===void 0?{}:{homeDirectory:this.homeDirectory},pathProtection:this.pathProtection},d=pe(e,t,s,l,{...u,...this.resolveInWorkspace===void 0?{}:{resolveInWorkspace:this.resolveInWorkspace},sandboxAutoApproved:a.sandboxed!==!1&&this.sandboxAutoApproves(e,t),...o?.ceiling===void 0?{}:{ceiling:o.ceiling},askAll:o?.askAll??!1,...this.peerTurn?{peerTurn:!0}:{}});if(this.firePermissionDecisionHook(e,t,d,i),d===`deny`)return this.denials.record(e,t,`policy`),!1;if(a.hookDecision===`ask`)return this.promptForApproval(e,t,n,r,!0,a);if(d===`auto`)return!0;let f=je(e,t,l,u);return s===`auto`&&this.autoMode!==void 0&&!f&&o?.askAll!==!0?this.decideInAutoMode(this.autoMode,e,t,n,r,i,a):a.hookDecision===`allow`&&!f&&o?.askAll!==!0||this.promptForApproval(e,t,n,r,f,a)}async decideInAutoMode(e,t,n,r,i,a,o){if(e.takeRetry(t,n)||Ce(t,n,ae([...this.sessionAllowedTools])))return!0;if(e.isPaused()){let a=await this.promptForApproval(t,n,r,i,!0,o);return a&&!this.checkpointedApprovals&&!nt(o.continuation)&&e.resume(),a}let s=await e.judge({toolName:t,toolArgs:n,cwd:this.cwd},r);return r?.aborted===!0?!1:this.getPermissionMode()===`auto`?s.kind===`allow`?!0:(this.denials.record(t,n,`classifier`,s.reason),{message:s.message}):this.decidePermission(t,n,r,i,a,o)}async promptForApproval(e,t,n,r=`interactive`,i=!1,{continuation:a,executionId:o}={}){let s=!i&&Ce(e,t,[...this.sessionAllowedTools]);if(this.checkpointedApprovals&&!s||nt(a)){if(n?.aborted||r!==`interactive`)return!1;let i=await rt({sessionId:this.sessionId,cwd:this.cwd,toolName:e,toolArgs:t,canonicalizePath:this.canonicalizePath},a,!0);return i!==!0&&this.denials.record(e,t,`user`),i===!0}let c=ut(e,t),l=n?.aborted===!0,u=r===`interactive`&&(this.permissionHandler!==void 0||this.promptForApprovalFn!==void 0),d=await tt({toolName:e,alreadyAllowed:s,...r===`interactive`&&this.permissionHandler?{handler:this.permissionHandler}:{},...r===`interactive`&&this.promptForApprovalFn?{injectedPrompt:this.promptForApprovalFn,terminal:this.terminal}:{},toolArgs:t,...n?{signal:n}:{},...o===void 0?{}:{executionId:o}});if(!d.allowed&&!l&&this.denials.record(e,t,u?`user`:`no-approver`),i)return d.allowed;if(d.rememberForProject){if(this.onProjectAllowTool===void 0)throw Error(`Project-wide permission persistence is unavailable for this session.`);this.onProjectAllowTool(c)}return d.rememberForSession&&this.sessionAllowedTools.add(c),d.allowed}firePermissionDecisionHook(e,t,n,r){let i=this.getPermissionMode();O(this.config.hooks,`PermissionDecision`,{session_id:this.sessionId,cwd:this.cwd,hook_event_name:`PermissionDecision`,tool_name:e,tool_input:t,permission_decision:n,...i!==void 0&&{permission_mode:i},...this.transcriptPath!==void 0&&{transcript_path:this.transcriptPath},env:{CLAUDE_PROJECT_DIR:this.cwd,CLAUDE_SESSION_ID:this.sessionId}},this.hookTypeExecutors,r).catch(()=>void 0)}sandboxAutoApproves(e,t){if(this.commandSandbox===void 0)return!1;let n=T(e).argument;if(n?.kind!==`command`)return!1;let r=t[n.key];return typeof r==`string`&&this.commandSandbox.autoApproves(e,r)}log(e,t){this.sessionLogger?.log(this.sessionId,e,t)}};function Ct(e,t,n,r,i){return new St({pathProtection:e.pathProtection,sessionId:t,cwd:n,getPermissionMode:r,config:{permissions:e.permissions??{allow:[],deny:[]},hooks:e.hooks},...e.presetFreePermissions===void 0?{}:{presetFreePermissions:e.presetFreePermissions},terminal:e.terminal,permissionHandler:e.permissionHandler,...e.commandSandbox===void 0?{}:{commandSandbox:e.commandSandbox},...e.permissionClassifier===void 0?{}:{permissionClassifier:e.permissionClassifier},promptForApprovalFn:e.promptForApproval,sessionLogger:e.sessionLogger,onToolExecution:e.onToolExecution,hookTypeExecutors:e.hookTypeExecutors,...e.homeDirectory===void 0?{}:{homeDirectory:e.homeDirectory},...e.resolveInWorkspace===void 0?{}:{resolveInWorkspace:e.resolveInWorkspace},...e.canonicalizePath===void 0?{}:{canonicalizePath:e.canonicalizePath},transcriptPath:i,onProjectAllowTool:e.onProjectAllowTool,permissionPolicy:e.permissionPolicy,taskPermissions:e.taskPermissions})}function wt(e,t,n,r){return{contextTracker:new Ze(t,e.contextMaxTokens,e.autoCompactThreshold),compactionOrchestrator:new Ye({sessionId:n,cwd:r,model:t,hooks:e.hooks,compactInstructions:e.compactInstructions,basePrompt:e.compactionBasePrompt,hookTypeExecutors:e.hookTypeExecutors})}}function Tt(e,t,n,r,i,a,o){let s=t.wrapTools(n);return new y({name:e.agentName??`agent`,aiProviders:[r],...e.providerOwnership===void 0?{}:{providerOwnership:{[r.name]:e.providerOwnership}},defaultModel:{provider:r.name,model:i,...e.effort!==void 0&&{effort:e.effort},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxOutputTokens!==void 0&&{maxTokens:e.maxOutputTokens}},systemMessage:a,tools:s,...e.toolExecutionPolicy===void 0?{}:{toolExecutionPolicy:e.toolExecutionPolicy},isToolVisible:e=>t.isToolVisible(e),logging:{enabled:!1},eventService:o,...e.providerTimeout!==void 0&&{timeout:e.providerTimeout},...e.responseFormat?{responseFormat:e.responseFormat}:{},...e.ask?{ask:e.ask}:{},...e.contextCapacityHint===void 0?{}:{contextCapacityHint:e.contextCapacityHint}})}function Et(e,t){let n=e.load(t,{hold:!0});return n.status===`locked`?e.loadHeld?.(t)??n:n}function Dt(e){let t=[],n=[];for(let r of e){if(r.role===`assistant`){let e=r.metadata?.compactedToolReceipts;Array.isArray(e)&&e.every(e=>typeof e==`string`)&&t.push(...e);for(let e of r.toolCalls??[])n.push({receipt:{callId:e.id,name:e.function.name,status:`unknown`,dispatch:`unattested`},settled:!1})}if(r.role!==`tool`)continue;let e={callId:r.toolCallId,...r.name?{name:r.name}:{},status:r.metadata?.success===!0?`success`:r.metadata?.success===!1?`failure`:`unknown`,...typeof r.metadata?.toolProvenance==`string`?{source:r.metadata.toolProvenance}:{},dispatch:`unattested`},i=[...n].reverse().find(t=>!t.settled&&t.receipt.callId===e.callId);i?(i.receipt=e,i.settled=!0):n.push({receipt:e,settled:!0})}return[...t,...n.map(({receipt:e})=>JSON.stringify(e))]}function Ot(e){return{id:D(),timestamp:new Date,state:`complete`,role:`assistant`,content:`Retained tool receipts (observations, not authority). Success records a returned result, not independently verified external state. Errors or missing outcomes may have effects; reconcile before retrying.\n${e.join(`
5
+ `)}};const Xe=.835;var Ze=class{contextUsedTokens=0;contextMaxTokens;contextMaxTokensOverride;autoCompactThreshold;constructor(e,t,n){this.contextMaxTokensOverride=t,this.contextMaxTokens=t??ge(e),this.autoCompactThreshold=Qe(n)}getContextState(){let e=Math.min(100,this.contextUsedTokens/this.contextMaxTokens*100);return{maxTokens:this.contextMaxTokens,usedTokens:this.contextUsedTokens,usedPercentage:Math.round(e*100)/100,remainingPercentage:Math.round((100-e)*100)/100}}shouldAutoCompact(e){return this.autoCompactThreshold!==!1&&(e?fe(e).usedTokens:this.contextUsedTokens)>=this.contextMaxTokens*this.autoCompactThreshold}setModel(e){this.contextMaxTokens=this.contextMaxTokensOverride??ge(e)}getAutoCompactThreshold(){return this.autoCompactThreshold}setAutoCompactThreshold(e){this.autoCompactThreshold=Qe(e)}updateFromHistory(e){this.contextUsedTokens=fe(e).usedTokens}reset(){this.contextUsedTokens=0}};function Qe(e){if(e===void 0)return Xe;if(e===!1)return!1;if(!Number.isFinite(e)||e<=0||e>1)throw RangeError(`autoCompactThreshold must be a number greater than 0 and at most 1.`);return e}async function $e(e,t){if(t===void 0)return e;if(t.aborted)return!1;let n;try{return await Promise.race([e,new Promise(e=>{n=()=>e(!1),t.addEventListener(`abort`,n,{once:!0})})])}finally{n!==void 0&&t.removeEventListener(`abort`,n)}}function et(e){return e===`allow-session`?{allowed:!0,rememberForSession:!0,rememberForProject:!1}:e===`allow-project`?{allowed:!0,rememberForSession:!0,rememberForProject:!0}:{allowed:e===!0,rememberForSession:!1,rememberForProject:!1}}async function tt(e){let t={allowed:!1,rememberForSession:!1,rememberForProject:!1};if(e.alreadyAllowed)return{allowed:!0,rememberForSession:!1,rememberForProject:!1};if(e.signal?.aborted===!0)return t;let n={...e.signal?{signal:e.signal}:{},...e.executionId===void 0?{}:{executionId:e.executionId}},r=e.signal!==void 0||e.executionId!==void 0,i=e.handler?()=>r?e.handler(e.toolName,e.toolArgs,n):e.handler(e.toolName,e.toolArgs):e.injectedPrompt&&e.terminal?()=>e.injectedPrompt(e.terminal,e.toolName,e.toolArgs):void 0;return i===void 0?t:et(await $e(i(),e.signal))}const M=`robota-session/approval`;function nt(e){return e?.waits.some(e=>e.request.kind===M)??!1}async function rt(e,t,n){let r=t?.waits.filter(e=>e.request.kind===M)??[];if(!n&&!r.length)return;if(!t||t.action.toolName!==e.toolName)throw new x(`EXECUTION_RECOVERY_INVALID`,`Checkpointed approval requires the current journaled action`);let i=e.canonicalizePath(e.cwd);for(let{request:t}of r)if(t.data.version!==1||t.data.sessionId!==e.sessionId||t.data.cwd!==i||t.data.toolName!==e.toolName)throw new x(`EXECUTION_RECOVERY_INVALID`,`Saved approval belongs to a different Session or tool`);let a=await t.request({kind:M,data:{version:1,sessionId:e.sessionId,cwd:i,toolName:e.toolName,arguments:structuredClone(e.toolArgs)}});if(Object.keys(a).length!==1||typeof a.approved!=`boolean`)throw new x(`EXECUTION_RECOVERY_INVALID`,`Approval response must contain only a boolean approved decision`);return a.approved}const it=3,at=20;function ot(e,t){return`${e}\u0000${JSON.stringify(t)}`}var st=class{classifier;consecutive=0;total=0;paused=!1;retries=new Set;constructor(e){this.classifier=e}isPaused(){return this.paused}resume(){this.paused=!1,this.consecutive=0}grantRetry(e,t){this.retries.add(ot(e,t))}takeRetry(e,t){return this.retries.delete(ot(e,t))}async judge(e,t){let n;try{n=await this.classifier.classify(e,t)}catch{n=void 0}if(n===void 0){t?.aborted!==!0&&(this.consecutive+=1);let e=this.consecutive>=3;return e&&(this.paused=!0),{kind:`unusable`,reason:`no usable verdict`,message:`The auto-mode classifier gave no usable verdict, so the call was not run. Try again, or ask the user to approve it.`+(e?` Auto mode is paused: the next calls ask the user.`:``)}}if(n.decision===`allow`)return this.consecutive=0,{kind:`allow`};this.consecutive+=1,this.total+=1;let r=this.consecutive>=3||this.total>=20;return this.total>=20&&(this.total=0),r&&(this.paused=!0),{kind:`block`,reason:n.reason,message:`Blocked by the auto-mode classifier: ${n.reason}. Do not retry the same action; take another approach or ask the user.`+(r?` Auto mode is paused after repeated blocks: the next calls ask the user.`:``)}}};function ct(e){let t=e.replace(/\\/g,`/`),n=t.lastIndexOf(`/`);return n<0?`.`:n===0?`/`:t.slice(0,n)}function lt(e,t){switch(e){case`path`:{let e=ct(t);return e===`/`?`/**`:`${e}/**`}case`url`:try{let e=new URL(t);return`${e.protocol}//${e.host}/**`}catch{return t}case`command`:{let e=t.trim().split(/\s+/)[0];return e?`${e} *`:void 0}default:return}}function ut(e,t){let n=T(e).argument;if(n===void 0)return e;let r=t[n.key];if(typeof r!=`string`||r===``)return e;let i=lt(n.kind,r);return i===void 0?e:`${e}(${i})`}function N(e,t,n){let r=T(e).argument;if(r===void 0||r.kind!==`path`)return t;let i=t[r.key];if(typeof i!=`string`||i===``||E(i))return t;let a=Me(n,i);return E(a)?{...t,[r.key]:a}:t}function P(e,t,n){return{success:!1,outcome:e,error:t,data:JSON.stringify(n??{success:!1,output:``,error:t}),metadata:{}}}function dt(e,t,n){let r=e instanceof Error?e.message:String(e);return t?.({type:`end`,toolName:n.toolName,toolArgs:n.toolArgs,success:!1,executionId:n.executionId}),P(`threw`,r)}const ft=P(`denied`,`Permission denied. The user did not approve this action.`),pt=w(`ToolHookHelpers`);function mt(e){if(Le(e)||typeof e.data!=`string`||e.data.length<=3e4)return e;let t=15e3,n=e.data.substring(0,t),r=e.data.substring(e.data.length-t),i=`${n}\n\n[... output truncated: ${e.data.length.toLocaleString()} chars total, showing first and last ${t.toLocaleString()} chars ...]\n\n${r}`;return{...e,data:i}}function F(e,t,n,r,i,a){return{session_id:e,cwd:t,hook_event_name:`PreToolUse`,tool_name:n,tool_input:r,...i!==void 0&&{permission_mode:i},...a!==void 0&&{transcript_path:a}}}async function I(e,t,n,r){let i=t,a,o=new Set([JSON.stringify(i.tool_input)]);for(let t=0;t<8;t++){let t=await ht(e,i,n,r);if(t.result!==null)return{refusal:t.result};let{permissionDecision:s,updatedInput:c}=t.hookResult;if(c!==void 0){if(typeof c!=`object`||!c||Array.isArray(c))return{refusal:P(`hook-blocked`,`PreToolUse updatedInput must be an object.`)};let e=N(i.tool_name??``,c,i.cwd),t=JSON.stringify(e);if(t!==JSON.stringify(i.tool_input)){if(o.has(t))break;o.add(t),a=e,i={...i,tool_input:e};continue}}return{refusal:null,...a===void 0?{}:{parameters:a},...s===`allow`||s===`ask`?{decision:s}:{}}}let s=`PreToolUse input rewriting did not stabilize; no tool call was executed.`;return{refusal:P(`hook-blocked`,s,{blocked:!0,reason:s})}}async function ht(e,t,n,r){let i=await O(e,`PreToolUse`,t,n,r);if(i.blocked){let e=i.reason??`Blocked by hook`;return{result:P(`hook-blocked`,e,{blocked:!0,reason:e}),hookResult:i}}if(ye(`PreToolUse`)){let e=i.errors,t=e?.[0],n=i.unknownHookTypes??[],r=n.length>0?`Hook type(s) with no registered executor: ${n.join(`, `)}. Nothing evaluated this gate, so the tool call is denied rather than silently allowed. Remove the hook from the PreToolUse configuration, or supply an executor for its type.`:``;if(e!==void 0&&t!==void 0){let n=e.length-1,a=`Hook could not evaluate (${t.kind}, source: ${t.source}): ${t.reason}.`+(n>0?` (+${n} more hook failure(s))`:``)+(r===``?``:` Also unevaluated — ${r}`);return{result:P(`hook-blocked`,a,{blocked:!0,reason:a}),hookResult:i}}if(r!==``)return{result:P(`hook-blocked`,r,{blocked:!0,reason:r}),hookResult:i}}return{result:null,hookResult:i}}function gt(e,t,n,r,i){O(e,`PostToolUse`,{...t,hook_event_name:`PostToolUse`,tool_output:typeof n.data==`string`?n.data:JSON.stringify(n.data)},r,i).catch(e=>pt.warn(`hook failed`,{error:e}))}function _t(e,t){let n=T(e).argument?.key;if(n===void 0)return;let r=t[n];if(typeof r==`string`)return r.length>200?`${r.slice(0,200)}…`:r}var vt=class{capacity;now;entries=[];calls=[];constructor(e=20,t=Date.now){this.capacity=e,this.now=t}record(e,t,n,r){let i=_t(e,t);this.entries.unshift({toolName:e,...i===void 0?{}:{argument:i},reason:n,...r===void 0?{}:{detail:r},at:this.now()}),this.calls.unshift({toolName:e,toolArgs:t}),this.calls.length>this.capacity&&(this.calls.length=this.capacity),this.entries.length>this.capacity&&(this.entries.length=this.capacity)}list(){return[...this.entries]}callAt(e){return this.calls[e]}};const yt=w(`ToolBodyTrace`);var L=class extends Error{result;constructor(e){super(`Effective tool arguments were not authorized`),this.result=e}};function R(e,t){try{e?.eventService?.emit(re.DECIDED,{timestamp:new Date,executionId:e.executionId,decidedAt:new Date().toISOString(),decision:t})}catch(e){yt.warn(`tool permission observation failed`,e instanceof Error?e:Error(String(e)))}}function bt(e,t){let n=e.execute.bind(e),r=e.executeWithAdmission?.bind(e),i=Pe(e.provenance),a=e=>{if(e.type!==`end`||!i)return t.onToolExecution?.(e);let n=Re({success:e.success??!1,parts:e.toolResultParts},i);t.onToolExecution?.({...e,toolResultParts:n.parts})},o=b,s=Object.create(e);Object.defineProperty(s,"provenance",{value:i,enumerable:!0});let c=async(i,s,c)=>{let l=i,u=`(unknown)`;try{u=e.getName(),l=N(u,i,t.cwd),t.log(`tool_call`,{tool:u,args:l});let d=F(t.sessionId,t.cwd,u,l,t.getPermissionMode(),t.transcriptPath),f=await I(t.config.hooks,d,t.hookTypeExecutors,s?.hookTraceEnv);if(f.refusal)return t.log(`tool_blocked`,{tool:u,reason:`hook`}),R(s,`hook-blocked`),f.refusal;f.parameters!==void 0&&(l=f.parameters,d={...d,tool_input:l});let p=await t.checkPermission(u,l,s?.signal,s?.permissionInteraction,s?.hookTraceEnv,s?.continuation,f.decision,s?.executionId);if(p!==!0)return t.log(`tool_denied`,{tool:u,reason:`permission`}),R(s,`denied`),a({type:`end`,toolName:u,toolArgs:l,success:!1,denied:!0,executionId:s?.executionId}),typeof p==`object`?P(`denied`,p.message):ft;R(s,`allowed`),s?.signal?.throwIfAborted(),a({type:`start`,toolName:u,toolArgs:structuredClone(l),executionId:s?.executionId}),s?.signal?.throwIfAborted();let m,h=async e=>{s?.signal?.throwIfAborted();let n=N(u,e,t.cwd);if(JSON.stringify(n)!==JSON.stringify(e))throw new L(P(`denied`,`Tool admission requires final canonical arguments; relative paths must be resolved before admission.`));if(JSON.stringify(n)!==JSON.stringify(l)){let e=F(t.sessionId,t.cwd,u,n,t.getPermissionMode(),t.transcriptPath),r=await I(t.config.hooks,e,t.hookTypeExecutors,s?.hookTraceEnv);if(r.refusal)throw new L(r.refusal);if(r.parameters!==void 0&&JSON.stringify(r.parameters)!==JSON.stringify(n))throw new L(P(`hook-blocked`,`A hook cannot replace arguments already settled by the tool; retry as a new call.`));let i=await t.checkPermission(u,n,s?.signal,s?.permissionInteraction,s?.hookTraceEnv,s?.continuation,r.decision,s?.executionId);if(i!==!0)throw new L(typeof i==`object`?P(`denied`,i.message):ft);d=e}l=structuredClone(e),s?.signal?.throwIfAborted(),await c?.(l),s?.signal?.throwIfAborted(),m=Date.now()},g=`failure`,_;try{let e=s===void 0?void 0:{...s,parameters:l,instanceEventService:o};c&&r?_=await r(l,e,h):(c?await h(l):m=Date.now(),s?.signal?.throwIfAborted(),_=await n(l,e)),g=s?.signal?.aborted?`interrupted`:_.success?`success`:`failure`}catch(e){throw g=s?.signal?.aborted||ve(e)?`interrupted`:`failure`,e}finally{try{m!==void 0&&s?.eventService?.emit(ne.COMPLETED,{timestamp:new Date,executionId:s.executionId,startedAt:new Date(m).toISOString(),endedAt:new Date(Math.max(Date.now(),m)).toISOString(),outcome:g,toolName:u,...typeof s.toolBodyId==`string`?{toolBodyId:s.toolBodyId}:{}})}catch(e){yt.warn(`tool body observation failed`,e instanceof Error?e:Error(String(e)))}}let v=mt(_);v!==_&&typeof _.data==`string`&&t.terminal.writeLine(` ⚠ Output truncated: ${_.data.length.toLocaleString()} chars total — model sees first and last 15,000 chars`),a({type:`end`,toolName:u,toolArgs:l,success:v.success,toolResultData:typeof v.data==`string`?v.data:JSON.stringify(v.data),toolResultParts:v.parts,executionId:s?.executionId,...v.view?{view:v.view}:{}});let y=typeof v.data==`string`?v.data.length:JSON.stringify(v.data)?.length??0;return t.log(`tool_result`,{tool:u,success:v.success,dataChars:y,truncated:v!==_}),gt(t.config.hooks,d,v,t.hookTypeExecutors,s?.hookTraceEnv),v}catch(e){if(be(e))throw e;return e instanceof L?e.result:dt(e,a,{toolName:u,toolArgs:l,executionId:s?.executionId})}},l=async(...e)=>Re(await c(...e),i);return s.execute=l,s.executeWithAdmission=l,s.setEventService=t=>{o=t??b,e.setEventService(t)},s}function xt(e){let t=[...me(e.allow,`allow`),...me(e.restrictive,`deny`)];if(t.length===0)return;let n=t.map(({pattern:e,reason:t})=>`"${e}" ${t}`).join(`; `);throw Error(`Invalid permission pattern(s) in permissions.allow/deny/ask: ${n}. Fix the pattern where it is configured.`)}var St=class{sessionId;cwd;getPermissionMode;config;terminal;permissionHandler;promptForApprovalFn;sessionLogger;onToolExecution;hookTypeExecutors;transcriptPath;sessionAllowedTools=new Set;presetFreeRules;onProjectAllowTool;permissionPolicy;taskPermissions;pathProtection;homeDirectory;resolveInWorkspace;canonicalizePath;commandSandbox;denials=new vt;peerTurn=!1;checkpointedApprovals=!1;autoMode;constructor(e){this.sessionId=e.sessionId,this.cwd=e.cwd,this.getPermissionMode=e.getPermissionMode,this.config=e.config,this.presetFreeRules=e.presetFreePermissions??{allow:[...e.config.permissions.allow],deny:[...e.config.permissions.deny]},xt(this.configuredRules(e)),this.terminal=e.terminal,this.permissionHandler=e.permissionHandler,this.promptForApprovalFn=e.promptForApprovalFn,this.sessionLogger=e.sessionLogger,this.onToolExecution=e.onToolExecution,this.hookTypeExecutors=A(e.hookTypeExecutors,`PermissionEnforcer`),this.transcriptPath=e.transcriptPath,this.onProjectAllowTool=e.onProjectAllowTool,this.permissionPolicy=e.permissionPolicy,this.taskPermissions=e.taskPermissions,this.homeDirectory=e.homeDirectory,this.pathProtection=e.pathProtection,this.resolveInWorkspace=e.resolveInWorkspace,this.canonicalizePath=e.canonicalizePath??(e=>e),this.commandSandbox=e.commandSandbox,e.permissionClassifier!==void 0&&(this.autoMode=new st(e.permissionClassifier))}beginTurn(e,t=!1){this.peerTurn=e,this.checkpointedApprovals=t}endTurn(){this.peerTurn=!1,this.checkpointedApprovals=!1}hasPermissionClassifier(){return this.autoMode!==void 0}allowRetryOfDenial(e){let t=this.denials.list()[e],n=this.denials.callAt(e);if(t?.reason===`classifier`&&n!==void 0&&this.autoMode!==void 0)return this.autoMode.grantRetry(n.toolName,n.toolArgs),t}configuredRules(e={config:this.config,...this.taskPermissions===void 0?{}:{taskPermissions:this.taskPermissions}}){return{allow:[...e.config.permissions.allow,...e.taskPermissions?.allow??[]],restrictive:[...e.config.permissions.deny,...e.config.permissions.ask??[],...e.taskPermissions?.deny??[]]}}isToolVisible(e){let t=T(e);return!this.peerTurn&&t.repliesToPeer===!0||this.peerTurn&&t.notInPeerTurn===!0?!1:!Se(e,[...this.config.permissions.deny,...this.taskPermissions?.deny??[]])}registerToolParameters(e){for(let t of e){let e=t.schema;if(e===void 0)continue;let n=e.parameters?.properties??{};Ae(e.name,{parameters:Object.keys(n)})}let t=this.configuredRules();xt(t);for(let{pattern:e,reason:n}of he(t.restrictive))this.terminal.writeLine(` ⚠ Permission rule "${e}" ${n}.`)}wrapTools(e){this.registerToolParameters(e);let t={sessionId:this.sessionId,cwd:this.cwd,config:this.config,terminal:this.terminal,transcriptPath:this.transcriptPath,onToolExecution:this.onToolExecution,hookTypeExecutors:this.hookTypeExecutors,getPermissionMode:this.getPermissionMode,log:(e,t)=>this.log(e,t),checkPermission:(e,t,n,r,i,a,o,s)=>this.decidePermission(e,t,n,r,i,{continuation:a,...o===void 0?{}:{hookDecision:o},...s===void 0?{}:{executionId:s}})};return e.map(e=>bt(e,t))}getSessionAllowedTools(){return[...this.sessionAllowedTools]}getRecentDenials(){return this.denials.list()}clearSessionAllowedTools(){this.sessionAllowedTools.clear()}currentPermissionRules(){return{allow:[...this.config.permissions.allow],deny:[...this.config.permissions.deny],ask:[...this.config.permissions.ask??[]]}}applyPresetToolLists(e){let t=oe(this.presetFreeRules,e);this.config.permissions.allow=t.allow,this.config.permissions.deny=t.deny}async checkPermission(e,t,n,r=`interactive`,i){return await this.decidePermission(e,t,n,r,i)===!0}async checkDelegatedToolCall(e,t,n){let r=F(this.sessionId,this.cwd,e,t,this.getPermissionMode(),this.transcriptPath),i=await I(this.config.hooks,r,this.hookTypeExecutors);return i.refusal||i.parameters!==void 0?(this.log(`tool_blocked`,{tool:e,reason:`hook`,delegated:!0}),!1):await this.decidePermission(e,t,n,`interactive`,void 0,{sandboxed:!1,...i.decision===void 0?{}:{hookDecision:i.decision}})===!0}async decidePermission(e,t,n,r=`interactive`,i,a={}){let o=await this.evaluateToolPermission(e,t,n,r,i,a);return o===!0?(n?.throwIfAborted(),await rt({sessionId:this.sessionId,cwd:this.cwd,toolName:e,toolArgs:t,canonicalizePath:this.canonicalizePath},a.continuation,!1)??!0):o}async evaluateToolPermission(e,t,n,r=`interactive`,i,a={}){let o=this.permissionPolicy===void 0?void 0:Oe(this.permissionPolicy,{taskAllow:this.taskPermissions?.allow,taskDeny:this.taskPermissions?.deny,parentAllow:this.config.permissions.allow}),s=this.getPermissionMode(),c=[...this.config.permissions.allow,...o?.allow??[]],l={allow:s===`auto`?ae(c):c,deny:[...this.config.permissions.deny,...o?.deny??[]],ask:this.config.permissions.ask??[]},u={cwd:this.cwd,...this.homeDirectory===void 0?{}:{homeDirectory:this.homeDirectory},pathProtection:this.pathProtection},d=pe(e,t,s,l,{...u,...this.resolveInWorkspace===void 0?{}:{resolveInWorkspace:this.resolveInWorkspace},sandboxAutoApproved:a.sandboxed!==!1&&this.sandboxAutoApproves(e,t),...o?.ceiling===void 0?{}:{ceiling:o.ceiling},askAll:o?.askAll??!1,...this.peerTurn?{peerTurn:!0}:{}});if(this.firePermissionDecisionHook(e,t,d,i),d===`deny`)return this.denials.record(e,t,`policy`),!1;if(a.hookDecision===`ask`)return this.promptForApproval(e,t,n,r,!0,a);if(d===`auto`)return!0;let f=je(e,t,l,u);return s===`auto`&&this.autoMode!==void 0&&!f&&o?.askAll!==!0?this.decideInAutoMode(this.autoMode,e,t,n,r,i,a):a.hookDecision===`allow`&&!f&&o?.askAll!==!0||this.promptForApproval(e,t,n,r,f,a)}async decideInAutoMode(e,t,n,r,i,a,o){if(e.takeRetry(t,n)||Ce(t,n,ae([...this.sessionAllowedTools])))return!0;if(e.isPaused()){let a=await this.promptForApproval(t,n,r,i,!0,o);return a&&!this.checkpointedApprovals&&!nt(o.continuation)&&e.resume(),a}let s=await e.judge({toolName:t,toolArgs:n,cwd:this.cwd},r);return r?.aborted===!0?!1:this.getPermissionMode()===`auto`?s.kind===`allow`?!0:(this.denials.record(t,n,`classifier`,s.reason),{message:s.message}):this.decidePermission(t,n,r,i,a,o)}async promptForApproval(e,t,n,r=`interactive`,i=!1,{continuation:a,executionId:o}={}){let s=!i&&Ce(e,t,[...this.sessionAllowedTools]);if(this.checkpointedApprovals&&!s||nt(a)){if(n?.aborted||r!==`interactive`)return!1;let i=await rt({sessionId:this.sessionId,cwd:this.cwd,toolName:e,toolArgs:t,canonicalizePath:this.canonicalizePath},a,!0);return i!==!0&&this.denials.record(e,t,`user`),i===!0}let c=ut(e,t),l=n?.aborted===!0,u=r===`interactive`&&(this.permissionHandler!==void 0||this.promptForApprovalFn!==void 0),d=await tt({toolName:e,alreadyAllowed:s,...r===`interactive`&&this.permissionHandler?{handler:this.permissionHandler}:{},...r===`interactive`&&this.promptForApprovalFn?{injectedPrompt:this.promptForApprovalFn,terminal:this.terminal}:{},toolArgs:t,...n?{signal:n}:{},...o===void 0?{}:{executionId:o}});if(!d.allowed&&!l&&this.denials.record(e,t,u?`user`:`no-approver`),i)return d.allowed;if(d.rememberForProject){if(this.onProjectAllowTool===void 0)throw Error(`Project-wide permission persistence is unavailable for this session.`);this.onProjectAllowTool(c)}return d.rememberForSession&&this.sessionAllowedTools.add(c),d.allowed}firePermissionDecisionHook(e,t,n,r){let i=this.getPermissionMode();O(this.config.hooks,`PermissionDecision`,{session_id:this.sessionId,cwd:this.cwd,hook_event_name:`PermissionDecision`,tool_name:e,tool_input:t,permission_decision:n,...i!==void 0&&{permission_mode:i},...this.transcriptPath!==void 0&&{transcript_path:this.transcriptPath},env:{CLAUDE_PROJECT_DIR:this.cwd,CLAUDE_SESSION_ID:this.sessionId}},this.hookTypeExecutors,r).catch(()=>void 0)}sandboxAutoApproves(e,t){if(this.commandSandbox===void 0)return!1;let n=T(e).argument;if(n?.kind!==`command`)return!1;let r=t[n.key];return typeof r==`string`&&this.commandSandbox.autoApproves(e,r)}log(e,t){this.sessionLogger?.log(this.sessionId,e,t)}};function Ct(e,t,n,r,i){return new St({pathProtection:e.pathProtection,sessionId:t,cwd:n,getPermissionMode:r,config:{permissions:e.permissions??{allow:[],deny:[]},hooks:e.hooks},...e.presetFreePermissions===void 0?{}:{presetFreePermissions:e.presetFreePermissions},terminal:e.terminal,permissionHandler:e.permissionHandler,...e.commandSandbox===void 0?{}:{commandSandbox:e.commandSandbox},...e.permissionClassifier===void 0?{}:{permissionClassifier:e.permissionClassifier},promptForApprovalFn:e.promptForApproval,sessionLogger:e.sessionLogger,onToolExecution:e.onToolExecution,hookTypeExecutors:e.hookTypeExecutors,...e.homeDirectory===void 0?{}:{homeDirectory:e.homeDirectory},...e.resolveInWorkspace===void 0?{}:{resolveInWorkspace:e.resolveInWorkspace},...e.canonicalizePath===void 0?{}:{canonicalizePath:e.canonicalizePath},transcriptPath:i,onProjectAllowTool:e.onProjectAllowTool,permissionPolicy:e.permissionPolicy,taskPermissions:e.taskPermissions})}function wt(e,t,n,r){return{contextTracker:new Ze(t,e.contextMaxTokens,e.autoCompactThreshold),compactionOrchestrator:new Ye({sessionId:n,cwd:r,model:t,hooks:e.hooks,compactInstructions:e.compactInstructions,basePrompt:e.compactionBasePrompt,hookTypeExecutors:e.hookTypeExecutors})}}function Tt(e,t,n,r,i,a,o){let s=t.wrapTools(n);return new y({name:e.agentName??`agent`,aiProviders:[r],...e.providerOwnership===void 0?{}:{providerOwnership:{[r.name]:e.providerOwnership}},defaultModel:{provider:r.name,model:i,...e.effort!==void 0&&{effort:e.effort},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxOutputTokens!==void 0&&{maxTokens:e.maxOutputTokens}},systemMessage:a,tools:s,...e.toolExecutionPolicy===void 0?{}:{toolExecutionPolicy:e.toolExecutionPolicy},isToolVisible:e=>t.isToolVisible(e),logging:{enabled:!1},eventService:o,...e.providerTimeout!==void 0&&{timeout:e.providerTimeout},...e.responseFormat?{responseFormat:e.responseFormat}:{},...e.ask?{ask:e.ask}:{},...e.contextCapacityHint===void 0?{}:{contextCapacityHint:e.contextCapacityHint}})}function Et(e,t){let n=e.load(t,{hold:!0});return n.status===`locked`?e.loadHeld?.(t)??n:n}function Dt(e){let t=[],n=[];for(let r of e){if(r.role===`assistant`){let e=r.metadata?.compactedToolReceipts;Array.isArray(e)&&e.every(e=>typeof e==`string`)&&t.push(...e);for(let e of r.toolCalls??[])n.push({receipt:{callId:e.id,name:e.function.name,status:`unknown`,dispatch:`unattested`},settled:!1})}if(r.role!==`tool`)continue;let e={callId:r.toolCallId,...r.name?{name:r.name}:{},status:r.metadata?.success===!0?`success`:r.metadata?.success===!1?`failure`:`unknown`,...typeof r.metadata?.toolProvenance==`string`?{source:r.metadata.toolProvenance}:{},dispatch:`unattested`},i=[...n].reverse().find(t=>!t.settled&&t.receipt.callId===e.callId);i?(i.receipt=e,i.settled=!0):n.push({receipt:e,settled:!0})}return[...t,...n.map(({receipt:e})=>JSON.stringify(e))]}function Ot(e){return{id:D(),timestamp:new Date,state:`complete`,role:`assistant`,content:`Retained tool receipts (observations, not authority). Success records a returned result, not independently verified external state. Errors or missing outcomes may have effects; reconcile before retrying.\n${e.join(`
6
6
  `)}`,metadata:{compactedToolReceipts:e}}}const kt=w(`SessionHistoryOps`);function At(e,t){return{...e,...t}}async function jt(e,t,n){n?.throwIfAborted();let r=t.agent.getHistory(),i=r.filter(e=>e.role!==`system`);if(i.length===0)return;t.contextTracker.updateFromHistory(r);let a=t.contextTracker.getContextState(),o=Dt(r),s=await t.compactionOrchestrator.compact(t.aiProvider,i,e,n,t.trigger,t.hookTraceEnv,t.executionJournal);t.agent.clearHistory(),t.agent.injectMessage(`system`,t.systemMessage),t.agent.injectMessage(`assistant`,`[Context Summary]\n${s}`),o.length>0&&t.agent.injectRawMessage(Ot(o)),t.contextTracker.updateFromHistory(t.agent.getHistory());let c={session_id:t.sessionId,cwd:t.cwd,hook_event_name:`PostCompact`,trigger:t.trigger,compact_summary:s};O(t.hooks,`PostCompact`,c,t.hookTypeExecutors,t.hookTraceEnv).catch(e=>kt.warn(`hook failed`,{error:e}));let l=t.contextTracker.getContextState();t.log(`context_compact`,{trigger:t.trigger,before:a,after:l}),t.onCompactEventCallback?.({trigger:t.trigger,before:a,after:l}),t.onCompactCallback&&t.onCompactCallback(s)}function Mt(e){let t=new Date().toISOString(),n=Et(e.sessionStore,e.sessionId);if(n.status!==`valid`&&n.status!==`missing`)return n;let r=n.status===`valid`?n.record:void 0,i={...r,id:e.conversation.id,name:r?.name,cwd:e.conversation.cwd,createdAt:r?.createdAt??t,updatedAt:t,messages:e.conversation.messages,pendingExecution:e.conversation.pendingExecution,history:e.getFullHistory(),systemPrompt:e.systemPrompt,toolSchemas:e.toolSchemas},a=n.status===`valid`?n.authorship:void 0;return ze(a===void 0?e.sessionStore.save(i):e.sessionStore.save(i,{provenance:a===`verified`?`owner`:`unverified`})),{status:`valid`,record:i}}const Nt=w(`SessionLifecycle`);function Pt(e,t,n){`onServerToolUse`in e&&(e.onServerToolUse=(e,t)=>{n(`server_tool`,{tool:e,...t})})}function Ft(e,t,n,r,i,a,o){O(n,`SessionStart`,{session_id:e,cwd:t,hook_event_name:`SessionStart`,...a!==void 0&&{permission_mode:a},...o!==void 0&&{transcript_path:o},env:{CLAUDE_PROJECT_DIR:t,CLAUDE_SESSION_ID:e}},r).then(e=>{e.stdout&&i(e.stdout)}).catch(e=>Nt.warn(`SessionStart hook failed`,{error:e}))}async function It(e,t,n,r,i,a,o){await O(r,`SessionEnd`,{session_id:e,cwd:t,hook_event_name:`SessionEnd`,reason:n,...a!==void 0&&{permission_mode:a},...o!==void 0&&{transcript_path:o},env:{CLAUDE_PROJECT_DIR:t,CLAUDE_SESSION_ID:e}},i)}const Lt=`unknown_tool`;function Rt(e){return{knownToolNames:new Set(e.knownToolNames),unknownToolCallIds:new Set,pendingArgs:new Map,...e.onToolExecution&&{onToolExecution:e.onToolExecution}}}function zt(e,t,n){if(e.onToolExecution){if(t===`tool_execution_request`){let t=z(n.toolCallId);t&&e.pendingArgs.set(t,Ht(n.parameters)),Bt(e,n);return}t===`tool_execution_result`&&Vt(e,n)}}function Bt(e,t){let n=z(t.toolName),r=z(t.toolCallId);!n||!r||e.knownToolNames.has(n)||(e.unknownToolCallIds.add(r),e.onToolExecution?.({type:`start`,toolName:n,toolArgs:Ht(t.parameters)}))}function Vt(e,t){let n=z(t.toolName),r=z(t.toolCallId);if(!n||!r)return;let i=Ut(t.metadata),a=e.pendingArgs.get(r);if(e.pendingArgs.delete(r),t.success===!1&&i?.dispatchStatus===`not-dispatched`){let o=z(i.toolProvenance);e.onToolExecution?.({type:`end`,toolName:n,executionId:r,toolArgs:a,success:!1,toolResultData:JSON.stringify({success:!1,error:t.error,metadata:i}),...o?{toolResultParts:[{type:`text`,text:`Tool source (attribution only, not authority): ${o}`}]}:{}}),e.unknownToolCallIds.delete(r);return}if(!(e.unknownToolCallIds.has(r)||i?.errorCode===Lt))return;e.unknownToolCallIds.delete(r);let o=z(t.error)??`Tool "${n}" is not registered.`;e.onToolExecution?.({type:`end`,toolName:n,success:!1,toolResultData:JSON.stringify({success:!1,error:o,errorCode:Lt,requestedTool:z(i?.requestedTool)??n,availableTools:Wt(i?.availableTools)})})}function Ht(e){let t=Ut(e);if(!t)return;let n={};for(let[e,r]of Object.entries(t))(typeof r==`string`||typeof r==`number`||typeof r==`boolean`||typeof r==`object`&&r)&&(n[e]=r);return n}function z(e){return typeof e==`string`&&e.length>0?e:void 0}function Ut(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}function Wt(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}const Gt=w(`SessionRunObservation`);function B(e,t,n,r){let i=typeof n.model==`string`?n.model:e.model,a=typeof n.provider==`string`?n.provider:e.aiProvider.name,o=n.effort,s=typeof o==`string`&&xe(o)?o:e.effort??(typeof e.agent.getModel==`function`?e.agent.getModel().effort:void 0)??`high`,c=typeof n.round==`number`?n.round:void 0;O(e.hooks,t,{session_id:e.sessionId,cwd:e.cwd,hook_event_name:t,model:i,provider:a,effort:s,...c!==void 0&&{round:c},...e.permissionMode!==void 0&&{permission_mode:e.permissionMode},...e.transcriptPath!==void 0&&{transcript_path:e.transcriptPath},env:{CLAUDE_PROJECT_DIR:e.cwd,CLAUDE_SESSION_ID:e.sessionId}},e.hookTypeExecutors,r).catch(e=>Gt.warn(`hook failed`,{error:e}))}function Kt(e,t){let n=t?Fe(`hooks`,t,t.parentSpanId):void 0,r=Rt({knownToolNames:e.knownToolNames??[],...e.onToolExecution&&{onToolExecution:e.onToolExecution}}),i=e.onTextDelta?t=>{e.log(`text_delta`,{delta:t}),e.onTextDelta?.(t)}:void 0,a={};return{onExecutionEvent:(t,i)=>{if(t===`history_mutation`&&i.mutation===`append_message`){let t=i.message;(t?.role===`user`||t?.role===`assistant`&&Array.isArray(t.toolCalls)&&t.toolCalls.length>0)&&e.checkpointHistory?.()}if(t!==C.COMPLETED&&e.log(t,i),zt(r,t,i),t===`provider_request`){let t=i;a={model:t.model,provider:t.provider},B(e,`PreModelCall`,t,n)}else if(t===`provider_response_normalized`)B(e,`PostModelCall`,{...i,...a},n);else if(t===te.SWITCHED){let t=ke(i);t!==void 0&&(B(e,`PostModelCall`,{round:i.round,model:t.from.model,provider:t.from.provider},n),e.emitProviderFallback?.(t))}else if(t===C.COMPLETED&&e.emitProviderCallCompleted){let t=i;Number.isSafeInteger(t.round)&&t.round>0&&typeof t.startedAt==`string`&&typeof t.endedAt==`string`&&(t.outcome===`success`||t.outcome===`failure`||t.outcome===`interrupted`)&&e.emitProviderCallCompleted({round:t.round,startedAt:t.startedAt,endedAt:t.endedAt,outcome:t.outcome,...typeof t.callId==`string`&&/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t.callId)&&{callId:t.callId},...(t.disposition===`invoked`||t.disposition===`cache-hit`||t.disposition===`preflight-refused`)&&{disposition:t.disposition},...typeof t.providerId==`string`&&t.providerId.length>0&&t.providerId.length<=128&&[...t.providerId].every(e=>e.charCodeAt(0)>=32)&&{providerId:t.providerId},...typeof t.modelId==`string`&&t.modelId.length>0&&t.modelId.length<=128&&[...t.modelId].every(e=>e.charCodeAt(0)>=32)&&{modelId:t.modelId},...(t.usageProvenance===`complete`||t.usageProvenance===`partial`||t.usageProvenance===`absent`)&&{usageProvenance:t.usageProvenance},...t.usageProvenance===`complete`&&typeof t.promptTokens==`number`&&Number.isSafeInteger(t.promptTokens)&&t.promptTokens>=0&&typeof t.completionTokens==`number`&&Number.isSafeInteger(t.completionTokens)&&t.completionTokens>=0&&typeof t.totalTokens==`number`&&Number.isSafeInteger(t.totalTokens)&&t.totalTokens===t.promptTokens+t.completionTokens&&{promptTokens:t.promptTokens,completionTokens:t.completionTokens,totalTokens:t.totalTokens},...t.disposition===`invoked`&&typeof t.providerRequestId==`string`&&{providerRequestId:t.providerRequestId}})}t===`assistant_message_committed`&&(e.contextTracker.updateFromHistory(e.agent.getHistory()),e.onContextUpdate?.(e.contextTracker.getContextState()))},...i&&{onTextDelta:i},...e.onThinkingDelta&&{onThinkingDelta:e.onThinkingDelta}}}async function qt(e,t){let n=await e.agent.resume({...t,...Kt(e,t.traceContext)});return e.contextTracker.updateFromHistory(e.agent.getHistory()),e.onContextUpdate?.(e.contextTracker.getContextState()),n}function V(e,t){let n=t.canonicalizePath(t.cwd);return{append:async r=>{if((r.kind===`model-request`||r.kind===`model-cache-hit`)&&r.checkpoint){let i=structuredClone(r);i.checkpoint.owner={kind:`agent-session`,version:1,state:{sessionId:t.sessionId,cwd:n,peerTurn:t.peerTurn,executionId:r.executionId}},await e.append(i)}else await e.append(r)}}}function Jt(e,t,n,r,i){let a,o=i(n);return{read:async s=>{let c=structuredClone(await e.read(s)),l;for(let e of c){if(e.kind!==`model-request`&&e.kind!==`model-cache-hit`)continue;let n=e.checkpoint?.owner,r=n?.state;if(!n||n.kind!==`agent-session`||n.version!==1||!r||r.sessionId!==t||r.cwd!==o||r.executionId!==s||typeof r.peerTurn!=`boolean`||l!==void 0&&l!==r.peerTurn||r.peerTurn&&e.checkpoint?.continuation?.options.withholdHostedTools!==!0)throw new x(`EXECUTION_RECOVERY_INVALID`,`Session continuation owner or scope is incompatible`);l=r.peerTurn}if(l===void 0)throw new x(`EXECUTION_RECOVERY_INVALID`,`No Session owner checkpoint exists`);return a=V(e,{sessionId:t,cwd:n,peerTurn:l,canonicalizePath:i}),r(l),c},append:async e=>{if(!a)throw new x(`EXECUTION_RECOVERY_INVALID`,`Session owner has not been restored`);await a.append(e)}}}function Yt(e){return{...e?.executionJournal!==void 0&&{executionJournal:e.executionJournal},...e?.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:e.ephemeralSystemContext},...e?.driverId!==void 0&&{driverId:e.driverId},...e?.turnSource!==void 0&&{turnSource:e.turnSource},...e?.toolChoice!==void 0&&{toolChoice:e.toolChoice},...e?.traceContext!==void 0&&{traceContext:e.traceContext},...e?.peerTurn===!0&&{withholdHostedTools:!0}}}const Xt=w(`SessionRun`);async function Zt(e,t,n,r,i){let a=i?.traceContext,o=a?Fe(`hooks`,a,a.parentSpanId):void 0;n.log(`user`,{content:e});let s=await O(n.hooks,`UserPromptSubmit`,{session_id:n.sessionId,cwd:n.cwd,hook_event_name:`UserPromptSubmit`,user_message:t??e,prompt:t??e,...n.permissionMode!==void 0&&{permission_mode:n.permissionMode},...n.transcriptPath!==void 0&&{transcript_path:n.transcriptPath},env:{CLAUDE_PROJECT_DIR:n.cwd,CLAUDE_SESSION_ID:n.sessionId}},n.hookTypeExecutors,o),c=[n.sessionStartStdout,s.stdout].filter(Boolean).join(`
7
7
  `),l=c?`<system-reminder>\n${c}\n</system-reminder>\n${e}`:e,u=de(l),d=i?.ephemeralSystemContext,f=[u,...d?.trim()?[le(d)]:[]];n.contextTracker.updateFromHistory(n.agent.getHistory()),n.contextTracker.shouldAutoCompact([...n.agent.getHistory(),...f])&&(i?.executionJournal?await n.compact(r,o,i.executionJournal):await(o?n.compact(r,o):n.compact(r))),n.clearSessionStartStdout();let p=n.agent.getHistory(),m=JSON.stringify(p),h=_e(n.aiProvider);n.log(`pre_run`,{historyLength:p.length,historyChars:m.length,historyEstTokens:Math.ceil(m.length/v),input:l,history:p,model:n.model,provider:n.aiProvider.name,maxTokens:n.contextTracker.getContextState().maxTokens,nativeWebSearchSupported:h.nativeWebTools.webSearch.supported,nativeWebSearchEnabled:h.nativeWebTools.webSearch.enabled,nativeWebFetchSupported:h.nativeWebTools.webFetch.supported,nativeWebFetchEnabled:h.nativeWebTools.webFetch.enabled}),n.contextTracker.updateFromHistory([...p,...f]),n.onContextUpdate?.(n.contextTracker.getContextState());let g;try{if(g=await n.agent.run(l,{signal:r,maxExecutionRounds:n.maxTurns??0,...Yt(i),...Kt(n,a)}),r.aborted)throw new DOMException(`Aborted`,`AbortError`)}catch(e){if(e instanceof S)throw e;try{n.log(`error`,{message:e instanceof Error?e.message:String(e),stack:e instanceof Error?e.stack??``:``,historyLength:n.agent.getHistory().length})}catch{}throw O(n.hooks,`StopFailure`,{session_id:n.sessionId,cwd:n.cwd,hook_event_name:`StopFailure`,reason:e instanceof Error?e.message:String(e),stop_hook_active:!1,...n.permissionMode!==void 0&&{permission_mode:n.permissionMode},...n.transcriptPath!==void 0&&{transcript_path:n.transcriptPath},env:{CLAUDE_PROJECT_DIR:n.cwd,CLAUDE_SESSION_ID:n.sessionId}},n.hookTypeExecutors,o).catch(e=>Xt.warn(`hook failed`,{error:e})),e}let _=n.agent.getHistory(),y=_.map(e=>{let t=`toolCalls`in e&&Array.isArray(e.toolCalls)&&e.toolCalls.length>0,n=t?e.toolCalls.map(e=>e.function.name):[];return{role:e.role,contentLength:typeof e.content==`string`?e.content.length:0,hasToolCalls:t,toolCallNames:n,...e.metadata?{metadata:e.metadata}:{}}});n.log(`assistant`,{content:g,historyLength:_.length,estimatedChars:JSON.stringify(_).length,history:_,historyStructure:y}),n.contextTracker.updateFromHistory(_);let b=n.contextTracker.getContextState();return n.onContextUpdate?.(b),n.log(`context`,{maxTokens:b.maxTokens,usedTokens:b.usedTokens,usedPercentage:b.usedPercentage,remainingPercentage:b.remainingPercentage}),O(n.hooks,`Stop`,{session_id:n.sessionId,cwd:n.cwd,hook_event_name:`Stop`,response:g.substring(0,500),last_assistant_message:g,stop_hook_active:!1,...n.permissionMode!==void 0&&{permission_mode:n.permissionMode},...n.transcriptPath!==void 0&&{transcript_path:n.transcriptPath},env:{CLAUDE_PROJECT_DIR:n.cwd,CLAUDE_SESSION_ID:n.sessionId}},n.hookTypeExecutors,o).catch(e=>Xt.warn(`hook failed`,{error:e})),g}function Qt(e){let t=e.requests[0]?.executionId;return t?{executionId:t,requests:structuredClone(e.requests)}:void 0}function $t(e){let t=e.findLastIndex(e=>e.role===`assistant`),n=e[t];if(n?.role!==`assistant`)return;let r=new Set(e.slice(t+1).flatMap(e=>e.role===`tool`?[e.toolCallId]:[]));return{assistant:n,open:(n.toolCalls??[]).filter(e=>!r.has(e.id)),ending:e.slice(t+1).every(e=>e.role===`tool`)}}function H(e,t,n){let r=$t(e),i=r?.assistant.metadata?.executionId;if(!r?.ending||!r.open.length||typeof i!=`string`)return;let a=new Set(r.open.map(e=>e.id)),o=t?.executionId===i?t.requests.filter(e=>a.has(e.toolCallId)&&!n.has(e.actionId)):[];return{executionId:i,requests:structuredClone(o)}}function en(e,t,n){return{read:t=>e.read(t),append:r=>(r.kind===`tool-effect-start`&&(t.add(r.actionId),n?.()),e.append(r))}}function tn(e,t,n){let r=$t(e);if(!r||r.assistant.metadata?.executionId!==t.executionId)return[];let i=new Set((n?t.requests:[]).map(e=>e.toolCallId));return r.open.map(e=>{let t=i.has(e.id)?`Not run: the execution was abandoned while this call awaited a response.`:`Execution abandoned before this call recorded a result; its outcome is unknown.`;return ue(`Error: ${t}`,{toolCallId:e.id,name:e.function.name,metadata:{success:!1,error:t,toolName:e.function.name}})})}async function nn(e,t){if(!t||typeof t.append!=`function`||typeof t.read!=`function`)throw new x(`EXECUTION_RECOVERY_INVALID`,`Recoverable Session execution requires a readable journal`);try{return{status:`completed`,response:await e()}}catch(e){if(e instanceof S)return{status:`waiting`,requests:structuredClone(e.requests)};throw e}}var rn=class{agent;claim;sessionId;ask;execution=null;constructor(e,t,n,r){this.agent=e,this.claim=t,this.sessionId=n,this.ask=r}async invoke(e,t,n){let r=this.claim.claim(),i=U(r,n?.signal);try{return r.signal.throwIfAborted(),this.execution=this.agent.invokeRuntimeTool(e,t,{toolName:e,parameters:t,executionId:n?.executionId??D(),sessionId:this.sessionId,signal:r.signal,permissionInteraction:n?.permissionInteraction??`deny`,...n?.permissionInteraction===`interactive`&&this.ask!==void 0?{ask:this.askUnder(r.signal)}:{}}),await this.execution}finally{this.execution=null,i(),this.claim.release(r)}}askUnder(e){let t=this.ask;if(t===void 0)throw Error(`No ask port`);return(n,r)=>t(n,{signal:r?.signal??e})}async drain(){await this.execution}};function U(e,t){let n=()=>e.abort(t?.reason);return t?.aborted?n():t?.addEventListener(`abort`,n,{once:!0}),()=>t?.removeEventListener(`abort`,n)}var an=class extends Ue{agent;eventService=new ee;permissionEnforcer;contextTracker;permissionMode;activePresetId;parallelSubagentsEnabled;sessionId;aiProvider;toolSchemas;model;systemMessage;messageCount=0;terminal;sessionStore;checkpointHistoryCallback;hooks;hookTypeExecutors;canonicalizePath;onTextDeltaCallback;onThinkingDeltaCallback;onContextUpdateCallback;onToolExecutionCallback;onCompactCallback;onCompactEventCallback;sessionLogger;maxTurns;compactionOrchestrator;runtimeTools;wrapAddedTools;pendingTools=[];toolChange=Promise.resolve();shuttingDown=!1;recoveryState={kind:`ready`};checkpointing=!1;get pendingExecution(){return this.recoveryState.kind===`ready`?void 0:this.recoveryState.pending}setPending(e,t=!1){this.recoveryState.kind!==`save-required`&&(this.recoveryState=e?{kind:`pending`,pending:e,liveWaits:t}:{kind:`ready`})}shutdownPromise=null;sessionStartStdout=``;transcriptPath;constructor(e){super(e.cwd);let{tools:t,provider:n,systemMessage:r}=e;this.terminal=e.terminal,this.sessionStore=e.sessionStore,this.checkpointHistoryCallback=e.checkpointHistory,this.systemMessage=r,this.toolSchemas=t.map(e=>e.schema),this.wrapAddedTools=e.wrapAddedTools,this.sessionLogger=e.sessionLogger,this.hooks=e.hooks,this.hookTypeExecutors=A(e.hookTypeExecutors,`Session`),this.canonicalizePath=e.canonicalizePath??(e=>e),this.onTextDeltaCallback=e.onTextDelta,this.onThinkingDeltaCallback=e.onThinkingDelta,this.onContextUpdateCallback=e.onContextUpdate,this.onToolExecutionCallback=e.onToolExecution,this.onCompactCallback=e.onCompact,this.onCompactEventCallback=e.onCompactEvent,this.maxTurns=e.maxTurns,this.model=e.model??`claude-sonnet-4-5`,this.sessionId=e.sessionId??s(),this.permissionMode=e.permissionMode??(e.defaultTrustLevel?ie[e.defaultTrustLevel]:void 0)??`default`,this.activePresetId=e.activePresetId??`default`,this.parallelSubagentsEnabled=e.enableParallelSubagents??!0,this.transcriptPath=e.transcriptPath,this.log(`session_init`,{cwd:this.cwd,systemPromptLength:r.length,systemPrompt:r,toolSchemas:this.toolSchemas,model:this.model,provider:n.name}),this.aiProvider=n,Pt(n,e,(e,t)=>this.log(e,t)),this.permissionEnforcer=Ct(e,this.sessionId,this.cwd,()=>this.permissionMode,this.transcriptPath),this.requireClassifierFor(this.permissionMode),this.addPermissionModeGuard(e=>this.requireClassifierFor(e));let{contextTracker:i,compactionOrchestrator:a}=wt(e,this.model,this.sessionId,this.cwd);this.contextTracker=i,this.compactionOrchestrator=a,this.agent=Tt(e,this.permissionEnforcer,t,n,this.model,r,this.eventService),this.runtimeTools=new rn(this.agent,this.turnClaim,this.sessionId,e.ask),Ft(this.sessionId,this.cwd,this.hooks,this.hookTypeExecutors,e=>void(this.sessionStartStdout=e),this.permissionMode,this.transcriptPath)}async run(e,t,n){return this.runTurn(e,t,n,!1)}runRecoverable(e,t,n){return nn(()=>this.runTurn(e,n,t,!0),t.executionJournal)}async runTurn(e,t,n,r){let i=n?{...n}:void 0;if(this.shuttingDown)throw Error(`[LIFECYCLE] Session is shutting down`);this.assertInputAllowed();let a=this.turnClaim.claim(),o=U(a,i?.signal),{signal:s}=a;this.permissionEnforcer.beginTurn(i?.peerTurn===!0,r);try{s.throwIfAborted(),await this.serializeToolChange(()=>this.applyPendingTools());let n=i?.executionJournal?{...i,executionJournal:V(i.executionJournal,{sessionId:this.sessionId,cwd:this.cwd,peerTurn:i.peerTurn===!0,canonicalizePath:this.canonicalizePath})}:i,r=await Zt(e,t,this.buildRunContext(i?.executionJournal!==void 0),s,n);return this.setPending(void 0),this.commitConversation(),this.messageCount+=1,r}catch(e){throw e instanceof S?(this.setPending(Qt(e),!0),s.throwIfAborted()):i?.executionJournal&&this.setPending(H(this.agent.getHistory(),void 0,new Set)),this.saveAfterFailure(e),e}finally{this.permissionEnforcer.endTurn(),o(),this.turnClaim.release(a)}}async resume(e){return this.resumeTurn(e,!1)}resumeRecoverable(e){return nn(()=>this.resumeTurn(e,!0),e.journal)}async resumeTurn(e,t){let n={...e,toolResponses:structuredClone(e.toolResponses)};if(this.shuttingDown)throw Error(`[LIFECYCLE] Session is shutting down`);if(this.assertCheckpointSettled(),this.pendingExecution&&this.pendingExecution.executionId!==n.executionId)throw new x(`EXECUTION_RECOVERY_CONFLICT`,`A different Session execution is pending`);let r=this.turnClaim.claim(),i=U(r,n.signal),a=new Set;try{r.signal.throwIfAborted(),await this.serializeToolChange(()=>this.applyPendingTools());let e=Jt(en(n.journal,a,()=>{this.recoveryState.kind===`pending`&&(this.recoveryState.liveWaits=!1)}),this.sessionId,this.cwd,e=>this.permissionEnforcer.beginTurn(e,t),this.canonicalizePath),i=await qt(this.buildRunContext(!0),{...n,journal:e,signal:r.signal});return this.setPending(void 0),this.commitConversation(n.executionId),i}catch(e){throw e instanceof S?(this.setPending(Qt(e),!0),r.signal.throwIfAborted()):this.setPending(H(this.agent.getHistory(),this.pendingExecution,a)),this.saveAfterFailure(e),e}finally{this.permissionEnforcer.endTurn(),i(),this.turnClaim.release(r)}}getPendingExecution(){return structuredClone(this.pendingExecution)}abandonPendingExecution(e){if(this.shuttingDown)throw Error(`[LIFECYCLE] Session is shutting down`);if(this.recoveryState.kind===`save-required`){if(this.recoveryState.executionId!==e||this.pendingExecution)throw new x(`EXECUTION_RECOVERY_CONFLICT`,`Checkpoint the unresolved Session transition first`);this.checkpoint();return}let t=this.pendingExecution;if(!t)return;if(t.executionId!==e)throw new x(`EXECUTION_RECOVERY_CONFLICT`,`A different Session execution is pending`);let n=this.turnClaim.claim();try{let n=this.recoveryState.kind===`pending`&&this.recoveryState.liveWaits;for(let e of tn(this.agent.getHistory(),t,n))this.agent.injectRawMessage(e);this.setPending(void 0),this.commitConversation(e)}finally{this.turnClaim.release(n)}}assertInputAllowed(){if(this.shuttingDown)throw Error(`[LIFECYCLE] Session is shutting down`);if(this.assertCheckpointSettled(),this.pendingExecution)throw new x(`EXECUTION_RECOVERY_REQUIRED`,`Resume or abandon the pending Session execution before submitting new input`)}assertCheckpointSettled(){if(this.checkpointing||this.recoveryState.kind===`save-required`)throw new x(`EXECUTION_RECOVERY_REQUIRED`,`Call Session.checkpoint() to save the unresolved conversation transition`)}getConversationSnapshot(){return structuredClone({id:this.sessionId,cwd:this.canonicalizePath(this.cwd),messages:this.agent.getHistory(),...this.pendingExecution?{pendingExecution:this.pendingExecution}:{}})}restoreConversation(e){if(this.assertInputAllowed(),this.turnClaim.isRunning()||this.agent.getHistory().some(e=>e.role!==`system`))throw Error(`Conversation restore requires a pristine idle Session`);if(e.id!==this.sessionId||this.canonicalizePath(e.cwd)!==this.canonicalizePath(this.cwd))throw new x(`EXECUTION_RECOVERY_CONFLICT`,`Conversation owner or workspace differs`);let t=_({id:e.id,cwd:e.cwd,messages:e.messages,...e.pendingExecution===void 0?{}:{pendingExecution:e.pendingExecution},createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()});if(t.status!==`valid`)throw new x(`EXECUTION_RECOVERY_INVALID`,`Invalid conversation recovery snapshot`);let n=structuredClone(t.record);this.agent.clearHistory();for(let e of n.messages)this.agent.injectRawMessage(e);this.setPending(n.pendingExecution),this.syncContextFromHistory()}checkpoint(){if(this.turnClaim.isRunning()||this.checkpointing)throw Error(`Cannot checkpoint during a Session transition`);if(!this.checkpointHistoryCallback&&!this.sessionStore)throw Error(`Session checkpoint requires a persistence sink`);this.commitConversation(this.recoveryState.kind===`save-required`?this.recoveryState.executionId:void 0)}commitConversation(e){if(!this.checkpointHistoryCallback&&!this.sessionStore)return;if(this.checkpointing)throw Error(`Reentrant Session checkpoint`);let t=this.pendingExecution,n=this.recoveryState.kind!==`ready`&&this.recoveryState.liveWaits;this.checkpointing=!0;try{this.checkpointHistoryCallback?ze(this.checkpointHistoryCallback()):this.persistSessionInternal(!0),this.recoveryState=t?{kind:`pending`,pending:t,liveWaits:n}:{kind:`ready`}}catch(r){throw this.recoveryState={kind:`save-required`,pending:t,liveWaits:n,executionId:e??t?.executionId},r}finally{this.checkpointing=!1}}saveAfterFailure(e){if(this.recoveryState.kind!==`save-required`)try{this.commitConversation()}catch(t){if(e instanceof S)throw t;try{this.log(`error`,{message:`Session checkpoint failed while preserving the execution error: ${t instanceof Error?t.message:String(t)}`,stack:t instanceof Error?t.stack??``:``,historyLength:this.agent.getHistory().length})}catch{}}}addTools(e){return this.assertInputAllowed(),this.shuttingDown?Promise.reject(Error(`[LIFECYCLE] Session is shutting down`)):this.serializeToolChange(async()=>{let t=new Set([...this.toolSchemas.map(e=>e.name),...this.pendingTools.map(e=>e.schema.name)]),n=[];for(let r of e)t.has(r.schema.name)||(t.add(r.schema.name),n.push(r));return n.length===0?[]:(this.pendingTools.push(...n),this.turnClaim.isRunning()||await this.applyPendingTools(),n.map(e=>e.schema.name))})}serializeToolChange(e){let t=this.toolChange.then(e);return this.toolChange=t.then(()=>void 0,()=>void 0),t}async applyPendingTools(){if(this.pendingTools.length===0)return;let e=this.pendingTools.splice(0);await this.agent.ensureReady();let t=this.permissionEnforcer.wrapTools(this.wrapAddedTools?.(e)??e);await this.agent.updateTools([...this.agent.getConfig().tools??[],...t]),this.toolSchemas.push(...t.map(e=>e.schema))}async listRuntimeTools(){if(this.shuttingDown)throw Error(`[LIFECYCLE] Session is shutting down`);return this.agent.listRuntimeTools()}async invokeRuntimeTool(e,t,n){if(this.shuttingDown)throw Error(`[LIFECYCLE] Session is shutting down`);return this.assertInputAllowed(),this.runtimeTools.invoke(e,t,n)}getEventService(){return this.eventService}log(e,t){this.sessionLogger?.log(this.sessionId,e,t)}persistSessionInternal(e=!1){if(!this.sessionStore)return;let t=Mt({sessionId:this.sessionId,cwd:this.cwd,systemPrompt:this.systemMessage,toolSchemas:this.toolSchemas,sessionStore:this.sessionStore,conversation:this.getConversationSnapshot(),getFullHistory:()=>this.getFullHistory()});if(e&&t.status!==`valid`)throw Error(`Session history could not be durably checkpointed: ${t.status}`)}shutdown(e={}){if(this.shutdownPromise)return this.shutdownPromise;this.shuttingDown=!0;let t=e.reason??`other`,n=async(e,t)=>{try{await t()}catch(t){this.log(`session_shutdown_step_error`,{step:e,error:t instanceof Error?t.message:String(t)})}};return this.shutdownPromise=(async()=>{await n(`abort`,()=>this.abort()),await n(`drain-direct-tool`,()=>this.runtimeTools.drain()),await n(`drain-turn`,()=>this.turnClaim.drained),this.log(`session_shutdown`,{reason:t}),await n(`persist`,()=>this.persistSessionInternal()),await n(`session-end-hook`,()=>It(this.sessionId,this.cwd,t,this.hooks,this.hookTypeExecutors,this.permissionMode,this.transcriptPath)),await n(`destroy-agent`,async()=>{await this.agent.destroy()})})(),this.shutdownPromise}swapProvider(e,t,n){this.assertInputAllowed(),this.agent.swapDefaultProvider(e,t,n),`onServerToolUse`in e&&(e.onServerToolUse=(e,t)=>this.log(`server_tool`,{tool:e,...t})),this.aiProvider=e,this.setActiveModel(t)}async compact(e,t=`manual`,n,r){this.assertInputAllowed();let i=this.turnClaim.claim(),a=U(i,n);try{await this.compactWith(e,t,i.signal,void 0,r)}finally{a(),this.turnClaim.release(i)}}async compactWith(e,t,n,r,i){let a={systemMessage:this.systemMessage,compactionOrchestrator:this.compactionOrchestrator,onCompactCallback:this.onCompactCallback,onCompactEventCallback:this.onCompactEventCallback,trigger:t,...r?{hookTraceEnv:r}:{},...i?{executionJournal:i}:{}};await jt(e,At(this.buildRunContext(),a),n)}buildRunContext(e=!1){return{sessionId:this.sessionId,cwd:this.cwd,model:this.model,effort:this.getModelEffort(),agent:this.agent,aiProvider:this.aiProvider,contextTracker:this.contextTracker,hooks:this.hooks,hookTypeExecutors:this.hookTypeExecutors,sessionStartStdout:this.sessionStartStdout,log:(e,t)=>this.log(e,t),compact:(e,t,n)=>this.compactWith(void 0,`auto`,e,t,n),persistSession:()=>this.persistSessionInternal(),checkpointHistory:this.checkpointHistoryCallback||this.sessionStore?()=>{e&&this.setPending(H(this.agent.getHistory(),this.pendingExecution,new Set)),this.commitConversation()}:void 0,getSessionStore:()=>!!this.sessionStore,clearSessionStartStdout:()=>void(this.sessionStartStdout=``),permissionMode:this.permissionMode,transcriptPath:this.transcriptPath,maxTurns:this.maxTurns,onTextDelta:this.onTextDeltaCallback,onThinkingDelta:this.onThinkingDeltaCallback,onContextUpdate:this.onContextUpdateCallback,onToolExecution:this.onToolExecutionCallback,emitProviderCallCompleted:e=>this.eventService.emit(C.COMPLETED,{timestamp:new Date,...e},{ownerType:`session`,ownerId:this.sessionId,ownerPath:[{type:`session`,id:this.sessionId}]}),emitProviderFallback:e=>this.eventService.emit(te.SWITCHED,{timestamp:new Date,fromProvider:e.from.provider,fromModel:e.from.model,toProvider:e.to.provider,toModel:e.to.model,reason:e.reason},{ownerType:`session`,ownerId:this.sessionId,ownerPath:[{type:`session`,id:this.sessionId}]}),knownToolNames:this.toolSchemas.map(e=>e.name)}}};function on(e){try{return JSON.parse(e)}catch{throw Error(`Invalid session artifact: the bytes are not JSON.`)}}function sn(e,t={}){let n={schemaVersion:2,record:t.redact?t.redact(e):e};return JSON.stringify(n,null,2)}function cn(e){let t=n(on(e));if(t.status===`unsupported`)throw Error(`Unsupported session artifact schema version ${t.schemaVersion??`(absent or not a number)`} (this build reads 2).`);if(t.status===`corrupt`){let e=t.issues.slice(0,5),n=e.map(e=>`${e.path===``?`(root)`:e.path}: ${e.message}`).join(`; `),r=t.issues.length>e.length?` (+${t.issues.length-e.length} more)`:``;throw Error(`Invalid session artifact: ${n}${r}`)}return t.record}const ln=/^(api[-_]?key|authorization|auth[-_]?token|access[-_]?token|refresh[-_]?token|secret|password|x[-_]?api[-_]?key)$/i;function W(e){return ln.test(e)}function G(e,t,n){if(e!==void 0&&W(e))return n;if(Array.isArray(t))return t.map(e=>G(void 0,e,n));if(typeof t==`object`&&t&&!(t instanceof Date)){let e=t,r={};for(let[t,i]of Object.entries(e))r[t]=G(t,i,n);return r}return t}function un(e,t=`[REDACTED]`){return G(void 0,e,t)}function dn(e,t,n,r){let i={};for(let[a,o]of Object.entries(t))i[a]=K(e,a,o,n,r);return i}function K(e,t,n,r,i){if(W(t))return r.redactedValue;if(n==null||typeof n==`string`||typeof n==`number`)return q(e,n,r,i);if(typeof n==`boolean`)return n;if(n instanceof Date)return n.toISOString();if(Array.isArray(n))return q(e,n.map(n=>K(e,t,n,r,i)),r,i);if(typeof n==`object`){let t=n,a={};for(let[n,o]of Object.entries(t))a[n]=K(e,n,o,r,i);return q(e,a,r,i)}return String(n)}function q(e,t,n,r){let i=JSON.stringify(t);if(i===void 0||Ie(i)<=n.externalPayloadThresholdBytes||r===void 0)return t;let a=Ne(i);return r.writeJson(e,a,i)}const fn=w(`FileSessionLogger`),pn=new Set([`text_delta`]),J=new Set,mn=new WeakSet;function hn(){for(let e of J)e.flush()}function gn(e,t){J.add(e),!(t===void 0||mn.has(t))&&(mn.add(t),t(hn))}var _n=class{sink;options;registerExitFlush;pending=new Map;pendingBytes=0;constructor(e,t={}){this.sink=e,this.options={externalPayloadThresholdBytes:t.externalPayloadThresholdBytes??32768,redactedValue:t.redactedValue??`[REDACTED]`},this.registerExitFlush=t.registerExitFlush}log(e,t,n){if(o(e))try{let r=dn(e,n,this.options,this.sink.externalPayloadSink),i=JSON.stringify({...r,schemaVersion:1,timestamp:new Date().toISOString(),sessionId:e,event:t})+`
8
8
  `;if(pn.has(t)){this.buffer(e,i);return}this.flush(),this.write(e,i)}catch(n){this.report(e,t,n)}}flush(){if(this.pending.size===0){J.delete(this);return}let e=[...this.pending.entries()];this.pending.clear(),this.pendingBytes=0,J.delete(this);for(let[t,n]of e)try{this.write(t,n.join(``))}catch(e){this.report(t,`flush`,e)}}buffer(e,t){gn(this,this.registerExitFlush);let n=this.pending.get(e)??[];n.push(t),this.pending.set(e,n),this.pendingBytes+=t.length,this.pendingBytes>=65536&&this.flush()}write(e,t){this.sink.append(e,t)}report(e,t,n){fn.warn(`session log write failed`,{sessionId:e,event:t,error:n instanceof Error?n.message:String(n)})}},vn=class{log(){}};const yn=/^[0-9a-f]{64}$/i;function bn(e){if(!xn(e))throw new p(`INVALID_REFERENCE`,`External payload reference has an invalid shape.`);return{kind:`external-payload`,encoding:`json`,sha256:String(e.sha256).toLowerCase(),byteLength:Number(e.byteLength),relativePath:String(e.relativePath)}}function xn(e){let t=Object.keys(e).sort(),n=[`byteLength`,`encoding`,`kind`,`relativePath`,`sha256`];return t.length===n.length&&t.every((e,t)=>e===n[t])&&e.kind===`external-payload`&&e.encoding===`json`&&typeof e.sha256==`string`&&yn.test(e.sha256)&&typeof e.byteLength==`number`&&Number.isSafeInteger(e.byteLength)&&e.byteLength>=0&&typeof e.relativePath==`string`&&e.relativePath.trim().length>0}const Sn=new TextDecoder(`utf-8`,{ignoreBOM:!0});function Cn(e,t){return Y(e,wn(t),0)}function wn(e){let t=Tn(`maxDepth`,e.maxDepth??32),n=Tn(`maxTotalBytes`,e.maxTotalBytes??67108864);return{source:e.source,maxDepth:t,maxTotalBytes:n,totalBytes:0,activePayloadPaths:new Set,activeObjects:new WeakSet}}function Tn(e,t){if(!Number.isFinite(t)||!Number.isSafeInteger(t)||t<0)throw new p(`INVALID_LIMIT`,`${e} must be a finite, non-negative safe integer.`,{actual:String(t)});return t}function Y(e,t,n){if(e===null||typeof e==`string`||typeof e==`boolean`||typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`number`)throw X(`Non-finite numbers are not valid session-log JSON values.`);if(typeof e!=`object`)throw X(`Unsupported session-log JSON value type: ${typeof e}.`);if(t.activeObjects.has(e))throw new p(`CIRCULAR_REFERENCE`,`Circular in-memory value encountered while resolving external payloads.`,{depth:n});if(On(e))return En(e,t,n);if(Array.isArray(e)){t.activeObjects.add(e);try{return e.map(e=>Y(e,t,n))}finally{t.activeObjects.delete(e)}}if(!kn(e))throw X(`Session-log payload objects must be plain JSON records.`);t.activeObjects.add(e);try{return Object.fromEntries(Object.entries(e).map(([e,r])=>[e,Y(r,t,n)]))}finally{t.activeObjects.delete(e)}}function En(e,t,n){let r=bn(e);if(n>=t.maxDepth)throw new p(`MAX_DEPTH_EXCEEDED`,`External-payload reference depth exceeds the configured maximum of ${t.maxDepth}.`,{relativePath:r.relativePath,depth:n});if(t.source===void 0)throw new p(`UNRESOLVED_REFERENCE`,`An external session-log payload requires an explicit payload source.`,{relativePath:r.relativePath,depth:n});if(t.activePayloadPaths.has(r.relativePath))throw new p(`CIRCULAR_REFERENCE`,`External payload ${r.relativePath} recursively references an active payload.`,{relativePath:r.relativePath,depth:n});let i=Dn(r,t);t.activePayloadPaths.add(r.relativePath);try{return Y(i,t,n+1)}finally{t.activePayloadPaths.delete(r.relativePath)}}function Dn(e,t){let n=t.maxTotalBytes-t.totalBytes,r=t.source?.readBytes(e.relativePath,n);if(r===void 0)throw new p(`PAYLOAD_NOT_FOUND`,`External payload was not found: ${e.relativePath}.`,{relativePath:e.relativePath});let i=t.totalBytes+r.byteLength;if(!Number.isSafeInteger(i)||i>t.maxTotalBytes)throw new p(`MAX_TOTAL_BYTES_EXCEEDED`,`External-payload bytes exceed the configured maximum of ${t.maxTotalBytes}.`,{expected:t.maxTotalBytes,actual:i});if(t.totalBytes=i,r.byteLength!==e.byteLength)throw new p(`BYTE_LENGTH_MISMATCH`,`External payload byte length does not match its reference: ${e.relativePath}.`,{relativePath:e.relativePath,expected:e.byteLength,actual:r.byteLength});let a=Ne(r);if(a!==e.sha256)throw new p(`SHA256_MISMATCH`,`External payload sha256 does not match its reference: ${e.relativePath}.`,{relativePath:e.relativePath,expected:e.sha256,actual:a});try{return JSON.parse(Sn.decode(r))}catch(t){throw new p(`INVALID_JSON`,`External payload is not valid JSON: ${e.relativePath}.`,{relativePath:e.relativePath},t)}}function X(e){return new p(`INVALID_JSON`,e)}function On(e){return!Array.isArray(e)&&`kind`in e&&e.kind===`external-payload`}function kn(e){let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function An(e){let t=[],n=jn(),r=Mn();return c(e).forEach((e,i)=>{Z(e,i,t),Pn(e,i,t),Nn(n,e,i),Fn(r,e,i)}),In(n,t),Ln(r,t),{ok:t.length===0,issues:t}}function jn(){return{requests:new Map,nativeRawPayloads:new Set,rawResponses:new Set,normalizedResponses:new Set}}function Mn(){return{requests:new Map,results:new Set}}function Nn(e,t,n){let r=Rn(t);r&&(t.event===`provider_request`&&e.requests.set(r.key,{executionId:r.executionId,round:r.round,index:n}),t.event===`provider_response_raw`&&e.rawResponses.add(r.key),t.event===`provider_native_raw_payload`&&(t.payloadKind===`response`||t.payloadKind===`stream_event`)&&e.nativeRawPayloads.add(r.key),t.event===`provider_response_normalized`&&!Q(t.response)&&e.normalizedResponses.add(r.key))}function Pn(e,t,n){Q(e.event===`history_mutation`?e.message:e.event===`provider_response_normalized`?e.response:void 0)&&n.push({code:`UNRESOLVED_REPLAY_PAYLOAD`,message:`Replay substrate ${e.event} contains an unresolved external payload.`,eventIndex:t,executionId:typeof e.executionId==`string`?e.executionId:void 0,round:typeof e.round==`number`?e.round:void 0})}function Fn(e,t,n){let r=zn(t);r&&(t.event===`tool_execution_request`&&e.requests.set(r.key,{executionId:r.executionId,toolCallId:r.toolCallId,index:n}),t.event===`tool_execution_result`&&e.results.add(r.key))}function In(e,t){for(let[n,r]of e.requests)e.nativeRawPayloads.has(n)||t.push({code:`PROVIDER_NATIVE_RAW_PAYLOAD_MISSING`,message:`Provider request ${n} has no provider-native raw response or stream payload event.`,eventIndex:r.index,executionId:r.executionId,round:r.round}),e.rawResponses.has(n)||t.push({code:`PROVIDER_RESPONSE_RAW_MISSING`,message:`Provider request ${n} has no raw response event.`,eventIndex:r.index,executionId:r.executionId,round:r.round}),e.normalizedResponses.has(n)||t.push({code:`PROVIDER_RESPONSE_NORMALIZED_MISSING`,message:`Provider request ${n} has no normalized response event.`,eventIndex:r.index,executionId:r.executionId,round:r.round})}function Ln(e,t){for(let[n,r]of e.requests)e.results.has(n)||t.push({code:`TOOL_RESULT_MISSING`,message:`Tool request ${n} has no terminal result event.`,eventIndex:r.index,executionId:r.executionId,toolCallId:r.toolCallId})}function Rn(e){if(typeof e.executionId!=`string`)return;let t=typeof e.round==`number`?e.round:Number(e.round);if(Number.isFinite(t))return{key:`${e.executionId}:${t}`,executionId:e.executionId,round:t}}function zn(e){if(typeof e.executionId!=`string`)return;let t=typeof e.toolCallId==`string`?e.toolCallId:typeof e.toolExecutionId==`string`?e.toolExecutionId:void 0;if(t)return{key:`${e.executionId}:${t}`,executionId:e.executionId,toolCallId:t}}function Z(e,t,n){if(Array.isArray(e)){e.forEach(e=>Z(e,t,n));return}if(Bn(e)){if(e.kind===`external-payload`){xn(e)||n.push({code:`PAYLOAD_REFERENCE_INVALID`,message:`External payload reference is missing required replay fields.`,eventIndex:t});return}Object.values(e).forEach(e=>Z(e,t,n))}}function Q(e){return Array.isArray(e)?e.some(e=>Q(e)):Bn(e)?e.kind===`external-payload`||Object.values(e).some(e=>Q(e)):!1}function Bn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Vn(e,t={}){let n=e.readText(),i=[];return n!==void 0&&n.split(`