@xenosystem/agent-sdk 0.10.38 → 0.10.39
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 +9 -9
- package/dist/artifacts/index.js +9 -9
- package/dist/artifacts/metafile-cjs.json +1 -1
- package/dist/artifacts/metafile-esm.json +1 -1
- package/dist/automation/index.cjs +8 -8
- package/dist/automation/index.d.cts +10 -0
- package/dist/automation/index.d.ts +10 -0
- package/dist/automation/index.js +9 -9
- package/dist/automation/metafile-cjs.json +1 -1
- package/dist/automation/metafile-esm.json +1 -1
- package/dist/control-plane/index.cjs +1 -1
- package/dist/control-plane/index.js +1 -1
- package/dist/electron/index.cjs +221 -200
- package/dist/electron/index.d.cts +91 -1
- package/dist/electron/index.d.ts +91 -1
- package/dist/electron/index.js +221 -200
- package/dist/electron/metafile-cjs.json +1 -1
- package/dist/electron/metafile-esm.json +1 -1
- package/dist/index.cjs +396 -371
- package/dist/index.d.cts +134 -4
- package/dist/index.d.ts +134 -4
- package/dist/index.js +397 -372
- package/dist/intelligence/index.cjs +9 -9
- package/dist/intelligence/index.js +9 -9
- package/dist/intelligence/metafile-cjs.json +1 -1
- package/dist/intelligence/metafile-esm.json +1 -1
- package/dist/mcp/index.d.cts +10 -0
- package/dist/mcp/index.d.ts +10 -0
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/providers/index.cjs +9 -9
- package/dist/providers/index.js +9 -9
- package/dist/providers/metafile-cjs.json +1 -1
- package/dist/providers/metafile-esm.json +1 -1
- package/dist/recipes/index.cjs +2 -2
- package/dist/recipes/index.js +2 -2
- package/dist/recipes/metafile-cjs.json +1 -1
- package/dist/recipes/metafile-esm.json +1 -1
- package/dist/research/index.cjs +3 -3
- package/dist/research/index.js +3 -3
- package/dist/research/metafile-cjs.json +1 -1
- package/dist/research/metafile-esm.json +1 -1
- package/dist/session/index.cjs +25 -25
- package/dist/session/index.js +25 -25
- package/dist/session/metafile-cjs.json +1 -1
- package/dist/session/metafile-esm.json +1 -1
- package/dist/sharing/index.cjs +4 -4
- package/dist/sharing/index.js +4 -4
- package/dist/sharing/metafile-cjs.json +1 -1
- package/dist/sharing/metafile-esm.json +1 -1
- package/dist/utils/index.cjs +23 -23
- package/dist/utils/index.d.cts +15 -1
- package/dist/utils/index.d.ts +15 -1
- package/dist/utils/index.js +23 -23
- package/dist/utils/metafile-cjs.json +1 -1
- package/dist/utils/metafile-esm.json +1 -1
- package/package.json +3 -3
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var ae=Object.create;var _=Object.defineProperty;var ce=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var pe=Object.getPrototypeOf,ue=Object.prototype.hasOwnProperty;var le=(e,t)=>{for(var n in t)_(e,n,{get:t[n],enumerable:!0})},Z=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of de(t))!ue.call(e,o)&&o!==n&&_(e,o,{get:()=>t[o],enumerable:!(r=ce(t,o))||r.enumerable});return e};var me=(e,t,n)=>(n=e!=null?ae(pe(e)):{},Z(t||!e||!e.__esModule?_(n,"default",{value:e,enumerable:!0}):n,e)),fe=e=>Z(_({},"__esModule",{value:!0}),e);var Ue={};le(Ue,{XENO_REPOSITORY_INDEX_SCHEMA_VERSION:()=>L,XenoRepositoryIndexFileStore:()=>W,buildXenoRepositoryIndex:()=>G,buildXenoRepositoryIndexWithEmbeddings:()=>we,detectRepositoryDocumentKind:()=>Y,detectRepositoryLanguage:()=>P,inspectXenoRepositoryFreshness:()=>Ee,inspectXenoRepositorySymbol:()=>ke,searchXenoRepositoryIndex:()=>Ie,validateXenoRepositoryIndex:()=>E});module.exports=fe(Ue);var L="xeno.repository-index.v1";var z=require("node:crypto");var he=120,ge=24e3,ye=4096,be=64,xe={c:"c",cc:"cpp",cjs:"javascript",cpp:"cpp",cs:"csharp",css:"css",cxx:"cpp",go:"go",h:"c",hpp:"cpp",html:"html",java:"java",js:"javascript",json:"json",jsx:"javascriptreact",kt:"kotlin",kts:"kotlin",md:"markdown",mdx:"markdown",mjs:"javascript",php:"php",py:"python",rb:"ruby",rs:"rust",sh:"shell",sql:"sql",svelte:"svelte",swift:"swift",toml:"toml",ts:"typescript",tsx:"typescriptreact",vue:"vue",yaml:"yaml",yml:"yaml"},Re=new Set(["a","an","and","are","as","at","be","by","for","from","has","have","if","in","is","it","of","on","or","that","the","this","to","was","were","will","with","true","false","null","const","let","var","return","export","import","function","class","interface","type","public","private"]);function G(e,t={}){let n=e.map(Oe).sort(Ke),r=q(t.createdAt??t.updatedAt??new Date().toISOString(),"createdAt"),o=q(t.updatedAt??r,"updatedAt"),a=M(t.chunkLines??he,20,1e3,"chunkLines"),i=M(t.maxChunkChars??ge,1e3,256e3,"maxChunkChars"),s=[],p=[],d=[],m=new Map;for(let c of n){let f=te(c.content),x=b(f),w=X("file",`${c.workspaceId}:${g(c.path)}`),y=c.language?.trim().toLowerCase()||P(c.path),F=c.kind??Y(c.path,y),C=Se(w,f,a,i),O=Xe(f,y).map(h=>({symbolId:X("symbol",`${w}:${h.kind}:${h.name}:${h.line}`),fileId:w,workspaceId:c.workspaceId,path:g(c.path),name:h.name,qualifiedName:`${g(c.path)}#${h.name}`,kind:h.kind,language:y,startLine:h.line,endLine:h.line,exported:h.exported,...h.signature?{signature:h.signature}:{}})),ie={fileId:w,workspaceId:c.workspaceId,root:c.root,path:g(c.path),language:y,kind:F,size:c.size,mtimeMs:c.mtimeMs,contentHash:x,lineCount:Pe(f),chunks:C,symbolIds:O.map(h=>h.symbolId),...c.git?{git:U(c.git)}:{}};s.push(ie),p.push(...O),m.set(w,$e(f,y));for(let h of O)d.push(N("defines",w,h.symbolId,h.path,h.startLine,`Defines ${h.kind} ${h.name}`,1))}let k=Fe(s);for(let c of s)for(let f of m.get(c.fileId)??[]){let x=Ce(c,f.specifier,k);x&&d.push(N("imports",c.fileId,x.fileId,c.path,f.line,`Imports ${f.specifier}`,.98))}d.push(..._e(s)),d.push(...Le(s));let u=De(n),l=Me(d),B={workspaces:new Set(s.map(c=>c.workspaceId)).size,files:s.length,chunks:s.reduce((c,f)=>c+f.chunks.length,0),symbols:p.length,relationships:l.length,embeddedChunks:s.reduce((c,f)=>c+f.chunks.filter(x=>x.embedding).length,0),sourceBytes:s.reduce((c,f)=>c+f.size,0)},S=[...new Map(n.map(c=>[c.workspaceId,c])).values()].map(c=>({workspaceId:c.workspaceId,root:c.root,...c.git?{git:U(c.git)}:{},indexedAt:o})).sort((c,f)=>c.workspaceId.localeCompare(f.workspaceId)),$={schemaVersion:L,indexId:t.indexId?.trim()||`repo_index_${(0,z.randomUUID)()}`,revision:M(t.revision??1,1,Number.MAX_SAFE_INTEGER,"revision"),createdAt:r,updatedAt:o,sourceFingerprint:u,producer:{id:t.producer?.id?.trim()||"xeno-agent-sdk",...t.producer?.version?{version:t.producer.version.trim()}:{}},workspaces:S,files:s,symbols:p,relationships:l,stats:B};return{...$,indexHash:b(v($))}}async function we(e,t,n={}){if(!t.id.trim()||!t.model.trim())throw new Error("Repository embedding provider identity is required");let r=G(e,n),o=await Promise.all(r.files.map(async p=>({...p,chunks:await Promise.all(p.chunks.map(async d=>{let m=V(await t.embed({workspaceId:p.workspaceId,path:p.path,startLine:d.startLine,endLine:d.endLine,content:d.content,contentHash:d.contentHash}));if(m.contentHash!==d.contentHash)throw new Error(`Repository embedding content hash mismatch for ${p.path}:${d.startLine}`);if(m.model!==t.model)throw new Error(`Repository embedding model mismatch for ${p.path}:${d.startLine}`);return{...d,embedding:m}}))}))),a={...r,files:o,stats:{...r.stats,embeddedChunks:o.reduce((p,d)=>p+d.chunks.filter(m=>m.embedding).length,0)}},{indexHash:i,...s}=a;return{...a,indexHash:b(v(s))}}function Ie(e,t){E(e);let n=t.query.trim();if(!n||n.length>8192)throw new Error("Repository search query must contain 1-8192 characters");let r=t.mode??"hybrid",o=t.queryEmbedding?V(t.queryEmbedding):void 0,a=[...new Set(Q(n))].slice(0,be),i=qe(e.symbols,u=>u.fileId),s=Ne(e.files),p=Math.max(1,e.stats.chunks),d=[],m=0;for(let u of e.files)if(!(t.workspaceIds?.length&&!t.workspaceIds.includes(u.workspaceId))&&!(t.kinds?.length&&!t.kinds.includes(u.kind))&&!(t.languages?.length&&!t.languages.includes(u.language)))for(let l of u.chunks){m+=1;let B=a.filter(y=>(l.terms[y]??0)>0),S=r==="semantic"?0:Ae(l,a,s,p),$=!!(o&&l.embedding&&o.model===l.embedding.model&&o.dimensions===l.embedding.dimensions),c=r==="lexical"||!$?0:ze(o?.vector,l.embedding?.vector),f=(i.get(u.fileId)??[]).filter(y=>{let F=y.name.toLowerCase();return a.some(C=>F===C||F.includes(C))}),x=f.length*1.5,w=r==="lexical"?S+x:r==="semantic"?c+x:S*.65+c*6*.35+x;w<=0||d.push({resultId:l.chunkId,workspaceId:u.workspaceId,path:u.path,kind:u.kind,language:u.language,startLine:l.startLine,endLine:l.endLine,snippet:Te(l.content,a),score:H(w),lexicalScore:H(S),semanticScore:H(c),matchedTerms:B,symbolIds:f.map(y=>y.symbolId),provenance:{indexId:e.indexId,indexRevision:e.revision,indexHash:e.indexHash,sourceFingerprint:e.sourceFingerprint,contentHash:l.contentHash,...u.git?{git:u.git}:{}}})}let k=M(t.limit??20,1,100,"limit");return d.sort((u,l)=>l.score-u.score||u.path.localeCompare(l.path)||u.startLine-l.startLine),{query:{...t,query:n,mode:r},results:d.slice(0,k),totalCandidates:m,semanticAvailable:!!(o&&e.files.some(u=>u.chunks.some(l=>l.embedding?.model===o.model&&l.embedding.dimensions===o.dimensions))),index:{indexId:e.indexId,revision:e.revision,indexHash:e.indexHash,updatedAt:e.updatedAt}}}function ke(e,t){E(e);let n=e.symbols.find(s=>s.symbolId===t||s.qualifiedName===t),r=n?.symbolId??t,o=e.relationships.filter(s=>s.toId===r||n&&s.toId===n.fileId),a=e.relationships.filter(s=>s.fromId===r||n&&s.fromId===n.fileId),i=new Set([...o.map(s=>s.fromId),...a.map(s=>s.toId)]);return{...n?{symbol:n}:{},incoming:o,outgoing:a,relatedSymbols:e.symbols.filter(s=>i.has(s.symbolId)),relatedFiles:e.files.filter(s=>i.has(s.fileId)||s.fileId===n?.fileId)}}function Ee(e,t,n=new Date().toISOString()){E(e);let r=new Map(e.files.map(d=>[`${d.workspaceId}:${d.path}`,d])),o=new Map(t.map(d=>[`${d.workspaceId}:${g(d.path)}`,d])),a=[],i=[],s=[];for(let[d,m]of o){let k=r.get(d);k?(m.contentHash?m.contentHash!==k.contentHash:m.size!==k.size||m.mtimeMs!==k.mtimeMs)&&i.push(m.path):a.push(m.path)}for(let[d,m]of r)o.has(d)||s.push(m.path);let p=Be(t);return{state:a.length||i.length||s.length?"stale":"fresh",checkedAt:q(n,"checkedAt"),added:a.sort(),changed:i.sort(),removed:s.sort(),sourceFingerprint:p,indexedSourceFingerprint:e.sourceFingerprint}}function E(e){if(e.schemaVersion!==L)throw new Error("Unsupported repository index schema");if(!e.indexId||!Number.isInteger(e.revision)||e.revision<1)throw new Error("Repository index identity is invalid");let t=new Set;for(let i of e.files){if(t.has(i.fileId))throw new Error(`Duplicate repository file ID: ${i.fileId}`);t.add(i.fileId),ee(i.path)}let n=new Set;for(let i of e.symbols){if(!t.has(i.fileId))throw new Error(`Repository symbol references unknown file: ${i.symbolId}`);if(n.has(i.symbolId))throw new Error(`Duplicate repository symbol ID: ${i.symbolId}`);n.add(i.symbolId)}let r=new Set([...t,...n]);for(let i of e.relationships)if(!r.has(i.fromId)||!r.has(i.toId))throw new Error(`Repository relationship ${i.relationshipId} is dangling`);let{indexHash:o,...a}=e;if(b(v(a))!==e.indexHash)throw new Error("Repository index hash mismatch");return e}function P(e){let t=g(e).split("/").pop()??"",n=t.includes(".")?t.split(".").pop()?.toLowerCase()??"":"";return xe[n]??"text"}function Y(e,t=P(e)){let n=g(e).toLowerCase();return/(^|\/)(test|tests|spec|specs|__tests__)(\/|$)|\.(test|spec)\.[^/]+$/u.test(n)?"test":t==="markdown"||/(^|\/)(docs?|documentation)(\/|$)/u.test(n)?"documentation":["json","yaml","toml"].includes(t)||/(^|\/)(\.github|config)(\/|$)/u.test(n)?"configuration":["typescript","typescriptreact","javascript","javascriptreact","python","go","rust","java","csharp","c","cpp","ruby","php","swift","kotlin","shell","sql"].includes(t)?"source":/\.(png|jpe?g|gif|webp|svg|ico|woff2?|ttf|mp[34]|wav)$/u.test(n)?"asset":"other"}function Se(e,t,n,r){let o=t.split(`
|
|
2
2
|
`),a=[],i=0;for(;i<o.length;){let s=Math.min(o.length,i+n);for(;s>i+1&&o.slice(i,s).join(`
|
|
3
|
-
`).length>r;)s-=1;let
|
|
4
|
-
`),
|
|
5
|
-
`),o=
|
|
6
|
-
`).forEach((r,o)=>{let a=t==="python"?/^\s*(?:from\s+(?<from>[.\w]+)\s+import|import\s+(?<plain>[.\w]+))/u.exec(r):/(?:\bfrom\s*|\brequire\s*\(\s*|\bimport\s*\(\s*)["'](?<module>[^"']+)["']/u.exec(r),i=a?.groups?.module??a?.groups?.from??a?.groups?.plain;i&&n.push({specifier:i,line:o+1})}),n.slice(0,2e4)}function
|
|
7
|
-
`).toLowerCase();for(let a of n){let i=a.path.toLowerCase(),s=i.split("/").pop()??i;if(!(!o.includes(i)&&(s.length<5||!o.includes(s)))&&(t.push(N("documents",r.fileId,a.fileId,r.path,void 0,`Documentation references ${a.path}`,.85)),t.length>=5e4))return t}}return t}function N(e,t,n,r,o,a,i){return{relationshipId:
|
|
8
|
-
`)}function
|
|
9
|
-
`).length:1}function
|
|
10
|
-
`;if(Buffer.byteLength(n,"utf8")>
|
|
3
|
+
`).length>r;)s-=1;let p=o.slice(i,s).join(`
|
|
4
|
+
`),d=b(p);a.push({chunkId:X("chunk",`${e}:${i+1}:${s}:${d}`),startLine:i+1,endLine:Math.max(i+1,s),content:p,contentHash:d,terms:je(p)}),i=s}return a.length?a:[{chunkId:X("chunk",`${e}:1:1:${b("")}`),startLine:1,endLine:1,content:"",contentHash:b(""),terms:{}}]}function Xe(e,t){let n=[],r=e.split(`
|
|
5
|
+
`),o=ve(t);return r.forEach((a,i)=>{for(let s of o){let p=s.expression.exec(a);if(p?.groups?.name){n.push({name:p.groups.name,kind:s.kind,line:i+1,exported:/\b(export|public|pub)\b/u.test(a),signature:a.trim().slice(0,1e3)});break}}}),n.slice(0,2e4)}function ve(e){return e==="markdown"?[{kind:"heading",expression:/^#{1,6}\s+(?<name>.+?)\s*$/u}]:e==="python"?[{kind:"class",expression:/^\s*class\s+(?<name>[A-Za-z_][\w]*)/u},{kind:"function",expression:/^\s*(?:async\s+)?def\s+(?<name>[A-Za-z_][\w]*)/u}]:e==="go"?[{kind:"function",expression:/^\s*func\s+(?:\([^)]*\)\s*)?(?<name>[A-Za-z_][\w]*)/u},{kind:"type",expression:/^\s*type\s+(?<name>[A-Za-z_][\w]*)/u}]:e==="rust"?[{kind:"function",expression:/^\s*(?:pub(?:\([^)]*\))?\s+)?(?:async\s+)?fn\s+(?<name>[A-Za-z_][\w]*)/u},{kind:"class",expression:/^\s*(?:pub(?:\([^)]*\))?\s+)?struct\s+(?<name>[A-Za-z_][\w]*)/u},{kind:"enum",expression:/^\s*(?:pub(?:\([^)]*\))?\s+)?enum\s+(?<name>[A-Za-z_][\w]*)/u},{kind:"interface",expression:/^\s*(?:pub(?:\([^)]*\))?\s+)?trait\s+(?<name>[A-Za-z_][\w]*)/u}]:[{kind:"class",expression:/^\s*(?:export\s+)?(?:default\s+)?(?:abstract\s+)?class\s+(?<name>[A-Za-z_$][\w$]*)/u},{kind:"interface",expression:/^\s*(?:export\s+)?interface\s+(?<name>[A-Za-z_$][\w$]*)/u},{kind:"type",expression:/^\s*(?:export\s+)?type\s+(?<name>[A-Za-z_$][\w$]*)/u},{kind:"enum",expression:/^\s*(?:export\s+)?(?:const\s+)?enum\s+(?<name>[A-Za-z_$][\w$]*)/u},{kind:"function",expression:/^\s*(?:export\s+)?(?:default\s+)?(?:async\s+)?function\s*\*?\s*(?<name>[A-Za-z_$][\w$]*)/u},{kind:"variable",expression:/^\s*(?:export\s+)?(?:const|let|var)\s+(?<name>[A-Za-z_$][\w$]*)/u}]}function $e(e,t){let n=[];return e.split(`
|
|
6
|
+
`).forEach((r,o)=>{let a=t==="python"?/^\s*(?:from\s+(?<from>[.\w]+)\s+import|import\s+(?<plain>[.\w]+))/u.exec(r):/(?:\bfrom\s*|\brequire\s*\(\s*|\bimport\s*\(\s*)["'](?<module>[^"']+)["']/u.exec(r),i=a?.groups?.module??a?.groups?.from??a?.groups?.plain;i&&n.push({specifier:i,line:o+1})}),n.slice(0,2e4)}function Fe(e){let t=new Map;for(let n of e){let r=`${n.workspaceId}:${A(n.path)}`;t.set(r,n),t.set(`${n.workspaceId}:${n.path}`,n),t.set(`${n.workspaceId}:${A(n.path)}/index`,n)}return t}function Ce(e,t,n){if(!t.startsWith("."))return;let o=[...e.path.split("/").slice(0,-1),...t.replace(/\\/gu,"/").split("/")],a=[];for(let s of o)!s||s==="."||(s===".."?a.pop():a.push(s));let i=a.join("/");return n.get(`${e.workspaceId}:${i}`)??n.get(`${e.workspaceId}:${A(i)}`)??n.get(`${e.workspaceId}:${i}/index`)}function _e(e){let t=[],n=new Map;for(let r of e.filter(o=>o.kind==="source")){let o=J(r.path),a=`${r.workspaceId}:${o}`;n.set(a,[...n.get(a)??[],r])}for(let r of e.filter(o=>o.kind==="test")){let o=n.get(`${r.workspaceId}:${J(r.path)}`)??[];for(let a of o.slice(0,8))t.push(N("tests",r.fileId,a.fileId,r.path,void 0,`Test ownership inferred for ${a.path}`,.8))}return t}function Le(e){let t=[],n=e.filter(r=>r.kind!=="documentation");for(let r of e.filter(o=>o.kind==="documentation")){let o=r.chunks.map(a=>a.content).join(`
|
|
7
|
+
`).toLowerCase();for(let a of n){let i=a.path.toLowerCase(),s=i.split("/").pop()??i;if(!(!o.includes(i)&&(s.length<5||!o.includes(s)))&&(t.push(N("documents",r.fileId,a.fileId,r.path,void 0,`Documentation references ${a.path}`,.85)),t.length>=5e4))return t}}return t}function N(e,t,n,r,o,a,i){return{relationshipId:X("relationship",`${e}:${t}:${n}:${o??0}`),kind:e,fromId:t,toId:n,confidence:i,evidence:{path:r,...o?{line:o}:{},summary:a}}}function Me(e){return[...new Map(e.map(t=>[t.relationshipId,t])).values()].sort((t,n)=>t.relationshipId.localeCompare(n.relationshipId))}function Ne(e){let t=new Map;for(let n of e)for(let r of n.chunks)for(let o of Object.keys(r.terms))t.set(o,(t.get(o)??0)+1);return t}function Ae(e,t,n,r){let o=Object.values(e.terms).reduce((i,s)=>i+s,0),a=0;for(let i of t){let s=e.terms[i]??0;if(!s)continue;let p=n.get(i)??0,d=Math.log(1+(r-p+.5)/(p+.5));a+=d*(s*2.2/(s+1.2*(.25+.75*o/350)))}return a}function ze(e,t){if(!e||!t||e.length===0||e.length!==t.length)return 0;let n=0,r=0,o=0;for(let a=0;a<e.length;a+=1){let i=e[a]??0,s=t[a]??0;n+=i*s,r+=i*i,o+=s*s}return r&&o?n/Math.sqrt(r*o):0}function Te(e,t){let n=e.replace(/\s+/gu," ").trim();if(n.length<=600)return n;let r=n.toLowerCase(),o=t.map(p=>r.indexOf(p)).filter(p=>p>=0),a=o.length?Math.min(...o):0,i=Math.max(0,a-180),s=Math.min(n.length,i+600);return`${i?"\u2026":""}${n.slice(i,s)}${s<n.length?"\u2026":""}`}function De(e){return b(v(e.map(t=>({workspaceId:t.workspaceId,root:t.root,path:g(t.path),size:t.size,mtimeMs:t.mtimeMs,contentHash:b(te(t.content)),git:t.git}))))}function Be(e){return b(v([...e].map(t=>({workspaceId:t.workspaceId,path:g(t.path),size:t.size,mtimeMs:t.mtimeMs,contentHash:t.contentHash})).sort((t,n)=>`${t.workspaceId}:${t.path}`.localeCompare(`${n.workspaceId}:${n.path}`))))}function Oe(e){if(!e.workspaceId.trim())throw new Error("Repository source workspaceId is required");if(!e.root.trim())throw new Error("Repository source root is required");if(ee(e.path),!Number.isFinite(e.size)||e.size<0)throw new Error(`Repository source size is invalid: ${e.path}`);if(!Number.isFinite(e.mtimeMs)||e.mtimeMs<0)throw new Error(`Repository source mtimeMs is invalid: ${e.path}`);if(Buffer.byteLength(e.content,"utf8")>4*1024*1024)throw new Error(`Repository source exceeds 4 MiB: ${e.path}`);return{...e,workspaceId:e.workspaceId.trim(),root:e.root.trim(),path:g(e.path)}}function V(e){if(!e.model.trim()||!Number.isInteger(e.dimensions)||e.dimensions<1||e.dimensions>65536)throw new Error("Repository embedding metadata is invalid");if(e.vector.length!==e.dimensions||e.vector.some(t=>!Number.isFinite(t)))throw new Error("Repository embedding vector is invalid");return{...e,model:e.model.trim(),vector:[...e.vector]}}function U(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>typeof t=="string"&&t.trim()).map(([t,n])=>[t,String(n).trim()]))}function Q(e){return(e.normalize("NFKC").toLowerCase().match(/[\p{L}\p{N}_$.-]{2,}/gu)??[]).flatMap(t=>He(t)).filter(t=>t.length>=2&&!Re.has(t))}function He(e){let n=e.replace(/([a-z0-9])([A-Z])/gu,"$1 $2").replace(/[.$/_-]+/gu," ").toLowerCase().split(/\s+/u).filter(Boolean);return n.length>1?[e.toLowerCase(),...n]:n}function je(e){let t=new Map;for(let n of Q(e))if(t.set(n,(t.get(n)??0)+1),t.size>=ye)break;return Object.fromEntries([...t.entries()].sort(([n],[r])=>n.localeCompare(r)))}function qe(e,t){let n=new Map;for(let r of e)n.set(t(r),[...n.get(t(r))??[],r]);return n}function J(e){return A(g(e).split("/").pop()??e).replace(/\.(test|spec)$/u,"").replace(/[-_]?(tests?|specs?)$/u,"")}function A(e){return e.replace(/\.(d\.)?(c|m)?(js|ts)x?$|\.(py|go|rs|java|cs|cpp|cxx|cc|c|h|hpp|rb|php|swift|kt|kts|md|mdx)$/u,"")}function ee(e){let t=g(e);if(!t||t.startsWith("/")||/^[A-Za-z]:\//u.test(t)||t.split("/").includes(".."))throw new Error(`Repository path must be relative and confined: ${e}`);return t}function g(e){return e.replace(/\\/gu,"/").replace(/^\.\//u,"").replace(/\/{2,}/gu,"/")}function te(e){return e.replace(/\r\n?/gu,`
|
|
8
|
+
`)}function Pe(e){return e?e.split(`
|
|
9
|
+
`).length:1}function Ke(e,t){return`${e.workspaceId}:${e.path}`.localeCompare(`${t.workspaceId}:${t.path}`)}function X(e,t){return`${e}_${b(t).slice(0,24)}`}function b(e){return(0,z.createHash)("sha256").update(e,"utf8").digest("hex")}function v(e){return JSON.stringify(j(e))}function j(e){return Array.isArray(e)?e.map(j):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>[t,j(n)]))}function M(e,t,n,r){if(!Number.isInteger(e)||e<t||e>n)throw new Error(`${r} must be an integer between ${t} and ${n}`);return e}function q(e,t){if(!Number.isFinite(Date.parse(e)))throw new Error(`${t} must be an ISO timestamp`);return e}function H(e){return Math.round(e*1e6)/1e6}var se=require("node:crypto"),I=require("node:fs/promises"),D=require("node:path");var R=me(require("node:fs/promises"),1);var ne=Symbol.for("@xenosystem/agent-sdk/file-cache"),re=globalThis,K=re[ne]??{entries:new Map,counters:{reads:0,hits:0}};re[ne]=K;var et=K.entries,tt=K.counters;var We=new Set(["EACCES","EBUSY","EPERM"]),Ze=[10,20,40,80,160,320,640];async function oe(e,t){for(let n=0;;n+=1)try{await R.rename(e,t);return}catch(r){let o=r.code,a=Ze[n];if(process.platform!=="win32"||!o||!We.has(o)||a===void 0)throw r;await new Promise(i=>setTimeout(i,a))}}var T=512*1024*1024,W=class{path;constructor(t){this.path=(0,D.resolve)(t)}async exists(){try{return(await(0,I.stat)(this.path)).isFile()}catch{return!1}}async load(){let t=await(0,I.stat)(this.path);if(!t.isFile())throw new Error("Repository index path is not a regular file");if(t.size>T)throw new Error(`Repository index exceeds ${T} bytes`);let n;try{n=JSON.parse(await(0,I.readFile)(this.path,"utf8"))}catch(r){throw new Error(`Repository index is invalid JSON: ${r instanceof Error?r.message:String(r)}`)}return E(n)}async save(t){E(t);let n=`${JSON.stringify(t)}
|
|
10
|
+
`;if(Buffer.byteLength(n,"utf8")>T)throw new Error(`Repository index exceeds ${T} bytes`);await(0,I.mkdir)((0,D.dirname)(this.path),{recursive:!0,mode:448});let r=`${this.path}.${process.pid}.${(0,se.randomUUID)()}.tmp`;await(0,I.writeFile)(r,n,{encoding:"utf8",mode:384,flag:"wx"}),await oe(r,this.path)}};0&&(module.exports={XENO_REPOSITORY_INDEX_SCHEMA_VERSION,XenoRepositoryIndexFileStore,buildXenoRepositoryIndex,buildXenoRepositoryIndexWithEmbeddings,detectRepositoryDocumentKind,detectRepositoryLanguage,inspectXenoRepositoryFreshness,inspectXenoRepositorySymbol,searchXenoRepositoryIndex,validateXenoRepositoryIndex});
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
var
|
|
1
|
+
var z="xeno.repository-index.v1";import{createHash as ee,randomUUID as te}from"node:crypto";var ne=120,re=24e3,oe=4096,se=64,ie={c:"c",cc:"cpp",cjs:"javascript",cpp:"cpp",cs:"csharp",css:"css",cxx:"cpp",go:"go",h:"c",hpp:"cpp",html:"html",java:"java",js:"javascript",json:"json",jsx:"javascriptreact",kt:"kotlin",kts:"kotlin",md:"markdown",mdx:"markdown",mjs:"javascript",php:"php",py:"python",rb:"ruby",rs:"rust",sh:"shell",sql:"sql",svelte:"svelte",swift:"swift",toml:"toml",ts:"typescript",tsx:"typescriptreact",vue:"vue",yaml:"yaml",yml:"yaml"},ae=new Set(["a","an","and","are","as","at","be","by","for","from","has","have","if","in","is","it","of","on","or","that","the","this","to","was","were","will","with","true","false","null","const","let","var","return","export","import","function","class","interface","type","public","private"]);function ce(e,t={}){let n=e.map(Se).sort(Ce),r=B(t.createdAt??t.updatedAt??new Date().toISOString(),"createdAt"),i=B(t.updatedAt??r,"updatedAt"),a=C(t.chunkLines??ne,20,1e3,"chunkLines"),s=C(t.maxChunkChars??re,1e3,256e3,"maxChunkChars"),o=[],p=[],d=[],m=new Map;for(let c of n){let f=Z(c.content),x=b(f),w=S("file",`${c.workspaceId}:${g(c.path)}`),y=c.language?.trim().toLowerCase()||q(c.path),$=c.kind??de(c.path,y),F=pe(w,f,a,s),A=ue(f,y).map(h=>({symbolId:S("symbol",`${w}:${h.kind}:${h.name}:${h.line}`),fileId:w,workspaceId:c.workspaceId,path:g(c.path),name:h.name,qualifiedName:`${g(c.path)}#${h.name}`,kind:h.kind,language:y,startLine:h.line,endLine:h.line,exported:h.exported,...h.signature?{signature:h.signature}:{}})),Q={fileId:w,workspaceId:c.workspaceId,root:c.root,path:g(c.path),language:y,kind:$,size:c.size,mtimeMs:c.mtimeMs,contentHash:x,lineCount:Fe(f),chunks:F,symbolIds:A.map(h=>h.symbolId),...c.git?{git:H(c.git)}:{}};o.push(Q),p.push(...A),m.set(w,me(f,y));for(let h of A)d.push(_("defines",w,h.symbolId,h.path,h.startLine,`Defines ${h.kind} ${h.name}`,1))}let I=fe(o);for(let c of o)for(let f of m.get(c.fileId)??[]){let x=he(c,f.specifier,I);x&&d.push(_("imports",c.fileId,x.fileId,c.path,f.line,`Imports ${f.specifier}`,.98))}d.push(...ge(o)),d.push(...ye(o));let u=ke(n),l=be(d),N={workspaces:new Set(o.map(c=>c.workspaceId)).size,files:o.length,chunks:o.reduce((c,f)=>c+f.chunks.length,0),symbols:p.length,relationships:l.length,embeddedChunks:o.reduce((c,f)=>c+f.chunks.filter(x=>x.embedding).length,0),sourceBytes:o.reduce((c,f)=>c+f.size,0)},E=[...new Map(n.map(c=>[c.workspaceId,c])).values()].map(c=>({workspaceId:c.workspaceId,root:c.root,...c.git?{git:H(c.git)}:{},indexedAt:i})).sort((c,f)=>c.workspaceId.localeCompare(f.workspaceId)),v={schemaVersion:z,indexId:t.indexId?.trim()||`repo_index_${te()}`,revision:C(t.revision??1,1,Number.MAX_SAFE_INTEGER,"revision"),createdAt:r,updatedAt:i,sourceFingerprint:u,producer:{id:t.producer?.id?.trim()||"xeno-agent-sdk",...t.producer?.version?{version:t.producer.version.trim()}:{}},workspaces:E,files:o,symbols:p,relationships:l,stats:N};return{...v,indexHash:b(X(v))}}async function qe(e,t,n={}){if(!t.id.trim()||!t.model.trim())throw new Error("Repository embedding provider identity is required");let r=ce(e,n),i=await Promise.all(r.files.map(async p=>({...p,chunks:await Promise.all(p.chunks.map(async d=>{let m=P(await t.embed({workspaceId:p.workspaceId,path:p.path,startLine:d.startLine,endLine:d.endLine,content:d.content,contentHash:d.contentHash}));if(m.contentHash!==d.contentHash)throw new Error(`Repository embedding content hash mismatch for ${p.path}:${d.startLine}`);if(m.model!==t.model)throw new Error(`Repository embedding model mismatch for ${p.path}:${d.startLine}`);return{...d,embedding:m}}))}))),a={...r,files:i,stats:{...r.stats,embeddedChunks:i.reduce((p,d)=>p+d.chunks.filter(m=>m.embedding).length,0)}},{indexHash:s,...o}=a;return{...a,indexHash:b(X(o))}}function Pe(e,t){k(e);let n=t.query.trim();if(!n||n.length>8192)throw new Error("Repository search query must contain 1-8192 characters");let r=t.mode??"hybrid",i=t.queryEmbedding?P(t.queryEmbedding):void 0,a=[...new Set(K(n))].slice(0,se),s=$e(e.symbols,u=>u.fileId),o=xe(e.files),p=Math.max(1,e.stats.chunks),d=[],m=0;for(let u of e.files)if(!(t.workspaceIds?.length&&!t.workspaceIds.includes(u.workspaceId))&&!(t.kinds?.length&&!t.kinds.includes(u.kind))&&!(t.languages?.length&&!t.languages.includes(u.language)))for(let l of u.chunks){m+=1;let N=a.filter(y=>(l.terms[y]??0)>0),E=r==="semantic"?0:Re(l,a,o,p),v=!!(i&&l.embedding&&i.model===l.embedding.model&&i.dimensions===l.embedding.dimensions),c=r==="lexical"||!v?0:we(i?.vector,l.embedding?.vector),f=(s.get(u.fileId)??[]).filter(y=>{let $=y.name.toLowerCase();return a.some(F=>$===F||$.includes(F))}),x=f.length*1.5,w=r==="lexical"?E+x:r==="semantic"?c+x:E*.65+c*6*.35+x;w<=0||d.push({resultId:l.chunkId,workspaceId:u.workspaceId,path:u.path,kind:u.kind,language:u.language,startLine:l.startLine,endLine:l.endLine,snippet:Ie(l.content,a),score:T(w),lexicalScore:T(E),semanticScore:T(c),matchedTerms:N,symbolIds:f.map(y=>y.symbolId),provenance:{indexId:e.indexId,indexRevision:e.revision,indexHash:e.indexHash,sourceFingerprint:e.sourceFingerprint,contentHash:l.contentHash,...u.git?{git:u.git}:{}}})}let I=C(t.limit??20,1,100,"limit");return d.sort((u,l)=>l.score-u.score||u.path.localeCompare(l.path)||u.startLine-l.startLine),{query:{...t,query:n,mode:r},results:d.slice(0,I),totalCandidates:m,semanticAvailable:!!(i&&e.files.some(u=>u.chunks.some(l=>l.embedding?.model===i.model&&l.embedding.dimensions===i.dimensions))),index:{indexId:e.indexId,revision:e.revision,indexHash:e.indexHash,updatedAt:e.updatedAt}}}function Ke(e,t){k(e);let n=e.symbols.find(o=>o.symbolId===t||o.qualifiedName===t),r=n?.symbolId??t,i=e.relationships.filter(o=>o.toId===r||n&&o.toId===n.fileId),a=e.relationships.filter(o=>o.fromId===r||n&&o.fromId===n.fileId),s=new Set([...i.map(o=>o.fromId),...a.map(o=>o.toId)]);return{...n?{symbol:n}:{},incoming:i,outgoing:a,relatedSymbols:e.symbols.filter(o=>s.has(o.symbolId)),relatedFiles:e.files.filter(o=>s.has(o.fileId)||o.fileId===n?.fileId)}}function We(e,t,n=new Date().toISOString()){k(e);let r=new Map(e.files.map(d=>[`${d.workspaceId}:${d.path}`,d])),i=new Map(t.map(d=>[`${d.workspaceId}:${g(d.path)}`,d])),a=[],s=[],o=[];for(let[d,m]of i){let I=r.get(d);I?(m.contentHash?m.contentHash!==I.contentHash:m.size!==I.size||m.mtimeMs!==I.mtimeMs)&&s.push(m.path):a.push(m.path)}for(let[d,m]of r)i.has(d)||o.push(m.path);let p=Ee(t);return{state:a.length||s.length||o.length?"stale":"fresh",checkedAt:B(n,"checkedAt"),added:a.sort(),changed:s.sort(),removed:o.sort(),sourceFingerprint:p,indexedSourceFingerprint:e.sourceFingerprint}}function k(e){if(e.schemaVersion!==z)throw new Error("Unsupported repository index schema");if(!e.indexId||!Number.isInteger(e.revision)||e.revision<1)throw new Error("Repository index identity is invalid");let t=new Set;for(let s of e.files){if(t.has(s.fileId))throw new Error(`Duplicate repository file ID: ${s.fileId}`);t.add(s.fileId),W(s.path)}let n=new Set;for(let s of e.symbols){if(!t.has(s.fileId))throw new Error(`Repository symbol references unknown file: ${s.symbolId}`);if(n.has(s.symbolId))throw new Error(`Duplicate repository symbol ID: ${s.symbolId}`);n.add(s.symbolId)}let r=new Set([...t,...n]);for(let s of e.relationships)if(!r.has(s.fromId)||!r.has(s.toId))throw new Error(`Repository relationship ${s.relationshipId} is dangling`);let{indexHash:i,...a}=e;if(b(X(a))!==e.indexHash)throw new Error("Repository index hash mismatch");return e}function q(e){let t=g(e).split("/").pop()??"",n=t.includes(".")?t.split(".").pop()?.toLowerCase()??"":"";return ie[n]??"text"}function de(e,t=q(e)){let n=g(e).toLowerCase();return/(^|\/)(test|tests|spec|specs|__tests__)(\/|$)|\.(test|spec)\.[^/]+$/u.test(n)?"test":t==="markdown"||/(^|\/)(docs?|documentation)(\/|$)/u.test(n)?"documentation":["json","yaml","toml"].includes(t)||/(^|\/)(\.github|config)(\/|$)/u.test(n)?"configuration":["typescript","typescriptreact","javascript","javascriptreact","python","go","rust","java","csharp","c","cpp","ruby","php","swift","kotlin","shell","sql"].includes(t)?"source":/\.(png|jpe?g|gif|webp|svg|ico|woff2?|ttf|mp[34]|wav)$/u.test(n)?"asset":"other"}function pe(e,t,n,r){let i=t.split(`
|
|
2
2
|
`),a=[],s=0;for(;s<i.length;){let o=Math.min(i.length,s+n);for(;o>s+1&&i.slice(s,o).join(`
|
|
3
|
-
`).length>r;)o-=1;let
|
|
4
|
-
`),
|
|
5
|
-
`),i=
|
|
6
|
-
`).forEach((r,i)=>{let a=t==="python"?/^\s*(?:from\s+(?<from>[.\w]+)\s+import|import\s+(?<plain>[.\w]+))/u.exec(r):/(?:\bfrom\s*|\brequire\s*\(\s*|\bimport\s*\(\s*)["'](?<module>[^"']+)["']/u.exec(r),s=a?.groups?.module??a?.groups?.from??a?.groups?.plain;s&&n.push({specifier:s,line:i+1})}),n.slice(0,2e4)}function
|
|
7
|
-
`).toLowerCase();for(let a of n){let s=a.path.toLowerCase(),o=s.split("/").pop()??s;if(!(!i.includes(s)&&(o.length<5||!i.includes(o)))&&(t.push(_("documents",r.fileId,a.fileId,r.path,void 0,`Documentation references ${a.path}`,.85)),t.length>=5e4))return t}}return t}function _(e,t,n,r,i,a,s){return{relationshipId:
|
|
8
|
-
`)}function
|
|
9
|
-
`).length:1}function
|
|
10
|
-
`;if(Buffer.byteLength(n,"utf8")>
|
|
3
|
+
`).length>r;)o-=1;let p=i.slice(s,o).join(`
|
|
4
|
+
`),d=b(p);a.push({chunkId:S("chunk",`${e}:${s+1}:${o}:${d}`),startLine:s+1,endLine:Math.max(s+1,o),content:p,contentHash:d,terms:ve(p)}),s=o}return a.length?a:[{chunkId:S("chunk",`${e}:1:1:${b("")}`),startLine:1,endLine:1,content:"",contentHash:b(""),terms:{}}]}function ue(e,t){let n=[],r=e.split(`
|
|
5
|
+
`),i=le(t);return r.forEach((a,s)=>{for(let o of i){let p=o.expression.exec(a);if(p?.groups?.name){n.push({name:p.groups.name,kind:o.kind,line:s+1,exported:/\b(export|public|pub)\b/u.test(a),signature:a.trim().slice(0,1e3)});break}}}),n.slice(0,2e4)}function le(e){return e==="markdown"?[{kind:"heading",expression:/^#{1,6}\s+(?<name>.+?)\s*$/u}]:e==="python"?[{kind:"class",expression:/^\s*class\s+(?<name>[A-Za-z_][\w]*)/u},{kind:"function",expression:/^\s*(?:async\s+)?def\s+(?<name>[A-Za-z_][\w]*)/u}]:e==="go"?[{kind:"function",expression:/^\s*func\s+(?:\([^)]*\)\s*)?(?<name>[A-Za-z_][\w]*)/u},{kind:"type",expression:/^\s*type\s+(?<name>[A-Za-z_][\w]*)/u}]:e==="rust"?[{kind:"function",expression:/^\s*(?:pub(?:\([^)]*\))?\s+)?(?:async\s+)?fn\s+(?<name>[A-Za-z_][\w]*)/u},{kind:"class",expression:/^\s*(?:pub(?:\([^)]*\))?\s+)?struct\s+(?<name>[A-Za-z_][\w]*)/u},{kind:"enum",expression:/^\s*(?:pub(?:\([^)]*\))?\s+)?enum\s+(?<name>[A-Za-z_][\w]*)/u},{kind:"interface",expression:/^\s*(?:pub(?:\([^)]*\))?\s+)?trait\s+(?<name>[A-Za-z_][\w]*)/u}]:[{kind:"class",expression:/^\s*(?:export\s+)?(?:default\s+)?(?:abstract\s+)?class\s+(?<name>[A-Za-z_$][\w$]*)/u},{kind:"interface",expression:/^\s*(?:export\s+)?interface\s+(?<name>[A-Za-z_$][\w$]*)/u},{kind:"type",expression:/^\s*(?:export\s+)?type\s+(?<name>[A-Za-z_$][\w$]*)/u},{kind:"enum",expression:/^\s*(?:export\s+)?(?:const\s+)?enum\s+(?<name>[A-Za-z_$][\w$]*)/u},{kind:"function",expression:/^\s*(?:export\s+)?(?:default\s+)?(?:async\s+)?function\s*\*?\s*(?<name>[A-Za-z_$][\w$]*)/u},{kind:"variable",expression:/^\s*(?:export\s+)?(?:const|let|var)\s+(?<name>[A-Za-z_$][\w$]*)/u}]}function me(e,t){let n=[];return e.split(`
|
|
6
|
+
`).forEach((r,i)=>{let a=t==="python"?/^\s*(?:from\s+(?<from>[.\w]+)\s+import|import\s+(?<plain>[.\w]+))/u.exec(r):/(?:\bfrom\s*|\brequire\s*\(\s*|\bimport\s*\(\s*)["'](?<module>[^"']+)["']/u.exec(r),s=a?.groups?.module??a?.groups?.from??a?.groups?.plain;s&&n.push({specifier:s,line:i+1})}),n.slice(0,2e4)}function fe(e){let t=new Map;for(let n of e){let r=`${n.workspaceId}:${L(n.path)}`;t.set(r,n),t.set(`${n.workspaceId}:${n.path}`,n),t.set(`${n.workspaceId}:${L(n.path)}/index`,n)}return t}function he(e,t,n){if(!t.startsWith("."))return;let i=[...e.path.split("/").slice(0,-1),...t.replace(/\\/gu,"/").split("/")],a=[];for(let o of i)!o||o==="."||(o===".."?a.pop():a.push(o));let s=a.join("/");return n.get(`${e.workspaceId}:${s}`)??n.get(`${e.workspaceId}:${L(s)}`)??n.get(`${e.workspaceId}:${s}/index`)}function ge(e){let t=[],n=new Map;for(let r of e.filter(i=>i.kind==="source")){let i=j(r.path),a=`${r.workspaceId}:${i}`;n.set(a,[...n.get(a)??[],r])}for(let r of e.filter(i=>i.kind==="test")){let i=n.get(`${r.workspaceId}:${j(r.path)}`)??[];for(let a of i.slice(0,8))t.push(_("tests",r.fileId,a.fileId,r.path,void 0,`Test ownership inferred for ${a.path}`,.8))}return t}function ye(e){let t=[],n=e.filter(r=>r.kind!=="documentation");for(let r of e.filter(i=>i.kind==="documentation")){let i=r.chunks.map(a=>a.content).join(`
|
|
7
|
+
`).toLowerCase();for(let a of n){let s=a.path.toLowerCase(),o=s.split("/").pop()??s;if(!(!i.includes(s)&&(o.length<5||!i.includes(o)))&&(t.push(_("documents",r.fileId,a.fileId,r.path,void 0,`Documentation references ${a.path}`,.85)),t.length>=5e4))return t}}return t}function _(e,t,n,r,i,a,s){return{relationshipId:S("relationship",`${e}:${t}:${n}:${i??0}`),kind:e,fromId:t,toId:n,confidence:s,evidence:{path:r,...i?{line:i}:{},summary:a}}}function be(e){return[...new Map(e.map(t=>[t.relationshipId,t])).values()].sort((t,n)=>t.relationshipId.localeCompare(n.relationshipId))}function xe(e){let t=new Map;for(let n of e)for(let r of n.chunks)for(let i of Object.keys(r.terms))t.set(i,(t.get(i)??0)+1);return t}function Re(e,t,n,r){let i=Object.values(e.terms).reduce((s,o)=>s+o,0),a=0;for(let s of t){let o=e.terms[s]??0;if(!o)continue;let p=n.get(s)??0,d=Math.log(1+(r-p+.5)/(p+.5));a+=d*(o*2.2/(o+1.2*(.25+.75*i/350)))}return a}function we(e,t){if(!e||!t||e.length===0||e.length!==t.length)return 0;let n=0,r=0,i=0;for(let a=0;a<e.length;a+=1){let s=e[a]??0,o=t[a]??0;n+=s*o,r+=s*s,i+=o*o}return r&&i?n/Math.sqrt(r*i):0}function Ie(e,t){let n=e.replace(/\s+/gu," ").trim();if(n.length<=600)return n;let r=n.toLowerCase(),i=t.map(p=>r.indexOf(p)).filter(p=>p>=0),a=i.length?Math.min(...i):0,s=Math.max(0,a-180),o=Math.min(n.length,s+600);return`${s?"\u2026":""}${n.slice(s,o)}${o<n.length?"\u2026":""}`}function ke(e){return b(X(e.map(t=>({workspaceId:t.workspaceId,root:t.root,path:g(t.path),size:t.size,mtimeMs:t.mtimeMs,contentHash:b(Z(t.content)),git:t.git}))))}function Ee(e){return b(X([...e].map(t=>({workspaceId:t.workspaceId,path:g(t.path),size:t.size,mtimeMs:t.mtimeMs,contentHash:t.contentHash})).sort((t,n)=>`${t.workspaceId}:${t.path}`.localeCompare(`${n.workspaceId}:${n.path}`))))}function Se(e){if(!e.workspaceId.trim())throw new Error("Repository source workspaceId is required");if(!e.root.trim())throw new Error("Repository source root is required");if(W(e.path),!Number.isFinite(e.size)||e.size<0)throw new Error(`Repository source size is invalid: ${e.path}`);if(!Number.isFinite(e.mtimeMs)||e.mtimeMs<0)throw new Error(`Repository source mtimeMs is invalid: ${e.path}`);if(Buffer.byteLength(e.content,"utf8")>4*1024*1024)throw new Error(`Repository source exceeds 4 MiB: ${e.path}`);return{...e,workspaceId:e.workspaceId.trim(),root:e.root.trim(),path:g(e.path)}}function P(e){if(!e.model.trim()||!Number.isInteger(e.dimensions)||e.dimensions<1||e.dimensions>65536)throw new Error("Repository embedding metadata is invalid");if(e.vector.length!==e.dimensions||e.vector.some(t=>!Number.isFinite(t)))throw new Error("Repository embedding vector is invalid");return{...e,model:e.model.trim(),vector:[...e.vector]}}function H(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>typeof t=="string"&&t.trim()).map(([t,n])=>[t,String(n).trim()]))}function K(e){return(e.normalize("NFKC").toLowerCase().match(/[\p{L}\p{N}_$.-]{2,}/gu)??[]).flatMap(t=>Xe(t)).filter(t=>t.length>=2&&!ae.has(t))}function Xe(e){let n=e.replace(/([a-z0-9])([A-Z])/gu,"$1 $2").replace(/[.$/_-]+/gu," ").toLowerCase().split(/\s+/u).filter(Boolean);return n.length>1?[e.toLowerCase(),...n]:n}function ve(e){let t=new Map;for(let n of K(e))if(t.set(n,(t.get(n)??0)+1),t.size>=oe)break;return Object.fromEntries([...t.entries()].sort(([n],[r])=>n.localeCompare(r)))}function $e(e,t){let n=new Map;for(let r of e)n.set(t(r),[...n.get(t(r))??[],r]);return n}function j(e){return L(g(e).split("/").pop()??e).replace(/\.(test|spec)$/u,"").replace(/[-_]?(tests?|specs?)$/u,"")}function L(e){return e.replace(/\.(d\.)?(c|m)?(js|ts)x?$|\.(py|go|rs|java|cs|cpp|cxx|cc|c|h|hpp|rb|php|swift|kt|kts|md|mdx)$/u,"")}function W(e){let t=g(e);if(!t||t.startsWith("/")||/^[A-Za-z]:\//u.test(t)||t.split("/").includes(".."))throw new Error(`Repository path must be relative and confined: ${e}`);return t}function g(e){return e.replace(/\\/gu,"/").replace(/^\.\//u,"").replace(/\/{2,}/gu,"/")}function Z(e){return e.replace(/\r\n?/gu,`
|
|
8
|
+
`)}function Fe(e){return e?e.split(`
|
|
9
|
+
`).length:1}function Ce(e,t){return`${e.workspaceId}:${e.path}`.localeCompare(`${t.workspaceId}:${t.path}`)}function S(e,t){return`${e}_${b(t).slice(0,24)}`}function b(e){return ee("sha256").update(e,"utf8").digest("hex")}function X(e){return JSON.stringify(D(e))}function D(e){return Array.isArray(e)?e.map(D):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>[t,D(n)]))}function C(e,t,n,r){if(!Number.isInteger(e)||e<t||e>n)throw new Error(`${r} must be an integer between ${t} and ${n}`);return e}function B(e,t){if(!Number.isFinite(Date.parse(e)))throw new Error(`${t} must be an ISO timestamp`);return e}function T(e){return Math.round(e*1e6)/1e6}import{randomUUID as Me}from"node:crypto";import{mkdir as Ne,readFile as Ae,stat as Y,writeFile as ze}from"node:fs/promises";import{dirname as Te,resolve as De}from"node:path";import*as R from"node:fs/promises";var U=Symbol.for("@xenosystem/agent-sdk/file-cache"),J=globalThis,O=J[U]??{entries:new Map,counters:{reads:0,hits:0}};J[U]=O;var Ue=O.entries,Je=O.counters;var _e=new Set(["EACCES","EBUSY","EPERM"]),Le=[10,20,40,80,160,320,640];async function G(e,t){for(let n=0;;n+=1)try{await R.rename(e,t);return}catch(r){let i=r.code,a=Le[n];if(process.platform!=="win32"||!i||!_e.has(i)||a===void 0)throw r;await new Promise(s=>setTimeout(s,a))}}var M=512*1024*1024,V=class{path;constructor(t){this.path=De(t)}async exists(){try{return(await Y(this.path)).isFile()}catch{return!1}}async load(){let t=await Y(this.path);if(!t.isFile())throw new Error("Repository index path is not a regular file");if(t.size>M)throw new Error(`Repository index exceeds ${M} bytes`);let n;try{n=JSON.parse(await Ae(this.path,"utf8"))}catch(r){throw new Error(`Repository index is invalid JSON: ${r instanceof Error?r.message:String(r)}`)}return k(n)}async save(t){k(t);let n=`${JSON.stringify(t)}
|
|
10
|
+
`;if(Buffer.byteLength(n,"utf8")>M)throw new Error(`Repository index exceeds ${M} bytes`);await Ne(Te(this.path),{recursive:!0,mode:448});let r=`${this.path}.${process.pid}.${Me()}.tmp`;await ze(r,n,{encoding:"utf8",mode:384,flag:"wx"}),await G(r,this.path)}};export{z as XENO_REPOSITORY_INDEX_SCHEMA_VERSION,V as XenoRepositoryIndexFileStore,ce as buildXenoRepositoryIndex,qe as buildXenoRepositoryIndexWithEmbeddings,de as detectRepositoryDocumentKind,q as detectRepositoryLanguage,We as inspectXenoRepositoryFreshness,Ke as inspectXenoRepositorySymbol,Pe as searchXenoRepositoryIndex,k as validateXenoRepositoryIndex};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/intelligence/types.ts":{"bytes":5352,"imports":[],"format":"esm"},"src/intelligence/repository-index.ts":{"bytes":33925,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/intelligence/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/utils/fs.ts":{"bytes":
|
|
1
|
+
{"inputs":{"src/intelligence/types.ts":{"bytes":5352,"imports":[],"format":"esm"},"src/intelligence/repository-index.ts":{"bytes":33925,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/intelligence/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/utils/file-cache.ts":{"bytes":6195,"imports":[{"path":"node:fs","kind":"import-statement","external":true}],"format":"esm"},"src/utils/fs.ts":{"bytes":13885,"imports":[{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:fs/promises","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"src/utils/file-cache.ts","kind":"import-statement","original":"./file-cache.js"}],"format":"esm"},"src/intelligence/file-store.ts":{"bytes":1879,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"node:fs/promises","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"src/utils/fs.ts","kind":"import-statement","original":"../utils/fs.js"},{"path":"src/intelligence/repository-index.ts","kind":"import-statement","original":"./repository-index.js"}],"format":"esm"},"src/intelligence/index.ts":{"bytes":100,"imports":[{"path":"src/intelligence/types.ts","kind":"import-statement","original":"./types.js"},{"path":"src/intelligence/repository-index.ts","kind":"import-statement","original":"./repository-index.js"},{"path":"src/intelligence/file-store.ts","kind":"import-statement","original":"./file-store.js"}],"format":"esm"}},"outputs":{"dist/intelligence/index.cjs":{"imports":[{"path":"node:crypto","kind":"require-call","external":true},{"path":"node:crypto","kind":"require-call","external":true},{"path":"node:fs/promises","kind":"require-call","external":true},{"path":"node:path","kind":"require-call","external":true},{"path":"node:fs/promises","kind":"require-call","external":true}],"exports":[],"entryPoint":"src/intelligence/index.ts","inputs":{"src/intelligence/index.ts":{"bytesInOutput":402},"src/intelligence/types.ts":{"bytesInOutput":33},"src/intelligence/repository-index.ts":{"bytesInOutput":16440},"src/intelligence/file-store.ts":{"bytesInOutput":960},"src/utils/fs.ts":{"bytesInOutput":319},"src/utils/file-cache.ts":{"bytesInOutput":162}},"bytes":19219}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/intelligence/types.ts":{"bytes":5352,"imports":[],"format":"esm"},"src/intelligence/repository-index.ts":{"bytes":33925,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/intelligence/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/utils/fs.ts":{"bytes":
|
|
1
|
+
{"inputs":{"src/intelligence/types.ts":{"bytes":5352,"imports":[],"format":"esm"},"src/intelligence/repository-index.ts":{"bytes":33925,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/intelligence/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/utils/file-cache.ts":{"bytes":6195,"imports":[{"path":"node:fs","kind":"import-statement","external":true}],"format":"esm"},"src/utils/fs.ts":{"bytes":13885,"imports":[{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:fs/promises","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"src/utils/file-cache.ts","kind":"import-statement","original":"./file-cache.js"}],"format":"esm"},"src/intelligence/file-store.ts":{"bytes":1879,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"node:fs/promises","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"src/utils/fs.ts","kind":"import-statement","original":"../utils/fs.js"},{"path":"src/intelligence/repository-index.ts","kind":"import-statement","original":"./repository-index.js"}],"format":"esm"},"src/intelligence/index.ts":{"bytes":100,"imports":[{"path":"src/intelligence/types.ts","kind":"import-statement","original":"./types.js"},{"path":"src/intelligence/repository-index.ts","kind":"import-statement","original":"./repository-index.js"},{"path":"src/intelligence/file-store.ts","kind":"import-statement","original":"./file-store.js"}],"format":"esm"}},"outputs":{"dist/intelligence/index.js":{"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"node:crypto","kind":"import-statement","external":true},{"path":"node:fs/promises","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"node:fs/promises","kind":"import-statement","external":true}],"exports":["XENO_REPOSITORY_INDEX_SCHEMA_VERSION","XenoRepositoryIndexFileStore","buildXenoRepositoryIndex","buildXenoRepositoryIndexWithEmbeddings","detectRepositoryDocumentKind","detectRepositoryLanguage","inspectXenoRepositoryFreshness","inspectXenoRepositorySymbol","searchXenoRepositoryIndex","validateXenoRepositoryIndex"],"entryPoint":"src/intelligence/index.ts","inputs":{"src/intelligence/types.ts":{"bytesInOutput":33},"src/intelligence/index.ts":{"bytesInOutput":0},"src/intelligence/repository-index.ts":{"bytesInOutput":16439},"src/intelligence/file-store.ts":{"bytesInOutput":968},"src/utils/fs.ts":{"bytesInOutput":313},"src/utils/file-cache.ts":{"bytesInOutput":156}},"bytes":18271}}}
|
package/dist/mcp/index.d.cts
CHANGED
|
@@ -750,6 +750,11 @@ interface MemoryManagerOptions {
|
|
|
750
750
|
maxCharsPerSession?: number;
|
|
751
751
|
};
|
|
752
752
|
}
|
|
753
|
+
interface PromptMemoryBundle {
|
|
754
|
+
resolved: ResolvedMemory;
|
|
755
|
+
projectSessionContext?: ProjectSessionContext;
|
|
756
|
+
prompt: string;
|
|
757
|
+
}
|
|
753
758
|
type MemoryAccessScope = "none" | "session" | "project" | "user";
|
|
754
759
|
declare class MemoryManager {
|
|
755
760
|
private cwd;
|
|
@@ -776,6 +781,11 @@ declare class MemoryManager {
|
|
|
776
781
|
maxTokens?: number;
|
|
777
782
|
maxCharsPerSession?: number;
|
|
778
783
|
}): Promise<ProjectSessionContext>;
|
|
784
|
+
private readRecentTranscriptExcerpt;
|
|
785
|
+
loadPromptBundle(options?: {
|
|
786
|
+
excludeSessionId?: string;
|
|
787
|
+
includeProjectSessionContext?: boolean;
|
|
788
|
+
}): Promise<PromptMemoryBundle>;
|
|
779
789
|
private filterProjectSessions;
|
|
780
790
|
private normalizePath;
|
|
781
791
|
private extractRecentTranscriptExcerpt;
|
package/dist/mcp/index.d.ts
CHANGED
|
@@ -750,6 +750,11 @@ interface MemoryManagerOptions {
|
|
|
750
750
|
maxCharsPerSession?: number;
|
|
751
751
|
};
|
|
752
752
|
}
|
|
753
|
+
interface PromptMemoryBundle {
|
|
754
|
+
resolved: ResolvedMemory;
|
|
755
|
+
projectSessionContext?: ProjectSessionContext;
|
|
756
|
+
prompt: string;
|
|
757
|
+
}
|
|
753
758
|
type MemoryAccessScope = "none" | "session" | "project" | "user";
|
|
754
759
|
declare class MemoryManager {
|
|
755
760
|
private cwd;
|
|
@@ -776,6 +781,11 @@ declare class MemoryManager {
|
|
|
776
781
|
maxTokens?: number;
|
|
777
782
|
maxCharsPerSession?: number;
|
|
778
783
|
}): Promise<ProjectSessionContext>;
|
|
784
|
+
private readRecentTranscriptExcerpt;
|
|
785
|
+
loadPromptBundle(options?: {
|
|
786
|
+
excludeSessionId?: string;
|
|
787
|
+
includeProjectSessionContext?: boolean;
|
|
788
|
+
}): Promise<PromptMemoryBundle>;
|
|
779
789
|
private filterProjectSessions;
|
|
780
790
|
private normalizePath;
|
|
781
791
|
private extractRecentTranscriptExcerpt;
|