@xenosystem/agent-sdk 0.9.34 → 0.9.35

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.
@@ -1940,7 +1940,7 @@ ${f||"(no new output)"}`,operation:y??void 0,evidence:y?.evidence}}finally{a&&c.
1940
1940
  `)}var kb=require("node:crypto"),ws=class{constructor(e=2e3){this.maxHistory=e}maxHistory;listeners=new Set;history=[];sequence=0;subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}nextSequence(){return this.sequence+=1,this.sequence}emit(e){let n={id:e.id??(0,kb.randomUUID)(),sequence:e.sequence??this.nextSequence(),timestamp:e.timestamp??new Date().toISOString(),...e};this.history.push(n),this.history.length>this.maxHistory&&this.history.splice(0,this.history.length-this.maxHistory);for(let r of this.listeners)Promise.resolve(r(n)).catch(()=>{})}snapshot(){return[...this.history]}};function bu(t,e=240){let n={};for(let[r,o]of Object.entries(t))typeof o=="string"?n[r]=o.length>e?`${o.slice(0,e)}...`:o:typeof o=="number"||typeof o=="boolean"||o===null?n[r]=o:Array.isArray(o)?n[r]=o.slice(0,8):typeof o=="object"?n[r]="[object]":n[r]=String(o);return n}var Ob=require("node:path");var no=require("node:path");var ar=require("node:path");var aI=new Set(["cat","type","more","head","tail","get-content","gc","test-path","ls","dir","get-childitem","gci"]),cI=new Set(["rm","del","erase","remove-item","ri","rmdir","mkdir","md","touch","set-content","add-content","out-file","new-item","move-item","mv","move","copy-item","cp","copy"]),lI=new Map([["-path","read"],["-literalpath","read"],["-filepath","write"],["-destination","write"],["-dest","write"],["-out-file","write"]]),yu=new Set([";","&&","||","|",`
1941
1941
  `]),uI=new Map([["<","read"],[">","write"],[">>","write"],["1>","write"],["1>>","write"],["2>","write"],["2>>","write"],["*>","write"]]);function dI(t){let e=[],n="",r=null,o=!1,i=()=>{n.length>0&&e.push(n),n=""},s=a=>n==="\\"||n.startsWith("\\\\")||/^[A-Za-z]:/.test(n)||n.length===0&&a==="\\";for(let a=0;a<t.length;a+=1){let c=t[a];if(o){n+=c,o=!1;continue}if(r){c===r?r=null:c==="`"&&r==='"'?o=!0:c==="\\"&&process.platform!=="win32"&&r==='"'?s(t[a+1])?n+=c:o=!0:n+=c;continue}if(c==="'"||c==='"'){r=c;continue}if(c==="\\"&&process.platform!=="win32"){s(t[a+1])?n+=c:o=!0;continue}if(/\s/.test(c)){i(),(c===`
1942
1942
  `||c==="\r")&&e.push(`
1943
- `);continue}let l=t.slice(a,a+2);if(["&&","||",">>"].includes(l)){i(),e.push(l),a+=1;continue}if([";","|","<",">"].includes(c)){i(),e.push(c);continue}n+=c}return i(),e}function mI(t){return(0,ar.basename)(t.replace(/\\/g,"/")).toLowerCase().replace(/\.(exe|cmd|bat|ps1|sh)$/,"")}function Ib(t){return(0,ar.isAbsolute)(t)||Ba(t)||t.startsWith("./")||t.startsWith("../")||t.startsWith(".\\")||t.startsWith("..\\")||/^[A-Za-z]:[\\/]/.test(t)}function Pb(t){return/\$\(|\$\{|\$env:|%[^%]+%|^~[/\\]/i.test(t)}function pI(t){let e=[],n=dI(t),r="",o=-1;for(let i=0;i<n.length;i+=1){let s=n[i];if(yu.has(s)){r="",o=-1;continue}let a=uI.get(s);if(a){let u=n[i+1];u&&!yu.has(u)&&(e.push({path:u,access:a,source:"redirect"}),i+=1);continue}if(!r){if(s==="&"||s===".")continue;r=mI(s),o=i,(Ib(s)||Pb(s))&&e.push({path:s,access:"read",source:"executable"});continue}let c=lI.get(s.toLowerCase());if(c){let u=n[i+1];u&&!yu.has(u)&&(e.push({path:u,access:c,source:"parameter"}),i+=1);continue}if(s.startsWith("-"))continue;let l=cI.has(r)?"write":aI.has(r)?"read":null;l&&i>o?e.push({path:s,access:l,source:"argument"}):Ib(s)&&e.push({path:s,access:"read",source:"argument"})}return e}function Ab(t,e){let n=pI(t),r=[...e.allowedDirectories,...e.temporaryDirectories??[]];for(let o of n){if(o.access==="read"&&!e.capabilities.fileRead)return{allowed:!1,reason:`Shell ${o.source} requires file-read capability: ${o.path}`};if(o.access==="write"&&!e.capabilities.fileWrite)return{allowed:!1,reason:`Shell ${o.source} requires file-write capability: ${o.path}`};if(Pb(o.path))return{allowed:!1,reason:`Shell path expression cannot be resolved safely by policy: ${o.path}`};let i=On(o.path);if(i.length>0)return{allowed:!1,reason:`Shell path denied: ${i[0].code}: ${i[0].message} (${o.path})`};if(r.length===0)return{allowed:!1,reason:"No directories are configured for shell filesystem access."};let s=(0,ar.resolve)(e.workingDirectory??process.cwd(),o.path);if((e.deniedDirectories?.length??0)>0&&vt(s,e.deniedDirectories))return{allowed:!1,reason:`Shell ${o.source} path is inside an explicitly denied directory: ${s}`};if(!vt(s,r))return{allowed:!1,reason:`Shell ${o.source} path is outside allowed directories: ${s}`}}return{allowed:!0,reason:"shell policy check passed"}}var wu=new Set(["Read","Glob","Grep","LS","NotebookRead","MemoryRead","ReadImage","ElfAnalyze","LspDefinition","LspDiagnostics","LspHover","LspReferences"]),xu=new Set(["Write","Edit","NotebookEdit","MemoryWrite"]),Rb=new Set(["Bash"]);function to(t,e){let n=e?.workingDirectory;return n&&!(0,no.isAbsolute)(t)?(0,no.resolve)(n,t):(0,no.resolve)(t)}function ro(t,e,n){switch(G(t)){case"Read":case"ElfAnalyze":case"Write":case"Edit":case"MemoryRead":case"MemoryWrite":return typeof e.file_path=="string"&&e.file_path.length>0?to(e.file_path,n):null;case"ReadImage":return typeof e.path=="string"&&e.path.length>0?to(e.path,n):null;case"LS":case"Glob":case"Grep":return typeof e.path=="string"&&e.path.length>0?to(e.path,n):null;case"NotebookRead":case"NotebookEdit":return typeof e.notebook_path=="string"&&e.notebook_path.length>0?to(e.notebook_path,n):null;case"LspDefinition":case"LspDiagnostics":case"LspHover":case"LspReferences":return typeof e.file_path=="string"&&e.file_path.length>0?to(e.file_path,n):null;default:return null}}function Cb(t,e,n){let r=G(t);if(!n)return{allowed:!0,reason:"no sandbox"};if(wu.has(r)&&!n.capabilities.fileRead)return{allowed:!1,reason:"File read access is not enabled for this agent. Ask the user to enable it in agent settings."};if(xu.has(r)&&!n.capabilities.fileWrite)return{allowed:!1,reason:"File write access is not enabled for this agent. Ask the user to enable it in agent settings."};if(Rb.has(r)&&!n.capabilities.terminal)return{allowed:!1,reason:"Terminal access is not enabled for this agent. Ask the user to enable it in agent settings."};if(Rb.has(r)&&typeof e.command=="string"){let c=Ab(e.command,n);if(!c.allowed)return c}let o=wu.has(r)||xu.has(r),i=[...n.allowedDirectories,...n.temporaryDirectories??[]],s=fI(r,e),a=s?On(s):[];if(s&&a.length>0)return{allowed:!1,reason:`Access denied: ${a[0].code}: ${a[0].message} (${s})`};if(o&&(n.deniedDirectories?.length??0)>0){let c=ro(r,e,n);if(c!==null&&vt(c,n.deniedDirectories))return{allowed:!1,reason:`Access denied: path ${c} is inside an explicitly denied directory.`}}if(o&&i.length>0){let c=ro(r,e,n);if(c!==null&&!vt(c,i)){let l=i.join(", ");return{allowed:!1,reason:`Access denied: path ${c} is outside the agent's allowed directories: [${l}]`}}}return o&&i.length===0?{allowed:!1,reason:"No directories are configured for this agent. Ask the user to grant folder access in agent settings."}:{allowed:!0,reason:"policy check passed"}}function fI(t,e){let n=G(t),r=n==="ReadImage"||n==="LS"||n==="Glob"||n==="Grep"?"path":n==="NotebookRead"||n==="NotebookEdit"?"notebook_path":wu.has(n)||xu.has(n)?"file_path":null,o=r?e[r]:null;return typeof o=="string"&&o.length>0?o:null}var xs=class{constructor(e){this.config=e}config;async execute(e){let n=Date.now(),{toolCall:r,traceId:o,iteration:i}=e,s=this.config.toolRegistry.projectPolicyInput(r.name,r.input),a="error"in s?s.error:hI(r.name,r.input),c="error"in s?{observabilityInput:{projection_error:!0},permissionInput:{}}:s,l={...r,input:c.observabilityInput},u=c.approvalKey?{...c.permissionInput,approval_key:c.approvalKey}:c.permissionInput,d=!e.skipToolExecutionReason&&!a,m=c.riskLevel??EI(r.name),p=this.config.operationManager??j,g=process.env.XENO_TOOL_OPERATION_RUNTIME!=="0",f=d&&g?p.register({turnId:o,generation:i,toolCallId:r.id,toolName:r.name,displayName:yI(r.name,r.input),ownerSessionId:this.config.ownerSessionId,presentation:r.input.run_in_background===!0?"background":"foreground",completionPolicy:gI(r.name,r.input),promotable:r.name==="Bash"&&r.input.run_in_background!==!0&&r.input.tty!==!0,deadlineAt:bI(r.name,r.input,this.config),renewableDeadlineMs:wI(r.name,r.input,this.config),expectedOutputs:TI(r.input.expected_outputs)??SI(r.name,u,this.config.sandbox),eventSink:this.config.eventSink}):null;f&&p.transition(f.operationId,"starting");let h=f?xI(e.signal):null;f&&h&&p.setDeadlineAbortHandler(f.operationId,()=>{h.controller.abort("OPERATION_DEADLINE_EXCEEDED")});let b=!1,y=()=>{b||(b=!0,this.config.onToolWaitStart?.())},x=()=>{b&&(b=!1,this.config.onToolWaitEnd?.())};await this.appendAuditEvent({trace_id:o,event_type:"tool_call",actor:"assistant",risk_level:m,tool_name:r.name,metadata:{iteration:i,input:bu(c.observabilityInput,200)}}),d&&(this.emit({type:"tool.started",turnId:o,toolName:r.name,inputPreview:bu(c.observabilityInput),iteration:i}),this.config.callbacks?.onToolStart?.(r.name,c.observabilityInput));let w;if(a)w=a;else if(e.skipToolExecutionReason)w={success:!1,output:"",error:e.skipToolExecutionReason};else try{w=await vI((async()=>{let S=await this.checkSandboxAndPermission(r.name,u,c.permissionPreview,o,i,r.id);if(Mb(h?.controller.signal),S.denial)return S.denial;let E=this.config.turnDiffTracker?.inferToolPaths(r.name,c.observabilityInput)??[];this.config.turnDiffTracker?.observeBefore(E),await this.config.callbacks?.onToolWillExecute?.(r.name,c.observabilityInput),Mb(h?.controller.signal),f&&p.transition(f.operationId,f.presentation==="background"?"running_background":"running_foreground");let _;try{_=await this.config.toolRegistry.execute(r.name,r.input,{signal:h?.controller.signal??e.signal,operationId:f?.operationId,authorization:S.receipt,reportProgress:f?T=>{T.activity==="waiting_for_input"?y():x(),p.reportProgress(f.operationId,T)}:void 0})}finally{x()}return this.config.turnDiffTracker?.observeAfter(E),_})(),h?.controller.signal)}catch(S){if(x(),!(S instanceof cr))throw S;let E=f?p.get(f.operationId):null,_=E?.state==="timed_out";f&&E&&!E.terminal&&p.finalize(f.operationId,"cancelled",{reason:"OPERATION_CANCELLED"}),w={success:!1,output:"",error:_?"Operation timed out: OPERATION_DEADLINE_EXCEEDED":"Operation cancelled: OPERATION_CANCELLED",retryable:_}}if(w||(w={success:!1,output:"",error:"Tool execution did not produce a result"}),f){let S=p.get(f.operationId),E=w.operation,_=E?.operationId===f.operationId;if(S&&!S.terminal&&!_){let I=await p.completeSynchronous(f.operationId,w.success,w.success?"tool_result":w.error??"tool_error");w.success&&I?.state==="failed"&&(w.success=!1,w.error=I.completionReason??"POSTCONDITION_FAILED",w.retryable=!0)}let T=p.get(f.operationId);T&&(!E||_)&&(w.operation=T,T.evidence?.length&&(w.evidence=T.evidence))}return await this.appendAuditEvent({trace_id:o,event_type:"tool_result",actor:"system",risk_level:m,tool_name:r.name,status:w.success?"ok":"error",reason:w.success?void 0:w.error,metadata:{output_preview:(w.output??"").slice(0,200),elapsed_ms:Date.now()-n}}),this.emit({type:"tool.completed",turnId:o,toolName:r.name,success:w.success,outputPreview:(w.output??"").slice(0,600),...w.error?{error:w.error}:{},...w.webContext?{webContext:w.webContext}:{},elapsedMs:Date.now()-n,iteration:i}),d&&this.config.callbacks?.onToolEnd?.(r.name,w),h?.disposeParent(),{toolCall:l,toolResult:w,executeTool:d}}async checkSandboxAndPermission(e,n,r,o,i,s){let a=Cb(e,n,this.config.sandbox),c=!1;if(this.emit({type:"tool.permission",turnId:o,toolName:e,allowed:a.allowed,reason:a.reason,layer:"policy",iteration:i}),!a.allowed){let u=ro(e,n,this.config.sandbox);if(u&&this.config.onPermissionRequest&&this.config.sandbox){let d=(0,Ob.dirname)(u),m=await this.config.onPermissionRequest({toolName:e,path:u,directory:d,reason:a.reason});if(m.granted)c=!0,this.config.sandbox.temporaryDirectories=[...this.config.sandbox.temporaryDirectories??[],m.allowedDirectory??d];else return{denial:{success:!1,output:"",error:`Permission denied: ${a.reason}`}}}else return{denial:{success:!1,output:"",error:`Permission denied: ${a.reason}`}}}let l=await this.config.permissionEngine.check(e,n,{traceId:o,requesterLabel:this.config.requesterLabel??"Agent",ephemeralInputPreview:r,onWaitStart:this.config.onToolWaitStart,onWaitEnd:this.config.onToolWaitEnd});return this.emit({type:"tool.permission",turnId:o,toolName:e,allowed:l.allowed,reason:l.reason,layer:"permission",iteration:i}),l.allowed?{receipt:{turnId:o,toolCallId:s,toolName:e,iteration:i,policy:{allowed:!0,reason:a.reason,temporaryOverride:c},permission:{allowed:!0,reason:l.reason}}}:{denial:{success:!1,output:"",error:`Permission denied: ${l.reason}`}}}async appendAuditEvent(e){if(this.config.auditLogger)try{await this.config.auditLogger.append(e)}catch{}}emit(e){this.config.eventSink&&Promise.resolve(this.config.eventSink(e)).catch(()=>{})}};function gI(t,e){let n=e.completion_policy;if(n==="await"||n==="observe")return n;if(n==="detach"&&e._xeno_user_authorized_detach===!0)return"detach";if(t!=="Bash")return"await";let r=typeof e.command=="string"?e.command:"";return/\b(?:serve|server|daemon|watch|dev|tail\s+-f|journalctl\s+-f|kubectl\s+port-forward)\b/i.test(r)?"observe":"await"}function hI(t,e){if(G(t)!=="Bash")return;let n=e.completion_policy;if(n===void 0||n==="await")return;if(n!=="observe"&&n!=="detach")return{success:!1,output:"",error:`Invalid completion_policy: ${String(n)}`,retryable:!0};if(n==="detach")return e._xeno_user_authorized_detach===!0?void 0:{success:!1,output:"",error:"completion_policy=detach requires an explicit user or host-policy authorization",retryable:!1};let r=typeof e.command=="string"?e.command:"";if(!/\b(?:serve|server|daemon|watch|dev|tail\s+-f|journalctl\s+-f|kubectl\s+port-forward)\b/i.test(r))return{success:!1,output:"",error:"completion_policy=observe is valid only for recognized services or watchers; finite commands must remain await",retryable:!0}}function bI(t,e,n){let r=[e.timeout,e.timeout_ms].find(a=>typeof a=="number"&&Number.isFinite(a)&&a>0),o=G(t)==="Bash"?n.bashDefaultTimeoutMs??12e4:n.defaultOperationLeaseMs??30*6e4,i=Math.min(r??o,30*6e4),s=Math.max(0,n.operationCleanupGraceMs??5e3);return new Date(Date.now()+i+s).toISOString()}function yI(t,e){let n=typeof e.description=="string"?e.description.trim():"";if(n)return Array.from(n,o=>{let i=o.codePointAt(0)??0;return i<=31||i===127?" ":o}).join("").replace(/\s+/g," ").slice(0,120);if(G(t)!=="Bash")return;let r=typeof e.command=="string"?e.command.trim():"";if(r)return r.replace(/[\r\n]+/g," ").replace(/\s+/g," ").slice(0,80)}function wI(t,e,n){if(!(G(t)!=="Bash"||e.run_in_background!==!0||[e.timeout,e.timeout_ms].some(o=>typeof o=="number"&&Number.isFinite(o)&&o>0)))return(n.bashDefaultTimeoutMs??12e4)+Math.max(0,n.operationCleanupGraceMs??5e3)}var cr=class extends Error{};function xI(t){let e=new AbortController,n=()=>e.abort(t?.reason??"OPERATION_CANCELLED");return t?.aborted?n():t?.addEventListener("abort",n,{once:!0}),{controller:e,disposeParent:()=>t?.removeEventListener("abort",n)}}function Mb(t){if(t?.aborted)throw new cr(String(t.reason??"Operation aborted"))}function vI(t,e){return e?e.aborted?Promise.reject(new cr(String(e.reason??"Operation aborted"))):new Promise((n,r)=>{let o=()=>{i(),r(new cr(String(e.reason??"Operation aborted")))},i=()=>e.removeEventListener("abort",o);e.addEventListener("abort",o,{once:!0}),t.then(s=>{i(),n(s)},s=>{i(),r(s)})}):t}function TI(t){if(!Array.isArray(t))return;let e=t.filter(n=>typeof n=="string"&&n.trim().length>0).slice(0,32).map(n=>({path:n,kind:"file",nonEmpty:!0}));return e.length>0?e:void 0}function SI(t,e,n){let r=G(t);if(r!=="Write"&&r!=="Edit"&&r!=="NotebookEdit")return;let o=ro(r,e,n);return o?[{path:o,kind:"file",nonEmpty:!1}]:void 0}function EI(t){let e=G(t);return e==="Read"||e==="ReadImage"||e==="Glob"||e==="Grep"||e==="LS"||e==="Think"||e==="dispatch_agent"||e==="ElfAnalyze"||e==="SqliteAnalyze"||e==="GcodeAnalyze"||e==="NotebookRead"||e==="MemoryRead"?"low":e==="Write"||e==="Edit"||e==="NotebookEdit"||e==="MemoryWrite"?"medium":e==="Bash"||e==="TaskStop"?"high":"medium"}var _I="[\\u0000-\\u0008\\u000E-\\u001F]",_N=new RegExp(_I);var Db=require("node:crypto");var Re=class extends Error{dialect;path;constructor(e,n,r){super(`Tool schema cannot be projected to ${e} at ${n}: ${r}`),this.name="ToolSchemaProjectionError",this.dialect=e,this.path=n}},Lb=new Set(["$schema","$id","$anchor","$defs","$comment","title","default","examples","deprecated","readOnly","writeOnly"]),kI=new Set(["type","description","enum","format","properties","required","items","minItems","maxItems","minLength","maxLength","minimum","maximum","anyOf"]);function II(t,e){zo(t);let n=Tu(t),r=n,o=Nb(n);if(e==="xeno")return{schema:n,dialect:e,canonicalSha256:o,projectedSha256:o,changes:[]};let i={dialect:e,root:r,pointers:new Map,anchors:new Map,changes:[],activeReferences:new Set};vs(r,"",i);let s=vn(r,"#",i);if(!lr(s))throw new Re(e,"#","provider tool root must remain an object schema");return PI(n,s,e),{schema:s,dialect:e,canonicalSha256:o,projectedSha256:Nb(s),changes:i.changes}}function oo(t,e){return t.map(n=>{let r=II(n.input_schema,e);return{definition:{...n,input_schema:r.schema},projection:r}})}function vn(t,e,n){if(typeof t=="boolean"){if(n.dialect!=="google")return t;if(t)return{};throw new Re(n.dialect,e,"false schemas are not representable by this provider")}if(typeof t.$ref=="string"){let o=AI(t.$ref,e,n);if(n.activeReferences.has(t.$ref))throw new Re(n.dialect,e,`recursive reference ${t.$ref} cannot be serialized safely`);let i=Object.fromEntries(Object.entries(t).filter(([a])=>a!=="$ref"&&!Lb.has(a)));if(Object.keys(i).length>0){if(n.dialect==="google")throw new Re(n.dialect,e,"$ref siblings require an unsupported intersection");n.activeReferences.add(t.$ref);let a=vn(o,`${e}/$ref`,n);n.activeReferences.delete(t.$ref);let c=vn(i,e,n);return n.changes.push({path:e,keyword:"$ref",action:"transformed",reason:"inlined local reference with sibling intersection"}),{allOf:[a,c]}}n.activeReferences.add(t.$ref);let s=vn(o,`${e}/$ref`,n);return n.activeReferences.delete(t.$ref),n.changes.push({path:e,keyword:"$ref",action:"transformed",reason:"inlined local reference"}),s}let r={};for(let[o,i]of Object.entries(t))if(o!=="$ref"){if(Lb.has(o)||o.startsWith("x-")){o==="description"?r.description=i:n.changes.push({path:e,keyword:o,action:"omitted",reason:"provider wire metadata is not required for canonical validation"});continue}if(n.dialect==="google"&&!kI.has(o)){if(o==="const"){r.enum=[Tu(i)],n.changes.push({path:e,keyword:o,action:"transformed",reason:"Google wire schema represents const as a single-value enum"});continue}if(o==="prefixItems")throw new Re(n.dialect,e,"tuple prefixItems cannot preserve the provider structural contract");n.changes.push({path:e,keyword:o,action:"omitted",reason:"constraint remains enforced by canonical local validation"});continue}if(o==="type"&&n.dialect==="google"&&Array.isArray(i)){let s=i.filter(a=>a!=="null");if(s.length!==1||i.length!==2)throw new Re(n.dialect,e,"type union cannot be represented without weakening structure");r.type=s[0],r.nullable=!0,n.changes.push({path:e,keyword:o,action:"transformed",reason:"nullable two-type union mapped to Google nullable"});continue}if(o==="properties"||o==="patternProperties"||o==="$defs"){if(!lr(i))throw new Re(n.dialect,e,`${o} must be an object`);let s={};for(let[a,c]of Object.entries(i))s[a]=vn(c,`${e}/${o}/${Su(a)}`,n);r[o]=s;continue}if(["items","contains","additionalProperties","not"].includes(o)){r[o]=vn(i,`${e}/${o}`,n);continue}if(["prefixItems","allOf","anyOf","oneOf"].includes(o)){if(!Array.isArray(i))throw new Re(n.dialect,e,`${o} must be an array`);r[o]=i.map((s,a)=>vn(s,`${e}/${o}/${a}`,n));continue}r[o]=Tu(i)}if(n.dialect==="google"){let o=t.type!==void 0||t.properties!==void 0||t.items!==void 0,i=r.type!==void 0||r.properties!==void 0||r.items!==void 0;if(!o&&(t.oneOf!==void 0||t.allOf!==void 0||t.not!==void 0)||o&&!i)throw new Re(n.dialect,e,"minimum structural contract cannot be represented")}return r}function PI(t,e,n){if(e.type!=="object"||!lr(e.properties))throw new Re(n,"#","root object/properties contract changed");let r=Object.keys(t.properties).sort(),o=Object.keys(e.properties).sort();if(JSON.stringify(r)!==JSON.stringify(o))throw new Re(n,"#","root property identity changed");let i=[...t.required??[]].sort(),s=Array.isArray(e.required)?[...e.required].sort():[];if(JSON.stringify(i)!==JSON.stringify(s))throw new Re(n,"#","root required-property contract changed")}function vs(t,e,n){if(n.pointers.set(e,t),typeof t!="boolean"){typeof t.$anchor=="string"&&n.anchors.set(t.$anchor,t);for(let r of["$defs","properties","patternProperties"]){let o=t[r];if(lr(o))for(let[i,s]of Object.entries(o))vs(s,`${e}/${r}/${Su(i)}`,n)}for(let r of["items","contains","additionalProperties","not"]){let o=t[r];(typeof o=="boolean"||lr(o))&&vs(o,`${e}/${r}`,n)}for(let r of["prefixItems","allOf","anyOf","oneOf"]){let o=t[r];Array.isArray(o)&&o.forEach((i,s)=>vs(i,`${e}/${r}/${s}`,n))}}}function AI(t,e,n){if(!t.startsWith("#"))throw new Re(n.dialect,e,"remote references are forbidden");if(t==="#")return n.root;if(t.startsWith("#/")){let r=t.slice(1).split("/").map(i=>i.replace(/~1/g,"/").replace(/~0/g,"~")).map(Su).join("/"),o=n.pointers.get(r);if(o!==void 0)return o}else{let r=n.anchors.get(t.slice(1));if(r!==void 0)return r}throw new Re(n.dialect,e,`unresolved reference ${t}`)}function Nb(t){return(0,Db.createHash)("sha256").update(vu(t)).digest("hex")}function vu(t){return Array.isArray(t)?`[${t.map(vu).join(",")}]`:lr(t)?`{${Object.keys(t).sort().map(e=>`${JSON.stringify(e)}:${vu(t[e])}`).join(",")}}`:JSON.stringify(t)}function Tu(t){return JSON.parse(JSON.stringify(t))}function Su(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}function lr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var _s=require("node:crypto");var Ss=require("node:perf_hooks");var qb=require("node:dns/promises"),so=require("node:net");var Y=class extends Error{category;code;retryable;providerId;statusCode;retryAfterMs;requestId;constructor(e,n){super(e,n.cause!==void 0?{cause:n.cause}:void 0),this.name="ProviderError",this.category=n.category,this.code=n.code,this.retryable=n.retryable??!1,this.providerId=n.providerId,this.statusCode=n.statusCode,this.retryAfterMs=n.retryAfterMs,this.requestId=n.requestId}};function Bb(t,e=Date.now()){if(!t)return;let n=Number(t.trim());if(Number.isFinite(n)&&n>=0)return Math.ceil(n*1e3);let r=Date.parse(t);if(Number.isFinite(r))return Math.max(0,r-e)}function RI(t){if(typeof t=="string")return t;if(!t||typeof t!="object")return"";let e=t,n=e.error;if(typeof n=="string")return n;if(n&&typeof n=="object"){let r=n;if(typeof r.message=="string")return r.message;if(typeof r.type=="string")return r.type}return typeof e.message=="string"?e.message:""}function Eu(t,e){return e.some(n=>t.includes(n))}function $b(t){let e=RI(t.body).trim(),n=e.toLowerCase(),r=e?`: ${e.slice(0,1e3)}`:"",o={providerId:t.providerId,statusCode:t.statusCode,retryAfterMs:t.retryAfterMs,requestId:t.requestId};return t.statusCode===401?new Y(`Provider authentication failed${r}`,{...o,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):t.statusCode===403?new Y(`Provider authorization failed${r}`,{...o,category:"authorization",code:"PROVIDER_AUTHORIZATION_FAILED"}):Eu(n,["api key not valid","invalid api key","api key expired","api_key_invalid","invalid authentication credentials","missing api key"])?new Y(`Provider authentication failed${r}`,{...o,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):t.statusCode===429?new Y(`Provider rate limit reached${r}`,{...o,category:"rate_limit",code:"PROVIDER_RATE_LIMITED",retryable:!0}):hs(n)?new Y(`Provider context window exceeded${r}`,{...o,category:"context_overflow",code:"PROVIDER_CONTEXT_OVERFLOW"}):Eu(n,["safety","content policy","blocked_reason","responsible_ai_policy_violation"])?new Y(`Provider safety policy refused the request${r}`,{...o,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):t.statusCode===404||Eu(n,["model not found","model does not exist","unsupported model"])?new Y(`Provider model is unavailable${r}`,{...o,category:"unsupported_model",code:"PROVIDER_MODEL_UNSUPPORTED"}):t.statusCode===408||t.statusCode===504?new Y(`Provider request timed out${r}`,{...o,category:"timeout",code:"PROVIDER_TIMEOUT",retryable:!0}):t.statusCode>=500||t.statusCode===409||t.statusCode===425?new Y(`Provider server error${r}`,{...o,category:"server",code:"PROVIDER_SERVER_ERROR",retryable:!0}):new Y(`Provider rejected the request with HTTP ${t.statusCode}${r}`,{...o,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}function V(t,e,n){return new Y(`Malformed ${t} response: ${e}`,{providerId:t,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",...n!==void 0?{cause:n}:{}})}function io(t,e){return Z("xeno.provider.capability_mismatches",1,{component:"provider_contract",provider:t,capability:e,error_code:"provider_capability_unsupported"}),new Y(`${t} does not advertise the required ${e} capability`,{providerId:t,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}var jb=new Set(["metadata.google.internal","metadata.azure.internal","instance-data.ec2.internal"]);function De(t){return new Y(`Provider endpoint rejected: ${t}`,{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"})}function CI(t){let e=t.split(".");if(e.length!==4)return null;let n=e.map(r=>Number(r));return n.every(r=>Number.isInteger(r)&&r>=0&&r<=255)?n:null}function Ub(t){let e=CI(t);if(!e)return"public";let[n,r]=e;return n===0?"unspecified":n===127?"loopback":n===169&&r===254?"link-local":n===10||n===172&&r>=16&&r<=31||n===192&&r===168?"private":"public"}function Ts(t){let e=t.toLowerCase().replace(/^\[|\]$/g,"").split("%")[0];(0,so.isIP)(e)===6&&(e=new URL(`http://[${e}]`).hostname.slice(1,-1));let n=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(e);if(n){let r=Number.parseInt(n[1],16),o=Number.parseInt(n[2],16);return`${r>>8}.${r&255}.${o>>8}.${o&255}`}return e}function Xb(t){let e=Ts(t);return(0,so.isIP)(e)===4?Ub(e):e==="::"||e==="::0"?"unspecified":e==="::1"?"loopback":e.startsWith("::ffff:")?Ub(e.slice(7)):/^f[cd]/.test(e)?"private":/^fe[89ab]/.test(e)?"link-local":"public"}function Fb(t){return t==="example"||t.endsWith(".example")||t==="test"||t.endsWith(".test")||t==="invalid"||t.endsWith(".invalid")}function MI(t){return t==="localhost"||t.endsWith(".localhost")}function Gb(t,e={}){let n;try{n=new URL(t)}catch{throw De("the URL is invalid")}if(n.username||n.password)throw De("embedded credentials are forbidden");if(n.hash||n.search)throw De("base URLs cannot contain a query or fragment");if(!n.hostname||n.hostname.includes("%"))throw De("the hostname is empty or ambiguous");if(jb.has(n.hostname.toLowerCase()))throw De("cloud metadata destinations are forbidden");if(n.protocol!=="https:"&&n.protocol!=="http:")throw De(`scheme ${n.protocol} is unsupported`);let r=e.profile??"public-https";if(n.protocol==="http:"&&r!=="local-network")throw De("plain HTTP requires the explicit local-network profile");let o=n.hostname.replace(/^\[|\]$/g,""),i=(0,so.isIP)(o)?Xb(o):null;if(i==="link-local"||i==="unspecified")throw De(`${i} destinations are forbidden`);if(r==="public-https"&&(i==="private"||i==="loopback"||MI(n.hostname)))throw De("private and loopback destinations require the local-network profile");if(r==="local-network"&&n.protocol==="http:"&&i==="public"&&!e.allowedHosts?.includes(n.hostname))throw De("local-network HTTP must resolve to loopback or a private address");return n}async function zb(t,e={}){let n=t.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(jb.has(n))throw De("cloud metadata destinations are forbidden");let r=new Set((e.allowedHosts??[]).map(s=>s.toLowerCase())),o=(0,so.isIP)(n)?[n]:Fb(n)?[]:e.resolveHostname?await e.resolveHostname(n):(await(0,qb.lookup)(n,{all:!0,verbatim:!0})).map(s=>s.address);if(!o.length&&!Fb(n))throw De("DNS resolution returned no addresses");let i=e.profile??"public-https";for(let s of o){let a=Xb(s);if(a==="link-local"||a==="unspecified")throw De(`DNS resolved to a forbidden ${a} address`);if(i==="public-https"&&a!=="public"&&!r.has(n))throw De(`DNS resolved public endpoint to ${a} address ${s}`);if(i==="local-network"&&t.protocol==="http:"&&a==="public"&&!r.has(n))throw De(`local-network HTTP resolved to public address ${s}`)}return o}var Wb=require("node:http"),Hb=require("node:https"),_u=require("node:net"),Vb=require("node:events");function Jb(t,e){return{dispatch(n,r){let o,i=!1,s=u=>{i||(i=!0,o?.destroy(),r.onError(u))},a=e[0];if(!a||!(0,_u.isIP)(a)||new URL(n.origin).origin!==t.origin)return queueMicrotask(()=>s(new Error("Provider connection has no authorized pinned address"))),!0;let c=n.headers??{},l=(t.protocol==="https:"?Hb.request:Wb.request)(new URL(n.path,t.origin),{method:n.method,headers:c,agent:!1,rejectUnauthorized:!0,lookup:(u,d,m)=>{let p={address:a,family:(0,_u.isIP)(a)};typeof d=="object"&&d.all?m(null,[p]):m(null,a,p.family)}},u=>{o=u;let d=u.rawHeaders.map(p=>Buffer.from(p)),m=()=>u.resume();r.onHeaders(u.statusCode??500,d,m,u.statusMessage??"")===!1&&u.pause(),u.on("data",p=>{r.onData(p)||u.pause()}),u.on("end",()=>{i||(i=!0,r.onComplete(u.rawTrailers.map(p=>Buffer.from(p))))}),u.on("error",s),u.on("aborted",()=>s(new Error("Provider response was interrupted")))});return l.on("socket",u=>{u.once("connect",()=>{(!u.remoteAddress||Ts(u.remoteAddress)!==Ts(a))&&l.destroy(new Error("Provider socket did not connect to its authorized address"))})}),l.on("error",s),r.onConnect(u=>l.destroy(u??new Error("Provider request aborted"))),(async()=>{try{let u=n.body;if(typeof u=="string"||u instanceof Uint8Array)l.end(u);else{if(u)for await(let d of u){if(l.destroyed)return;l.write(d)||await(0,Vb.once)(l,"drain")}l.end()}}catch(u){l.destroy(u instanceof Error?u:new Error("Provider request body failed"))}})(),!0}}}var ur={connectTimeoutMs:15e3,totalTimeoutMs:12e4,idleTimeoutMs:3e4,maxResponseBytes:8*1024*1024,maxHeaderBytes:64*1024,maxEventBytes:1024*1024};function OI(t={}){for(let[e,n]of Object.entries(t))if(n!==void 0&&(!Number.isSafeInteger(n)||n<1))throw V("provider-transport",`${e} must be a positive safe integer`);return{connectTimeoutMs:Math.max(100,t.connectTimeoutMs??ur.connectTimeoutMs),totalTimeoutMs:Math.max(100,t.totalTimeoutMs??ur.totalTimeoutMs),idleTimeoutMs:Math.max(100,t.idleTimeoutMs??ur.idleTimeoutMs),maxResponseBytes:Math.max(1024,t.maxResponseBytes??ur.maxResponseBytes),maxHeaderBytes:Math.max(1024,t.maxHeaderBytes??ur.maxHeaderBytes),maxEventBytes:Math.max(1024,t.maxEventBytes??ur.maxEventBytes)}}async function ao(t,e){let n,r=new Promise((o,i)=>{n=()=>i(new Error("Provider operation aborted")),e.addEventListener("abort",n,{once:!0}),e.aborted&&n()});try{return await Promise.race([t,r])}finally{e.removeEventListener("abort",n)}}function Es(t,e,n,r){try{return t.decode(e,{stream:n})}catch{throw V(r,"response is not valid UTF-8")}}function ku(t,e,n){let r=new Y(e==="cancelled"?"Provider request was cancelled":"Provider request timed out",{providerId:t,category:e,code:e==="cancelled"?"PROVIDER_CANCELLED":"PROVIDER_TIMEOUT",retryable:e==="timeout",...n!==void 0?{cause:n}:{}});return e==="cancelled"&&(r.name="AbortError"),r}function LI(t){let e=0;return t.forEach((n,r)=>{e+=Buffer.byteLength(r)+Buffer.byteLength(n)+4}),e}async function Kb(t,e,n,r){if(!t.body)return"";let o=t.body.getReader(),i=new TextDecoder("utf-8",{fatal:!0}),s=0,a="",c,l=()=>{c&&clearTimeout(c),c=setTimeout(()=>r.abort("idle-timeout"),n.idleTimeoutMs)};l();try{for(;;){let{value:u,done:d}=await ao(o.read(),r.signal);if(d)break;if(l(),s+=u.byteLength,s>n.maxResponseBytes)throw V(e,`response exceeded ${n.maxResponseBytes} bytes`);a+=Es(i,u,!0,e)}return a+=Es(i,void 0,!1,e),a}finally{c&&clearTimeout(c),o.cancel().catch(()=>{}),o.releaseLock()}}async function Yb(t,e,n,r){let o=Ss.performance.now(),i=OI(n.limits);Z("xeno.provider.requests",1,{component:"provider_transport",provider:n.providerId,transport:"http"});let s=new AbortController,a=null,c=e.signal,l=()=>s.abort("caller");if(c?.aborted)throw ku(n.providerId,"cancelled");c?.addEventListener("abort",l,{once:!0});let u=setTimeout(()=>{a="total",s.abort("total-timeout")},i.totalTimeoutMs),d=setTimeout(()=>{a="connect",s.abort("connect-timeout")},i.connectTimeoutMs),m;try{let p=await ao(zb(t,n.endpointPolicy),s.signal);if(s.signal.aborted)throw new Error("Provider request aborted before dispatch");let g={...e,signal:s.signal,redirect:"manual",dispatcher:Jb(t,p)},f=fetch(t,g);f.then(x=>{s.signal.aborted&&x.body?.cancel().catch(()=>{})},()=>{});let h=await ao(f,s.signal);if(m=h,clearTimeout(d),LI(h.headers)>i.maxHeaderBytes)throw V(n.providerId,`response headers exceeded ${i.maxHeaderBytes} bytes`);if(h.redirected||h.status>=300&&h.status<400)throw new Y("Provider redirects are disabled",{providerId:n.providerId,category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED",statusCode:h.status});let b=h.headers.get("content-length");if(b&&/^\d+$/.test(b)&&Number(b)>i.maxResponseBytes)throw V(n.providerId,`response exceeded ${i.maxResponseBytes} bytes`);if(!h.ok){let x=await Kb(h,n.providerId,i,s),w=x;try{w=x?JSON.parse(x):{}}catch{}throw $b({providerId:n.providerId,statusCode:h.status,body:w,retryAfterMs:Bb(h.headers.get("retry-after")),requestId:h.headers.get("request-id")??h.headers.get("x-request-id")??void 0})}let y=await ao(r(h,s,i),s.signal);return Z("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),xe("xeno.provider.request_duration_ms",Ss.performance.now()-o,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),y}catch(p){let g;throw p instanceof Y?g=p:c?.aborted||s.signal.reason==="caller"?g=ku(n.providerId,"cancelled",p):a||s.signal.reason==="idle-timeout"?g=ku(n.providerId,"timeout",p):g=new Y("Provider transport failed",{providerId:n.providerId,category:"transport",code:"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:p}),s.abort("request-failed"),m?.body&&!m.body.locked&&m.body.cancel().catch(()=>{}),Z("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:g.category,error_code:g.code}),xe("xeno.provider.request_duration_ms",Ss.performance.now()-o,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:g.category}),g}finally{clearTimeout(d),clearTimeout(u),c?.removeEventListener("abort",l)}}async function Iu(t,e,n){return Yb(t,e,n,async(r,o,i)=>{let s=await Kb(r,n.providerId,i,o),a;try{a=s?JSON.parse(s):{}}catch(c){throw V(n.providerId,"body is not valid JSON",c)}if(!a||typeof a!="object"||Array.isArray(a))throw V(n.providerId,"JSON body must be an object");return a})}async function co(t,e,n,r){return Yb(t,e,n,async(o,i,s)=>{if(!o.body)throw V(n.providerId,"stream response has no body");let a=o.body.getReader(),c=new TextDecoder("utf-8",{fatal:!0}),l="",u=0,d="message",m=[],p,g=()=>{p&&clearTimeout(p),p=setTimeout(()=>i.abort("idle-timeout"),s.idleTimeoutMs)},f=async()=>{if(m.length===0){d="message";return}let h=m.join(`
1943
+ `);continue}let l=t.slice(a,a+2);if(["&&","||",">>"].includes(l)){i(),e.push(l),a+=1;continue}if([";","|","<",">"].includes(c)){i(),e.push(c);continue}n+=c}return i(),e}function mI(t){return(0,ar.basename)(t.replace(/\\/g,"/")).toLowerCase().replace(/\.(exe|cmd|bat|ps1|sh)$/,"")}function Ib(t){return(0,ar.isAbsolute)(t)||Ba(t)||t.startsWith("./")||t.startsWith("../")||t.startsWith(".\\")||t.startsWith("..\\")||/^[A-Za-z]:[\\/]/.test(t)}function Pb(t){return/\$\(|\$\{|\$env:|%[^%]+%|^~[/\\]/i.test(t)}function pI(t){let e=[],n=dI(t),r="",o=-1;for(let i=0;i<n.length;i+=1){let s=n[i];if(yu.has(s)){r="",o=-1;continue}let a=uI.get(s);if(a){let u=n[i+1];u&&!yu.has(u)&&(e.push({path:u,access:a,source:"redirect"}),i+=1);continue}if(!r){if(s==="&"||s===".")continue;r=mI(s),o=i,(Ib(s)||Pb(s))&&e.push({path:s,access:"read",source:"executable"});continue}let c=lI.get(s.toLowerCase());if(c){let u=n[i+1];u&&!yu.has(u)&&(e.push({path:u,access:c,source:"parameter"}),i+=1);continue}if(s.startsWith("-"))continue;let l=cI.has(r)?"write":aI.has(r)?"read":null;l&&i>o?e.push({path:s,access:l,source:"argument"}):Ib(s)&&e.push({path:s,access:"read",source:"argument"})}return e}function Ab(t,e){let n=pI(t),r=[...e.allowedDirectories,...e.temporaryDirectories??[]];for(let o of n){if(o.access==="read"&&!e.capabilities.fileRead)return{allowed:!1,reason:`Shell ${o.source} requires file-read capability: ${o.path}`};if(o.access==="write"&&!e.capabilities.fileWrite)return{allowed:!1,reason:`Shell ${o.source} requires file-write capability: ${o.path}`};if(Pb(o.path))return{allowed:!1,reason:`Shell path expression cannot be resolved safely by policy: ${o.path}`};let i=On(o.path);if(i.length>0)return{allowed:!1,reason:`Shell path denied: ${i[0].code}: ${i[0].message} (${o.path})`};if(r.length===0)return{allowed:!1,reason:"No directories are configured for shell filesystem access."};let s=(0,ar.resolve)(e.workingDirectory??process.cwd(),o.path);if((e.deniedDirectories?.length??0)>0&&vt(s,e.deniedDirectories))return{allowed:!1,reason:`Shell ${o.source} path is inside an explicitly denied directory: ${s}`};if(!vt(s,r))return{allowed:!1,reason:`Shell ${o.source} path is outside allowed directories: ${s}`}}return{allowed:!0,reason:"shell policy check passed"}}var wu=new Set(["Read","Glob","Grep","LS","NotebookRead","MemoryRead","ReadImage","ElfAnalyze","LspDefinition","LspDiagnostics","LspHover","LspReferences"]),xu=new Set(["Write","Edit","NotebookEdit","MemoryWrite"]),Rb=new Set(["Bash"]);function to(t,e){let n=e?.workingDirectory;return n&&!(0,no.isAbsolute)(t)?(0,no.resolve)(n,t):(0,no.resolve)(t)}function ro(t,e,n){switch(G(t)){case"Read":case"ElfAnalyze":case"Write":case"Edit":case"MemoryRead":case"MemoryWrite":return typeof e.file_path=="string"&&e.file_path.length>0?to(e.file_path,n):null;case"ReadImage":return typeof e.path=="string"&&e.path.length>0?to(e.path,n):null;case"LS":case"Glob":case"Grep":return typeof e.path=="string"&&e.path.length>0?to(e.path,n):null;case"NotebookRead":case"NotebookEdit":return typeof e.notebook_path=="string"&&e.notebook_path.length>0?to(e.notebook_path,n):null;case"LspDefinition":case"LspDiagnostics":case"LspHover":case"LspReferences":return typeof e.file_path=="string"&&e.file_path.length>0?to(e.file_path,n):null;default:return null}}function Cb(t,e,n){let r=G(t);if(!n)return{allowed:!0,reason:"no sandbox"};if(wu.has(r)&&!n.capabilities.fileRead)return{allowed:!1,reason:"File read access is not enabled for this agent. Ask the user to enable it in agent settings."};if(xu.has(r)&&!n.capabilities.fileWrite)return{allowed:!1,reason:"File write access is not enabled for this agent. Ask the user to enable it in agent settings."};if(Rb.has(r)&&!n.capabilities.terminal)return{allowed:!1,reason:"Terminal access is not enabled for this agent. Ask the user to enable it in agent settings."};if(Rb.has(r)&&typeof e.command=="string"){let c=Ab(e.command,n);if(!c.allowed)return c}let o=wu.has(r)||xu.has(r),i=[...n.allowedDirectories,...n.temporaryDirectories??[]],s=fI(r,e),a=s?On(s):[];if(s&&a.length>0)return{allowed:!1,reason:`Access denied: ${a[0].code}: ${a[0].message} (${s})`};if(o&&(n.deniedDirectories?.length??0)>0){let c=ro(r,e,n);if(c!==null&&vt(c,n.deniedDirectories))return{allowed:!1,reason:`Access denied: path ${c} is inside an explicitly denied directory.`}}if(o&&i.length>0){let c=ro(r,e,n);if(c!==null&&!vt(c,i)){let l=i.join(", ");return{allowed:!1,reason:`Access denied: path ${c} is outside the agent's allowed directories: [${l}]`}}}return o&&i.length===0?{allowed:!1,reason:"No directories are configured for this agent. Ask the user to grant folder access in agent settings."}:{allowed:!0,reason:"policy check passed"}}function fI(t,e){let n=G(t),r=n==="ReadImage"||n==="LS"||n==="Glob"||n==="Grep"?"path":n==="NotebookRead"||n==="NotebookEdit"?"notebook_path":wu.has(n)||xu.has(n)?"file_path":null,o=r?e[r]:null;return typeof o=="string"&&o.length>0?o:null}var xs=class{constructor(e){this.config=e}config;async execute(e){let n=Date.now(),{toolCall:r,traceId:o,iteration:i}=e,s=this.config.toolRegistry.projectPolicyInput(r.name,r.input),a="error"in s?s.error:hI(r.name,r.input),c="error"in s?{observabilityInput:{projection_error:!0},permissionInput:{}}:s,l={...r,input:c.observabilityInput},u=c.approvalKey?{...c.permissionInput,approval_key:c.approvalKey}:c.permissionInput,d=!e.skipToolExecutionReason&&!a,m=c.riskLevel??EI(r.name),p=this.config.operationManager??j,g=process.env.XENO_TOOL_OPERATION_RUNTIME!=="0",f=d&&g?p.register({turnId:o,generation:i,toolCallId:r.id,toolName:r.name,displayName:yI(r.name,r.input),ownerSessionId:this.config.ownerSessionId,presentation:r.input.run_in_background===!0?"background":"foreground",completionPolicy:gI(r.name,r.input),promotable:r.name==="Bash"&&r.input.run_in_background!==!0&&r.input.tty!==!0,deadlineAt:bI(r.name,r.input,this.config),renewableDeadlineMs:wI(r.name,r.input,this.config),expectedOutputs:TI(r.input.expected_outputs)??SI(r.name,u,this.config.sandbox),eventSink:this.config.eventSink}):null;f&&p.transition(f.operationId,"starting");let h=f?xI(e.signal):null;f&&h&&p.setDeadlineAbortHandler(f.operationId,()=>{h.controller.abort("OPERATION_DEADLINE_EXCEEDED")});let b=!1,y=()=>{b||(b=!0,this.config.onToolWaitStart?.())},x=()=>{b&&(b=!1,this.config.onToolWaitEnd?.())};await this.appendAuditEvent({trace_id:o,event_type:"tool_call",actor:"assistant",risk_level:m,tool_name:r.name,metadata:{iteration:i,input:bu(c.observabilityInput,200)}}),d&&(this.emit({type:"tool.started",turnId:o,toolName:r.name,inputPreview:bu(c.observabilityInput),iteration:i}),this.config.callbacks?.onToolStart?.(r.name,c.observabilityInput));let w;if(a)w=a;else if(e.skipToolExecutionReason)w={success:!1,output:"",error:e.skipToolExecutionReason};else try{w=await vI((async()=>{let S=await this.checkSandboxAndPermission(r.name,u,c.permissionPreview,o,i,r.id);if(Mb(h?.controller.signal),S.denial)return S.denial;let E=this.config.turnDiffTracker?.inferToolPaths(r.name,c.observabilityInput)??[];this.config.turnDiffTracker?.observeBefore(E),await this.config.callbacks?.onToolWillExecute?.(r.name,c.observabilityInput),Mb(h?.controller.signal),f&&p.transition(f.operationId,f.presentation==="background"?"running_background":"running_foreground");let _;try{_=await this.config.toolRegistry.execute(r.name,r.input,{signal:h?.controller.signal??e.signal,operationId:f?.operationId,authorization:S.receipt,reportProgress:f?T=>{T.activity==="waiting_for_input"?y():x(),p.reportProgress(f.operationId,T)}:void 0})}finally{x()}return this.config.turnDiffTracker?.observeAfter(E),_})(),h?.controller.signal)}catch(S){if(x(),!(S instanceof cr))throw S;let E=f?p.get(f.operationId):null,_=E?.state==="timed_out";f&&E&&!E.terminal&&p.finalize(f.operationId,"cancelled",{reason:"OPERATION_CANCELLED"}),w={success:!1,output:"",error:_?"Operation timed out: OPERATION_DEADLINE_EXCEEDED":"Operation cancelled: OPERATION_CANCELLED",retryable:_}}if(w||(w={success:!1,output:"",error:"Tool execution did not produce a result"}),f){let S=p.get(f.operationId),E=w.operation,_=E?.operationId===f.operationId;if(S&&!S.terminal&&!_){let I=await p.completeSynchronous(f.operationId,w.success,w.success?"tool_result":w.error??"tool_error");w.success&&I?.state==="failed"&&(w.success=!1,w.error=I.completionReason??"POSTCONDITION_FAILED",w.retryable=!0)}let T=p.get(f.operationId);T&&(!E||_)&&(w.operation=T,T.evidence?.length&&(w.evidence=T.evidence))}return await this.appendAuditEvent({trace_id:o,event_type:"tool_result",actor:"system",risk_level:m,tool_name:r.name,status:w.success?"ok":"error",reason:w.success?void 0:w.error,metadata:{output_preview:(w.output??"").slice(0,200),elapsed_ms:Date.now()-n}}),this.emit({type:"tool.completed",turnId:o,toolName:r.name,success:w.success,outputPreview:(w.output??"").slice(0,600),...w.error?{error:w.error}:{},...w.webContext?{webContext:w.webContext}:{},elapsedMs:Date.now()-n,iteration:i}),d&&this.config.callbacks?.onToolEnd?.(r.name,w),h?.disposeParent(),{toolCall:l,toolResult:w,executeTool:d}}async checkSandboxAndPermission(e,n,r,o,i,s){let a=Cb(e,n,this.config.sandbox),c=!1;if(this.emit({type:"tool.permission",turnId:o,toolName:e,allowed:a.allowed,reason:a.reason,layer:"policy",iteration:i}),!a.allowed){let u=ro(e,n,this.config.sandbox);if(u&&this.config.onPermissionRequest&&this.config.sandbox){let d=(0,Ob.dirname)(u),m=await this.config.onPermissionRequest({toolName:e,path:u,directory:d,reason:a.reason});if(m.granted)c=!0,this.config.sandbox.temporaryDirectories=[...this.config.sandbox.temporaryDirectories??[],m.allowedDirectory??d];else return{denial:{success:!1,output:"",error:`Permission denied: ${a.reason}`}}}else return{denial:{success:!1,output:"",error:`Permission denied: ${a.reason}`}}}let l=await this.config.permissionEngine.check(e,n,{traceId:o,requesterLabel:this.config.requesterLabel??"Agent",ephemeralInputPreview:r,onWaitStart:this.config.onToolWaitStart,onWaitEnd:this.config.onToolWaitEnd});return this.emit({type:"tool.permission",turnId:o,toolName:e,allowed:l.allowed,reason:l.reason,layer:"permission",iteration:i}),l.allowed?{receipt:{turnId:o,toolCallId:s,toolName:e,iteration:i,policy:{allowed:!0,reason:a.reason,temporaryOverride:c},permission:{allowed:!0,reason:l.reason}}}:{denial:{success:!1,output:"",error:`Permission denied: ${l.reason}`}}}async appendAuditEvent(e){if(this.config.auditLogger)try{await this.config.auditLogger.append(e)}catch{}}emit(e){this.config.eventSink&&Promise.resolve(this.config.eventSink(e)).catch(()=>{})}};function gI(t,e){let n=e.completion_policy;if(n==="await"||n==="observe")return n;if(n==="detach"&&e._xeno_user_authorized_detach===!0)return"detach";if(t!=="Bash")return"await";let r=typeof e.command=="string"?e.command:"";return/\b(?:serve|server|daemon|watch|dev|tail\s+-f|journalctl\s+-f|kubectl\s+port-forward)\b/i.test(r)?"observe":"await"}function hI(t,e){if(G(t)!=="Bash")return;let n=e.completion_policy;if(n===void 0||n==="await")return;if(n!=="observe"&&n!=="detach")return{success:!1,output:"",error:`Invalid completion_policy: ${String(n)}`,retryable:!0};if(n==="detach")return e._xeno_user_authorized_detach===!0?void 0:{success:!1,output:"",error:"completion_policy=detach requires an explicit user or host-policy authorization",retryable:!1};let r=typeof e.command=="string"?e.command:"";if(!/\b(?:serve|server|daemon|watch|dev|tail\s+-f|journalctl\s+-f|kubectl\s+port-forward)\b/i.test(r))return{success:!1,output:"",error:"completion_policy=observe is valid only for recognized services or watchers; finite commands must remain await",retryable:!0}}function bI(t,e,n){let r=[e.timeout,e.timeout_ms].find(a=>typeof a=="number"&&Number.isFinite(a)&&a>0),o=G(t)==="Bash"?n.bashDefaultTimeoutMs??12e4:n.defaultOperationLeaseMs??30*6e4,i=Math.min(r??o,30*6e4),s=Math.max(0,n.operationCleanupGraceMs??5e3);return new Date(Date.now()+i+s).toISOString()}function yI(t,e){let n=typeof e.description=="string"?e.description.trim():"";if(n)return Array.from(n,o=>{let i=o.codePointAt(0)??0;return i<=31||i===127?" ":o}).join("").replace(/\s+/g," ").slice(0,120);if(G(t)!=="Bash")return;let r=typeof e.command=="string"?e.command.trim():"";if(r)return r.replace(/[\r\n]+/g," ").replace(/\s+/g," ").slice(0,80)}function wI(t,e,n){if(!(G(t)!=="Bash"||e.run_in_background!==!0||[e.timeout,e.timeout_ms].some(o=>typeof o=="number"&&Number.isFinite(o)&&o>0)))return(n.bashDefaultTimeoutMs??12e4)+Math.max(0,n.operationCleanupGraceMs??5e3)}var cr=class extends Error{};function xI(t){let e=new AbortController,n=()=>e.abort(t?.reason??"OPERATION_CANCELLED");return t?.aborted?n():t?.addEventListener("abort",n,{once:!0}),{controller:e,disposeParent:()=>t?.removeEventListener("abort",n)}}function Mb(t){if(t?.aborted)throw new cr(String(t.reason??"Operation aborted"))}function vI(t,e){return e?e.aborted?Promise.reject(new cr(String(e.reason??"Operation aborted"))):new Promise((n,r)=>{let o=()=>{i(),r(new cr(String(e.reason??"Operation aborted")))},i=()=>e.removeEventListener("abort",o);e.addEventListener("abort",o,{once:!0}),t.then(s=>{i(),n(s)},s=>{i(),r(s)})}):t}function TI(t){if(!Array.isArray(t))return;let e=t.filter(n=>typeof n=="string"&&n.trim().length>0).slice(0,32).map(n=>({path:n,kind:"file",nonEmpty:!0}));return e.length>0?e:void 0}function SI(t,e,n){let r=G(t);if(r!=="Write"&&r!=="Edit"&&r!=="NotebookEdit")return;let o=ro(r,e,n);return o?[{path:o,kind:"file",nonEmpty:!1}]:void 0}function EI(t){let e=G(t);return e==="Read"||e==="ReadImage"||e==="Glob"||e==="Grep"||e==="LS"||e==="Think"||e==="dispatch_agent"||e==="ElfAnalyze"||e==="SqliteAnalyze"||e==="GcodeAnalyze"||e==="NotebookRead"||e==="MemoryRead"?"low":e==="Write"||e==="Edit"||e==="NotebookEdit"||e==="MemoryWrite"?"medium":e==="Bash"||e==="TaskStop"?"high":"medium"}var _I="[\\u0000-\\u0008\\u000E-\\u001F]",_N=new RegExp(_I);var Db=require("node:crypto");var Re=class extends Error{dialect;path;constructor(e,n,r){super(`Tool schema cannot be projected to ${e} at ${n}: ${r}`),this.name="ToolSchemaProjectionError",this.dialect=e,this.path=n}},Lb=new Set(["$schema","$id","$anchor","$defs","$comment","title","default","examples","deprecated","readOnly","writeOnly"]),kI=new Set(["type","description","enum","format","properties","required","items","minItems","maxItems","minLength","maxLength","minimum","maximum","anyOf"]);function II(t,e){zo(t);let n=Tu(t),r=n,o=Nb(n);if(e==="xeno")return{schema:n,dialect:e,canonicalSha256:o,projectedSha256:o,changes:[]};let i={dialect:e,root:r,pointers:new Map,anchors:new Map,changes:[],activeReferences:new Set};vs(r,"",i);let s=vn(r,"#",i);if(!lr(s))throw new Re(e,"#","provider tool root must remain an object schema");return PI(n,s,e),{schema:s,dialect:e,canonicalSha256:o,projectedSha256:Nb(s),changes:i.changes}}function oo(t,e){return t.map(n=>{let r=II(n.input_schema,e);return{definition:{...n,input_schema:r.schema},projection:r}})}function vn(t,e,n){if(typeof t=="boolean"){if(n.dialect!=="google")return t;if(t)return{};throw new Re(n.dialect,e,"false schemas are not representable by this provider")}if(typeof t.$ref=="string"){let o=AI(t.$ref,e,n);if(n.activeReferences.has(t.$ref))throw new Re(n.dialect,e,`recursive reference ${t.$ref} cannot be serialized safely`);let i=Object.fromEntries(Object.entries(t).filter(([a])=>a!=="$ref"&&!Lb.has(a)));if(Object.keys(i).length>0){if(n.dialect==="google")throw new Re(n.dialect,e,"$ref siblings require an unsupported intersection");n.activeReferences.add(t.$ref);let a=vn(o,`${e}/$ref`,n);n.activeReferences.delete(t.$ref);let c=vn(i,e,n);return n.changes.push({path:e,keyword:"$ref",action:"transformed",reason:"inlined local reference with sibling intersection"}),{allOf:[a,c]}}n.activeReferences.add(t.$ref);let s=vn(o,`${e}/$ref`,n);return n.activeReferences.delete(t.$ref),n.changes.push({path:e,keyword:"$ref",action:"transformed",reason:"inlined local reference"}),s}let r={};for(let[o,i]of Object.entries(t))if(o!=="$ref"){if(Lb.has(o)||o.startsWith("x-")){o==="description"?r.description=i:n.changes.push({path:e,keyword:o,action:"omitted",reason:"provider wire metadata is not required for canonical validation"});continue}if(n.dialect==="google"&&!kI.has(o)){if(o==="const"){r.enum=[Tu(i)],n.changes.push({path:e,keyword:o,action:"transformed",reason:"Google wire schema represents const as a single-value enum"});continue}if(o==="prefixItems")throw new Re(n.dialect,e,"tuple prefixItems cannot preserve the provider structural contract");n.changes.push({path:e,keyword:o,action:"omitted",reason:"constraint remains enforced by canonical local validation"});continue}if(o==="type"&&n.dialect==="google"&&Array.isArray(i)){let s=i.filter(a=>a!=="null");if(s.length!==1||i.length!==2)throw new Re(n.dialect,e,"type union cannot be represented without weakening structure");r.type=s[0],r.nullable=!0,n.changes.push({path:e,keyword:o,action:"transformed",reason:"nullable two-type union mapped to Google nullable"});continue}if(o==="properties"||o==="patternProperties"||o==="$defs"){if(!lr(i))throw new Re(n.dialect,e,`${o} must be an object`);let s={};for(let[a,c]of Object.entries(i))s[a]=vn(c,`${e}/${o}/${Su(a)}`,n);r[o]=s;continue}if(["items","contains","additionalProperties","not"].includes(o)){r[o]=vn(i,`${e}/${o}`,n);continue}if(["prefixItems","allOf","anyOf","oneOf"].includes(o)){if(!Array.isArray(i))throw new Re(n.dialect,e,`${o} must be an array`);r[o]=i.map((s,a)=>vn(s,`${e}/${o}/${a}`,n));continue}r[o]=Tu(i)}if(n.dialect==="google"){let o=t.type!==void 0||t.properties!==void 0||t.items!==void 0,i=r.type!==void 0||r.properties!==void 0||r.items!==void 0;if(!o&&(t.oneOf!==void 0||t.allOf!==void 0||t.not!==void 0)||o&&!i)throw new Re(n.dialect,e,"minimum structural contract cannot be represented")}return r}function PI(t,e,n){if(e.type!=="object"||!lr(e.properties))throw new Re(n,"#","root object/properties contract changed");let r=Object.keys(t.properties).sort(),o=Object.keys(e.properties).sort();if(JSON.stringify(r)!==JSON.stringify(o))throw new Re(n,"#","root property identity changed");let i=[...t.required??[]].sort(),s=Array.isArray(e.required)?[...e.required].sort():[];if(JSON.stringify(i)!==JSON.stringify(s))throw new Re(n,"#","root required-property contract changed")}function vs(t,e,n){if(n.pointers.set(e,t),typeof t!="boolean"){typeof t.$anchor=="string"&&n.anchors.set(t.$anchor,t);for(let r of["$defs","properties","patternProperties"]){let o=t[r];if(lr(o))for(let[i,s]of Object.entries(o))vs(s,`${e}/${r}/${Su(i)}`,n)}for(let r of["items","contains","additionalProperties","not"]){let o=t[r];(typeof o=="boolean"||lr(o))&&vs(o,`${e}/${r}`,n)}for(let r of["prefixItems","allOf","anyOf","oneOf"]){let o=t[r];Array.isArray(o)&&o.forEach((i,s)=>vs(i,`${e}/${r}/${s}`,n))}}}function AI(t,e,n){if(!t.startsWith("#"))throw new Re(n.dialect,e,"remote references are forbidden");if(t==="#")return n.root;if(t.startsWith("#/")){let r=t.slice(1).split("/").map(i=>i.replace(/~1/g,"/").replace(/~0/g,"~")).map(Su).join("/"),o=n.pointers.get(r);if(o!==void 0)return o}else{let r=n.anchors.get(t.slice(1));if(r!==void 0)return r}throw new Re(n.dialect,e,`unresolved reference ${t}`)}function Nb(t){return(0,Db.createHash)("sha256").update(vu(t)).digest("hex")}function vu(t){return Array.isArray(t)?`[${t.map(vu).join(",")}]`:lr(t)?`{${Object.keys(t).sort().map(e=>`${JSON.stringify(e)}:${vu(t[e])}`).join(",")}}`:JSON.stringify(t)}function Tu(t){return JSON.parse(JSON.stringify(t))}function Su(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}function lr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var _s=require("node:crypto");var Ss=require("node:perf_hooks");var qb=require("node:dns/promises"),so=require("node:net");var Y=class extends Error{category;code;retryable;providerId;statusCode;retryAfterMs;requestId;constructor(e,n){super(e,n.cause!==void 0?{cause:n.cause}:void 0),this.name="ProviderError",this.category=n.category,this.code=n.code,this.retryable=n.retryable??!1,this.providerId=n.providerId,this.statusCode=n.statusCode,this.retryAfterMs=n.retryAfterMs,this.requestId=n.requestId}};function Bb(t,e=Date.now()){if(!t)return;let n=Number(t.trim());if(Number.isFinite(n)&&n>=0)return Math.ceil(n*1e3);let r=Date.parse(t);if(Number.isFinite(r))return Math.max(0,r-e)}function RI(t){if(typeof t=="string")return t;if(!t||typeof t!="object")return"";let e=t,n=e.error;if(typeof n=="string")return n;if(n&&typeof n=="object"){let r=n;if(typeof r.message=="string")return r.message;if(typeof r.type=="string")return r.type}return typeof e.message=="string"?e.message:""}function Eu(t,e){return e.some(n=>t.includes(n))}function $b(t){let e=RI(t.body).trim(),n=e.toLowerCase(),r=e?`: ${e.slice(0,1e3)}`:"",o={providerId:t.providerId,statusCode:t.statusCode,retryAfterMs:t.retryAfterMs,requestId:t.requestId};return t.statusCode===401?new Y(`Provider authentication failed${r}`,{...o,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):t.statusCode===403?new Y(`Provider authorization failed${r}`,{...o,category:"authorization",code:"PROVIDER_AUTHORIZATION_FAILED"}):Eu(n,["api key not valid","invalid api key","api key expired","api_key_invalid","invalid authentication credentials","missing api key"])?new Y(`Provider authentication failed${r}`,{...o,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):t.statusCode===429?new Y(`Provider rate limit reached${r}`,{...o,category:"rate_limit",code:"PROVIDER_RATE_LIMITED",retryable:!0}):hs(n)?new Y(`Provider context window exceeded${r}`,{...o,category:"context_overflow",code:"PROVIDER_CONTEXT_OVERFLOW"}):Eu(n,["safety","content policy","blocked_reason","responsible_ai_policy_violation"])?new Y(`Provider safety policy refused the request${r}`,{...o,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):t.statusCode===404||Eu(n,["model not found","model does not exist","unsupported model","unknown provider for model"])?new Y(`Provider model is unavailable${r}`,{...o,category:"unsupported_model",code:"PROVIDER_MODEL_UNSUPPORTED"}):t.statusCode===408||t.statusCode===504?new Y(`Provider request timed out${r}`,{...o,category:"timeout",code:"PROVIDER_TIMEOUT",retryable:!0}):t.statusCode>=500||t.statusCode===409||t.statusCode===425?new Y(`Provider server error${r}`,{...o,category:"server",code:"PROVIDER_SERVER_ERROR",retryable:!0}):new Y(`Provider rejected the request with HTTP ${t.statusCode}${r}`,{...o,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}function V(t,e,n){return new Y(`Malformed ${t} response: ${e}`,{providerId:t,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",...n!==void 0?{cause:n}:{}})}function io(t,e){return Z("xeno.provider.capability_mismatches",1,{component:"provider_contract",provider:t,capability:e,error_code:"provider_capability_unsupported"}),new Y(`${t} does not advertise the required ${e} capability`,{providerId:t,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}var jb=new Set(["metadata.google.internal","metadata.azure.internal","instance-data.ec2.internal"]);function De(t){return new Y(`Provider endpoint rejected: ${t}`,{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"})}function CI(t){let e=t.split(".");if(e.length!==4)return null;let n=e.map(r=>Number(r));return n.every(r=>Number.isInteger(r)&&r>=0&&r<=255)?n:null}function Ub(t){let e=CI(t);if(!e)return"public";let[n,r]=e;return n===0?"unspecified":n===127?"loopback":n===169&&r===254?"link-local":n===10||n===172&&r>=16&&r<=31||n===192&&r===168?"private":"public"}function Ts(t){let e=t.toLowerCase().replace(/^\[|\]$/g,"").split("%")[0];(0,so.isIP)(e)===6&&(e=new URL(`http://[${e}]`).hostname.slice(1,-1));let n=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(e);if(n){let r=Number.parseInt(n[1],16),o=Number.parseInt(n[2],16);return`${r>>8}.${r&255}.${o>>8}.${o&255}`}return e}function Xb(t){let e=Ts(t);return(0,so.isIP)(e)===4?Ub(e):e==="::"||e==="::0"?"unspecified":e==="::1"?"loopback":e.startsWith("::ffff:")?Ub(e.slice(7)):/^f[cd]/.test(e)?"private":/^fe[89ab]/.test(e)?"link-local":"public"}function Fb(t){return t==="example"||t.endsWith(".example")||t==="test"||t.endsWith(".test")||t==="invalid"||t.endsWith(".invalid")}function MI(t){return t==="localhost"||t.endsWith(".localhost")}function Gb(t,e={}){let n;try{n=new URL(t)}catch{throw De("the URL is invalid")}if(n.username||n.password)throw De("embedded credentials are forbidden");if(n.hash||n.search)throw De("base URLs cannot contain a query or fragment");if(!n.hostname||n.hostname.includes("%"))throw De("the hostname is empty or ambiguous");if(jb.has(n.hostname.toLowerCase()))throw De("cloud metadata destinations are forbidden");if(n.protocol!=="https:"&&n.protocol!=="http:")throw De(`scheme ${n.protocol} is unsupported`);let r=e.profile??"public-https";if(n.protocol==="http:"&&r!=="local-network")throw De("plain HTTP requires the explicit local-network profile");let o=n.hostname.replace(/^\[|\]$/g,""),i=(0,so.isIP)(o)?Xb(o):null;if(i==="link-local"||i==="unspecified")throw De(`${i} destinations are forbidden`);if(r==="public-https"&&(i==="private"||i==="loopback"||MI(n.hostname)))throw De("private and loopback destinations require the local-network profile");if(r==="local-network"&&n.protocol==="http:"&&i==="public"&&!e.allowedHosts?.includes(n.hostname))throw De("local-network HTTP must resolve to loopback or a private address");return n}async function zb(t,e={}){let n=t.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(jb.has(n))throw De("cloud metadata destinations are forbidden");let r=new Set((e.allowedHosts??[]).map(s=>s.toLowerCase())),o=(0,so.isIP)(n)?[n]:Fb(n)?[]:e.resolveHostname?await e.resolveHostname(n):(await(0,qb.lookup)(n,{all:!0,verbatim:!0})).map(s=>s.address);if(!o.length&&!Fb(n))throw De("DNS resolution returned no addresses");let i=e.profile??"public-https";for(let s of o){let a=Xb(s);if(a==="link-local"||a==="unspecified")throw De(`DNS resolved to a forbidden ${a} address`);if(i==="public-https"&&a!=="public"&&!r.has(n))throw De(`DNS resolved public endpoint to ${a} address ${s}`);if(i==="local-network"&&t.protocol==="http:"&&a==="public"&&!r.has(n))throw De(`local-network HTTP resolved to public address ${s}`)}return o}var Wb=require("node:http"),Hb=require("node:https"),_u=require("node:net"),Vb=require("node:events");function Jb(t,e){return{dispatch(n,r){let o,i=!1,s=u=>{i||(i=!0,o?.destroy(),r.onError(u))},a=e[0];if(!a||!(0,_u.isIP)(a)||new URL(n.origin).origin!==t.origin)return queueMicrotask(()=>s(new Error("Provider connection has no authorized pinned address"))),!0;let c=n.headers??{},l=(t.protocol==="https:"?Hb.request:Wb.request)(new URL(n.path,t.origin),{method:n.method,headers:c,agent:!1,rejectUnauthorized:!0,lookup:(u,d,m)=>{let p={address:a,family:(0,_u.isIP)(a)};typeof d=="object"&&d.all?m(null,[p]):m(null,a,p.family)}},u=>{o=u;let d=u.rawHeaders.map(p=>Buffer.from(p)),m=()=>u.resume();r.onHeaders(u.statusCode??500,d,m,u.statusMessage??"")===!1&&u.pause(),u.on("data",p=>{r.onData(p)||u.pause()}),u.on("end",()=>{i||(i=!0,r.onComplete(u.rawTrailers.map(p=>Buffer.from(p))))}),u.on("error",s),u.on("aborted",()=>s(new Error("Provider response was interrupted")))});return l.on("socket",u=>{u.once("connect",()=>{(!u.remoteAddress||Ts(u.remoteAddress)!==Ts(a))&&l.destroy(new Error("Provider socket did not connect to its authorized address"))})}),l.on("error",s),r.onConnect(u=>l.destroy(u??new Error("Provider request aborted"))),(async()=>{try{let u=n.body;if(typeof u=="string"||u instanceof Uint8Array)l.end(u);else{if(u)for await(let d of u){if(l.destroyed)return;l.write(d)||await(0,Vb.once)(l,"drain")}l.end()}}catch(u){l.destroy(u instanceof Error?u:new Error("Provider request body failed"))}})(),!0}}}var ur={connectTimeoutMs:15e3,totalTimeoutMs:12e4,idleTimeoutMs:3e4,maxResponseBytes:8*1024*1024,maxHeaderBytes:64*1024,maxEventBytes:1024*1024};function OI(t={}){for(let[e,n]of Object.entries(t))if(n!==void 0&&(!Number.isSafeInteger(n)||n<1))throw V("provider-transport",`${e} must be a positive safe integer`);return{connectTimeoutMs:Math.max(100,t.connectTimeoutMs??ur.connectTimeoutMs),totalTimeoutMs:Math.max(100,t.totalTimeoutMs??ur.totalTimeoutMs),idleTimeoutMs:Math.max(100,t.idleTimeoutMs??ur.idleTimeoutMs),maxResponseBytes:Math.max(1024,t.maxResponseBytes??ur.maxResponseBytes),maxHeaderBytes:Math.max(1024,t.maxHeaderBytes??ur.maxHeaderBytes),maxEventBytes:Math.max(1024,t.maxEventBytes??ur.maxEventBytes)}}async function ao(t,e){let n,r=new Promise((o,i)=>{n=()=>i(new Error("Provider operation aborted")),e.addEventListener("abort",n,{once:!0}),e.aborted&&n()});try{return await Promise.race([t,r])}finally{e.removeEventListener("abort",n)}}function Es(t,e,n,r){try{return t.decode(e,{stream:n})}catch{throw V(r,"response is not valid UTF-8")}}function ku(t,e,n){let r=new Y(e==="cancelled"?"Provider request was cancelled":"Provider request timed out",{providerId:t,category:e,code:e==="cancelled"?"PROVIDER_CANCELLED":"PROVIDER_TIMEOUT",retryable:e==="timeout",...n!==void 0?{cause:n}:{}});return e==="cancelled"&&(r.name="AbortError"),r}function LI(t){let e=0;return t.forEach((n,r)=>{e+=Buffer.byteLength(r)+Buffer.byteLength(n)+4}),e}async function Kb(t,e,n,r){if(!t.body)return"";let o=t.body.getReader(),i=new TextDecoder("utf-8",{fatal:!0}),s=0,a="",c,l=()=>{c&&clearTimeout(c),c=setTimeout(()=>r.abort("idle-timeout"),n.idleTimeoutMs)};l();try{for(;;){let{value:u,done:d}=await ao(o.read(),r.signal);if(d)break;if(l(),s+=u.byteLength,s>n.maxResponseBytes)throw V(e,`response exceeded ${n.maxResponseBytes} bytes`);a+=Es(i,u,!0,e)}return a+=Es(i,void 0,!1,e),a}finally{c&&clearTimeout(c),o.cancel().catch(()=>{}),o.releaseLock()}}async function Yb(t,e,n,r){let o=Ss.performance.now(),i=OI(n.limits);Z("xeno.provider.requests",1,{component:"provider_transport",provider:n.providerId,transport:"http"});let s=new AbortController,a=null,c=e.signal,l=()=>s.abort("caller");if(c?.aborted)throw ku(n.providerId,"cancelled");c?.addEventListener("abort",l,{once:!0});let u=setTimeout(()=>{a="total",s.abort("total-timeout")},i.totalTimeoutMs),d=setTimeout(()=>{a="connect",s.abort("connect-timeout")},i.connectTimeoutMs),m;try{let p=await ao(zb(t,n.endpointPolicy),s.signal);if(s.signal.aborted)throw new Error("Provider request aborted before dispatch");let g={...e,signal:s.signal,redirect:"manual",dispatcher:Jb(t,p)},f=fetch(t,g);f.then(x=>{s.signal.aborted&&x.body?.cancel().catch(()=>{})},()=>{});let h=await ao(f,s.signal);if(m=h,clearTimeout(d),LI(h.headers)>i.maxHeaderBytes)throw V(n.providerId,`response headers exceeded ${i.maxHeaderBytes} bytes`);if(h.redirected||h.status>=300&&h.status<400)throw new Y("Provider redirects are disabled",{providerId:n.providerId,category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED",statusCode:h.status});let b=h.headers.get("content-length");if(b&&/^\d+$/.test(b)&&Number(b)>i.maxResponseBytes)throw V(n.providerId,`response exceeded ${i.maxResponseBytes} bytes`);if(!h.ok){let x=await Kb(h,n.providerId,i,s),w=x;try{w=x?JSON.parse(x):{}}catch{}throw $b({providerId:n.providerId,statusCode:h.status,body:w,retryAfterMs:Bb(h.headers.get("retry-after")),requestId:h.headers.get("request-id")??h.headers.get("x-request-id")??void 0})}let y=await ao(r(h,s,i),s.signal);return Z("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),xe("xeno.provider.request_duration_ms",Ss.performance.now()-o,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),y}catch(p){let g;throw p instanceof Y?g=p:c?.aborted||s.signal.reason==="caller"?g=ku(n.providerId,"cancelled",p):a||s.signal.reason==="idle-timeout"?g=ku(n.providerId,"timeout",p):g=new Y("Provider transport failed",{providerId:n.providerId,category:"transport",code:"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:p}),s.abort("request-failed"),m?.body&&!m.body.locked&&m.body.cancel().catch(()=>{}),Z("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:g.category,error_code:g.code}),xe("xeno.provider.request_duration_ms",Ss.performance.now()-o,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:g.category}),g}finally{clearTimeout(d),clearTimeout(u),c?.removeEventListener("abort",l)}}async function Iu(t,e,n){return Yb(t,e,n,async(r,o,i)=>{let s=await Kb(r,n.providerId,i,o),a;try{a=s?JSON.parse(s):{}}catch(c){throw V(n.providerId,"body is not valid JSON",c)}if(!a||typeof a!="object"||Array.isArray(a))throw V(n.providerId,"JSON body must be an object");return a})}async function co(t,e,n,r){return Yb(t,e,n,async(o,i,s)=>{if(!o.body)throw V(n.providerId,"stream response has no body");let a=o.body.getReader(),c=new TextDecoder("utf-8",{fatal:!0}),l="",u=0,d="message",m=[],p,g=()=>{p&&clearTimeout(p),p=setTimeout(()=>i.abort("idle-timeout"),s.idleTimeoutMs)},f=async()=>{if(m.length===0){d="message";return}let h=m.join(`
1944
1944
  `);if(Buffer.byteLength(h)>s.maxEventBytes)throw V(n.providerId,`stream event exceeded ${s.maxEventBytes} bytes`);await r({event:d,data:h}),d="message",m=[]};g();try{for(;;){let{value:h,done:b}=await ao(a.read(),i.signal);if(b)break;if(g(),u+=h.byteLength,u>s.maxResponseBytes)throw V(n.providerId,`stream exceeded ${s.maxResponseBytes} bytes`);for(l+=Es(c,h,!0,n.providerId);;){let y=l.indexOf(`
1945
1945
  `);if(y<0)break;let x=l.slice(0,y).replace(/\r$/,"");if(l=l.slice(y+1),!x)await f();else if(!x.startsWith(":")){let w=x.indexOf(":"),S=w<0?x:x.slice(0,w),E=w<0?"":x.slice(w+1).replace(/^ /,"");S==="event"?d=E:S==="data"&&m.push(E)}}}if(l+=Es(c,void 0,!1,n.providerId),l.trim())for(let h of l.split(/\r?\n/))h.startsWith("data:")?m.push(h.slice(5).replace(/^ /,"")):h.startsWith("event:")&&(d=h.slice(6).trim());await f()}finally{p&&clearTimeout(p),a.cancel().catch(()=>{}),a.releaseLock()}})}var NI={anthropic:{streaming:!1,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1},"openai-responses":{streaming:!1,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1},google:{streaming:!1,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1}};function ey(t){let e=t.kind==="anthropic"?"https://api.anthropic.com":t.kind==="google"?"https://generativelanguage.googleapis.com":t.kind==="openai-responses"?"https://api.openai.com":null;if(!t.baseURL&&!e)throw new Y("Generic OpenAI-compatible providers require baseURL",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let n=Gb(t.baseURL??e,{profile:t.endpointProfile,allowedHosts:t.allowedHosts,resolveHostname:t.resolveHostname});return n.pathname=n.pathname.replace(/\/$/,""),n}function lo(t,e){let n=new URL(t.toString());return n.pathname=`${n.pathname.replace(/\/$/,"")}/${e.replace(/^\//,"")}`,n}function ty(t){let e=t.authentication??{type:"bearer"};if(e.type==="none"||!t.apiKey)return{};if(e.type==="bearer")return{authorization:`Bearer ${t.apiKey}`};let n=e.header.trim().toLowerCase(),r=new Set(["host","content-length","connection","transfer-encoding","cookie","set-cookie","proxy-authorization"]);if(!/^[a-z0-9-]{1,80}$/.test(n)||r.has(n))throw new Y("Generic provider authentication header is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let o=e.prefix??"";if(/[\r\n]/.test(o))throw new Y("Generic provider authentication prefix is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});return{[n]:`${o}${t.apiKey}`}}function DI(t){let e;if(t.kind==="openai-compatible"){if(!t.capabilityProfile)throw new Y("Generic OpenAI-compatible providers require an explicit capabilityProfile",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"});e={...t.capabilityProfile};for(let n of["structuredOutput","promptCaching"])if(e[n])throw io("direct-openai-compatible",n);if(!!t.streaming!=!!e.streaming)throw new Y("Generic endpoint streaming config must match capabilityProfile.streaming",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}else e={...NI[t.kind],streaming:!!t.streaming,reasoningMetadata:t.kind==="anthropic"&&!!t.streaming};return{...e,vision:e.imageInput}}function uo(t,e){return{providerId:e,endpointPolicy:{profile:t.endpointProfile,allowedHosts:t.allowedHosts,resolveHostname:t.resolveHostname},limits:t.transportLimits}}function ny(t){let e=/^data:([^;,]+);base64,([a-z0-9+/=\r\n]+)$/i.exec(t);return e?{mediaType:e[1],data:e[2].replace(/\s/g,"")}:null}function mo(t){let e=Array.isArray(t.assistant_content)?t.assistant_content:[],n=Array.isArray(t.assistant_only_content)?t.assistant_only_content:[];return[...e,...n].filter(r=>r?.type==="image_url")}function ry(t){return t.filter(e=>e?.type==="image_url")}function oy(t){return t.some(e=>Array.isArray(e.content)&&e.content.some(n=>n.type==="image_url"||n.type==="tool_result"&&mo(n).length>0))}function Qb(t){let e=ny(t.image_url.url);return e?{type:"image",source:{type:"base64",media_type:e.mediaType,data:e.data}}:{type:"image",source:{type:"url",url:t.image_url.url}}}function BI(t){return t.map(e=>({role:e.role,content:typeof e.content=="string"?e.content:e.content.flatMap(n=>{if(n.type==="image_url")return[Qb(n)];if(n.type==="text")return[n];if(n.type==="tool_use")return[{type:"tool_use",id:n.id,name:n.name,input:n.input}];let r=mo(n),o=[{type:"text",text:Ye(n.content)}];return o.push(...r.map(Qb)),[{type:"tool_result",tool_use_id:n.tool_use_id,content:o,is_error:n.is_error}]})}))}function $I(t){return{type:"input_image",image_url:t.image_url.url,detail:t.image_url.detail??"auto"}}function UI(t){let e=[];for(let n of t){if(typeof n.content=="string"){e.push({role:n.role,content:n.content});continue}let r=n.content.filter(i=>i.type==="text").map(i=>i.text).join(`
1946
1946
  `),o=[...ry(n.content),...n.content.flatMap(i=>i.type==="tool_result"?mo(i):[])];(r||o.length)&&e.push({role:n.role,content:[...r?[{type:"input_text",text:r}]:[],...o.map($I)]});for(let i of n.content)i.type==="tool_use"?e.push({type:"function_call",call_id:i.id,name:i.name,arguments:JSON.stringify(i.input)}):i.type==="tool_result"&&e.push({type:"function_call_output",call_id:i.tool_use_id,output:Ye(i.content)})}return e}function Zb(t){let e=ny(t.image_url.url);return e?{inlineData:{mimeType:e.mediaType,data:e.data}}:{fileData:{fileUri:t.image_url.url}}}function FI(t){let e=new Map;for(let n of t)if(Array.isArray(n.content))for(let r of n.content)r.type==="tool_use"&&e.set(r.id,r.name);return t.map(n=>typeof n.content=="string"?{role:n.role==="assistant"?"model":"user",parts:[{text:n.content}]}:{role:n.role==="assistant"?"model":"user",parts:n.content.flatMap(r=>{if(r.type==="image_url")return[Zb(r)];if(r.type==="text")return[{text:r.text}];if(r.type==="tool_use")return[{functionCall:{id:r.id,name:r.name,args:r.input},...r.provider_metadata?.thoughtSignature?{thoughtSignature:r.provider_metadata.thoughtSignature}:{}}];let o=Ye(r.content);return[{functionResponse:{id:r.tool_use_id,name:e.get(r.tool_use_id)??"unknown_tool",response:r.is_error?{error:o}:{result:o}}},...mo(r).map(Zb)]})})}function iy(t,e){let n=e?[{role:"system",content:e}]:[];for(let r of t){if(typeof r.content=="string"){n.push({role:r.role,content:r.content});continue}let o=r.content.filter(a=>a.type==="text").map(a=>a.text).join(`
@@ -1940,7 +1940,7 @@ ${f||"(no new output)"}`,operation:y??void 0,evidence:y?.evidence}}finally{a&&c.
1940
1940
  `)}import{randomUUID as FP}from"node:crypto";var Ci=class{constructor(e=2e3){this.maxHistory=e}maxHistory;listeners=new Set;history=[];sequence=0;subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}nextSequence(){return this.sequence+=1,this.sequence}emit(e){let n={id:e.id??FP(),sequence:e.sequence??this.nextSequence(),timestamp:e.timestamp??new Date().toISOString(),...e};this.history.push(n),this.history.length>this.maxHistory&&this.history.splice(0,this.history.length-this.maxHistory);for(let r of this.listeners)Promise.resolve(r(n)).catch(()=>{})}snapshot(){return[...this.history]}};function El(t,e=240){let n={};for(let[r,o]of Object.entries(t))typeof o=="string"?n[r]=o.length>e?`${o.slice(0,e)}...`:o:typeof o=="number"||typeof o=="boolean"||o===null?n[r]=o:Array.isArray(o)?n[r]=o.slice(0,8):typeof o=="object"?n[r]="[object]":n[r]=String(o);return n}import{dirname as ZP}from"node:path";import{isAbsolute as YP,resolve as nb}from"node:path";import{basename as qP,isAbsolute as jP,resolve as XP}from"node:path";var GP=new Set(["cat","type","more","head","tail","get-content","gc","test-path","ls","dir","get-childitem","gci"]),zP=new Set(["rm","del","erase","remove-item","ri","rmdir","mkdir","md","touch","set-content","add-content","out-file","new-item","move-item","mv","move","copy-item","cp","copy"]),WP=new Map([["-path","read"],["-literalpath","read"],["-filepath","write"],["-destination","write"],["-dest","write"],["-out-file","write"]]),_l=new Set([";","&&","||","|",`
1941
1941
  `]),HP=new Map([["<","read"],[">","write"],[">>","write"],["1>","write"],["1>>","write"],["2>","write"],["2>>","write"],["*>","write"]]);function VP(t){let e=[],n="",r=null,o=!1,i=()=>{n.length>0&&e.push(n),n=""},s=a=>n==="\\"||n.startsWith("\\\\")||/^[A-Za-z]:/.test(n)||n.length===0&&a==="\\";for(let a=0;a<t.length;a+=1){let c=t[a];if(o){n+=c,o=!1;continue}if(r){c===r?r=null:c==="`"&&r==='"'?o=!0:c==="\\"&&process.platform!=="win32"&&r==='"'?s(t[a+1])?n+=c:o=!0:n+=c;continue}if(c==="'"||c==='"'){r=c;continue}if(c==="\\"&&process.platform!=="win32"){s(t[a+1])?n+=c:o=!0;continue}if(/\s/.test(c)){i(),(c===`
1942
1942
  `||c==="\r")&&e.push(`
1943
- `);continue}let l=t.slice(a,a+2);if(["&&","||",">>"].includes(l)){i(),e.push(l),a+=1;continue}if([";","|","<",">"].includes(c)){i(),e.push(c);continue}n+=c}return i(),e}function JP(t){return qP(t.replace(/\\/g,"/")).toLowerCase().replace(/\.(exe|cmd|bat|ps1|sh)$/,"")}function Zh(t){return jP(t)||qs(t)||t.startsWith("./")||t.startsWith("../")||t.startsWith(".\\")||t.startsWith("..\\")||/^[A-Za-z]:[\\/]/.test(t)}function eb(t){return/\$\(|\$\{|\$env:|%[^%]+%|^~[/\\]/i.test(t)}function KP(t){let e=[],n=VP(t),r="",o=-1;for(let i=0;i<n.length;i+=1){let s=n[i];if(_l.has(s)){r="",o=-1;continue}let a=HP.get(s);if(a){let u=n[i+1];u&&!_l.has(u)&&(e.push({path:u,access:a,source:"redirect"}),i+=1);continue}if(!r){if(s==="&"||s===".")continue;r=JP(s),o=i,(Zh(s)||eb(s))&&e.push({path:s,access:"read",source:"executable"});continue}let c=WP.get(s.toLowerCase());if(c){let u=n[i+1];u&&!_l.has(u)&&(e.push({path:u,access:c,source:"parameter"}),i+=1);continue}if(s.startsWith("-"))continue;let l=zP.has(r)?"write":GP.has(r)?"read":null;l&&i>o?e.push({path:s,access:l,source:"argument"}):Zh(s)&&e.push({path:s,access:"read",source:"argument"})}return e}function tb(t,e){let n=KP(t),r=[...e.allowedDirectories,...e.temporaryDirectories??[]];for(let o of n){if(o.access==="read"&&!e.capabilities.fileRead)return{allowed:!1,reason:`Shell ${o.source} requires file-read capability: ${o.path}`};if(o.access==="write"&&!e.capabilities.fileWrite)return{allowed:!1,reason:`Shell ${o.source} requires file-write capability: ${o.path}`};if(eb(o.path))return{allowed:!1,reason:`Shell path expression cannot be resolved safely by policy: ${o.path}`};let i=tn(o.path);if(i.length>0)return{allowed:!1,reason:`Shell path denied: ${i[0].code}: ${i[0].message} (${o.path})`};if(r.length===0)return{allowed:!1,reason:"No directories are configured for shell filesystem access."};let s=XP(e.workingDirectory??process.cwd(),o.path);if((e.deniedDirectories?.length??0)>0&&st(s,e.deniedDirectories))return{allowed:!1,reason:`Shell ${o.source} path is inside an explicitly denied directory: ${s}`};if(!st(s,r))return{allowed:!1,reason:`Shell ${o.source} path is outside allowed directories: ${s}`}}return{allowed:!0,reason:"shell policy check passed"}}var kl=new Set(["Read","Glob","Grep","LS","NotebookRead","MemoryRead","ReadImage","ElfAnalyze","LspDefinition","LspDiagnostics","LspHover","LspReferences"]),Il=new Set(["Write","Edit","NotebookEdit","MemoryWrite"]),rb=new Set(["Bash"]);function yr(t,e){let n=e?.workingDirectory;return n&&!YP(t)?nb(n,t):nb(t)}function wr(t,e,n){switch(G(t)){case"Read":case"ElfAnalyze":case"Write":case"Edit":case"MemoryRead":case"MemoryWrite":return typeof e.file_path=="string"&&e.file_path.length>0?yr(e.file_path,n):null;case"ReadImage":return typeof e.path=="string"&&e.path.length>0?yr(e.path,n):null;case"LS":case"Glob":case"Grep":return typeof e.path=="string"&&e.path.length>0?yr(e.path,n):null;case"NotebookRead":case"NotebookEdit":return typeof e.notebook_path=="string"&&e.notebook_path.length>0?yr(e.notebook_path,n):null;case"LspDefinition":case"LspDiagnostics":case"LspHover":case"LspReferences":return typeof e.file_path=="string"&&e.file_path.length>0?yr(e.file_path,n):null;default:return null}}function ob(t,e,n){let r=G(t);if(!n)return{allowed:!0,reason:"no sandbox"};if(kl.has(r)&&!n.capabilities.fileRead)return{allowed:!1,reason:"File read access is not enabled for this agent. Ask the user to enable it in agent settings."};if(Il.has(r)&&!n.capabilities.fileWrite)return{allowed:!1,reason:"File write access is not enabled for this agent. Ask the user to enable it in agent settings."};if(rb.has(r)&&!n.capabilities.terminal)return{allowed:!1,reason:"Terminal access is not enabled for this agent. Ask the user to enable it in agent settings."};if(rb.has(r)&&typeof e.command=="string"){let c=tb(e.command,n);if(!c.allowed)return c}let o=kl.has(r)||Il.has(r),i=[...n.allowedDirectories,...n.temporaryDirectories??[]],s=QP(r,e),a=s?tn(s):[];if(s&&a.length>0)return{allowed:!1,reason:`Access denied: ${a[0].code}: ${a[0].message} (${s})`};if(o&&(n.deniedDirectories?.length??0)>0){let c=wr(r,e,n);if(c!==null&&st(c,n.deniedDirectories))return{allowed:!1,reason:`Access denied: path ${c} is inside an explicitly denied directory.`}}if(o&&i.length>0){let c=wr(r,e,n);if(c!==null&&!st(c,i)){let l=i.join(", ");return{allowed:!1,reason:`Access denied: path ${c} is outside the agent's allowed directories: [${l}]`}}}return o&&i.length===0?{allowed:!1,reason:"No directories are configured for this agent. Ask the user to grant folder access in agent settings."}:{allowed:!0,reason:"policy check passed"}}function QP(t,e){let n=G(t),r=n==="ReadImage"||n==="LS"||n==="Glob"||n==="Grep"?"path":n==="NotebookRead"||n==="NotebookEdit"?"notebook_path":kl.has(n)||Il.has(n)?"file_path":null,o=r?e[r]:null;return typeof o=="string"&&o.length>0?o:null}var Mi=class{constructor(e){this.config=e}config;async execute(e){let n=Date.now(),{toolCall:r,traceId:o,iteration:i}=e,s=this.config.toolRegistry.projectPolicyInput(r.name,r.input),a="error"in s?s.error:tA(r.name,r.input),c="error"in s?{observabilityInput:{projection_error:!0},permissionInput:{}}:s,l={...r,input:c.observabilityInput},u=c.approvalKey?{...c.permissionInput,approval_key:c.approvalKey}:c.permissionInput,d=!e.skipToolExecutionReason&&!a,m=c.riskLevel??lA(r.name),p=this.config.operationManager??j,g=process.env.XENO_TOOL_OPERATION_RUNTIME!=="0",f=d&&g?p.register({turnId:o,generation:i,toolCallId:r.id,toolName:r.name,displayName:rA(r.name,r.input),ownerSessionId:this.config.ownerSessionId,presentation:r.input.run_in_background===!0?"background":"foreground",completionPolicy:eA(r.name,r.input),promotable:r.name==="Bash"&&r.input.run_in_background!==!0&&r.input.tty!==!0,deadlineAt:nA(r.name,r.input,this.config),renewableDeadlineMs:oA(r.name,r.input,this.config),expectedOutputs:aA(r.input.expected_outputs)??cA(r.name,u,this.config.sandbox),eventSink:this.config.eventSink}):null;f&&p.transition(f.operationId,"starting");let h=f?iA(e.signal):null;f&&h&&p.setDeadlineAbortHandler(f.operationId,()=>{h.controller.abort("OPERATION_DEADLINE_EXCEEDED")});let b=!1,y=()=>{b||(b=!0,this.config.onToolWaitStart?.())},x=()=>{b&&(b=!1,this.config.onToolWaitEnd?.())};await this.appendAuditEvent({trace_id:o,event_type:"tool_call",actor:"assistant",risk_level:m,tool_name:r.name,metadata:{iteration:i,input:El(c.observabilityInput,200)}}),d&&(this.emit({type:"tool.started",turnId:o,toolName:r.name,inputPreview:El(c.observabilityInput),iteration:i}),this.config.callbacks?.onToolStart?.(r.name,c.observabilityInput));let w;if(a)w=a;else if(e.skipToolExecutionReason)w={success:!1,output:"",error:e.skipToolExecutionReason};else try{w=await sA((async()=>{let S=await this.checkSandboxAndPermission(r.name,u,c.permissionPreview,o,i,r.id);if(ib(h?.controller.signal),S.denial)return S.denial;let E=this.config.turnDiffTracker?.inferToolPaths(r.name,c.observabilityInput)??[];this.config.turnDiffTracker?.observeBefore(E),await this.config.callbacks?.onToolWillExecute?.(r.name,c.observabilityInput),ib(h?.controller.signal),f&&p.transition(f.operationId,f.presentation==="background"?"running_background":"running_foreground");let _;try{_=await this.config.toolRegistry.execute(r.name,r.input,{signal:h?.controller.signal??e.signal,operationId:f?.operationId,authorization:S.receipt,reportProgress:f?T=>{T.activity==="waiting_for_input"?y():x(),p.reportProgress(f.operationId,T)}:void 0})}finally{x()}return this.config.turnDiffTracker?.observeAfter(E),_})(),h?.controller.signal)}catch(S){if(x(),!(S instanceof kn))throw S;let E=f?p.get(f.operationId):null,_=E?.state==="timed_out";f&&E&&!E.terminal&&p.finalize(f.operationId,"cancelled",{reason:"OPERATION_CANCELLED"}),w={success:!1,output:"",error:_?"Operation timed out: OPERATION_DEADLINE_EXCEEDED":"Operation cancelled: OPERATION_CANCELLED",retryable:_}}if(w||(w={success:!1,output:"",error:"Tool execution did not produce a result"}),f){let S=p.get(f.operationId),E=w.operation,_=E?.operationId===f.operationId;if(S&&!S.terminal&&!_){let I=await p.completeSynchronous(f.operationId,w.success,w.success?"tool_result":w.error??"tool_error");w.success&&I?.state==="failed"&&(w.success=!1,w.error=I.completionReason??"POSTCONDITION_FAILED",w.retryable=!0)}let T=p.get(f.operationId);T&&(!E||_)&&(w.operation=T,T.evidence?.length&&(w.evidence=T.evidence))}return await this.appendAuditEvent({trace_id:o,event_type:"tool_result",actor:"system",risk_level:m,tool_name:r.name,status:w.success?"ok":"error",reason:w.success?void 0:w.error,metadata:{output_preview:(w.output??"").slice(0,200),elapsed_ms:Date.now()-n}}),this.emit({type:"tool.completed",turnId:o,toolName:r.name,success:w.success,outputPreview:(w.output??"").slice(0,600),...w.error?{error:w.error}:{},...w.webContext?{webContext:w.webContext}:{},elapsedMs:Date.now()-n,iteration:i}),d&&this.config.callbacks?.onToolEnd?.(r.name,w),h?.disposeParent(),{toolCall:l,toolResult:w,executeTool:d}}async checkSandboxAndPermission(e,n,r,o,i,s){let a=ob(e,n,this.config.sandbox),c=!1;if(this.emit({type:"tool.permission",turnId:o,toolName:e,allowed:a.allowed,reason:a.reason,layer:"policy",iteration:i}),!a.allowed){let u=wr(e,n,this.config.sandbox);if(u&&this.config.onPermissionRequest&&this.config.sandbox){let d=ZP(u),m=await this.config.onPermissionRequest({toolName:e,path:u,directory:d,reason:a.reason});if(m.granted)c=!0,this.config.sandbox.temporaryDirectories=[...this.config.sandbox.temporaryDirectories??[],m.allowedDirectory??d];else return{denial:{success:!1,output:"",error:`Permission denied: ${a.reason}`}}}else return{denial:{success:!1,output:"",error:`Permission denied: ${a.reason}`}}}let l=await this.config.permissionEngine.check(e,n,{traceId:o,requesterLabel:this.config.requesterLabel??"Agent",ephemeralInputPreview:r,onWaitStart:this.config.onToolWaitStart,onWaitEnd:this.config.onToolWaitEnd});return this.emit({type:"tool.permission",turnId:o,toolName:e,allowed:l.allowed,reason:l.reason,layer:"permission",iteration:i}),l.allowed?{receipt:{turnId:o,toolCallId:s,toolName:e,iteration:i,policy:{allowed:!0,reason:a.reason,temporaryOverride:c},permission:{allowed:!0,reason:l.reason}}}:{denial:{success:!1,output:"",error:`Permission denied: ${l.reason}`}}}async appendAuditEvent(e){if(this.config.auditLogger)try{await this.config.auditLogger.append(e)}catch{}}emit(e){this.config.eventSink&&Promise.resolve(this.config.eventSink(e)).catch(()=>{})}};function eA(t,e){let n=e.completion_policy;if(n==="await"||n==="observe")return n;if(n==="detach"&&e._xeno_user_authorized_detach===!0)return"detach";if(t!=="Bash")return"await";let r=typeof e.command=="string"?e.command:"";return/\b(?:serve|server|daemon|watch|dev|tail\s+-f|journalctl\s+-f|kubectl\s+port-forward)\b/i.test(r)?"observe":"await"}function tA(t,e){if(G(t)!=="Bash")return;let n=e.completion_policy;if(n===void 0||n==="await")return;if(n!=="observe"&&n!=="detach")return{success:!1,output:"",error:`Invalid completion_policy: ${String(n)}`,retryable:!0};if(n==="detach")return e._xeno_user_authorized_detach===!0?void 0:{success:!1,output:"",error:"completion_policy=detach requires an explicit user or host-policy authorization",retryable:!1};let r=typeof e.command=="string"?e.command:"";if(!/\b(?:serve|server|daemon|watch|dev|tail\s+-f|journalctl\s+-f|kubectl\s+port-forward)\b/i.test(r))return{success:!1,output:"",error:"completion_policy=observe is valid only for recognized services or watchers; finite commands must remain await",retryable:!0}}function nA(t,e,n){let r=[e.timeout,e.timeout_ms].find(a=>typeof a=="number"&&Number.isFinite(a)&&a>0),o=G(t)==="Bash"?n.bashDefaultTimeoutMs??12e4:n.defaultOperationLeaseMs??30*6e4,i=Math.min(r??o,30*6e4),s=Math.max(0,n.operationCleanupGraceMs??5e3);return new Date(Date.now()+i+s).toISOString()}function rA(t,e){let n=typeof e.description=="string"?e.description.trim():"";if(n)return Array.from(n,o=>{let i=o.codePointAt(0)??0;return i<=31||i===127?" ":o}).join("").replace(/\s+/g," ").slice(0,120);if(G(t)!=="Bash")return;let r=typeof e.command=="string"?e.command.trim():"";if(r)return r.replace(/[\r\n]+/g," ").replace(/\s+/g," ").slice(0,80)}function oA(t,e,n){if(!(G(t)!=="Bash"||e.run_in_background!==!0||[e.timeout,e.timeout_ms].some(o=>typeof o=="number"&&Number.isFinite(o)&&o>0)))return(n.bashDefaultTimeoutMs??12e4)+Math.max(0,n.operationCleanupGraceMs??5e3)}var kn=class extends Error{};function iA(t){let e=new AbortController,n=()=>e.abort(t?.reason??"OPERATION_CANCELLED");return t?.aborted?n():t?.addEventListener("abort",n,{once:!0}),{controller:e,disposeParent:()=>t?.removeEventListener("abort",n)}}function ib(t){if(t?.aborted)throw new kn(String(t.reason??"Operation aborted"))}function sA(t,e){return e?e.aborted?Promise.reject(new kn(String(e.reason??"Operation aborted"))):new Promise((n,r)=>{let o=()=>{i(),r(new kn(String(e.reason??"Operation aborted")))},i=()=>e.removeEventListener("abort",o);e.addEventListener("abort",o,{once:!0}),t.then(s=>{i(),n(s)},s=>{i(),r(s)})}):t}function aA(t){if(!Array.isArray(t))return;let e=t.filter(n=>typeof n=="string"&&n.trim().length>0).slice(0,32).map(n=>({path:n,kind:"file",nonEmpty:!0}));return e.length>0?e:void 0}function cA(t,e,n){let r=G(t);if(r!=="Write"&&r!=="Edit"&&r!=="NotebookEdit")return;let o=wr(r,e,n);return o?[{path:o,kind:"file",nonEmpty:!1}]:void 0}function lA(t){let e=G(t);return e==="Read"||e==="ReadImage"||e==="Glob"||e==="Grep"||e==="LS"||e==="Think"||e==="dispatch_agent"||e==="ElfAnalyze"||e==="SqliteAnalyze"||e==="GcodeAnalyze"||e==="NotebookRead"||e==="MemoryRead"?"low":e==="Write"||e==="Edit"||e==="NotebookEdit"||e==="MemoryWrite"?"medium":e==="Bash"||e==="TaskStop"?"high":"medium"}var uA="[\\u0000-\\u0008\\u000E-\\u001F]",PU=new RegExp(uA);import{createHash as dA}from"node:crypto";var Te=class extends Error{dialect;path;constructor(e,n,r){super(`Tool schema cannot be projected to ${e} at ${n}: ${r}`),this.name="ToolSchemaProjectionError",this.dialect=e,this.path=n}},sb=new Set(["$schema","$id","$anchor","$defs","$comment","title","default","examples","deprecated","readOnly","writeOnly"]),mA=new Set(["type","description","enum","format","properties","required","items","minItems","maxItems","minLength","maxLength","minimum","maximum","anyOf"]);function pA(t,e){no(t);let n=Al(t),r=n,o=ab(n);if(e==="xeno")return{schema:n,dialect:e,canonicalSha256:o,projectedSha256:o,changes:[]};let i={dialect:e,root:r,pointers:new Map,anchors:new Map,changes:[],activeReferences:new Set};Oi(r,"",i);let s=Wt(r,"#",i);if(!In(s))throw new Te(e,"#","provider tool root must remain an object schema");return fA(n,s,e),{schema:s,dialect:e,canonicalSha256:o,projectedSha256:ab(s),changes:i.changes}}function xr(t,e){return t.map(n=>{let r=pA(n.input_schema,e);return{definition:{...n,input_schema:r.schema},projection:r}})}function Wt(t,e,n){if(typeof t=="boolean"){if(n.dialect!=="google")return t;if(t)return{};throw new Te(n.dialect,e,"false schemas are not representable by this provider")}if(typeof t.$ref=="string"){let o=gA(t.$ref,e,n);if(n.activeReferences.has(t.$ref))throw new Te(n.dialect,e,`recursive reference ${t.$ref} cannot be serialized safely`);let i=Object.fromEntries(Object.entries(t).filter(([a])=>a!=="$ref"&&!sb.has(a)));if(Object.keys(i).length>0){if(n.dialect==="google")throw new Te(n.dialect,e,"$ref siblings require an unsupported intersection");n.activeReferences.add(t.$ref);let a=Wt(o,`${e}/$ref`,n);n.activeReferences.delete(t.$ref);let c=Wt(i,e,n);return n.changes.push({path:e,keyword:"$ref",action:"transformed",reason:"inlined local reference with sibling intersection"}),{allOf:[a,c]}}n.activeReferences.add(t.$ref);let s=Wt(o,`${e}/$ref`,n);return n.activeReferences.delete(t.$ref),n.changes.push({path:e,keyword:"$ref",action:"transformed",reason:"inlined local reference"}),s}let r={};for(let[o,i]of Object.entries(t))if(o!=="$ref"){if(sb.has(o)||o.startsWith("x-")){o==="description"?r.description=i:n.changes.push({path:e,keyword:o,action:"omitted",reason:"provider wire metadata is not required for canonical validation"});continue}if(n.dialect==="google"&&!mA.has(o)){if(o==="const"){r.enum=[Al(i)],n.changes.push({path:e,keyword:o,action:"transformed",reason:"Google wire schema represents const as a single-value enum"});continue}if(o==="prefixItems")throw new Te(n.dialect,e,"tuple prefixItems cannot preserve the provider structural contract");n.changes.push({path:e,keyword:o,action:"omitted",reason:"constraint remains enforced by canonical local validation"});continue}if(o==="type"&&n.dialect==="google"&&Array.isArray(i)){let s=i.filter(a=>a!=="null");if(s.length!==1||i.length!==2)throw new Te(n.dialect,e,"type union cannot be represented without weakening structure");r.type=s[0],r.nullable=!0,n.changes.push({path:e,keyword:o,action:"transformed",reason:"nullable two-type union mapped to Google nullable"});continue}if(o==="properties"||o==="patternProperties"||o==="$defs"){if(!In(i))throw new Te(n.dialect,e,`${o} must be an object`);let s={};for(let[a,c]of Object.entries(i))s[a]=Wt(c,`${e}/${o}/${Rl(a)}`,n);r[o]=s;continue}if(["items","contains","additionalProperties","not"].includes(o)){r[o]=Wt(i,`${e}/${o}`,n);continue}if(["prefixItems","allOf","anyOf","oneOf"].includes(o)){if(!Array.isArray(i))throw new Te(n.dialect,e,`${o} must be an array`);r[o]=i.map((s,a)=>Wt(s,`${e}/${o}/${a}`,n));continue}r[o]=Al(i)}if(n.dialect==="google"){let o=t.type!==void 0||t.properties!==void 0||t.items!==void 0,i=r.type!==void 0||r.properties!==void 0||r.items!==void 0;if(!o&&(t.oneOf!==void 0||t.allOf!==void 0||t.not!==void 0)||o&&!i)throw new Te(n.dialect,e,"minimum structural contract cannot be represented")}return r}function fA(t,e,n){if(e.type!=="object"||!In(e.properties))throw new Te(n,"#","root object/properties contract changed");let r=Object.keys(t.properties).sort(),o=Object.keys(e.properties).sort();if(JSON.stringify(r)!==JSON.stringify(o))throw new Te(n,"#","root property identity changed");let i=[...t.required??[]].sort(),s=Array.isArray(e.required)?[...e.required].sort():[];if(JSON.stringify(i)!==JSON.stringify(s))throw new Te(n,"#","root required-property contract changed")}function Oi(t,e,n){if(n.pointers.set(e,t),typeof t!="boolean"){typeof t.$anchor=="string"&&n.anchors.set(t.$anchor,t);for(let r of["$defs","properties","patternProperties"]){let o=t[r];if(In(o))for(let[i,s]of Object.entries(o))Oi(s,`${e}/${r}/${Rl(i)}`,n)}for(let r of["items","contains","additionalProperties","not"]){let o=t[r];(typeof o=="boolean"||In(o))&&Oi(o,`${e}/${r}`,n)}for(let r of["prefixItems","allOf","anyOf","oneOf"]){let o=t[r];Array.isArray(o)&&o.forEach((i,s)=>Oi(i,`${e}/${r}/${s}`,n))}}}function gA(t,e,n){if(!t.startsWith("#"))throw new Te(n.dialect,e,"remote references are forbidden");if(t==="#")return n.root;if(t.startsWith("#/")){let r=t.slice(1).split("/").map(i=>i.replace(/~1/g,"/").replace(/~0/g,"~")).map(Rl).join("/"),o=n.pointers.get(r);if(o!==void 0)return o}else{let r=n.anchors.get(t.slice(1));if(r!==void 0)return r}throw new Te(n.dialect,e,`unresolved reference ${t}`)}function ab(t){return dA("sha256").update(Pl(t)).digest("hex")}function Pl(t){return Array.isArray(t)?`[${t.map(Pl).join(",")}]`:In(t)?`{${Object.keys(t).sort().map(e=>`${JSON.stringify(e)}:${Pl(t[e])}`).join(",")}}`:JSON.stringify(t)}function Al(t){return JSON.parse(JSON.stringify(t))}function Rl(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}function In(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}import{randomUUID as Nl}from"node:crypto";import{performance as Ml}from"node:perf_hooks";import{lookup as bA}from"node:dns/promises";import{isIP as Li}from"node:net";var K=class extends Error{category;code;retryable;providerId;statusCode;retryAfterMs;requestId;constructor(e,n){super(e,n.cause!==void 0?{cause:n.cause}:void 0),this.name="ProviderError",this.category=n.category,this.code=n.code,this.retryable=n.retryable??!1,this.providerId=n.providerId,this.statusCode=n.statusCode,this.retryAfterMs=n.retryAfterMs,this.requestId=n.requestId}};function cb(t,e=Date.now()){if(!t)return;let n=Number(t.trim());if(Number.isFinite(n)&&n>=0)return Math.ceil(n*1e3);let r=Date.parse(t);if(Number.isFinite(r))return Math.max(0,r-e)}function hA(t){if(typeof t=="string")return t;if(!t||typeof t!="object")return"";let e=t,n=e.error;if(typeof n=="string")return n;if(n&&typeof n=="object"){let r=n;if(typeof r.message=="string")return r.message;if(typeof r.type=="string")return r.type}return typeof e.message=="string"?e.message:""}function Cl(t,e){return e.some(n=>t.includes(n))}function lb(t){let e=hA(t.body).trim(),n=e.toLowerCase(),r=e?`: ${e.slice(0,1e3)}`:"",o={providerId:t.providerId,statusCode:t.statusCode,retryAfterMs:t.retryAfterMs,requestId:t.requestId};return t.statusCode===401?new K(`Provider authentication failed${r}`,{...o,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):t.statusCode===403?new K(`Provider authorization failed${r}`,{...o,category:"authorization",code:"PROVIDER_AUTHORIZATION_FAILED"}):Cl(n,["api key not valid","invalid api key","api key expired","api_key_invalid","invalid authentication credentials","missing api key"])?new K(`Provider authentication failed${r}`,{...o,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):t.statusCode===429?new K(`Provider rate limit reached${r}`,{...o,category:"rate_limit",code:"PROVIDER_RATE_LIMITED",retryable:!0}):Pi(n)?new K(`Provider context window exceeded${r}`,{...o,category:"context_overflow",code:"PROVIDER_CONTEXT_OVERFLOW"}):Cl(n,["safety","content policy","blocked_reason","responsible_ai_policy_violation"])?new K(`Provider safety policy refused the request${r}`,{...o,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):t.statusCode===404||Cl(n,["model not found","model does not exist","unsupported model"])?new K(`Provider model is unavailable${r}`,{...o,category:"unsupported_model",code:"PROVIDER_MODEL_UNSUPPORTED"}):t.statusCode===408||t.statusCode===504?new K(`Provider request timed out${r}`,{...o,category:"timeout",code:"PROVIDER_TIMEOUT",retryable:!0}):t.statusCode>=500||t.statusCode===409||t.statusCode===425?new K(`Provider server error${r}`,{...o,category:"server",code:"PROVIDER_SERVER_ERROR",retryable:!0}):new K(`Provider rejected the request with HTTP ${t.statusCode}${r}`,{...o,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}function H(t,e,n){return new K(`Malformed ${t} response: ${e}`,{providerId:t,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",...n!==void 0?{cause:n}:{}})}function vr(t,e){return Q("xeno.provider.capability_mismatches",1,{component:"provider_contract",provider:t,capability:e,error_code:"provider_capability_unsupported"}),new K(`${t} does not advertise the required ${e} capability`,{providerId:t,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}var mb=new Set(["metadata.google.internal","metadata.azure.internal","instance-data.ec2.internal"]);function Ie(t){return new K(`Provider endpoint rejected: ${t}`,{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"})}function yA(t){let e=t.split(".");if(e.length!==4)return null;let n=e.map(r=>Number(r));return n.every(r=>Number.isInteger(r)&&r>=0&&r<=255)?n:null}function ub(t){let e=yA(t);if(!e)return"public";let[n,r]=e;return n===0?"unspecified":n===127?"loopback":n===169&&r===254?"link-local":n===10||n===172&&r>=16&&r<=31||n===192&&r===168?"private":"public"}function Ni(t){let e=t.toLowerCase().replace(/^\[|\]$/g,"").split("%")[0];Li(e)===6&&(e=new URL(`http://[${e}]`).hostname.slice(1,-1));let n=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(e);if(n){let r=Number.parseInt(n[1],16),o=Number.parseInt(n[2],16);return`${r>>8}.${r&255}.${o>>8}.${o&255}`}return e}function pb(t){let e=Ni(t);return Li(e)===4?ub(e):e==="::"||e==="::0"?"unspecified":e==="::1"?"loopback":e.startsWith("::ffff:")?ub(e.slice(7)):/^f[cd]/.test(e)?"private":/^fe[89ab]/.test(e)?"link-local":"public"}function db(t){return t==="example"||t.endsWith(".example")||t==="test"||t.endsWith(".test")||t==="invalid"||t.endsWith(".invalid")}function wA(t){return t==="localhost"||t.endsWith(".localhost")}function fb(t,e={}){let n;try{n=new URL(t)}catch{throw Ie("the URL is invalid")}if(n.username||n.password)throw Ie("embedded credentials are forbidden");if(n.hash||n.search)throw Ie("base URLs cannot contain a query or fragment");if(!n.hostname||n.hostname.includes("%"))throw Ie("the hostname is empty or ambiguous");if(mb.has(n.hostname.toLowerCase()))throw Ie("cloud metadata destinations are forbidden");if(n.protocol!=="https:"&&n.protocol!=="http:")throw Ie(`scheme ${n.protocol} is unsupported`);let r=e.profile??"public-https";if(n.protocol==="http:"&&r!=="local-network")throw Ie("plain HTTP requires the explicit local-network profile");let o=n.hostname.replace(/^\[|\]$/g,""),i=Li(o)?pb(o):null;if(i==="link-local"||i==="unspecified")throw Ie(`${i} destinations are forbidden`);if(r==="public-https"&&(i==="private"||i==="loopback"||wA(n.hostname)))throw Ie("private and loopback destinations require the local-network profile");if(r==="local-network"&&n.protocol==="http:"&&i==="public"&&!e.allowedHosts?.includes(n.hostname))throw Ie("local-network HTTP must resolve to loopback or a private address");return n}async function gb(t,e={}){let n=t.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(mb.has(n))throw Ie("cloud metadata destinations are forbidden");let r=new Set((e.allowedHosts??[]).map(s=>s.toLowerCase())),o=Li(n)?[n]:db(n)?[]:e.resolveHostname?await e.resolveHostname(n):(await bA(n,{all:!0,verbatim:!0})).map(s=>s.address);if(!o.length&&!db(n))throw Ie("DNS resolution returned no addresses");let i=e.profile??"public-https";for(let s of o){let a=pb(s);if(a==="link-local"||a==="unspecified")throw Ie(`DNS resolved to a forbidden ${a} address`);if(i==="public-https"&&a!=="public"&&!r.has(n))throw Ie(`DNS resolved public endpoint to ${a} address ${s}`);if(i==="local-network"&&t.protocol==="http:"&&a==="public"&&!r.has(n))throw Ie(`local-network HTTP resolved to public address ${s}`)}return o}import{request as xA}from"node:http";import{request as vA}from"node:https";import{isIP as hb}from"node:net";import{once as TA}from"node:events";function bb(t,e){return{dispatch(n,r){let o,i=!1,s=u=>{i||(i=!0,o?.destroy(),r.onError(u))},a=e[0];if(!a||!hb(a)||new URL(n.origin).origin!==t.origin)return queueMicrotask(()=>s(new Error("Provider connection has no authorized pinned address"))),!0;let c=n.headers??{},l=(t.protocol==="https:"?vA:xA)(new URL(n.path,t.origin),{method:n.method,headers:c,agent:!1,rejectUnauthorized:!0,lookup:(u,d,m)=>{let p={address:a,family:hb(a)};typeof d=="object"&&d.all?m(null,[p]):m(null,a,p.family)}},u=>{o=u;let d=u.rawHeaders.map(p=>Buffer.from(p)),m=()=>u.resume();r.onHeaders(u.statusCode??500,d,m,u.statusMessage??"")===!1&&u.pause(),u.on("data",p=>{r.onData(p)||u.pause()}),u.on("end",()=>{i||(i=!0,r.onComplete(u.rawTrailers.map(p=>Buffer.from(p))))}),u.on("error",s),u.on("aborted",()=>s(new Error("Provider response was interrupted")))});return l.on("socket",u=>{u.once("connect",()=>{(!u.remoteAddress||Ni(u.remoteAddress)!==Ni(a))&&l.destroy(new Error("Provider socket did not connect to its authorized address"))})}),l.on("error",s),r.onConnect(u=>l.destroy(u??new Error("Provider request aborted"))),(async()=>{try{let u=n.body;if(typeof u=="string"||u instanceof Uint8Array)l.end(u);else{if(u)for await(let d of u){if(l.destroyed)return;l.write(d)||await TA(l,"drain")}l.end()}}catch(u){l.destroy(u instanceof Error?u:new Error("Provider request body failed"))}})(),!0}}}var Pn={connectTimeoutMs:15e3,totalTimeoutMs:12e4,idleTimeoutMs:3e4,maxResponseBytes:8*1024*1024,maxHeaderBytes:64*1024,maxEventBytes:1024*1024};function SA(t={}){for(let[e,n]of Object.entries(t))if(n!==void 0&&(!Number.isSafeInteger(n)||n<1))throw H("provider-transport",`${e} must be a positive safe integer`);return{connectTimeoutMs:Math.max(100,t.connectTimeoutMs??Pn.connectTimeoutMs),totalTimeoutMs:Math.max(100,t.totalTimeoutMs??Pn.totalTimeoutMs),idleTimeoutMs:Math.max(100,t.idleTimeoutMs??Pn.idleTimeoutMs),maxResponseBytes:Math.max(1024,t.maxResponseBytes??Pn.maxResponseBytes),maxHeaderBytes:Math.max(1024,t.maxHeaderBytes??Pn.maxHeaderBytes),maxEventBytes:Math.max(1024,t.maxEventBytes??Pn.maxEventBytes)}}async function Tr(t,e){let n,r=new Promise((o,i)=>{n=()=>i(new Error("Provider operation aborted")),e.addEventListener("abort",n,{once:!0}),e.aborted&&n()});try{return await Promise.race([t,r])}finally{e.removeEventListener("abort",n)}}function Di(t,e,n,r){try{return t.decode(e,{stream:n})}catch{throw H(r,"response is not valid UTF-8")}}function Ol(t,e,n){let r=new K(e==="cancelled"?"Provider request was cancelled":"Provider request timed out",{providerId:t,category:e,code:e==="cancelled"?"PROVIDER_CANCELLED":"PROVIDER_TIMEOUT",retryable:e==="timeout",...n!==void 0?{cause:n}:{}});return e==="cancelled"&&(r.name="AbortError"),r}function EA(t){let e=0;return t.forEach((n,r)=>{e+=Buffer.byteLength(r)+Buffer.byteLength(n)+4}),e}async function yb(t,e,n,r){if(!t.body)return"";let o=t.body.getReader(),i=new TextDecoder("utf-8",{fatal:!0}),s=0,a="",c,l=()=>{c&&clearTimeout(c),c=setTimeout(()=>r.abort("idle-timeout"),n.idleTimeoutMs)};l();try{for(;;){let{value:u,done:d}=await Tr(o.read(),r.signal);if(d)break;if(l(),s+=u.byteLength,s>n.maxResponseBytes)throw H(e,`response exceeded ${n.maxResponseBytes} bytes`);a+=Di(i,u,!0,e)}return a+=Di(i,void 0,!1,e),a}finally{c&&clearTimeout(c),o.cancel().catch(()=>{}),o.releaseLock()}}async function wb(t,e,n,r){let o=Ml.now(),i=SA(n.limits);Q("xeno.provider.requests",1,{component:"provider_transport",provider:n.providerId,transport:"http"});let s=new AbortController,a=null,c=e.signal,l=()=>s.abort("caller");if(c?.aborted)throw Ol(n.providerId,"cancelled");c?.addEventListener("abort",l,{once:!0});let u=setTimeout(()=>{a="total",s.abort("total-timeout")},i.totalTimeoutMs),d=setTimeout(()=>{a="connect",s.abort("connect-timeout")},i.connectTimeoutMs),m;try{let p=await Tr(gb(t,n.endpointPolicy),s.signal);if(s.signal.aborted)throw new Error("Provider request aborted before dispatch");let g={...e,signal:s.signal,redirect:"manual",dispatcher:bb(t,p)},f=fetch(t,g);f.then(x=>{s.signal.aborted&&x.body?.cancel().catch(()=>{})},()=>{});let h=await Tr(f,s.signal);if(m=h,clearTimeout(d),EA(h.headers)>i.maxHeaderBytes)throw H(n.providerId,`response headers exceeded ${i.maxHeaderBytes} bytes`);if(h.redirected||h.status>=300&&h.status<400)throw new K("Provider redirects are disabled",{providerId:n.providerId,category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED",statusCode:h.status});let b=h.headers.get("content-length");if(b&&/^\d+$/.test(b)&&Number(b)>i.maxResponseBytes)throw H(n.providerId,`response exceeded ${i.maxResponseBytes} bytes`);if(!h.ok){let x=await yb(h,n.providerId,i,s),w=x;try{w=x?JSON.parse(x):{}}catch{}throw lb({providerId:n.providerId,statusCode:h.status,body:w,retryAfterMs:cb(h.headers.get("retry-after")),requestId:h.headers.get("request-id")??h.headers.get("x-request-id")??void 0})}let y=await Tr(r(h,s,i),s.signal);return Q("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),he("xeno.provider.request_duration_ms",Ml.now()-o,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),y}catch(p){let g;throw p instanceof K?g=p:c?.aborted||s.signal.reason==="caller"?g=Ol(n.providerId,"cancelled",p):a||s.signal.reason==="idle-timeout"?g=Ol(n.providerId,"timeout",p):g=new K("Provider transport failed",{providerId:n.providerId,category:"transport",code:"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:p}),s.abort("request-failed"),m?.body&&!m.body.locked&&m.body.cancel().catch(()=>{}),Q("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:g.category,error_code:g.code}),he("xeno.provider.request_duration_ms",Ml.now()-o,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:g.category}),g}finally{clearTimeout(d),clearTimeout(u),c?.removeEventListener("abort",l)}}async function Ll(t,e,n){return wb(t,e,n,async(r,o,i)=>{let s=await yb(r,n.providerId,i,o),a;try{a=s?JSON.parse(s):{}}catch(c){throw H(n.providerId,"body is not valid JSON",c)}if(!a||typeof a!="object"||Array.isArray(a))throw H(n.providerId,"JSON body must be an object");return a})}async function Sr(t,e,n,r){return wb(t,e,n,async(o,i,s)=>{if(!o.body)throw H(n.providerId,"stream response has no body");let a=o.body.getReader(),c=new TextDecoder("utf-8",{fatal:!0}),l="",u=0,d="message",m=[],p,g=()=>{p&&clearTimeout(p),p=setTimeout(()=>i.abort("idle-timeout"),s.idleTimeoutMs)},f=async()=>{if(m.length===0){d="message";return}let h=m.join(`
1943
+ `);continue}let l=t.slice(a,a+2);if(["&&","||",">>"].includes(l)){i(),e.push(l),a+=1;continue}if([";","|","<",">"].includes(c)){i(),e.push(c);continue}n+=c}return i(),e}function JP(t){return qP(t.replace(/\\/g,"/")).toLowerCase().replace(/\.(exe|cmd|bat|ps1|sh)$/,"")}function Zh(t){return jP(t)||qs(t)||t.startsWith("./")||t.startsWith("../")||t.startsWith(".\\")||t.startsWith("..\\")||/^[A-Za-z]:[\\/]/.test(t)}function eb(t){return/\$\(|\$\{|\$env:|%[^%]+%|^~[/\\]/i.test(t)}function KP(t){let e=[],n=VP(t),r="",o=-1;for(let i=0;i<n.length;i+=1){let s=n[i];if(_l.has(s)){r="",o=-1;continue}let a=HP.get(s);if(a){let u=n[i+1];u&&!_l.has(u)&&(e.push({path:u,access:a,source:"redirect"}),i+=1);continue}if(!r){if(s==="&"||s===".")continue;r=JP(s),o=i,(Zh(s)||eb(s))&&e.push({path:s,access:"read",source:"executable"});continue}let c=WP.get(s.toLowerCase());if(c){let u=n[i+1];u&&!_l.has(u)&&(e.push({path:u,access:c,source:"parameter"}),i+=1);continue}if(s.startsWith("-"))continue;let l=zP.has(r)?"write":GP.has(r)?"read":null;l&&i>o?e.push({path:s,access:l,source:"argument"}):Zh(s)&&e.push({path:s,access:"read",source:"argument"})}return e}function tb(t,e){let n=KP(t),r=[...e.allowedDirectories,...e.temporaryDirectories??[]];for(let o of n){if(o.access==="read"&&!e.capabilities.fileRead)return{allowed:!1,reason:`Shell ${o.source} requires file-read capability: ${o.path}`};if(o.access==="write"&&!e.capabilities.fileWrite)return{allowed:!1,reason:`Shell ${o.source} requires file-write capability: ${o.path}`};if(eb(o.path))return{allowed:!1,reason:`Shell path expression cannot be resolved safely by policy: ${o.path}`};let i=tn(o.path);if(i.length>0)return{allowed:!1,reason:`Shell path denied: ${i[0].code}: ${i[0].message} (${o.path})`};if(r.length===0)return{allowed:!1,reason:"No directories are configured for shell filesystem access."};let s=XP(e.workingDirectory??process.cwd(),o.path);if((e.deniedDirectories?.length??0)>0&&st(s,e.deniedDirectories))return{allowed:!1,reason:`Shell ${o.source} path is inside an explicitly denied directory: ${s}`};if(!st(s,r))return{allowed:!1,reason:`Shell ${o.source} path is outside allowed directories: ${s}`}}return{allowed:!0,reason:"shell policy check passed"}}var kl=new Set(["Read","Glob","Grep","LS","NotebookRead","MemoryRead","ReadImage","ElfAnalyze","LspDefinition","LspDiagnostics","LspHover","LspReferences"]),Il=new Set(["Write","Edit","NotebookEdit","MemoryWrite"]),rb=new Set(["Bash"]);function yr(t,e){let n=e?.workingDirectory;return n&&!YP(t)?nb(n,t):nb(t)}function wr(t,e,n){switch(G(t)){case"Read":case"ElfAnalyze":case"Write":case"Edit":case"MemoryRead":case"MemoryWrite":return typeof e.file_path=="string"&&e.file_path.length>0?yr(e.file_path,n):null;case"ReadImage":return typeof e.path=="string"&&e.path.length>0?yr(e.path,n):null;case"LS":case"Glob":case"Grep":return typeof e.path=="string"&&e.path.length>0?yr(e.path,n):null;case"NotebookRead":case"NotebookEdit":return typeof e.notebook_path=="string"&&e.notebook_path.length>0?yr(e.notebook_path,n):null;case"LspDefinition":case"LspDiagnostics":case"LspHover":case"LspReferences":return typeof e.file_path=="string"&&e.file_path.length>0?yr(e.file_path,n):null;default:return null}}function ob(t,e,n){let r=G(t);if(!n)return{allowed:!0,reason:"no sandbox"};if(kl.has(r)&&!n.capabilities.fileRead)return{allowed:!1,reason:"File read access is not enabled for this agent. Ask the user to enable it in agent settings."};if(Il.has(r)&&!n.capabilities.fileWrite)return{allowed:!1,reason:"File write access is not enabled for this agent. Ask the user to enable it in agent settings."};if(rb.has(r)&&!n.capabilities.terminal)return{allowed:!1,reason:"Terminal access is not enabled for this agent. Ask the user to enable it in agent settings."};if(rb.has(r)&&typeof e.command=="string"){let c=tb(e.command,n);if(!c.allowed)return c}let o=kl.has(r)||Il.has(r),i=[...n.allowedDirectories,...n.temporaryDirectories??[]],s=QP(r,e),a=s?tn(s):[];if(s&&a.length>0)return{allowed:!1,reason:`Access denied: ${a[0].code}: ${a[0].message} (${s})`};if(o&&(n.deniedDirectories?.length??0)>0){let c=wr(r,e,n);if(c!==null&&st(c,n.deniedDirectories))return{allowed:!1,reason:`Access denied: path ${c} is inside an explicitly denied directory.`}}if(o&&i.length>0){let c=wr(r,e,n);if(c!==null&&!st(c,i)){let l=i.join(", ");return{allowed:!1,reason:`Access denied: path ${c} is outside the agent's allowed directories: [${l}]`}}}return o&&i.length===0?{allowed:!1,reason:"No directories are configured for this agent. Ask the user to grant folder access in agent settings."}:{allowed:!0,reason:"policy check passed"}}function QP(t,e){let n=G(t),r=n==="ReadImage"||n==="LS"||n==="Glob"||n==="Grep"?"path":n==="NotebookRead"||n==="NotebookEdit"?"notebook_path":kl.has(n)||Il.has(n)?"file_path":null,o=r?e[r]:null;return typeof o=="string"&&o.length>0?o:null}var Mi=class{constructor(e){this.config=e}config;async execute(e){let n=Date.now(),{toolCall:r,traceId:o,iteration:i}=e,s=this.config.toolRegistry.projectPolicyInput(r.name,r.input),a="error"in s?s.error:tA(r.name,r.input),c="error"in s?{observabilityInput:{projection_error:!0},permissionInput:{}}:s,l={...r,input:c.observabilityInput},u=c.approvalKey?{...c.permissionInput,approval_key:c.approvalKey}:c.permissionInput,d=!e.skipToolExecutionReason&&!a,m=c.riskLevel??lA(r.name),p=this.config.operationManager??j,g=process.env.XENO_TOOL_OPERATION_RUNTIME!=="0",f=d&&g?p.register({turnId:o,generation:i,toolCallId:r.id,toolName:r.name,displayName:rA(r.name,r.input),ownerSessionId:this.config.ownerSessionId,presentation:r.input.run_in_background===!0?"background":"foreground",completionPolicy:eA(r.name,r.input),promotable:r.name==="Bash"&&r.input.run_in_background!==!0&&r.input.tty!==!0,deadlineAt:nA(r.name,r.input,this.config),renewableDeadlineMs:oA(r.name,r.input,this.config),expectedOutputs:aA(r.input.expected_outputs)??cA(r.name,u,this.config.sandbox),eventSink:this.config.eventSink}):null;f&&p.transition(f.operationId,"starting");let h=f?iA(e.signal):null;f&&h&&p.setDeadlineAbortHandler(f.operationId,()=>{h.controller.abort("OPERATION_DEADLINE_EXCEEDED")});let b=!1,y=()=>{b||(b=!0,this.config.onToolWaitStart?.())},x=()=>{b&&(b=!1,this.config.onToolWaitEnd?.())};await this.appendAuditEvent({trace_id:o,event_type:"tool_call",actor:"assistant",risk_level:m,tool_name:r.name,metadata:{iteration:i,input:El(c.observabilityInput,200)}}),d&&(this.emit({type:"tool.started",turnId:o,toolName:r.name,inputPreview:El(c.observabilityInput),iteration:i}),this.config.callbacks?.onToolStart?.(r.name,c.observabilityInput));let w;if(a)w=a;else if(e.skipToolExecutionReason)w={success:!1,output:"",error:e.skipToolExecutionReason};else try{w=await sA((async()=>{let S=await this.checkSandboxAndPermission(r.name,u,c.permissionPreview,o,i,r.id);if(ib(h?.controller.signal),S.denial)return S.denial;let E=this.config.turnDiffTracker?.inferToolPaths(r.name,c.observabilityInput)??[];this.config.turnDiffTracker?.observeBefore(E),await this.config.callbacks?.onToolWillExecute?.(r.name,c.observabilityInput),ib(h?.controller.signal),f&&p.transition(f.operationId,f.presentation==="background"?"running_background":"running_foreground");let _;try{_=await this.config.toolRegistry.execute(r.name,r.input,{signal:h?.controller.signal??e.signal,operationId:f?.operationId,authorization:S.receipt,reportProgress:f?T=>{T.activity==="waiting_for_input"?y():x(),p.reportProgress(f.operationId,T)}:void 0})}finally{x()}return this.config.turnDiffTracker?.observeAfter(E),_})(),h?.controller.signal)}catch(S){if(x(),!(S instanceof kn))throw S;let E=f?p.get(f.operationId):null,_=E?.state==="timed_out";f&&E&&!E.terminal&&p.finalize(f.operationId,"cancelled",{reason:"OPERATION_CANCELLED"}),w={success:!1,output:"",error:_?"Operation timed out: OPERATION_DEADLINE_EXCEEDED":"Operation cancelled: OPERATION_CANCELLED",retryable:_}}if(w||(w={success:!1,output:"",error:"Tool execution did not produce a result"}),f){let S=p.get(f.operationId),E=w.operation,_=E?.operationId===f.operationId;if(S&&!S.terminal&&!_){let I=await p.completeSynchronous(f.operationId,w.success,w.success?"tool_result":w.error??"tool_error");w.success&&I?.state==="failed"&&(w.success=!1,w.error=I.completionReason??"POSTCONDITION_FAILED",w.retryable=!0)}let T=p.get(f.operationId);T&&(!E||_)&&(w.operation=T,T.evidence?.length&&(w.evidence=T.evidence))}return await this.appendAuditEvent({trace_id:o,event_type:"tool_result",actor:"system",risk_level:m,tool_name:r.name,status:w.success?"ok":"error",reason:w.success?void 0:w.error,metadata:{output_preview:(w.output??"").slice(0,200),elapsed_ms:Date.now()-n}}),this.emit({type:"tool.completed",turnId:o,toolName:r.name,success:w.success,outputPreview:(w.output??"").slice(0,600),...w.error?{error:w.error}:{},...w.webContext?{webContext:w.webContext}:{},elapsedMs:Date.now()-n,iteration:i}),d&&this.config.callbacks?.onToolEnd?.(r.name,w),h?.disposeParent(),{toolCall:l,toolResult:w,executeTool:d}}async checkSandboxAndPermission(e,n,r,o,i,s){let a=ob(e,n,this.config.sandbox),c=!1;if(this.emit({type:"tool.permission",turnId:o,toolName:e,allowed:a.allowed,reason:a.reason,layer:"policy",iteration:i}),!a.allowed){let u=wr(e,n,this.config.sandbox);if(u&&this.config.onPermissionRequest&&this.config.sandbox){let d=ZP(u),m=await this.config.onPermissionRequest({toolName:e,path:u,directory:d,reason:a.reason});if(m.granted)c=!0,this.config.sandbox.temporaryDirectories=[...this.config.sandbox.temporaryDirectories??[],m.allowedDirectory??d];else return{denial:{success:!1,output:"",error:`Permission denied: ${a.reason}`}}}else return{denial:{success:!1,output:"",error:`Permission denied: ${a.reason}`}}}let l=await this.config.permissionEngine.check(e,n,{traceId:o,requesterLabel:this.config.requesterLabel??"Agent",ephemeralInputPreview:r,onWaitStart:this.config.onToolWaitStart,onWaitEnd:this.config.onToolWaitEnd});return this.emit({type:"tool.permission",turnId:o,toolName:e,allowed:l.allowed,reason:l.reason,layer:"permission",iteration:i}),l.allowed?{receipt:{turnId:o,toolCallId:s,toolName:e,iteration:i,policy:{allowed:!0,reason:a.reason,temporaryOverride:c},permission:{allowed:!0,reason:l.reason}}}:{denial:{success:!1,output:"",error:`Permission denied: ${l.reason}`}}}async appendAuditEvent(e){if(this.config.auditLogger)try{await this.config.auditLogger.append(e)}catch{}}emit(e){this.config.eventSink&&Promise.resolve(this.config.eventSink(e)).catch(()=>{})}};function eA(t,e){let n=e.completion_policy;if(n==="await"||n==="observe")return n;if(n==="detach"&&e._xeno_user_authorized_detach===!0)return"detach";if(t!=="Bash")return"await";let r=typeof e.command=="string"?e.command:"";return/\b(?:serve|server|daemon|watch|dev|tail\s+-f|journalctl\s+-f|kubectl\s+port-forward)\b/i.test(r)?"observe":"await"}function tA(t,e){if(G(t)!=="Bash")return;let n=e.completion_policy;if(n===void 0||n==="await")return;if(n!=="observe"&&n!=="detach")return{success:!1,output:"",error:`Invalid completion_policy: ${String(n)}`,retryable:!0};if(n==="detach")return e._xeno_user_authorized_detach===!0?void 0:{success:!1,output:"",error:"completion_policy=detach requires an explicit user or host-policy authorization",retryable:!1};let r=typeof e.command=="string"?e.command:"";if(!/\b(?:serve|server|daemon|watch|dev|tail\s+-f|journalctl\s+-f|kubectl\s+port-forward)\b/i.test(r))return{success:!1,output:"",error:"completion_policy=observe is valid only for recognized services or watchers; finite commands must remain await",retryable:!0}}function nA(t,e,n){let r=[e.timeout,e.timeout_ms].find(a=>typeof a=="number"&&Number.isFinite(a)&&a>0),o=G(t)==="Bash"?n.bashDefaultTimeoutMs??12e4:n.defaultOperationLeaseMs??30*6e4,i=Math.min(r??o,30*6e4),s=Math.max(0,n.operationCleanupGraceMs??5e3);return new Date(Date.now()+i+s).toISOString()}function rA(t,e){let n=typeof e.description=="string"?e.description.trim():"";if(n)return Array.from(n,o=>{let i=o.codePointAt(0)??0;return i<=31||i===127?" ":o}).join("").replace(/\s+/g," ").slice(0,120);if(G(t)!=="Bash")return;let r=typeof e.command=="string"?e.command.trim():"";if(r)return r.replace(/[\r\n]+/g," ").replace(/\s+/g," ").slice(0,80)}function oA(t,e,n){if(!(G(t)!=="Bash"||e.run_in_background!==!0||[e.timeout,e.timeout_ms].some(o=>typeof o=="number"&&Number.isFinite(o)&&o>0)))return(n.bashDefaultTimeoutMs??12e4)+Math.max(0,n.operationCleanupGraceMs??5e3)}var kn=class extends Error{};function iA(t){let e=new AbortController,n=()=>e.abort(t?.reason??"OPERATION_CANCELLED");return t?.aborted?n():t?.addEventListener("abort",n,{once:!0}),{controller:e,disposeParent:()=>t?.removeEventListener("abort",n)}}function ib(t){if(t?.aborted)throw new kn(String(t.reason??"Operation aborted"))}function sA(t,e){return e?e.aborted?Promise.reject(new kn(String(e.reason??"Operation aborted"))):new Promise((n,r)=>{let o=()=>{i(),r(new kn(String(e.reason??"Operation aborted")))},i=()=>e.removeEventListener("abort",o);e.addEventListener("abort",o,{once:!0}),t.then(s=>{i(),n(s)},s=>{i(),r(s)})}):t}function aA(t){if(!Array.isArray(t))return;let e=t.filter(n=>typeof n=="string"&&n.trim().length>0).slice(0,32).map(n=>({path:n,kind:"file",nonEmpty:!0}));return e.length>0?e:void 0}function cA(t,e,n){let r=G(t);if(r!=="Write"&&r!=="Edit"&&r!=="NotebookEdit")return;let o=wr(r,e,n);return o?[{path:o,kind:"file",nonEmpty:!1}]:void 0}function lA(t){let e=G(t);return e==="Read"||e==="ReadImage"||e==="Glob"||e==="Grep"||e==="LS"||e==="Think"||e==="dispatch_agent"||e==="ElfAnalyze"||e==="SqliteAnalyze"||e==="GcodeAnalyze"||e==="NotebookRead"||e==="MemoryRead"?"low":e==="Write"||e==="Edit"||e==="NotebookEdit"||e==="MemoryWrite"?"medium":e==="Bash"||e==="TaskStop"?"high":"medium"}var uA="[\\u0000-\\u0008\\u000E-\\u001F]",PU=new RegExp(uA);import{createHash as dA}from"node:crypto";var Te=class extends Error{dialect;path;constructor(e,n,r){super(`Tool schema cannot be projected to ${e} at ${n}: ${r}`),this.name="ToolSchemaProjectionError",this.dialect=e,this.path=n}},sb=new Set(["$schema","$id","$anchor","$defs","$comment","title","default","examples","deprecated","readOnly","writeOnly"]),mA=new Set(["type","description","enum","format","properties","required","items","minItems","maxItems","minLength","maxLength","minimum","maximum","anyOf"]);function pA(t,e){no(t);let n=Al(t),r=n,o=ab(n);if(e==="xeno")return{schema:n,dialect:e,canonicalSha256:o,projectedSha256:o,changes:[]};let i={dialect:e,root:r,pointers:new Map,anchors:new Map,changes:[],activeReferences:new Set};Oi(r,"",i);let s=Wt(r,"#",i);if(!In(s))throw new Te(e,"#","provider tool root must remain an object schema");return fA(n,s,e),{schema:s,dialect:e,canonicalSha256:o,projectedSha256:ab(s),changes:i.changes}}function xr(t,e){return t.map(n=>{let r=pA(n.input_schema,e);return{definition:{...n,input_schema:r.schema},projection:r}})}function Wt(t,e,n){if(typeof t=="boolean"){if(n.dialect!=="google")return t;if(t)return{};throw new Te(n.dialect,e,"false schemas are not representable by this provider")}if(typeof t.$ref=="string"){let o=gA(t.$ref,e,n);if(n.activeReferences.has(t.$ref))throw new Te(n.dialect,e,`recursive reference ${t.$ref} cannot be serialized safely`);let i=Object.fromEntries(Object.entries(t).filter(([a])=>a!=="$ref"&&!sb.has(a)));if(Object.keys(i).length>0){if(n.dialect==="google")throw new Te(n.dialect,e,"$ref siblings require an unsupported intersection");n.activeReferences.add(t.$ref);let a=Wt(o,`${e}/$ref`,n);n.activeReferences.delete(t.$ref);let c=Wt(i,e,n);return n.changes.push({path:e,keyword:"$ref",action:"transformed",reason:"inlined local reference with sibling intersection"}),{allOf:[a,c]}}n.activeReferences.add(t.$ref);let s=Wt(o,`${e}/$ref`,n);return n.activeReferences.delete(t.$ref),n.changes.push({path:e,keyword:"$ref",action:"transformed",reason:"inlined local reference"}),s}let r={};for(let[o,i]of Object.entries(t))if(o!=="$ref"){if(sb.has(o)||o.startsWith("x-")){o==="description"?r.description=i:n.changes.push({path:e,keyword:o,action:"omitted",reason:"provider wire metadata is not required for canonical validation"});continue}if(n.dialect==="google"&&!mA.has(o)){if(o==="const"){r.enum=[Al(i)],n.changes.push({path:e,keyword:o,action:"transformed",reason:"Google wire schema represents const as a single-value enum"});continue}if(o==="prefixItems")throw new Te(n.dialect,e,"tuple prefixItems cannot preserve the provider structural contract");n.changes.push({path:e,keyword:o,action:"omitted",reason:"constraint remains enforced by canonical local validation"});continue}if(o==="type"&&n.dialect==="google"&&Array.isArray(i)){let s=i.filter(a=>a!=="null");if(s.length!==1||i.length!==2)throw new Te(n.dialect,e,"type union cannot be represented without weakening structure");r.type=s[0],r.nullable=!0,n.changes.push({path:e,keyword:o,action:"transformed",reason:"nullable two-type union mapped to Google nullable"});continue}if(o==="properties"||o==="patternProperties"||o==="$defs"){if(!In(i))throw new Te(n.dialect,e,`${o} must be an object`);let s={};for(let[a,c]of Object.entries(i))s[a]=Wt(c,`${e}/${o}/${Rl(a)}`,n);r[o]=s;continue}if(["items","contains","additionalProperties","not"].includes(o)){r[o]=Wt(i,`${e}/${o}`,n);continue}if(["prefixItems","allOf","anyOf","oneOf"].includes(o)){if(!Array.isArray(i))throw new Te(n.dialect,e,`${o} must be an array`);r[o]=i.map((s,a)=>Wt(s,`${e}/${o}/${a}`,n));continue}r[o]=Al(i)}if(n.dialect==="google"){let o=t.type!==void 0||t.properties!==void 0||t.items!==void 0,i=r.type!==void 0||r.properties!==void 0||r.items!==void 0;if(!o&&(t.oneOf!==void 0||t.allOf!==void 0||t.not!==void 0)||o&&!i)throw new Te(n.dialect,e,"minimum structural contract cannot be represented")}return r}function fA(t,e,n){if(e.type!=="object"||!In(e.properties))throw new Te(n,"#","root object/properties contract changed");let r=Object.keys(t.properties).sort(),o=Object.keys(e.properties).sort();if(JSON.stringify(r)!==JSON.stringify(o))throw new Te(n,"#","root property identity changed");let i=[...t.required??[]].sort(),s=Array.isArray(e.required)?[...e.required].sort():[];if(JSON.stringify(i)!==JSON.stringify(s))throw new Te(n,"#","root required-property contract changed")}function Oi(t,e,n){if(n.pointers.set(e,t),typeof t!="boolean"){typeof t.$anchor=="string"&&n.anchors.set(t.$anchor,t);for(let r of["$defs","properties","patternProperties"]){let o=t[r];if(In(o))for(let[i,s]of Object.entries(o))Oi(s,`${e}/${r}/${Rl(i)}`,n)}for(let r of["items","contains","additionalProperties","not"]){let o=t[r];(typeof o=="boolean"||In(o))&&Oi(o,`${e}/${r}`,n)}for(let r of["prefixItems","allOf","anyOf","oneOf"]){let o=t[r];Array.isArray(o)&&o.forEach((i,s)=>Oi(i,`${e}/${r}/${s}`,n))}}}function gA(t,e,n){if(!t.startsWith("#"))throw new Te(n.dialect,e,"remote references are forbidden");if(t==="#")return n.root;if(t.startsWith("#/")){let r=t.slice(1).split("/").map(i=>i.replace(/~1/g,"/").replace(/~0/g,"~")).map(Rl).join("/"),o=n.pointers.get(r);if(o!==void 0)return o}else{let r=n.anchors.get(t.slice(1));if(r!==void 0)return r}throw new Te(n.dialect,e,`unresolved reference ${t}`)}function ab(t){return dA("sha256").update(Pl(t)).digest("hex")}function Pl(t){return Array.isArray(t)?`[${t.map(Pl).join(",")}]`:In(t)?`{${Object.keys(t).sort().map(e=>`${JSON.stringify(e)}:${Pl(t[e])}`).join(",")}}`:JSON.stringify(t)}function Al(t){return JSON.parse(JSON.stringify(t))}function Rl(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}function In(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}import{randomUUID as Nl}from"node:crypto";import{performance as Ml}from"node:perf_hooks";import{lookup as bA}from"node:dns/promises";import{isIP as Li}from"node:net";var K=class extends Error{category;code;retryable;providerId;statusCode;retryAfterMs;requestId;constructor(e,n){super(e,n.cause!==void 0?{cause:n.cause}:void 0),this.name="ProviderError",this.category=n.category,this.code=n.code,this.retryable=n.retryable??!1,this.providerId=n.providerId,this.statusCode=n.statusCode,this.retryAfterMs=n.retryAfterMs,this.requestId=n.requestId}};function cb(t,e=Date.now()){if(!t)return;let n=Number(t.trim());if(Number.isFinite(n)&&n>=0)return Math.ceil(n*1e3);let r=Date.parse(t);if(Number.isFinite(r))return Math.max(0,r-e)}function hA(t){if(typeof t=="string")return t;if(!t||typeof t!="object")return"";let e=t,n=e.error;if(typeof n=="string")return n;if(n&&typeof n=="object"){let r=n;if(typeof r.message=="string")return r.message;if(typeof r.type=="string")return r.type}return typeof e.message=="string"?e.message:""}function Cl(t,e){return e.some(n=>t.includes(n))}function lb(t){let e=hA(t.body).trim(),n=e.toLowerCase(),r=e?`: ${e.slice(0,1e3)}`:"",o={providerId:t.providerId,statusCode:t.statusCode,retryAfterMs:t.retryAfterMs,requestId:t.requestId};return t.statusCode===401?new K(`Provider authentication failed${r}`,{...o,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):t.statusCode===403?new K(`Provider authorization failed${r}`,{...o,category:"authorization",code:"PROVIDER_AUTHORIZATION_FAILED"}):Cl(n,["api key not valid","invalid api key","api key expired","api_key_invalid","invalid authentication credentials","missing api key"])?new K(`Provider authentication failed${r}`,{...o,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):t.statusCode===429?new K(`Provider rate limit reached${r}`,{...o,category:"rate_limit",code:"PROVIDER_RATE_LIMITED",retryable:!0}):Pi(n)?new K(`Provider context window exceeded${r}`,{...o,category:"context_overflow",code:"PROVIDER_CONTEXT_OVERFLOW"}):Cl(n,["safety","content policy","blocked_reason","responsible_ai_policy_violation"])?new K(`Provider safety policy refused the request${r}`,{...o,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):t.statusCode===404||Cl(n,["model not found","model does not exist","unsupported model","unknown provider for model"])?new K(`Provider model is unavailable${r}`,{...o,category:"unsupported_model",code:"PROVIDER_MODEL_UNSUPPORTED"}):t.statusCode===408||t.statusCode===504?new K(`Provider request timed out${r}`,{...o,category:"timeout",code:"PROVIDER_TIMEOUT",retryable:!0}):t.statusCode>=500||t.statusCode===409||t.statusCode===425?new K(`Provider server error${r}`,{...o,category:"server",code:"PROVIDER_SERVER_ERROR",retryable:!0}):new K(`Provider rejected the request with HTTP ${t.statusCode}${r}`,{...o,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}function H(t,e,n){return new K(`Malformed ${t} response: ${e}`,{providerId:t,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",...n!==void 0?{cause:n}:{}})}function vr(t,e){return Q("xeno.provider.capability_mismatches",1,{component:"provider_contract",provider:t,capability:e,error_code:"provider_capability_unsupported"}),new K(`${t} does not advertise the required ${e} capability`,{providerId:t,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}var mb=new Set(["metadata.google.internal","metadata.azure.internal","instance-data.ec2.internal"]);function Ie(t){return new K(`Provider endpoint rejected: ${t}`,{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"})}function yA(t){let e=t.split(".");if(e.length!==4)return null;let n=e.map(r=>Number(r));return n.every(r=>Number.isInteger(r)&&r>=0&&r<=255)?n:null}function ub(t){let e=yA(t);if(!e)return"public";let[n,r]=e;return n===0?"unspecified":n===127?"loopback":n===169&&r===254?"link-local":n===10||n===172&&r>=16&&r<=31||n===192&&r===168?"private":"public"}function Ni(t){let e=t.toLowerCase().replace(/^\[|\]$/g,"").split("%")[0];Li(e)===6&&(e=new URL(`http://[${e}]`).hostname.slice(1,-1));let n=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(e);if(n){let r=Number.parseInt(n[1],16),o=Number.parseInt(n[2],16);return`${r>>8}.${r&255}.${o>>8}.${o&255}`}return e}function pb(t){let e=Ni(t);return Li(e)===4?ub(e):e==="::"||e==="::0"?"unspecified":e==="::1"?"loopback":e.startsWith("::ffff:")?ub(e.slice(7)):/^f[cd]/.test(e)?"private":/^fe[89ab]/.test(e)?"link-local":"public"}function db(t){return t==="example"||t.endsWith(".example")||t==="test"||t.endsWith(".test")||t==="invalid"||t.endsWith(".invalid")}function wA(t){return t==="localhost"||t.endsWith(".localhost")}function fb(t,e={}){let n;try{n=new URL(t)}catch{throw Ie("the URL is invalid")}if(n.username||n.password)throw Ie("embedded credentials are forbidden");if(n.hash||n.search)throw Ie("base URLs cannot contain a query or fragment");if(!n.hostname||n.hostname.includes("%"))throw Ie("the hostname is empty or ambiguous");if(mb.has(n.hostname.toLowerCase()))throw Ie("cloud metadata destinations are forbidden");if(n.protocol!=="https:"&&n.protocol!=="http:")throw Ie(`scheme ${n.protocol} is unsupported`);let r=e.profile??"public-https";if(n.protocol==="http:"&&r!=="local-network")throw Ie("plain HTTP requires the explicit local-network profile");let o=n.hostname.replace(/^\[|\]$/g,""),i=Li(o)?pb(o):null;if(i==="link-local"||i==="unspecified")throw Ie(`${i} destinations are forbidden`);if(r==="public-https"&&(i==="private"||i==="loopback"||wA(n.hostname)))throw Ie("private and loopback destinations require the local-network profile");if(r==="local-network"&&n.protocol==="http:"&&i==="public"&&!e.allowedHosts?.includes(n.hostname))throw Ie("local-network HTTP must resolve to loopback or a private address");return n}async function gb(t,e={}){let n=t.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(mb.has(n))throw Ie("cloud metadata destinations are forbidden");let r=new Set((e.allowedHosts??[]).map(s=>s.toLowerCase())),o=Li(n)?[n]:db(n)?[]:e.resolveHostname?await e.resolveHostname(n):(await bA(n,{all:!0,verbatim:!0})).map(s=>s.address);if(!o.length&&!db(n))throw Ie("DNS resolution returned no addresses");let i=e.profile??"public-https";for(let s of o){let a=pb(s);if(a==="link-local"||a==="unspecified")throw Ie(`DNS resolved to a forbidden ${a} address`);if(i==="public-https"&&a!=="public"&&!r.has(n))throw Ie(`DNS resolved public endpoint to ${a} address ${s}`);if(i==="local-network"&&t.protocol==="http:"&&a==="public"&&!r.has(n))throw Ie(`local-network HTTP resolved to public address ${s}`)}return o}import{request as xA}from"node:http";import{request as vA}from"node:https";import{isIP as hb}from"node:net";import{once as TA}from"node:events";function bb(t,e){return{dispatch(n,r){let o,i=!1,s=u=>{i||(i=!0,o?.destroy(),r.onError(u))},a=e[0];if(!a||!hb(a)||new URL(n.origin).origin!==t.origin)return queueMicrotask(()=>s(new Error("Provider connection has no authorized pinned address"))),!0;let c=n.headers??{},l=(t.protocol==="https:"?vA:xA)(new URL(n.path,t.origin),{method:n.method,headers:c,agent:!1,rejectUnauthorized:!0,lookup:(u,d,m)=>{let p={address:a,family:hb(a)};typeof d=="object"&&d.all?m(null,[p]):m(null,a,p.family)}},u=>{o=u;let d=u.rawHeaders.map(p=>Buffer.from(p)),m=()=>u.resume();r.onHeaders(u.statusCode??500,d,m,u.statusMessage??"")===!1&&u.pause(),u.on("data",p=>{r.onData(p)||u.pause()}),u.on("end",()=>{i||(i=!0,r.onComplete(u.rawTrailers.map(p=>Buffer.from(p))))}),u.on("error",s),u.on("aborted",()=>s(new Error("Provider response was interrupted")))});return l.on("socket",u=>{u.once("connect",()=>{(!u.remoteAddress||Ni(u.remoteAddress)!==Ni(a))&&l.destroy(new Error("Provider socket did not connect to its authorized address"))})}),l.on("error",s),r.onConnect(u=>l.destroy(u??new Error("Provider request aborted"))),(async()=>{try{let u=n.body;if(typeof u=="string"||u instanceof Uint8Array)l.end(u);else{if(u)for await(let d of u){if(l.destroyed)return;l.write(d)||await TA(l,"drain")}l.end()}}catch(u){l.destroy(u instanceof Error?u:new Error("Provider request body failed"))}})(),!0}}}var Pn={connectTimeoutMs:15e3,totalTimeoutMs:12e4,idleTimeoutMs:3e4,maxResponseBytes:8*1024*1024,maxHeaderBytes:64*1024,maxEventBytes:1024*1024};function SA(t={}){for(let[e,n]of Object.entries(t))if(n!==void 0&&(!Number.isSafeInteger(n)||n<1))throw H("provider-transport",`${e} must be a positive safe integer`);return{connectTimeoutMs:Math.max(100,t.connectTimeoutMs??Pn.connectTimeoutMs),totalTimeoutMs:Math.max(100,t.totalTimeoutMs??Pn.totalTimeoutMs),idleTimeoutMs:Math.max(100,t.idleTimeoutMs??Pn.idleTimeoutMs),maxResponseBytes:Math.max(1024,t.maxResponseBytes??Pn.maxResponseBytes),maxHeaderBytes:Math.max(1024,t.maxHeaderBytes??Pn.maxHeaderBytes),maxEventBytes:Math.max(1024,t.maxEventBytes??Pn.maxEventBytes)}}async function Tr(t,e){let n,r=new Promise((o,i)=>{n=()=>i(new Error("Provider operation aborted")),e.addEventListener("abort",n,{once:!0}),e.aborted&&n()});try{return await Promise.race([t,r])}finally{e.removeEventListener("abort",n)}}function Di(t,e,n,r){try{return t.decode(e,{stream:n})}catch{throw H(r,"response is not valid UTF-8")}}function Ol(t,e,n){let r=new K(e==="cancelled"?"Provider request was cancelled":"Provider request timed out",{providerId:t,category:e,code:e==="cancelled"?"PROVIDER_CANCELLED":"PROVIDER_TIMEOUT",retryable:e==="timeout",...n!==void 0?{cause:n}:{}});return e==="cancelled"&&(r.name="AbortError"),r}function EA(t){let e=0;return t.forEach((n,r)=>{e+=Buffer.byteLength(r)+Buffer.byteLength(n)+4}),e}async function yb(t,e,n,r){if(!t.body)return"";let o=t.body.getReader(),i=new TextDecoder("utf-8",{fatal:!0}),s=0,a="",c,l=()=>{c&&clearTimeout(c),c=setTimeout(()=>r.abort("idle-timeout"),n.idleTimeoutMs)};l();try{for(;;){let{value:u,done:d}=await Tr(o.read(),r.signal);if(d)break;if(l(),s+=u.byteLength,s>n.maxResponseBytes)throw H(e,`response exceeded ${n.maxResponseBytes} bytes`);a+=Di(i,u,!0,e)}return a+=Di(i,void 0,!1,e),a}finally{c&&clearTimeout(c),o.cancel().catch(()=>{}),o.releaseLock()}}async function wb(t,e,n,r){let o=Ml.now(),i=SA(n.limits);Q("xeno.provider.requests",1,{component:"provider_transport",provider:n.providerId,transport:"http"});let s=new AbortController,a=null,c=e.signal,l=()=>s.abort("caller");if(c?.aborted)throw Ol(n.providerId,"cancelled");c?.addEventListener("abort",l,{once:!0});let u=setTimeout(()=>{a="total",s.abort("total-timeout")},i.totalTimeoutMs),d=setTimeout(()=>{a="connect",s.abort("connect-timeout")},i.connectTimeoutMs),m;try{let p=await Tr(gb(t,n.endpointPolicy),s.signal);if(s.signal.aborted)throw new Error("Provider request aborted before dispatch");let g={...e,signal:s.signal,redirect:"manual",dispatcher:bb(t,p)},f=fetch(t,g);f.then(x=>{s.signal.aborted&&x.body?.cancel().catch(()=>{})},()=>{});let h=await Tr(f,s.signal);if(m=h,clearTimeout(d),EA(h.headers)>i.maxHeaderBytes)throw H(n.providerId,`response headers exceeded ${i.maxHeaderBytes} bytes`);if(h.redirected||h.status>=300&&h.status<400)throw new K("Provider redirects are disabled",{providerId:n.providerId,category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED",statusCode:h.status});let b=h.headers.get("content-length");if(b&&/^\d+$/.test(b)&&Number(b)>i.maxResponseBytes)throw H(n.providerId,`response exceeded ${i.maxResponseBytes} bytes`);if(!h.ok){let x=await yb(h,n.providerId,i,s),w=x;try{w=x?JSON.parse(x):{}}catch{}throw lb({providerId:n.providerId,statusCode:h.status,body:w,retryAfterMs:cb(h.headers.get("retry-after")),requestId:h.headers.get("request-id")??h.headers.get("x-request-id")??void 0})}let y=await Tr(r(h,s,i),s.signal);return Q("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),he("xeno.provider.request_duration_ms",Ml.now()-o,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),y}catch(p){let g;throw p instanceof K?g=p:c?.aborted||s.signal.reason==="caller"?g=Ol(n.providerId,"cancelled",p):a||s.signal.reason==="idle-timeout"?g=Ol(n.providerId,"timeout",p):g=new K("Provider transport failed",{providerId:n.providerId,category:"transport",code:"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:p}),s.abort("request-failed"),m?.body&&!m.body.locked&&m.body.cancel().catch(()=>{}),Q("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:g.category,error_code:g.code}),he("xeno.provider.request_duration_ms",Ml.now()-o,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:g.category}),g}finally{clearTimeout(d),clearTimeout(u),c?.removeEventListener("abort",l)}}async function Ll(t,e,n){return wb(t,e,n,async(r,o,i)=>{let s=await yb(r,n.providerId,i,o),a;try{a=s?JSON.parse(s):{}}catch(c){throw H(n.providerId,"body is not valid JSON",c)}if(!a||typeof a!="object"||Array.isArray(a))throw H(n.providerId,"JSON body must be an object");return a})}async function Sr(t,e,n,r){return wb(t,e,n,async(o,i,s)=>{if(!o.body)throw H(n.providerId,"stream response has no body");let a=o.body.getReader(),c=new TextDecoder("utf-8",{fatal:!0}),l="",u=0,d="message",m=[],p,g=()=>{p&&clearTimeout(p),p=setTimeout(()=>i.abort("idle-timeout"),s.idleTimeoutMs)},f=async()=>{if(m.length===0){d="message";return}let h=m.join(`
1944
1944
  `);if(Buffer.byteLength(h)>s.maxEventBytes)throw H(n.providerId,`stream event exceeded ${s.maxEventBytes} bytes`);await r({event:d,data:h}),d="message",m=[]};g();try{for(;;){let{value:h,done:b}=await Tr(a.read(),i.signal);if(b)break;if(g(),u+=h.byteLength,u>s.maxResponseBytes)throw H(n.providerId,`stream exceeded ${s.maxResponseBytes} bytes`);for(l+=Di(c,h,!0,n.providerId);;){let y=l.indexOf(`
1945
1945
  `);if(y<0)break;let x=l.slice(0,y).replace(/\r$/,"");if(l=l.slice(y+1),!x)await f();else if(!x.startsWith(":")){let w=x.indexOf(":"),S=w<0?x:x.slice(0,w),E=w<0?"":x.slice(w+1).replace(/^ /,"");S==="event"?d=E:S==="data"&&m.push(E)}}}if(l+=Di(c,void 0,!1,n.providerId),l.trim())for(let h of l.split(/\r?\n/))h.startsWith("data:")?m.push(h.slice(5).replace(/^ /,"")):h.startsWith("event:")&&(d=h.slice(6).trim());await f()}finally{p&&clearTimeout(p),a.cancel().catch(()=>{}),a.releaseLock()}})}var _A={anthropic:{streaming:!1,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1},"openai-responses":{streaming:!1,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1},google:{streaming:!1,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1}};function Tb(t){let e=t.kind==="anthropic"?"https://api.anthropic.com":t.kind==="google"?"https://generativelanguage.googleapis.com":t.kind==="openai-responses"?"https://api.openai.com":null;if(!t.baseURL&&!e)throw new K("Generic OpenAI-compatible providers require baseURL",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let n=fb(t.baseURL??e,{profile:t.endpointProfile,allowedHosts:t.allowedHosts,resolveHostname:t.resolveHostname});return n.pathname=n.pathname.replace(/\/$/,""),n}function Er(t,e){let n=new URL(t.toString());return n.pathname=`${n.pathname.replace(/\/$/,"")}/${e.replace(/^\//,"")}`,n}function Sb(t){let e=t.authentication??{type:"bearer"};if(e.type==="none"||!t.apiKey)return{};if(e.type==="bearer")return{authorization:`Bearer ${t.apiKey}`};let n=e.header.trim().toLowerCase(),r=new Set(["host","content-length","connection","transfer-encoding","cookie","set-cookie","proxy-authorization"]);if(!/^[a-z0-9-]{1,80}$/.test(n)||r.has(n))throw new K("Generic provider authentication header is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let o=e.prefix??"";if(/[\r\n]/.test(o))throw new K("Generic provider authentication prefix is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});return{[n]:`${o}${t.apiKey}`}}function kA(t){let e;if(t.kind==="openai-compatible"){if(!t.capabilityProfile)throw new K("Generic OpenAI-compatible providers require an explicit capabilityProfile",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"});e={...t.capabilityProfile};for(let n of["structuredOutput","promptCaching"])if(e[n])throw vr("direct-openai-compatible",n);if(!!t.streaming!=!!e.streaming)throw new K("Generic endpoint streaming config must match capabilityProfile.streaming",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}else e={..._A[t.kind],streaming:!!t.streaming,reasoningMetadata:t.kind==="anthropic"&&!!t.streaming};return{...e,vision:e.imageInput}}function _r(t,e){return{providerId:e,endpointPolicy:{profile:t.endpointProfile,allowedHosts:t.allowedHosts,resolveHostname:t.resolveHostname},limits:t.transportLimits}}function Eb(t){let e=/^data:([^;,]+);base64,([a-z0-9+/=\r\n]+)$/i.exec(t);return e?{mediaType:e[1],data:e[2].replace(/\s/g,"")}:null}function kr(t){let e=Array.isArray(t.assistant_content)?t.assistant_content:[],n=Array.isArray(t.assistant_only_content)?t.assistant_only_content:[];return[...e,...n].filter(r=>r?.type==="image_url")}function _b(t){return t.filter(e=>e?.type==="image_url")}function kb(t){return t.some(e=>Array.isArray(e.content)&&e.content.some(n=>n.type==="image_url"||n.type==="tool_result"&&kr(n).length>0))}function xb(t){let e=Eb(t.image_url.url);return e?{type:"image",source:{type:"base64",media_type:e.mediaType,data:e.data}}:{type:"image",source:{type:"url",url:t.image_url.url}}}function IA(t){return t.map(e=>({role:e.role,content:typeof e.content=="string"?e.content:e.content.flatMap(n=>{if(n.type==="image_url")return[xb(n)];if(n.type==="text")return[n];if(n.type==="tool_use")return[{type:"tool_use",id:n.id,name:n.name,input:n.input}];let r=kr(n),o=[{type:"text",text:$e(n.content)}];return o.push(...r.map(xb)),[{type:"tool_result",tool_use_id:n.tool_use_id,content:o,is_error:n.is_error}]})}))}function PA(t){return{type:"input_image",image_url:t.image_url.url,detail:t.image_url.detail??"auto"}}function AA(t){let e=[];for(let n of t){if(typeof n.content=="string"){e.push({role:n.role,content:n.content});continue}let r=n.content.filter(i=>i.type==="text").map(i=>i.text).join(`
1946
1946
  `),o=[..._b(n.content),...n.content.flatMap(i=>i.type==="tool_result"?kr(i):[])];(r||o.length)&&e.push({role:n.role,content:[...r?[{type:"input_text",text:r}]:[],...o.map(PA)]});for(let i of n.content)i.type==="tool_use"?e.push({type:"function_call",call_id:i.id,name:i.name,arguments:JSON.stringify(i.input)}):i.type==="tool_result"&&e.push({type:"function_call_output",call_id:i.tool_use_id,output:$e(i.content)})}return e}function vb(t){let e=Eb(t.image_url.url);return e?{inlineData:{mimeType:e.mediaType,data:e.data}}:{fileData:{fileUri:t.image_url.url}}}function RA(t){let e=new Map;for(let n of t)if(Array.isArray(n.content))for(let r of n.content)r.type==="tool_use"&&e.set(r.id,r.name);return t.map(n=>typeof n.content=="string"?{role:n.role==="assistant"?"model":"user",parts:[{text:n.content}]}:{role:n.role==="assistant"?"model":"user",parts:n.content.flatMap(r=>{if(r.type==="image_url")return[vb(r)];if(r.type==="text")return[{text:r.text}];if(r.type==="tool_use")return[{functionCall:{id:r.id,name:r.name,args:r.input},...r.provider_metadata?.thoughtSignature?{thoughtSignature:r.provider_metadata.thoughtSignature}:{}}];let o=$e(r.content);return[{functionResponse:{id:r.tool_use_id,name:e.get(r.tool_use_id)??"unknown_tool",response:r.is_error?{error:o}:{result:o}}},...kr(r).map(vb)]})})}function Ib(t,e){let n=e?[{role:"system",content:e}]:[];for(let r of t){if(typeof r.content=="string"){n.push({role:r.role,content:r.content});continue}let o=r.content.filter(a=>a.type==="text").map(a=>a.text).join(`