@xenosystem/agent-sdk 0.8.12

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 (175) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +511 -0
  3. package/dist/agents/index.cjs +17 -0
  4. package/dist/agents/index.d.cts +244 -0
  5. package/dist/agents/index.d.ts +244 -0
  6. package/dist/agents/index.js +17 -0
  7. package/dist/agents/metafile-cjs.json +1 -0
  8. package/dist/agents/metafile-esm.json +1 -0
  9. package/dist/artifacts/browser.cjs +1 -0
  10. package/dist/artifacts/browser.d.cts +8 -0
  11. package/dist/artifacts/browser.d.ts +8 -0
  12. package/dist/artifacts/browser.js +1 -0
  13. package/dist/artifacts/diff-artifact-C2tQZWcs.d.cts +354 -0
  14. package/dist/artifacts/diff-artifact-C2tQZWcs.d.ts +354 -0
  15. package/dist/artifacts/index.cjs +10 -0
  16. package/dist/artifacts/index.d.cts +588 -0
  17. package/dist/artifacts/index.d.ts +588 -0
  18. package/dist/artifacts/index.js +10 -0
  19. package/dist/artifacts/metafile-cjs.json +1 -0
  20. package/dist/artifacts/metafile-esm.json +1 -0
  21. package/dist/automation/index.cjs +438 -0
  22. package/dist/automation/index.d.cts +878 -0
  23. package/dist/automation/index.d.ts +878 -0
  24. package/dist/automation/index.js +438 -0
  25. package/dist/automation/metafile-cjs.json +1 -0
  26. package/dist/automation/metafile-esm.json +1 -0
  27. package/dist/control-plane/index.cjs +7 -0
  28. package/dist/control-plane/index.d.cts +403 -0
  29. package/dist/control-plane/index.d.ts +403 -0
  30. package/dist/control-plane/index.js +7 -0
  31. package/dist/control-plane/metafile-cjs.json +1 -0
  32. package/dist/control-plane/metafile-esm.json +1 -0
  33. package/dist/control-room/index.cjs +1 -0
  34. package/dist/control-room/index.d.cts +216 -0
  35. package/dist/control-room/index.d.ts +216 -0
  36. package/dist/control-room/index.js +1 -0
  37. package/dist/control-room/metafile-cjs.json +1 -0
  38. package/dist/control-room/metafile-esm.json +1 -0
  39. package/dist/electron/index.cjs +1476 -0
  40. package/dist/electron/index.d.cts +1583 -0
  41. package/dist/electron/index.d.ts +1583 -0
  42. package/dist/electron/index.js +1476 -0
  43. package/dist/electron/metafile-cjs.json +1 -0
  44. package/dist/electron/metafile-esm.json +1 -0
  45. package/dist/governance/index.cjs +33 -0
  46. package/dist/governance/index.d.cts +397 -0
  47. package/dist/governance/index.d.ts +397 -0
  48. package/dist/governance/index.js +33 -0
  49. package/dist/governance/metafile-cjs.json +1 -0
  50. package/dist/governance/metafile-esm.json +1 -0
  51. package/dist/hooks/index.cjs +9 -0
  52. package/dist/hooks/index.d.cts +198 -0
  53. package/dist/hooks/index.d.ts +198 -0
  54. package/dist/hooks/index.js +9 -0
  55. package/dist/hooks/metafile-cjs.json +1 -0
  56. package/dist/hooks/metafile-esm.json +1 -0
  57. package/dist/hosted/index.cjs +1 -0
  58. package/dist/hosted/index.d.cts +490 -0
  59. package/dist/hosted/index.d.ts +490 -0
  60. package/dist/hosted/index.js +1 -0
  61. package/dist/hosted/metafile-cjs.json +1 -0
  62. package/dist/hosted/metafile-esm.json +1 -0
  63. package/dist/index.cjs +2161 -0
  64. package/dist/index.d.cts +12259 -0
  65. package/dist/index.d.ts +12259 -0
  66. package/dist/index.js +2161 -0
  67. package/dist/intelligence/index.cjs +10 -0
  68. package/dist/intelligence/index.d.cts +220 -0
  69. package/dist/intelligence/index.d.ts +220 -0
  70. package/dist/intelligence/index.js +10 -0
  71. package/dist/intelligence/metafile-cjs.json +1 -0
  72. package/dist/intelligence/metafile-esm.json +1 -0
  73. package/dist/mcp/index.cjs +28 -0
  74. package/dist/mcp/index.d.cts +960 -0
  75. package/dist/mcp/index.d.ts +960 -0
  76. package/dist/mcp/index.js +28 -0
  77. package/dist/mcp/metafile-cjs.json +1 -0
  78. package/dist/mcp/metafile-esm.json +1 -0
  79. package/dist/metafile-cjs.json +1 -0
  80. package/dist/metafile-esm.json +1 -0
  81. package/dist/oracle/index.cjs +1 -0
  82. package/dist/oracle/index.d.cts +310 -0
  83. package/dist/oracle/index.d.ts +310 -0
  84. package/dist/oracle/index.js +1 -0
  85. package/dist/oracle/metafile-cjs.json +1 -0
  86. package/dist/oracle/metafile-esm.json +1 -0
  87. package/dist/providers/index.cjs +11 -0
  88. package/dist/providers/index.d.cts +462 -0
  89. package/dist/providers/index.d.ts +462 -0
  90. package/dist/providers/index.js +11 -0
  91. package/dist/providers/metafile-cjs.json +1 -0
  92. package/dist/providers/metafile-esm.json +1 -0
  93. package/dist/recipes/index.cjs +2 -0
  94. package/dist/recipes/index.d.cts +86 -0
  95. package/dist/recipes/index.d.ts +86 -0
  96. package/dist/recipes/index.js +2 -0
  97. package/dist/recipes/metafile-cjs.json +1 -0
  98. package/dist/recipes/metafile-esm.json +1 -0
  99. package/dist/research/index.cjs +3 -0
  100. package/dist/research/index.d.cts +285 -0
  101. package/dist/research/index.d.ts +285 -0
  102. package/dist/research/index.js +3 -0
  103. package/dist/research/metafile-cjs.json +1 -0
  104. package/dist/research/metafile-esm.json +1 -0
  105. package/dist/session/index.cjs +56 -0
  106. package/dist/session/index.d.cts +523 -0
  107. package/dist/session/index.d.ts +523 -0
  108. package/dist/session/index.js +56 -0
  109. package/dist/session/metafile-cjs.json +1 -0
  110. package/dist/session/metafile-esm.json +1 -0
  111. package/dist/sharing/index.cjs +4 -0
  112. package/dist/sharing/index.d.cts +272 -0
  113. package/dist/sharing/index.d.ts +272 -0
  114. package/dist/sharing/index.js +4 -0
  115. package/dist/sharing/metafile-cjs.json +1 -0
  116. package/dist/sharing/metafile-esm.json +1 -0
  117. package/dist/skills/index.cjs +6 -0
  118. package/dist/skills/index.d.cts +277 -0
  119. package/dist/skills/index.d.ts +277 -0
  120. package/dist/skills/index.js +6 -0
  121. package/dist/skills/metafile-cjs.json +1 -0
  122. package/dist/skills/metafile-esm.json +1 -0
  123. package/dist/soul/index.cjs +32 -0
  124. package/dist/soul/index.d.cts +138 -0
  125. package/dist/soul/index.d.ts +138 -0
  126. package/dist/soul/index.js +32 -0
  127. package/dist/soul/metafile-cjs.json +1 -0
  128. package/dist/soul/metafile-esm.json +1 -0
  129. package/dist/terminal/index.cjs +4 -0
  130. package/dist/terminal/index.d.cts +55 -0
  131. package/dist/terminal/index.d.ts +55 -0
  132. package/dist/terminal/index.js +4 -0
  133. package/dist/terminal/metafile-cjs.json +1 -0
  134. package/dist/terminal/metafile-esm.json +1 -0
  135. package/dist/ui/index.cjs +35 -0
  136. package/dist/ui/index.d.cts +298 -0
  137. package/dist/ui/index.d.ts +298 -0
  138. package/dist/ui/index.js +35 -0
  139. package/dist/ui/metafile-cjs.json +1 -0
  140. package/dist/ui/metafile-esm.json +1 -0
  141. package/dist/utils/index.cjs +23 -0
  142. package/dist/utils/index.d.cts +245 -0
  143. package/dist/utils/index.d.ts +245 -0
  144. package/dist/utils/index.js +23 -0
  145. package/dist/utils/metafile-cjs.json +1 -0
  146. package/dist/utils/metafile-esm.json +1 -0
  147. package/native/mxc/LICENSE.microsoft-mxc-sdk.md +21 -0
  148. package/native/mxc/README.md +25 -0
  149. package/native/mxc/bin/arm64/lxc-exec +0 -0
  150. package/native/mxc/bin/arm64/mxc-exec-mac +0 -0
  151. package/native/mxc/bin/arm64/wxc-exec.exe +0 -0
  152. package/native/mxc/bin/arm64/wxc-host-prep.exe +0 -0
  153. package/native/mxc/bin/x64/lxc-exec +0 -0
  154. package/native/mxc/bin/x64/wxc-exec.exe +0 -0
  155. package/native/mxc/bin/x64/wxc-host-prep.exe +0 -0
  156. package/native/mxc/package.json +58 -0
  157. package/ownership/CLEAN_ROOM_CONTRIBUTOR_GUIDE.md +63 -0
  158. package/ownership/audit.mjs +727 -0
  159. package/ownership/evidence/PROPRIETARY-COMMAND-1/implementation-record.md +77 -0
  160. package/ownership/evidence/PROPRIETARY-COMMAND-1/provenance-review.md +51 -0
  161. package/ownership/evidence/PROPRIETARY-MEDIA-1/implementation-record.md +131 -0
  162. package/ownership/evidence/PROPRIETARY-MEDIA-1/provenance-review.md +50 -0
  163. package/ownership/evidence/PROPRIETARY-PTY-1/implementation-record.md +86 -0
  164. package/ownership/evidence/PROPRIETARY-PTY-1/provenance-review.md +52 -0
  165. package/ownership/evidence/PROPRIETARY-RUNTIME-1/implementation-record.md +68 -0
  166. package/ownership/evidence/PROPRIETARY-RUNTIME-1/provenance-review.md +32 -0
  167. package/ownership/evidence/PROPRIETARY-TOOLCHAIN-1/implementation-record.md +53 -0
  168. package/ownership/evidence/PROPRIETARY-TOOLCHAIN-1/provenance-review.md +32 -0
  169. package/ownership/evidence/PROPRIETARY-UI-1/implementation-record.md +96 -0
  170. package/ownership/evidence/PROPRIETARY-UI-1/provenance-review.md +46 -0
  171. package/ownership/ownership-policy.json +232 -0
  172. package/ownership/ownership-policy.schema.json +192 -0
  173. package/ownership/templates/clean-room-implementation-record.md +70 -0
  174. package/ownership/templates/provenance-review.md +51 -0
  175. package/package.json +209 -0
@@ -0,0 +1,32 @@
1
+ var f=class{dimension;idfCounts=new Map;totalDocs=0;constructor(e){this.dimension=e}tokenize(e){return e.toLowerCase().replace(/[^a-z0-9\s]/g," ").split(/\s+/).filter(t=>t.length>1&&t.length<40)}hashToDim(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r)|0;return Math.abs(t)%this.dimension}updateIdf(e){let t=new Set(this.tokenize(e));for(let r of t)this.idfCounts.set(r,(this.idfCounts.get(r)??0)+1);this.totalDocs++}embed(e){let t=new Float64Array(this.dimension),r=this.tokenize(e);if(r.length===0)return Array.from(t);let o=new Map;for(let n of r)o.set(n,(o.get(n)??0)+1);for(let[n,a]of o){let l=a/r.length,d=this.idfCounts.get(n)??0,g=d>0?Math.log((this.totalDocs+1)/(d+1))+1:1,I=l*g,P=this.hashToDim(n);t[P]+=I}let i=0;for(let n=0;n<this.dimension;n++)i+=t[n]*t[n];if(i=Math.sqrt(i),i>0)for(let n=0;n<this.dimension;n++)t[n]=t[n]/i;return Array.from(t)}};function T(s,e){if(s.length!==e.length)return 0;let t=0,r=0,o=0;for(let n=0;n<s.length;n++)t+=s[n]*e[n],r+=s[n]*s[n],o+=e[n]*e[n];let i=Math.sqrt(r)*Math.sqrt(o);return i>0?t/i:0}var c=class{documents=new Map;insertionOrder=[];maxDocuments;embedder;customEmbedFn;constructor(e){this.maxDocuments=e?.maxDocuments??1e4,this.embedder=new f(e?.embeddingDimension??256),this.customEmbedFn=e?.embedFn}async addDocument(e,t,r={}){for(;this.documents.size>=this.maxDocuments&&this.insertionOrder.length>0;){let n=this.insertionOrder.shift();this.documents.delete(n)}this.embedder.updateIdf(t);let o=this.customEmbedFn?await this.customEmbedFn(t):this.embedder.embed(t),i={id:e,content:t,embedding:o,metadata:r};this.documents.set(e,i),this.insertionOrder.push(e)}async search(e,t=5,r=.1){let o=this.customEmbedFn?await this.customEmbedFn(e):this.embedder.embed(e),i=[];for(let n of this.documents.values()){let a=T(o,n.embedding);a>=r&&i.push({id:n.id,content:n.content,score:a,metadata:n.metadata})}return i.sort((n,a)=>a.score-n.score),i.slice(0,t)}removeDocument(e){let t=this.documents.delete(e);if(t){let r=this.insertionOrder.indexOf(e);r>=0&&this.insertionOrder.splice(r,1)}return t}getDocument(e){return this.documents.get(e)}get size(){return this.documents.size}clear(){this.documents.clear(),this.insertionOrder=[]}exportDocuments(){return Array.from(this.documents.values())}importDocuments(e){for(let t of e)this.documents.set(t.id,t),this.insertionOrder.push(t.id)}};function D(s){return[s.task,s.summary,...s.tags??[]].filter(Boolean).join(`
2
+ `)}var m=class s{index;byId=new Map;constructor(e={}){this.index=new c({maxDocuments:e.maxEpisodes??5e3})}async add(e){this.byId.set(e.id,e),await this.index.addDocument(e.id,D(e),{kind:"episode",outcome:e.outcome})}async recall(e,t=5,r=.1){let o=await this.index.search(e,t,r),i=[];for(let n of o){let a=this.byId.get(n.id);a&&i.push({episode:a,score:n.score})}return i}get(e){return this.byId.get(e)}all(){return[...this.byId.values()]}get size(){return this.byId.size}toJSON(){return this.all()}static async fromEpisodes(e,t={}){let r=new s(t);for(let o of e)await r.add(o);return r}};function R(s){return[s.name,s.trigger,...s.tags??[]].filter(Boolean).join(`
3
+ `)}var u=class s{index;byId=new Map;constructor(e={}){this.index=new c({maxDocuments:e.maxSkills??5e3})}async add(e){this.byId.set(e.id,e),await this.index.addDocument(e.id,R(e),{kind:"skill",name:e.name})}async recall(e,t=5,r=.1){let o=await this.index.search(e,t,r),i=[];for(let n of o){let a=this.byId.get(n.id);a&&i.push({skill:a,score:n.score})}return i}nextVersion(e){let t=0;for(let r of this.byId.values())r.name===e&&r.version>t&&(t=r.version);return t+1}get(e){return this.byId.get(e)}all(){return[...this.byId.values()]}get size(){return this.byId.size}toJSON(){return this.all()}static async fromSkills(e,t={}){let r=new s(t);for(let o of e)await r.add(o);return r}};import{randomUUID as C}from"node:crypto";function S(s){let e=s.indexOf("{");if(e<0)return null;let t=0,r=!1,o=!1;for(let i=e;i<s.length;i++){let n=s[i];if(r){o?o=!1:n==="\\"?o=!0:n==='"'&&(r=!1);continue}if(n==='"')r=!0;else if(n==="{")t++;else if(n==="}"&&(t--,t===0)){let a=s.slice(e,i+1);try{let l=JSON.parse(a);return l&&typeof l=="object"&&!Array.isArray(l)?l:null}catch{return null}}}return null}function p(s){let e=t=>{if(Array.isArray(t))return t.map(e);if(t&&typeof t=="object"){let r=t,o={};for(let i of Object.keys(r).sort())i!=="signature"&&(o[i]=e(r[i]));return o}return t};return JSON.stringify(e(s))}var A=`You distill REUSABLE SKILLS from a completed agent task.
4
+ Given the task and a transcript of how it was solved, extract ONE general, reusable
5
+ procedure that would help on similar future tasks \u2014 not a recap of this specific run.
6
+
7
+ Respond with ONLY a JSON object, no prose, no code fences:
8
+ {
9
+ "name": "<short imperative skill name>",
10
+ "trigger": "<when to use this skill \u2014 the situation that should recall it>",
11
+ "procedure": "<numbered, reusable steps>",
12
+ "tags": ["<short>", "<keywords>"]
13
+ }
14
+ If no general skill is worth keeping, respond with exactly: {}`,z=6e3;function j(s,e){return s.length<=e?s:s.slice(0,e)+`
15
+ \u2026[truncated]`}async function y(s){let e=s.now??(()=>new Date),t=s.idGen??(()=>C()),r=`TASK:
16
+ ${s.task}
17
+
18
+ TRANSCRIPT:
19
+ ${j(s.transcript,z)}
20
+
21
+ Produce one reusable skill as JSON, or {} if none is worth keeping.`,o;try{o=await s.complete([{role:"system",content:A},{role:"user",content:r}])}catch{return null}let i=S(o);if(!i)return null;let n=typeof i.name=="string"?i.name.trim():"",a=typeof i.procedure=="string"?i.procedure.trim():"";if(!n||!a)return null;let l=typeof i.trigger=="string"?i.trigger.trim():"",d=Array.isArray(i.tags)?i.tags.filter(g=>typeof g=="string"&&g.trim().length>0):[];return{id:t(),name:n,trigger:l,procedure:a,...d.length>0?{tags:d}:{},version:1,createdAt:e().toISOString(),...s.sourceEpisodeId?{sourceEpisodeId:s.sourceEpisodeId}:{}}}import{createPrivateKey as N,createPublicKey as b,generateKeyPairSync as F,sign as K,verify as V}from"node:crypto";function J(s){let e=s?N(s):F("ed25519").privateKey,r=b(e).export({type:"spki",format:"pem"}).toString(),o=e.export({type:"pkcs8",format:"pem"}).toString();return{publicKeyPem:r,privateKeyPem:o,sign(i){return K(null,Buffer.from(i,"utf8"),e).toString("base64")}}}function x(s,e,t){try{let r=b(t);return V(null,Buffer.from(s,"utf8"),r,Buffer.from(e,"base64"))}catch{return!1}}function M(s,e){return typeof s.signature!="string"||s.signature.length===0?!1:x(p(s),s.signature,e)}import{mkdir as $,readFile as v,writeFile as w}from"node:fs/promises";import{join as h}from"node:path";import{randomUUID as G}from"node:crypto";var E="episodes.jsonl",O="skills.json";async function L(s){let e;try{e=await v(s,"utf8")}catch(r){if(r.code==="ENOENT")return[];throw r}let t=[];for(let r of e.split(`
22
+ `)){let o=r.trim();o&&t.push(JSON.parse(o))}return t}async function B(s,e){try{return JSON.parse(await v(s,"utf8"))}catch(t){if(t.code==="ENOENT")return e;throw t}}var k=class s{episodes;skills;dir;complete;signer;minStepsForSkill;now;idGen;constructor(e,t,r){this.episodes=e,this.skills=t,this.dir=r.dir,this.complete=r.complete,this.signer=r.signer,this.minStepsForSkill=r.minStepsForSkill??3,this.now=r.now??(()=>new Date),this.idGen=r.idGen??(()=>G())}static async create(e={}){let t=[],r=[];e.dir&&(t=await L(h(e.dir,E)),r=await B(h(e.dir,O),[]));let o=await m.fromEpisodes(t,{...e.maxEpisodes!==void 0?{maxEpisodes:e.maxEpisodes}:{}}),i=await u.fromSkills(r,{...e.maxSkills!==void 0?{maxSkills:e.maxSkills}:{}});return new s(o,i,e)}async onTaskComplete(e){let t=e.summary??await this.deriveSummary(e),r=this.maybeSign({id:this.idGen(),task:e.task,outcome:e.outcome,summary:t,...e.steps&&e.steps.length>0?{steps:e.steps}:{},...e.tags&&e.tags.length>0?{tags:e.tags}:{},createdAt:this.now().toISOString()});await this.episodes.add(r);let o=null;if((e.synthesizeSkill??this.shouldSynthesize(e))&&this.complete){let n={task:e.task,transcript:e.transcript,complete:this.complete,sourceEpisodeId:r.id,now:this.now,idGen:this.idGen},a=await y(n);a&&(o=this.maybeSign({...a,version:this.skills.nextVersion(a.name)}),await this.skills.add(o))}return this.dir&&await this.save(),{episode:r,skill:o}}async augmentContext(e,t={}){let r=t.minScore??.1,o=await this.skills.recall(e,t.maxSkills??3,r),i=await this.episodes.recall(e,t.maxEpisodes??3,r);if(o.length===0&&i.length===0)return"";let n=[];if(o.length>0){n.push("## Skills learned from experience");for(let{skill:a}of o){let l=a.procedure.length>280?a.procedure.slice(0,280)+"\u2026":a.procedure;n.push(`- **${a.name}** \u2014 use when ${a.trigger||"relevant"}
23
+ ${l.replace(/\n/g,`
24
+ `)}`)}}if(i.length>0){n.push("## Relevant past experience");for(let{episode:a}of i)n.push(`- [${a.outcome}] ${a.task} \u2014 ${a.summary}`)}return n.join(`
25
+ `)}async save(){if(!this.dir)return;await $(this.dir,{recursive:!0});let e=this.episodes.all().map(t=>JSON.stringify(t)).join(`
26
+ `);await w(h(this.dir,E),e?e+`
27
+ `:"","utf8"),await w(h(this.dir,O),JSON.stringify(this.skills.all(),null,2)+`
28
+ `,"utf8")}getPublicKeyPem(){return this.signer?.publicKeyPem}shouldSynthesize(e){return e.outcome!=="success"?!1:(e.steps?.length??0)>=this.minStepsForSkill||e.transcript.length>=400}async deriveSummary(e){if(this.complete)try{let r=(await this.complete([{role:"system",content:"Summarize, in 1-2 sentences, what was attempted and what worked or failed. Output only the summary."},{role:"user",content:`TASK: ${e.task}
29
+ OUTCOME: ${e.outcome}
30
+
31
+ ${e.transcript.slice(0,4e3)}`}])).trim();if(r)return r}catch{}return this.heuristicSummary(e)}heuristicSummary(e){let t=e.transcript.split(`
32
+ `).map(i=>i.trim()).filter(i=>i.length>0);if(t.length===0)return`Task "${e.task}" ended: ${e.outcome}.`;let r=t[0]??"",o=t.length>1?t[t.length-1]??"":"";return o&&o!==r?`${r} \u2026 ${o}`:r}maybeSign(e){return this.signer?{...e,signature:this.signer.sign(p(e))}:e}};export{m as EpisodicStore,u as SkillStore,k as SoulEngine,p as canonicalPayload,J as createEd25519Signer,S as extractJsonObject,y as synthesizeSkill,x as verifySignature,M as verifySoulRecord};
@@ -0,0 +1 @@
1
+ {"inputs":{"src/memory/vector-store.ts":{"bytes":12251,"imports":[],"format":"esm"},"src/soul/episodic-store.ts":{"bytes":3034,"imports":[{"path":"src/memory/vector-store.ts","kind":"import-statement","original":"../memory/vector-store.js"}],"format":"esm"},"src/soul/skill-store.ts":{"bytes":3229,"imports":[{"path":"src/memory/vector-store.ts","kind":"import-statement","original":"../memory/vector-store.js"}],"format":"esm"},"src/soul/json.ts":{"bytes":2193,"imports":[],"format":"esm"},"src/soul/synthesizer.ts":{"bytes":3561,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/soul/json.ts","kind":"import-statement","original":"./json.js"}],"format":"esm"},"src/soul/signing.ts":{"bytes":3085,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/soul/json.ts","kind":"import-statement","original":"./json.js"}],"format":"esm"},"src/soul/soul.ts":{"bytes":11060,"imports":[{"path":"node:fs/promises","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/soul/episodic-store.ts","kind":"import-statement","original":"./episodic-store.js"},{"path":"src/soul/skill-store.ts","kind":"import-statement","original":"./skill-store.js"},{"path":"src/soul/synthesizer.ts","kind":"import-statement","original":"./synthesizer.js"},{"path":"src/soul/json.ts","kind":"import-statement","original":"./json.js"}],"format":"esm"},"src/soul/index.ts":{"bytes":1478,"imports":[{"path":"src/soul/episodic-store.ts","kind":"import-statement","original":"./episodic-store.js"},{"path":"src/soul/skill-store.ts","kind":"import-statement","original":"./skill-store.js"},{"path":"src/soul/synthesizer.ts","kind":"import-statement","original":"./synthesizer.js"},{"path":"src/soul/json.ts","kind":"import-statement","original":"./json.js"},{"path":"src/soul/signing.ts","kind":"import-statement","original":"./signing.js"},{"path":"src/soul/soul.ts","kind":"import-statement","original":"./soul.js"}],"format":"esm"}},"outputs":{"dist/soul/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:crypto","kind":"require-call","external":true}],"exports":[],"entryPoint":"src/soul/index.ts","inputs":{"src/soul/index.ts":{"bytesInOutput":230},"src/memory/vector-store.ts":{"bytesInOutput":2350},"src/soul/episodic-store.ts":{"bytesInOutput":664},"src/soul/skill-store.ts":{"bytesInOutput":755},"src/soul/synthesizer.ts":{"bytesInOutput":1439},"src/soul/json.ts":{"bytesInOutput":574},"src/soul/signing.ts":{"bytesInOutput":606},"src/soul/soul.ts":{"bytesInOutput":3437}},"bytes":10643}}}
@@ -0,0 +1 @@
1
+ {"inputs":{"src/memory/vector-store.ts":{"bytes":12251,"imports":[],"format":"esm"},"src/soul/episodic-store.ts":{"bytes":3034,"imports":[{"path":"src/memory/vector-store.ts","kind":"import-statement","original":"../memory/vector-store.js"}],"format":"esm"},"src/soul/skill-store.ts":{"bytes":3229,"imports":[{"path":"src/memory/vector-store.ts","kind":"import-statement","original":"../memory/vector-store.js"}],"format":"esm"},"src/soul/json.ts":{"bytes":2193,"imports":[],"format":"esm"},"src/soul/synthesizer.ts":{"bytes":3561,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/soul/json.ts","kind":"import-statement","original":"./json.js"}],"format":"esm"},"src/soul/signing.ts":{"bytes":3085,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/soul/json.ts","kind":"import-statement","original":"./json.js"}],"format":"esm"},"src/soul/soul.ts":{"bytes":11060,"imports":[{"path":"node:fs/promises","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/soul/episodic-store.ts","kind":"import-statement","original":"./episodic-store.js"},{"path":"src/soul/skill-store.ts","kind":"import-statement","original":"./skill-store.js"},{"path":"src/soul/synthesizer.ts","kind":"import-statement","original":"./synthesizer.js"},{"path":"src/soul/json.ts","kind":"import-statement","original":"./json.js"}],"format":"esm"},"src/soul/index.ts":{"bytes":1478,"imports":[{"path":"src/soul/episodic-store.ts","kind":"import-statement","original":"./episodic-store.js"},{"path":"src/soul/skill-store.ts","kind":"import-statement","original":"./skill-store.js"},{"path":"src/soul/synthesizer.ts","kind":"import-statement","original":"./synthesizer.js"},{"path":"src/soul/json.ts","kind":"import-statement","original":"./json.js"},{"path":"src/soul/signing.ts","kind":"import-statement","original":"./signing.js"},{"path":"src/soul/soul.ts","kind":"import-statement","original":"./soul.js"}],"format":"esm"}},"outputs":{"dist/soul/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:crypto","kind":"import-statement","external":true}],"exports":["EpisodicStore","SkillStore","SoulEngine","canonicalPayload","createEd25519Signer","extractJsonObject","synthesizeSkill","verifySignature","verifySoulRecord"],"entryPoint":"src/soul/index.ts","inputs":{"src/memory/vector-store.ts":{"bytesInOutput":2350},"src/soul/episodic-store.ts":{"bytesInOutput":664},"src/soul/index.ts":{"bytesInOutput":0},"src/soul/skill-store.ts":{"bytesInOutput":755},"src/soul/synthesizer.ts":{"bytesInOutput":1436},"src/soul/json.ts":{"bytesInOutput":574},"src/soul/signing.ts":{"bytesInOutput":589},"src/soul/soul.ts":{"bytesInOutput":3389}},"bytes":9951}}}
@@ -0,0 +1,4 @@
1
+ "use strict";var E=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var B=Object.prototype.hasOwnProperty;var z=(e,n)=>{for(var r in n)E(e,r,{get:n[r],enumerable:!0})},V=(e,n,r,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of G(n))!B.call(e,t)&&t!==r&&E(e,t,{get:()=>n[t],enumerable:!(i=H(n,t))||i.enumerable});return e};var Y=e=>V(E({},"__esModule",{value:!0}),e);var ie={};z(ie,{clipXenoAnsi:()=>L,configureXenoAnsi:()=>v,parseXenoAnsi:()=>y,resetXenoAnsiPolicy:()=>D,stripXenoAnsi:()=>k,wrapXenoAnsi:()=>j,xenoAnsi:()=>F,xenoAnsiVisibleWidth:()=>S});module.exports=Y(ie);var $={color:"auto"},x={...$};function C(e){return Number.isFinite(e)?Math.max(0,Math.min(255,Math.round(e))):0}function u(e,n){return{open:`\x1B[${e}m`,close:`\x1B[${n}m`}}function U(){if(x.colorDepth)return x.colorDepth;let e=Number(process.env.XENO_COLOR_DEPTH??"");return e===1||e===4||e===8||e===24?e:/^(?:truecolor|24bit)$/i.test(process.env.COLORTERM??"")||process.platform==="win32"?24:/256color/i.test(process.env.TERM??"")?8:4}function q(){return x.color==="always"?!0:x.color==="never"||process.env.NO_COLOR!==void 0||process.env.FORCE_COLOR==="0"?!1:process.env.FORCE_COLOR!==void 0?!0:process.env.TERM==="dumb"?!1:!!process.stdout?.isTTY}function I(e){let n=e.trim().replace(/^#/,""),r=n.length===3?n.split("").map(i=>i+i).join(""):n;if(!/^[0-9a-f]{6}$/i.test(r))throw new Error(`Invalid terminal color: ${e}`);return[Number.parseInt(r.slice(0,2),16),Number.parseInt(r.slice(2,4),16),Number.parseInt(r.slice(4,6),16)]}function J(e,n,r){if(e===n&&n===r)return e<8?16:e>248?231:Math.round((e-8)/10)+232;let i=t=>Math.round(t/255*5);return 16+36*i(e)+6*i(n)+i(r)}var O=[[0,0,0],[205,49,49],[13,188,121],[229,229,16],[36,114,200],[188,63,188],[17,168,205],[229,229,229]];function K(e,n,r){let i=0,t=Number.POSITIVE_INFINITY;for(let o=0;o<O.length;o+=1){let s=O[o],l=(e-s[0])**2+(n-s[1])**2+(r-s[2])**2;l<t&&(i=o,t=l)}return i}function b(e,n,r,i){let t=C(e),o=C(n),s=C(r),l=U();return u(l===24?`${i?48:38};2;${t};${o};${s}`:l===8?`${i?48:38};5;${J(t,o,s)}`:String((i?40:30)+K(t,o,s)),i?"49":"39")}function M(e,n){let r=String(e??"");if(!r||n.length===0||!q())return r;let i=n.map(s=>s.open).join(""),t=[...n].reverse().map(s=>s.close).join(""),o=r.replaceAll("\x1B[0m",`\x1B[0m${i}`);for(let s of n)o=o.replaceAll(s.close,`${s.close}${i}`);return`${i}${o}${t}`}function a(...e){let n=(r=>M(r,e));return Object.defineProperty(n,"styles",{value:Object.freeze([...e]),enumerable:!0}),n}var f={bold:u("1","22"),dim:u("2","22"),italic:u("3","23"),strikethrough:u("9","29"),black:u("30","39"),red:u("31","39"),green:u("32","39"),yellow:u("33","39"),blue:u("34","39"),magenta:u("35","39"),cyan:u("36","39"),white:u("37","39"),gray:u("90","39")},F=Object.freeze({bold:a(f.bold),dim:a(f.dim),italic:a(f.italic),strikethrough:a(f.strikethrough),black:a(f.black),red:a(f.red),green:a(f.green),yellow:a(f.yellow),blue:a(f.blue),magenta:a(f.magenta),cyan:a(f.cyan),white:a(f.white),gray:a(f.gray),rgb:(e,n,r)=>a(b(e,n,r,!1)),bgRgb:(e,n,r)=>a(b(e,n,r,!0)),hex:e=>a(b(...I(e),!1)),bgHex:e=>a(b(...I(e),!0)),compose:(...e)=>a(...e.flatMap(n=>n.styles)),format:(e,...n)=>M(e,n)});function v(e){return x={color:e.color??x.color,colorDepth:e.colorDepth??x.colorDepth},{...x}}function D(){x={...$}}function Q(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071||e===8205||e>=65024&&e<=65039}function Z(e){return e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=129791||e>=131072&&e<=262141)}var P=new Map([[144,"dcs"],[152,"sos"],[157,"osc"],[158,"pm"],[159,"apc"]]),ee=new Intl.Segmenter(void 0,{granularity:"grapheme"}),ne=new RegExp("\\p{Extended_Pictographic}","u"),te=new RegExp("\\p{Regional_Indicator}","u"),d="\x1B[0m";function T(e,n,r,i){let t=r;for(;t<e.length;){if(e.charCodeAt(t)===7){t+=1;break}if(e.charCodeAt(t)===27&&e[t+1]==="\\"){t+=2;break}if(e.charCodeAt(t)===156){t+=1;break}t+=1}return{kind:"escape",family:i,value:e.slice(n,t),length:t-n}}function R(e,n,r){let i=r,t;for(;i<e.length;){let o=e.charCodeAt(i);if(i+=1,o>=64&&o<=126){t=String.fromCharCode(o);break}}return{kind:"escape",family:"csi",value:e.slice(n,i),final:t,length:i-n}}function re(e,n){let r=e.charCodeAt(n);if(r===155)return R(e,n,n+1);let i=P.get(r);if(i)return T(e,n,n+1,i);if(r!==27)return null;let t=e[n+1];if(!t)return{kind:"escape",family:"single",value:e.slice(n),length:1};if(t==="[")return R(e,n,n+2);let o=t==="]"?"osc":t==="P"?"dcs":t==="X"?"sos":t==="^"?"pm":t==="_"?"apc":null;return o?T(e,n,n+2,o):{kind:"escape",family:"single",value:e.slice(n,Math.min(e.length,n+2)),length:Math.min(2,e.length-n)}}function y(e){let n=[],r=0,i=0;for(;r<e.length;){let t=re(e,r);if(!t){r+=e.codePointAt(r)>65535?2:1;continue}i<r&&n.push({kind:"text",value:e.slice(i,r)});let{length:o,...s}=t;n.push(s),r+=t.length,i=r}return i<e.length&&n.push({kind:"text",value:e.slice(i)}),n}function A(e){return Array.from(ee.segment(e),n=>n.segment)}function X(e){if(!e)return 0;let n=!1,r=!1;for(let i of e){let t=i.codePointAt(0);t<32||t>=127&&t<160||Q(t)||(n=!0,r||=Z(t))}return n?r||ne.test(e)||te.test(e)||e.includes("\u20E3")?2:1:0}function N(e){return e.kind==="escape"&&e.family==="csi"&&e.final==="m"}function _(e){return e.family==="csi"?e.final!==void 0:e.family==="single"?e.value.length===2:e.value.endsWith("\x07")||e.value.endsWith("\x9C")||e.value.endsWith("\x1B\\")}function W(e,n){let r=n.value.charCodeAt(0)===155?1:2,i=n.value.slice(r,-1),t=i===""?[""]:i.split(";"),o=!1,s=!1;for(let l=0;l<t.length;l+=1){let m=t[l]??"",h=Number((m.split(":",1)[0]??"")||0);if(h===0){o=!0;continue}if(s=!0,(h===38||h===48||h===58)&&!m.includes(":")){let c=Number(t[l+1]??"");l+=c===2?4:c===5?2:0}}o&&(e.length=0),s&&e.push(n.value)}function k(e){return y(e).filter(n=>n.kind==="text").map(n=>n.value).join("")}function S(e){let n=0;for(let r of y(e))if(r.kind==="text")for(let i of A(r.value))n+=X(i);return n}function L(e,n,r="\u2026"){let i=Math.max(0,Math.floor(n));if(i===0)return"";if(S(e)<=i)return e;let t=A(k(r)).reduce((c,p)=>{let g=c.width+X(p);return g<=i?{value:c.value+p,width:g}:c},{value:"",width:0}),o=Math.max(0,i-t.width),s=[],l=[],m=0,h=!1;for(let c of y(e)){if(h)break;if(c.kind==="escape"){if(!_(c))continue;s.push(c.value),N(c)&&W(l,c);continue}for(let p of A(c.value)){let g=m+X(p);if(g>o){h=!0;break}s.push(p),m=g}}return s.push(t.value),l.length>0&&s.push(d),s.join("")}function j(e,n,r={}){let i=Math.max(1,Math.floor(n)),t=r.preserveStyles!==!1,o=[],s=[],l=[],m=0,h=!1,c=()=>{t&&l.length>0&&s.push(d),o.push(s.join("")),s.length=0,t&&l.length>0&&s.push(...l),m=0,h=!1};for(let p of y(e)){if(p.kind==="escape"){if(!_(p))continue;s.push(p.value),N(p)&&W(l,p);continue}for(let g of A(p.value)){if(g==="\r")continue;if(g===`
2
+ `||g===`\r
3
+ `){c();continue}let w=X(g);m>0&&m+w>i&&c(),s.push(g),m+=w,h=!0}}return(h||o.length===0||e.endsWith(`
4
+ `))&&(t&&l.length>0&&s.at(-1)!==d&&s.push(d),o.push(s.join(""))),o}0&&(module.exports={clipXenoAnsi,configureXenoAnsi,parseXenoAnsi,resetXenoAnsiPolicy,stripXenoAnsi,wrapXenoAnsi,xenoAnsi,xenoAnsiVisibleWidth});
@@ -0,0 +1,55 @@
1
+ type XenoColorPolicy = "auto" | "always" | "never";
2
+ type XenoColorDepth = 1 | 4 | 8 | 24;
3
+ interface XenoAnsiPolicy {
4
+ color: XenoColorPolicy;
5
+ colorDepth?: XenoColorDepth;
6
+ }
7
+ interface XenoAnsiStyle {
8
+ readonly open: string;
9
+ readonly close: string;
10
+ }
11
+ type XenoAnsiFormatter = ((text: unknown) => string) & {
12
+ readonly styles: readonly XenoAnsiStyle[];
13
+ };
14
+ type XenoAnsiEscapeFamily = "csi" | "osc" | "dcs" | "sos" | "pm" | "apc" | "single";
15
+ type XenoAnsiToken = {
16
+ readonly kind: "text";
17
+ readonly value: string;
18
+ } | {
19
+ readonly kind: "escape";
20
+ readonly value: string;
21
+ readonly family: XenoAnsiEscapeFamily;
22
+ readonly final?: string;
23
+ };
24
+ interface XenoAnsiWrapOptions {
25
+ preserveStyles?: boolean;
26
+ }
27
+ declare const xenoAnsi: Readonly<{
28
+ bold: XenoAnsiFormatter;
29
+ dim: XenoAnsiFormatter;
30
+ italic: XenoAnsiFormatter;
31
+ strikethrough: XenoAnsiFormatter;
32
+ black: XenoAnsiFormatter;
33
+ red: XenoAnsiFormatter;
34
+ green: XenoAnsiFormatter;
35
+ yellow: XenoAnsiFormatter;
36
+ blue: XenoAnsiFormatter;
37
+ magenta: XenoAnsiFormatter;
38
+ cyan: XenoAnsiFormatter;
39
+ white: XenoAnsiFormatter;
40
+ gray: XenoAnsiFormatter;
41
+ rgb: (red: number, green: number, blue: number) => XenoAnsiFormatter;
42
+ bgRgb: (red: number, green: number, blue: number) => XenoAnsiFormatter;
43
+ hex: (value: string) => XenoAnsiFormatter;
44
+ bgHex: (value: string) => XenoAnsiFormatter;
45
+ compose: (...formatters: readonly XenoAnsiFormatter[]) => XenoAnsiFormatter;
46
+ format: (text: unknown, ...terminalStyles: XenoAnsiStyle[]) => string;
47
+ }>;
48
+ declare function configureXenoAnsi(policy: Partial<XenoAnsiPolicy>): XenoAnsiPolicy;
49
+ declare function resetXenoAnsiPolicy(): void;
50
+ declare function parseXenoAnsi(value: string): XenoAnsiToken[];
51
+ declare function stripXenoAnsi(value: string): string;
52
+ declare function xenoAnsiVisibleWidth(value: string): number;
53
+ declare function clipXenoAnsi(value: string, columns: number, marker?: string): string;
54
+ declare function wrapXenoAnsi(value: string, columns: number, options?: XenoAnsiWrapOptions): string[];
55
+ export { type XenoAnsiEscapeFamily, type XenoAnsiFormatter, type XenoAnsiPolicy, type XenoAnsiStyle, type XenoAnsiToken, type XenoAnsiWrapOptions, type XenoColorDepth, type XenoColorPolicy, clipXenoAnsi, configureXenoAnsi, parseXenoAnsi, resetXenoAnsiPolicy, stripXenoAnsi, wrapXenoAnsi, xenoAnsi, xenoAnsiVisibleWidth };
@@ -0,0 +1,55 @@
1
+ type XenoColorPolicy = "auto" | "always" | "never";
2
+ type XenoColorDepth = 1 | 4 | 8 | 24;
3
+ interface XenoAnsiPolicy {
4
+ color: XenoColorPolicy;
5
+ colorDepth?: XenoColorDepth;
6
+ }
7
+ interface XenoAnsiStyle {
8
+ readonly open: string;
9
+ readonly close: string;
10
+ }
11
+ type XenoAnsiFormatter = ((text: unknown) => string) & {
12
+ readonly styles: readonly XenoAnsiStyle[];
13
+ };
14
+ type XenoAnsiEscapeFamily = "csi" | "osc" | "dcs" | "sos" | "pm" | "apc" | "single";
15
+ type XenoAnsiToken = {
16
+ readonly kind: "text";
17
+ readonly value: string;
18
+ } | {
19
+ readonly kind: "escape";
20
+ readonly value: string;
21
+ readonly family: XenoAnsiEscapeFamily;
22
+ readonly final?: string;
23
+ };
24
+ interface XenoAnsiWrapOptions {
25
+ preserveStyles?: boolean;
26
+ }
27
+ declare const xenoAnsi: Readonly<{
28
+ bold: XenoAnsiFormatter;
29
+ dim: XenoAnsiFormatter;
30
+ italic: XenoAnsiFormatter;
31
+ strikethrough: XenoAnsiFormatter;
32
+ black: XenoAnsiFormatter;
33
+ red: XenoAnsiFormatter;
34
+ green: XenoAnsiFormatter;
35
+ yellow: XenoAnsiFormatter;
36
+ blue: XenoAnsiFormatter;
37
+ magenta: XenoAnsiFormatter;
38
+ cyan: XenoAnsiFormatter;
39
+ white: XenoAnsiFormatter;
40
+ gray: XenoAnsiFormatter;
41
+ rgb: (red: number, green: number, blue: number) => XenoAnsiFormatter;
42
+ bgRgb: (red: number, green: number, blue: number) => XenoAnsiFormatter;
43
+ hex: (value: string) => XenoAnsiFormatter;
44
+ bgHex: (value: string) => XenoAnsiFormatter;
45
+ compose: (...formatters: readonly XenoAnsiFormatter[]) => XenoAnsiFormatter;
46
+ format: (text: unknown, ...terminalStyles: XenoAnsiStyle[]) => string;
47
+ }>;
48
+ declare function configureXenoAnsi(policy: Partial<XenoAnsiPolicy>): XenoAnsiPolicy;
49
+ declare function resetXenoAnsiPolicy(): void;
50
+ declare function parseXenoAnsi(value: string): XenoAnsiToken[];
51
+ declare function stripXenoAnsi(value: string): string;
52
+ declare function xenoAnsiVisibleWidth(value: string): number;
53
+ declare function clipXenoAnsi(value: string, columns: number, marker?: string): string;
54
+ declare function wrapXenoAnsi(value: string, columns: number, options?: XenoAnsiWrapOptions): string[];
55
+ export { type XenoAnsiEscapeFamily, type XenoAnsiFormatter, type XenoAnsiPolicy, type XenoAnsiStyle, type XenoAnsiToken, type XenoAnsiWrapOptions, type XenoColorDepth, type XenoColorPolicy, clipXenoAnsi, configureXenoAnsi, parseXenoAnsi, resetXenoAnsiPolicy, stripXenoAnsi, wrapXenoAnsi, xenoAnsi, xenoAnsiVisibleWidth };
@@ -0,0 +1,4 @@
1
+ var O={color:"auto"},x={...O};function E(e){return Number.isFinite(e)?Math.max(0,Math.min(255,Math.round(e))):0}function u(e,n){return{open:`\x1B[${e}m`,close:`\x1B[${n}m`}}function D(){if(x.colorDepth)return x.colorDepth;let e=Number(process.env.XENO_COLOR_DEPTH??"");return e===1||e===4||e===8||e===24?e:/^(?:truecolor|24bit)$/i.test(process.env.COLORTERM??"")||process.platform==="win32"?24:/256color/i.test(process.env.TERM??"")?8:4}function N(){return x.color==="always"?!0:x.color==="never"||process.env.NO_COLOR!==void 0||process.env.FORCE_COLOR==="0"?!1:process.env.FORCE_COLOR!==void 0?!0:process.env.TERM==="dumb"?!1:!!process.stdout?.isTTY}function k(e){let n=e.trim().replace(/^#/,""),i=n.length===3?n.split("").map(r=>r+r).join(""):n;if(!/^[0-9a-f]{6}$/i.test(i))throw new Error(`Invalid terminal color: ${e}`);return[Number.parseInt(i.slice(0,2),16),Number.parseInt(i.slice(2,4),16),Number.parseInt(i.slice(4,6),16)]}function _(e,n,i){if(e===n&&n===i)return e<8?16:e>248?231:Math.round((e-8)/10)+232;let r=t=>Math.round(t/255*5);return 16+36*r(e)+6*r(n)+r(i)}var S=[[0,0,0],[205,49,49],[13,188,121],[229,229,16],[36,114,200],[188,63,188],[17,168,205],[229,229,229]];function W(e,n,i){let r=0,t=Number.POSITIVE_INFINITY;for(let o=0;o<S.length;o+=1){let s=S[o],l=(e-s[0])**2+(n-s[1])**2+(i-s[2])**2;l<t&&(r=o,t=l)}return r}function b(e,n,i,r){let t=E(e),o=E(n),s=E(i),l=D();return u(l===24?`${r?48:38};2;${t};${o};${s}`:l===8?`${r?48:38};5;${_(t,o,s)}`:String((r?40:30)+W(t,o,s)),r?"49":"39")}function T(e,n){let i=String(e??"");if(!i||n.length===0||!N())return i;let r=n.map(s=>s.open).join(""),t=[...n].reverse().map(s=>s.close).join(""),o=i.replaceAll("\x1B[0m",`\x1B[0m${r}`);for(let s of n)o=o.replaceAll(s.close,`${s.close}${r}`);return`${r}${o}${t}`}function a(...e){let n=(i=>T(i,e));return Object.defineProperty(n,"styles",{value:Object.freeze([...e]),enumerable:!0}),n}var f={bold:u("1","22"),dim:u("2","22"),italic:u("3","23"),strikethrough:u("9","29"),black:u("30","39"),red:u("31","39"),green:u("32","39"),yellow:u("33","39"),blue:u("34","39"),magenta:u("35","39"),cyan:u("36","39"),white:u("37","39"),gray:u("90","39")},L=Object.freeze({bold:a(f.bold),dim:a(f.dim),italic:a(f.italic),strikethrough:a(f.strikethrough),black:a(f.black),red:a(f.red),green:a(f.green),yellow:a(f.yellow),blue:a(f.blue),magenta:a(f.magenta),cyan:a(f.cyan),white:a(f.white),gray:a(f.gray),rgb:(e,n,i)=>a(b(e,n,i,!1)),bgRgb:(e,n,i)=>a(b(e,n,i,!0)),hex:e=>a(b(...k(e),!1)),bgHex:e=>a(b(...k(e),!0)),compose:(...e)=>a(...e.flatMap(n=>n.styles)),format:(e,...n)=>T(e,n)});function j(e){return x={color:e.color??x.color,colorDepth:e.colorDepth??x.colorDepth},{...x}}function H(){x={...O}}function G(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071||e===8205||e>=65024&&e<=65039}function B(e){return e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=129791||e>=131072&&e<=262141)}var z=new Map([[144,"dcs"],[152,"sos"],[157,"osc"],[158,"pm"],[159,"apc"]]),V=new Intl.Segmenter(void 0,{granularity:"grapheme"}),Y=new RegExp("\\p{Extended_Pictographic}","u"),U=new RegExp("\\p{Regional_Indicator}","u"),d="\x1B[0m";function w(e,n,i,r){let t=i;for(;t<e.length;){if(e.charCodeAt(t)===7){t+=1;break}if(e.charCodeAt(t)===27&&e[t+1]==="\\"){t+=2;break}if(e.charCodeAt(t)===156){t+=1;break}t+=1}return{kind:"escape",family:r,value:e.slice(n,t),length:t-n}}function I(e,n,i){let r=i,t;for(;r<e.length;){let o=e.charCodeAt(r);if(r+=1,o>=64&&o<=126){t=String.fromCharCode(o);break}}return{kind:"escape",family:"csi",value:e.slice(n,r),final:t,length:r-n}}function q(e,n){let i=e.charCodeAt(n);if(i===155)return I(e,n,n+1);let r=z.get(i);if(r)return w(e,n,n+1,r);if(i!==27)return null;let t=e[n+1];if(!t)return{kind:"escape",family:"single",value:e.slice(n),length:1};if(t==="[")return I(e,n,n+2);let o=t==="]"?"osc":t==="P"?"dcs":t==="X"?"sos":t==="^"?"pm":t==="_"?"apc":null;return o?w(e,n,n+2,o):{kind:"escape",family:"single",value:e.slice(n,Math.min(e.length,n+2)),length:Math.min(2,e.length-n)}}function y(e){let n=[],i=0,r=0;for(;i<e.length;){let t=q(e,i);if(!t){i+=e.codePointAt(i)>65535?2:1;continue}r<i&&n.push({kind:"text",value:e.slice(r,i)});let{length:o,...s}=t;n.push(s),i+=t.length,r=i}return r<e.length&&n.push({kind:"text",value:e.slice(r)}),n}function A(e){return Array.from(V.segment(e),n=>n.segment)}function X(e){if(!e)return 0;let n=!1,i=!1;for(let r of e){let t=r.codePointAt(0);t<32||t>=127&&t<160||G(t)||(n=!0,i||=B(t))}return n?i||Y.test(e)||U.test(e)||e.includes("\u20E3")?2:1:0}function R(e){return e.kind==="escape"&&e.family==="csi"&&e.final==="m"}function $(e){return e.family==="csi"?e.final!==void 0:e.family==="single"?e.value.length===2:e.value.endsWith("\x07")||e.value.endsWith("\x9C")||e.value.endsWith("\x1B\\")}function M(e,n){let i=n.value.charCodeAt(0)===155?1:2,r=n.value.slice(i,-1),t=r===""?[""]:r.split(";"),o=!1,s=!1;for(let l=0;l<t.length;l+=1){let m=t[l]??"",h=Number((m.split(":",1)[0]??"")||0);if(h===0){o=!0;continue}if(s=!0,(h===38||h===48||h===58)&&!m.includes(":")){let c=Number(t[l+1]??"");l+=c===2?4:c===5?2:0}}o&&(e.length=0),s&&e.push(n.value)}function F(e){return y(e).filter(n=>n.kind==="text").map(n=>n.value).join("")}function v(e){let n=0;for(let i of y(e))if(i.kind==="text")for(let r of A(i.value))n+=X(r);return n}function J(e,n,i="\u2026"){let r=Math.max(0,Math.floor(n));if(r===0)return"";if(v(e)<=r)return e;let t=A(F(i)).reduce((c,p)=>{let g=c.width+X(p);return g<=r?{value:c.value+p,width:g}:c},{value:"",width:0}),o=Math.max(0,r-t.width),s=[],l=[],m=0,h=!1;for(let c of y(e)){if(h)break;if(c.kind==="escape"){if(!$(c))continue;s.push(c.value),R(c)&&M(l,c);continue}for(let p of A(c.value)){let g=m+X(p);if(g>o){h=!0;break}s.push(p),m=g}}return s.push(t.value),l.length>0&&s.push(d),s.join("")}function K(e,n,i={}){let r=Math.max(1,Math.floor(n)),t=i.preserveStyles!==!1,o=[],s=[],l=[],m=0,h=!1,c=()=>{t&&l.length>0&&s.push(d),o.push(s.join("")),s.length=0,t&&l.length>0&&s.push(...l),m=0,h=!1};for(let p of y(e)){if(p.kind==="escape"){if(!$(p))continue;s.push(p.value),R(p)&&M(l,p);continue}for(let g of A(p.value)){if(g==="\r")continue;if(g===`
2
+ `||g===`\r
3
+ `){c();continue}let C=X(g);m>0&&m+C>r&&c(),s.push(g),m+=C,h=!0}}return(h||o.length===0||e.endsWith(`
4
+ `))&&(t&&l.length>0&&s.at(-1)!==d&&s.push(d),o.push(s.join(""))),o}export{J as clipXenoAnsi,j as configureXenoAnsi,y as parseXenoAnsi,H as resetXenoAnsiPolicy,F as stripXenoAnsi,K as wrapXenoAnsi,L as xenoAnsi,v as xenoAnsiVisibleWidth};
@@ -0,0 +1 @@
1
+ {"inputs":{"src/terminal/ansi.ts":{"bytes":17248,"imports":[],"format":"esm"},"src/terminal/index.ts":{"bytes":390,"imports":[{"path":"src/terminal/ansi.ts","kind":"import-statement","original":"./ansi.js"}],"format":"esm"}},"outputs":{"dist/terminal/index.cjs":{"imports":[],"exports":[],"entryPoint":"src/terminal/index.ts","inputs":{"src/terminal/index.ts":{"bytesInOutput":209},"src/terminal/ansi.ts":{"bytesInOutput":6496}},"bytes":7275}}}
@@ -0,0 +1 @@
1
+ {"inputs":{"src/terminal/ansi.ts":{"bytes":17248,"imports":[],"format":"esm"},"src/terminal/index.ts":{"bytes":390,"imports":[{"path":"src/terminal/ansi.ts","kind":"import-statement","original":"./ansi.js"}],"format":"esm"}},"outputs":{"dist/terminal/index.js":{"imports":[],"exports":["clipXenoAnsi","configureXenoAnsi","parseXenoAnsi","resetXenoAnsiPolicy","stripXenoAnsi","wrapXenoAnsi","xenoAnsi","xenoAnsiVisibleWidth"],"entryPoint":"src/terminal/index.ts","inputs":{"src/terminal/ansi.ts":{"bytesInOutput":6488},"src/terminal/index.ts":{"bytesInOutput":0}},"bytes":6659}}}
@@ -0,0 +1,35 @@
1
+ "use strict";var X=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var te=Object.prototype.hasOwnProperty;var ne=(n,e)=>{for(var r in e)X(n,r,{get:e[r],enumerable:!0})},oe=(n,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ee(e))!te.call(n,i)&&i!==r&&X(n,i,{get:()=>e[i],enumerable:!(t=Z(e,i))||t.enumerable});return n};var re=n=>oe(X({},"__esModule",{value:!0}),n);var fe={};ne(fe,{XENO_UI_RENDERER_API_VERSION:()=>I,createAgentUiController:()=>B,createAgentUiView:()=>H,dispatchAgentUiAction:()=>N,isSafeMarkdownHref:()=>q,mountAgentUi:()=>Q,parseMarkdown:()=>D,xenoUiCss:()=>z,xenoUiTokens:()=>K});module.exports=re(fe);var ie={View:"Read",Replace:"Write",GlobTool:"Glob",GrepTool:"Grep",SQLiteAnalyze:"SqliteAnalyze",ReadNotebook:"NotebookRead",NotebookEditCell:"NotebookEdit"};function G(n){return ie[n]??n}var I=1;function se(n){let e=n.config;return e&&typeof e=="object"?e:null}function F(n){let e=n.tokenUsage;return{input:Number(e.input)||0,output:Number(e.output)||0,total:Number(e.total)||0}}function ae(n){let e=G(n);return["Read","Glob","Grep","Think","dispatch_agent"].includes(e)?"low":["Write","Edit"].includes(e)?"medium":e==="Bash"?"high":"medium"}function le(n){let e=n.toLowerCase();return["rate limit","429","network","timeout","econnrefused","api error","unreachable"].some(r=>e.includes(r))}function B(n){let e=n.agent,r=n.now??Date.now,t=0,i=n.createId??(()=>`xeno-ui-${r()}-${++t}`),m=new Set,g=[],h="idle",P=F(e),E=null,d=null,k=null,v=null,c="",U=null,R=0,_=!1,b=!1,V=0,p=se(e),w=p?.permissionEngine,$=w?.promptFn;function T(){return Object.freeze({apiVersion:1,revision:V,items:Object.freeze([...g]),isProcessing:_,status:h,tokenUsage:Object.freeze({...P}),permissionRequest:E?Object.freeze({...E}):null,lastUserMessage:k})}function y(){V+=1;let s=T();for(let l of[...m])l(s)}function S(s){g=[...g,s],y()}function O(s){let l=[...g];for(let x=l.length-1;x>=0;x-=1){let a=l[x];if(a?.type==="message"&&a.data.role==="assistant"){l[x]={type:"message",data:s(a.data)},g=l,y();return}}}function j(s,l){let x=[...g];for(let a=x.length-1;a>=0;a-=1){let u=x[a];if(u?.type==="tool_call"&&u.data.id===s){x[a]={type:"tool_call",data:l(u.data)},g=x,y();return}}}function o(){v&&(O(s=>({...s,isStreaming:!1})),v=null,c="")}function C(s){let l={id:i(),message:s,retryable:le(s),timestamp:r()};S({type:"error",data:l})}function f(s){p&&(p.onText=s.onText,p.onToolStart=s.onToolStart,p.onToolEnd=s.onToolEnd,p.onError=s.onError)}async function M(s){let l=s.trim();if(b||_||!l)return!1;_=!0,k=l,h="thinking",v=null,c="";let x={id:i(),role:"user",content:l,timestamp:r()};g=[...g,{type:"message",data:x}],y();let a={onText:p?.onText,onToolStart:p?.onToolStart,onToolEnd:p?.onToolEnd,onError:p?.onError};p&&(p.onText=u=>{a.onText?.(u),!b&&(c+=u,v?O(A=>({...A,content:c,isStreaming:!0})):(v=i(),S({type:"message",data:{id:v,role:"assistant",content:c,timestamp:r(),isStreaming:!0}})))},p.onToolStart=(u,A)=>{a.onToolStart?.(u,A),!b&&(o(),h="executing",U=i(),R=r(),S({type:"tool_call",data:{id:U,toolName:u,input:A,status:"running",timestamp:r()}}))},p.onToolEnd=(u,A)=>{a.onToolEnd?.(u,A),!b&&(U&&(j(U,W=>({...W,status:A.success?"success":"error",result:A,durationMs:Math.max(0,r()-R)})),U=null),h="thinking",y())},p.onError=(u,A)=>a.onError?.(u,A));try{await e.run(l),b||(o(),h="idle",P=F(e),y())}catch(u){if(!b){o();let A=u instanceof Error?u:new Error(String(u));h=A.name==="AgentInterruptedError"?"idle":"error",A.name!=="AgentInterruptedError"&&C(A.message),P=F(e),y()}}finally{_=!1,f(a),b||y()}return!0}return n.enablePermissionRequests&&w&&(w.promptFn=s=>(d&&d("deny"),new Promise(l=>{d=l,E={id:i(),toolName:s.toolName,detail:s.detail,description:s.description,operation:s.operation,preview:s.preview,riskLevel:ae(s.toolName),timestamp:r()},y()}))),{apiVersion:1,getSnapshot:T,subscribe(s){if(b)throw new Error("Agent UI controller is disposed");return m.add(s),s(T()),()=>m.delete(s)},sendMessage:M,cancelExecution(){!b&&_&&e.cancelCurrentTurn()},clearMessages(){b||(g=[],v=null,c="",y())},retryLastMessage(){return b||_||!k?Promise.resolve(!1):(g=g.filter((s,l,x)=>s.type!=="error"?!0:x.slice(l+1).some(a=>a.type!=="error")),h="idle",y(),M(k))},resolvePermission(s,l){if(b||!E||E.id!==s||!d)return!1;let x=d;return d=null,E=null,y(),x(l),!0},dispose(){b||(b=!0,d&&d("deny"),d=null,E=null,w&&(w.promptFn=$),m.clear())}}}function ce(n){let e=[],r=[[/```([\w-]*)\n([\s\S]*?)```/,t=>({kind:"code-block",language:t[1]??"",code:t[2]??""})],[/`([^`\n]+)`/,t=>({kind:"inline-code",code:t[1]??""})],[/\*\*(.+?)\*\*/,t=>({kind:"strong",text:t[1]??""})],[/\*([^*\n]+)\*/,t=>({kind:"emphasis",text:t[1]??""})],[/\[([^\]]+)\]\(([^)\s]+)\)/,t=>({kind:"link",text:t[1]??"",href:t[2]??""})]];for(let[t,i]of r){let m=n.match(t);m?.index!==void 0&&e.push({index:m.index,value:i(m),length:m[0].length})}return e.sort((t,i)=>t.index-i.index),e[0]??null}function D(n){let e=[],r=n;for(;r;){let t=ce(r);if(!t){e.push({kind:"text",text:r});break}t.index>0&&e.push({kind:"text",text:r.slice(0,t.index)}),e.push(t.value),r=r.slice(t.index+t.length)}return e}function q(n){try{let e=new URL(n,"https://xeno.invalid/");return e.protocol==="https:"||e.protocol==="http:"||e.protocol==="mailto:"}catch{return!1}}var K=Object.freeze({background:"#101214",surface:"#181b1f",surfaceRaised:"#20242a",border:"#343a42",text:"#f2f4f7",textMuted:"#aab2bd",accent:"#5da9e9",success:"#56b881",warning:"#e7b65a",danger:"#e57373",focus:"#8bc5f4"}),z=`
2
+ .xeno-ui{box-sizing:border-box;display:grid;grid-template-rows:auto minmax(12rem,1fr) auto;width:min(32rem,100%);height:min(44rem,100%);min-height:24rem;border:1px solid var(--xeno-border,#343a42);background:var(--xeno-bg,#101214);color:var(--xeno-text,#f2f4f7);font:14px/1.45 ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;letter-spacing:0}
3
+ .xeno-ui *{box-sizing:border-box;letter-spacing:0}
4
+ .xeno-ui__header{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;border-bottom:1px solid var(--xeno-border,#343a42);background:var(--xeno-surface,#181b1f)}
5
+ .xeno-ui__title{min-width:0;margin:0;font-size:.95rem;font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
6
+ .xeno-ui__status{margin-left:auto;color:var(--xeno-muted,#aab2bd);font-size:.78rem;text-transform:capitalize}
7
+ .xeno-ui__tokens{color:var(--xeno-muted,#aab2bd);font-variant-numeric:tabular-nums;font-size:.75rem}
8
+ .xeno-ui__timeline{min-height:0;overflow:auto;padding:1rem;scrollbar-gutter:stable}
9
+ .xeno-ui__empty{display:grid;min-height:100%;place-items:center;color:var(--xeno-muted,#aab2bd)}
10
+ .xeno-ui__entry{margin:0 0 .75rem;padding:.7rem .8rem;border-left:3px solid var(--xeno-border,#343a42);background:var(--xeno-surface,#181b1f);white-space:pre-wrap;overflow-wrap:anywhere}
11
+ .xeno-ui__entry--user{margin-left:12%;border-left-color:var(--xeno-accent,#5da9e9)}
12
+ .xeno-ui__entry--assistant{margin-right:8%;border-left-color:var(--xeno-success,#56b881)}
13
+ .xeno-ui__entry--tool{border-left-color:var(--xeno-warning,#e7b65a);font-family:ui-monospace,"Cascadia Mono",monospace;font-size:.82rem}
14
+ .xeno-ui__entry--error{border-left-color:var(--xeno-danger,#e57373)}
15
+ .xeno-ui__entry code{padding:.08rem .3rem;border:1px solid var(--xeno-border,#343a42);background:var(--xeno-raised,#20242a);font-family:ui-monospace,"Cascadia Mono",monospace}
16
+ .xeno-ui__entry pre{max-width:100%;margin:.55rem 0 0;padding:.7rem;overflow:auto;border:1px solid var(--xeno-border,#343a42);background:#0b0d0f;white-space:pre}
17
+ .xeno-ui__entry a{color:var(--xeno-accent,#5da9e9)}
18
+ .xeno-ui__details{margin-top:.5rem;color:var(--xeno-muted,#aab2bd)}
19
+ .xeno-ui__details pre{max-height:16rem}
20
+ .xeno-ui__permission{margin:.75rem 1rem 0;padding:.8rem;border:1px solid var(--xeno-warning,#e7b65a);background:var(--xeno-raised,#20242a)}
21
+ .xeno-ui__permission-title{margin:0 0 .35rem;font-size:.9rem}
22
+ .xeno-ui__permission-actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}
23
+ .xeno-ui__composer{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.55rem;padding:.75rem 1rem;border-top:1px solid var(--xeno-border,#343a42);background:var(--xeno-surface,#181b1f)}
24
+ .xeno-ui__input{width:100%;min-height:2.75rem;max-height:9rem;resize:none;overflow-y:hidden;padding:.65rem .75rem;border:1px solid var(--xeno-border,#343a42);border-radius:4px;background:#0f1113;color:var(--xeno-text,#f2f4f7);font:inherit}
25
+ .xeno-ui__controls{display:flex;align-items:flex-end;gap:.45rem}
26
+ .xeno-ui__button{min-width:2.5rem;min-height:2.5rem;padding:.55rem .7rem;border:1px solid var(--xeno-border,#343a42);border-radius:4px;background:var(--xeno-raised,#20242a);color:var(--xeno-text,#f2f4f7);font:inherit;cursor:pointer}
27
+ .xeno-ui__button:hover{border-color:var(--xeno-accent,#5da9e9)}
28
+ .xeno-ui__button--primary{border-color:var(--xeno-accent,#5da9e9);background:#1b4f78}
29
+ .xeno-ui__button--danger{border-color:var(--xeno-danger,#e57373)}
30
+ .xeno-ui__button:disabled,.xeno-ui__input:disabled{cursor:not-allowed;opacity:.55}
31
+ .xeno-ui :focus-visible{outline:2px solid var(--xeno-focus,#8bc5f4);outline-offset:2px}
32
+ @media (max-width:36rem){.xeno-ui{width:100%;height:100%;border-left:0;border-right:0}.xeno-ui__entry--user,.xeno-ui__entry--assistant{margin-left:0;margin-right:0}.xeno-ui__composer{grid-template-columns:1fr}.xeno-ui__controls{justify-content:flex-end}}
33
+ @media (prefers-reduced-motion:reduce){.xeno-ui *{scroll-behavior:auto!important;transition:none!important}}
34
+ `;var Y=64*1024;function de(n){let e;try{e=JSON.stringify(n,null,2)??String(n)}catch{e="[Unserializable value]"}return e.length<=Y?e:`${e.slice(0,Y)}
35
+ [truncated]`}function ue(n){if(n.type==="message"){let e=n.data.role==="assistant";return{key:n.data.id,kind:e?"assistant-message":"user-message",role:"article",accessibleName:e?"Assistant message":"Your message",text:n.data.content,streaming:n.data.isStreaming}}if(n.type==="tool_call"){let e=n.data.durationMs===void 0?"":` in ${n.data.durationMs} ms`;return{key:n.data.id,kind:"tool-call",role:"status",accessibleName:`${n.data.toolName} tool ${n.data.status}`,text:`${n.data.toolName}: ${n.data.status}${e}`,detail:de({input:n.data.input,result:n.data.result}),state:n.data.status}}return{key:n.data.id,kind:"error",role:"alert",accessibleName:"Agent error",text:n.data.message,retryable:n.data.retryable}}function H(n,e={}){let r=e.agentName?.trim()||"Xeno Agent",t=n.permissionRequest;return{apiVersion:1,revision:n.revision,region:{role:"region",accessibleName:e.regionLabel?.trim()||`${r} chat`},header:{title:r,statusRole:"status",statusText:n.status,tokenText:`${n.tokenUsage.total.toLocaleString()} tokens`},timeline:{role:"log",live:"polite",busy:n.isProcessing,entries:n.items.map(ue)},permission:t?{role:"alertdialog",accessibleName:`Permission required for ${t.toolName}`,description:t.description||t.detail,riskLevel:t.riskLevel,requestId:t.id,controls:[{label:"Allow once",decision:"allow"},{label:"Always allow",decision:"always"},{label:"Deny",decision:"deny"}]}:null,composer:{role:"form",inputLabel:e.inputLabel?.trim()||"Message Xeno Agent",placeholder:e.inputPlaceholder?.trim()||"Message or command...",disabled:n.isProcessing,sendLabel:"Send",cancelLabel:"Cancel"}}}async function N(n,e){switch(e.type){case"send":return n.sendMessage(e.text);case"cancel":return n.cancelExecution(),!0;case"clear":return n.clearMessages(),!0;case"retry":return n.retryLastMessage();case"permission":return n.resolvePermission(e.requestId,e.decision)}}var J="xeno-owned-agent-ui-v1";function me(n,e,r){for(let t of D(r)){if(t.kind==="text"){e.append(n.createTextNode(t.text));continue}if(t.kind==="code-block"){let i=n.createElement("pre"),m=n.createElement("code");t.language&&(m.dataset.language=t.language),m.textContent=t.code,i.append(m),e.append(i);continue}if(t.kind==="inline-code"){let i=n.createElement("code");i.textContent=t.code,e.append(i);continue}if(t.kind==="strong"||t.kind==="emphasis"){let i=n.createElement(t.kind==="strong"?"strong":"em");i.textContent=t.text,e.append(i);continue}if(t.kind==="link"){if(!q(t.href)){e.append(n.createTextNode(t.text));continue}let i=n.createElement("a");i.textContent=t.text,i.href=t.href,i.rel="noopener noreferrer",(i.protocol==="http:"||i.protocol==="https:")&&(i.target="_blank"),e.append(i)}}}function L(n,e,r=""){let t=n.createElement("button");return t.type="button",t.className=`xeno-ui__button${r?` ${r}`:""}`,t.textContent=e,t}function pe(n,e,r){let t=n.createElement(e.role==="article"?"article":"div");if(t.className=`xeno-ui__entry xeno-ui__entry--${e.kind==="user-message"?"user":e.kind==="assistant-message"?"assistant":e.kind==="tool-call"?"tool":"error"}`,t.setAttribute("role",e.role),t.setAttribute("aria-label",e.accessibleName),t.dataset.xenoKey=e.key,e.streaming&&t.setAttribute("aria-busy","true"),me(n,t,e.text),e.detail){let i=n.createElement("details");i.className="xeno-ui__details";let m=n.createElement("summary");m.textContent="Details";let g=n.createElement("pre");g.textContent=e.detail,i.append(m,g),t.append(i)}if(e.retryable){let i=L(n,"Retry");i.addEventListener("click",()=>{N(r,{type:"retry"})}),t.append(n.createTextNode(" "),i)}return t}function ge(n,e){if(n.getElementById(J))return;let r=n.createElement("style");r.id=J,e&&(r.nonce=e),r.textContent=z,n.head.append(r)}function Q(n,e,r={}){let t=n.ownerDocument;r.injectStyles!==!1&&ge(t,r.styleNonce);let i=t.createElement("section");i.className=`xeno-ui${r.className?` ${r.className}`:""}`;let m=t.createElement("header");m.className="xeno-ui__header";let g=t.createElement("h2");g.className="xeno-ui__title";let h=t.createElement("span");h.className="xeno-ui__status",h.setAttribute("role","status"),h.setAttribute("aria-live","polite");let P=t.createElement("span");P.className="xeno-ui__tokens";let E=L(t,"Clear");if(E.setAttribute("aria-label","Clear conversation"),E.addEventListener("click",()=>{N(e,{type:"clear"})}),m.append(g,h,P,E),r.onClose){let o=L(t,"X");o.setAttribute("aria-label","Close agent chat"),o.addEventListener("click",r.onClose),m.append(o)}let d=t.createElement("div");d.className="xeno-ui__timeline",d.setAttribute("role","log"),d.setAttribute("aria-live","polite"),d.setAttribute("aria-relevant","additions text");let k=t.createElement("div"),v=t.createElement("form");v.className="xeno-ui__composer",v.setAttribute("role","form");let c=t.createElement("textarea");c.className="xeno-ui__input",c.rows=1;let U=t.createElement("div");U.className="xeno-ui__controls";let R=L(t,"Cancel","xeno-ui__button--danger");R.addEventListener("click",()=>{N(e,{type:"cancel"})});let _=L(t,"Send","xeno-ui__button--primary");_.type="submit",U.append(R,_),v.append(c,U),i.append(m,d,k,v),n.replaceChildren(i);function b(){c.style.height="auto";let o=44,C=144,f=Math.max(c.scrollHeight,o);c.style.height=`${Math.min(f,C)}px`,c.style.overflowY=f>C?"auto":"hidden"}async function V(){let o=c.value;await N(e,{type:"send",text:o})&&(c.value="",b())}v.addEventListener("submit",o=>{o.preventDefault(),V()}),c.addEventListener("keydown",o=>{o.key==="Enter"&&(o.ctrlKey||o.metaKey)&&(o.preventDefault(),V())}),c.addEventListener("input",b);let p=null,w=null;function $(o){if(o.permission&&p===o.permission.requestId&&k.children.length>0)return;if(k.replaceChildren(),!o.permission){if(p){let a=w??c;queueMicrotask(()=>a.focus())}p=null,w=null;return}let C=p!==o.permission.requestId;if(C){let a=t.activeElement;w=a&&"focus"in a?a:c,p=o.permission.requestId}let f=t.createElement("section");f.className="xeno-ui__permission",f.setAttribute("role",o.permission.role),f.setAttribute("aria-modal","true"),f.setAttribute("aria-label",o.permission.accessibleName),f.dataset.risk=o.permission.riskLevel;let M=t.createElement("h3");M.className="xeno-ui__permission-title",M.textContent=o.permission.accessibleName;let s=t.createElement("div");s.id=`xeno-ui-permission-${o.permission.requestId}`,s.textContent=o.permission.description,f.setAttribute("aria-describedby",s.id);let l=t.createElement("div");l.className="xeno-ui__permission-actions";let x=null;for(let a of o.permission.controls){let u=L(t,a.label,a.decision==="deny"?"xeno-ui__button--danger":"");u.dataset.decision=a.decision,x??=u,u.addEventListener("click",()=>{N(e,{type:"permission",requestId:o.permission.requestId,decision:a.decision})}),l.append(u)}f.append(M,s,l),k.append(f),C&&x&&queueMicrotask(()=>x?.focus())}function T(){let o=H(e.getSnapshot(),r);i.setAttribute("role",o.region.role),i.setAttribute("aria-label",o.region.accessibleName),g.textContent=o.header.title,h.textContent=o.header.statusText,P.textContent=o.header.tokenText,d.setAttribute("aria-busy",String(o.timeline.busy));let C=d.scrollHeight-d.scrollTop-d.clientHeight;if(o.timeline.entries.length===0){let f=t.createElement("div");f.className="xeno-ui__empty",f.textContent="No messages yet",d.replaceChildren(f)}else d.replaceChildren(...o.timeline.entries.map(f=>pe(t,f,e)));C<48&&(d.scrollTop=d.scrollHeight),$(o),c.disabled=o.composer.disabled,c.setAttribute("aria-label",o.composer.inputLabel),c.placeholder=o.composer.placeholder,_.textContent=o.composer.sendLabel,_.disabled=o.composer.disabled,R.textContent=o.composer.cancelLabel,R.hidden=!o.timeline.busy}let y=null,S=!1;function O(){let o=t.defaultView?.requestAnimationFrame;if(o){if(y!==null)return;y=o.call(t.defaultView,()=>{y=null,T()});return}S||(S=!0,queueMicrotask(()=>{S=!1,T()}))}let j=e.subscribe(O);return T(),b(),{element:i,render:T,focusInput(){c.focus()},dispose(){j(),y!==null&&t.defaultView?.cancelAnimationFrame&&t.defaultView.cancelAnimationFrame(y),i.remove()}}}0&&(module.exports={XENO_UI_RENDERER_API_VERSION,createAgentUiController,createAgentUiView,dispatchAgentUiAction,isSafeMarkdownHref,mountAgentUi,parseMarkdown,xenoUiCss,xenoUiTokens});
@@ -0,0 +1,298 @@
1
+ interface ImageUrlBlock {
2
+ type: "image_url";
3
+ image_url: {
4
+ url: string;
5
+ detail?: "auto" | "low" | "high";
6
+ };
7
+ }
8
+ interface ResourceContentBlock {
9
+ type: "resource";
10
+ uri?: string;
11
+ mimeType?: string;
12
+ text?: string;
13
+ data?: string;
14
+ }
15
+ type ToolAssistantContentBlock = TextBlock | ImageUrlBlock | ResourceContentBlock;
16
+ type ToolOperationState = "registered" | "starting" | "running_foreground" | "running_background" | "waiting_for_input" | "stalled" | "verifying" | "completed" | "failed" | "timed_out" | "cancelled" | "orphaned";
17
+ type ToolCompletionPolicy = "await" | "observe" | "detach";
18
+ interface ExpectedOutputContract {
19
+ path: string;
20
+ kind?: "file" | "directory";
21
+ nonEmpty?: boolean;
22
+ }
23
+ interface ToolEvidence {
24
+ id: string;
25
+ kind: "artifact" | "process" | "verification";
26
+ status: "pending" | "verified" | "failed";
27
+ path?: string;
28
+ observedAt: string;
29
+ operationId: string;
30
+ detail?: Record<string, string | number | boolean | null>;
31
+ }
32
+ interface ToolOperationSnapshot {
33
+ schemaVersion: 1;
34
+ operationId: string;
35
+ turnId: string;
36
+ generation: number;
37
+ toolCallId: string;
38
+ toolName: string;
39
+ ownerSessionId?: string;
40
+ state: ToolOperationState;
41
+ terminal: boolean;
42
+ presentation: "foreground" | "background";
43
+ completionPolicy: ToolCompletionPolicy;
44
+ promotable: boolean;
45
+ processId?: string;
46
+ taskId?: string;
47
+ pid?: number;
48
+ commandFingerprint?: string;
49
+ outputPath?: string;
50
+ startedAt: string;
51
+ lastActivityAt: string;
52
+ deadlineAt?: string;
53
+ elapsedMs: number;
54
+ idleMs: number;
55
+ outputBytes: number;
56
+ nextOffset: number;
57
+ exitCode?: number | null;
58
+ completionReason?: string;
59
+ suggestedNextAction?: string;
60
+ expectedOutputs?: ExpectedOutputContract[];
61
+ evidence?: ToolEvidence[];
62
+ }
63
+ interface ToolResult {
64
+ success: boolean;
65
+ output: string;
66
+ error?: string;
67
+ errorCode?: string;
68
+ errorDetails?: Record<string, unknown>;
69
+ assistantContent?: ToolAssistantContentBlock[];
70
+ assistantOnlyContent?: ToolAssistantContentBlock[];
71
+ operation?: ToolOperationSnapshot;
72
+ evidence?: ToolEvidence[];
73
+ retryable?: boolean;
74
+ }
75
+ interface TextBlock {
76
+ type: "text";
77
+ text: string;
78
+ }
79
+ type PermissionPromptOperation = "generic" | "filesystem" | "write" | "edit" | "bash";
80
+ interface PermissionPromptPreviewLine {
81
+ kind: "meta" | "context" | "add" | "remove";
82
+ text: string;
83
+ }
84
+ interface PermissionPromptPreview {
85
+ title: string;
86
+ summary?: string;
87
+ lines: PermissionPromptPreviewLine[];
88
+ truncated?: boolean;
89
+ }
90
+ declare const XENO_UI_RENDERER_API_VERSION: 1;
91
+ type AgentStatus = "idle" | "thinking" | "executing" | "error" | "disconnected";
92
+ type ToolCallStatus = "pending" | "running" | "success" | "error";
93
+ type PermissionDecision = "allow" | "always" | "deny";
94
+ interface ChatMessage {
95
+ id: string;
96
+ role: "user" | "assistant";
97
+ content: string;
98
+ timestamp: number;
99
+ isStreaming?: boolean;
100
+ }
101
+ interface ToolCallEvent {
102
+ id: string;
103
+ toolName: string;
104
+ input: Record<string, unknown>;
105
+ status: ToolCallStatus;
106
+ result?: ToolResult;
107
+ durationMs?: number;
108
+ timestamp: number;
109
+ }
110
+ interface ErrorEvent {
111
+ id: string;
112
+ message: string;
113
+ retryable: boolean;
114
+ timestamp: number;
115
+ }
116
+ type ConversationItem = {
117
+ type: "message";
118
+ data: ChatMessage;
119
+ } | {
120
+ type: "tool_call";
121
+ data: ToolCallEvent;
122
+ } | {
123
+ type: "error";
124
+ data: ErrorEvent;
125
+ };
126
+ interface AgentUiPermissionRequest {
127
+ id: string;
128
+ toolName: string;
129
+ detail: string;
130
+ description?: string;
131
+ operation?: PermissionPromptOperation;
132
+ preview?: PermissionPromptPreview;
133
+ riskLevel: "low" | "medium" | "high";
134
+ timestamp: number;
135
+ }
136
+ interface TokenUsage {
137
+ input: number;
138
+ output: number;
139
+ total: number;
140
+ }
141
+ interface AgentUiAgent {
142
+ readonly tokenUsage: TokenUsage;
143
+ run(prompt: string): Promise<unknown>;
144
+ cancelCurrentTurn(): void;
145
+ }
146
+ interface AgentUiSnapshot {
147
+ apiVersion: typeof XENO_UI_RENDERER_API_VERSION;
148
+ revision: number;
149
+ items: readonly ConversationItem[];
150
+ isProcessing: boolean;
151
+ status: AgentStatus;
152
+ tokenUsage: Readonly<TokenUsage>;
153
+ permissionRequest: Readonly<AgentUiPermissionRequest> | null;
154
+ lastUserMessage: string | null;
155
+ }
156
+ type AgentUiListener = (snapshot: AgentUiSnapshot) => void;
157
+ interface AgentUiControllerOptions {
158
+ agent: AgentUiAgent;
159
+ enablePermissionRequests?: boolean;
160
+ now?: () => number;
161
+ createId?: () => string;
162
+ }
163
+ interface AgentUiController {
164
+ readonly apiVersion: typeof XENO_UI_RENDERER_API_VERSION;
165
+ getSnapshot(): AgentUiSnapshot;
166
+ subscribe(listener: AgentUiListener): () => void;
167
+ sendMessage(text: string): Promise<boolean>;
168
+ cancelExecution(): void;
169
+ clearMessages(): void;
170
+ retryLastMessage(): Promise<boolean>;
171
+ resolvePermission(requestId: string, decision: PermissionDecision): boolean;
172
+ dispose(): void;
173
+ }
174
+ interface AgentUiViewOptions {
175
+ agentName?: string;
176
+ regionLabel?: string;
177
+ inputLabel?: string;
178
+ inputPlaceholder?: string;
179
+ }
180
+ interface AgentUiTimelineEntryView {
181
+ key: string;
182
+ kind: "user-message" | "assistant-message" | "tool-call" | "error";
183
+ role: "article" | "status" | "alert";
184
+ accessibleName: string;
185
+ text: string;
186
+ detail?: string;
187
+ state?: ToolCallStatus;
188
+ retryable?: boolean;
189
+ streaming?: boolean;
190
+ }
191
+ interface AgentUiPermissionView {
192
+ role: "alertdialog";
193
+ accessibleName: string;
194
+ description: string;
195
+ riskLevel: "low" | "medium" | "high";
196
+ requestId: string;
197
+ controls: readonly {
198
+ label: string;
199
+ decision: PermissionDecision;
200
+ }[];
201
+ }
202
+ interface AgentUiView {
203
+ apiVersion: typeof XENO_UI_RENDERER_API_VERSION;
204
+ revision: number;
205
+ region: {
206
+ role: "region";
207
+ accessibleName: string;
208
+ };
209
+ header: {
210
+ title: string;
211
+ statusRole: "status";
212
+ statusText: string;
213
+ tokenText: string;
214
+ };
215
+ timeline: {
216
+ role: "log";
217
+ live: "polite";
218
+ busy: boolean;
219
+ entries: readonly AgentUiTimelineEntryView[];
220
+ };
221
+ permission: AgentUiPermissionView | null;
222
+ composer: {
223
+ role: "form";
224
+ inputLabel: string;
225
+ placeholder: string;
226
+ disabled: boolean;
227
+ sendLabel: string;
228
+ cancelLabel: string;
229
+ };
230
+ }
231
+ type AgentUiAction = {
232
+ type: "send";
233
+ text: string;
234
+ } | {
235
+ type: "cancel";
236
+ } | {
237
+ type: "clear";
238
+ } | {
239
+ type: "retry";
240
+ } | {
241
+ type: "permission";
242
+ requestId: string;
243
+ decision: PermissionDecision;
244
+ };
245
+ interface AgentUiDomOptions extends AgentUiViewOptions {
246
+ className?: string;
247
+ injectStyles?: boolean;
248
+ styleNonce?: string;
249
+ onClose?: () => void;
250
+ }
251
+ interface AgentUiDomHandle {
252
+ readonly element: HTMLElement;
253
+ render(): void;
254
+ focusInput(): void;
255
+ dispose(): void;
256
+ }
257
+ declare function createAgentUiController(options: AgentUiControllerOptions): AgentUiController;
258
+ declare function mountAgentUi(target: HTMLElement, controller: AgentUiController, options?: AgentUiDomOptions): AgentUiDomHandle;
259
+ type MarkdownSegment = {
260
+ kind: "text";
261
+ text: string;
262
+ } | {
263
+ kind: "code-block";
264
+ language: string;
265
+ code: string;
266
+ } | {
267
+ kind: "inline-code";
268
+ code: string;
269
+ } | {
270
+ kind: "strong";
271
+ text: string;
272
+ } | {
273
+ kind: "emphasis";
274
+ text: string;
275
+ } | {
276
+ kind: "link";
277
+ text: string;
278
+ href: string;
279
+ };
280
+ declare function parseMarkdown(text: string): MarkdownSegment[];
281
+ declare function isSafeMarkdownHref(href: string): boolean;
282
+ declare const xenoUiTokens: Readonly<{
283
+ background: "#101214";
284
+ surface: "#181b1f";
285
+ surfaceRaised: "#20242a";
286
+ border: "#343a42";
287
+ text: "#f2f4f7";
288
+ textMuted: "#aab2bd";
289
+ accent: "#5da9e9";
290
+ success: "#56b881";
291
+ warning: "#e7b65a";
292
+ danger: "#e57373";
293
+ focus: "#8bc5f4";
294
+ }>;
295
+ declare const xenoUiCss = "\n.xeno-ui{box-sizing:border-box;display:grid;grid-template-rows:auto minmax(12rem,1fr) auto;width:min(32rem,100%);height:min(44rem,100%);min-height:24rem;border:1px solid var(--xeno-border,#343a42);background:var(--xeno-bg,#101214);color:var(--xeno-text,#f2f4f7);font:14px/1.45 ui-sans-serif,system-ui,-apple-system,\"Segoe UI\",sans-serif;letter-spacing:0}\n.xeno-ui *{box-sizing:border-box;letter-spacing:0}\n.xeno-ui__header{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;border-bottom:1px solid var(--xeno-border,#343a42);background:var(--xeno-surface,#181b1f)}\n.xeno-ui__title{min-width:0;margin:0;font-size:.95rem;font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.xeno-ui__status{margin-left:auto;color:var(--xeno-muted,#aab2bd);font-size:.78rem;text-transform:capitalize}\n.xeno-ui__tokens{color:var(--xeno-muted,#aab2bd);font-variant-numeric:tabular-nums;font-size:.75rem}\n.xeno-ui__timeline{min-height:0;overflow:auto;padding:1rem;scrollbar-gutter:stable}\n.xeno-ui__empty{display:grid;min-height:100%;place-items:center;color:var(--xeno-muted,#aab2bd)}\n.xeno-ui__entry{margin:0 0 .75rem;padding:.7rem .8rem;border-left:3px solid var(--xeno-border,#343a42);background:var(--xeno-surface,#181b1f);white-space:pre-wrap;overflow-wrap:anywhere}\n.xeno-ui__entry--user{margin-left:12%;border-left-color:var(--xeno-accent,#5da9e9)}\n.xeno-ui__entry--assistant{margin-right:8%;border-left-color:var(--xeno-success,#56b881)}\n.xeno-ui__entry--tool{border-left-color:var(--xeno-warning,#e7b65a);font-family:ui-monospace,\"Cascadia Mono\",monospace;font-size:.82rem}\n.xeno-ui__entry--error{border-left-color:var(--xeno-danger,#e57373)}\n.xeno-ui__entry code{padding:.08rem .3rem;border:1px solid var(--xeno-border,#343a42);background:var(--xeno-raised,#20242a);font-family:ui-monospace,\"Cascadia Mono\",monospace}\n.xeno-ui__entry pre{max-width:100%;margin:.55rem 0 0;padding:.7rem;overflow:auto;border:1px solid var(--xeno-border,#343a42);background:#0b0d0f;white-space:pre}\n.xeno-ui__entry a{color:var(--xeno-accent,#5da9e9)}\n.xeno-ui__details{margin-top:.5rem;color:var(--xeno-muted,#aab2bd)}\n.xeno-ui__details pre{max-height:16rem}\n.xeno-ui__permission{margin:.75rem 1rem 0;padding:.8rem;border:1px solid var(--xeno-warning,#e7b65a);background:var(--xeno-raised,#20242a)}\n.xeno-ui__permission-title{margin:0 0 .35rem;font-size:.9rem}\n.xeno-ui__permission-actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}\n.xeno-ui__composer{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.55rem;padding:.75rem 1rem;border-top:1px solid var(--xeno-border,#343a42);background:var(--xeno-surface,#181b1f)}\n.xeno-ui__input{width:100%;min-height:2.75rem;max-height:9rem;resize:none;overflow-y:hidden;padding:.65rem .75rem;border:1px solid var(--xeno-border,#343a42);border-radius:4px;background:#0f1113;color:var(--xeno-text,#f2f4f7);font:inherit}\n.xeno-ui__controls{display:flex;align-items:flex-end;gap:.45rem}\n.xeno-ui__button{min-width:2.5rem;min-height:2.5rem;padding:.55rem .7rem;border:1px solid var(--xeno-border,#343a42);border-radius:4px;background:var(--xeno-raised,#20242a);color:var(--xeno-text,#f2f4f7);font:inherit;cursor:pointer}\n.xeno-ui__button:hover{border-color:var(--xeno-accent,#5da9e9)}\n.xeno-ui__button--primary{border-color:var(--xeno-accent,#5da9e9);background:#1b4f78}\n.xeno-ui__button--danger{border-color:var(--xeno-danger,#e57373)}\n.xeno-ui__button:disabled,.xeno-ui__input:disabled{cursor:not-allowed;opacity:.55}\n.xeno-ui :focus-visible{outline:2px solid var(--xeno-focus,#8bc5f4);outline-offset:2px}\n@media (max-width:36rem){.xeno-ui{width:100%;height:100%;border-left:0;border-right:0}.xeno-ui__entry--user,.xeno-ui__entry--assistant{margin-left:0;margin-right:0}.xeno-ui__composer{grid-template-columns:1fr}.xeno-ui__controls{justify-content:flex-end}}\n@media (prefers-reduced-motion:reduce){.xeno-ui *{scroll-behavior:auto!important;transition:none!important}}\n";
296
+ declare function createAgentUiView(snapshot: AgentUiSnapshot, options?: AgentUiViewOptions): AgentUiView;
297
+ declare function dispatchAgentUiAction(controller: AgentUiController, action: AgentUiAction): Promise<boolean>;
298
+ export { type AgentStatus, type AgentUiAction, type AgentUiAgent, type AgentUiController, type AgentUiControllerOptions, type AgentUiDomHandle, type AgentUiDomOptions, type AgentUiListener, type AgentUiPermissionRequest, type AgentUiSnapshot, type AgentUiTimelineEntryView, type AgentUiView, type AgentUiViewOptions, type ChatMessage, type ConversationItem, type ErrorEvent, type PermissionDecision, type TokenUsage, type ToolCallEvent, type ToolCallStatus, XENO_UI_RENDERER_API_VERSION, createAgentUiController, createAgentUiView, dispatchAgentUiAction, isSafeMarkdownHref, mountAgentUi, parseMarkdown, xenoUiCss, xenoUiTokens };