@xeno-corporation/xeno-agent-sdk 0.6.6 → 0.6.7

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.
Files changed (2) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ var Gh=Object.defineProperty;var Xh=(n=>typeof require<"u"?require:typeof Proxy<
8
8
  `,"utf-8")}function Ee(n,e){let t=ai(e(ue(n)));return li(n,t),t}function Q0(n=process.cwd()){return ue(n).trustedWorkspace===!0}function Z0(n=process.cwd(),e=!0){li(n,{trustedWorkspace:e})}function eI(n=process.cwd()){return ue(n).hasCompletedProjectOnboarding===!0}function tI(n=process.cwd(),e=!0){li(n,{hasCompletedProjectOnboarding:e?!0:void 0})}function Uu(n,e){return Ee(n,t=>({...t,allowedTools:[...t.allowedTools??[],e]}))}function nI(n){return[...ue(n).allowedTools??[]]}function rI(n,e){return Ee(n,t=>{let r=(t.allowedTools??[]).filter(s=>s!==e);return{...t,allowedTools:r.length>0?r:void 0}})}function sI(n){return Ee(n,e=>({...e,allowedTools:void 0}))}function qu(n,e){return Ee(n,t=>({...t,allowedDirectories:[...t.allowedDirectories??[],Fu(e)]}))}function ui(n,e){return ue(n).mcpApprovals?.[e]}function di(n,e,t){return Ee(n,r=>({...r,mcpApprovals:{...r.mcpApprovals??{},[e]:t}}))}function zu(n,e){return Ee(n,t=>{let r={...t.mcpApprovals??{}};return delete r[e],{...t,mcpApprovals:Object.keys(r).length>0?r:void 0}})}function Hu(n,e){let t={...ue(n).mcpApprovals??{}};return e?Object.fromEntries(Object.entries(t).filter(([r])=>r.startsWith(`${e}:`))):t}function Wu(n,e){return Ee(n,t=>{let r=e?Object.fromEntries(Object.entries(t.mcpApprovals??{}).filter(([s])=>!s.startsWith(`${e}:`))):{};return{...t,mcpApprovals:Object.keys(r).length>0?r:void 0}})}function oI(n=process.cwd()){return ue(n).lastSessionSummary}function Gu(n,e){return Ee(n,t=>({...t,lastSessionSummary:e}))}function iI(n){return Ee(n,e=>({...e,lastSessionSummary:void 0}))}function _n(){let n=Fe();En(n)||Ou(n,{recursive:!0})}function Xu(){let n=Rb(),e=wb();return e?Ju({...n,...pi(e)}):n}function Rb(){return pi(Cn(Fe(),ju))}function pi(n){if(!En(n))return{};let e=$u(n,"utf-8"),t=O(e,{});return Ju(t)}function Ju(n){if((n.configVersion??1)>=Du)return n;let t={...n};return t.configVersion=Du,t}function aI(n){_n();let e=Cn(Fe(),ju),r={...pi(e),...n};for(let s of Object.keys(r))r[s]===void 0&&delete r[s];if(Nu(e,JSON.stringify(r,null,2)+`
9
9
  `,"utf-8"),n.apiKey!==void 0&&n.apiKey!==null&&(console.warn(`API key saved in plaintext. Ensure ${e} has restricted permissions.`),process.platform!=="win32"))try{let o=fb(e).mode&511;o!==384&&console.warn(`Config file has permissions ${o.toString(8)}. Recommended: 600 (chmod 600 ${e})`)}catch{}}var Du,hb,ju,Bu,yb,bb,Ue=x(()=>{"use strict";te();An();Du=2,hb=3,ju="config.json",Bu="config.json",yb=[".xeno",".xeno-agent",".xeno-code"],bb=[".git",".xeno",".xeno-agent",".xeno-code",".xenocode",".xenocode.json"]});async function Ur(n,e={},t=5e3){let r=new AbortController,s=setTimeout(()=>r.abort(),t);try{return await fetch(n,{...e,signal:r.signal})}finally{clearTimeout(s)}}async function Lb(n){try{let e=await fetch(`${Ce}/v1/models`,{headers:{Authorization:`Bearer ${n}`,"User-Agent":"XenoCode/0.1.0"}});if(!e.ok)return[];let t=await e.json();return!t.data||!Array.isArray(t.data)?[]:t.data.map(r=>({id:r.id,name:r.id,owned_by:r.owned_by??"unknown",source:"xeno"}))}catch{return[]}}async function Ob(n){let e=n||qe;try{let t=await Ur(`${e}/v1/models`,{},2e3);if(!t.ok)return[];let r=await t.json();return!r.data||!Array.isArray(r.data)?[]:r.data.map(s=>({id:`local:${s.id}`,name:s.id,owned_by:"xeno-rt",source:"local"}))}catch{return[]}}async function yi(n){let e=Date.now();if(In&&!n?.forceRefresh&&e-Yu<Db)return In;let t=n?.apiKey||process.env.XENO_API_KEY||"",[r,s]=await Promise.all([Lb(t),Ob(n?.localRuntimeUrl)]);return In=[...r,...s],Yu=e,r.length===0&&(In=[...Ib.map(i=>({id:i,name:i,owned_by:"fallback",source:"xeno"})),...s]),In}function qr(n){return n.startsWith("local:")}function Dn(n){return n.startsWith("local:")?n.slice(6):n}async function mI(n,e){let t=e?.localRuntimeUrl||process.env.XENO_RT_BASE_URL||qe,r=e?.timeoutMs??15e3,s=Dn(n);try{let o=await Ur(`${t}/v1/models`,{},Math.min(r,5e3));if(!o.ok)return{ok:!1,model:s,baseUrl:t,error:`xeno-rt is not reachable at ${t} (HTTP ${o.status})`};let a=((await o.json()).data??[]).map(l=>l.id??"").filter(l=>l.length>0);if(!new Set(a.map(l=>l.toLowerCase())).has(s.toLowerCase())){let l=a.length>0?` Available: ${a.slice(0,5).join(", ")}${a.length>5?", ...":""}`:"";return{ok:!1,model:s,baseUrl:t,error:`xeno-rt model not found: ${s}.${l}`}}}catch(o){let i=o instanceof Error?o.message:String(o);return{ok:!1,model:s,baseUrl:t,error:`Failed to reach xeno-rt at ${t}: ${i}`}}try{let o=await Ur(`${t}/v1/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:s,messages:[{role:"user",content:"ping"}],max_tokens:1,stream:!1})},r);if(o.ok)return{ok:!0,model:s,baseUrl:t,endpoint:"openai"};if(o.status!==404){let i=(await o.text().catch(()=>"")).trim();return{ok:!1,model:s,baseUrl:t,error:`xeno-rt chat check failed (HTTP ${o.status}${i?`: ${i}`:""})`}}}catch(o){let i=o instanceof Error?o.message:String(o);return{ok:!1,model:s,baseUrl:t,error:`xeno-rt OpenAI chat endpoint check failed: ${i}`}}try{let o=await Ur(`${t}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:s,messages:[{role:"user",content:"ping"}],stream:!1,options:{num_predict:1}})},r);if(!o.ok){let i=(await o.text().catch(()=>"")).trim();return{ok:!1,model:s,baseUrl:t,error:`Local native chat check failed (HTTP ${o.status}${i?`: ${i}`:""})`}}return{ok:!0,model:s,baseUrl:t,endpoint:"native",warning:"OpenAI-compatible endpoint not found; native local API fallback will be used."}}catch(o){let i=o instanceof Error?o.message:String(o);return{ok:!1,model:s,baseUrl:t,error:`Local native chat endpoint check failed: ${i}`}}}async function gI(n,e,t=!1){return qr(n)?!0:(await yi({apiKey:e,forceRefresh:t})).some(s=>s.id===n)}function Qu(n){if(n.source==="local")return!0;let e=n.id.toLowerCase();return $b.some(t=>e.startsWith(t))}async function fI(n,e=!1){return(await yi({apiKey:n,forceRefresh:e})).filter(Qu)}async function hI(n,e=!1,t=!1){let r=await yi({apiKey:n,forceRefresh:t}),s=e?r:r.filter(Qu),o=s.filter(l=>l.source==="xeno"&&l.owned_by==="fallback"),i=s.filter(l=>l.source==="xeno"&&l.owned_by!=="fallback"),a=s.filter(l=>l.source==="local"),c=[];if(i.length>0){c.push(" Xeno API:");for(let l of i){let u=l.id===qt?" (default)":"";c.push(` ${l.id}${u}`)}}if(o.length>0){c.push(" Fallback models (Xeno API unavailable):");for(let l of o){let u=l.id===qt?" (default)":"";c.push(` ${l.id}${u}`)}}if(a.length>0){c.push(" xeno-rt (local):");for(let l of a)c.push(` ${l.id}`)}if(s.length===0&&c.push(" No models available"),!e){let l=r.length-s.length;l>0&&c.push(`
10
10
  (${l} image/video models hidden. Use /model --all to show all)`)}return c.join(`
11
- `)}var be,Ce,qe,qt,Ib,In,Yu,Db,$b,ze=x(()=>{"use strict";be="",Ce="https://api.xenostudio.ai",qe="http://localhost:3338",qt="claude-sonnet-4-6",Ib=["claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001","gpt-5.4"],In=null,Yu=0,Db=300*1e3;$b=["claude","gemini","gpt-4","gpt-5","gpt-oss","kimi","llama","mistral","qwen","deepseek","command","palm","codestral","phi"]});var rd=x(()=>{"use strict";Nt()});var sd,od,vi=x(()=>{"use strict";sd={global:500,project:1e3,role:500,session:300,total:2e3},od={global:"MEMORY.md",project:"MEMORY.md",role:"MEMORY.md",session:"memory.md"}});function N(n){return n?Math.ceil(n.length/4):0}function _e(n,e){if(!n||e<=0)return"";let t=e*4;if(n.length<=t)return n;let r=n.slice(0,t),s=r.lastIndexOf(" ");return s>t*.8&&(r=r.slice(0,s)),r+"..."}var He=x(()=>{"use strict"});import*as we from"path";function sw(n,e){let t=we.resolve(n),r=we.resolve(n,e);return r===t?!0:t===we.parse(t).root?r.startsWith(t):r.startsWith(t+we.sep)}function A(n,e){if(we.isAbsolute(e))return we.resolve(e);if(!sw(n,e))throw new Error(`PathSecurity: Path traversal attempt detected: ${e}`);return we.resolve(n,e)}var G=x(()=>{"use strict"});import*as gt from"path";import*as Si from"os";function Ht(n=Si.homedir()){return gt.join(n,".xeno-agent",ow)}function Nn(n){let e=gt.normalize(n).replace(/[\\/]+$/,""),t=e.length>0?e:gt.parse(gt.normalize(n)).root;return process.platform==="win32"?t.toLowerCase():t}async function Wt(n=Si.homedir()){let e={version:ki,entries:{}},t=Ht(n);if(!Ir(t))return e;let r=await B(t);if(!r)return e;let s=O(r,null);if(!s||typeof s!="object")return e;let o=s;if(o.version!==ki||!o.entries||typeof o.entries!="object")return e;let i={};for(let[a,c]of Object.entries(o.entries)){if(!c||typeof c!="object")continue;let l=c;typeof l.sessionId!="string"||l.sessionId.length===0||typeof l.endedAt=="string"&&(i[a]={sessionId:l.sessionId,endedAt:l.endedAt,role:typeof l.role=="string"?l.role:void 0})}return{version:ki,entries:i}}async function Wr(n,e={}){let t=await Wt(e.homeDir),r=Nn(n),s=t.entries[r];if(s&&!(e.role&&s.role&&s.role!==e.role))return s}async function ft(n,e={}){let t=await Wt(e.homeDir),r=Nn(n.cwd);t.entries[r]={sessionId:n.sessionId,role:n.role,endedAt:n.endedAt??new Date().toISOString()};let s=Ht(e.homeDir);await q(s,JSON.stringify(t,null,2)+`
11
+ `)}var be,Ce,qe,qt,Ib,In,Yu,Db,$b,ze=x(()=>{"use strict";be="",Ce="https://api.xenostudio.ai",qe="http://localhost:3338",qt="gpt-5.5",Ib=["gpt-5.5","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001","gpt-5.4"],In=null,Yu=0,Db=300*1e3;$b=["claude","gemini","gpt-4","gpt-5","gpt-oss","kimi","llama","mistral","qwen","deepseek","command","palm","codestral","phi"]});var rd=x(()=>{"use strict";Nt()});var sd,od,vi=x(()=>{"use strict";sd={global:500,project:1e3,role:500,session:300,total:2e3},od={global:"MEMORY.md",project:"MEMORY.md",role:"MEMORY.md",session:"memory.md"}});function N(n){return n?Math.ceil(n.length/4):0}function _e(n,e){if(!n||e<=0)return"";let t=e*4;if(n.length<=t)return n;let r=n.slice(0,t),s=r.lastIndexOf(" ");return s>t*.8&&(r=r.slice(0,s)),r+"..."}var He=x(()=>{"use strict"});import*as we from"path";function sw(n,e){let t=we.resolve(n),r=we.resolve(n,e);return r===t?!0:t===we.parse(t).root?r.startsWith(t):r.startsWith(t+we.sep)}function A(n,e){if(we.isAbsolute(e))return we.resolve(e);if(!sw(n,e))throw new Error(`PathSecurity: Path traversal attempt detected: ${e}`);return we.resolve(n,e)}var G=x(()=>{"use strict"});import*as gt from"path";import*as Si from"os";function Ht(n=Si.homedir()){return gt.join(n,".xeno-agent",ow)}function Nn(n){let e=gt.normalize(n).replace(/[\\/]+$/,""),t=e.length>0?e:gt.parse(gt.normalize(n)).root;return process.platform==="win32"?t.toLowerCase():t}async function Wt(n=Si.homedir()){let e={version:ki,entries:{}},t=Ht(n);if(!Ir(t))return e;let r=await B(t);if(!r)return e;let s=O(r,null);if(!s||typeof s!="object")return e;let o=s;if(o.version!==ki||!o.entries||typeof o.entries!="object")return e;let i={};for(let[a,c]of Object.entries(o.entries)){if(!c||typeof c!="object")continue;let l=c;typeof l.sessionId!="string"||l.sessionId.length===0||typeof l.endedAt=="string"&&(i[a]={sessionId:l.sessionId,endedAt:l.endedAt,role:typeof l.role=="string"?l.role:void 0})}return{version:ki,entries:i}}async function Wr(n,e={}){let t=await Wt(e.homeDir),r=Nn(n),s=t.entries[r];if(s&&!(e.role&&s.role&&s.role!==e.role))return s}async function ft(n,e={}){let t=await Wt(e.homeDir),r=Nn(n.cwd);t.entries[r]={sessionId:n.sessionId,role:n.role,endedAt:n.endedAt??new Date().toISOString()};let s=Ht(e.homeDir);await q(s,JSON.stringify(t,null,2)+`
12
12
  `)}async function id(n,e={}){let t=await Wt(e.homeDir),r=Nn(n);if(!(r in t.entries))return;delete t.entries[r];let s=Ht(e.homeDir);await q(s,JSON.stringify(t,null,2)+`
13
13
  `)}async function jn(n,e={}){let t=await Wt(e.homeDir),r=!1;for(let[o,i]of Object.entries(t.entries))i.sessionId===n&&(delete t.entries[o],r=!0);if(!r)return;let s=Ht(e.homeDir);await q(s,JSON.stringify(t,null,2)+`
14
14
  `)}var ki,ow,Ti=x(()=>{"use strict";oe();te();ki=1,ow="recent.json"});import*as xe from"path";import*as ad from"os";var ae,Gr=x(()=>{"use strict";oe();te();Nt();G();Ti();ae=class{static getSessionsDir(){let e=process.env.XENO_AGENT_HOME?.trim()||xe.join(ad.homedir(),".xeno-agent");return xe.join(e,"sessions")}static async list(e){let t=this.getSessionsDir(),r=typeof e?.limit=="number"&&Number.isFinite(e.limit)?Math.max(0,Math.floor(e.limit)):void 0;if(r===0)return[];let s=e?.workingDirectory?this.normalizeWorkingDirectory(e.workingDirectory):void 0;if(!Ir(t))return[];let o=await Dr(t),i=[];for(let a of o){let c=await this.loadMeta(a);c&&(e?.status&&!e.status.includes(c.status)||e?.role&&c.role!==e.role||s&&this.normalizeWorkingDirectory(c.workingDirectory)!==s||i.push(c))}return i.sort((a,c)=>new Date(c.lastActivity).getTime()-new Date(a.lastActivity).getTime()),r!==void 0?i.slice(0,r):i}static async find(e){let t=this.getSessionsDir(),r=A(t,e);return await this.loadMeta(r)}static async findMostRecent(e){let t=typeof e=="string"?{role:e}:e??{};if(t.workingDirectory){let o=await Wr(t.workingDirectory,{...t.role!==void 0?{role:t.role}:{}});if(o){let i=await this.find(o.sessionId);if(i){if(!(t.role&&i.role!==t.role)){if(this.normalizeWorkingDirectory(i.workingDirectory)===this.normalizeWorkingDirectory(t.workingDirectory))return i}}else await jn(o.sessionId)}}let s=(await this.list({...t.role!==void 0?{role:t.role}:{},...t.workingDirectory!==void 0?{workingDirectory:t.workingDirectory}:{},limit:1}))[0]??null;if(s&&t.workingDirectory)try{await ft({cwd:s.workingDirectory,sessionId:s.id,role:s.role,endedAt:s.lastActivity})}catch{}return s}static async delete(e){let t=this.getSessionsDir(),r=A(t,e);await lu(r),await jn(e)}static async purgeWorkingDirectory(e,t){let r=new Set(t?.excludeSessionIds??[]),s=await this.list({workingDirectory:e}),o=[],i=[];for(let a of s){if(r.has(a.id)){i.push(a.id);continue}await this.delete(a.id),await this.deleteWorkspaceMirror(e,a.id),o.push(a.id)}return{deletedIds:o,skippedIds:i}}static async updateMeta(e,t){let r=this.getSessionsDir(),s=A(r,e),o=xe.join(s,"meta.json"),i=await B(o);if(!i)throw new Error(`Session not found: ${e}`);let a=O(i,null);if(!a)throw new Error(`Invalid session metadata: ${e}`);let c={...a,...t,updatedAt:new Date().toISOString()};return await q(o,JSON.stringify(c,null,2)),c}static async loadMeta(e){let t=xe.join(e,"meta.json"),r=await B(t);if(!r)return null;let s=O(r,null);if(!s)return null;let o=s.formatVersion;return{...s,formatVersion:typeof o=="number"&&Number.isFinite(o)&&o>0?o:1}}static getSessionDir(e){return A(this.getSessionsDir(),e)}static normalizeWorkingDirectory(e){let t=xe.normalize(e).replace(/[\\/]+$/,""),r=t.length>0?t:xe.parse(xe.normalize(e)).root;return process.platform==="win32"?r.toLowerCase():r}static async deleteWorkspaceMirror(e,t){let r=xe.join(e,".xeno","sessions",`${t}.md`);await Re(r)}}});function iw(n){Gt=n}function aw(){return Gt}function We(){return new Date().toISOString()}function ld(n,e){Gt<=0&&(e!==void 0?process.stderr.write(`[${We()}] DEBUG: ${n} ${Xr(e)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xeno-corporation/xeno-agent-sdk",
3
- "version": "0.6.6",
3
+ "version": "0.6.7",
4
4
  "description": "XENO Agent SDK built from the same engine as XENO CODE",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",