@xenosystem/agent-sdk 0.10.41 → 0.10.43
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.d.cts +2 -0
- package/dist/automation/index.d.ts +2 -0
- 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/electron/index.cjs +203 -293
- package/dist/electron/index.d.cts +13 -1
- package/dist/electron/index.d.ts +13 -1
- package/dist/electron/index.js +204 -294
- package/dist/electron/metafile-cjs.json +1 -1
- package/dist/electron/metafile-esm.json +1 -1
- package/dist/governance/index.cjs +22 -28
- package/dist/governance/index.d.cts +43 -17
- package/dist/governance/index.d.ts +43 -17
- package/dist/governance/index.js +21 -27
- package/dist/governance/metafile-cjs.json +1 -1
- package/dist/governance/metafile-esm.json +1 -1
- package/dist/index.cjs +408 -543
- package/dist/index.d.cts +72 -22
- package/dist/index.d.ts +72 -22
- package/dist/index.js +410 -545
- package/dist/mcp/index.d.cts +2 -0
- package/dist/mcp/index.d.ts +2 -0
- 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/dist/utils/index.cjs +22 -23
- package/dist/utils/index.d.cts +3 -3
- package/dist/utils/index.d.ts +3 -3
- package/dist/utils/index.js +18 -19
- package/dist/utils/metafile-cjs.json +1 -1
- package/dist/utils/metafile-esm.json +1 -1
- package/package.json +1 -1
package/dist/session/index.cjs
CHANGED
|
@@ -48,7 +48,7 @@ ${this.stringify(e.data)}
|
|
|
48
48
|
`)+`
|
|
49
49
|
`;await k(this.transcriptPath,a);let c=this.buildMarkdownDocument(o,"session store");if(await k(this.markdownPath,c),!this.workspaceMirrorDisabled){let u=await this.resolveWorkspaceMarkdownPath();if(u)try{let l=this.buildMarkdownDocument(o,"workspace mirror");await k(u,l)}catch(l){this.workspaceMirrorDisabled=!0,j("Transcript workspace mirror disabled",l)}}}async truncateAfterMessageCount(e){let t=await S(this.transcriptPath);if(!t)return;let r=te(t),s=Math.max(0,e),i=0,o=[];for(let u of r){if(u.type==="user_message"||u.type==="assistant_message"){if(i>=s)break;i+=1}o.push(u)}let a=o.length>0?o.map(u=>JSON.stringify(u)).join(`
|
|
50
50
|
`)+`
|
|
51
|
-
`:"";await k(this.transcriptPath,a);let c=this.buildMarkdownDocument(o,"session store");if(await k(this.markdownPath,c),!this.workspaceMirrorDisabled){let u=await this.resolveWorkspaceMarkdownPath();if(u)try{let l=this.buildMarkdownDocument(o,"workspace mirror");await k(u,l)}catch(l){this.workspaceMirrorDisabled=!0,j("Transcript workspace mirror disabled",l)}}}getSequence(){return this.sequence}async initialize(){try{let e=await S(this.transcriptPath);if(!e){this.sequence=0;return}let t=te(e);if(t.length===0){this.sequence=0;return}let r=t[t.length-1];this.sequence=r.sequence+1}catch(e){let t=e instanceof Error?e.message:String(e);j(`Transcript initialization warning: ${t}. Starting with empty transcript.`),this.sequence=0}}async flush(){await this.writeQueue}};var re=M(require("path"),1),bt=require("crypto"),Et=require("fs/promises");var fr={View:"Read",Replace:"Write",GlobTool:"Glob",GrepTool:"Grep",SQLiteAnalyze:"SqliteAnalyze",ReadNotebook:"NotebookRead",NotebookEditCell:"NotebookEdit",CoordinationSend:"Send",CoordinationQuery:"Receive"};function ke(n){return fr[n]??n}var D=class{sessionDir;checkpointsDir;autoInterval;lastCheckpointMessageCount=0;constructor(e,t){this.sessionDir=e,this.checkpointsDir=re.join(e,"checkpoints"),this.autoInterval=t?.autoInterval??10}async initialize(){let e=await this.list();e.length>0&&(this.lastCheckpointMessageCount=e[0].messageCount)}async create(e){await $(this.checkpointsDir);let t=(0,bt.randomUUID)(),r={id:t,name:e.description,trigger:e.trigger,createdAt:new Date().toISOString(),messageCount:e.messages.length,tokenCount:this.estimateTokens(e.messages)},s={info:r,messages:e.messages},i=re.join(this.checkpointsDir,`${t}.json`);return await k(i,JSON.stringify(s,null,2)),this.lastCheckpointMessageCount=e.messages.length,r}async list(){let e=await ft(this.checkpointsDir,/\.json$/),t=[];for(let r of e){let s=await S(r);if(s){let i=b(s,null);if(i){let o=await(0,Et.stat)(r);t.push({info:i.info,modifiedAtMs:o.mtimeMs})}}}return t.sort((r,s)=>new Date(s.info.createdAt).getTime()-new Date(r.info.createdAt).getTime()||s.modifiedAtMs-r.modifiedAtMs).map(({info:r})=>r)}async restore(e){let t=re.join(this.checkpointsDir,`${e}.json`),r;try{r=await S(t)}catch(i){let o=i instanceof Error?i.message:String(i);throw new Error(`Failed to read checkpoint ${e}: ${o}`)}if(!r)throw new Error(`Checkpoint not found: ${e} (path: ${t})`);let s=b(r,null);if(!s)throw new Error(`Invalid checkpoint data for ${e}: JSON parse failed`);if(!s.messages||!Array.isArray(s.messages))throw new Error(`Invalid checkpoint data for ${e}: missing or invalid messages array`);if(!s.info)throw new Error(`Invalid checkpoint data for ${e}: missing info object`);return{messages:s.messages,info:s.info}}shouldAutoCheckpoint(e){return e-this.lastCheckpointMessageCount>=this.autoInterval}static isDangerousOperation(e,t){if(e=ke(e),e==="Write")return!0;if(e==="Bash"){let s=t.command?.toLowerCase()||"";return["rm ","del ","git push","git reset","drop ","truncate"].some(o=>s.includes(o))}return!1}async delete(e){let t=re.join(this.checkpointsDir,`${e}.json`);await L(t)}estimateTokens(e){let t=0;for(let r of e)if(typeof r.content=="string")t+=Math.ceil(r.content.length/4);else if(Array.isArray(r.content))for(let s of r.content)"text"in s&&(t+=Math.ceil(s.text.length/4));return t}};var U=M(require("path"),1),Xe=M(require("os"),1),H=M(require("fs"),1);var mr=Symbol.for("@xenosystem/agent-sdk/shutdown-registry"),hr=globalThis,Ge=hr[mr]??={cleanups:new Set,exitHandlerRegistered:!1,signalHandlersInstalled:!1},We=Ge.cleanups;function wr(){for(let n of We)try{n()}catch{}}function Pt(n){return We.add(n),!Ge.exitHandlerRegistered&&typeof process<"u"&&typeof process.on=="function"&&(Ge.exitHandlerRegistered=!0,process.on("exit",wr)),()=>{We.delete(n)}}var Rt="0.10.
|
|
51
|
+
`:"";await k(this.transcriptPath,a);let c=this.buildMarkdownDocument(o,"session store");if(await k(this.markdownPath,c),!this.workspaceMirrorDisabled){let u=await this.resolveWorkspaceMarkdownPath();if(u)try{let l=this.buildMarkdownDocument(o,"workspace mirror");await k(u,l)}catch(l){this.workspaceMirrorDisabled=!0,j("Transcript workspace mirror disabled",l)}}}getSequence(){return this.sequence}async initialize(){try{let e=await S(this.transcriptPath);if(!e){this.sequence=0;return}let t=te(e);if(t.length===0){this.sequence=0;return}let r=t[t.length-1];this.sequence=r.sequence+1}catch(e){let t=e instanceof Error?e.message:String(e);j(`Transcript initialization warning: ${t}. Starting with empty transcript.`),this.sequence=0}}async flush(){await this.writeQueue}};var re=M(require("path"),1),bt=require("crypto"),Et=require("fs/promises");var fr={View:"Read",Replace:"Write",GlobTool:"Glob",GrepTool:"Grep",SQLiteAnalyze:"SqliteAnalyze",ReadNotebook:"NotebookRead",NotebookEditCell:"NotebookEdit",CoordinationSend:"Send",CoordinationQuery:"Receive"};function ke(n){return fr[n]??n}var D=class{sessionDir;checkpointsDir;autoInterval;lastCheckpointMessageCount=0;constructor(e,t){this.sessionDir=e,this.checkpointsDir=re.join(e,"checkpoints"),this.autoInterval=t?.autoInterval??10}async initialize(){let e=await this.list();e.length>0&&(this.lastCheckpointMessageCount=e[0].messageCount)}async create(e){await $(this.checkpointsDir);let t=(0,bt.randomUUID)(),r={id:t,name:e.description,trigger:e.trigger,createdAt:new Date().toISOString(),messageCount:e.messages.length,tokenCount:this.estimateTokens(e.messages)},s={info:r,messages:e.messages},i=re.join(this.checkpointsDir,`${t}.json`);return await k(i,JSON.stringify(s,null,2)),this.lastCheckpointMessageCount=e.messages.length,r}async list(){let e=await ft(this.checkpointsDir,/\.json$/),t=[];for(let r of e){let s=await S(r);if(s){let i=b(s,null);if(i){let o=await(0,Et.stat)(r);t.push({info:i.info,modifiedAtMs:o.mtimeMs})}}}return t.sort((r,s)=>new Date(s.info.createdAt).getTime()-new Date(r.info.createdAt).getTime()||s.modifiedAtMs-r.modifiedAtMs).map(({info:r})=>r)}async restore(e){let t=re.join(this.checkpointsDir,`${e}.json`),r;try{r=await S(t)}catch(i){let o=i instanceof Error?i.message:String(i);throw new Error(`Failed to read checkpoint ${e}: ${o}`)}if(!r)throw new Error(`Checkpoint not found: ${e} (path: ${t})`);let s=b(r,null);if(!s)throw new Error(`Invalid checkpoint data for ${e}: JSON parse failed`);if(!s.messages||!Array.isArray(s.messages))throw new Error(`Invalid checkpoint data for ${e}: missing or invalid messages array`);if(!s.info)throw new Error(`Invalid checkpoint data for ${e}: missing info object`);return{messages:s.messages,info:s.info}}shouldAutoCheckpoint(e){return e-this.lastCheckpointMessageCount>=this.autoInterval}static isDangerousOperation(e,t){if(e=ke(e),e==="Write")return!0;if(e==="Bash"){let s=t.command?.toLowerCase()||"";return["rm ","del ","git push","git reset","drop ","truncate"].some(o=>s.includes(o))}return!1}async delete(e){let t=re.join(this.checkpointsDir,`${e}.json`);await L(t)}estimateTokens(e){let t=0;for(let r of e)if(typeof r.content=="string")t+=Math.ceil(r.content.length/4);else if(Array.isArray(r.content))for(let s of r.content)"text"in s&&(t+=Math.ceil(s.text.length/4));return t}};var U=M(require("path"),1),Xe=M(require("os"),1),H=M(require("fs"),1);var mr=Symbol.for("@xenosystem/agent-sdk/shutdown-registry"),hr=globalThis,Ge=hr[mr]??={cleanups:new Set,exitHandlerRegistered:!1,signalHandlersInstalled:!1},We=Ge.cleanups;function wr(){for(let n of We)try{n()}catch{}}function Pt(n){return We.add(n),!Ge.exitHandlerRegistered&&typeof process<"u"&&typeof process.on=="function"&&(Ge.exitHandlerRegistered=!0,process.on("exit",wr)),()=>{We.delete(n)}}var Rt="0.10.43";var yr=1e4,kr=6e4,Sr="session.lock",xr="lock.json",ee=new Map;function Je(n,e){return n!=null&&n.pid===e.pid&&n.hostname===e.hostname&&n.processStartedAt===e.processStartedAt&&n.acquiredAt===e.acquiredAt}function Tr(){for(let[n,e]of ee)try{let t=b(H.readFileSync(n,"utf8"),null);Je(t,e)&&H.unlinkSync(n)}catch{}ee.clear()}Pt(Tr);var X=class n{sessionDir;lockPath;legacyLockPath;sessionId;heartbeatTimer;acquiredOwner;constructor(e){this.sessionDir=e,this.lockPath=U.join(e,Sr),this.legacyLockPath=U.join(e,xr),this.sessionId=U.basename(e)}async acquire(){let e=new Date().toISOString(),t={schemaVersion:1,name:`session:${this.sessionId}`,sessionId:this.sessionId,pid:process.pid,hostname:Xe.hostname(),processStartedAt:new Date(Date.now()-Math.floor(process.uptime()*1e3)).toISOString(),version:Rt,acquiredAt:e,updatedAt:e,heartbeat:e},r=U.dirname(this.lockPath);await H.promises.mkdir(r,{recursive:!0});let s=await this.findExistingLockPath();if(s){if(!await this.isStalePath(s)){let o=await this.readLockAt(s);throw new Error(`Session ${this.sessionId} is already locked by PID ${o?.pid} on ${o?.hostname}`)}await L(s)}try{await H.promises.writeFile(this.lockPath,JSON.stringify(t,null,2),{flag:"wx",encoding:"utf-8"}),this.acquiredOwner=t,ee.set(this.lockPath,t)}catch(i){if(i.code==="EEXIST"){if(!await this.isStalePath(this.lockPath)){let c=await this.readLockAt(this.lockPath);throw new Error(`Session ${this.sessionId} is already locked by PID ${c?.pid} on ${c?.hostname}`)}await L(this.lockPath);try{await H.promises.writeFile(this.lockPath,JSON.stringify(t,null,2),{flag:"wx",encoding:"utf-8"})}catch(c){throw c.code==="EEXIST"?new Error(`Session ${this.sessionId} lock was acquired by another process during stale recovery`):c}this.acquiredOwner=t,ee.set(this.lockPath,t)}else throw i}}async release(){this.stopHeartbeat();let e=this.acquiredOwner;if(this.acquiredOwner=void 0,!e)return;ee.delete(this.lockPath);let t=await this.readLockAt(this.lockPath);Je(t,e)&&await L(this.lockPath)}async isLocked(){let e=await this.findExistingLockPath();return e?!await this.isStalePath(e):!1}async isStale(){let e=await this.findExistingLockPath();return e?this.isStalePath(e):!1}async isStalePath(e){let t=await this.readLockAt(e);if(!t)return!1;if(t.hostname===Xe.hostname())try{return process.kill(t.pid,0),!1}catch(i){return i.code!=="EPERM"}let r=new Date(t.heartbeat).getTime();return Date.now()-r>kr}startHeartbeat(e=yr){this.heartbeatTimer&&this.stopHeartbeat(),this.heartbeatTimer=setInterval(async()=>{try{await this.updateHeartbeat()}catch(t){let r=t instanceof Error?t.message:String(t);if(t?.code==="ENOENT"){G("SessionLock: Session directory removed, stopping heartbeat"),this.stopHeartbeat();return}G(`SessionLock: Failed to update heartbeat: ${r}`)}},e),this.heartbeatTimer.unref()}stopHeartbeat(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=void 0)}async updateHeartbeat(){let e=await this.readLockAt(this.lockPath),t=this.acquiredOwner;if(!(!e||!t)){if(!Je(e,t)){this.acquiredOwner=void 0,ee.delete(this.lockPath),this.stopHeartbeat();return}e.heartbeat=new Date().toISOString(),e.updatedAt=e.heartbeat,await k(this.lockPath,JSON.stringify(e,null,2))}}async readLock(){let e=await this.findExistingLockPath();return e?this.readLockAt(e):null}async readLockAt(e){let t=await S(e);return t?b(t,null):null}async findExistingLockPath(){return await S(this.lockPath)?this.lockPath:await S(this.legacyLockPath)?this.legacyLockPath:null}static async cleanStale(e){let t=await fe(e),r=[];for(let s of t){let i=new n(s);if(await i.isStale()){let a=await i.findExistingLockPath();a&&await L(a),r.push(U.basename(s))}}return r}};var C=M(require("path"),1);var ne=1;var A=M(require("path"),1);function vr(n,e){let t=A.resolve(n),r=A.resolve(n,e);return r===t?!0:t===A.parse(t).root?r.startsWith(t):r.startsWith(t+A.sep)}function J(n,e){if(A.isAbsolute(e))return A.resolve(e);if(!vr(n,e))throw new Error(`PathSecurity: Path traversal attempt detected: ${e}`);return A.resolve(n,e)}function Se(n,e=process.platform){let t=A.resolve(n);return e==="win32"?t.toLowerCase():t}function z(n){if(n!==void 0&&n!=="agent"&&n!=="chatOnly")throw new Error("Invalid session execution mode; expected agent or chatOnly.")}var P=M(require("path"),1),ve=M(require("os"),1),R=M(require("node:fs/promises"),1),be=require("node:crypto");var V=require("node:os");var se=require("node:path");var Dn=(0,V.platform)();var Cn=(0,V.release)(),On=(0,V.homedir)();function xe(){let n=process.env.XENO_AGENT_HOME?.trim();return n?(0,se.resolve)(n):(0,se.resolve)((0,V.homedir)(),".xeno-agent")}var Mt=1,_t="recent.json",br=".lock",At=".entries",Er=3e4,ze=6e4,Dt=new Set(["EACCES","EBUSY","EPERM"]),Pr=[5,10,20,40,80,160,320],Te=new Map;function Rr(n,e){let t=(0,be.createHash)("sha256").update(e).digest("hex");return P.join(`${n}${At}`,`${t}.json`)}async function Ve(n,e,t){let r={schemaVersion:1,key:e,entry:t};await k(Rr(n,e),JSON.stringify(r)+`
|
|
52
52
|
`)}async function Mr(n,e){let t=`${n}${At}`,r;try{r=await R.readdir(t)}catch(s){if(s.code==="ENOENT")return;throw s}await Promise.all(r.filter(s=>s.endsWith(".json")).map(async s=>{let i=await R.readFile(P.join(t,s),"utf8").catch(()=>""),o=b(i,null);if(!(!o||o.schemaVersion!==1||typeof o.key!="string")){if(o.entry===null){delete e[o.key];return}typeof o.entry.sessionId!="string"||typeof o.entry.endedAt!="string"||(e[o.key]=o.entry)}}))}function It(n){if(!Number.isInteger(n)||n<=0)return!1;try{return process.kill(n,0),!0}catch(e){return e.code==="EPERM"}}async function _r(n){try{let[e,t]=await Promise.all([R.readFile(P.join(n,"owner.json"),"utf8").catch(()=>""),R.stat(n)]),r=b(e,null);return r?.hostname===ve.hostname()&&It(r.pid)?!1:r?.hostname&&r.hostname!==ve.hostname()||!r?Date.now()-t.mtimeMs>ze:Date.now()-t.mtimeMs>ze||!It(r.pid)}catch{return!1}}async function Ct(n){for(let e=0;;e+=1)try{await R.rm(n,{recursive:!0});return}catch(t){let r=t.code;if(r==="ENOENT")return;let s=Pr[e];if(process.platform!=="win32"||!r||!Dt.has(r)||s===void 0)throw t;await new Promise(i=>setTimeout(i,s))}}async function Ir(n,e){try{let t=await R.readFile(P.join(n,"owner.json"),"utf8");b(t,null)?.token===e&&await Ct(n)}catch(t){if(t.code!=="ENOENT")throw t}}async function Ke(n,e){let t=K(n),r=Te.get(t)??Promise.resolve(),s,i=new Promise(o=>{s=o});Te.set(t,i),await r;try{return await Ar(t,e)}finally{s(),Te.get(t)===i&&Te.delete(t)}}async function Ar(n,e){let t=`${n}${br}`,r=(0,be.randomUUID)(),s=Date.now();await R.mkdir(P.dirname(n),{recursive:!0});for(let i=0;;i+=1){let o={schemaVersion:1,token:r,pid:process.pid,hostname:ve.hostname(),acquiredAt:new Date().toISOString()};try{await R.mkdir(t),await R.writeFile(P.join(t,"owner.json"),JSON.stringify(o),"utf8");break}catch(a){let c=a.code,u=process.platform==="win32"&&!!c&&Dt.has(c);if(c!=="EEXIST"&&!u)throw a;if(await _r(t)){await Ct(t);continue}if(Date.now()-s>=Er)throw new Error(`Timed out waiting for recent-sessions index lock: ${t}`);let l=Math.min(100,5+i*5)+Math.floor(Math.random()*10);await new Promise(d=>setTimeout(d,l))}}try{return await e()}finally{await Ir(t,r)}}function K(n){return n===void 0?P.join(xe(),_t):P.join(n,".xeno-agent",_t)}function ie(n){let e=P.normalize(n).replace(/[\\/]+$/,""),t=e.length>0?e:P.parse(P.normalize(n)).root;return process.platform==="win32"?t.toLowerCase():t}async function q(n){let e=K(n),t=ge(e)?await S(e):null,r=t?b(t,null):null,s=r&&typeof r=="object"?r:null,i={},o=s?.version===Mt&&s.entries&&typeof s.entries=="object"?s.entries:{};for(let[a,c]of Object.entries(o)){if(!c||typeof c!="object")continue;let u=c;typeof u.sessionId!="string"||u.sessionId.length===0||typeof u.endedAt=="string"&&(i[a]={sessionId:u.sessionId,endedAt:u.endedAt,role:typeof u.role=="string"?u.role:void 0})}return await Mr(e,i),{version:Mt,entries:i}}async function Ee(n,e={}){let t=await q(e.homeDir),r=ie(n),s=t.entries[r];if(s&&!(e.role&&s.role&&s.role!==e.role))return s}async function Pe(n,e={}){let t=ie(n.cwd),r={sessionId:n.sessionId,role:n.role,endedAt:n.endedAt??new Date().toISOString()},s=K(e.homeDir);await Ve(s,t,r),await Ke(e.homeDir,async()=>{let i=await q(e.homeDir);i.entries[t]=r,await k(s,JSON.stringify(i,null,2)+`
|
|
53
53
|
`)})}async function Ot(n,e={}){let t=ie(n),r=K(e.homeDir);(await q(e.homeDir)).entries[t]&&(await Ve(r,t,null),await Ke(e.homeDir,async()=>{let i=await q(e.homeDir);delete i.entries[t],await k(r,JSON.stringify(i,null,2)+`
|
|
54
54
|
`)}))}async function oe(n,e={}){let t=await q(e.homeDir),r=Object.entries(t.entries).filter(([,i])=>i.sessionId===n).map(([i])=>i);if(r.length===0)return;let s=K(e.homeDir);await Promise.all(r.map(i=>Ve(s,i,null))),await Ke(e.homeDir,async()=>{let i=await q(e.homeDir);for(let[o,a]of Object.entries(i.entries))a.sessionId===n&&delete i.entries[o];await k(s,JSON.stringify(i,null,2)+`
|
package/dist/session/index.js
CHANGED
|
@@ -48,7 +48,7 @@ ${this.stringify(e.data)}
|
|
|
48
48
|
`)+`
|
|
49
49
|
`;await y(this.transcriptPath,a);let c=this.buildMarkdownDocument(o,"session store");if(await y(this.markdownPath,c),!this.workspaceMirrorDisabled){let u=await this.resolveWorkspaceMarkdownPath();if(u)try{let l=this.buildMarkdownDocument(o,"workspace mirror");await y(u,l)}catch(l){this.workspaceMirrorDisabled=!0,B("Transcript workspace mirror disabled",l)}}}async truncateAfterMessageCount(e){let t=await k(this.transcriptPath);if(!t)return;let r=Y(t),s=Math.max(0,e),i=0,o=[];for(let u of r){if(u.type==="user_message"||u.type==="assistant_message"){if(i>=s)break;i+=1}o.push(u)}let a=o.length>0?o.map(u=>JSON.stringify(u)).join(`
|
|
50
50
|
`)+`
|
|
51
|
-
`:"";await y(this.transcriptPath,a);let c=this.buildMarkdownDocument(o,"session store");if(await y(this.markdownPath,c),!this.workspaceMirrorDisabled){let u=await this.resolveWorkspaceMarkdownPath();if(u)try{let l=this.buildMarkdownDocument(o,"workspace mirror");await y(u,l)}catch(l){this.workspaceMirrorDisabled=!0,B("Transcript workspace mirror disabled",l)}}}getSequence(){return this.sequence}async initialize(){try{let e=await k(this.transcriptPath);if(!e){this.sequence=0;return}let t=Y(e);if(t.length===0){this.sequence=0;return}let r=t[t.length-1];this.sequence=r.sequence+1}catch(e){let t=e instanceof Error?e.message:String(e);B(`Transcript initialization warning: ${t}. Starting with empty transcript.`),this.sequence=0}}async flush(){await this.writeQueue}};import*as Z from"path";import{randomUUID as or}from"crypto";import{stat as ar}from"fs/promises";var ir={View:"Read",Replace:"Write",GlobTool:"Glob",GrepTool:"Grep",SQLiteAnalyze:"SqliteAnalyze",ReadNotebook:"NotebookRead",NotebookEditCell:"NotebookEdit",CoordinationSend:"Send",CoordinationQuery:"Receive"};function ce(n){return ir[n]??n}var D=class{sessionDir;checkpointsDir;autoInterval;lastCheckpointMessageCount=0;constructor(e,t){this.sessionDir=e,this.checkpointsDir=Z.join(e,"checkpoints"),this.autoInterval=t?.autoInterval??10}async initialize(){let e=await this.list();e.length>0&&(this.lastCheckpointMessageCount=e[0].messageCount)}async create(e){await O(this.checkpointsDir);let t=or(),r={id:t,name:e.description,trigger:e.trigger,createdAt:new Date().toISOString(),messageCount:e.messages.length,tokenCount:this.estimateTokens(e.messages)},s={info:r,messages:e.messages},i=Z.join(this.checkpointsDir,`${t}.json`);return await y(i,JSON.stringify(s,null,2)),this.lastCheckpointMessageCount=e.messages.length,r}async list(){let e=await nt(this.checkpointsDir,/\.json$/),t=[];for(let r of e){let s=await k(r);if(s){let i=v(s,null);if(i){let o=await ar(r);t.push({info:i.info,modifiedAtMs:o.mtimeMs})}}}return t.sort((r,s)=>new Date(s.info.createdAt).getTime()-new Date(r.info.createdAt).getTime()||s.modifiedAtMs-r.modifiedAtMs).map(({info:r})=>r)}async restore(e){let t=Z.join(this.checkpointsDir,`${e}.json`),r;try{r=await k(t)}catch(i){let o=i instanceof Error?i.message:String(i);throw new Error(`Failed to read checkpoint ${e}: ${o}`)}if(!r)throw new Error(`Checkpoint not found: ${e} (path: ${t})`);let s=v(r,null);if(!s)throw new Error(`Invalid checkpoint data for ${e}: JSON parse failed`);if(!s.messages||!Array.isArray(s.messages))throw new Error(`Invalid checkpoint data for ${e}: missing or invalid messages array`);if(!s.info)throw new Error(`Invalid checkpoint data for ${e}: missing info object`);return{messages:s.messages,info:s.info}}shouldAutoCheckpoint(e){return e-this.lastCheckpointMessageCount>=this.autoInterval}static isDangerousOperation(e,t){if(e=ce(e),e==="Write")return!0;if(e==="Bash"){let s=t.command?.toLowerCase()||"";return["rm ","del ","git push","git reset","drop ","truncate"].some(o=>s.includes(o))}return!1}async delete(e){let t=Z.join(this.checkpointsDir,`${e}.json`);await N(t)}estimateTokens(e){let t=0;for(let r of e)if(typeof r.content=="string")t+=Math.ceil(r.content.length/4);else if(Array.isArray(r.content))for(let s of r.content)"text"in s&&(t+=Math.ceil(s.text.length/4));return t}};import*as j from"path";import*as Ae from"os";import*as F from"fs";var cr=Symbol.for("@xenosystem/agent-sdk/shutdown-registry"),ur=globalThis,_e=ur[cr]??={cleanups:new Set,exitHandlerRegistered:!1,signalHandlersInstalled:!1},Ie=_e.cleanups;function lr(){for(let n of Ie)try{n()}catch{}}function gt(n){return Ie.add(n),!_e.exitHandlerRegistered&&typeof process<"u"&&typeof process.on=="function"&&(_e.exitHandlerRegistered=!0,process.on("exit",lr)),()=>{Ie.delete(n)}}var ft="0.10.
|
|
51
|
+
`:"";await y(this.transcriptPath,a);let c=this.buildMarkdownDocument(o,"session store");if(await y(this.markdownPath,c),!this.workspaceMirrorDisabled){let u=await this.resolveWorkspaceMarkdownPath();if(u)try{let l=this.buildMarkdownDocument(o,"workspace mirror");await y(u,l)}catch(l){this.workspaceMirrorDisabled=!0,B("Transcript workspace mirror disabled",l)}}}getSequence(){return this.sequence}async initialize(){try{let e=await k(this.transcriptPath);if(!e){this.sequence=0;return}let t=Y(e);if(t.length===0){this.sequence=0;return}let r=t[t.length-1];this.sequence=r.sequence+1}catch(e){let t=e instanceof Error?e.message:String(e);B(`Transcript initialization warning: ${t}. Starting with empty transcript.`),this.sequence=0}}async flush(){await this.writeQueue}};import*as Z from"path";import{randomUUID as or}from"crypto";import{stat as ar}from"fs/promises";var ir={View:"Read",Replace:"Write",GlobTool:"Glob",GrepTool:"Grep",SQLiteAnalyze:"SqliteAnalyze",ReadNotebook:"NotebookRead",NotebookEditCell:"NotebookEdit",CoordinationSend:"Send",CoordinationQuery:"Receive"};function ce(n){return ir[n]??n}var D=class{sessionDir;checkpointsDir;autoInterval;lastCheckpointMessageCount=0;constructor(e,t){this.sessionDir=e,this.checkpointsDir=Z.join(e,"checkpoints"),this.autoInterval=t?.autoInterval??10}async initialize(){let e=await this.list();e.length>0&&(this.lastCheckpointMessageCount=e[0].messageCount)}async create(e){await O(this.checkpointsDir);let t=or(),r={id:t,name:e.description,trigger:e.trigger,createdAt:new Date().toISOString(),messageCount:e.messages.length,tokenCount:this.estimateTokens(e.messages)},s={info:r,messages:e.messages},i=Z.join(this.checkpointsDir,`${t}.json`);return await y(i,JSON.stringify(s,null,2)),this.lastCheckpointMessageCount=e.messages.length,r}async list(){let e=await nt(this.checkpointsDir,/\.json$/),t=[];for(let r of e){let s=await k(r);if(s){let i=v(s,null);if(i){let o=await ar(r);t.push({info:i.info,modifiedAtMs:o.mtimeMs})}}}return t.sort((r,s)=>new Date(s.info.createdAt).getTime()-new Date(r.info.createdAt).getTime()||s.modifiedAtMs-r.modifiedAtMs).map(({info:r})=>r)}async restore(e){let t=Z.join(this.checkpointsDir,`${e}.json`),r;try{r=await k(t)}catch(i){let o=i instanceof Error?i.message:String(i);throw new Error(`Failed to read checkpoint ${e}: ${o}`)}if(!r)throw new Error(`Checkpoint not found: ${e} (path: ${t})`);let s=v(r,null);if(!s)throw new Error(`Invalid checkpoint data for ${e}: JSON parse failed`);if(!s.messages||!Array.isArray(s.messages))throw new Error(`Invalid checkpoint data for ${e}: missing or invalid messages array`);if(!s.info)throw new Error(`Invalid checkpoint data for ${e}: missing info object`);return{messages:s.messages,info:s.info}}shouldAutoCheckpoint(e){return e-this.lastCheckpointMessageCount>=this.autoInterval}static isDangerousOperation(e,t){if(e=ce(e),e==="Write")return!0;if(e==="Bash"){let s=t.command?.toLowerCase()||"";return["rm ","del ","git push","git reset","drop ","truncate"].some(o=>s.includes(o))}return!1}async delete(e){let t=Z.join(this.checkpointsDir,`${e}.json`);await N(t)}estimateTokens(e){let t=0;for(let r of e)if(typeof r.content=="string")t+=Math.ceil(r.content.length/4);else if(Array.isArray(r.content))for(let s of r.content)"text"in s&&(t+=Math.ceil(s.text.length/4));return t}};import*as j from"path";import*as Ae from"os";import*as F from"fs";var cr=Symbol.for("@xenosystem/agent-sdk/shutdown-registry"),ur=globalThis,_e=ur[cr]??={cleanups:new Set,exitHandlerRegistered:!1,signalHandlersInstalled:!1},Ie=_e.cleanups;function lr(){for(let n of Ie)try{n()}catch{}}function gt(n){return Ie.add(n),!_e.exitHandlerRegistered&&typeof process<"u"&&typeof process.on=="function"&&(_e.exitHandlerRegistered=!0,process.on("exit",lr)),()=>{Ie.delete(n)}}var ft="0.10.43";var dr=1e4,pr=6e4,gr="session.lock",fr="lock.json",J=new Map;function De(n,e){return n!=null&&n.pid===e.pid&&n.hostname===e.hostname&&n.processStartedAt===e.processStartedAt&&n.acquiredAt===e.acquiredAt}function mr(){for(let[n,e]of J)try{let t=v(F.readFileSync(n,"utf8"),null);De(t,e)&&F.unlinkSync(n)}catch{}J.clear()}gt(mr);var z=class n{sessionDir;lockPath;legacyLockPath;sessionId;heartbeatTimer;acquiredOwner;constructor(e){this.sessionDir=e,this.lockPath=j.join(e,gr),this.legacyLockPath=j.join(e,fr),this.sessionId=j.basename(e)}async acquire(){let e=new Date().toISOString(),t={schemaVersion:1,name:`session:${this.sessionId}`,sessionId:this.sessionId,pid:process.pid,hostname:Ae.hostname(),processStartedAt:new Date(Date.now()-Math.floor(process.uptime()*1e3)).toISOString(),version:ft,acquiredAt:e,updatedAt:e,heartbeat:e},r=j.dirname(this.lockPath);await F.promises.mkdir(r,{recursive:!0});let s=await this.findExistingLockPath();if(s){if(!await this.isStalePath(s)){let o=await this.readLockAt(s);throw new Error(`Session ${this.sessionId} is already locked by PID ${o?.pid} on ${o?.hostname}`)}await N(s)}try{await F.promises.writeFile(this.lockPath,JSON.stringify(t,null,2),{flag:"wx",encoding:"utf-8"}),this.acquiredOwner=t,J.set(this.lockPath,t)}catch(i){if(i.code==="EEXIST"){if(!await this.isStalePath(this.lockPath)){let c=await this.readLockAt(this.lockPath);throw new Error(`Session ${this.sessionId} is already locked by PID ${c?.pid} on ${c?.hostname}`)}await N(this.lockPath);try{await F.promises.writeFile(this.lockPath,JSON.stringify(t,null,2),{flag:"wx",encoding:"utf-8"})}catch(c){throw c.code==="EEXIST"?new Error(`Session ${this.sessionId} lock was acquired by another process during stale recovery`):c}this.acquiredOwner=t,J.set(this.lockPath,t)}else throw i}}async release(){this.stopHeartbeat();let e=this.acquiredOwner;if(this.acquiredOwner=void 0,!e)return;J.delete(this.lockPath);let t=await this.readLockAt(this.lockPath);De(t,e)&&await N(this.lockPath)}async isLocked(){let e=await this.findExistingLockPath();return e?!await this.isStalePath(e):!1}async isStale(){let e=await this.findExistingLockPath();return e?this.isStalePath(e):!1}async isStalePath(e){let t=await this.readLockAt(e);if(!t)return!1;if(t.hostname===Ae.hostname())try{return process.kill(t.pid,0),!1}catch(i){return i.code!=="EPERM"}let r=new Date(t.heartbeat).getTime();return Date.now()-r>pr}startHeartbeat(e=dr){this.heartbeatTimer&&this.stopHeartbeat(),this.heartbeatTimer=setInterval(async()=>{try{await this.updateHeartbeat()}catch(t){let r=t instanceof Error?t.message:String(t);if(t?.code==="ENOENT"){H("SessionLock: Session directory removed, stopping heartbeat"),this.stopHeartbeat();return}H(`SessionLock: Failed to update heartbeat: ${r}`)}},e),this.heartbeatTimer.unref()}stopHeartbeat(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=void 0)}async updateHeartbeat(){let e=await this.readLockAt(this.lockPath),t=this.acquiredOwner;if(!(!e||!t)){if(!De(e,t)){this.acquiredOwner=void 0,J.delete(this.lockPath),this.stopHeartbeat();return}e.heartbeat=new Date().toISOString(),e.updatedAt=e.heartbeat,await y(this.lockPath,JSON.stringify(e,null,2))}}async readLock(){let e=await this.findExistingLockPath();return e?this.readLockAt(e):null}async readLockAt(e){let t=await k(e);return t?v(t,null):null}async findExistingLockPath(){return await k(this.lockPath)?this.lockPath:await k(this.legacyLockPath)?this.legacyLockPath:null}static async cleanStale(e){let t=await oe(e),r=[];for(let s of t){let i=new n(s);if(await i.isStale()){let a=await i.findExistingLockPath();a&&await N(a),r.push(j.basename(s))}}return r}};import*as I from"path";var ee=1;import*as M from"path";function hr(n,e){let t=M.resolve(n),r=M.resolve(n,e);return r===t?!0:t===M.parse(t).root?r.startsWith(t):r.startsWith(t+M.sep)}function q(n,e){if(M.isAbsolute(e))return M.resolve(e);if(!hr(n,e))throw new Error(`PathSecurity: Path traversal attempt detected: ${e}`);return M.resolve(n,e)}function ue(n,e=process.platform){let t=M.resolve(n);return e==="win32"?t.toLowerCase():t}function G(n){if(n!==void 0&&n!=="agent"&&n!=="chatOnly")throw new Error("Invalid session execution mode; expected agent or chatOnly.")}import*as E from"path";import*as pe from"os";import*as P from"node:fs/promises";import{createHash as kr,randomUUID as Sr}from"node:crypto";import{homedir as ht,platform as wr,release as yr}from"node:os";import{delimiter as qn,join as Gn,resolve as mt}from"node:path";var Xn=wr();var Jn=yr(),zn=ht();function le(){let n=process.env.XENO_AGENT_HOME?.trim();return n?mt(n):mt(ht(),".xeno-agent")}var wt=1,yt="recent.json",xr=".lock",St=".entries",Tr=3e4,Ce=6e4,xt=new Set(["EACCES","EBUSY","EPERM"]),vr=[5,10,20,40,80,160,320],de=new Map;function br(n,e){let t=kr("sha256").update(e).digest("hex");return E.join(`${n}${St}`,`${t}.json`)}async function Oe(n,e,t){let r={schemaVersion:1,key:e,entry:t};await y(br(n,e),JSON.stringify(r)+`
|
|
52
52
|
`)}async function Er(n,e){let t=`${n}${St}`,r;try{r=await P.readdir(t)}catch(s){if(s.code==="ENOENT")return;throw s}await Promise.all(r.filter(s=>s.endsWith(".json")).map(async s=>{let i=await P.readFile(E.join(t,s),"utf8").catch(()=>""),o=v(i,null);if(!(!o||o.schemaVersion!==1||typeof o.key!="string")){if(o.entry===null){delete e[o.key];return}typeof o.entry.sessionId!="string"||typeof o.entry.endedAt!="string"||(e[o.key]=o.entry)}}))}function kt(n){if(!Number.isInteger(n)||n<=0)return!1;try{return process.kill(n,0),!0}catch(e){return e.code==="EPERM"}}async function Pr(n){try{let[e,t]=await Promise.all([P.readFile(E.join(n,"owner.json"),"utf8").catch(()=>""),P.stat(n)]),r=v(e,null);return r?.hostname===pe.hostname()&&kt(r.pid)?!1:r?.hostname&&r.hostname!==pe.hostname()||!r?Date.now()-t.mtimeMs>Ce:Date.now()-t.mtimeMs>Ce||!kt(r.pid)}catch{return!1}}async function Tt(n){for(let e=0;;e+=1)try{await P.rm(n,{recursive:!0});return}catch(t){let r=t.code;if(r==="ENOENT")return;let s=vr[e];if(process.platform!=="win32"||!r||!xt.has(r)||s===void 0)throw t;await new Promise(i=>setTimeout(i,s))}}async function Rr(n,e){try{let t=await P.readFile(E.join(n,"owner.json"),"utf8");v(t,null)?.token===e&&await Tt(n)}catch(t){if(t.code!=="ENOENT")throw t}}async function Ne(n,e){let t=V(n),r=de.get(t)??Promise.resolve(),s,i=new Promise(o=>{s=o});de.set(t,i),await r;try{return await Mr(t,e)}finally{s(),de.get(t)===i&&de.delete(t)}}async function Mr(n,e){let t=`${n}${xr}`,r=Sr(),s=Date.now();await P.mkdir(E.dirname(n),{recursive:!0});for(let i=0;;i+=1){let o={schemaVersion:1,token:r,pid:process.pid,hostname:pe.hostname(),acquiredAt:new Date().toISOString()};try{await P.mkdir(t),await P.writeFile(E.join(t,"owner.json"),JSON.stringify(o),"utf8");break}catch(a){let c=a.code,u=process.platform==="win32"&&!!c&&xt.has(c);if(c!=="EEXIST"&&!u)throw a;if(await Pr(t)){await Tt(t);continue}if(Date.now()-s>=Tr)throw new Error(`Timed out waiting for recent-sessions index lock: ${t}`);let l=Math.min(100,5+i*5)+Math.floor(Math.random()*10);await new Promise(d=>setTimeout(d,l))}}try{return await e()}finally{await Rr(t,r)}}function V(n){return n===void 0?E.join(le(),yt):E.join(n,".xeno-agent",yt)}function ge(n){let e=E.normalize(n).replace(/[\\/]+$/,""),t=e.length>0?e:E.parse(E.normalize(n)).root;return process.platform==="win32"?t.toLowerCase():t}async function W(n){let e=V(n),t=ie(e)?await k(e):null,r=t?v(t,null):null,s=r&&typeof r=="object"?r:null,i={},o=s?.version===wt&&s.entries&&typeof s.entries=="object"?s.entries:{};for(let[a,c]of Object.entries(o)){if(!c||typeof c!="object")continue;let u=c;typeof u.sessionId!="string"||u.sessionId.length===0||typeof u.endedAt=="string"&&(i[a]={sessionId:u.sessionId,endedAt:u.endedAt,role:typeof u.role=="string"?u.role:void 0})}return await Er(e,i),{version:wt,entries:i}}async function $e(n,e={}){let t=await W(e.homeDir),r=ge(n),s=t.entries[r];if(s&&!(e.role&&s.role&&s.role!==e.role))return s}async function Le(n,e={}){let t=ge(n.cwd),r={sessionId:n.sessionId,role:n.role,endedAt:n.endedAt??new Date().toISOString()},s=V(e.homeDir);await Oe(s,t,r),await Ne(e.homeDir,async()=>{let i=await W(e.homeDir);i.entries[t]=r,await y(s,JSON.stringify(i,null,2)+`
|
|
53
53
|
`)})}async function _r(n,e={}){let t=ge(n),r=V(e.homeDir);(await W(e.homeDir)).entries[t]&&(await Oe(r,t,null),await Ne(e.homeDir,async()=>{let i=await W(e.homeDir);delete i.entries[t],await y(r,JSON.stringify(i,null,2)+`
|
|
54
54
|
`)}))}async function fe(n,e={}){let t=await W(e.homeDir),r=Object.entries(t.entries).filter(([,i])=>i.sessionId===n).map(([i])=>i);if(r.length===0)return;let s=V(e.homeDir);await Promise.all(r.map(i=>Oe(s,i,null))),await Ne(e.homeDir,async()=>{let i=await W(e.homeDir);for(let[o,a]of Object.entries(i.entries))a.sessionId===n&&delete i.entries[o];await y(s,JSON.stringify(i,null,2)+`
|
package/dist/utils/index.cjs
CHANGED
|
@@ -1,25 +1,24 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`,"utf-8")}async function
|
|
3
|
-
`,"utf-8"),await n.sync()}finally{await n.close()}}function
|
|
4
|
-
`)?"CRLF":"LF"}function
|
|
1
|
+
"use strict";var Ze=Object.create;var $=Object.defineProperty;var Je=Object.getOwnPropertyDescriptor;var Qe=Object.getOwnPropertyNames;var et=Object.getPrototypeOf,tt=Object.prototype.hasOwnProperty;var rt=(e,t)=>{for(var r in t)$(e,r,{get:t[r],enumerable:!0})},ee=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Qe(t))!tt.call(e,o)&&o!==r&&$(e,o,{get:()=>t[o],enumerable:!(n=Je(t,o))||n.enumerable});return e};var H=(e,t,r)=>(r=e!=null?Ze(et(e)):{},ee(t||!e||!e.__esModule?$(r,"default",{value:e,enumerable:!0}):r,e)),nt=e=>ee($({},"__esModule",{value:!0}),e);var Qr={};rt(Qr,{ApiTransientError:()=>O,HOME_DIR:()=>Yt,IS_LINUX:()=>Kt,IS_MAC:()=>Wt,IS_WINDOWS:()=>C,LogLevel:()=>Ae,OS_VERSION:()=>Gt,PLATFORM:()=>B,accountTextTokens:()=>Cr,appendDurableLine:()=>ht,appendLine:()=>yt,benchmarkLeakError:()=>Br,buildToolResultBlock:()=>Wr,buildToolResultText:()=>Le,calculateCost:()=>Or,clearFileCache:()=>at,commandMentionsBenchmarkLeak:()=>Xr,conservativeTokenAccountingAdapter:()=>Oe,copyTextToClipboard:()=>$r,createSafeRegex:()=>ar,debug:()=>lr,decodeTextBuffer:()=>de,deleteDir:()=>Pt,deleteFile:()=>Ct,detectLineEnding:()=>fe,detectPreferredLineEnding:()=>wt,detectTextEncoding:()=>ce,encodeTextBuffer:()=>le,ensureDir:()=>L,error:()=>mr,estimateTokens:()=>Me,estimateTokensForModel:()=>Ie,existsSync:()=>_t,fetchPinnedEndpoint:()=>Jr,filterBenchmarkLeakPaths:()=>Lr,findSimilarFile:()=>Rt,fitsInBudget:()=>kr,formatCost:()=>Mr,getAgentHome:()=>Zt,getBenchmarkReferenceOverwriteHint:()=>zr,getBoolean:()=>ir,getConfigDir:()=>Jt,getFileCacheStats:()=>st,getLogLevel:()=>dr,getNumber:()=>sr,getProjectConfigDir:()=>Qt,getRetryErrorContext:()=>Y,getShellName:()=>er,getString:()=>or,getToolResultTransportContent:()=>Hr,hasDir:()=>ft,hasDisallowedAsciiControlCharacter:()=>Kr,hasFile:()=>lt,hasFrontmatter:()=>$t,hasMixedLineEndings:()=>Et,hasNonTextToolResultContent:()=>jr,hasTransientStatusMention:()=>ke,info:()=>fr,invalidateFileCache:()=>D,isBenchmarkLeakPath:()=>Dr,isBenchmarkMode:()=>Nr,isGitRepo:()=>tr,isGitRepoAsync:()=>rr,isPathSafe:()=>be,isRetryableError:()=>Se,listDirs:()=>At,listFiles:()=>vt,normalizeLineEndings:()=>pe,normalizeXenoRequestContext:()=>br,parseDocument:()=>Ot,parseJsonLines:()=>It,pathIdentityKey:()=>zt,readDerivedCached:()=>oe,readFileSafe:()=>pt,readIfExists:()=>Tt,readTextCached:()=>dt,readTextFile:()=>me,remainingBudget:()=>Sr,renameReplacingWithRetry:()=>ae,resetFileCacheStats:()=>it,safeJsonParse:()=>kt,safeJsonStringify:()=>St,safeRegexTest:()=>cr,safeResolvePath:()=>Xt,setLogLevel:()=>ur,stringifyDocument:()=>Mt,toTransportAssistantBlocks:()=>Vr,toolAssistantContentToText:()=>Ne,toolResultContentToText:()=>qr,truncateToTokens:()=>Pr,validateRegexPattern:()=>ve,validateRequired:()=>nr,warn:()=>pr,withRetry:()=>Ar,writeAtomic:()=>ie,writeTextFile:()=>bt,xenoRequestContextHeaders:()=>xr});module.exports=nt(Qr);var I=require("node:fs"),_=require("node:fs"),p=H(require("node:fs/promises"),1),d=H(require("node:path"),1);var N=require("node:fs"),ot=8192,re=Symbol.for("@xenosystem/agent-sdk/file-cache"),ne=globalThis,U=ne[re]??{entries:new Map,counters:{reads:0,hits:0}};ne[re]=U;var E=U.entries,A=U.counters;function st(){return{...A}}function it(){A.reads=0,A.hits=0}function D(e){E.delete(e)}function at(){E.clear()}async function ct(e){try{let t=await N.promises.stat(e);return{mtimeMs:t.mtimeMs,size:t.size}}catch(t){if(t.code==="ENOENT")return null;throw t}}function te(e,t){for(E.delete(e),E.set(e,t);E.size>ot;){let r=E.keys().next().value;if(r===void 0)break;E.delete(r)}}async function ut(e,t,r){let n=await N.promises.open(e,"r");try{let o=Math.min(r,t),s=Buffer.alloc(o);return await n.read(s,0,o,t-o),s.toString("utf-8")}finally{await n.close()}}async function oe(e,t,r,n={}){let o=await ct(e);if(!o)return E.delete(e),null;let s=E.get(e);if(s&&s.mtimeMs===o.mtimeMs&&s.size===o.size&&s.values.has(t))return A.hits+=1,te(e,s),s.values.get(t);let i,a=n.tailBytes;if(a!==void 0&&o.size>a&&(A.reads+=1,i=r(await ut(e,o.size,a),!0)),i===void 0){let f;try{f=await N.promises.readFile(e,"utf-8")}catch(u){if(u.code==="ENOENT")return E.delete(e),null;throw u}A.reads+=1,i=r(f,!1)}let c=E.get(e),l=c&&c.mtimeMs===o.mtimeMs&&c.size===o.size?c:{mtimeMs:o.mtimeMs,size:o.size,values:new Map};return l.values.set(t,i),te(e,l),i}function dt(e){return oe(e,"text",t=>t)}function lt(e){try{return(0,_.existsSync)(e)&&(0,_.statSync)(e).isFile()}catch{return!1}}function ft(e){try{return(0,_.existsSync)(e)&&(0,_.statSync)(e).isDirectory()}catch{return!1}}function pt(e,t=""){try{return(0,I.readFileSync)(e,"utf-8")}catch{return t}}async function L(e){await p.mkdir(e,{recursive:!0})}async function ie(e,t){let r=d.dirname(e);await L(r);let n=Math.random().toString(36).substring(2,15),o=`${e}.tmp.${process.pid}.${n}`;try{await p.writeFile(o,t),await ae(o,e),D(e)}finally{try{await p.unlink(o)}catch{}}}var mt=new Set(["EACCES","EBUSY","EPERM"]),gt=[10,20,40,80,160,320,640];async function ae(e,t){for(let r=0;;r+=1)try{await p.rename(e,t);return}catch(n){let o=n.code,s=gt[r];if(process.platform!=="win32"||!o||!mt.has(o)||s===void 0)throw n;await new Promise(i=>setTimeout(i,s))}}async function yt(e,t){let r=d.dirname(e);await L(r),await p.appendFile(e,t+`
|
|
2
|
+
`,"utf-8")}async function ht(e,t){let r=d.dirname(e);await L(r);let n=await p.open(e,"a");try{await n.writeFile(t+`
|
|
3
|
+
`,"utf-8"),await n.sync()}finally{await n.close()}}function ce(e){return e.length>=3&&e[0]===239&&e[1]===187&&e[2]===191?"utf8-bom":e.length>=2&&e[0]===255&&e[1]===254?"utf16le":e.length>=2&&e[0]===254&&e[1]===255?"utf16be":"utf8"}function ue(e){let t=Buffer.from(e);for(let r=0;r+1<t.length;r+=2){let n=t[r];t[r]=t[r+1],t[r+1]=n}return t}function de(e,t){switch(t){case"utf8-bom":return e.subarray(3).toString("utf8");case"utf16le":return e.subarray(2).toString("utf16le");case"utf16be":return ue(e.subarray(2)).toString("utf16le");default:return e.toString("utf8")}}function le(e,t){switch(t){case"utf8-bom":return Buffer.concat([Buffer.from([239,187,191]),Buffer.from(e,"utf8")]);case"utf16le":return Buffer.concat([Buffer.from([255,254]),Buffer.from(e,"utf16le")]);case"utf16be":return Buffer.concat([Buffer.from([254,255]),ue(Buffer.from(e,"utf16le"))]);default:return Buffer.from(e,"utf8")}}function fe(e){return e.includes(`\r
|
|
4
|
+
`)?"CRLF":"LF"}function pe(e,t){let r=e.replace(/\r\n/g,`
|
|
5
5
|
`);return t==="CRLF"?r.replace(/\n/g,`\r
|
|
6
|
-
`):r}function
|
|
7
|
-
`)?/(^|[^\r])\n/.test(e):!1}async function
|
|
8
|
-
`)){let n=r.trim();if(n)try{t.push(JSON.parse(n))}catch{}}return t}function
|
|
9
|
-
`)}function
|
|
10
|
-
`)),nextIndex:n}}function
|
|
11
|
-
`)}function
|
|
12
|
-
${
|
|
13
|
-
`):process.stderr.write(`[${
|
|
14
|
-
`))}function
|
|
15
|
-
`):process.stderr.write(`[${
|
|
16
|
-
`))}function
|
|
17
|
-
`):process.stderr.write(`[${
|
|
18
|
-
`))}function
|
|
19
|
-
`):process.stderr.write(`[${
|
|
20
|
-
`))}function X(e){if(e==null)return"";if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}var _r=/^[A-Za-z0-9:._*-]{1,64}$/,vr=/^[A-Za-z0-9_-][A-Za-z0-9 _-]{0,30}[A-Za-z0-9_-]$/,Ar=/^[0-9][0-9A-Za-z.+-]{0,40}$/,Se=Object.freeze({"x-xeno-source":Object.freeze(["auto","quota","credits","byok"]),"x-xeno-byok-mode":Object.freeze(["local","cloud"])}),kr=/^[\x21-\x7E]{1,64}$/;function Pr(e){if(!e||typeof e!="object")throw new TypeError("requestContext must be an object");let t=Object.keys(e).filter(i=>i!=="surface"&&i!=="client"&&i!=="headers");if(t.length>0)throw new TypeError(`requestContext does not accept: ${t.join(", ")}`);if(typeof e.surface!="string"||!_r.test(e.surface))throw new TypeError("requestContext.surface must match /^[A-Za-z0-9:._*-]{1,64}$/");let r=Cr(e.headers),n=r?{surface:e.surface,headers:r}:{surface:e.surface};if(e.client===void 0)return Object.freeze(n);let o=e.client;if(!o||typeof o!="object"||Object.keys(o).some(i=>i!=="name"&&i!=="version"))throw new TypeError("requestContext.client must be { name, version }");if(typeof o.name!="string"||!vr.test(o.name))throw new TypeError("requestContext.client.name must be 2-32 characters of letters, digits, space, _ or -");if(typeof o.version!="string"||!Ar.test(o.version))throw new TypeError("requestContext.client.version must start with a digit, e.g. 1.2.3");return Object.freeze({...n,client:Object.freeze({name:o.name,version:o.version})})}function Cr(e){if(e===void 0)return;if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError("requestContext.headers must be an object");let t={};for(let[r,n]of Object.entries(e)){let o=r.toLowerCase(),i=Object.prototype.hasOwnProperty.call(Se,o)?Se[o]:void 0;if(!i)throw new TypeError(`requestContext.headers does not accept: ${r}`);if(typeof n!="string"||!kr.test(n))throw new TypeError(`requestContext.headers.${o} must be 1-64 printable ASCII characters`);if(!i.includes(n))throw new TypeError(`requestContext.headers.${o} must be one of: ${i.join(", ")}`);if(Object.prototype.hasOwnProperty.call(t,o))throw new TypeError(`requestContext.headers.${o} is given twice`);t[o]=n}return Object.freeze(t)}function Sr(e){return e?{...e.headers??{},"X-Xeno-Surface":e.surface,...e.client?{"X-Xeno-Client":`${e.client.name}/${e.client.version}`}:{}}:{}}var I=class extends Error{statusCode;body;retryAfterMs;requestId;cfRay;constructor(t,r={}){super(t,r.cause!==void 0?{cause:r.cause}:void 0),this.name="ApiTransientError",this.statusCode=r.statusCode,this.retryAfterMs=r.retryAfterMs,this.requestId=r.requestId,this.cfRay=r.cfRay;for(let n of["code","category","retryable","providerCode","remedy"])r[n]!==void 0&&Object.defineProperty(this,n,{value:r[n],enumerable:!0,configurable:!0,writable:!1})}},z={maxRetries:3,baseDelayMs:1e3,maxDelayMs:3e4,jitterMs:300};function F(e,t){let r=process.env[e],n=r?Number.parseInt(r,10):Number.NaN;return!Number.isFinite(n)||n<0?t:n}function Or(e={}){let t=Math.max(0,e.maxRetries??F("XENO_API_MAX_RETRIES",z.maxRetries)),r=Math.max(50,e.baseDelayMs??F("XENO_API_BASE_DELAY_MS",z.baseDelayMs)),n=Math.max(r,e.maxDelayMs??F("XENO_API_MAX_DELAY_MS",z.maxDelayMs)),o=Math.max(0,e.jitterMs??F("XENO_API_RETRY_JITTER_MS",z.jitterMs));return{maxRetries:t,baseDelayMs:r,maxDelayMs:n,jitterMs:o}}function Ir(e,t,r){if(t.retryAfterMs&&t.retryAfterMs>0)return Math.min(t.retryAfterMs,r.maxDelayMs);let n=Math.min(r.baseDelayMs*Math.pow(2,e),r.maxDelayMs),o=Math.floor(Math.random()*r.jitterMs);return Math.min(n+o,r.maxDelayMs)}function Oe(e){let t=e.toLowerCase();return t.includes("rate limit")||t.includes("too many requests")||t.includes("429")}function Mr(e){let t=e.toLowerCase();return t.includes("network")||t.includes("timeout")||t.includes("fetch failed")||t.includes("socket hang up")||t.includes("econnreset")||t.includes("eai_again")||t.includes("enotfound")||t.includes("econnrefused")||t.includes("tls")||t.includes("temporarily unavailable")}function Z(e){if(e instanceof I)return{statusCode:e.statusCode,retryAfterMs:e.retryAfterMs,requestId:e.requestId,cfRay:e.cfRay};if(!(e instanceof Error))return{};let t=e;if(t.statusCode!==void 0||t.retryAfterMs!==void 0||t.requestId!==void 0||t.cfRay!==void 0)return{statusCode:t.statusCode,retryAfterMs:t.retryAfterMs,requestId:t.requestId,cfRay:t.cfRay};let r=e.message.toLowerCase();return Oe(r)?{statusCode:429}:{}}var Y="408|425|429|500|502|503|504";function Ie(e){let t=new RegExp(`(?:\\bstatus(?:[ _-]?code)?\\b\\s*[=:]?\\s*|\\bhttp\\b\\s*|\\bapi\\b\\s*|\\bcode\\b\\s*[=:]\\s*|\\berror\\b\\s*)(?:${Y})\\b`,"i"),r=new RegExp(`\\b(?:${Y})\\s+(?:internal|bad\\s+gateway|service\\s+unavailable|gateway\\s+time|request\\s+time|too\\s+early|too\\s+many)`,"i"),n=new RegExp(`^\\s*(?:${Y})\\b`);return t.test(e)||r.test(e)||n.test(e)}function Me(e){if(e&&typeof e=="object"&&"retryable"in e)return e.retryable===!0;if(e instanceof I){let{statusCode:t}=Z(e);if(t)return t===429||t>=500||t===408||t===409||t===425}if(e instanceof Error){let t=e.name?.toLowerCase()??"";return t==="aborterror"||t==="agentinterruptederror"||e.message.toLowerCase().includes("aborted")||e.message.toLowerCase().includes("interrupted")?!1:Ie(e.message)?!0:Oe(e.message)||Mr(e.message.toLowerCase())}return!1}function $r(e){if(e.onAbort)return e.onAbort();let t=new Error("The operation was aborted");return t.name="AbortError",t}async function Nr(e,t={}){let r=Or(t),n;for(let o=0;o<=r.maxRetries;o++)try{if(t.signal?.aborted)throw $r(t);return t.onBeforeAttempt?.(o),await e()}catch(i){if(n=i,!(t.shouldRetry?t.shouldRetry(i,o):Me(i))||o===r.maxRetries)throw i;let a=Z(i),c=Ir(o,a,r),l=t.getDelayMs?.(i,o,c),f=typeof l=="number"&&l>=0?l:c;await new Promise(u=>setTimeout(u,f))}throw n}var $e=(e,t)=>{if(!e)return 0;let r=t.toLowerCase(),n=r.includes("claude")?3.5:r.includes("gemini")?3.8:(/(^|[/_-])(gpt|o\d)/.test(r),4),o=[...e].filter(s=>s.codePointAt(0)>127).length,i=Math.ceil(e.length/n);return Math.max(1,i+Math.ceil(o*.35))},Ne=Object.freeze({id:"xeno-conservative-v1",source:"estimated",countText:$e,countImage:({detail:e})=>e==="high"?2e3:e==="low"?512:1200,safetyMarginRatio:e=>{let t=e.toLowerCase();return t.includes("claude")?.12:t.includes("gemini")?.14:/(^|[/_-])(gpt|o\d)/.test(t)?.1:.18}});function Dr(e,t,r=Ne){return{tokens:Math.max(0,Math.ceil(r.countText(e,t))),source:r.source,adapterId:r.id}}function De(e){return e?Math.ceil(e.length/4):0}function Lr(e,t){if(!e||t<=0)return"";let r=t*4;if(e.length<=r)return e;let n=e.slice(0,r),o=n.lastIndexOf(" ");return o>r*.8&&(n=n.slice(0,o)),n+"..."}function Br(e,t){return De(e)<=t}function Xr(e,t){return Math.max(0,t-e)}var zr={"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 Fr(e,t,r){let n=zr[e];return n?t/1e6*n.input+r/1e6*n.output:0}function Hr(e){return e<=0?"$0.00":e<.001?"<$0.001":e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}var Le=require("node:child_process");function qr(e){let t=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"]}],r=null;for(let n of t)try{let o=(0,Le.spawnSync)(n.command,n.args,{input:e,encoding:"utf8"});if(o.error){r=o.error.message;continue}if(o.status===0)return;r=o.stderr||o.stdout||`exit ${o.status}`}catch(o){r=o instanceof Error?o.message:String(o)}throw new Error(`Clipboard copy failed${r?`: ${r}`:""}`)}function Xe(e){return e.replace(/\\/g,"/").toLowerCase()}var Ur=["golden","solution","answer","expected"],jr=["expected","golden","reference","answer","answers"],Vr=new Set([";","&&","||","|"]);function ze(e){return Xe(e).replace(/^\.\/+/,"").split("/").map(t=>t.trim()).filter(t=>t.length>0)}function Wr(e){return Ur.some(t=>e.includes(t))}function Be(e){return jr.some(t=>e.includes(t))}function Fe(e){return e.split("::",1)[0]?.split("?",1)[0]?.split("#",1)[0]??e}function H(e){let t=e.trim().replace(/^[({]+/,"").replace(/[),;]+$/,"");return(t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"))&&(t=t.slice(1,-1)),t}function Kr(e){return e.match(/"[^"]*"|'[^']*'|&&|\|\||[;|]|[^\s;|&]+/g)?.map(H).filter(t=>t.length>0)??[]}function He(e){let t=ze(e),r=Fe(t.at(-1)??"");return Be(r)||t.some(n=>Be(n))}function qe(e){let t=Xe(H(e));return!t||t==="/dev/null"||t.startsWith("/tmp/")||t.startsWith("tmp/")||t.startsWith("/var/tmp/")||t.startsWith("var/tmp/")?!1:t.startsWith("/app/")||t.startsWith("./")?!0:!t.startsWith("/")}function Gr(e){return/[\\/]/.test(e)||/\.[A-Za-z0-9]{1,8}$/.test(e)}function Yr(e){let t=Kr(e);for(let r=0;r<t.length;r+=1){let n=t[r]?.toLowerCase();if(n!=="cp"&&n!=="mv"&&n!=="rsync"&&n!=="install")continue;let o=[];for(let s=r+1;s<t.length;s+=1){let a=t[s];if(!a||Vr.has(a))break;a!=="--"&&(a.startsWith("-")||o.push(a))}if(o.length<2)continue;let i=o.at(-1);if(qe(i)){for(let s of o.slice(0,-1))if(Gr(s)&&He(s))return{sourcePath:s,destinationPath:i,operation:n}}}return null}function Zr(e){let t=[/\bcat\s+(?:"([^"]+)"|'([^']+)'|([^\s;&|]+))\s*>\s*(?:"([^"]+)"|'([^']+)'|([^\s;&|]+))/i,/\bdd\b[\s\S]*?\bif=(?:"([^"]+)"|'([^']+)'|([^\s;&|]+))[\s\S]*?\bof=(?:"([^"]+)"|'([^']+)'|([^\s;&|]+))/i];for(let r of t){let n=e.match(r);if(!n)continue;let o=H(n[1]??n[2]??n[3]??""),i=H(n[4]??n[5]??n[6]??"");if(!(!o||!i)&&He(o)&&qe(i))return{sourcePath:o,destinationPath:i,operation:r.source.startsWith("\\bdd")?"dd":"redirect"}}return null}function J(){return process.env.XENO_BENCHMARK_MODE?.trim().toLowerCase()==="terminal-bench"}function Q(e){let t=ze(e);if(t.includes("solution")||t.includes("xeno-audit")||t.includes(".xeno")&&t.includes("audit"))return!0;let r=Fe(t.at(-1)??"");return t.includes("tests")&&Wr(r)}function Jr(e){return J()?e.filter(t=>!Q(t)):e}function Qr(e){return`Benchmark safety: access to verifier answer or benchmark trace artifacts is blocked (${e}). Use task inputs and verifier logic, not golden, solution, or agent audit files.`}function en(e){return e.split(/[\s"'`;|&]+/).map(t=>t.trim()).filter(t=>t.length>0&&/[\\/]/.test(t)).some(t=>Q(t))}function tn(e){if(!J())return null;let t=Yr(e)??Zr(e);return t?["[xeno guidance]",`Benchmark safety blocked ${t.operation} from reference-like source ${t.sourcePath} to protected destination ${t.destinationPath}.`,"Do not copy expected, golden, reference, or answer files over task inputs or submission artifacts to make validation pass.","If a previous check polluted an input, restore/regenerate the original source input, then rerun the actual script or program under test."].join(`
|
|
21
|
-
`):null}function rn(e){return/^data:([^;,]+)[;,]/i.exec(e.trim())?.[1]}function Ue(e){let t=[];for(let r of e){if(r.type==="text"){t.push(r.text);continue}if(r.type==="image_url"){t.push(`[image ${rn(r.image_url.url)??"unknown"}]`);continue}let n=r.text??r.data;if(n&&n.trim().length>0){t.push(n);continue}let o=r.uri??r.mimeType??"resource";t.push(`[resource ${o}]`)}return t.join(`
|
|
6
|
+
`):r}function Et(e){return e.includes(`\r
|
|
7
|
+
`)?/(^|[^\r])\n/.test(e):!1}async function me(e){let t=await p.readFile(e),r=ce(t),n=de(t,r);return{content:n,encoding:r,lineEnding:fe(n),sizeBytes:t.length}}async function bt(e,t,r){let n=r?.preserveLineEndings?t:pe(t,r?.lineEnding??"LF");await ie(e,le(n,r?.encoding??"utf8"))}async function wt(e,t){let r=new Set,n=d.resolve(e),o=t===void 0?void 0:d.resolve(t);if(o!==void 0){let s=d.relative(o,n);if(d.isAbsolute(s)||s===".."||s.startsWith(`..${d.sep}`))return"LF"}for(;!r.has(n);){r.add(n);try{let i=(0,I.readdirSync)(n,{withFileTypes:!0}).filter(a=>a.isFile()).map(a=>a.name).sort();for(let a of i){if(a.startsWith("."))continue;let c=d.extname(a).toLowerCase();if([".ts",".tsx",".js",".jsx",".json",".md",".txt",".yaml",".yml",".css",".html",".xml",".sh",".ps1"].includes(c))try{let l=d.join(n,a),f=await me(l);if(f.content.length>0)return f.lineEnding}catch{}}}catch{}if(o!==void 0&&d.relative(o,n)==="")break;let s=d.dirname(n);if(s===n)break;n=s}return"LF"}function xt(e,t,r){let n=[],o=[{dir:e,depth:0}],s=new Set;for(;o.length>0&&n.length<r;){let i=o.shift();if(!s.has(i.dir)){s.add(i.dir);try{let a=(0,I.readdirSync)(i.dir,{withFileTypes:!0});for(let c of a){let l=d.join(i.dir,c.name);if(c.isFile()){if(n.push(l),n.length>=r)break;continue}c.isDirectory()&&i.depth<t&&!c.name.startsWith(".")&&c.name!=="node_modules"&&o.push({dir:l,depth:i.depth+1})}}catch{}}}return n}function se(e,t){let r=d.relative(e,t);return r===""||!r.startsWith("..")&&!d.isAbsolute(r)}function Rt(e,t){try{let r=d.dirname(e),n=d.basename(e,d.extname(e)).toLowerCase(),o=d.basename(e).toLowerCase(),s=[r,d.dirname(r)],i=t!==void 0&&se(t,e)?t:void 0,a=s.flatMap(l=>xt(l,2,500)).filter(l=>i===void 0||se(i,l)),c=null;for(let l of a){let f=d.basename(l).toLowerCase(),u=d.basename(l,d.extname(l)).toLowerCase(),g=null;if(f===o?g=0:u===n?g=1:(f.includes(n)||n.includes(u))&&(g=2),g===null)continue;let v=d.relative(r,l).split(d.sep).length,h=g+v*.01;(!c||h<c.score)&&(c={filePath:l,score:h})}return c?.filePath??null}catch{}return null}async function Tt(e){try{return await p.readFile(e,"utf-8")}catch(t){if(t.code==="ENOENT")return null;throw t}}function _t(e){return(0,_.existsSync)(e)}async function vt(e,t){try{let n=(await p.readdir(e,{withFileTypes:!0})).filter(o=>o.isFile()).map(o=>d.join(e,o.name));return t&&(n=n.filter(o=>t.test(d.basename(o)))),n}catch(r){if(r.code==="ENOENT")return[];throw r}}async function At(e){try{return(await p.readdir(e,{withFileTypes:!0})).filter(r=>r.isDirectory()).map(r=>d.join(e,r.name))}catch(t){if(t.code==="ENOENT")return[];throw t}}async function Ct(e){try{await p.unlink(e)}catch(t){if(t.code!=="ENOENT")throw t}finally{D(e)}}async function Pt(e){try{await p.rm(e,{recursive:!0,force:!0})}catch(t){if(t.code!=="ENOENT")throw t}}function kt(e,t){try{return JSON.parse(e)}catch{return t}}function St(e,t="{}"){try{return JSON.stringify(e)}catch{return t}}function It(e){let t=[];for(let r of e.split(`
|
|
8
|
+
`)){let n=r.trim();if(n)try{t.push(JSON.parse(n))}catch{}}return t}function Ot(e){let t=Nt(e);return{frontmatter:t.frontmatter,content:t.content.trim()}}function Mt(e,t){let r=Object.fromEntries(Object.entries(e).filter(([n,o])=>o!==void 0));return["---",Ee(r),"---","",t].join(`
|
|
9
|
+
`)}function $t(e){return e.trimStart().startsWith("---")}function Nt(e){let t=e.replace(/^\uFEFF/,"");if(!t.startsWith("---"))return{frontmatter:{},content:e};let r=t.search(/\r?\n/);if(r<0||t.slice(0,r).trim()!=="---")return{frontmatter:{},content:e};let n=t.slice(r+(t[r]==="\r"?2:1)),o=n.match(/(?:^|\r?\n)---[ \t]*(?:\r?\n|$)/);if(!o||o.index===void 0)throw new Error("YAML frontmatter is not closed.");let s=n.slice(0,o.index),i=o[0],a=o.index+i.length;return{frontmatter:ye(s),content:n.slice(a)}}function ye(e){let t={},r=e.split(/\r?\n/);for(let n=0;n<r.length;n+=1){let o=r[n];if(!o.trim()||o.trimStart().startsWith("#"))continue;if(/^\s/.test(o))throw new Error(`Unexpected indentation at line ${n+1}.`);let s=Lt(o,n+1);if(s.key==="<<")throw new Error("YAML merge keys are not supported.");if(s.value!==""){t[s.key]=he(s.value,n+1);continue}let i=Dt(r,n+1);t[s.key]=i.value,n=i.nextIndex-1}return t}function Dt(e,t){let r=[],n=t;for(;n<e.length;n+=1){let s=e[n];if(!s.trim()){r.push(s);continue}if(!/^\s/.test(s))break;r.push(s.replace(/^ {2}/,""))}let o=r.filter(s=>s.trim()&&!s.trimStart().startsWith("#"));return o.length===0?{value:{},nextIndex:n}:o.every(s=>s.trimStart().startsWith("- "))?{value:o.map((s,i)=>he(s.trimStart().slice(2),t+i+1)),nextIndex:n}:{value:ye(r.join(`
|
|
10
|
+
`)),nextIndex:n}}function Lt(e,t){let r=e.indexOf(":");if(r<=0)throw new Error(`Invalid YAML line ${t}.`);let n=e.slice(0,r).trim(),o=e.slice(r+1).trim();if(!n)throw new Error(`Invalid YAML key at line ${t}.`);return{key:n,value:o}}function he(e,t){if(e==="")return"";if(e==="[]")return[];if(e==="{}")return{};if(e==="true")return!0;if(e==="false")return!1;if(e==="null"||e==="~")return null;if(/^-?\d+(?:\.\d+)?$/.test(e))return Number(e);if(e.startsWith('"'))return ge(e,t);if(e.startsWith("'")){if(!e.endsWith("'"))throw new Error(`Unclosed quoted scalar at line ${t}.`);return e.slice(1,-1).replace(/''/g,"'")}if(e.startsWith("[")||e.startsWith("{"))return ge(e,t);if(e.includes("[")||e.includes("]")||e.includes("{")||e.includes("}"))throw new Error(`Unsupported YAML scalar at line ${t}.`);return e}function ge(e,t){try{return JSON.parse(e)}catch{throw new Error(`Invalid YAML scalar at line ${t}.`)}}function Ee(e,t=""){return Object.entries(e).map(([r,n])=>Bt(r,n,t)).join(`
|
|
11
|
+
`)}function Bt(e,t,r){return Array.isArray(t)?`${r}${e}: ${JSON.stringify(t)}`:t&&typeof t=="object"?`${r}${e}:
|
|
12
|
+
${Ee(t,`${r} `)}`:`${r}${e}: ${JSON.stringify(t)}`}var y=H(require("path"),1);function be(e,t){let r=y.resolve(e),n=y.resolve(e,t);return n===r?!0:r===y.parse(r).root?n.startsWith(r):n.startsWith(r+y.sep)}function Xt(e,t){if(y.isAbsolute(t))return y.resolve(t);if(!be(e,t))throw new Error(`PathSecurity: Path traversal attempt detected: ${t}`);return y.resolve(e,t)}function zt(e,t=process.platform){let r=y.resolve(e);return t==="win32"?r.toLowerCase():r}var x=require("node:os"),P=require("node:child_process"),Te=require("node:fs"),b=require("node:path");var j=require("node:child_process"),Ft=5e3,we=128;function qt(e,t,r){let n={tool:e,timeoutMs:r};return t.timedOut?{...n,terminated:!1,reason:"timeout",exitCode:null,detail:`${e} did not finish within ${r}ms`}:t.error!==void 0?{...n,terminated:!1,reason:"spawn-error",exitCode:null,detail:t.error}:t.status===0?{...n,terminated:!0,reason:"terminated",exitCode:0}:e==="taskkill"&&t.status===we?{...n,terminated:!0,reason:"not-running",exitCode:we}:{...n,terminated:!1,reason:"failed",exitCode:t.status,detail:`${e} exited with code ${t.status??"unknown"}`}}var Ht=(e,t,r)=>new Promise(n=>{let o=!1,s={},i=c=>{o||(o=!0,s.timer&&clearTimeout(s.timer),n(c))},a;try{a=(0,j.spawn)(e,[...t],{stdio:"ignore",windowsHide:!0})}catch(c){i({status:null,timedOut:!1,error:c instanceof Error?c.message:String(c)});return}s.timer=setTimeout(()=>{try{a.kill("SIGKILL")}catch{}i({status:null,timedOut:!0})},r),s.timer.unref?.(),a.once("error",c=>{i({status:null,timedOut:!1,error:c.code??c.message})}),a.once("close",c=>{i(c===null?{status:null,timedOut:!1,error:"no exit status"}:{status:c,timedOut:!1})})});function xe(e){return typeof e=="number"&&Number.isFinite(e)&&e>0?Math.floor(e):Ft}function Ut(e,t){return{terminated:!1,reason:"failed",tool:e,exitCode:null,timeoutMs:t,detail:"pid is not a positive integer"}}function jt(e){return["/PID",String(e),"/T","/F"]}async function Re(e,t={}){let r=xe(t.timeoutMs);return!Number.isSafeInteger(e)||e<=0?Ut("taskkill",r):Vt("taskkill","taskkill.exe",jt(e),{timeoutMs:r,run:t.run})}async function Vt(e,t,r,n={}){let o=xe(n.timeoutMs),s;try{s=await(n.run??Ht)(t,r,o)}catch(i){s={status:null,timedOut:!1,error:i instanceof Error?i.message:String(i)}}return qt(e,s,o)}var B=(0,x.platform)(),C=B==="win32",Wt=B==="darwin",Kt=B==="linux",Gt=(0,x.release)(),Yt=(0,x.homedir)();function Zt(){let e=process.env.XENO_AGENT_HOME?.trim();return e?(0,b.resolve)(e):(0,b.resolve)((0,x.homedir)(),".xeno-agent")}function Jt(){let e=process.env.XENO_CONFIG_DIR?.trim();return e?(0,b.resolve)(e):(0,b.resolve)((0,x.homedir)(),".xeno-code")}function Qt(e){return(0,b.resolve)(e,".xeno-code")}function er(){return C?"powershell":process.env.SHELL?.split("/").pop()??"bash"}var W=5e3,K=4096,V=["rev-parse","--is-inside-work-tree"];function _e(){if(!C)return{file:"git",args:V};let e=(process.env.PATHEXT??".COM;.EXE;.BAT;.CMD").split(";").map(t=>t.toLowerCase()).filter(t=>[".exe",".com",".cmd",".bat"].includes(t));for(let t of(process.env.PATH??"").split(b.delimiter).filter(Boolean)){let r=t.replace(/^"(.*)"$/,"$1");for(let n of e){let o=(0,b.resolve)(r,`git${n}`);try{if(!(0,Te.statSync)(o).isFile())continue}catch{continue}if(n!==".cmd"&&n!==".bat")return{file:o,args:V};if(/["%!\r\n\0]/.test(o))throw new Error("Git wrapper path cannot be represented safely");let s=process.env.SystemRoot??process.env.WINDIR;if(!s)throw new Error("Windows command interpreter is unavailable");return{file:(0,b.join)(s,"System32","cmd.exe"),args:["/d","/s","/c",`""${o}" rev-parse --is-inside-work-tree"`],windowsVerbatimArguments:!0}}}return{file:"git",args:V}}function tr(e){try{let t=_e();if(t.windowsVerbatimArguments){let r=(0,P.spawnSync)(t.file,t.args,{cwd:e,encoding:"utf8",windowsHide:!0,windowsVerbatimArguments:!0,timeout:W,maxBuffer:K,stdio:["ignore","pipe","ignore"]});return!r.error&&r.status===0&&r.stdout.trim()==="true"}return(0,P.execFileSync)(t.file,t.args,{cwd:e,encoding:"utf8",windowsHide:!0,timeout:W,maxBuffer:K,stdio:["ignore","pipe","ignore"]}).trim()==="true"}catch{return!1}}function rr(e){return new Promise(t=>{let r,n=!1,o={},s=0,i=[],a=l=>{n||(n=!0,o.timer&&clearTimeout(o.timer),r?.stdout?.destroy(),r?.unref(),t(l))},c=()=>{if(r.exitCode===null&&r.signalCode===null)if(C&&r.pid)Re(r.pid);else if(!C&&r.pid)try{process.kill(-r.pid,"SIGKILL")}catch{try{r.kill("SIGKILL")}catch{}}else try{r.kill("SIGKILL")}catch{}a(!1)};try{let l=_e();r=(0,P.spawn)(l.file,l.args,{cwd:e,windowsHide:!0,detached:!C,windowsVerbatimArguments:l.windowsVerbatimArguments,stdio:["ignore","pipe","ignore"]})}catch{a(!1);return}o.timer=setTimeout(c,W),r.stdout?.on("data",l=>{if(!n){if(s+=l.byteLength,s>K){c();return}i.push(Buffer.from(l))}}),r.once("error",()=>a(!1)),r.once("close",l=>a(l===0&&Buffer.concat(i).toString("utf8").trim()==="true"))})}function nr(e,t){for(let r of t)if(e[r]===void 0||e[r]===null||e[r]==="")return`Missing required parameter: ${r}`;return null}function or(e,t,r){let n=e[t];if(n==null){if(r!==void 0)return r;throw new Error(`Missing required parameter: ${t}`)}if(typeof n!="string")throw new Error(`Parameter ${t} must be a string, got ${typeof n}`);return n}function sr(e,t,r){let n=e[t];if(n==null){if(r!==void 0)return r;throw new Error(`Missing required parameter: ${t}`)}if(typeof n!="number")throw new Error(`Parameter ${t} must be a number, got ${typeof n}`);if(isNaN(n))throw new Error(`Parameter ${t} is NaN`);return n}function ir(e,t,r){let n=e[t];if(n==null){if(r!==void 0)return r;throw new Error(`Missing required parameter: ${t}`)}if(typeof n!="boolean")throw new Error(`Parameter ${t} must be a boolean, got ${typeof n}`);return n}function ve(e){if(e.length>5e3)return"Pattern too long (max 5000 characters)";let r=[/(\.\*){3,}/,/(\+\+|\*\*)/,/(.*\+.*\+.*\+)/];for(let n of r)if(n.test(e))return"Pattern contains potentially unsafe constructs that could cause excessive backtracking";return null}function ar(e,t,r=5e3){let n=ve(e);if(n)throw new Error(n);try{return new RegExp(e,t)}catch(o){let s=o instanceof Error?o.message:String(o);throw new Error(`Invalid regex pattern: ${s}`)}}function cr(e,t,r=1e3){if(t.length>1e5)throw new Error(`Input too large for safe regex test (${t.length} chars, max 100000)`);return e.test(t)}var Ae=(s=>(s[s.DEBUG=0]="DEBUG",s[s.INFO=1]="INFO",s[s.WARN=2]="WARN",s[s.ERROR=3]="ERROR",s[s.SILENT=4]="SILENT",s))(Ae||{}),k=1;function ur(e){k=e}function dr(){return k}function R(){return new Date().toISOString()}function lr(e,t){k<=0&&(t!==void 0?process.stderr.write(`[${R()}] DEBUG: ${e} ${X(t)}
|
|
13
|
+
`):process.stderr.write(`[${R()}] DEBUG: ${e}
|
|
14
|
+
`))}function fr(e,t){k<=1&&(t!==void 0?process.stderr.write(`[${R()}] INFO: ${e} ${X(t)}
|
|
15
|
+
`):process.stderr.write(`[${R()}] INFO: ${e}
|
|
16
|
+
`))}function pr(e,t){k<=2&&(t!==void 0?process.stderr.write(`[${R()}] WARN: ${e} ${X(t)}
|
|
17
|
+
`):process.stderr.write(`[${R()}] WARN: ${e}
|
|
18
|
+
`))}function mr(e,t){k<=3&&(t!==void 0?process.stderr.write(`[${R()}] ERROR: ${e} ${X(t)}
|
|
19
|
+
`):process.stderr.write(`[${R()}] ERROR: ${e}
|
|
20
|
+
`))}function X(e){if(e==null)return"";if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}var gr=/^[A-Za-z0-9:._*-]{1,64}$/,yr=/^[A-Za-z0-9_-][A-Za-z0-9 _-]{0,30}[A-Za-z0-9_-]$/,hr=/^[0-9][0-9A-Za-z.+-]{0,40}$/,Ce=Object.freeze({"x-xeno-source":Object.freeze(["auto","quota","credits","byok"]),"x-xeno-byok-mode":Object.freeze(["local","cloud"])}),Er=/^[\x21-\x7E]{1,64}$/;function br(e){if(!e||typeof e!="object")throw new TypeError("requestContext must be an object");let t=Object.keys(e).filter(s=>s!=="surface"&&s!=="client"&&s!=="headers");if(t.length>0)throw new TypeError(`requestContext does not accept: ${t.join(", ")}`);if(typeof e.surface!="string"||!gr.test(e.surface))throw new TypeError("requestContext.surface must match /^[A-Za-z0-9:._*-]{1,64}$/");let r=wr(e.headers),n=r?{surface:e.surface,headers:r}:{surface:e.surface};if(e.client===void 0)return Object.freeze(n);let o=e.client;if(!o||typeof o!="object"||Object.keys(o).some(s=>s!=="name"&&s!=="version"))throw new TypeError("requestContext.client must be { name, version }");if(typeof o.name!="string"||!yr.test(o.name))throw new TypeError("requestContext.client.name must be 2-32 characters of letters, digits, space, _ or -");if(typeof o.version!="string"||!hr.test(o.version))throw new TypeError("requestContext.client.version must start with a digit, e.g. 1.2.3");return Object.freeze({...n,client:Object.freeze({name:o.name,version:o.version})})}function wr(e){if(e===void 0)return;if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError("requestContext.headers must be an object");let t={};for(let[r,n]of Object.entries(e)){let o=r.toLowerCase(),s=Object.prototype.hasOwnProperty.call(Ce,o)?Ce[o]:void 0;if(!s)throw new TypeError(`requestContext.headers does not accept: ${r}`);if(typeof n!="string"||!Er.test(n))throw new TypeError(`requestContext.headers.${o} must be 1-64 printable ASCII characters`);if(!s.includes(n))throw new TypeError(`requestContext.headers.${o} must be one of: ${s.join(", ")}`);if(Object.prototype.hasOwnProperty.call(t,o))throw new TypeError(`requestContext.headers.${o} is given twice`);t[o]=n}return Object.freeze(t)}function xr(e){return e?{...e.headers??{},"X-Xeno-Surface":e.surface,...e.client?{"X-Xeno-Client":`${e.client.name}/${e.client.version}`}:{}}:{}}var O=class extends Error{statusCode;body;retryAfterMs;requestId;cfRay;constructor(t,r={}){super(t,r.cause!==void 0?{cause:r.cause}:void 0),this.name="ApiTransientError",this.statusCode=r.statusCode,this.retryAfterMs=r.retryAfterMs,this.requestId=r.requestId,this.cfRay=r.cfRay;for(let n of["code","category","retryable","providerCode","remedy"])r[n]!==void 0&&Object.defineProperty(this,n,{value:r[n],enumerable:!0,configurable:!0,writable:!1})}},z={maxRetries:3,baseDelayMs:1e3,maxDelayMs:3e4,jitterMs:300};function F(e,t){let r=process.env[e],n=r?Number.parseInt(r,10):Number.NaN;return!Number.isFinite(n)||n<0?t:n}function Rr(e={}){let t=Math.max(0,e.maxRetries??F("XENO_API_MAX_RETRIES",z.maxRetries)),r=Math.max(50,e.baseDelayMs??F("XENO_API_BASE_DELAY_MS",z.baseDelayMs)),n=Math.max(r,e.maxDelayMs??F("XENO_API_MAX_DELAY_MS",z.maxDelayMs)),o=Math.max(0,e.jitterMs??F("XENO_API_RETRY_JITTER_MS",z.jitterMs));return{maxRetries:t,baseDelayMs:r,maxDelayMs:n,jitterMs:o}}function Tr(e,t,r){if(t.retryAfterMs&&t.retryAfterMs>0)return Math.min(t.retryAfterMs,r.maxDelayMs);let n=Math.min(r.baseDelayMs*Math.pow(2,e),r.maxDelayMs),o=Math.floor(Math.random()*r.jitterMs);return Math.min(n+o,r.maxDelayMs)}function Pe(e){let t=e.toLowerCase();return t.includes("rate limit")||t.includes("too many requests")||t.includes("429")}function _r(e){let t=e.toLowerCase();return t.includes("network")||t.includes("timeout")||t.includes("fetch failed")||t.includes("socket hang up")||t.includes("econnreset")||t.includes("eai_again")||t.includes("enotfound")||t.includes("econnrefused")||t.includes("tls")||t.includes("temporarily unavailable")}function Y(e){if(e instanceof O)return{statusCode:e.statusCode,retryAfterMs:e.retryAfterMs,requestId:e.requestId,cfRay:e.cfRay};if(!(e instanceof Error))return{};let t=e;if(t.statusCode!==void 0||t.retryAfterMs!==void 0||t.requestId!==void 0||t.cfRay!==void 0)return{statusCode:t.statusCode,retryAfterMs:t.retryAfterMs,requestId:t.requestId,cfRay:t.cfRay};let r=e.message.toLowerCase();return Pe(r)?{statusCode:429}:{}}var G="408|425|429|500|502|503|504";function ke(e){let t=new RegExp(`(?:\\bstatus(?:[ _-]?code)?\\b\\s*[=:]?\\s*|\\bhttp\\b\\s*|\\bapi\\b\\s*|\\bcode\\b\\s*[=:]\\s*|\\berror\\b\\s*)(?:${G})\\b`,"i"),r=new RegExp(`\\b(?:${G})\\s+(?:internal|bad\\s+gateway|service\\s+unavailable|gateway\\s+time|request\\s+time|too\\s+early|too\\s+many)`,"i"),n=new RegExp(`^\\s*(?:${G})\\b`);return t.test(e)||r.test(e)||n.test(e)}function Se(e){if(e&&typeof e=="object"&&"retryable"in e)return e.retryable===!0;if(e instanceof O){let{statusCode:t}=Y(e);if(t)return t===429||t>=500||t===408||t===409||t===425}if(e instanceof Error){let t=e.name?.toLowerCase()??"";return t==="aborterror"||t==="agentinterruptederror"||e.message.toLowerCase().includes("aborted")||e.message.toLowerCase().includes("interrupted")?!1:ke(e.message)?!0:Pe(e.message)||_r(e.message.toLowerCase())}return!1}function vr(e){if(e.onAbort)return e.onAbort();let t=new Error("The operation was aborted");return t.name="AbortError",t}async function Ar(e,t={}){let r=Rr(t),n;for(let o=0;o<=r.maxRetries;o++)try{if(t.signal?.aborted)throw vr(t);return t.onBeforeAttempt?.(o),await e()}catch(s){if(n=s,!(t.shouldRetry?t.shouldRetry(s,o):Se(s))||o===r.maxRetries)throw s;let a=Y(s),c=Tr(o,a,r),l=t.getDelayMs?.(s,o,c),f=typeof l=="number"&&l>=0?l:c;await new Promise(u=>setTimeout(u,f))}throw n}var Ie=(e,t)=>{if(!e)return 0;let r=t.toLowerCase(),n=r.includes("claude")?3.5:r.includes("gemini")?3.8:(/(^|[/_-])(gpt|o\d)/.test(r),4),o=[...e].filter(i=>i.codePointAt(0)>127).length,s=Math.ceil(e.length/n);return Math.max(1,s+Math.ceil(o*.35))},Oe=Object.freeze({id:"xeno-conservative-v1",source:"estimated",countText:Ie,countImage:({detail:e})=>e==="high"?2e3:e==="low"?512:1200,safetyMarginRatio:e=>{let t=e.toLowerCase();return t.includes("claude")?.12:t.includes("gemini")?.14:/(^|[/_-])(gpt|o\d)/.test(t)?.1:.18}});function Cr(e,t,r=Oe){return{tokens:Math.max(0,Math.ceil(r.countText(e,t))),source:r.source,adapterId:r.id}}function Me(e){return e?Math.ceil(e.length/4):0}function Pr(e,t){if(!e||t<=0)return"";let r=t*4;if(e.length<=r)return e;let n=e.slice(0,r),o=n.lastIndexOf(" ");return o>r*.8&&(n=n.slice(0,o)),n+"..."}function kr(e,t){return Me(e)<=t}function Sr(e,t){return Math.max(0,t-e)}var Ir={"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 Or(e,t,r){let n=Ir[e];return n?t/1e6*n.input+r/1e6*n.output:0}function Mr(e){return e<=0?"$0.00":e<.001?"<$0.001":e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}var $e=require("node:child_process");function $r(e){let t=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"]}],r=null;for(let n of t)try{let o=(0,$e.spawnSync)(n.command,n.args,{input:e,encoding:"utf8"});if(o.error){r=o.error.message;continue}if(o.status===0)return;r=o.stderr||o.stdout||`exit ${o.status}`}catch(o){r=o instanceof Error?o.message:String(o)}throw new Error(`Clipboard copy failed${r?`: ${r}`:""}`)}function Nr(){return!1}function Dr(e){return!1}function Lr(e){return e}function Br(e){return`Access to ${e} is not restricted.`}function Xr(e){return!1}function zr(e){return null}function Fr(e){return/^data:([^;,]+)[;,]/i.exec(e.trim())?.[1]}function Ne(e){let t=[];for(let r of e){if(r.type==="text"){t.push(r.text);continue}if(r.type==="image_url"){t.push(`[image ${Fr(r.image_url.url)??"unknown"}]`);continue}let n=r.text??r.data;if(n&&n.trim().length>0){t.push(n);continue}let o=r.uri??r.mimeType??"resource";t.push(`[resource ${o}]`)}return t.join(`
|
|
22
21
|
|
|
23
|
-
`).trim()}function
|
|
24
|
-
`)}function
|
|
25
|
-
`)}}function an(e){return Array.isArray(e)&&e.some(t=>t.type!=="text")}function cn(e){return typeof e=="string"?je(e):e}function un(e,t){return{type:"tool_result",tool_use_id:e,content:Ve(t),...t.assistantContent&&t.assistantContent.length>0?{assistant_content:t.assistantContent}:{},...t.assistantOnlyContent&&t.assistantOnlyContent.length>0?{assistant_only_content:t.assistantOnlyContent}:{},is_error:!t.success,...t.operation?{operation:t.operation}:{},...t.evidence&&t.evidence.length>0?{evidence:t.evidence}:{},...t.webContext?{web_context:t.webContext}:{},...t.retryable!==void 0?{retryable:t.retryable}:{}}}function dn(e,t={}){for(let r of e){let n=r.codePointAt(0);if(n===127)return!0;if(!(n>31)&&!(n===9&&t.allowTab===!0)&&!((n===10||n===13)&&t.allowLineBreaks===!0))return!0}return!1}var Ye=require("node:dns/promises"),M=require("node:net");var w="[redacted]";var ln=[[/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?(?:-----END [A-Z ]*PRIVATE KEY-----|$)/g,"[redacted:private-key]"],[/((?:^|[\s{,;"'(\[])["']?(?:cookie|set-cookie)["']?\s*[:=]\s*["']?)(?!\[redacted)[^\s"',;]+(?:;\s*[^\s"',;=]+=[^\s"',;]*)*/gi,`$1${w}`],[/((?:^|[\s{,;"'(\[])["']?(?:authorization|proxy-authorization|x-api-key|x-goog-api-key|x-xeno-api-key|api[-_]?key|apikey|dpop)["']?\s*[:=]\s*["']?)(?:(?:Bearer|Basic|Token|DPoP)\s+)?(?!\[redacted)[^\s"',;]+/gi,`$1${w}`],[/\b(Bearer|Basic|Token|DPoP)\s+[A-Za-z0-9._~+/=-]{6,}/gi,`$1 ${w}`],[/\b(?:sk-(?:ant-|proj-)?[A-Za-z0-9_-]{16,}|xeno-[A-Za-z0-9]{24,}|xrun_[A-Za-z0-9_-]{8,}|AIza[0-9A-Za-z_-]{30,}|gh[pousr]_[A-Za-z0-9_]{20,}|github_pat_[A-Za-z0-9_]{20,}|npm_[A-Za-z0-9]{30,}|xox[baprs]-[A-Za-z0-9-]{16,}|AKIA[0-9A-Z]{16})\b/g,w],[/\beyJ[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}/g,w],[/([?&#;](?:access_token|refresh_token|id_token|token|key|api[_-]?key|secret|client_secret|password|signature|sig)=)[^&#\s"'<>]+/gi,`$1${w}`],[/(\b[a-z][a-z0-9+.-]*:\/\/)[^/\s:@"']+:[^/\s@"']+@/gi,`$1${w}@`]];function We(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function S(e,t=[]){if(!e)return e;let r=e,n=[...new Set([...t].filter(o=>typeof o=="string"&&o.length>=12))].sort((o,i)=>i.length-o.length);for(let o of n){r=r.replace(new RegExp(`(?<![A-Za-z0-9_-])${We(o)}(?![A-Za-z0-9_-])`,"g"),w);let i=encodeURIComponent(o);i!==o&&(r=r.replace(new RegExp(`(?<![A-Za-z0-9_-])${We(i)}(?![A-Za-z0-9_-])`,"g"),w))}for(let[o,i]of ln)o.lastIndex=0,r=r.replace(o,i);return r}function ee(e,t,r){try{Object.defineProperty(e,t,{value:r,writable:!0,configurable:!0,enumerable:!1})}catch{}}function te(e,t=[],r=0){if(!(e instanceof Error)||r>6)return e;let n=[...t],o=S(e.message,n);if(o!==e.message&&ee(e,"message",o),typeof e.stack=="string"){let s=S(e.stack,n);s!==e.stack&&ee(e,"stack",s)}let i=e.cause;if(i instanceof Error)te(i,n,r+1);else if(i!=null){let s;try{s=typeof i=="string"?i:JSON.stringify(i)??String(i)}catch{s=String(i)}let a=S(s,n);a!==s&&ee(e,"cause",a)}for(let s of Object.keys(e)){let a=e[s];if(typeof a=="string"){let c=S(a,n);if(c!==a)try{e[s]=c}catch{}}}return e}var q=class extends Error{category;code;retryable;providerId;statusCode;retryAfterMs;requestId;providerCode;remedy;constructor(t,r){super(S(t),r.cause!==void 0?{cause:r.cause}:void 0),this.name="ProviderError",this.category=r.category,this.code=r.code,this.retryable=r.retryable??!1,this.providerId=r.providerId,this.statusCode=r.statusCode,this.retryAfterMs=r.retryAfterMs,this.requestId=r.requestId,r.providerCode!==void 0&&(this.providerCode=r.providerCode),r.remedy!==void 0&&(this.remedy=r.remedy),te(this)}};var Ze=new Set(["metadata.google.internal","metadata.azure.internal","instance-data.ec2.internal"]);function m(e){return new q(`Provider endpoint rejected: ${e}`,{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"})}function fn(e){let t=e.split(".");if(t.length!==4)return null;let r=t.map(n=>Number(n));return r.every(n=>Number.isInteger(n)&&n>=0&&n<=255)?r:null}function Ke(e){let t=fn(e);if(!t)return"public";let[r,n]=t;return r===0?"unspecified":r===127?"loopback":r===169&&n===254?"link-local":r===10||r===172&&n>=16&&n<=31||r===192&&n===168?"private":"public"}function T(e){let t=e.toLowerCase().replace(/^\[|\]$/g,"").split("%")[0];(0,M.isIP)(t)===6&&(t=new URL(`http://[${t}]`).hostname.slice(1,-1));let r=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(t);if(r){let n=Number.parseInt(r[1],16),o=Number.parseInt(r[2],16);return`${n>>8}.${n&255}.${o>>8}.${o&255}`}return t}function Je(e){let t=T(e);return(0,M.isIP)(t)===4?Ke(t):t==="::"||t==="::0"?"unspecified":t==="::1"?"loopback":t.startsWith("::ffff:")?Ke(t.slice(7)):/^f[cd]/.test(t)?"private":/^fe[89ab]/.test(t)?"link-local":"public"}function Ge(e){return e==="example"||e.endsWith(".example")||e==="test"||e.endsWith(".test")||e==="invalid"||e.endsWith(".invalid")}function pn(e){return e==="localhost"||e.endsWith(".localhost")}function Qe(e,t={}){let r;try{r=new URL(e)}catch{throw m("the URL is invalid")}if(r.username||r.password)throw m("embedded credentials are forbidden");if(r.hash||r.search)throw m("base URLs cannot contain a query or fragment");if(!r.hostname||r.hostname.includes("%"))throw m("the hostname is empty or ambiguous");if(Ze.has(r.hostname.toLowerCase()))throw m("cloud metadata destinations are forbidden");if(r.protocol!=="https:"&&r.protocol!=="http:")throw m(`scheme ${r.protocol} is unsupported`);let n=t.profile??"public-https";if(r.protocol==="http:"&&n!=="local-network")throw m("plain HTTP requires the explicit local-network profile");let o=r.hostname.replace(/^\[|\]$/g,""),i=(0,M.isIP)(o)?Je(o):null;if(i==="link-local"||i==="unspecified")throw m(`${i} destinations are forbidden`);if(n==="public-https"&&(i==="private"||i==="loopback"||pn(r.hostname)))throw m("private and loopback destinations require the local-network profile");if(n==="local-network"&&r.protocol==="http:"&&i==="public"&&!t.allowedHosts?.includes(r.hostname))throw m("local-network HTTP must resolve to loopback or a private address");return r}async function et(e,t={}){let r=e.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(Ze.has(r))throw m("cloud metadata destinations are forbidden");let n=new Set((t.allowedHosts??[]).map(s=>s.toLowerCase())),o=(0,M.isIP)(r)?[r]:Ge(r)?[]:t.resolveHostname?await t.resolveHostname(r):(await(0,Ye.lookup)(r,{all:!0,verbatim:!0})).map(s=>s.address);if(!o.length&&!Ge(r))throw m("DNS resolution returned no addresses");let i=t.profile??"public-https";for(let s of o){let a=Je(s);if(a==="link-local"||a==="unspecified")throw m(`DNS resolved to a forbidden ${a} address`);if(i==="public-https"&&a!=="public"&&!n.has(r))throw m(`DNS resolved public endpoint to ${a} address ${s}`);if(i==="local-network"&&e.protocol==="http:"&&a==="public"&&!n.has(r))throw m(`local-network HTTP resolved to public address ${s}`)}return o}var tt=require("node:http"),rt=require("node:https"),re=require("node:net"),nt=require("node:events");function ot(e,t,r){return{dispatch(n,o){let i,s=!1,a=u=>{s||(s=!0,i?.destroy(),o.onError(u))},c=t[0];if(!c||!(0,re.isIP)(c)||new URL(n.origin).origin!==e.origin)return queueMicrotask(()=>a(new Error("Provider connection has no authorized pinned address"))),!0;let l=n.headers??{},f=(e.protocol==="https:"?rt.request:tt.request)(new URL(n.path,e.origin),{method:n.method,headers:l,agent:!1,rejectUnauthorized:!0,lookup:(u,g,v)=>{let h={address:c,family:(0,re.isIP)(c)};typeof g=="object"&&g.all?v(null,[h]):v(null,c,h.family)}},u=>{i=u;let g=u.rawHeaders.map(h=>Buffer.from(h)),v=()=>u.resume();o.onHeaders(u.statusCode??500,g,v,u.statusMessage??"")===!1&&u.pause(),u.on("data",h=>{o.onData(h)||u.pause()}),u.on("end",()=>{s||(s=!0,o.onComplete(u.rawTrailers.map(h=>Buffer.from(h))))}),u.on("error",a),u.on("aborted",()=>a(new Error("Provider response was interrupted")))});return f.on("socket",u=>{u.once("connect",()=>{if(!u.remoteAddress||T(u.remoteAddress)!==T(c)){f.destroy(new Error("Provider socket did not connect to its authorized address"));return}e.protocol==="http:"&&r?.()}),e.protocol==="https:"&&u.once("secureConnect",()=>{u.authorized&&u.remoteAddress&&T(u.remoteAddress)===T(c)&&r?.()})}),f.on("error",a),o.onConnect(u=>f.destroy(u??new Error("Provider request aborted"))),(async()=>{try{let u=n.body;if(typeof u=="string"||u instanceof Uint8Array)f.end(u);else{if(u)for await(let g of u){if(f.destroyed)return;f.write(g)||await(0,nt.once)(f,"drain")}f.end()}}catch(u){f.destroy(u instanceof Error?u:new Error("Provider request body failed"))}})(),!0}}}async function mn(e,t,r={}){let n=new URL(e.toString()),o=new URL(n);o.search="",o.hash="",Qe(o.toString(),r.policy),t.signal?.throwIfAborted();let i=await it(et(o,r.policy),t.signal);if(!i.length)throw new Error("Pinned endpoint resolution returned no addresses.");if(r.authorizeAddress&&i.some(c=>r.authorizeAddress(T(c),new URL(n))!==!0))throw new Error("Pinned endpoint resolved outside the authorized address scope.");t.signal?.throwIfAborted();let s=fetch(n,{...t,redirect:"manual",credentials:"omit",dispatcher:ot(n,i)});s.then(c=>{t.signal?.aborted&&c.body?.cancel().catch(()=>{})},()=>{});let a=await it(s,t.signal);if(a.redirected)throw await a.body?.cancel(),new Error("Pinned endpoint transport followed a redirect without authorization.");return a}async function it(e,t){if(!t)return e;let r,n=new Promise((o,i)=>{r=()=>i(t.reason??new Error("Pinned endpoint read cancelled.")),t.addEventListener("abort",r,{once:!0}),t.aborted&&r()});try{return await Promise.race([e,n])}finally{t.removeEventListener("abort",r)}}0&&(module.exports={ApiTransientError,HOME_DIR,IS_LINUX,IS_MAC,IS_WINDOWS,LogLevel,OS_VERSION,PLATFORM,accountTextTokens,appendDurableLine,appendLine,benchmarkLeakError,buildToolResultBlock,buildToolResultText,calculateCost,clearFileCache,commandMentionsBenchmarkLeak,conservativeTokenAccountingAdapter,copyTextToClipboard,createSafeRegex,debug,decodeTextBuffer,deleteDir,deleteFile,detectLineEnding,detectPreferredLineEnding,detectTextEncoding,encodeTextBuffer,ensureDir,error,estimateTokens,estimateTokensForModel,existsSync,fetchPinnedEndpoint,filterBenchmarkLeakPaths,findSimilarFile,fitsInBudget,formatCost,getAgentHome,getBenchmarkReferenceOverwriteHint,getBoolean,getConfigDir,getFileCacheStats,getLogLevel,getNumber,getProjectConfigDir,getRetryErrorContext,getShellName,getString,getToolResultTransportContent,hasDir,hasDisallowedAsciiControlCharacter,hasFile,hasFrontmatter,hasMixedLineEndings,hasNonTextToolResultContent,hasTransientStatusMention,info,invalidateFileCache,isBenchmarkLeakPath,isBenchmarkMode,isGitRepo,isGitRepoAsync,isPathSafe,isRetryableError,listDirs,listFiles,normalizeLineEndings,normalizeXenoRequestContext,parseDocument,parseJsonLines,pathIdentityKey,readDerivedCached,readFileSafe,readIfExists,readTextCached,readTextFile,remainingBudget,renameReplacingWithRetry,resetFileCacheStats,safeJsonParse,safeJsonStringify,safeRegexTest,safeResolvePath,setLogLevel,stringifyDocument,toTransportAssistantBlocks,toolAssistantContentToText,toolResultContentToText,truncateToTokens,validateRegexPattern,validateRequired,warn,withRetry,writeAtomic,writeTextFile,xenoRequestContextHeaders});
|
|
22
|
+
`).trim()}function De(e){let t=e.trim();return t.length>0?[{type:"text",text:t}]:[]}function qr(e){return typeof e=="string"?e:Ne(e)}function Le(e){if(e.success)return e.output;let t=[`Error: ${e.error??"Tool execution failed"}`];return e.output.trim().length>0&&t.push(e.output),t.join(`
|
|
23
|
+
`)}function Hr(e){let t=e.assistant_content&&e.assistant_content.length>0?e.assistant_content:typeof e.content=="string"?De(e.content):e.content,r=e.assistant_only_content??[],n=Ur(e),o=[...t,...r,...n?[n]:[]];return o.length>0?o:e.content}function Ur(e){let t=e.operation;if(!t)return null;let r=e.evidence??t.evidence??[],n=r.filter(s=>s.status==="verified").length,o=r.filter(s=>s.status==="failed").length;return{type:"text",text:["[xeno_operation]",`operation_id: ${t.operationId}`,`state: ${t.state}`,`terminal: ${t.terminal?"yes":"no"}`,`completion_policy: ${t.completionPolicy}`,t.taskId?`task_id: ${t.taskId}`:null,t.completionReason?`completion_reason: ${t.completionReason}`:null,`evidence: ${n} verified, ${o} failed`,e.retryable===void 0?null:`retryable: ${e.retryable?"yes":"no"}`,"[/xeno_operation]"].filter(s=>!!s).join(`
|
|
24
|
+
`)}}function jr(e){return Array.isArray(e)&&e.some(t=>t.type!=="text")}function Vr(e){return typeof e=="string"?De(e):e}function Wr(e,t){return{type:"tool_result",tool_use_id:e,content:Le(t),...t.assistantContent&&t.assistantContent.length>0?{assistant_content:t.assistantContent}:{},...t.assistantOnlyContent&&t.assistantOnlyContent.length>0?{assistant_only_content:t.assistantOnlyContent}:{},is_error:!t.success,...t.operation?{operation:t.operation}:{},...t.evidence&&t.evidence.length>0?{evidence:t.evidence}:{},...t.webContext?{web_context:t.webContext}:{},...t.retryable!==void 0?{retryable:t.retryable}:{}}}function Kr(e,t={}){for(let r of e){let n=r.codePointAt(0);if(n===127)return!0;if(!(n>31)&&!(n===9&&t.allowTab===!0)&&!((n===10||n===13)&&t.allowLineBreaks===!0))return!0}return!1}var Fe=require("node:dns/promises"),M=require("node:net");var w="[redacted]";var Gr=[[/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?(?:-----END [A-Z ]*PRIVATE KEY-----|$)/g,"[redacted:private-key]"],[/((?:^|[\s{,;"'(\[])["']?(?:cookie|set-cookie)["']?\s*[:=]\s*["']?)(?!\[redacted)[^\s"',;]+(?:;\s*[^\s"',;=]+=[^\s"',;]*)*/gi,`$1${w}`],[/((?:^|[\s{,;"'(\[])["']?(?:authorization|proxy-authorization|x-api-key|x-goog-api-key|x-xeno-api-key|api[-_]?key|apikey|dpop)["']?\s*[:=]\s*["']?)(?:(?:Bearer|Basic|Token|DPoP)\s+)?(?!\[redacted)[^\s"',;]+/gi,`$1${w}`],[/\b(Bearer|Basic|Token|DPoP)\s+[A-Za-z0-9._~+/=-]{6,}/gi,`$1 ${w}`],[/\b(?:sk-(?:ant-|proj-)?[A-Za-z0-9_-]{16,}|xeno-[A-Za-z0-9]{24,}|xrun_[A-Za-z0-9_-]{8,}|AIza[0-9A-Za-z_-]{30,}|gh[pousr]_[A-Za-z0-9_]{20,}|github_pat_[A-Za-z0-9_]{20,}|npm_[A-Za-z0-9]{30,}|xox[baprs]-[A-Za-z0-9-]{16,}|AKIA[0-9A-Z]{16})\b/g,w],[/\beyJ[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}/g,w],[/([?&#;](?:access_token|refresh_token|id_token|token|key|api[_-]?key|secret|client_secret|password|signature|sig)=)[^&#\s"'<>]+/gi,`$1${w}`],[/(\b[a-z][a-z0-9+.-]*:\/\/)[^/\s:@"']+:[^/\s@"']+@/gi,`$1${w}@`]];function Be(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function S(e,t=[]){if(!e)return e;let r=e,n=[...new Set([...t].filter(o=>typeof o=="string"&&o.length>=12))].sort((o,s)=>s.length-o.length);for(let o of n){r=r.replace(new RegExp(`(?<![A-Za-z0-9_-])${Be(o)}(?![A-Za-z0-9_-])`,"g"),w);let s=encodeURIComponent(o);s!==o&&(r=r.replace(new RegExp(`(?<![A-Za-z0-9_-])${Be(s)}(?![A-Za-z0-9_-])`,"g"),w))}for(let[o,s]of Gr)o.lastIndex=0,r=r.replace(o,s);return r}function Z(e,t,r){try{Object.defineProperty(e,t,{value:r,writable:!0,configurable:!0,enumerable:!1})}catch{}}function J(e,t=[],r=0){if(!(e instanceof Error)||r>6)return e;let n=[...t],o=S(e.message,n);if(o!==e.message&&Z(e,"message",o),typeof e.stack=="string"){let i=S(e.stack,n);i!==e.stack&&Z(e,"stack",i)}let s=e.cause;if(s instanceof Error)J(s,n,r+1);else if(s!=null){let i;try{i=typeof s=="string"?s:JSON.stringify(s)??String(s)}catch{i=String(s)}let a=S(i,n);a!==i&&Z(e,"cause",a)}for(let i of Object.keys(e)){let a=e[i];if(typeof a=="string"){let c=S(a,n);if(c!==a)try{e[i]=c}catch{}}}return e}var q=class extends Error{category;code;retryable;providerId;statusCode;retryAfterMs;requestId;providerCode;remedy;constructor(t,r){super(S(t),r.cause!==void 0?{cause:r.cause}:void 0),this.name="ProviderError",this.category=r.category,this.code=r.code,this.retryable=r.retryable??!1,this.providerId=r.providerId,this.statusCode=r.statusCode,this.retryAfterMs=r.retryAfterMs,this.requestId=r.requestId,r.providerCode!==void 0&&(this.providerCode=r.providerCode),r.remedy!==void 0&&(this.remedy=r.remedy),J(this)}};var qe=new Set(["metadata.google.internal","metadata.azure.internal","instance-data.ec2.internal"]);function m(e){return new q(`Provider endpoint rejected: ${e}`,{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"})}function Yr(e){let t=e.split(".");if(t.length!==4)return null;let r=t.map(n=>Number(n));return r.every(n=>Number.isInteger(n)&&n>=0&&n<=255)?r:null}function Xe(e){let t=Yr(e);if(!t)return"public";let[r,n]=t;return r===0?"unspecified":r===127?"loopback":r===169&&n===254?"link-local":r===10||r===172&&n>=16&&n<=31||r===192&&n===168?"private":"public"}function T(e){let t=e.toLowerCase().replace(/^\[|\]$/g,"").split("%")[0];(0,M.isIP)(t)===6&&(t=new URL(`http://[${t}]`).hostname.slice(1,-1));let r=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(t);if(r){let n=Number.parseInt(r[1],16),o=Number.parseInt(r[2],16);return`${n>>8}.${n&255}.${o>>8}.${o&255}`}return t}function He(e){let t=T(e);return(0,M.isIP)(t)===4?Xe(t):t==="::"||t==="::0"?"unspecified":t==="::1"?"loopback":t.startsWith("::ffff:")?Xe(t.slice(7)):/^f[cd]/.test(t)?"private":/^fe[89ab]/.test(t)?"link-local":"public"}function ze(e){return e==="example"||e.endsWith(".example")||e==="test"||e.endsWith(".test")||e==="invalid"||e.endsWith(".invalid")}function Zr(e){return e==="localhost"||e.endsWith(".localhost")}function Ue(e,t={}){let r;try{r=new URL(e)}catch{throw m("the URL is invalid")}if(r.username||r.password)throw m("embedded credentials are forbidden");if(r.hash||r.search)throw m("base URLs cannot contain a query or fragment");if(!r.hostname||r.hostname.includes("%"))throw m("the hostname is empty or ambiguous");if(qe.has(r.hostname.toLowerCase()))throw m("cloud metadata destinations are forbidden");if(r.protocol!=="https:"&&r.protocol!=="http:")throw m(`scheme ${r.protocol} is unsupported`);let n=t.profile??"public-https";if(r.protocol==="http:"&&n!=="local-network")throw m("plain HTTP requires the explicit local-network profile");let o=r.hostname.replace(/^\[|\]$/g,""),s=(0,M.isIP)(o)?He(o):null;if(s==="link-local"||s==="unspecified")throw m(`${s} destinations are forbidden`);if(n==="public-https"&&(s==="private"||s==="loopback"||Zr(r.hostname)))throw m("private and loopback destinations require the local-network profile");if(n==="local-network"&&r.protocol==="http:"&&s==="public"&&!t.allowedHosts?.includes(r.hostname))throw m("local-network HTTP must resolve to loopback or a private address");return r}async function je(e,t={}){let r=e.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(qe.has(r))throw m("cloud metadata destinations are forbidden");let n=new Set((t.allowedHosts??[]).map(i=>i.toLowerCase())),o=(0,M.isIP)(r)?[r]:ze(r)?[]:t.resolveHostname?await t.resolveHostname(r):(await(0,Fe.lookup)(r,{all:!0,verbatim:!0})).map(i=>i.address);if(!o.length&&!ze(r))throw m("DNS resolution returned no addresses");let s=t.profile??"public-https";for(let i of o){let a=He(i);if(a==="link-local"||a==="unspecified")throw m(`DNS resolved to a forbidden ${a} address`);if(s==="public-https"&&a!=="public"&&!n.has(r))throw m(`DNS resolved public endpoint to ${a} address ${i}`);if(s==="local-network"&&e.protocol==="http:"&&a==="public"&&!n.has(r))throw m(`local-network HTTP resolved to public address ${i}`)}return o}var Ve=require("node:http"),We=require("node:https"),Q=require("node:net"),Ke=require("node:events");function Ge(e,t,r){return{dispatch(n,o){let s,i=!1,a=u=>{i||(i=!0,s?.destroy(),o.onError(u))},c=t[0];if(!c||!(0,Q.isIP)(c)||new URL(n.origin).origin!==e.origin)return queueMicrotask(()=>a(new Error("Provider connection has no authorized pinned address"))),!0;let l=n.headers??{},f=(e.protocol==="https:"?We.request:Ve.request)(new URL(n.path,e.origin),{method:n.method,headers:l,agent:!1,rejectUnauthorized:!0,lookup:(u,g,v)=>{let h={address:c,family:(0,Q.isIP)(c)};typeof g=="object"&&g.all?v(null,[h]):v(null,c,h.family)}},u=>{s=u;let g=u.rawHeaders.map(h=>Buffer.from(h)),v=()=>u.resume();o.onHeaders(u.statusCode??500,g,v,u.statusMessage??"")===!1&&u.pause(),u.on("data",h=>{o.onData(h)||u.pause()}),u.on("end",()=>{i||(i=!0,o.onComplete(u.rawTrailers.map(h=>Buffer.from(h))))}),u.on("error",a),u.on("aborted",()=>a(new Error("Provider response was interrupted")))});return f.on("socket",u=>{u.once("connect",()=>{if(!u.remoteAddress||T(u.remoteAddress)!==T(c)){f.destroy(new Error("Provider socket did not connect to its authorized address"));return}e.protocol==="http:"&&r?.()}),e.protocol==="https:"&&u.once("secureConnect",()=>{u.authorized&&u.remoteAddress&&T(u.remoteAddress)===T(c)&&r?.()})}),f.on("error",a),o.onConnect(u=>f.destroy(u??new Error("Provider request aborted"))),(async()=>{try{let u=n.body;if(typeof u=="string"||u instanceof Uint8Array)f.end(u);else{if(u)for await(let g of u){if(f.destroyed)return;f.write(g)||await(0,Ke.once)(f,"drain")}f.end()}}catch(u){f.destroy(u instanceof Error?u:new Error("Provider request body failed"))}})(),!0}}}async function Jr(e,t,r={}){let n=new URL(e.toString()),o=new URL(n);o.search="",o.hash="",Ue(o.toString(),r.policy),t.signal?.throwIfAborted();let s=await Ye(je(o,r.policy),t.signal);if(!s.length)throw new Error("Pinned endpoint resolution returned no addresses.");if(r.authorizeAddress&&s.some(c=>r.authorizeAddress(T(c),new URL(n))!==!0))throw new Error("Pinned endpoint resolved outside the authorized address scope.");t.signal?.throwIfAborted();let i=fetch(n,{...t,redirect:"manual",credentials:"omit",dispatcher:Ge(n,s)});i.then(c=>{t.signal?.aborted&&c.body?.cancel().catch(()=>{})},()=>{});let a=await Ye(i,t.signal);if(a.redirected)throw await a.body?.cancel(),new Error("Pinned endpoint transport followed a redirect without authorization.");return a}async function Ye(e,t){if(!t)return e;let r,n=new Promise((o,s)=>{r=()=>s(t.reason??new Error("Pinned endpoint read cancelled.")),t.addEventListener("abort",r,{once:!0}),t.aborted&&r()});try{return await Promise.race([e,n])}finally{t.removeEventListener("abort",r)}}0&&(module.exports={ApiTransientError,HOME_DIR,IS_LINUX,IS_MAC,IS_WINDOWS,LogLevel,OS_VERSION,PLATFORM,accountTextTokens,appendDurableLine,appendLine,benchmarkLeakError,buildToolResultBlock,buildToolResultText,calculateCost,clearFileCache,commandMentionsBenchmarkLeak,conservativeTokenAccountingAdapter,copyTextToClipboard,createSafeRegex,debug,decodeTextBuffer,deleteDir,deleteFile,detectLineEnding,detectPreferredLineEnding,detectTextEncoding,encodeTextBuffer,ensureDir,error,estimateTokens,estimateTokensForModel,existsSync,fetchPinnedEndpoint,filterBenchmarkLeakPaths,findSimilarFile,fitsInBudget,formatCost,getAgentHome,getBenchmarkReferenceOverwriteHint,getBoolean,getConfigDir,getFileCacheStats,getLogLevel,getNumber,getProjectConfigDir,getRetryErrorContext,getShellName,getString,getToolResultTransportContent,hasDir,hasDisallowedAsciiControlCharacter,hasFile,hasFrontmatter,hasMixedLineEndings,hasNonTextToolResultContent,hasTransientStatusMention,info,invalidateFileCache,isBenchmarkLeakPath,isBenchmarkMode,isGitRepo,isGitRepoAsync,isPathSafe,isRetryableError,listDirs,listFiles,normalizeLineEndings,normalizeXenoRequestContext,parseDocument,parseJsonLines,pathIdentityKey,readDerivedCached,readFileSafe,readIfExists,readTextCached,readTextFile,remainingBudget,renameReplacingWithRetry,resetFileCacheStats,safeJsonParse,safeJsonStringify,safeRegexTest,safeResolvePath,setLogLevel,stringifyDocument,toTransportAssistantBlocks,toolAssistantContentToText,toolResultContentToText,truncateToTokens,validateRegexPattern,validateRequired,warn,withRetry,writeAtomic,writeTextFile,xenoRequestContextHeaders});
|
package/dist/utils/index.d.cts
CHANGED
|
@@ -173,11 +173,11 @@ declare function calculateCost(model: string, inputTokens: number, outputTokens:
|
|
|
173
173
|
declare function formatCost(cost: number): string;
|
|
174
174
|
declare function copyTextToClipboard(text: string): void;
|
|
175
175
|
declare function isBenchmarkMode(): boolean;
|
|
176
|
-
declare function isBenchmarkLeakPath(
|
|
176
|
+
declare function isBenchmarkLeakPath(_filePath: string): boolean;
|
|
177
177
|
declare function filterBenchmarkLeakPaths(paths: string[]): string[];
|
|
178
178
|
declare function benchmarkLeakError(target: string): string;
|
|
179
|
-
declare function commandMentionsBenchmarkLeak(
|
|
180
|
-
declare function getBenchmarkReferenceOverwriteHint(
|
|
179
|
+
declare function commandMentionsBenchmarkLeak(_command: string): boolean;
|
|
180
|
+
declare function getBenchmarkReferenceOverwriteHint(_command: string): string | null;
|
|
181
181
|
declare const WEB_CONTEXT_TOOL_RESULT_SCHEMA: "xeno.web-context.tool-result.v1";
|
|
182
182
|
interface WebContextEvidenceProjection {
|
|
183
183
|
evidenceId: string;
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -173,11 +173,11 @@ declare function calculateCost(model: string, inputTokens: number, outputTokens:
|
|
|
173
173
|
declare function formatCost(cost: number): string;
|
|
174
174
|
declare function copyTextToClipboard(text: string): void;
|
|
175
175
|
declare function isBenchmarkMode(): boolean;
|
|
176
|
-
declare function isBenchmarkLeakPath(
|
|
176
|
+
declare function isBenchmarkLeakPath(_filePath: string): boolean;
|
|
177
177
|
declare function filterBenchmarkLeakPaths(paths: string[]): string[];
|
|
178
178
|
declare function benchmarkLeakError(target: string): string;
|
|
179
|
-
declare function commandMentionsBenchmarkLeak(
|
|
180
|
-
declare function getBenchmarkReferenceOverwriteHint(
|
|
179
|
+
declare function commandMentionsBenchmarkLeak(_command: string): boolean;
|
|
180
|
+
declare function getBenchmarkReferenceOverwriteHint(_command: string): string | null;
|
|
181
181
|
declare const WEB_CONTEXT_TOOL_RESULT_SCHEMA: "xeno.web-context.tool-result.v1";
|
|
182
182
|
interface WebContextEvidenceProjection {
|
|
183
183
|
evidenceId: string;
|