@xenosystem/agent-sdk 0.10.25 → 0.10.26
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/artifacts/index.cjs +1 -1
- package/dist/artifacts/index.js +1 -1
- package/dist/automation/index.cjs +1 -1
- package/dist/automation/index.js +1 -1
- package/dist/control-plane/index.cjs +1 -1
- package/dist/control-plane/index.js +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.js +3 -3
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/session/index.cjs +1 -1
- package/dist/session/index.js +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2467,11 +2467,11 @@ try {
|
|
|
2467
2467
|
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)
|
|
2468
2468
|
}
|
|
2469
2469
|
`;if(e?.executePowerShell)return e.executePowerShell(n,t);if(!Og)throw new Error("Native Windows DPAPI is unavailable");let r=t.trim(),o=!r.startsWith(jE);if(o&&(!/^[0-9a-f]+$/i.test(r)||r.length%2!==0))throw new Error("Unsupported Windows DPAPI ciphertext format");let i=Buffer.from(o?r:r.slice(jE.length),o?"hex":"base64"),s=HE().Dpapi.unprotectData(i,null,"CurrentUser");return Buffer.from(s).toString(o?"utf16le":"utf8").replace(/\0+$/,"")}function l2e(t={}){let e=t.platform??process.platform,n=!!(t.protect||t.unprotect||t.executePowerShell);if(e!=="win32"||!Og&&!n)return{kind:"windows-dpapi-unavailable",available:!1,protect:()=>{throw new Error("Windows DPAPI cipher is unavailable on non-Windows platform")},unprotect:()=>{throw new Error("Windows DPAPI cipher is unavailable on non-Windows platform")},protectBytes:()=>{throw new Error("Windows DPAPI cipher is unavailable on non-Windows platform")},unprotectBytes:()=>{throw new Error("Windows DPAPI cipher is unavailable on non-Windows platform")}};let r=t.protect??(i=>y$(i,t)),o=t.unprotect??(i=>b$(i,t));return{kind:"windows-dpapi",available:!0,protect:i=>r(typeof i=="string"?i:Buffer.from(i).toString("base64")),unprotect:i=>o(i),protectBytes:i=>r(Buffer.from(i).toString("base64")),unprotectBytes:i=>{let s=o(i),a=Buffer.from(s,"base64");return new Uint8Array(a.buffer,a.byteOffset,a.byteLength)}}}function Ose(t={}){let e=t.platform??process.platform,n=!!(t.protect||t.unprotect||t.executePowerShell);if(e!=="win32"||!Og&&!n)return ud("windows-dpapi-unavailable");let r=t.storageDir??(t.configDir?UE(t.configDir,"secure","mcp-credentials"):UE(iu(),"secure","mcp-credentials")),o=t.protect??(p=>y$(p,t)),i=t.unprotect??(p=>b$(p,t)),s=t.hashKey??(p=>h$("sha256").update(p).digest("hex")),a=p=>UE(r,`${s(p)}.json`),c=p=>process.platform!=="win32"&&t.writeCiphertext?p$(p)?Rse(p,"utf8"):null:(ld(r,{recursive:!0}),c$(p)),l,d=(p,m,f=!1)=>{try{l=(t.writeCiphertext??d$)(a(p),JSON.stringify(m)+`
|
|
2470
|
-
`,f)}catch(g){throw g instanceof an&&(l=g.receipt),g}if(l.outcome==="exists"&&f)return!1;if(l.outcome!=="committed")throw new an(l);return!0};return{kind:"windows-dpapi",available:!0,...!t.writeCiphertext&&process.platform==="win32"?{writeContract:"windows-replace-file-flush-v1"}:{},get lastWriteReceipt(){return l},get:p=>{let m=a(p);try{let f=c(m);if(f===null)return null;let g=JSON.parse(f);if(!qE(g))throw new Error("credential file is not an object");if(g.schemaVersion!==1||g.provider!=="windows-dpapi")throw new Error("credential file schema or provider is invalid");let h=s(p);if((g.serverHash??g.keyHash)!==h)throw new Error("credential file key hash does not match");let b=g.encryptedCredential??g.encryptedPayload;if(typeof b!="string"||!b)throw new Error("encrypted credential is missing");let w=i(b);return g.encoding==="base64"?Buffer.from(w,"base64").toString("utf8"):w}catch(f){throw f$(f)}},set:(p,m)=>{ld(r,{recursive:!0});let g={schemaVersion:1,provider:"windows-dpapi",serverHash:s(p),encryptedCredential:o(m),encoding:"utf8",updatedAt:new Date().toISOString()};d(p,g)},delete:p=>{let m=a(p);return process.platform==="win32"?(ld(r,{recursive:!0}),l$(m)):p$(m)?(Pse(m),!0):!1},getBytes:p=>{let m=a(p);try{let f=c(m);if(f===null)return null;let g=JSON.parse(f);if(!qE(g))throw new Error("credential file is not an object");if(g.schemaVersion!==1||g.provider!=="windows-dpapi")throw new Error("credential file schema or provider is invalid");let h=s(p);if((g.serverHash??g.keyHash)!==h)throw new Error("credential file key hash does not match");let b=g.encryptedCredential??g.encryptedPayload;if(typeof b!="string"||!b)throw new Error("encrypted credential is missing");let w=i(b);if(g.encoding==="base64"){let S=Buffer.from(w,"base64");return new Uint8Array(S.buffer,S.byteOffset,S.byteLength)}let v=Buffer.from(w,"utf8");return new Uint8Array(v.buffer,v.byteOffset,v.byteLength)}catch(f){throw f$(f)}},setBytes:(p,m)=>{ld(r,{recursive:!0});let f=s(p),g=Buffer.from(m).toString("base64"),h={schemaVersion:1,provider:"windows-dpapi",serverHash:f,encryptedCredential:o(g),encoding:"base64",updatedAt:new Date().toISOString()};d(p,h)},setBytesIfAbsent:(p,m)=>{ld(r,{recursive:!0});let g={schemaVersion:1,provider:"windows-dpapi",serverHash:s(p),encryptedCredential:o(Buffer.from(m).toString("base64")),encoding:"base64",updatedAt:new Date().toISOString()};return d(p,g,!0)}}}function Nse(t){let e=t.platform??process.platform;if(t.kind==="macos-keychain"||e==="darwin")return ud("macos-keychain-deferred");if(!(t.commandAvailable??Lse)(t.command))return ud(`${t.kind}-unavailable`);let r=t.execute??$se,o=t.hashKey??(m=>h$("sha256").update(m).digest("hex")),i=t.serviceName,s=(m,f)=>["lookup","service",m,"account",f],a=(m,f,g)=>["store","--label=XENO Agent MCP credential","service",m,"account",f],c=(m,f)=>["clear","service",m,"account",f],l=t.getArgs??s,d=t.setArgs??a,u=t.deleteArgs??c;return{kind:t.kind,available:!0,get:m=>{try{let f=o(m),g=r(t.command,l(i,f)).trim();return g?g.startsWith(dd)?Buffer.from(g.slice(dd.length),"base64").toString("utf8"):g:null}catch{return null}},set:(m,f)=>{let g=o(m),h=d(i,g,f),y=t.setInput?t.setInput(f):f;r(t.command,h,y)},delete:m=>{try{let f=o(m);return r(t.command,u(i,f)),!0}catch{return!1}},getBytes:m=>{try{let f=o(m),g=r(t.command,l(i,f)).trim();if(!g)return null;if(g.startsWith(dd)){let y=Buffer.from(g.slice(dd.length),"base64");return new Uint8Array(y.buffer,y.byteOffset,y.byteLength)}let h=Buffer.from(g,"utf8");return new Uint8Array(h.buffer,h.byteOffset,h.byteLength)}catch{return null}},setBytes:(m,f)=>{let g=o(m),h=`${dd}${Buffer.from(f).toString("base64")}`,y=d(i,g,h),b=t.setInput?t.setInput(h):h;r(t.command,y,b)}}}function Dse(t={}){let e=t.platform??process.platform,n=t.serviceName??_se;return e==="win32"?Ose({...t,platform:e}):e==="darwin"?ud("macos-keychain-deferred"):e==="linux"?Nse({kind:"linux-secret-service",command:"secret-tool",serviceName:n,platform:e,commandAvailable:t.commandAvailable,execute:t.execute,hashKey:t.hashKey}):ud("os-unavailable")}function ud(t="unavailable"){return{kind:t,available:!1,get:()=>null,set:()=>{throw new Error(`Protected state store is unavailable (${t})`)},delete:()=>!1,getBytes:()=>null,setBytes:()=>{throw new Error(`Protected state store is unavailable (${t})`)}}}function d2e(t="memory"){let e=new Map;return{kind:t,available:!0,get:r=>{let o=e.get(r);return o?o.isBytes&&o.rawBytes?Buffer.from(o.rawBytes).toString("utf8"):o.value:null},set:(r,o)=>{e.set(r,{value:o,isBytes:!1})},delete:r=>e.delete(r),getBytes:r=>{let o=e.get(r);if(!o)return null;if(o.rawBytes)return new Uint8Array(o.rawBytes);let i=Buffer.from(o.value,"utf8");return new Uint8Array(i.buffer,i.byteOffset,i.byteLength)},setBytes:(r,o)=>{let i=new Uint8Array(o);e.set(r,{value:Buffer.from(o).toString("base64"),isBytes:!0,rawBytes:i})},setBytesIfAbsent:(r,o)=>{if(e.has(r))return!1;let i=new Uint8Array(o);return e.set(r,{value:Buffer.from(o).toString("base64"),isBytes:!0,rawBytes:i}),!0}}}function u2e(t={}){let e=t.store??Dse(),n=t.keyName??Mse,r=t.generateKey??(()=>u$(Hi));if(!e.available)return{kind:`envelope-aes-256-gcm-${e.kind}`,available:!1,encrypt:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)},decrypt:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)},encryptBytes:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)},decryptBytes:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)},protect:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)},unprotect:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)},protectBytes:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)},unprotectBytes:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)}};function o(){let l=e.getBytes(n);if(!l){let d=r();if(d.length!==Hi)throw new Error(`Generated key must be ${Hi} bytes, got ${d.length}`);if(e.setBytesIfAbsent?e.setBytesIfAbsent(n,d):e.setBytes(n,d),l=e.getBytes(n),!l)throw new Error("Failed to persist newly generated encryption key to protected state store")}if(l.length!==Hi)throw new Error(`Protected state encryption key is corrupt (expected ${Hi} bytes, got ${l.length})`);return l}function i(){let l=e.getBytes(n);if(!l)throw new Error("Protected state encryption key is missing; cannot decrypt");if(l.length!==Hi)throw new Error(`Protected state encryption key is corrupt (expected ${Hi} bytes, got ${l.length})`);return l}function s(l){let d=o(),u=u$(FE),p=Tse(Mg,d,u),m=Buffer.concat([p.update(l),p.final()]),f=p.getAuthTag(),g={version:1,algorithm:Mg,nonce:u.toString("base64"),tag:f.toString("base64"),ciphertext:m.toString("base64")};return JSON.stringify(g)}function a(l){let d;try{d=JSON.parse(l)}catch{throw new Error("Invalid protected state envelope: malformed JSON")}if(!qE(d))throw new Error("Invalid protected state envelope: expected object");if(d.version!==1)throw new Error(`Unsupported protected state envelope version: ${d.version}`);if(d.algorithm!==Mg)throw new Error(`Unsupported envelope algorithm: ${d.algorithm}`);if(typeof d.nonce!="string"||typeof d.tag!="string"||typeof d.ciphertext!="string")throw new Error("Invalid protected state envelope: missing required fields");let u=Buffer.from(d.nonce,"base64"),p=Buffer.from(d.tag,"base64"),m=Buffer.from(d.ciphertext,"base64");if(u.length!==FE)throw new Error(`Invalid envelope nonce length: expected ${FE}, got ${u.length}`);if(p.length!==m$)throw new Error(`Invalid envelope auth tag length: expected ${m$}, got ${p.length}`);let f=i();try{let g=kse(Mg,f,u);return g.setAuthTag(p),Buffer.concat([g.update(m),g.final()])}catch(g){throw new Error(`Failed to decrypt protected state: authentication tag mismatch or corrupted ciphertext (${g instanceof Error?g.message:String(g)})`)}}let c={kind:`envelope-aes-256-gcm-${e.kind}`,available:!0,encrypt:l=>{let d=typeof l=="string"?Buffer.from(l,"utf8"):Buffer.from(l);return s(d)},decrypt:l=>a(l).toString("utf8"),encryptBytes:l=>s(Buffer.from(l)),decryptBytes:l=>{let d=a(l);return new Uint8Array(d.byteOffset===0&&d.byteLength===d.buffer.byteLength?d.buffer:d.buffer.slice(d.byteOffset,d.byteOffset+d.byteLength))},protect:l=>c.encrypt(l),unprotect:l=>c.decrypt(l),protectBytes:l=>c.encryptBytes(l),unprotectBytes:l=>c.decryptBytes(l)};return c}function Lse(t){try{return g$(process.platform==="win32"?"where.exe":"which",[t],{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"]}),!0}catch{return!1}}function $se(t,e,n){return g$(t,e,{encoding:"utf8",input:n,windowsHide:!0,stdio:["pipe","pipe","ignore"]})}function f$(t){let e=t instanceof Error&&t.message.trim()?t.message:String(t);return new Error(`Failed to read Windows DPAPI protected state: ${e}`)}function qE(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}var _g,Og,_se,Mse,Mg,Hi,FE,m$,dd,jE,w$=I(()=>{"use strict";Ke();BE();BE();Og=HE()?.isPlatformSupported===!0,_se="ai.xenostudio.xeno-agent.mcp",Mse="xeno.host.state.encryption-key.v1",Mg="aes-256-gcm",Hi=32,FE=12,m$=16,dd="b64:",jE="dpapi:v1:"});var Ng=I(()=>{"use strict";sd();zL();yA();fA();ei();_y();ic();ci();wc();EE();KL();QL();hu();s$();xu();Eu();w$()});var W5={};mF(W5,{createDelegatedXenoAgent:()=>KI});function Ipe(t){return t.length>0?`${t.charAt(0).toUpperCase()}${t.slice(1)}`:"Agent"}function Tpe(t){if(t!=="executor")return t==="planner"?new $t({mode:"plan"}):new $t({mode:"default",rules:Epe})}async function KI(t){let e=Ipe(t.subagentRole),n=nL(t.parentExecutionMode,t.subagentRole),r=cL(t.parentSystemPrompt,t.subagentRole,t.cwd),o={onText:t.onText,onToolStart:t.onToolStart,onToolWillExecute:t.onToolWillExecute,onToolEnd:t.onToolEnd,onIteration:t.onIteration,onError:t.onError,onTranscriptError:t.onTranscriptError,onModeSwitchRequest:t.onModeSwitchRequest,onExecutionModeChanged:t.onExecutionModeChanged},i=t.subagentRole==="executor"?t.permissionEngine:Tpe(t.subagentRole);return Vr({...t,turnTokenBudget:t.turnTokenBudget??t.maxTokens,...o,...i?{permissionEngine:i}:{},requesterLabel:e,executionMode:n,systemPrompt:r,identity:!1,memory:!1})}var Epe,_h=I(()=>{"use strict";gg();yg();Ng();Na();Epe=[{tool:"Write",decision:"deny"},{tool:"Edit",decision:"deny"},{tool:"Patch",decision:"deny"},{tool:"MemoryWrite",decision:"deny"},{tool:"Bash",decision:"deny"},{tool:"dispatch_agent",decision:"deny"}]});import{cwd as kpe}from"node:process";async function Vr(t={}){let e=t.cwd??kpe(),n=t.model??Ts,r=t.executionMode??"agent";t.sandbox&&ys({...t.sandbox,workingDirectory:t.sandbox.workingDirectory??e});let o=t.apiKey??process.env.XENO_API_KEY??Qt,i=t.baseURL??vr,s=ks(t),a=process.env.XENO_API_REQUEST_TIMEOUT_MS,c=a?Number.parseInt(a,10):Number.NaN,l=Number.isFinite(c)&&c>0?c:void 0;if(t.permissionEngine&&t.permissionPrompt)throw new Error("permissionEngine and permissionPrompt are mutually exclusive; bind the prompt on a forked engine instead.");let d=t.permissionEngine??new $t(t.permissionConfig,t.permissionPrompt);if(d.setWorkingDirectory(e),!t.permissionEngine){let v=Yt(e);d.loadPersistentState({allowedTools:v.allowedTools,allowedDirectories:v.allowedDirectories})}let u;if(t.identity!==!1)if(t.identity?.resolved)u=t.identity.resolved;else{let v=new Ta({cwd:e,globalDir:t.identity?.globalDir,...t.identity?.targetPaths?{targetPaths:t.identity.targetPaths}:{}});u=await new ka(v).resolve({...t.role?{role:t.role}:{},...t.identity?.targetPaths?{targetPaths:t.identity.targetPaths}:{}})}let p,m,f=t.promptMemory?.trim()??"",g;t.memory!==!1&&(g=new po({cwd:e,globalDir:t.memory?.globalDir,role:t.role,sessionDir:t.memory?.sessionDir,scope:t.memory?.scope,budgets:t.memory?.budgets,projectSessionContext:t.memory?.projectSessionContext}),p=await g.loadForPrompt(),t.memory?.includeProjectSessionContext!==!1&&(m=await g.loadProjectSessionContext({excludeSessionId:t.memory?.excludeSessionId??t.sessionId})),f=[f,g.formatForPrompt(p),m?.content].filter(v=>typeof v=="string"&&v.trim().length>0).join(`
|
|
2470
|
+
`,f)}catch(g){throw g instanceof an&&(l=g.receipt),g}if(l.outcome==="exists"&&f)return!1;if(l.outcome!=="committed")throw new an(l);return!0};return{kind:"windows-dpapi",available:!0,...!t.writeCiphertext&&process.platform==="win32"?{writeContract:"windows-replace-file-flush-v1"}:{},get lastWriteReceipt(){return l},get:p=>{let m=a(p);try{let f=c(m);if(f===null)return null;let g=JSON.parse(f);if(!qE(g))throw new Error("credential file is not an object");if(g.schemaVersion!==1||g.provider!=="windows-dpapi")throw new Error("credential file schema or provider is invalid");let h=s(p);if((g.serverHash??g.keyHash)!==h)throw new Error("credential file key hash does not match");let b=g.encryptedCredential??g.encryptedPayload;if(typeof b!="string"||!b)throw new Error("encrypted credential is missing");let w=i(b);return g.encoding==="base64"?Buffer.from(w,"base64").toString("utf8"):w}catch(f){throw f$(f)}},set:(p,m)=>{ld(r,{recursive:!0});let g={schemaVersion:1,provider:"windows-dpapi",serverHash:s(p),encryptedCredential:o(m),encoding:"utf8",updatedAt:new Date().toISOString()};d(p,g)},delete:p=>{let m=a(p);return process.platform==="win32"?(ld(r,{recursive:!0}),l$(m)):p$(m)?(Pse(m),!0):!1},getBytes:p=>{let m=a(p);try{let f=c(m);if(f===null)return null;let g=JSON.parse(f);if(!qE(g))throw new Error("credential file is not an object");if(g.schemaVersion!==1||g.provider!=="windows-dpapi")throw new Error("credential file schema or provider is invalid");let h=s(p);if((g.serverHash??g.keyHash)!==h)throw new Error("credential file key hash does not match");let b=g.encryptedCredential??g.encryptedPayload;if(typeof b!="string"||!b)throw new Error("encrypted credential is missing");let w=i(b);if(g.encoding==="base64"){let S=Buffer.from(w,"base64");return new Uint8Array(S.buffer,S.byteOffset,S.byteLength)}let v=Buffer.from(w,"utf8");return new Uint8Array(v.buffer,v.byteOffset,v.byteLength)}catch(f){throw f$(f)}},setBytes:(p,m)=>{ld(r,{recursive:!0});let f=s(p),g=Buffer.from(m).toString("base64"),h={schemaVersion:1,provider:"windows-dpapi",serverHash:f,encryptedCredential:o(g),encoding:"base64",updatedAt:new Date().toISOString()};d(p,h)},setBytesIfAbsent:(p,m)=>{ld(r,{recursive:!0});let g={schemaVersion:1,provider:"windows-dpapi",serverHash:s(p),encryptedCredential:o(Buffer.from(m).toString("base64")),encoding:"base64",updatedAt:new Date().toISOString()};return d(p,g,!0)}}}function Nse(t){let e=t.platform??process.platform;if(t.kind==="macos-keychain"||e==="darwin")return ud("macos-keychain-deferred");if(!(t.commandAvailable??Lse)(t.command))return ud(`${t.kind}-unavailable`);let r=t.execute??$se,o=t.hashKey??(m=>h$("sha256").update(m).digest("hex")),i=t.serviceName,s=(m,f)=>["lookup","service",m,"account",f],a=(m,f,g)=>["store","--label=XENO Agent MCP credential","service",m,"account",f],c=(m,f)=>["clear","service",m,"account",f],l=t.getArgs??s,d=t.setArgs??a,u=t.deleteArgs??c;return{kind:t.kind,available:!0,get:m=>{try{let f=o(m),g=r(t.command,l(i,f)).trim();return g?g.startsWith(dd)?Buffer.from(g.slice(dd.length),"base64").toString("utf8"):g:null}catch{return null}},set:(m,f)=>{let g=o(m),h=d(i,g,f),y=t.setInput?t.setInput(f):f;r(t.command,h,y)},delete:m=>{try{let f=o(m);return r(t.command,u(i,f)),!0}catch{return!1}},getBytes:m=>{try{let f=o(m),g=r(t.command,l(i,f)).trim();if(!g)return null;if(g.startsWith(dd)){let y=Buffer.from(g.slice(dd.length),"base64");return new Uint8Array(y.buffer,y.byteOffset,y.byteLength)}let h=Buffer.from(g,"utf8");return new Uint8Array(h.buffer,h.byteOffset,h.byteLength)}catch{return null}},setBytes:(m,f)=>{let g=o(m),h=`${dd}${Buffer.from(f).toString("base64")}`,y=d(i,g,h),b=t.setInput?t.setInput(h):h;r(t.command,y,b)}}}function Dse(t={}){let e=t.platform??process.platform,n=t.serviceName??_se;return e==="win32"?Ose({...t,platform:e}):e==="darwin"?ud("macos-keychain-deferred"):e==="linux"?Nse({kind:"linux-secret-service",command:"secret-tool",serviceName:n,platform:e,commandAvailable:t.commandAvailable,execute:t.execute,hashKey:t.hashKey}):ud("os-unavailable")}function ud(t="unavailable"){return{kind:t,available:!1,get:()=>null,set:()=>{throw new Error(`Protected state store is unavailable (${t})`)},delete:()=>!1,getBytes:()=>null,setBytes:()=>{throw new Error(`Protected state store is unavailable (${t})`)}}}function d2e(t="memory"){let e=new Map;return{kind:t,available:!0,get:r=>{let o=e.get(r);return o?o.isBytes&&o.rawBytes?Buffer.from(o.rawBytes).toString("utf8"):o.value:null},set:(r,o)=>{e.set(r,{value:o,isBytes:!1})},delete:r=>e.delete(r),getBytes:r=>{let o=e.get(r);if(!o)return null;if(o.rawBytes)return new Uint8Array(o.rawBytes);let i=Buffer.from(o.value,"utf8");return new Uint8Array(i.buffer,i.byteOffset,i.byteLength)},setBytes:(r,o)=>{let i=new Uint8Array(o);e.set(r,{value:Buffer.from(o).toString("base64"),isBytes:!0,rawBytes:i})},setBytesIfAbsent:(r,o)=>{if(e.has(r))return!1;let i=new Uint8Array(o);return e.set(r,{value:Buffer.from(o).toString("base64"),isBytes:!0,rawBytes:i}),!0}}}function u2e(t={}){let e=t.store??Dse(),n=t.keyName??Mse,r=t.generateKey??(()=>u$(Hi));if(!e.available)return{kind:`envelope-aes-256-gcm-${e.kind}`,available:!1,encrypt:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)},decrypt:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)},encryptBytes:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)},decryptBytes:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)},protect:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)},unprotect:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)},protectBytes:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)},unprotectBytes:()=>{throw new Error(`Protected state envelope cipher is unavailable: underlying store is ${e.kind}`)}};function o(){let l=e.getBytes(n);if(!l){let d=r();if(d.length!==Hi)throw new Error(`Generated key must be ${Hi} bytes, got ${d.length}`);if(e.setBytesIfAbsent?e.setBytesIfAbsent(n,d):e.setBytes(n,d),l=e.getBytes(n),!l)throw new Error("Failed to persist newly generated encryption key to protected state store")}if(l.length!==Hi)throw new Error(`Protected state encryption key is corrupt (expected ${Hi} bytes, got ${l.length})`);return l}function i(){let l=e.getBytes(n);if(!l)throw new Error("Protected state encryption key is missing; cannot decrypt");if(l.length!==Hi)throw new Error(`Protected state encryption key is corrupt (expected ${Hi} bytes, got ${l.length})`);return l}function s(l){let d=o(),u=u$(FE),p=Tse(Mg,d,u),m=Buffer.concat([p.update(l),p.final()]),f=p.getAuthTag(),g={version:1,algorithm:Mg,nonce:u.toString("base64"),tag:f.toString("base64"),ciphertext:m.toString("base64")};return JSON.stringify(g)}function a(l){let d;try{d=JSON.parse(l)}catch{throw new Error("Invalid protected state envelope: malformed JSON")}if(!qE(d))throw new Error("Invalid protected state envelope: expected object");if(d.version!==1)throw new Error(`Unsupported protected state envelope version: ${d.version}`);if(d.algorithm!==Mg)throw new Error(`Unsupported envelope algorithm: ${d.algorithm}`);if(typeof d.nonce!="string"||typeof d.tag!="string"||typeof d.ciphertext!="string")throw new Error("Invalid protected state envelope: missing required fields");let u=Buffer.from(d.nonce,"base64"),p=Buffer.from(d.tag,"base64"),m=Buffer.from(d.ciphertext,"base64");if(u.length!==FE)throw new Error(`Invalid envelope nonce length: expected ${FE}, got ${u.length}`);if(p.length!==m$)throw new Error(`Invalid envelope auth tag length: expected ${m$}, got ${p.length}`);let f=i();try{let g=kse(Mg,f,u);return g.setAuthTag(p),Buffer.concat([g.update(m),g.final()])}catch(g){throw new Error(`Failed to decrypt protected state: authentication tag mismatch or corrupted ciphertext (${g instanceof Error?g.message:String(g)})`)}}let c={kind:`envelope-aes-256-gcm-${e.kind}`,available:!0,encrypt:l=>{let d=typeof l=="string"?Buffer.from(l,"utf8"):Buffer.from(l);return s(d)},decrypt:l=>a(l).toString("utf8"),encryptBytes:l=>s(Buffer.from(l)),decryptBytes:l=>{let d=a(l);return new Uint8Array(d.byteOffset===0&&d.byteLength===d.buffer.byteLength?d.buffer:d.buffer.slice(d.byteOffset,d.byteOffset+d.byteLength))},protect:l=>c.encrypt(l),unprotect:l=>c.decrypt(l),protectBytes:l=>c.encryptBytes(l),unprotectBytes:l=>c.decryptBytes(l)};return c}function Lse(t){try{return g$(process.platform==="win32"?"where.exe":"which",[t],{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"]}),!0}catch{return!1}}function $se(t,e,n){return g$(t,e,{encoding:"utf8",input:n,windowsHide:!0,stdio:["pipe","pipe","ignore"]})}function f$(t){let e=t instanceof Error&&t.message.trim()?t.message:String(t);return new Error(`Failed to read Windows DPAPI protected state: ${e}`)}function qE(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}var _g,Og,_se,Mse,Mg,Hi,FE,m$,dd,jE,w$=I(()=>{"use strict";Ke();BE();BE();Og=HE()?.isPlatformSupported===!0,_se="ai.xenostudio.xeno-agent.mcp",Mse="xeno.host.state.encryption-key.v1",Mg="aes-256-gcm",Hi=32,FE=12,m$=16,dd="b64:",jE="dpapi:v1:"});var Ng=I(()=>{"use strict";sd();zL();yA();fA();ei();_y();ic();ci();wc();EE();KL();QL();hu();s$();xu();Eu();w$()});var W5={};mF(W5,{createDelegatedXenoAgent:()=>KI});function Ipe(t){return t.length>0?`${t.charAt(0).toUpperCase()}${t.slice(1)}`:"Agent"}function Tpe(t){if(t!=="executor")return t==="planner"?new $t({mode:"plan"}):new $t({mode:"default",rules:Epe})}async function KI(t){let e=Ipe(t.subagentRole),n=nL(t.parentExecutionMode,t.subagentRole),r=cL(t.parentSystemPrompt,t.subagentRole,t.cwd),o={onText:t.onText,onToolStart:t.onToolStart,onToolWillExecute:t.onToolWillExecute,onToolEnd:t.onToolEnd,onIteration:t.onIteration,onError:t.onError,onTranscriptError:t.onTranscriptError,onModeSwitchRequest:t.onModeSwitchRequest,onExecutionModeChanged:t.onExecutionModeChanged},i=t.subagentRole==="executor"?t.permissionEngine:Tpe(t.subagentRole);return Vr({...t,...o,...i?{permissionEngine:i}:{},requesterLabel:e,executionMode:n,systemPrompt:r,identity:!1,memory:!1})}var Epe,_h=I(()=>{"use strict";gg();yg();Ng();Na();Epe=[{tool:"Write",decision:"deny"},{tool:"Edit",decision:"deny"},{tool:"Patch",decision:"deny"},{tool:"MemoryWrite",decision:"deny"},{tool:"Bash",decision:"deny"},{tool:"dispatch_agent",decision:"deny"}]});import{cwd as kpe}from"node:process";async function Vr(t={}){let e=t.cwd??kpe(),n=t.model??Ts,r=t.executionMode??"agent";t.sandbox&&ys({...t.sandbox,workingDirectory:t.sandbox.workingDirectory??e});let o=t.apiKey??process.env.XENO_API_KEY??Qt,i=t.baseURL??vr,s=ks(t),a=process.env.XENO_API_REQUEST_TIMEOUT_MS,c=a?Number.parseInt(a,10):Number.NaN,l=Number.isFinite(c)&&c>0?c:void 0;if(t.permissionEngine&&t.permissionPrompt)throw new Error("permissionEngine and permissionPrompt are mutually exclusive; bind the prompt on a forked engine instead.");let d=t.permissionEngine??new $t(t.permissionConfig,t.permissionPrompt);if(d.setWorkingDirectory(e),!t.permissionEngine){let v=Yt(e);d.loadPersistentState({allowedTools:v.allowedTools,allowedDirectories:v.allowedDirectories})}let u;if(t.identity!==!1)if(t.identity?.resolved)u=t.identity.resolved;else{let v=new Ta({cwd:e,globalDir:t.identity?.globalDir,...t.identity?.targetPaths?{targetPaths:t.identity.targetPaths}:{}});u=await new ka(v).resolve({...t.role?{role:t.role}:{},...t.identity?.targetPaths?{targetPaths:t.identity.targetPaths}:{}})}let p,m,f=t.promptMemory?.trim()??"",g;t.memory!==!1&&(g=new po({cwd:e,globalDir:t.memory?.globalDir,role:t.role,sessionDir:t.memory?.sessionDir,scope:t.memory?.scope,budgets:t.memory?.budgets,projectSessionContext:t.memory?.projectSessionContext}),p=await g.loadForPrompt(),t.memory?.includeProjectSessionContext!==!1&&(m=await g.loadProjectSessionContext({excludeSessionId:t.memory?.excludeSessionId??t.sessionId})),f=[f,g.formatForPrompt(p),m?.content].filter(v=>typeof v=="string"&&v.trim().length>0).join(`
|
|
2471
2471
|
|
|
2472
2472
|
---
|
|
2473
2473
|
|
|
2474
|
-
`));let h=t.systemPrompt??eL({cwd:e,model:n,date:t.date??new Date().toISOString().split("T")[0],identity:u,memory:f||void 0,sessionId:t.sessionId,executionMode:r}),y=t.dispatchAgent??(async v=>{let{createDelegatedXenoAgent:S}=await Promise.resolve().then(()=>(_h(),W5)),{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??J5,4096)),maxIterations:Math.max(3,Math.min(t.maxIterations??K5,12)),parentSystemPrompt:h,parentExecutionMode:r,subagentRole:"explorer",permissionEngine:d,...t.sandbox?{sandbox:t.sandbox}:{},...t.onPermissionRequest?{onPermissionRequest:t.onPermissionRequest}:{}}),A=()=>{x.cancelCurrentTurn()};if(v.signal?.aborted)throw A(),new Error("dispatch_agent was aborted before the helper started");v.signal?.addEventListener("abort",A,{once:!0});try{return{output:await x.run(v.prompt)}}finally{v.signal?.removeEventListener("abort",A)}});if(t.validateToolInputs===!1)throw new Error("Agent tool input validation cannot be disabled.");let b=t.toolRegistry??rn({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.getOwnerSessionId?{getOwnerSessionId:t.getOwnerSessionId}:{},...t.sandbox?{sandbox:t.sandbox}:{},...g?{memoryManager:g}:{},validateInputs:!0});return t.toolRegistry&&t.validateToolInputs===!0&&b.setValidateInputs(!0),{agent:new Fi({apiKey:o,baseURL:i,ollamaBaseURL:s,localRuntimeProtocol:t.localRuntimeProtocol,localTransportLimits:t.localTransportLimits,...(t.apiRequestTimeoutMs??l)!==void 0?{apiRequestTimeoutMs:t.apiRequestTimeoutMs??l}:{},model:n,...t.fallbackModels?{fallbackModels:t.fallbackModels}:{},...t.effort?{effort:t.effort}:{},maxTokens:t.maxTokens??J5,maxIterations:t.maxIterations??K5,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}:{},...t.turnTokenBudget!==void 0?{turnTokenBudget:t.turnTokenBudget}:{},systemPrompt:h,requesterLabel:t.requesterLabel,ownerSessionId:t.ownerSessionId,getOwnerSessionId:t.getOwnerSessionId,executionMode:r,permissionEngine:d,toolRegistry:b,sandbox:t.sandbox,onPermissionRequest:t.onPermissionRequest,onText:t.onText,onToolStart:t.onToolStart,onToolWillExecute:t.onToolWillExecute,onToolEnd:t.onToolEnd,onIteration:t.onIteration,modelWorkAccounting:t.modelWorkAccounting,runAuthority:t.runAuthority,...t.requestContext!==void 0?{requestContext:t.requestContext}:{},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:d,toolRegistry:b,...u?{identity:u}:{},...p?{memory:{resolved:p,...m?{projectSessionContext:m}:{},prompt:f}}:{}}}var J5,K5,Na=I(()=>{"use strict";ao();xr();fg();oE();wg();Yc();Ng();Co();J5=8192,K5=50});Jr();var ar="0.10.
|
|
2474
|
+
`));let h=t.systemPrompt??eL({cwd:e,model:n,date:t.date??new Date().toISOString().split("T")[0],identity:u,memory:f||void 0,sessionId:t.sessionId,executionMode:r}),y=t.dispatchAgent??(async v=>{let{createDelegatedXenoAgent:S}=await Promise.resolve().then(()=>(_h(),W5)),{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??J5,4096)),maxIterations:Math.max(3,Math.min(t.maxIterations??K5,12)),parentSystemPrompt:h,parentExecutionMode:r,subagentRole:"explorer",permissionEngine:d,...t.sandbox?{sandbox:t.sandbox}:{},...t.onPermissionRequest?{onPermissionRequest:t.onPermissionRequest}:{}}),A=()=>{x.cancelCurrentTurn()};if(v.signal?.aborted)throw A(),new Error("dispatch_agent was aborted before the helper started");v.signal?.addEventListener("abort",A,{once:!0});try{return{output:await x.run(v.prompt)}}finally{v.signal?.removeEventListener("abort",A)}});if(t.validateToolInputs===!1)throw new Error("Agent tool input validation cannot be disabled.");let b=t.toolRegistry??rn({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.getOwnerSessionId?{getOwnerSessionId:t.getOwnerSessionId}:{},...t.sandbox?{sandbox:t.sandbox}:{},...g?{memoryManager:g}:{},validateInputs:!0});return t.toolRegistry&&t.validateToolInputs===!0&&b.setValidateInputs(!0),{agent:new Fi({apiKey:o,baseURL:i,ollamaBaseURL:s,localRuntimeProtocol:t.localRuntimeProtocol,localTransportLimits:t.localTransportLimits,...(t.apiRequestTimeoutMs??l)!==void 0?{apiRequestTimeoutMs:t.apiRequestTimeoutMs??l}:{},model:n,...t.fallbackModels?{fallbackModels:t.fallbackModels}:{},...t.effort?{effort:t.effort}:{},maxTokens:t.maxTokens??J5,maxIterations:t.maxIterations??K5,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}:{},...t.turnTokenBudget!==void 0?{turnTokenBudget:t.turnTokenBudget}:{},systemPrompt:h,requesterLabel:t.requesterLabel,ownerSessionId:t.ownerSessionId,getOwnerSessionId:t.getOwnerSessionId,executionMode:r,permissionEngine:d,toolRegistry:b,sandbox:t.sandbox,onPermissionRequest:t.onPermissionRequest,onText:t.onText,onToolStart:t.onToolStart,onToolWillExecute:t.onToolWillExecute,onToolEnd:t.onToolEnd,onIteration:t.onIteration,modelWorkAccounting:t.modelWorkAccounting,runAuthority:t.runAuthority,...t.requestContext!==void 0?{requestContext:t.requestContext}:{},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:d,toolRegistry:b,...u?{identity:u}:{},...p?{memory:{resolved:p,...m?{projectSessionContext:m}:{},prompt:f}}:{}}}var J5,K5,Na=I(()=>{"use strict";ao();xr();fg();oE();wg();Yc();Ng();Co();J5=8192,K5=50});Jr();var ar="0.10.26";Qa();Je();st();import{randomUUID as TF}from"node:crypto";var Za=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=TF(),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 ds(this.filePath,JSON.stringify(r))}),await this.writeQueue,n}async read(e){let n=await ye(this.filePath);if(!n)return[];let r=Jo(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 xe(e,JSON.stringify(n,null,2)),n.length}async flush(){await this.writeQueue}};function kF(t,e){return e.endedAt.localeCompare(t.endedAt)}function cy(t,e){t.set(e,(t.get(e)??0)+1)}function uy(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 jk(t){return t.filter(e=>e.tool_name||e.event_type.startsWith("tool_")).length}function qk(t){return t.filter(e=>e.event_type==="permission_decision").length}function Hk(t){return t.filter(e=>e.status==="error"||e.event_type.endsWith("_failed")).length}function ly(t){return t.split(/[_\s-]+/).filter(e=>e.length>0).map(e=>e[0].toUpperCase()+e.slice(1)).join(" ")}function dy(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 RF(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 PF(t){let e=ly(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=`${ly(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=dy(t.metadata)}else t.event_type==="delegation_started"?(e="Delegation started",n=dy(t.metadata)):t.tool_name?e=`${ly(t.event_type)}: ${t.tool_name}`:n||(n=dy(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 py(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:uy(s,a),toolEvents:jk(i),permissionEvents:qk(i),errorEvents:Hk(i),lastEventType:i[i.length-1]?.event_type??"unknown"})}return n.sort(kF)}function CF(t,e){let n=py(t),r=e??n[0]?.traceId;if(!r)return null;let o=t.filter(u=>u.trace_id===r).sort((u,p)=>u.sequence-p.sequence);if(o.length===0)return null;let i=new Map,s=new Map,a=new Map,c=new Map;for(let u of o){if(cy(i,u.event_type),cy(a,u.actor),cy(c,u.risk_level),!u.tool_name)continue;let p=s.get(u.tool_name)??{toolName:u.tool_name,count:0,ok:0,error:0,denied:0};p.count+=1,u.status==="error"?p.error+=1:p.ok+=1,u.decision==="deny"&&(p.denied+=1),s.set(u.tool_name,p)}let l=o[0]?.timestamp??"",d=o[o.length-1]?.timestamp??l;return{traceId:r,eventCount:o.length,startedAt:l,endedAt:d,durationMs:uy(l,d),toolEvents:jk(o),permissionEvents:qk(o),deniedPermissions:o.filter(u=>u.event_type==="permission_decision"&&u.decision==="deny").length,errorEvents:Hk(o),eventTypes:Object.fromEntries([...i.entries()].sort((u,p)=>u[0].localeCompare(p[0]))),actorSummary:Object.fromEntries([...a.entries()].sort((u,p)=>u[0].localeCompare(p[0]))),riskSummary:Object.fromEntries([...c.entries()].sort((u,p)=>u[0].localeCompare(p[0]))),toolSummary:[...s.values()].sort((u,p)=>u.toolName.localeCompare(p.toolName)),topLatencyGaps:RF(o),timeline:o.map(u=>({sequence:u.sequence,timestamp:u.timestamp,eventType:u.event_type,actor:u.actor,riskLevel:u.risk_level,...u.tool_name?{toolName:u.tool_name}:{},...u.decision?{decision:u.decision}:{},...u.status?{status:u.status}:{},...u.reason?{reason:u.reason}:{}}))}}function _F(t,e){let n=py(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:uy(i,s),steps:o.map(PF)}}function MF(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(`
|
|
2475
2475
|
`)}function OF(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(`
|
|
2476
2476
|
`)}function NF(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(`
|
|
2477
2477
|
`)}function DF(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(`
|
|
@@ -2628,7 +2628,7 @@ Prefer non-destructive workflows: use effect chains that can be bypassed or reor
|
|
|
2628
2628
|
{context}
|
|
2629
2629
|
|
|
2630
2630
|
Available tools: {toolList}`;function Ld(t){return MB.replace("{context}",t.context).replace("{toolList}",t.toolList)}var Tme={pixel:Nd,motion:Dd,sound:Ld},vT=class{agent;contextManager;config;toolRegistry;permissionEngine;pendingPermissions=new Map;constructor(e){this.config=e,this.contextManager=new Zi,this.contextManager.setProvider(e.appContext),this.toolRegistry=rn();for(let r of e.tools)this.toolRegistry.register(r);this.permissionEngine=new $t;let n=this.buildSystemPrompt();this.agent=new Fi({apiKey:e.apiKey,baseURL:e.baseURL,model:e.model,maxTokens:e.maxTokens??8192,maxIterations:e.maxIterations??50,systemPrompt:n,permissionEngine:this.permissionEngine,toolRegistry:this.toolRegistry})}buildSystemPrompt(){let e=this.contextManager.formatForPrompt(),n=this.toolRegistry.listNames().join(", "),r=Tme[this.config.app];return r({context:e,toolList:n})}async sendMessage(e,n){this.updateContext();let r=this.agent.config.onText,o=this.agent.config.onToolStart,i=this.agent.config.onToolEnd,s=this.agent.config.onError;this.agent.config.onText=a=>{n.onText(a)},this.agent.config.onToolStart=(a,c)=>{n.onToolStart(a,c)},this.agent.config.onToolEnd=(a,c)=>{n.onToolEnd(a,c)},this.agent.config.onError=(a,c)=>{n.onError(a)};try{await this.agent.run(e),n.onComplete()}catch(a){let c=a instanceof Error?a:new Error(String(a));n.onError(c)}finally{this.agent.config.onText=r,this.agent.config.onToolStart=o,this.agent.config.onToolEnd=i,this.agent.config.onError=s}}cancel(){return this.agent.cancelCurrentTurn()}getHistory(){return[...this.agent.messages]}clearHistory(){let e=this.buildSystemPrompt();this.agent=new Fi({apiKey:this.config.apiKey,baseURL:this.config.baseURL,model:this.config.model,maxTokens:this.config.maxTokens??8192,maxIterations:this.config.maxIterations??50,systemPrompt:e,permissionEngine:this.permissionEngine,toolRegistry:this.toolRegistry})}updateContext(){let e=this.buildSystemPrompt();this.agent.config.systemPrompt=e}respondToPermission(e,n){let r=this.pendingPermissions.get(e);r&&(r.resolve(n),this.pendingPermissions.delete(e))}getAgentLoop(){return this.agent}getContextManager(){return this.contextManager}getToolRegistry(){return this.toolRegistry}};import{existsSync as OB,readFileSync as NB}from"node:fs";import{homedir as DB}from"node:os";import{join as LB}from"node:path";xr();var kme="http://localhost:3338",Rme=vr,Pme=2e3,xT=12e4,Cme=3e4,$d=class{localUrl;cloudUrl;cloudApiKey;mode;defaultLocalModel;defaultCloudModel;localAvailable=null;localModelName=null;lastHealthCheck=0;constructor(e){this.localUrl=e?.localUrl??kme,this.cloudUrl=e?.cloudUrl??Rme,this.cloudApiKey=e?.cloudApiKey??process.env.XENO_API_KEY??(Qt||""),this.mode=e?.mode??"auto",this.defaultLocalModel=e?.localModel??"default",this.defaultCloudModel=e?.cloudModel??"claude-sonnet-4-6"}async chat(e){let n=await this.shouldUseLocal();if(this.mode==="local"&&!n)return{success:!1,content:"",endpoint:"local",model:"",usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:"Local xeno-rt is not available and mode is set to local-only"};if(n)try{return await this.chatLocal(e)}catch(r){return this.mode==="local"?{success:!1,content:"",endpoint:"local",model:e.model??this.defaultLocalModel,usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:r instanceof Error?r.message:String(r)}:this.chatCloud(e)}return this.chatCloud(e)}async*chatStream(e){let n=await this.shouldUseLocal();if(this.mode==="local"&&!n)throw new Error("Local xeno-rt is not available and mode is set to local-only");let r=n?this.localUrl:this.cloudUrl,o=e.model??(n?this.defaultLocalModel:this.defaultCloudModel),i=e.systemPrompt?[{role:"system",content:e.systemPrompt},...e.messages]:e.messages,s={model:o,messages:i,stream:!0,max_tokens:e.maxTokens??4096,temperature:e.temperature??.7};e.jsonMode&&(s.response_format={type:"json_object"}),e.stop&&e.stop.length>0&&(s.stop=e.stop);let a={"Content-Type":"application/json"};n||(a.Authorization=`Bearer ${this.cloudApiKey}`,a["User-Agent"]="XenoAgentSDK/0.4.0");let c=new AbortController,l=setTimeout(()=>c.abort(),xT);try{let d=await fetch(`${r}/v1/chat/completions`,{method:"POST",headers:a,body:JSON.stringify(s),signal:c.signal});if(!d.ok){let f=await d.text().catch(()=>"");throw new Error(`LLM stream failed (HTTP ${d.status}): ${f}`)}if(!d.body)throw new Error("Response body is null \u2014 streaming not supported");let u=d.body.getReader(),p=new TextDecoder,m="";for(;;){let{done:f,value:g}=await u.read();if(f)break;m+=p.decode(g,{stream:!0});let h=m.split(`
|
|
2631
|
-
`);m=h.pop()??"";for(let y of h){let b=y.trim();if(!b||!b.startsWith("data: "))continue;let w=b.slice(6);if(w==="[DONE]")return;try{let S=JSON.parse(w).choices[0]?.delta.content;S&&(yield S)}catch{}}}}finally{clearTimeout(l)}}async isLocalAvailable(e=!1){let n=Date.now();if(!e&&this.localAvailable!==null&&n-this.lastHealthCheck<Cme)return this.localAvailable;try{let r=new AbortController,o=setTimeout(()=>r.abort(),Pme);try{let i=await fetch(`${this.localUrl}/v1/models`,{signal:r.signal});if(!i.ok)return this.localAvailable=!1,this.localModelName=null,this.lastHealthCheck=n,!1;let s=await i.json();return this.localModelName=s.data?.[0]?.id??null,this.localAvailable=!0,this.lastHealthCheck=n,!0}finally{clearTimeout(o)}}catch{return this.localAvailable=!1,this.localModelName=null,this.lastHealthCheck=n,!1}}setMode(e){this.mode=e}getMode(){return this.mode}setLocalUrl(e){this.localUrl=e,this.localAvailable=null,this.lastHealthCheck=0}setCloudApiKey(e){this.cloudApiKey=e}async getStatus(){let e=await this.isLocalAvailable(),n;return this.mode==="local"?n="local":this.mode==="cloud"?n="cloud":n=e?"local":"cloud",{mode:this.mode,localAvailable:e,activeEndpoint:n,localModel:this.localModelName??void 0,localUrl:this.localUrl,cloudUrl:this.cloudUrl}}asLLMProvider(e){return tL(this,e)}async shouldUseLocal(){return this.mode==="cloud"?!1:this.mode==="local"?this.isLocalAvailable():this.isLocalAvailable()}async chatLocal(e){let n=e.model??this.defaultLocalModel,r=e.systemPrompt?[{role:"system",content:e.systemPrompt},...e.messages]:e.messages,o={model:n,messages:r,stream:!1,max_tokens:e.maxTokens??4096,temperature:e.temperature??.7};e.jsonMode&&(o.response_format={type:"json_object"}),e.stop&&e.stop.length>0&&(o.stop=e.stop);let i=new AbortController,s=setTimeout(()=>i.abort(),xT);try{let a=await fetch(`${this.localUrl}/v1/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o),signal:i.signal});if(!a.ok){let m=await a.text().catch(()=>"");throw new Error(`Local LLM request failed (HTTP ${a.status}): ${m}`)}let c=await a.json(),u=(c.choices?.[0]??{}).message??{},p=c.usage??{};return{success:!0,content:String(u.content??""),endpoint:"local",model:String(c.model??n),usage:{promptTokens:p.prompt_tokens??0,completionTokens:p.completion_tokens??0,totalTokens:p.total_tokens??0}}}finally{clearTimeout(s)}}async chatCloud(e){let n=e.model??this.defaultCloudModel,r=e.systemPrompt?[{role:"system",content:e.systemPrompt},...e.messages]:e.messages,o={model:n,messages:r,stream:!1,max_tokens:e.maxTokens??4096,temperature:e.temperature??.7};e.jsonMode&&(o.response_format={type:"json_object"}),e.stop&&e.stop.length>0&&(o.stop=e.stop);let i={"Content-Type":"application/json",Authorization:`Bearer ${this.cloudApiKey}`,"User-Agent":"XenoAgentSDK/0.4.0"},s=new AbortController,a=setTimeout(()=>s.abort(),xT);try{let c=await fetch(`${this.cloudUrl}/v1/chat/completions`,{method:"POST",headers:i,body:JSON.stringify(o),signal:s.signal});if(!c.ok){let f=`Cloud LLM request failed (HTTP ${c.status})`;try{let h=(await c.json()).error;f=typeof h=="string"?h:h?.message??f}catch{}return{success:!1,content:"",endpoint:"cloud",model:n,usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:f}}let l=await c.json(),p=(l.choices?.[0]??{}).message??{},m=l.usage??{};return{success:!0,content:String(p.content??""),endpoint:"cloud",model:String(l.model??n),usage:{promptTokens:m.prompt_tokens??0,completionTokens:m.completion_tokens??0,totalTokens:m.total_tokens??0}}}finally{clearTimeout(a)}}};function _me(t){if(!t||typeof t.ipcHandle!="function")throw new TypeError("setupAIHandlers requires an injected ipcHandle function");let e=t.provider??new $d(t.config),n=t.ipcHandle;return n("ai:chat",async(r,...o)=>{let i=o[0];return e.chat({messages:i.messages,model:i.model,temperature:i.temperature,maxTokens:i.maxTokens,systemPrompt:i.systemPrompt,jsonMode:i.jsonMode,stop:i.stop})}),n("ai:status",async()=>e.getStatus()),n("ai:set-mode",async(r,...o)=>{let i=o[0];return e.setMode(i),e.getStatus()}),n("ai:set-local-url",async(r,...o)=>{let i=o[0];return e.setLocalUrl(i),e.getStatus()}),n("ai:check-local",async()=>({available:await e.isLocalAvailable(!0),status:await e.getStatus()})),e}function Mme(){try{let t=LB(DB(),".xeno","credentials.json");if(OB(t)){let n=JSON.parse(NB(t,"utf-8"));if(n.apiKey)return n.apiKey;if(n.webToken)return n.webToken}let e=LB(DB(),".xeno","settings.json");if(OB(e)){let n=JSON.parse(NB(e,"utf-8"));if(n.llmApiKey)return n.llmApiKey}}catch{}}import{randomUUID as Ome}from"node:crypto";var Xa=class extends Error{targetApp;action;constructor(e,n,r){super(e),this.name="CrossAppRouterError",this.targetApp=n,this.action=r}},ST=class{handlers=new Map;timeoutMs;constructor(e){this.timeoutMs=e?.timeoutMs??3e4}register(e,n){this.handlers.set(e,n)}unregister(e){return this.handlers.delete(e)}isRegistered(e){return this.handlers.has(e)}listApps(){return Array.from(this.handlers.keys())}async sendToApp(e,n,r,o="orchestrator"){let i=this.handlers.get(e);if(!i)throw new Xa(`App "${e}" is not registered. Available apps: ${this.listApps().join(", ")||"(none)"}`,e,n);let s={id:Ome(),sourceApp:o,targetApp:e,action:n,params:r,timestamp:new Date().toISOString()},a;try{return await Promise.race([i(s).catch(l=>{let d=l instanceof Error?l.message:String(l);throw new Xa(`Handler for "${e}" threw an error (action: "${n}"): ${d}`,e,n)}),new Promise((l,d)=>{a=setTimeout(()=>{d(new Xa(`Message to "${e}" timed out after ${this.timeoutMs}ms (action: "${n}")`,e,n))},this.timeoutMs)})])}finally{a!==void 0&&clearTimeout(a)}}async broadcast(e,n,r="orchestrator"){let o=new Map,s=this.listApps().map(async a=>{try{let c=await this.sendToApp(a,e,n,r);o.set(a,c)}catch(c){let l=c instanceof Error?c.message:String(c);o.set(a,{error:l})}});return await Promise.all(s),o}};import{randomUUID as $B}from"node:crypto";var AT=class{agents=new Map;teams=new Map;registerAgent(e){this.agents.set(e.id,e)}unregisterAgent(e){return this.agents.delete(e)}getAgent(e){return this.agents.get(e)}findByCapability(e){return Array.from(this.agents.values()).filter(n=>n.capabilities.includes(e))}listAgents(){return Array.from(this.agents.values())}registerTeam(e){this.teams.set(e.id,{...e,agentIds:[...new Set(e.agentIds)]})}unregisterTeam(e){return this.teams.delete(e)}getTeam(e){return this.teams.get(e)}listTeams(){return Array.from(this.teams.values())}listAgentsForTeam(e){let n=this.teams.get(e);return n?n.agentIds.map(r=>this.agents.get(r)).filter(r=>r!==void 0):[]}get size(){return this.agents.size}},XB=300*1e3,BB=3e4,Nme=25;function Dme(t){return new Promise(e=>setTimeout(e,t))}var ET=class{registry;messageLog=[];activeTasks=new Map;activeTasksByAgent=new Map;capabilityRoundRobinCursor=new Map;constructor(e){this.registry=e}getAgentCapacity(e){return Math.max(1,Math.floor(e.maxConcurrentTasks??1))}getAgentActiveTaskCount(e){return this.activeTasksByAgent.get(e)?.size??0}isAgentAvailable(e){return this.getAgentActiveTaskCount(e.id)<this.getAgentCapacity(e)}reserveAgentTask(e,n){let r=this.activeTasksByAgent.get(e)??new Set;r.add(n),this.activeTasksByAgent.set(e,r)}releaseAgentTask(e,n){let r=this.activeTasksByAgent.get(e);r&&(r.delete(n),r.size===0&&this.activeTasksByAgent.delete(e))}async waitForAgentCapacity(e,n){let r=Date.now()+Math.max(0,n);for(;!this.isAgentAvailable(e);){if(Date.now()>=r)return!1;await Dme(Math.min(Nme,Math.max(1,r-Date.now())))}return!0}getCapabilityCandidates(e,n){return(n?this.registry.listAgentsForTeam(n):this.registry.findByCapability(e)).filter(o=>o.capabilities.includes(e))}compareAgentLoad(e,n){let r=this.getAgentActiveTaskCount(e.id),o=this.getAgentActiveTaskCount(n.id),i=this.getAgentCapacity(e),s=this.getAgentCapacity(n),a=r/i,c=o/s;return a!==c?a-c:r!==o?r-o:i!==s?s-i:e.id.localeCompare(n.id)}selectAgentForCapability(e,n){let r=this.getCapabilityCandidates(e,n?.teamId);if(r.length===0)return;let o=r.filter(a=>this.isAgentAvailable(a)),i=o.length>0?o:n?.includeBusy?r:[];if(i.length===0)return;let s=n?.strategy??"least-loaded";if(s==="first")return i[0];if(s==="round-robin"){let a=`${n?.teamId??"*"}/${e}`,c=this.capabilityRoundRobinCursor.get(a)??0;for(let d=0;d<i.length;d+=1){let u=(c+d)%i.length,p=i[u];if(n?.includeBusy||this.isAgentAvailable(p))return this.capabilityRoundRobinCursor.set(a,(u+1)%i.length),p}let l=i[c%i.length];return this.capabilityRoundRobinCursor.set(a,(c+1)%i.length),l}return[...i].sort((a,c)=>this.compareAgentLoad(a,c))[0]}getAgentLoad(e){let n=this.registry.getAgent(e);if(!n)return;let r=this.getAgentActiveTaskCount(n.id),o=this.getAgentCapacity(n),i=Math.max(0,o-r);return{agentId:n.id,agentName:n.name,activeTasks:r,maxConcurrentTasks:o,availableSlots:i,isAvailable:i>0}}listAgentLoads(e){return(e?.capability?this.getCapabilityCandidates(e.capability,e.teamId):e?.teamId?this.registry.listAgentsForTeam(e.teamId):this.registry.listAgents()).map(r=>this.getAgentLoad(r.id)).filter(r=>r!==void 0).sort((r,o)=>r.isAvailable!==o.isAvailable?r.isAvailable?-1:1:r.activeTasks!==o.activeTasks?r.activeTasks-o.activeTasks:r.agentId.localeCompare(o.agentId))}async delegateTask(e,n,r){let o=this.registry.getAgent(e);if(!o)return{taskId:"none",status:"failed",result:null,error:`Agent "${e}" not found. Available: ${this.registry.listAgents().map(s=>s.id).join(", ")||"(none)"}`};if(!o.capabilities.includes(n.type))return{taskId:"none",status:"failed",result:null,error:`Agent "${e}" does not support capability "${n.type}". Capabilities: ${o.capabilities.join(", ")}`};let i={id:$B(),type:n.type,description:n.description,input:n.input,priority:r?.priority??"normal",createdAt:new Date().toISOString(),status:"assigned",assignedTo:e,createdBy:r?.createdBy??"orchestrator",parentTaskId:r?.parentTaskId,timeoutMs:r?.timeoutMs??XB};if(!this.isAgentAvailable(o)){if(!r?.waitForCapacity)return{taskId:i.id,status:"failed",result:null,error:`Agent "${e}" is at capacity (${this.getAgentActiveTaskCount(o.id)}/${this.getAgentCapacity(o)} active tasks)`};if(!await this.waitForAgentCapacity(o,r.maxQueueWaitMs??BB))return{taskId:i.id,status:"failed",result:null,error:`Agent "${e}" did not free capacity within ${r.maxQueueWaitMs??BB}ms`}}this.reserveAgentTask(o.id,i.id),this.activeTasks.set(i.id,i),this.logMessage({type:"task-request",from:i.createdBy??"orchestrator",to:e,payload:{task:i}}),i.status="running";try{let s=i.timeoutMs??XB,a,c=await Promise.race([o.handler(i),new Promise((l,d)=>{a=setTimeout(()=>{d(new Error(`Task timed out after ${s}ms`))},s)})]);return a!==void 0&&clearTimeout(a),i.status=c.status==="completed"?"completed":"failed",this.logMessage({type:c.status==="completed"?"task-completed":"task-failed",from:e,to:i.createdBy??"orchestrator",payload:{result:c},correlationId:i.id}),c}catch(s){i.status="failed";let a=s instanceof Error?s.message:String(s),c={taskId:i.id,status:"failed",result:null,error:a};return this.logMessage({type:"task-failed",from:e,to:i.createdBy??"orchestrator",payload:{result:c},correlationId:i.id}),c}finally{this.activeTasks.delete(i.id),this.releaseAgentTask(o.id,i.id)}}async delegateByCapability(e,n,r){if(this.getCapabilityCandidates(e,r?.teamId).length===0){let s=r?.teamId?` in team "${r.teamId}"`:"";return{taskId:"none",status:"failed",result:null,error:`No agent found with capability "${e}"${s}`}}let i=this.selectAgentForCapability(e,{strategy:r?.strategy,teamId:r?.teamId,includeBusy:r?.waitForCapacity===!0});return i?this.delegateTask(i.id,{type:e,...n},r):{taskId:"none",status:"failed",result:null,error:`All agents with capability "${e}" are at capacity`}}async delegateToTeam(e,n,r){let o=this.registry.getTeam(e);return o?this.delegateByCapability(n.type,{description:n.description,input:n.input},{...r,teamId:e,strategy:r?.strategy??o.strategy}):{taskId:"none",status:"failed",result:null,error:`Team "${e}" not found. Available teams: ${this.registry.listTeams().map(i=>i.id).join(", ")||"(none)"}`}}getMessageLog(e=100){return this.messageLog.slice(-e)}getActiveTasks(){return Array.from(this.activeTasks.values())}logMessage(e){let n={id:$B(),timestamp:new Date().toISOString(),...e};this.messageLog.push(n),this.messageLog.length>1e3&&(this.messageLog=this.messageLog.slice(-500))}};at();var Lme={"claude-opus-4-6-thinking":{input:15,output:75},"claude-opus-4-6":{input:15,output:75},"claude-opus-4-5-thinking":{input:15,output:75},"claude-sonnet-4-6":{input:3,output:15},"claude-sonnet-4-5-thinking":{input:3,output:15},"claude-sonnet-4-5":{input:3,output:15},"gemini-2.5-flash":{input:.15,output:.6},"gemini-2.5-flash-lite":{input:.075,output:.3},"gemini-3-flash":{input:.15,output:.6},"gemini-3-pro-high":{input:1.25,output:5},"gpt-5":{input:5,output:15},"gpt-5-codex":{input:5,output:15},"gpt-5.1":{input:5,output:15},"gpt-5.1-codex":{input:5,output:15},"gpt-5.2":{input:5,output:15},"gpt-5.2-codex":{input:5,output:15},"kimi-k2":{input:.6,output:2.4},"kimi-k2-thinking":{input:.6,output:2.4},"kimi-k2.5":{input:.6,output:2.4}};function IT(t,e,n){let r=Lme[t];return r?e/1e6*r.input+n/1e6*r.output:0}function $me(t){return t<=0?"$0.00":t<.001?"<$0.001":t<.01?`$${t.toFixed(4)}`:t<1?`$${t.toFixed(3)}`:`$${t.toFixed(2)}`}import{spawnSync as Xme}from"node:child_process";function Bme(t){let e=process.platform==="win32"?[{command:"clip.exe",args:[]}]:process.platform==="darwin"?[{command:"pbcopy",args:[]}]:[{command:"wl-copy",args:[]},{command:"xclip",args:["-selection","clipboard"]},{command:"xsel",args:["--clipboard","--input"]}],n=null;for(let r of e)try{let o=Xme(r.command,r.args,{input:t,encoding:"utf8"});if(o.error){n=o.error.message;continue}if(o.status===0)return;n=o.stderr||o.stdout||`exit ${o.status}`}catch(o){n=o instanceof Error?o.message:String(o)}throw new Error(`Clipboard copy failed${n?`: ${n}`:""}`)}Mp();Na();_h();yg();_h();import{randomUUID as Ume}from"node:crypto";function Fme(t="delegation"){return`${t}-${Date.now().toString(36)}-${Ume().slice(0,8)}`}function TT(){let t=new Error("Delegated turn was interrupted.");return t.name="AgentInterruptedError",t}function UB(t){let e=t;typeof e.cancelCurrentTurn=="function"?e.cancelCurrentTurn():typeof e.cancel=="function"&&e.cancel()}function jme(t){if(!t?.reduced.selectedFrom)return"high";let e=t.results.filter(n=>n.status!=="ok").length;return e===0&&t.reduced.confidence==="high"?"none":e===0&&t.reduced.confidence==="medium"?"low":e<=1&&t.reduced.confidence!=="low"?"medium":"high"}async function qme(t){return(await KI({cwd:t.cwd,apiKey:t.apiKey,baseURL:t.baseURL,model:t.model,...t.fallbackModels?{fallbackModels:t.fallbackModels}:{},...t.effort?{effort:t.effort}:{},maxTokens:t.task.maxTokens,maxIterations:t.task.maxIterations,parentSystemPrompt:t.parentSystemPrompt,parentExecutionMode:t.parentExecutionMode,subagentRole:t.task.role,permissionEngine:t.permissionEngine,toolRegistry:t.createToolRegistry?.(),...t.auditLogger?{session:{auditLogger:t.auditLogger}}:{},onIteration:t.onIteration,onToolStart:t.onToolStart,onToolWillExecute:t.onToolWillExecute,onToolEnd:t.onToolEnd})).agent}async function xFe(t){let e=t.rootTraceId??Fme(),n=gE({...t.branchPolicy,...t.rolePrecedence?{rolePrecedence:t.rolePrecedence}:{}}),r=new Map,o=new Set,i={input:0,output:0,total:0},s=Math.max(1,Math.floor(t.maxIterations/2)),a=t.createBranchAgent??(f=>qme({...t,...f}));await t.auditLogger?.append({trace_id:e,event_type:"delegation_started",actor:"system",risk_level:"low",metadata:{max_total_tokens:t.maxTotalTokens,timeout_ms:t.timeoutMs,role_precedence:n.rolePrecedence,branch_policy:{team_preset:n.teamPreset,mode:n.mode,roles:n.roles,max_concurrent_branches:n.maxConcurrentBranches,remote_mcp_by_role:n.remoteMcpByRole}}});let c=()=>{for(let f of o)UB(f)},l=()=>{c()};if(t.signal?.aborted)throw TT();t.signal?.addEventListener("abort",l,{once:!0});let d;try{d=await uL({userPrompt:t.userPrompt,briefContext:{cwd:t.cwd,executionMode:t.parentExecutionMode},maxTotalTokens:t.maxTotalTokens,maxIterationsPerBranch:s,limits:{maxBranches:n.roles.length,maxTotalTokens:t.maxTotalTokens,maxWallClockMs:t.timeoutMs,...n.maxConcurrentBranches!==void 0?{maxConcurrentBranches:n.maxConcurrentBranches}:{}},rolePrecedence:n.rolePrecedence,branchPolicy:n},async f=>{if(t.signal?.aborted)throw TT();let g=await t.acquireBranchAdmission?.(f);await t.onBranchStart?.(f);let h,y={status:"failed",tokenUsage:{input:0,output:0,total:0}},b=()=>{h&&UB(h)};try{if(h=await a({task:f,onIteration:t.onIteration,onToolStart:t.onToolStart,onToolWillExecute:t.onToolWillExecute,onToolEnd:t.onToolEnd}),o.add(h),t.signal?.aborted||f.signal?.aborted)throw b(),y={status:"cancelled",tokenUsage:{...h.tokenUsage}},TT();f.signal?.addEventListener("abort",b,{once:!0});let w=await h.run(f.prompt);return r.set(f.id,h.lastTraceId),i.input+=h.tokenUsage.input,i.output+=h.tokenUsage.output,i.total+=h.tokenUsage.total,await t.onBranchComplete?.(f,{output:w,traceId:h.lastTraceId,tokenUsage:{...h.tokenUsage}}),y={status:"completed",tokenUsage:{...h.tokenUsage}},{output:w,tokensUsed:h.tokenUsage.total}}catch(w){let v=h?.tokenUsage??{input:0,output:0,total:0};throw y={status:w instanceof Error&&w.name==="AgentInterruptedError"?"cancelled":"failed",tokenUsage:{...v},error:w},await t.onBranchError?.(f,w,{tokenUsage:{...v}}),w}finally{f.signal?.removeEventListener("abort",b),h&&o.delete(h),await g?.settle(y)}})}catch(f){throw await t.auditLogger?.append({trace_id:e,event_type:f instanceof Error&&f.name==="AgentInterruptedError"?"delegation_interrupted":"delegation_failed",actor:"system",risk_level:"high",status:"error",reason:f instanceof Error?f.message:String(f)}),f}finally{t.signal?.removeEventListener("abort",l)}let u=lL(d.results),p=dL(d);if(p.answer.trim().length===0)throw await t.auditLogger?.append({trace_id:e,event_type:"delegation_failed",actor:"system",risk_level:"high",status:"error",reason:p.failureReason??"Delegated branches produced no usable answer.",metadata:{subagents:u}}),new Error(p.failureReason??"Delegated branches produced no usable answer.");let m=d.reduced.selectedFrom?r.get(d.reduced.selectedFrom.id)??e:e;return t.skipAuditCompletion||await t.auditLogger?.append({trace_id:m,event_type:"delegation_completed",actor:"system",risk_level:jme(d),status:"ok",metadata:{selected_from:d.reduced.selectedFrom,confidence:d.reduced.confidence,selection_reason:d.reduced.selectionReason,subagents:u}}),{answer:p.answer,workflow:d,summary:u,tokenUsage:i,rootTraceId:e,selectedTraceId:m}}import{existsSync as FB,readFileSync as Hme}from"node:fs";import{homedir as Vme}from"node:os";import{join as kT,resolve as RT}from"node:path";Na();Co();st();function zme(t){let e=t.input_schema?.properties,n=e&&typeof e=="object"?Object.keys(e).sort():[];return{name:t.name,description:t.description,inputFields:n,requiredFields:[...t.input_schema.required??[]].sort()}}function Gme(t){if(!FB(t))return[];let e=Hme(t,"utf-8"),n=ce(e,{});return(n.plugins&&typeof n.plugins=="object"?Object.values(n.plugins):[]).map(o=>({name:o.manifest?.name??"unknown",version:o.manifest?.version??"unknown",status:o.status??"unknown",path:o.path??"",capabilities:[...o.manifest?.capabilities??[]].sort(),permissions:[...o.manifest?.permissions??[]].sort(),...o.manifest?.entryPoint?{entryPoint:o.manifest.entryPoint}:{},...o.error?{error:o.error}:{}})).sort((o,i)=>o.name.localeCompare(i.name))}function CFe(t={}){let e=RT(t.cwd??process.cwd()),r=rn({cwd:e}).getDefinitions().map(zme).sort((c,l)=>c.name.localeCompare(l.name)),o=RT(t.pluginDir??kT(Vme(),".xeno","plugins")),i=kT(o,"plugins.json"),s=Gme(i),a=[".xeno/identity.md",".xeno/xeno-main.md",".xeno/memory.md",".xeno/plugins.json",".xeno/mcp.json",".xeno/config.json",".mcprc",".xenocode",".xenocode.json"].map(c=>{let l=kT(e,c);return{path:l,exists:FB(l)}});return{cwd:e,toolCount:r.length,tools:r,pluginDir:o,pluginRegistryPath:i,pluginCount:s.length,plugins:s,projectFiles:a}}async function _Fe(t={}){let e=RT(t.cwd??process.cwd()),n=t.model??"claude-sonnet-4-6",r=t.date??new Date().toISOString().split("T")[0],o=t.executionMode??"agent",i=await Vr({cwd:e,model:n,date:r,role:t.role,executionMode:o,sessionId:t.sessionId,promptMemory:t.promptMemory,identity:t.identity,memory:t.memory});return{cwd:e,model:n,date:r,executionMode:o,...t.role?{role:t.role}:{},systemPrompt:i.systemPrompt,toolNames:i.toolRegistry.listNames().sort(),projectConfig:up(e),...i.identity?{identity:i.identity}:{},...i.memory?{memory:i.memory}:{}}}ao();sd();ci();Dt();function Wme(t){return fi(t)}function Jme(t){let e={};for(let[n,r]of Object.entries(t))typeof r=="string"?e[n]=r.length>200?`${r.slice(0,200)}...`:r:typeof r=="number"||typeof r=="boolean"||r===null?e[n]=r:Array.isArray(r)?e[n]=r.slice(0,10):typeof r=="object"?e[n]="[object]":e[n]=String(r);return e}function jB(t){let n=up(t)?.permissions;if(!n)return[];let r=(o,i)=>(o??[]).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({tool:"Bash",pattern:s,decision:i}));return[...r(n.deniedCommands,"deny"),...r(n.allowedCommands,"allow")]}var PT=class extends $t{constructor(n,r,o,i){super(n,r,o);this.baseRules=i}baseRules;setWorkingDirectory(n){super.setWorkingDirectory(n),this.setRules([...this.baseRules,...jB(n)])}};function XFe(t){let e=()=>typeof t.cwd=="function"?t.cwd():t.cwd,n=e(),r=t.permissionProfile??_b(u0().permissionProfile??"default")??void 0,o=t.promptFn?async a=>{let c=await t.promptFn(a),l=e();return c==="always"&&l&&(a.directory?s0(l,a.directory):a.approvalKey&&i0(l,a.approvalKey)),c}:void 0,i=t.rules??[],s=new PT({mode:t.mode,...r?{profile:r}:{},rules:[...i,...n?jB(n):[]]},o,async a=>{t.decisionHook&&await t.decisionHook(a),t.auditLogger&&await t.auditLogger.append({trace_id:a.traceId??t.fallbackTraceId??"unknown",event_type:"permission_decision",actor:"system",risk_level:Wme(a.toolName),tool_name:a.toolName,decision:a.allowed?"allow":"deny",reason:a.reason,metadata:{mode:a.mode,input:Jme(a.input),requester:a.requesterLabel}})},i);if(n&&s.setWorkingDirectory(n),n){let a=Yt(n);s.loadPersistentState({allowedTools:a.allowedTools,allowedDirectories:a.allowedDirectories})}return s}Sr();function FFe(t){return t.merged?`M${t.memoryTokens} H${t.sessionHistoryTokens}/${t.sessionHistoryEntries}`:"M0 H0/0"}async function jFe(t,e){if(!t)return{merged:void 0,memoryTokens:0,sessionHistoryTokens:0,sessionHistoryEntries:0,totalTokens:0};let n=await t.loadForPrompt(),r=t.formatForPrompt(n),o=await t.loadProjectSessionContext({excludeSessionId:e}),i=[r,o.content].filter(a=>typeof a=="string"&&a.trim().length>0);if(i.length===0)return{merged:void 0,memoryTokens:n.totalTokens,sessionHistoryTokens:o.totalTokens,sessionHistoryEntries:o.entries.length,totalTokens:0};let s=i.join(`
|
|
2631
|
+
`);m=h.pop()??"";for(let y of h){let b=y.trim();if(!b||!b.startsWith("data: "))continue;let w=b.slice(6);if(w==="[DONE]")return;try{let S=JSON.parse(w).choices[0]?.delta.content;S&&(yield S)}catch{}}}}finally{clearTimeout(l)}}async isLocalAvailable(e=!1){let n=Date.now();if(!e&&this.localAvailable!==null&&n-this.lastHealthCheck<Cme)return this.localAvailable;try{let r=new AbortController,o=setTimeout(()=>r.abort(),Pme);try{let i=await fetch(`${this.localUrl}/v1/models`,{signal:r.signal});if(!i.ok)return this.localAvailable=!1,this.localModelName=null,this.lastHealthCheck=n,!1;let s=await i.json();return this.localModelName=s.data?.[0]?.id??null,this.localAvailable=!0,this.lastHealthCheck=n,!0}finally{clearTimeout(o)}}catch{return this.localAvailable=!1,this.localModelName=null,this.lastHealthCheck=n,!1}}setMode(e){this.mode=e}getMode(){return this.mode}setLocalUrl(e){this.localUrl=e,this.localAvailable=null,this.lastHealthCheck=0}setCloudApiKey(e){this.cloudApiKey=e}async getStatus(){let e=await this.isLocalAvailable(),n;return this.mode==="local"?n="local":this.mode==="cloud"?n="cloud":n=e?"local":"cloud",{mode:this.mode,localAvailable:e,activeEndpoint:n,localModel:this.localModelName??void 0,localUrl:this.localUrl,cloudUrl:this.cloudUrl}}asLLMProvider(e){return tL(this,e)}async shouldUseLocal(){return this.mode==="cloud"?!1:this.mode==="local"?this.isLocalAvailable():this.isLocalAvailable()}async chatLocal(e){let n=e.model??this.defaultLocalModel,r=e.systemPrompt?[{role:"system",content:e.systemPrompt},...e.messages]:e.messages,o={model:n,messages:r,stream:!1,max_tokens:e.maxTokens??4096,temperature:e.temperature??.7};e.jsonMode&&(o.response_format={type:"json_object"}),e.stop&&e.stop.length>0&&(o.stop=e.stop);let i=new AbortController,s=setTimeout(()=>i.abort(),xT);try{let a=await fetch(`${this.localUrl}/v1/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o),signal:i.signal});if(!a.ok){let m=await a.text().catch(()=>"");throw new Error(`Local LLM request failed (HTTP ${a.status}): ${m}`)}let c=await a.json(),u=(c.choices?.[0]??{}).message??{},p=c.usage??{};return{success:!0,content:String(u.content??""),endpoint:"local",model:String(c.model??n),usage:{promptTokens:p.prompt_tokens??0,completionTokens:p.completion_tokens??0,totalTokens:p.total_tokens??0}}}finally{clearTimeout(s)}}async chatCloud(e){let n=e.model??this.defaultCloudModel,r=e.systemPrompt?[{role:"system",content:e.systemPrompt},...e.messages]:e.messages,o={model:n,messages:r,stream:!1,max_tokens:e.maxTokens??4096,temperature:e.temperature??.7};e.jsonMode&&(o.response_format={type:"json_object"}),e.stop&&e.stop.length>0&&(o.stop=e.stop);let i={"Content-Type":"application/json",Authorization:`Bearer ${this.cloudApiKey}`,"User-Agent":"XenoAgentSDK/0.4.0"},s=new AbortController,a=setTimeout(()=>s.abort(),xT);try{let c=await fetch(`${this.cloudUrl}/v1/chat/completions`,{method:"POST",headers:i,body:JSON.stringify(o),signal:s.signal});if(!c.ok){let f=`Cloud LLM request failed (HTTP ${c.status})`;try{let h=(await c.json()).error;f=typeof h=="string"?h:h?.message??f}catch{}return{success:!1,content:"",endpoint:"cloud",model:n,usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:f}}let l=await c.json(),p=(l.choices?.[0]??{}).message??{},m=l.usage??{};return{success:!0,content:String(p.content??""),endpoint:"cloud",model:String(l.model??n),usage:{promptTokens:m.prompt_tokens??0,completionTokens:m.completion_tokens??0,totalTokens:m.total_tokens??0}}}finally{clearTimeout(a)}}};function _me(t){if(!t||typeof t.ipcHandle!="function")throw new TypeError("setupAIHandlers requires an injected ipcHandle function");let e=t.provider??new $d(t.config),n=t.ipcHandle;return n("ai:chat",async(r,...o)=>{let i=o[0];return e.chat({messages:i.messages,model:i.model,temperature:i.temperature,maxTokens:i.maxTokens,systemPrompt:i.systemPrompt,jsonMode:i.jsonMode,stop:i.stop})}),n("ai:status",async()=>e.getStatus()),n("ai:set-mode",async(r,...o)=>{let i=o[0];return e.setMode(i),e.getStatus()}),n("ai:set-local-url",async(r,...o)=>{let i=o[0];return e.setLocalUrl(i),e.getStatus()}),n("ai:check-local",async()=>({available:await e.isLocalAvailable(!0),status:await e.getStatus()})),e}function Mme(){try{let t=LB(DB(),".xeno","credentials.json");if(OB(t)){let n=JSON.parse(NB(t,"utf-8"));if(n.apiKey)return n.apiKey;if(n.webToken)return n.webToken}let e=LB(DB(),".xeno","settings.json");if(OB(e)){let n=JSON.parse(NB(e,"utf-8"));if(n.llmApiKey)return n.llmApiKey}}catch{}}import{randomUUID as Ome}from"node:crypto";var Xa=class extends Error{targetApp;action;constructor(e,n,r){super(e),this.name="CrossAppRouterError",this.targetApp=n,this.action=r}},ST=class{handlers=new Map;timeoutMs;constructor(e){this.timeoutMs=e?.timeoutMs??3e4}register(e,n){this.handlers.set(e,n)}unregister(e){return this.handlers.delete(e)}isRegistered(e){return this.handlers.has(e)}listApps(){return Array.from(this.handlers.keys())}async sendToApp(e,n,r,o="orchestrator"){let i=this.handlers.get(e);if(!i)throw new Xa(`App "${e}" is not registered. Available apps: ${this.listApps().join(", ")||"(none)"}`,e,n);let s={id:Ome(),sourceApp:o,targetApp:e,action:n,params:r,timestamp:new Date().toISOString()},a;try{return await Promise.race([i(s).catch(l=>{let d=l instanceof Error?l.message:String(l);throw new Xa(`Handler for "${e}" threw an error (action: "${n}"): ${d}`,e,n)}),new Promise((l,d)=>{a=setTimeout(()=>{d(new Xa(`Message to "${e}" timed out after ${this.timeoutMs}ms (action: "${n}")`,e,n))},this.timeoutMs)})])}finally{a!==void 0&&clearTimeout(a)}}async broadcast(e,n,r="orchestrator"){let o=new Map,s=this.listApps().map(async a=>{try{let c=await this.sendToApp(a,e,n,r);o.set(a,c)}catch(c){let l=c instanceof Error?c.message:String(c);o.set(a,{error:l})}});return await Promise.all(s),o}};import{randomUUID as $B}from"node:crypto";var AT=class{agents=new Map;teams=new Map;registerAgent(e){this.agents.set(e.id,e)}unregisterAgent(e){return this.agents.delete(e)}getAgent(e){return this.agents.get(e)}findByCapability(e){return Array.from(this.agents.values()).filter(n=>n.capabilities.includes(e))}listAgents(){return Array.from(this.agents.values())}registerTeam(e){this.teams.set(e.id,{...e,agentIds:[...new Set(e.agentIds)]})}unregisterTeam(e){return this.teams.delete(e)}getTeam(e){return this.teams.get(e)}listTeams(){return Array.from(this.teams.values())}listAgentsForTeam(e){let n=this.teams.get(e);return n?n.agentIds.map(r=>this.agents.get(r)).filter(r=>r!==void 0):[]}get size(){return this.agents.size}},XB=300*1e3,BB=3e4,Nme=25;function Dme(t){return new Promise(e=>setTimeout(e,t))}var ET=class{registry;messageLog=[];activeTasks=new Map;activeTasksByAgent=new Map;capabilityRoundRobinCursor=new Map;constructor(e){this.registry=e}getAgentCapacity(e){return Math.max(1,Math.floor(e.maxConcurrentTasks??1))}getAgentActiveTaskCount(e){return this.activeTasksByAgent.get(e)?.size??0}isAgentAvailable(e){return this.getAgentActiveTaskCount(e.id)<this.getAgentCapacity(e)}reserveAgentTask(e,n){let r=this.activeTasksByAgent.get(e)??new Set;r.add(n),this.activeTasksByAgent.set(e,r)}releaseAgentTask(e,n){let r=this.activeTasksByAgent.get(e);r&&(r.delete(n),r.size===0&&this.activeTasksByAgent.delete(e))}async waitForAgentCapacity(e,n){let r=Date.now()+Math.max(0,n);for(;!this.isAgentAvailable(e);){if(Date.now()>=r)return!1;await Dme(Math.min(Nme,Math.max(1,r-Date.now())))}return!0}getCapabilityCandidates(e,n){return(n?this.registry.listAgentsForTeam(n):this.registry.findByCapability(e)).filter(o=>o.capabilities.includes(e))}compareAgentLoad(e,n){let r=this.getAgentActiveTaskCount(e.id),o=this.getAgentActiveTaskCount(n.id),i=this.getAgentCapacity(e),s=this.getAgentCapacity(n),a=r/i,c=o/s;return a!==c?a-c:r!==o?r-o:i!==s?s-i:e.id.localeCompare(n.id)}selectAgentForCapability(e,n){let r=this.getCapabilityCandidates(e,n?.teamId);if(r.length===0)return;let o=r.filter(a=>this.isAgentAvailable(a)),i=o.length>0?o:n?.includeBusy?r:[];if(i.length===0)return;let s=n?.strategy??"least-loaded";if(s==="first")return i[0];if(s==="round-robin"){let a=`${n?.teamId??"*"}/${e}`,c=this.capabilityRoundRobinCursor.get(a)??0;for(let d=0;d<i.length;d+=1){let u=(c+d)%i.length,p=i[u];if(n?.includeBusy||this.isAgentAvailable(p))return this.capabilityRoundRobinCursor.set(a,(u+1)%i.length),p}let l=i[c%i.length];return this.capabilityRoundRobinCursor.set(a,(c+1)%i.length),l}return[...i].sort((a,c)=>this.compareAgentLoad(a,c))[0]}getAgentLoad(e){let n=this.registry.getAgent(e);if(!n)return;let r=this.getAgentActiveTaskCount(n.id),o=this.getAgentCapacity(n),i=Math.max(0,o-r);return{agentId:n.id,agentName:n.name,activeTasks:r,maxConcurrentTasks:o,availableSlots:i,isAvailable:i>0}}listAgentLoads(e){return(e?.capability?this.getCapabilityCandidates(e.capability,e.teamId):e?.teamId?this.registry.listAgentsForTeam(e.teamId):this.registry.listAgents()).map(r=>this.getAgentLoad(r.id)).filter(r=>r!==void 0).sort((r,o)=>r.isAvailable!==o.isAvailable?r.isAvailable?-1:1:r.activeTasks!==o.activeTasks?r.activeTasks-o.activeTasks:r.agentId.localeCompare(o.agentId))}async delegateTask(e,n,r){let o=this.registry.getAgent(e);if(!o)return{taskId:"none",status:"failed",result:null,error:`Agent "${e}" not found. Available: ${this.registry.listAgents().map(s=>s.id).join(", ")||"(none)"}`};if(!o.capabilities.includes(n.type))return{taskId:"none",status:"failed",result:null,error:`Agent "${e}" does not support capability "${n.type}". Capabilities: ${o.capabilities.join(", ")}`};let i={id:$B(),type:n.type,description:n.description,input:n.input,priority:r?.priority??"normal",createdAt:new Date().toISOString(),status:"assigned",assignedTo:e,createdBy:r?.createdBy??"orchestrator",parentTaskId:r?.parentTaskId,timeoutMs:r?.timeoutMs??XB};if(!this.isAgentAvailable(o)){if(!r?.waitForCapacity)return{taskId:i.id,status:"failed",result:null,error:`Agent "${e}" is at capacity (${this.getAgentActiveTaskCount(o.id)}/${this.getAgentCapacity(o)} active tasks)`};if(!await this.waitForAgentCapacity(o,r.maxQueueWaitMs??BB))return{taskId:i.id,status:"failed",result:null,error:`Agent "${e}" did not free capacity within ${r.maxQueueWaitMs??BB}ms`}}this.reserveAgentTask(o.id,i.id),this.activeTasks.set(i.id,i),this.logMessage({type:"task-request",from:i.createdBy??"orchestrator",to:e,payload:{task:i}}),i.status="running";try{let s=i.timeoutMs??XB,a,c=await Promise.race([o.handler(i),new Promise((l,d)=>{a=setTimeout(()=>{d(new Error(`Task timed out after ${s}ms`))},s)})]);return a!==void 0&&clearTimeout(a),i.status=c.status==="completed"?"completed":"failed",this.logMessage({type:c.status==="completed"?"task-completed":"task-failed",from:e,to:i.createdBy??"orchestrator",payload:{result:c},correlationId:i.id}),c}catch(s){i.status="failed";let a=s instanceof Error?s.message:String(s),c={taskId:i.id,status:"failed",result:null,error:a};return this.logMessage({type:"task-failed",from:e,to:i.createdBy??"orchestrator",payload:{result:c},correlationId:i.id}),c}finally{this.activeTasks.delete(i.id),this.releaseAgentTask(o.id,i.id)}}async delegateByCapability(e,n,r){if(this.getCapabilityCandidates(e,r?.teamId).length===0){let s=r?.teamId?` in team "${r.teamId}"`:"";return{taskId:"none",status:"failed",result:null,error:`No agent found with capability "${e}"${s}`}}let i=this.selectAgentForCapability(e,{strategy:r?.strategy,teamId:r?.teamId,includeBusy:r?.waitForCapacity===!0});return i?this.delegateTask(i.id,{type:e,...n},r):{taskId:"none",status:"failed",result:null,error:`All agents with capability "${e}" are at capacity`}}async delegateToTeam(e,n,r){let o=this.registry.getTeam(e);return o?this.delegateByCapability(n.type,{description:n.description,input:n.input},{...r,teamId:e,strategy:r?.strategy??o.strategy}):{taskId:"none",status:"failed",result:null,error:`Team "${e}" not found. Available teams: ${this.registry.listTeams().map(i=>i.id).join(", ")||"(none)"}`}}getMessageLog(e=100){return this.messageLog.slice(-e)}getActiveTasks(){return Array.from(this.activeTasks.values())}logMessage(e){let n={id:$B(),timestamp:new Date().toISOString(),...e};this.messageLog.push(n),this.messageLog.length>1e3&&(this.messageLog=this.messageLog.slice(-500))}};at();var Lme={"claude-opus-4-6-thinking":{input:15,output:75},"claude-opus-4-6":{input:15,output:75},"claude-opus-4-5-thinking":{input:15,output:75},"claude-sonnet-4-6":{input:3,output:15},"claude-sonnet-4-5-thinking":{input:3,output:15},"claude-sonnet-4-5":{input:3,output:15},"gemini-2.5-flash":{input:.15,output:.6},"gemini-2.5-flash-lite":{input:.075,output:.3},"gemini-3-flash":{input:.15,output:.6},"gemini-3-pro-high":{input:1.25,output:5},"gpt-5":{input:5,output:15},"gpt-5-codex":{input:5,output:15},"gpt-5.1":{input:5,output:15},"gpt-5.1-codex":{input:5,output:15},"gpt-5.2":{input:5,output:15},"gpt-5.2-codex":{input:5,output:15},"kimi-k2":{input:.6,output:2.4},"kimi-k2-thinking":{input:.6,output:2.4},"kimi-k2.5":{input:.6,output:2.4}};function IT(t,e,n){let r=Lme[t];return r?e/1e6*r.input+n/1e6*r.output:0}function $me(t){return t<=0?"$0.00":t<.001?"<$0.001":t<.01?`$${t.toFixed(4)}`:t<1?`$${t.toFixed(3)}`:`$${t.toFixed(2)}`}import{spawnSync as Xme}from"node:child_process";function Bme(t){let e=process.platform==="win32"?[{command:"clip.exe",args:[]}]:process.platform==="darwin"?[{command:"pbcopy",args:[]}]:[{command:"wl-copy",args:[]},{command:"xclip",args:["-selection","clipboard"]},{command:"xsel",args:["--clipboard","--input"]}],n=null;for(let r of e)try{let o=Xme(r.command,r.args,{input:t,encoding:"utf8"});if(o.error){n=o.error.message;continue}if(o.status===0)return;n=o.stderr||o.stdout||`exit ${o.status}`}catch(o){n=o instanceof Error?o.message:String(o)}throw new Error(`Clipboard copy failed${n?`: ${n}`:""}`)}Mp();Na();_h();yg();_h();import{randomUUID as Ume}from"node:crypto";function Fme(t="delegation"){return`${t}-${Date.now().toString(36)}-${Ume().slice(0,8)}`}function TT(){let t=new Error("Delegated turn was interrupted.");return t.name="AgentInterruptedError",t}function UB(t){let e=t;typeof e.cancelCurrentTurn=="function"?e.cancelCurrentTurn():typeof e.cancel=="function"&&e.cancel()}function jme(t){if(!t?.reduced.selectedFrom)return"high";let e=t.results.filter(n=>n.status!=="ok").length;return e===0&&t.reduced.confidence==="high"?"none":e===0&&t.reduced.confidence==="medium"?"low":e<=1&&t.reduced.confidence!=="low"?"medium":"high"}async function qme(t){return(await KI({cwd:t.cwd,apiKey:t.apiKey,baseURL:t.baseURL,model:t.model,...t.fallbackModels?{fallbackModels:t.fallbackModels}:{},...t.effort?{effort:t.effort}:{},maxTokens:t.task.maxTokens,turnTokenBudget:t.task.maxTokens,maxIterations:t.task.maxIterations,parentSystemPrompt:t.parentSystemPrompt,parentExecutionMode:t.parentExecutionMode,subagentRole:t.task.role,permissionEngine:t.permissionEngine,toolRegistry:t.createToolRegistry?.(),...t.auditLogger?{session:{auditLogger:t.auditLogger}}:{},onIteration:t.onIteration,onToolStart:t.onToolStart,onToolWillExecute:t.onToolWillExecute,onToolEnd:t.onToolEnd})).agent}async function xFe(t){let e=t.rootTraceId??Fme(),n=gE({...t.branchPolicy,...t.rolePrecedence?{rolePrecedence:t.rolePrecedence}:{}}),r=new Map,o=new Set,i={input:0,output:0,total:0},s=Math.max(1,Math.floor(t.maxIterations/2)),a=t.createBranchAgent??(f=>qme({...t,...f}));await t.auditLogger?.append({trace_id:e,event_type:"delegation_started",actor:"system",risk_level:"low",metadata:{max_total_tokens:t.maxTotalTokens,timeout_ms:t.timeoutMs,role_precedence:n.rolePrecedence,branch_policy:{team_preset:n.teamPreset,mode:n.mode,roles:n.roles,max_concurrent_branches:n.maxConcurrentBranches,remote_mcp_by_role:n.remoteMcpByRole}}});let c=()=>{for(let f of o)UB(f)},l=()=>{c()};if(t.signal?.aborted)throw TT();t.signal?.addEventListener("abort",l,{once:!0});let d;try{d=await uL({userPrompt:t.userPrompt,briefContext:{cwd:t.cwd,executionMode:t.parentExecutionMode},maxTotalTokens:t.maxTotalTokens,maxIterationsPerBranch:s,limits:{maxBranches:n.roles.length,maxTotalTokens:t.maxTotalTokens,maxWallClockMs:t.timeoutMs,...n.maxConcurrentBranches!==void 0?{maxConcurrentBranches:n.maxConcurrentBranches}:{}},rolePrecedence:n.rolePrecedence,branchPolicy:n},async f=>{if(t.signal?.aborted)throw TT();let g=await t.acquireBranchAdmission?.(f);await t.onBranchStart?.(f);let h,y={status:"failed",tokenUsage:{input:0,output:0,total:0}},b=()=>{h&&UB(h)};try{if(h=await a({task:f,onIteration:t.onIteration,onToolStart:t.onToolStart,onToolWillExecute:t.onToolWillExecute,onToolEnd:t.onToolEnd}),o.add(h),t.signal?.aborted||f.signal?.aborted)throw b(),y={status:"cancelled",tokenUsage:{...h.tokenUsage}},TT();f.signal?.addEventListener("abort",b,{once:!0});let w=await h.run(f.prompt);return r.set(f.id,h.lastTraceId),i.input+=h.tokenUsage.input,i.output+=h.tokenUsage.output,i.total+=h.tokenUsage.total,await t.onBranchComplete?.(f,{output:w,traceId:h.lastTraceId,tokenUsage:{...h.tokenUsage}}),y={status:"completed",tokenUsage:{...h.tokenUsage}},{output:w,tokensUsed:h.tokenUsage.total}}catch(w){let v=h?.tokenUsage??{input:0,output:0,total:0};throw y={status:w instanceof Error&&w.name==="AgentInterruptedError"?"cancelled":"failed",tokenUsage:{...v},error:w},await t.onBranchError?.(f,w,{tokenUsage:{...v}}),w}finally{f.signal?.removeEventListener("abort",b),h&&o.delete(h),await g?.settle(y)}})}catch(f){throw await t.auditLogger?.append({trace_id:e,event_type:f instanceof Error&&f.name==="AgentInterruptedError"?"delegation_interrupted":"delegation_failed",actor:"system",risk_level:"high",status:"error",reason:f instanceof Error?f.message:String(f)}),f}finally{t.signal?.removeEventListener("abort",l)}let u=lL(d.results),p=dL(d);if(p.answer.trim().length===0)throw await t.auditLogger?.append({trace_id:e,event_type:"delegation_failed",actor:"system",risk_level:"high",status:"error",reason:p.failureReason??"Delegated branches produced no usable answer.",metadata:{subagents:u}}),new Error(p.failureReason??"Delegated branches produced no usable answer.");let m=d.reduced.selectedFrom?r.get(d.reduced.selectedFrom.id)??e:e;return t.skipAuditCompletion||await t.auditLogger?.append({trace_id:m,event_type:"delegation_completed",actor:"system",risk_level:jme(d),status:"ok",metadata:{selected_from:d.reduced.selectedFrom,confidence:d.reduced.confidence,selection_reason:d.reduced.selectionReason,subagents:u}}),{answer:p.answer,workflow:d,summary:u,tokenUsage:i,rootTraceId:e,selectedTraceId:m}}import{existsSync as FB,readFileSync as Hme}from"node:fs";import{homedir as Vme}from"node:os";import{join as kT,resolve as RT}from"node:path";Na();Co();st();function zme(t){let e=t.input_schema?.properties,n=e&&typeof e=="object"?Object.keys(e).sort():[];return{name:t.name,description:t.description,inputFields:n,requiredFields:[...t.input_schema.required??[]].sort()}}function Gme(t){if(!FB(t))return[];let e=Hme(t,"utf-8"),n=ce(e,{});return(n.plugins&&typeof n.plugins=="object"?Object.values(n.plugins):[]).map(o=>({name:o.manifest?.name??"unknown",version:o.manifest?.version??"unknown",status:o.status??"unknown",path:o.path??"",capabilities:[...o.manifest?.capabilities??[]].sort(),permissions:[...o.manifest?.permissions??[]].sort(),...o.manifest?.entryPoint?{entryPoint:o.manifest.entryPoint}:{},...o.error?{error:o.error}:{}})).sort((o,i)=>o.name.localeCompare(i.name))}function CFe(t={}){let e=RT(t.cwd??process.cwd()),r=rn({cwd:e}).getDefinitions().map(zme).sort((c,l)=>c.name.localeCompare(l.name)),o=RT(t.pluginDir??kT(Vme(),".xeno","plugins")),i=kT(o,"plugins.json"),s=Gme(i),a=[".xeno/identity.md",".xeno/xeno-main.md",".xeno/memory.md",".xeno/plugins.json",".xeno/mcp.json",".xeno/config.json",".mcprc",".xenocode",".xenocode.json"].map(c=>{let l=kT(e,c);return{path:l,exists:FB(l)}});return{cwd:e,toolCount:r.length,tools:r,pluginDir:o,pluginRegistryPath:i,pluginCount:s.length,plugins:s,projectFiles:a}}async function _Fe(t={}){let e=RT(t.cwd??process.cwd()),n=t.model??"claude-sonnet-4-6",r=t.date??new Date().toISOString().split("T")[0],o=t.executionMode??"agent",i=await Vr({cwd:e,model:n,date:r,role:t.role,executionMode:o,sessionId:t.sessionId,promptMemory:t.promptMemory,identity:t.identity,memory:t.memory});return{cwd:e,model:n,date:r,executionMode:o,...t.role?{role:t.role}:{},systemPrompt:i.systemPrompt,toolNames:i.toolRegistry.listNames().sort(),projectConfig:up(e),...i.identity?{identity:i.identity}:{},...i.memory?{memory:i.memory}:{}}}ao();sd();ci();Dt();function Wme(t){return fi(t)}function Jme(t){let e={};for(let[n,r]of Object.entries(t))typeof r=="string"?e[n]=r.length>200?`${r.slice(0,200)}...`:r:typeof r=="number"||typeof r=="boolean"||r===null?e[n]=r:Array.isArray(r)?e[n]=r.slice(0,10):typeof r=="object"?e[n]="[object]":e[n]=String(r);return e}function jB(t){let n=up(t)?.permissions;if(!n)return[];let r=(o,i)=>(o??[]).map(s=>s.trim()).filter(s=>s.length>0).map(s=>({tool:"Bash",pattern:s,decision:i}));return[...r(n.deniedCommands,"deny"),...r(n.allowedCommands,"allow")]}var PT=class extends $t{constructor(n,r,o,i){super(n,r,o);this.baseRules=i}baseRules;setWorkingDirectory(n){super.setWorkingDirectory(n),this.setRules([...this.baseRules,...jB(n)])}};function XFe(t){let e=()=>typeof t.cwd=="function"?t.cwd():t.cwd,n=e(),r=t.permissionProfile??_b(u0().permissionProfile??"default")??void 0,o=t.promptFn?async a=>{let c=await t.promptFn(a),l=e();return c==="always"&&l&&(a.directory?s0(l,a.directory):a.approvalKey&&i0(l,a.approvalKey)),c}:void 0,i=t.rules??[],s=new PT({mode:t.mode,...r?{profile:r}:{},rules:[...i,...n?jB(n):[]]},o,async a=>{t.decisionHook&&await t.decisionHook(a),t.auditLogger&&await t.auditLogger.append({trace_id:a.traceId??t.fallbackTraceId??"unknown",event_type:"permission_decision",actor:"system",risk_level:Wme(a.toolName),tool_name:a.toolName,decision:a.allowed?"allow":"deny",reason:a.reason,metadata:{mode:a.mode,input:Jme(a.input),requester:a.requesterLabel}})},i);if(n&&s.setWorkingDirectory(n),n){let a=Yt(n);s.loadPersistentState({allowedTools:a.allowedTools,allowedDirectories:a.allowedDirectories})}return s}Sr();function FFe(t){return t.merged?`M${t.memoryTokens} H${t.sessionHistoryTokens}/${t.sessionHistoryEntries}`:"M0 H0/0"}async function jFe(t,e){if(!t)return{merged:void 0,memoryTokens:0,sessionHistoryTokens:0,sessionHistoryEntries:0,totalTokens:0};let n=await t.loadForPrompt(),r=t.formatForPrompt(n),o=await t.loadProjectSessionContext({excludeSessionId:e}),i=[r,o.content].filter(a=>typeof a=="string"&&a.trim().length>0);if(i.length===0)return{merged:void 0,memoryTokens:n.totalTokens,sessionHistoryTokens:o.totalTokens,sessionHistoryEntries:o.entries.length,totalTokens:0};let s=i.join(`
|
|
2632
2632
|
|
|
2633
2633
|
---
|
|
2634
2634
|
|