@xenosystem/agent-sdk 0.9.20 → 0.9.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -644,7 +644,7 @@ interface PolicyEnforcerConfig {
644
644
  };
645
645
  }
646
646
  type AgentSandbox = PolicyEnforcerConfig;
647
- declare const SDK_VERSION = "0.9.20";
647
+ declare const SDK_VERSION = "0.9.21";
648
648
  type AuditRiskLevel = "none" | "low" | "medium" | "high" | "critical";
649
649
  type AuditDecision = "allow" | "ask" | "deny";
650
650
  type AuditStatus = "ok" | "error";
package/dist/index.js CHANGED
@@ -2268,7 +2268,7 @@ try {
2268
2268
 
2269
2269
  ---
2270
2270
 
2271
- `));let h=t.systemPrompt??vM({cwd:e,model:n,date:t.date??new Date().toISOString().split("T")[0],identity:d,memory:f||void 0,sessionId:t.sessionId,executionMode:r}),y=t.dispatchAgent??(async w=>{let{createDelegatedXenoAgent:S}=await Promise.resolve().then(()=>(zm(),G2)),{agent:x}=await S({cwd:e,apiKey:o,baseURL:i,model:n,...t.fallbackModels?{fallbackModels:t.fallbackModels}:{},...t.effort?{effort:t.effort}:{},maxTokens:Math.max(512,Math.min(t.maxTokens??W2,4096)),maxIterations:Math.max(3,Math.min(t.maxIterations??J2,12)),parentSystemPrompt:h,parentExecutionMode:r,subagentRole:"explorer",permissionEngine:u,...t.sandbox?{sandbox:t.sandbox}:{},...t.onPermissionRequest?{onPermissionRequest:t.onPermissionRequest}:{}}),E=()=>{x.cancelCurrentTurn()};if(w.signal?.aborted)throw E(),new Error("dispatch_agent was aborted before the helper started");w.signal?.addEventListener("abort",E,{once:!0});try{return{output:await x.run(w.prompt)}}finally{w.signal?.removeEventListener("abort",E)}});if(t.validateToolInputs===!1)throw new Error("Agent tool input validation cannot be disabled.");let b=t.toolRegistry??Dt({cwd:e,askUser:t.askUser,dispatchAgent:y,...t.webSearchApiKey?{webSearchApiKey:t.webSearchApiKey}:{},...t.permissionConfig?.profile?{permissionProfile:t.permissionConfig.profile}:{},...t.ownerSessionId?{ownerSessionId:t.ownerSessionId}:{},...t.sandbox?{sandbox:t.sandbox}:{},...g?{memoryManager:g}:{},validateInputs:!0});return t.toolRegistry&&t.validateToolInputs===!0&&b.setValidateInputs(!0),{agent:new _o({apiKey:o,baseURL:i,ollamaBaseURL:s,...l!==void 0?{apiRequestTimeoutMs:l}:{},model:n,...t.fallbackModels?{fallbackModels:t.fallbackModels}:{},...t.effort?{effort:t.effort}:{},maxTokens:t.maxTokens??W2,maxIterations:t.maxIterations??J2,maxContextTokens:t.maxContextTokens,maxContextMessages:t.maxContextMessages,compressionKeepRecentMessages:t.compressionKeepRecentMessages,contextCompressionLlm:t.contextCompressionLlm,tokenEstimator:t.tokenEstimator,tokenAccountingAdapter:t.tokenAccountingAdapter,queryIdleTimeoutMs:t.queryIdleTimeoutMs,queryLeaseTimeoutMs:t.queryLeaseTimeoutMs,queryHardTimeoutMs:t.queryHardTimeoutMs,...t.reserveFinalSynthesisTurn!==void 0?{reserveFinalSynthesisTurn:t.reserveFinalSynthesisTurn}:{},systemPrompt:h,requesterLabel:t.requesterLabel,ownerSessionId:t.ownerSessionId,executionMode:r,permissionEngine:u,toolRegistry:b,sandbox:t.sandbox,onPermissionRequest:t.onPermissionRequest,onText:t.onText,onToolStart:t.onToolStart,onToolWillExecute:t.onToolWillExecute,onToolEnd:t.onToolEnd,onIteration:t.onIteration,onError:t.onError,onTranscriptError:t.onTranscriptError,onRuntimeEvent:t.onRuntimeEvent,runtimeEventBus:t.runtimeEventBus,turnDiffTracker:t.turnDiffTracker,onTurnDiff:t.onTurnDiff,onModeSwitchRequest:t.onModeSwitchRequest,onExecutionModeChanged:t.onExecutionModeChanged,completionGuard:t.completionGuard,maxCompletionGuardReminders:t.maxCompletionGuardReminders,progressGuardEveryIterations:t.progressGuardEveryIterations,...t.toolMiddleware?{toolMiddleware:t.toolMiddleware}:{},...t.promptSections?{promptSections:t.promptSections}:{},...t.promptSectionsTokenBudget!==void 0?{promptSectionsTokenBudget:t.promptSectionsTokenBudget}:{},...t.completionGuards?{completionGuards:t.completionGuards}:{},...t.provider?{provider:t.provider}:{},...t.session}),systemPrompt:h,permissionEngine:u,toolRegistry:b,...d?{identity:d}:{},...p?{memory:{resolved:p,...m?{projectSessionContext:m}:{},prompt:f}}:{}}}var W2,J2,ds=R(()=>{"use strict";gr();$n();$p();vv();jp();fa();rm();Dr();W2=8192,J2=50});Jr();var Tn="0.9.20";dt();ze();import{randomUUID as TL}from"node:crypto";var Rs=class{filePath;sessionId;labels;sequence=0;writeQueue=Promise.resolve();constructor(e){this.filePath=e.filePath,this.sessionId=e.sessionId,this.labels={run_id:e.runId,agent_id:e.agentId,parent_agent_id:e.parentAgentId,workspace:e.workspace,model:e.model,provider:e.provider}}get path(){return this.filePath}async append(e){let n=TL(),r={id:n,sequence:this.sequence++,timestamp:new Date().toISOString(),session_id:e.session_id??this.sessionId,...this.labels,...e};return this.writeQueue=this.writeQueue.then(async()=>{await Kr(this.filePath,JSON.stringify(r))}),await this.writeQueue,n}async read(e){let n=await ce(this.filePath);if(!n)return[];let r=Zr(n);return e?.eventType&&(r=r.filter(o=>o.event_type===e.eventType)),e?.traceId&&(r=r.filter(o=>o.trace_id===e.traceId)),e?.limit!==void 0&&(r=r.slice(-Math.max(0,e.limit))),r}async tail(e=20){let n=Math.max(1,Math.min(e,500));return this.read({limit:n})}async exportJson(e){let n=await this.read();return await me(e,JSON.stringify(n,null,2)),n.length}async flush(){await this.writeQueue}};function RL(t,e){return e.endedAt.localeCompare(t.endedAt)}function kf(t,e){t.set(e,(t.get(e)??0)+1)}function Rf(t,e){let n=Date.parse(t),r=Date.parse(e);return!Number.isFinite(n)||!Number.isFinite(r)?0:Math.max(0,r-n)}function zA(t){return t.filter(e=>e.tool_name||e.event_type.startsWith("tool_")).length}function GA(t){return t.filter(e=>e.event_type==="permission_decision").length}function WA(t){return t.filter(e=>e.status==="error"||e.event_type.endsWith("_failed")).length}function If(t){return t.split(/[_\s-]+/).filter(e=>e.length>0).map(e=>e[0].toUpperCase()+e.slice(1)).join(" ")}function Tf(t){if(!t)return;let e=Object.entries(t).filter(([,n])=>typeof n=="string"||typeof n=="number"||typeof n=="boolean").slice(0,3).map(([n,r])=>`${n}=${String(r)}`);return e.length>0?e.join(" | "):void 0}function PL(t){let e=[];for(let n=1;n<t.length;n+=1){let r=t[n-1],o=t[n],i=Date.parse(r.timestamp),s=Date.parse(o.timestamp),a=Number.isFinite(i)&&Number.isFinite(s)?Math.max(0,s-i):0;e.push({fromSequence:r.sequence,toSequence:o.sequence,fromEventType:r.event_type,toEventType:o.event_type,gapMs:a})}return e.sort((n,r)=>r.gapMs-n.gapMs).slice(0,5)}function CL(t){let e=If(t.event_type),n=t.reason;if(t.event_type==="permission_decision")e=`${t.decision==="deny"?"Denied":"Approved"} ${t.tool_name??"tool"} permission`,n=t.reason;else if(t.tool_name&&t.event_type.startsWith("tool_"))e=`${If(t.event_type)}: ${t.tool_name}`;else if(t.event_type==="delegation_completed"){let r=typeof t.metadata?.selected_from=="object"&&t.metadata?.selected_from?String(t.metadata.selected_from.role??"unknown"):void 0;e=r?`Delegation completed via ${r}`:"Delegation completed",n=Tf(t.metadata)}else t.event_type==="delegation_started"?(e="Delegation started",n=Tf(t.metadata)):t.tool_name?e=`${If(t.event_type)}: ${t.tool_name}`:n||(n=Tf(t.metadata));return{sequence:t.sequence,timestamp:t.timestamp,title:e,...n?{detail:n}:{},actor:t.actor,riskLevel:t.risk_level,...t.status?{status:t.status}:{}}}function Pf(t){let e=new Map;for(let r of t){let o=r.trace_id?.trim();if(!o)continue;let i=e.get(o);i?i.push(r):e.set(o,[r])}let n=[];for(let[r,o]of e.entries()){let i=[...o].sort((c,l)=>c.sequence-l.sequence),s=i[0]?.timestamp??"",a=i[i.length-1]?.timestamp??s;n.push({traceId:r,eventCount:i.length,startedAt:s,endedAt:a,durationMs:Rf(s,a),toolEvents:zA(i),permissionEvents:GA(i),errorEvents:WA(i),lastEventType:i[i.length-1]?.event_type??"unknown"})}return n.sort(RL)}function _L(t,e){let n=Pf(t),r=e??n[0]?.traceId;if(!r)return null;let o=t.filter(d=>d.trace_id===r).sort((d,p)=>d.sequence-p.sequence);if(o.length===0)return null;let i=new Map,s=new Map,a=new Map,c=new Map;for(let d of o){if(kf(i,d.event_type),kf(a,d.actor),kf(c,d.risk_level),!d.tool_name)continue;let p=s.get(d.tool_name)??{toolName:d.tool_name,count:0,ok:0,error:0,denied:0};p.count+=1,d.status==="error"?p.error+=1:p.ok+=1,d.decision==="deny"&&(p.denied+=1),s.set(d.tool_name,p)}let l=o[0]?.timestamp??"",u=o[o.length-1]?.timestamp??l;return{traceId:r,eventCount:o.length,startedAt:l,endedAt:u,durationMs:Rf(l,u),toolEvents:zA(o),permissionEvents:GA(o),deniedPermissions:o.filter(d=>d.event_type==="permission_decision"&&d.decision==="deny").length,errorEvents:WA(o),eventTypes:Object.fromEntries([...i.entries()].sort((d,p)=>d[0].localeCompare(p[0]))),actorSummary:Object.fromEntries([...a.entries()].sort((d,p)=>d[0].localeCompare(p[0]))),riskSummary:Object.fromEntries([...c.entries()].sort((d,p)=>d[0].localeCompare(p[0]))),toolSummary:[...s.values()].sort((d,p)=>d.toolName.localeCompare(p.toolName)),topLatencyGaps:PL(o),timeline:o.map(d=>({sequence:d.sequence,timestamp:d.timestamp,eventType:d.event_type,actor:d.actor,riskLevel:d.risk_level,...d.tool_name?{toolName:d.tool_name}:{},...d.decision?{decision:d.decision}:{},...d.status?{status:d.status}:{},...d.reason?{reason:d.reason}:{}}))}}function ML(t,e){let n=Pf(t),r=e??n[0]?.traceId;if(!r)return null;let o=t.filter(a=>a.trace_id===r).sort((a,c)=>a.sequence-c.sequence);if(o.length===0)return null;let i=o[0]?.timestamp??"",s=o[o.length-1]?.timestamp??i;return{traceId:r,startedAt:i,endedAt:s,durationMs:Rf(i,s),steps:o.map(CL)}}function OL(t){if(t.length===0)return"No audit traces recorded.";let e=["Audit traces",""];for(let n of t)e.push(`${n.traceId} | ${n.eventCount} events | ${n.toolEvents} tool | ${n.permissionEvents} perms | ${n.errorEvents} errors | ${Math.round(n.durationMs/1e3)}s`);return e.join(`
2271
+ `));let h=t.systemPrompt??vM({cwd:e,model:n,date:t.date??new Date().toISOString().split("T")[0],identity:d,memory:f||void 0,sessionId:t.sessionId,executionMode:r}),y=t.dispatchAgent??(async w=>{let{createDelegatedXenoAgent:S}=await Promise.resolve().then(()=>(zm(),G2)),{agent:x}=await S({cwd:e,apiKey:o,baseURL:i,model:n,...t.fallbackModels?{fallbackModels:t.fallbackModels}:{},...t.effort?{effort:t.effort}:{},maxTokens:Math.max(512,Math.min(t.maxTokens??W2,4096)),maxIterations:Math.max(3,Math.min(t.maxIterations??J2,12)),parentSystemPrompt:h,parentExecutionMode:r,subagentRole:"explorer",permissionEngine:u,...t.sandbox?{sandbox:t.sandbox}:{},...t.onPermissionRequest?{onPermissionRequest:t.onPermissionRequest}:{}}),E=()=>{x.cancelCurrentTurn()};if(w.signal?.aborted)throw E(),new Error("dispatch_agent was aborted before the helper started");w.signal?.addEventListener("abort",E,{once:!0});try{return{output:await x.run(w.prompt)}}finally{w.signal?.removeEventListener("abort",E)}});if(t.validateToolInputs===!1)throw new Error("Agent tool input validation cannot be disabled.");let b=t.toolRegistry??Dt({cwd:e,askUser:t.askUser,dispatchAgent:y,...t.webSearchApiKey?{webSearchApiKey:t.webSearchApiKey}:{},...t.permissionConfig?.profile?{permissionProfile:t.permissionConfig.profile}:{},...t.ownerSessionId?{ownerSessionId:t.ownerSessionId}:{},...t.sandbox?{sandbox:t.sandbox}:{},...g?{memoryManager:g}:{},validateInputs:!0});return t.toolRegistry&&t.validateToolInputs===!0&&b.setValidateInputs(!0),{agent:new _o({apiKey:o,baseURL:i,ollamaBaseURL:s,...l!==void 0?{apiRequestTimeoutMs:l}:{},model:n,...t.fallbackModels?{fallbackModels:t.fallbackModels}:{},...t.effort?{effort:t.effort}:{},maxTokens:t.maxTokens??W2,maxIterations:t.maxIterations??J2,maxContextTokens:t.maxContextTokens,maxContextMessages:t.maxContextMessages,compressionKeepRecentMessages:t.compressionKeepRecentMessages,contextCompressionLlm:t.contextCompressionLlm,tokenEstimator:t.tokenEstimator,tokenAccountingAdapter:t.tokenAccountingAdapter,queryIdleTimeoutMs:t.queryIdleTimeoutMs,queryLeaseTimeoutMs:t.queryLeaseTimeoutMs,queryHardTimeoutMs:t.queryHardTimeoutMs,...t.reserveFinalSynthesisTurn!==void 0?{reserveFinalSynthesisTurn:t.reserveFinalSynthesisTurn}:{},systemPrompt:h,requesterLabel:t.requesterLabel,ownerSessionId:t.ownerSessionId,executionMode:r,permissionEngine:u,toolRegistry:b,sandbox:t.sandbox,onPermissionRequest:t.onPermissionRequest,onText:t.onText,onToolStart:t.onToolStart,onToolWillExecute:t.onToolWillExecute,onToolEnd:t.onToolEnd,onIteration:t.onIteration,onError:t.onError,onTranscriptError:t.onTranscriptError,onRuntimeEvent:t.onRuntimeEvent,runtimeEventBus:t.runtimeEventBus,turnDiffTracker:t.turnDiffTracker,onTurnDiff:t.onTurnDiff,onModeSwitchRequest:t.onModeSwitchRequest,onExecutionModeChanged:t.onExecutionModeChanged,completionGuard:t.completionGuard,maxCompletionGuardReminders:t.maxCompletionGuardReminders,progressGuardEveryIterations:t.progressGuardEveryIterations,...t.toolMiddleware?{toolMiddleware:t.toolMiddleware}:{},...t.promptSections?{promptSections:t.promptSections}:{},...t.promptSectionsTokenBudget!==void 0?{promptSectionsTokenBudget:t.promptSectionsTokenBudget}:{},...t.completionGuards?{completionGuards:t.completionGuards}:{},...t.provider?{provider:t.provider}:{},...t.session}),systemPrompt:h,permissionEngine:u,toolRegistry:b,...d?{identity:d}:{},...p?{memory:{resolved:p,...m?{projectSessionContext:m}:{},prompt:f}}:{}}}var W2,J2,ds=R(()=>{"use strict";gr();$n();$p();vv();jp();fa();rm();Dr();W2=8192,J2=50});Jr();var Tn="0.9.21";dt();ze();import{randomUUID as TL}from"node:crypto";var Rs=class{filePath;sessionId;labels;sequence=0;writeQueue=Promise.resolve();constructor(e){this.filePath=e.filePath,this.sessionId=e.sessionId,this.labels={run_id:e.runId,agent_id:e.agentId,parent_agent_id:e.parentAgentId,workspace:e.workspace,model:e.model,provider:e.provider}}get path(){return this.filePath}async append(e){let n=TL(),r={id:n,sequence:this.sequence++,timestamp:new Date().toISOString(),session_id:e.session_id??this.sessionId,...this.labels,...e};return this.writeQueue=this.writeQueue.then(async()=>{await Kr(this.filePath,JSON.stringify(r))}),await this.writeQueue,n}async read(e){let n=await ce(this.filePath);if(!n)return[];let r=Zr(n);return e?.eventType&&(r=r.filter(o=>o.event_type===e.eventType)),e?.traceId&&(r=r.filter(o=>o.trace_id===e.traceId)),e?.limit!==void 0&&(r=r.slice(-Math.max(0,e.limit))),r}async tail(e=20){let n=Math.max(1,Math.min(e,500));return this.read({limit:n})}async exportJson(e){let n=await this.read();return await me(e,JSON.stringify(n,null,2)),n.length}async flush(){await this.writeQueue}};function RL(t,e){return e.endedAt.localeCompare(t.endedAt)}function kf(t,e){t.set(e,(t.get(e)??0)+1)}function Rf(t,e){let n=Date.parse(t),r=Date.parse(e);return!Number.isFinite(n)||!Number.isFinite(r)?0:Math.max(0,r-n)}function zA(t){return t.filter(e=>e.tool_name||e.event_type.startsWith("tool_")).length}function GA(t){return t.filter(e=>e.event_type==="permission_decision").length}function WA(t){return t.filter(e=>e.status==="error"||e.event_type.endsWith("_failed")).length}function If(t){return t.split(/[_\s-]+/).filter(e=>e.length>0).map(e=>e[0].toUpperCase()+e.slice(1)).join(" ")}function Tf(t){if(!t)return;let e=Object.entries(t).filter(([,n])=>typeof n=="string"||typeof n=="number"||typeof n=="boolean").slice(0,3).map(([n,r])=>`${n}=${String(r)}`);return e.length>0?e.join(" | "):void 0}function PL(t){let e=[];for(let n=1;n<t.length;n+=1){let r=t[n-1],o=t[n],i=Date.parse(r.timestamp),s=Date.parse(o.timestamp),a=Number.isFinite(i)&&Number.isFinite(s)?Math.max(0,s-i):0;e.push({fromSequence:r.sequence,toSequence:o.sequence,fromEventType:r.event_type,toEventType:o.event_type,gapMs:a})}return e.sort((n,r)=>r.gapMs-n.gapMs).slice(0,5)}function CL(t){let e=If(t.event_type),n=t.reason;if(t.event_type==="permission_decision")e=`${t.decision==="deny"?"Denied":"Approved"} ${t.tool_name??"tool"} permission`,n=t.reason;else if(t.tool_name&&t.event_type.startsWith("tool_"))e=`${If(t.event_type)}: ${t.tool_name}`;else if(t.event_type==="delegation_completed"){let r=typeof t.metadata?.selected_from=="object"&&t.metadata?.selected_from?String(t.metadata.selected_from.role??"unknown"):void 0;e=r?`Delegation completed via ${r}`:"Delegation completed",n=Tf(t.metadata)}else t.event_type==="delegation_started"?(e="Delegation started",n=Tf(t.metadata)):t.tool_name?e=`${If(t.event_type)}: ${t.tool_name}`:n||(n=Tf(t.metadata));return{sequence:t.sequence,timestamp:t.timestamp,title:e,...n?{detail:n}:{},actor:t.actor,riskLevel:t.risk_level,...t.status?{status:t.status}:{}}}function Pf(t){let e=new Map;for(let r of t){let o=r.trace_id?.trim();if(!o)continue;let i=e.get(o);i?i.push(r):e.set(o,[r])}let n=[];for(let[r,o]of e.entries()){let i=[...o].sort((c,l)=>c.sequence-l.sequence),s=i[0]?.timestamp??"",a=i[i.length-1]?.timestamp??s;n.push({traceId:r,eventCount:i.length,startedAt:s,endedAt:a,durationMs:Rf(s,a),toolEvents:zA(i),permissionEvents:GA(i),errorEvents:WA(i),lastEventType:i[i.length-1]?.event_type??"unknown"})}return n.sort(RL)}function _L(t,e){let n=Pf(t),r=e??n[0]?.traceId;if(!r)return null;let o=t.filter(d=>d.trace_id===r).sort((d,p)=>d.sequence-p.sequence);if(o.length===0)return null;let i=new Map,s=new Map,a=new Map,c=new Map;for(let d of o){if(kf(i,d.event_type),kf(a,d.actor),kf(c,d.risk_level),!d.tool_name)continue;let p=s.get(d.tool_name)??{toolName:d.tool_name,count:0,ok:0,error:0,denied:0};p.count+=1,d.status==="error"?p.error+=1:p.ok+=1,d.decision==="deny"&&(p.denied+=1),s.set(d.tool_name,p)}let l=o[0]?.timestamp??"",u=o[o.length-1]?.timestamp??l;return{traceId:r,eventCount:o.length,startedAt:l,endedAt:u,durationMs:Rf(l,u),toolEvents:zA(o),permissionEvents:GA(o),deniedPermissions:o.filter(d=>d.event_type==="permission_decision"&&d.decision==="deny").length,errorEvents:WA(o),eventTypes:Object.fromEntries([...i.entries()].sort((d,p)=>d[0].localeCompare(p[0]))),actorSummary:Object.fromEntries([...a.entries()].sort((d,p)=>d[0].localeCompare(p[0]))),riskSummary:Object.fromEntries([...c.entries()].sort((d,p)=>d[0].localeCompare(p[0]))),toolSummary:[...s.values()].sort((d,p)=>d.toolName.localeCompare(p.toolName)),topLatencyGaps:PL(o),timeline:o.map(d=>({sequence:d.sequence,timestamp:d.timestamp,eventType:d.event_type,actor:d.actor,riskLevel:d.risk_level,...d.tool_name?{toolName:d.tool_name}:{},...d.decision?{decision:d.decision}:{},...d.status?{status:d.status}:{},...d.reason?{reason:d.reason}:{}}))}}function ML(t,e){let n=Pf(t),r=e??n[0]?.traceId;if(!r)return null;let o=t.filter(a=>a.trace_id===r).sort((a,c)=>a.sequence-c.sequence);if(o.length===0)return null;let i=o[0]?.timestamp??"",s=o[o.length-1]?.timestamp??i;return{traceId:r,startedAt:i,endedAt:s,durationMs:Rf(i,s),steps:o.map(CL)}}function OL(t){if(t.length===0)return"No audit traces recorded.";let e=["Audit traces",""];for(let n of t)e.push(`${n.traceId} | ${n.eventCount} events | ${n.toolEvents} tool | ${n.permissionEvents} perms | ${n.errorEvents} errors | ${Math.round(n.durationMs/1e3)}s`);return e.join(`
2272
2272
  `)}function DL(t){let e=[`Audit trace ${t.traceId}`,`Started: ${t.startedAt}`,`Ended: ${t.endedAt}`,`Duration: ${t.durationMs} ms`,`Events: ${t.eventCount}`,`Tool events: ${t.toolEvents}`,`Permission events: ${t.permissionEvents}`,`Denied permissions: ${t.deniedPermissions}`,`Errors: ${t.errorEvents}`,"","Event types"];for(let[n,r]of Object.entries(t.eventTypes))e.push(` ${n}: ${r}`);e.push(""),e.push("Actors");for(let[n,r]of Object.entries(t.actorSummary))e.push(` ${n}: ${r}`);e.push(""),e.push("Risk levels");for(let[n,r]of Object.entries(t.riskSummary))e.push(` ${n}: ${r}`);if(e.push(""),e.push("Tools"),t.toolSummary.length===0)e.push(" (no tool activity)");else for(let n of t.toolSummary)e.push(` ${n.toolName}: ${n.count} total | ${n.ok} ok | ${n.error} error | ${n.denied} denied`);if(e.push(""),e.push("Largest gaps"),t.topLatencyGaps.length===0)e.push(" (no gaps)");else for(let n of t.topLatencyGaps)e.push(` #${n.fromSequence}->#${n.toSequence}: ${n.gapMs} ms | ${n.fromEventType} -> ${n.toEventType}`);e.push(""),e.push("Timeline");for(let n of t.timeline){let r=[n.eventType,n.toolName,n.decision,n.status,n.reason].filter(o=>typeof o=="string"&&o.length>0);e.push(` #${n.sequence} ${n.timestamp} | ${r.join(" | ")||n.eventType}`)}return e.join(`
2273
2273
  `)}function NL(t){return[`## Audit Trace ${t.traceId}`,"",`- Started: \`${t.startedAt}\``,`- Ended: \`${t.endedAt}\``,`- Duration: \`${t.durationMs}\` ms`,`- Events: \`${t.eventCount}\``,`- Tool events: \`${t.toolEvents}\``,`- Permission events: \`${t.permissionEvents}\``,`- Denied permissions: \`${t.deniedPermissions}\``,`- Errors: \`${t.errorEvents}\``,"","### Tool Summary","","| Tool | Total | OK | Error | Denied |","| --- | ---: | ---: | ---: | ---: |",...t.toolSummary.length>0?t.toolSummary.map(n=>`| ${n.toolName} | ${n.count} | ${n.ok} | ${n.error} | ${n.denied} |`):["| (none) | 0 | 0 | 0 | 0 |"],"","### Largest Gaps","","| From | To | Gap ms | Events |","| ---: | ---: | ---: | --- |",...t.topLatencyGaps.length>0?t.topLatencyGaps.map(n=>`| ${n.fromSequence} | ${n.toSequence} | ${n.gapMs} | ${n.fromEventType} -> ${n.toEventType} |`):["| 0 | 0 | 0 | none |"]].join(`
2274
2274
  `)}function LL(t){let e=[`## Audit Replay ${t.traceId}`,"",`- Started: \`${t.startedAt}\``,`- Ended: \`${t.endedAt}\``,`- Duration: \`${t.durationMs}\` ms`,""];for(let n of t.steps){let r=[n.actor,n.riskLevel,n.status].filter(Boolean).join(" | ");e.push(`- **#${n.sequence} ${n.title}**${r?` _(${r})_`:""}`),n.detail&&e.push(` - ${n.detail}`)}return e.join(`
@@ -2467,7 +2467,7 @@ Available tools: {toolList}`;function Xc(t){return ID.replace("{context}",t.cont
2467
2467
 
2468
2468
  ---
2469
2469
 
2470
- `);return{merged:s,memoryTokens:n.totalTokens,sessionHistoryTokens:o.totalTokens,sessionHistoryEntries:o.entries.length,totalTokens:fe(s)}}Ge();import{join as $D}from"node:path";gr();jp();fa();function XD(t){try{let e=new os({cwd:t.cwd,globalDir:t.globalDir});return new is(e)}catch(e){le("Failed to load identity system",e);return}}function BD(t){try{return new wr({cwd:t.cwd,role:t.role,sessionDir:t.sessionDir,scope:t.memoryScope,projectSessionContext:t.projectSessionContext})}catch(e){le("Failed to load memory system",e);return}}async function UD(t,e){let n=wt.getSessionDir(e.sessionManager.meta.id),r=new Rs({filePath:$D(n,"audit.jsonl"),sessionId:e.sessionManager.meta.id,workspace:e.cwd,model:e.model});try{await r.append({trace_id:`session-${e.sessionManager.meta.id}`,event_type:e.eventType,actor:"system",risk_level:"none",metadata:{model:e.model,cwd:e.cwd}})}catch(i){le("Failed to write audit session event",i)}try{await fo({cwd:e.sessionManager.meta.workingDirectory,sessionId:e.sessionManager.meta.id,role:e.sessionManager.meta.role,endedAt:new Date().toISOString()})}catch(i){le("Failed to write recent-sessions index on start",i)}let o=e.loadRestorableMessages?await e.loadRestorableMessages(e.sessionManager.meta.id,e.checkpoint):void 0;return{...t,sessionManager:e.sessionManager,checkpointManager:e.sessionManager.checkpoints,auditLogger:r,restoredMessages:o,sessionDir:n,sessionHistoryPath:$D(".xeno","sessions",`${e.sessionManager.meta.id}.md`),turnRestoreManager:new ms(n,e.cwd),memoryManager:BD({cwd:e.cwd,role:e.role,sessionDir:n,memoryScope:e.memoryScope,projectSessionContext:e.projectSessionContext})}}async function J_e(t){let e={identityResolver:XD({cwd:t.cwd,globalDir:t.identityGlobalDir})};if(t.resume===void 0)return e.memoryManager=BD({cwd:t.cwd,role:t.role,memoryScope:t.memoryScope,projectSessionContext:t.projectSessionContext}),e;let n=typeof t.resume=="string"?t.resume:void 0,r=n?await wt.find(n):await wt.findMostRecent(t.role);if(!r)throw new Error(`Session not found${n?`: ${n}`:""}`);if(t.hostBinding&&r.hostBinding&&!Joe(r.hostBinding,t.hostBinding))throw new Error("Session host binding does not match the requesting conversation authority.");let o=await zo.resume({sessionId:r.id,fromCheckpoint:t.checkpoint});return t.hostBinding&&(o.meta.hostBinding||await o.updateMeta({hostBinding:structuredClone(t.hostBinding)})),e=await UD(e,{...t,sessionManager:o,eventType:"session_resumed",checkpoint:t.checkpoint}),e}async function K_e(t,e){if(t.sessionManager)return t;let n=await zo.create({role:e.role,workingDirectory:e.cwd,model:e.model,...e.hostBinding?{hostBinding:structuredClone(e.hostBinding)}:{}});return UD({...t,identityResolver:t.identityResolver??XD({cwd:e.cwd,globalDir:e.identityGlobalDir})},{...e,sessionManager:n,eventType:"session_started"})}function Joe(t,e){return t.schemaVersion===e.schemaVersion&&t.conversationId===e.conversationId&&t.hostStorageIdentity===e.hostStorageIdentity}async function Y_e(t,e="completed"){if(!t.sessionManager)return;t.auditLogger&&await t.auditLogger.flush(),await t.sessionManager.transcript.flush(),await t.sessionManager.end(e);let n=t.sessionManager.meta,r=new Date().toISOString(),o=n.createdAt,i=Date.parse(o),s=Date.parse(r),a=Number.isFinite(i)&&Number.isFinite(s)?Math.max(0,s-i):0;DI(n.workingDirectory,{sessionId:n.id,mode:"chat",status:e,role:n.role,model:n.model,startedAt:o,endedAt:r,durationMs:a,messageCount:n.messageCount,tokenUsage:n.tokenUsage,estimatedCostUsd:_S(n.model,n.tokenUsage.input,n.tokenUsage.output)});try{await fo({cwd:n.workingDirectory,sessionId:n.id,role:n.role,endedAt:r})}catch(c){le("Failed to update recent-sessions index \u2014 next startup may scan instead of O(1) lookup",c)}}ze();import{readFileSync as FD,writeFileSync as Koe,mkdirSync as Yoe,existsSync as Qm,readdirSync as Zoe,unlinkSync as Qoe,statSync as eie}from"node:fs";import{join as LS}from"node:path";var Uc=new Map,Fc=new Map,$S=class{getConversationDir(e,n){return LS(e,".xeno","conversations",n)}getConversationPath(e,n,r){return LS(this.getConversationDir(n,r),`${e}.json`)}save(e,n){let r=this.getConversationDir(n,e.app);Qm(r)||Yoe(r,{recursive:!0});let o={...e,modified:new Date().toISOString()},i=this.getConversationPath(e.id,n,e.app);Koe(i,JSON.stringify(o,null,2)+`
2470
+ `);return{merged:s,memoryTokens:n.totalTokens,sessionHistoryTokens:o.totalTokens,sessionHistoryEntries:o.entries.length,totalTokens:fe(s)}}Ge();import{join as $D}from"node:path";gr();jp();fa();function XD(t){try{let e=new os({cwd:t.cwd,globalDir:t.globalDir});return new is(e)}catch(e){le("Failed to load identity system",e);return}}function BD(t){try{return new wr({cwd:t.cwd,role:t.role,sessionDir:t.sessionDir,scope:t.memoryScope,projectSessionContext:t.projectSessionContext})}catch(e){le("Failed to load memory system",e);return}}async function UD(t,e){let n=wt.getSessionDir(e.sessionManager.meta.id),r=new Rs({filePath:$D(n,"audit.jsonl"),sessionId:e.sessionManager.meta.id,workspace:e.cwd,model:e.model});try{await r.append({trace_id:`session-${e.sessionManager.meta.id}`,event_type:e.eventType,actor:"system",risk_level:"none",metadata:{model:e.model,cwd:e.cwd}})}catch(i){le("Failed to write audit session event",i)}try{await fo({cwd:e.sessionManager.meta.workingDirectory,sessionId:e.sessionManager.meta.id,role:e.sessionManager.meta.role,endedAt:new Date().toISOString()})}catch(i){le("Failed to write recent-sessions index on start",i)}let o=e.loadRestorableMessages?await e.loadRestorableMessages(e.sessionManager.meta.id,e.checkpoint):void 0;return{...t,sessionManager:e.sessionManager,checkpointManager:e.sessionManager.checkpoints,auditLogger:r,restoredMessages:o,sessionDir:n,sessionHistoryPath:$D(".xeno","sessions",`${e.sessionManager.meta.id}.md`),turnRestoreManager:new ms(n,e.cwd),memoryManager:BD({cwd:e.cwd,role:e.role,sessionDir:n,memoryScope:e.memoryScope,projectSessionContext:e.projectSessionContext})}}async function J_e(t){let e={identityResolver:XD({cwd:t.cwd,globalDir:t.identityGlobalDir})};if(t.resume===void 0)return e.memoryManager=BD({cwd:t.cwd,role:t.role,memoryScope:t.memoryScope,projectSessionContext:t.projectSessionContext}),e;let n=typeof t.resume=="string"?t.resume:void 0,r=n?await wt.find(n):await wt.findMostRecent({...t.role!==void 0?{role:t.role}:{},workingDirectory:t.cwd});if(!r)throw new Error(`Session not found${n?`: ${n}`:""}`);if(t.hostBinding&&r.hostBinding&&!Joe(r.hostBinding,t.hostBinding))throw new Error("Session host binding does not match the requesting conversation authority.");let o=await zo.resume({sessionId:r.id,fromCheckpoint:t.checkpoint});return t.hostBinding&&(o.meta.hostBinding||await o.updateMeta({hostBinding:structuredClone(t.hostBinding)})),e=await UD(e,{...t,sessionManager:o,eventType:"session_resumed",checkpoint:t.checkpoint}),e}async function K_e(t,e){if(t.sessionManager)return t;let n=await zo.create({role:e.role,workingDirectory:e.cwd,model:e.model,...e.hostBinding?{hostBinding:structuredClone(e.hostBinding)}:{}});return UD({...t,identityResolver:t.identityResolver??XD({cwd:e.cwd,globalDir:e.identityGlobalDir})},{...e,sessionManager:n,eventType:"session_started"})}function Joe(t,e){return t.schemaVersion===e.schemaVersion&&t.conversationId===e.conversationId&&t.hostStorageIdentity===e.hostStorageIdentity}async function Y_e(t,e="completed"){if(!t.sessionManager)return;t.auditLogger&&await t.auditLogger.flush(),await t.sessionManager.transcript.flush(),await t.sessionManager.end(e);let n=t.sessionManager.meta,r=new Date().toISOString(),o=n.createdAt,i=Date.parse(o),s=Date.parse(r),a=Number.isFinite(i)&&Number.isFinite(s)?Math.max(0,s-i):0;DI(n.workingDirectory,{sessionId:n.id,mode:"chat",status:e,role:n.role,model:n.model,startedAt:o,endedAt:r,durationMs:a,messageCount:n.messageCount,tokenUsage:n.tokenUsage,estimatedCostUsd:_S(n.model,n.tokenUsage.input,n.tokenUsage.output)});try{await fo({cwd:n.workingDirectory,sessionId:n.id,role:n.role,endedAt:r})}catch(c){le("Failed to update recent-sessions index \u2014 next startup may scan instead of O(1) lookup",c)}}ze();import{readFileSync as FD,writeFileSync as Koe,mkdirSync as Yoe,existsSync as Qm,readdirSync as Zoe,unlinkSync as Qoe,statSync as eie}from"node:fs";import{join as LS}from"node:path";var Uc=new Map,Fc=new Map,$S=class{getConversationDir(e,n){return LS(e,".xeno","conversations",n)}getConversationPath(e,n,r){return LS(this.getConversationDir(n,r),`${e}.json`)}save(e,n){let r=this.getConversationDir(n,e.app);Qm(r)||Yoe(r,{recursive:!0});let o={...e,modified:new Date().toISOString()},i=this.getConversationPath(e.id,n,e.app);Koe(i,JSON.stringify(o,null,2)+`
2471
2471
  `,"utf-8")}load(e,n){let r=["pixel","motion","sound"];for(let o of r){let i=this.getConversationPath(e,n,o);if(Qm(i)){let s=FD(i,"utf-8");return Y(s,null)}}return null}list(e,n){let r=n?[n]:["pixel","motion","sound"],o=[];for(let i of r){let s=this.getConversationDir(e,i);if(!Qm(s))continue;let a;try{a=Zoe(s)}catch{continue}for(let c of a){if(!c.endsWith(".json"))continue;let l=LS(s,c);try{if(!eie(l).isFile())continue;let d=FD(l,"utf-8"),p=Y(d,null);p&&o.push(p)}catch{continue}}}return o.sort((i,s)=>{let a=new Date(i.modified).getTime();return new Date(s.modified).getTime()-a}),o}delete(e,n){let r=["pixel","motion","sound"];for(let o of r){let i=this.getConversationPath(e,n,o);if(Qm(i)){try{Qoe(i)}catch(s){if(s.code!=="ENOENT")throw s}return}}}autoSave(e,n,r=500){let o=`${n}:${e.id}`,i=Uc.get(o);i&&clearTimeout(i),Fc.set(o,{conversation:{...e},basePath:n});let s=setTimeout(()=>{let a=Fc.get(o);a&&(this.save(a.conversation,a.basePath),Fc.delete(o)),Uc.delete(o)},r);Uc.set(o,s)}flushPending(){for(let[e,n]of Uc){clearTimeout(n),Uc.delete(e);let r=Fc.get(e);if(r){try{this.save(r.conversation,r.basePath)}catch{}Fc.delete(e)}}}search(e,n,r){if(!n)return[];let o=this.list(e,r),i=n.toLowerCase();return o.filter(s=>s.messages.some(a=>a.content?a.content.toLowerCase().includes(i):!1))}};var tie={"not-allowed":"Microphone permission denied. Please allow microphone access in your browser or system settings.","no-speech":"No speech detected. Please try again.","audio-capture":"No microphone found. Please connect a microphone.",network:"Network error during speech recognition.",aborted:"Speech recognition was aborted.","service-not-allowed":"Speech recognition service is not allowed."};function jD(){let t=globalThis;return t.SpeechRecognition??t.webkitSpeechRecognition??void 0}function nie(t,e){let n=jD();if(!n)return null;let r=new n;r.lang=t.language,r.continuous=t.continuous,r.interimResults=t.interimResults,r.maxAlternatives=1;let o=!1,i,s=()=>{i!==void 0&&(clearTimeout(i),i=void 0)};return r.onstart=()=>{o=!0,e.onStart(),t.maxDuration>0&&(i=setTimeout(()=>{o&&r.stop()},t.maxDuration*1e3))},r.onend=()=>{o=!1,s(),e.onEnd()},r.onresult=a=>{let c="",l="";for(let u=a.resultIndex;u<a.results.length;u++){let d=a.results[u];d.isFinal?l+=d[0].transcript:c+=d[0].transcript}c&&e.onInterim(c),l&&e.onFinal(l)},r.onerror=a=>{let c=tie[a.error]??`Speech recognition error: ${a.error}`;e.onError(c)},{start(){o||r.start()},stop(){o&&r.stop()},abort(){o&&r.abort()},isListening(){return o}}}function rie(){return jD()!==void 0}import{spawn as _ie}from"node:child_process";ze();gr();Ze();import{existsSync as HD,mkdirSync as oie,readFileSync as iie,writeFileSync as sie}from"node:fs";import{dirname as aie,join as XS}from"node:path";function jc(t,e){let n=e??process.cwd();return t==="project"?XS(n,".xeno","mcp.json"):t==="mcprc"?XS(n,".mcprc"):XS(ve(),"mcp.json")}function cie(t){oie(aie(t),{recursive:!0})}function lie(t,e){if(!t||typeof t!="object")return{};let n=t,r=e==="mcprc"?n.mcpServers&&typeof n.mcpServers=="object"?n.mcpServers:n:n.mcpServers&&typeof n.mcpServers=="object"?n.mcpServers:{};return Object.fromEntries(Object.entries(r).filter(o=>o[0].trim().length>0&&!!o[1]&&typeof o[1]=="object").sort(([o],[i])=>o.localeCompare(i)))}function ef(t,e="project"){if(!HD(t))return{mcpServers:{}};let n=iie(t,"utf-8"),r=Y(n,e==="mcprc"?{}:{mcpServers:{}});return{mcpServers:lie(r,e)}}function BS(t,e,n="project"){cie(t);let r=n==="mcprc"?e.mcpServers:{mcpServers:e.mcpServers};sie(t,JSON.stringify(r,null,2)+`
2472
2472
  `,"utf-8")}function US(t){let e=t??process.cwd(),n=[],r=[{scope:"project",path:jc("project",e)},{scope:"mcprc",path:jc("mcprc",e)},{scope:"user",path:jc("user")}];for(let o of r){if(!HD(o.path))continue;let i=ef(o.path,o.scope);for(let[s,a]of Object.entries(i.mcpServers??{})){if(n.some(l=>l.name===s))continue;let c=`${o.scope}:${s}`;n.push({name:s,transport:a.transport??(a.url?"streamable-http":"stdio"),command:a.command,args:a.args,env:a.env,cwd:a.cwd,url:a.url,headers:a.headers,bearerTokenEnv:a.bearerTokenEnv,oauth:a.oauth,legacySseFallback:a.legacySseFallback,approvalRequired:a.approvalRequired??!0,disabled:a.disabled??!1,scope:o.scope,sourcePath:o.path,approvalKey:c,approvalState:Zg(e,c)})}}return n}function uie(t,e,n){let r=jc(t,e),o=ef(r,t);return o.mcpServers[n.name]={transport:n.transport,command:n.command,args:n.args,env:n.env,cwd:n.cwd,url:n.url,headers:n.headers,bearerTokenEnv:n.bearerTokenEnv,oauth:n.oauth,legacySseFallback:n.legacySseFallback,approvalRequired:n.approvalRequired,disabled:n.disabled},BS(r,o,t),r}function die(t,e,n){let r=jc(t,e),o=ef(r,t);return delete o.mcpServers[n],BS(r,o,t),r}function FS(t,e){Qg(t,e,"approved")}function jS(t,e){Qg(t,e,"denied")}function pie(t,e){_I(t,e)}function mie(t,e){return Zg(t,e)}function fie(t,e){let n=MI(t,e);return OI(t,e),Object.keys(n).length}function gie(t,e){try{return new URL(e,t).toString()}catch{return e}}var Wo=class{constructor(e,n,r={}){this.url=e;this.headers=n;this.options=r;this.readyPromise=this.connect()}url;headers;options;onMessage=null;onError=null;onClose=null;closed=!1;buffer="";eventName="message";dataLines=[];endpointUrl;streamAbortController=new AbortController;readyPromise;endpointResolver;endpointPromise=new Promise(e=>{this.endpointResolver=e});async waitUntilReady(){await this.readyPromise}setMessageHandler(e){this.onMessage=e}setErrorHandler(e){this.onError=e}setCloseHandler(e){this.onClose=e}async send(e){if(this.closed)throw new Error("Transport is closed");await this.waitUntilReady();let n=await this.resolvePostUrl();this.options.validateUrl?.(n,"post");let r=await fetch(n,{method:"POST",headers:{Accept:"application/json, text/event-stream","Content-Type":"application/json",...this.headers},body:JSON.stringify(e),signal:this.streamAbortController.signal});if(!r.ok)throw new Error(`SSE MCP POST failed (${r.status} ${r.statusText})`);if((r.headers.get("content-type")??"").includes("application/json")){let i=await r.json().catch(()=>null);i&&typeof i=="object"&&"jsonrpc"in i&&this.onMessage?.(i)}}close(){this.closed||(this.closed=!0,this.streamAbortController.abort(),this.endpointResolver(this.endpointUrl),this.onClose?.(null))}get isAlive(){return!this.closed}async connect(){this.options.validateUrl?.(this.url,"stream");let e=await fetch(this.url,{method:"GET",headers:{Accept:"text/event-stream","Cache-Control":"no-cache",...this.headers},signal:this.streamAbortController.signal});if(!e.ok){let n=e.headers.get("www-authenticate");throw new Error(`SSE MCP stream failed (${e.status} ${e.statusText})${n?`; WWW-Authenticate: ${n}`:""}`)}if(!e.body)throw new Error("SSE MCP stream has no response body");this.consumeStream(e.body)}async consumeStream(e){let n=e.getReader(),r=new TextDecoder;try{for(;!this.closed;){let{value:o,done:i}=await n.read();if(i)break;this.buffer+=r.decode(o,{stream:!0}),this.processBuffer()}}catch(o){this.closed||this.onError?.(o instanceof Error?o:new Error(String(o)))}finally{n.releaseLock(),this.closed||(this.closed=!0,this.endpointResolver(this.endpointUrl),this.onClose?.(null))}}processBuffer(){let n=this.buffer.replace(/\r\n/g,`
2473
2473
  `).split(`