@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 @@
1
+ import{randomUUID as H}from"node:crypto";import{createHash as Y}from"node:crypto";function y(e){return{algorithm:"sha256",value:Y("sha256").update(e).digest("hex")}}function E(e){return JSON.stringify(R(e,new Set))}function x(e){return y(E(e))}function R(e,t){if(e===null||typeof e!="object"){if(typeof e=="number"&&!Number.isFinite(e))throw new TypeError("Artifact JSON cannot contain non-finite numbers");return e}if(t.has(e))throw new TypeError("Artifact JSON cannot contain cycles");if(t.add(e),Array.isArray(e)){let i=e.map(r=>R(r,t));return t.delete(e),i}let n={};for(let i of Object.keys(e).sort((r,a)=>r.localeCompare(a))){let r=e[i];if(r===void 0)throw new TypeError(`Artifact JSON property ${i} is undefined`);n[i]=R(r,t)}return t.delete(e),n}import{Buffer as N}from"node:buffer";var k=class extends Error{code="ARTIFACT_INVALID";issues;constructor(t,n){super(t),this.name="XenoArtifactValidationError",this.issues=n.map(i=>({...i}))}};var Q=/^[a-z0-9][a-z0-9._/-]{0,127}$/,ee="[\\u0000-\\u001f\\u007f]",te=new RegExp(ee),ne=/^[a-f0-9]{64}$/,ie=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,re=new Set(["draft","pending_review","approved","rejected","superseded","archived"]),oe=new Set(["public","internal","confidential","restricted"]),se=new Set(["agent","tool","user","system","integration"]),ae=new Set(["plan","requirements","design","task-graph","patch","diff","file","document","diagram","screenshot","recording","browser-snapshot","test-report","review-report","security-report","performance-report","release-report","sbom","provenance","attestation"]),ce=new Set(["requirement","design-decision","risk","task","agent","run","tool-call","edit","commit","test-case","test-run","finding","approval","artifact","release","claim"]),de=new Set(["decomposes","depends_on","implements","changes","tests","verifies","finds","fixes","reviews","approves","rejects","supersedes","derived_from","produced_by","supports_claim","contradicts_claim","released_as"]);function o(e,t,n,i){e.push({path:t,code:n,message:i})}function s(e,t,n,i=1024){return typeof e!="string"||e.trim().length===0?(o(n,t,"required_string","Value must be a non-empty string"),!1):(e.length>i&&o(n,t,"string_too_long",`Value must not exceed ${i} characters`),te.test(e)&&o(n,t,"control_character","Value must not contain control characters"),!0)}function b(e,t,n){e!==void 0&&(!Number.isFinite(Date.parse(e))||!e.includes("T"))&&o(n,t,"invalid_timestamp","Value must be an ISO 8601 timestamp")}function v(e,t,n,i){if(typeof e!="string"||!e.startsWith(t))return;let r=e.slice(t.length);Q.test(r)||o(i,n,"invalid_custom_name",`Custom name after ${t} is invalid`)}function ue(e,t,n){if(!e||typeof e!="object"){o(n,t,"missing_actor","Actor is required");return}s(e.kind,`${t}.kind`,n,64),se.has(e.kind)||o(n,`${t}.kind`,"unknown_actor_kind","Actor kind is not supported"),s(e.id,`${t}.id`,n,512),e?.displayName!==void 0&&s(e.displayName,`${t}.displayName`,n,512),e?.profileFingerprint!==void 0&&!/^[a-f0-9]{64}$/.test(e.profileFingerprint)&&o(n,`${t}.profileFingerprint`,"invalid_fingerprint","Profile fingerprint must be 64 lowercase hexadecimal characters")}function pe(e,t,n){if(!e||typeof e!="object"){o(n,t,"invalid_anchor","Anchor must be an object");return}switch(e.kind){case"file":s(e.path,`${t}.path`,n,4096);break;case"source-line":s(e.path,`${t}.path`,n,4096),(!Number.isInteger(e.startLine)||e.startLine<1)&&o(n,`${t}.startLine`,"invalid_line","startLine must be a positive integer"),e.endLine!==void 0&&(!Number.isInteger(e.endLine)||e.endLine<e.startLine)&&o(n,`${t}.endLine`,"invalid_line_range","endLine must be greater than or equal to startLine");break;case"diff-hunk":s(e.path,`${t}.path`,n,4096),s(e.hunkId,`${t}.hunkId`,n,512);break;case"symbol":s(e.path,`${t}.path`,n,4096),s(e.symbol,`${t}.symbol`,n,1024);break;case"dom-node":s(e.pageId,`${t}.pageId`,n,512),!e.selector&&!e.accessibilityId&&!e.snapshotArtifactId&&o(n,t,"missing_dom_locator","DOM anchors require a selector, accessibility ID, or snapshot artifact ID");break;case"timeline":s(e.recordingArtifactId,`${t}.recordingArtifactId`,n,512),(!Number.isFinite(e.startMs)||e.startMs<0)&&o(n,`${t}.startMs`,"invalid_time","startMs must be a non-negative finite number"),e.endMs!==void 0&&(!Number.isFinite(e.endMs)||e.endMs<e.startMs)&&o(n,`${t}.endMs`,"invalid_time_range","endMs must be greater than or equal to startMs");break;case"region":s(e.mediaArtifactId,`${t}.mediaArtifactId`,n,512),[e.x,e.y,e.width,e.height].every(Number.isFinite)?(e.width<=0||e.height<=0)&&o(n,t,"invalid_region_size","Region width and height must be positive"):o(n,t,"invalid_region","Region coordinates must be finite numbers");break;case"artifact":s(e.artifactId,`${t}.artifactId`,n,512);break;default:typeof e.kind!="string"||!e.kind.startsWith("custom:")?o(n,`${t}.kind`,"unknown_anchor","Anchor kind is not supported"):v(e.kind,"custom:",`${t}.kind`,n)}}function A(e,t,n,i){if(!(e===null||typeof e=="string"||typeof e=="boolean")){if(typeof e=="number"){Number.isFinite(e)||o(n,t,"non_finite_number","JSON numbers must be finite");return}if(typeof e!="object"){o(n,t,"non_json_value","Value must be JSON-serializable");return}if(i.has(e)){o(n,t,"cyclic_value","Value must not contain cycles");return}if(i.add(e),Array.isArray(e))e.forEach((r,a)=>A(r,`${t}[${a}]`,n,i));else for(let[r,a]of Object.entries(e))a===void 0?o(n,`${t}.${r}`,"undefined_value","Undefined is not valid JSON"):A(a,`${t}.${r}`,n,i);i.delete(e)}}function le(e){let t=[];if(!e||typeof e!="object")return[{path:"$",code:"invalid_artifact",message:"Artifact must be an object"}];if(e.schemaVersion!==1&&o(t,"schemaVersion","unsupported_schema",`schemaVersion must be ${1}`),s(e.artifactId,"artifactId",t,512),(!Number.isInteger(e.revision)||e.revision<1)&&o(t,"revision","invalid_revision","revision must be a positive integer"),s(e.kind,"kind",t,160),typeof e.kind=="string"&&!ae.has(e.kind)&&!e.kind.startsWith("custom:")&&o(t,"kind","unknown_artifact_kind","Artifact kind is not supported"),v(e.kind,"custom:","kind",t),s(e.title,"title",t,1024),e.description!==void 0&&s(e.description,"description",t,32768),s(e.state,"state",t,64),re.has(e.state)||o(t,"state","unknown_state","Artifact state is not supported"),s(e.createdAt,"createdAt",t,128),b(e.createdAt,"createdAt",t),b(e.updatedAt,"updatedAt",t),e.updatedAt&&Number.isFinite(Date.parse(e.createdAt))&&Date.parse(e.updatedAt)<Date.parse(e.createdAt)&&o(t,"updatedAt","timestamp_order","updatedAt must not precede createdAt"),s(e.mediaType,"mediaType",t,255),s(e.sensitivity,"sensitivity",t,64),oe.has(e.sensitivity)||o(t,"sensitivity","unknown_sensitivity","Sensitivity is not supported"),e.identity)for(let[i,r]of Object.entries(e.identity))r!==void 0&&s(r,`identity.${i}`,t,512);if(!e.content||typeof e.content!="object")o(t,"content","missing_content","content descriptor is required");else{!e.content.hash||typeof e.content.hash!="object"?o(t,"content.hash","missing_hash","content hash is required"):(s(e.content.hash.algorithm,"content.hash.algorithm",t,128),v(e.content.hash.algorithm,"custom:","content.hash.algorithm",t),typeof e.content.hash.algorithm=="string"&&e.content.hash.algorithm!=="sha256"&&!e.content.hash.algorithm.startsWith("custom:")&&o(t,"content.hash.algorithm","unknown_hash_algorithm","Hash algorithm is not supported"),s(e.content.hash.value,"content.hash.value",t,512),e.content.hash.algorithm==="sha256"&&!ne.test(e.content.hash.value)&&o(t,"content.hash.value","invalid_sha256","SHA-256 hash must be 64 lowercase hexadecimal characters")),(!Number.isSafeInteger(e.content.sizeBytes)||e.content.sizeBytes<0)&&o(t,"content.sizeBytes","invalid_size","sizeBytes must be a non-negative safe integer");let i=e.content.storage;if(!i||typeof i!="object")o(t,"content.storage","missing_storage","storage reference is required");else if(i.type==="inline")if(i.text===void 0==(i.base64===void 0))o(t,"content.storage","invalid_inline_storage","Inline storage requires exactly one of text or base64");else{let r;i.text!==void 0?r=N.from(i.text,"utf8"):i.base64!==void 0&&(ie.test(i.base64)?r=N.from(i.base64,"base64"):o(t,"content.storage.base64","invalid_base64","Inline base64 content is malformed")),r&&e.content.sizeBytes!==r.byteLength&&o(t,"content.sizeBytes","content_size_mismatch","sizeBytes does not match inline content"),r&&e.content.hash.algorithm==="sha256"&&y(r).value!==e.content.hash.value&&o(t,"content.hash.value","content_hash_mismatch","Hash does not match inline content")}else i.type==="file"?s(i.path,"content.storage.path",t,4096):i.type==="blob"?s(i.uri,"content.storage.uri",t,8192):i.type==="git"?(s(i.commit,"content.storage.commit",t,512),s(i.path,"content.storage.path",t,4096)):i.type==="url"?(s(i.url,"content.storage.url",t,8192),b(i.expiresAt,"content.storage.expiresAt",t)):i.type==="external"?(s(i.provider,"content.storage.provider",t,255),s(i.locator,"content.storage.locator",t,8192)):o(t,"content.storage.type","unknown_storage","Storage type is not supported");e.content.encoding!==void 0&&(typeof e.content.encoding!="string"||e.content.encoding!=="utf8"&&e.content.encoding!=="base64"&&e.content.encoding!=="binary"&&!e.content.encoding.startsWith("custom:"))&&o(t,"content.encoding","unknown_encoding","Content encoding is not supported"),v(e.content.encoding,"custom:","content.encoding",t)}!e.provenance||typeof e.provenance!="object"?o(t,"provenance","missing_provenance","provenance is required"):(ue(e.provenance.producer,"provenance.producer",t),e.provenance.capabilityLeaseIds?.forEach((i,r)=>s(i,`provenance.capabilityLeaseIds[${r}]`,t,512)),e.provenance.sourceArtifactIds?.forEach((i,r)=>s(i,`provenance.sourceArtifactIds[${r}]`,t,512)),e.provenance.attributes&&A(e.provenance.attributes,"provenance.attributes",t,new Set));let n=new Set;return e.relationships?.forEach((i,r)=>{let a=`relationships[${r}]`;s(i.relation,`${a}.relation`,t,160),typeof i.relation=="string"&&!de.has(i.relation)&&!i.relation.startsWith("custom:")&&o(t,`${a}.relation`,"unknown_relationship","Relationship type is not supported"),v(i.relation,"custom:",`${a}.relation`,t),s(i.target?.type,`${a}.target.type`,t,160),typeof i.target?.type=="string"&&!ce.has(i.target.type)&&!i.target.type.startsWith("custom:")&&o(t,`${a}.target.type`,"unknown_reference_type","Evidence reference type is not supported"),v(i.target?.type,"custom:",`${a}.target.type`,t),s(i.target?.id,`${a}.target.id`,t,512);let d=`${i.relation}:${i.target?.type}:${i.target?.id}:${i.target?.revision??""}`;n.has(d)&&o(t,a,"duplicate_relationship","Duplicate relationship"),n.add(d),i.attributes&&A(i.attributes,`${a}.attributes`,t,new Set)}),e.anchors?.forEach((i,r)=>pe(i,`anchors[${r}]`,t)),e.revision===1&&e.predecessorRevision!==void 0&&o(t,"predecessorRevision","unexpected_predecessor","First revision cannot have a predecessor"),e.revision>1&&(!Number.isInteger(e.predecessorRevision)||(e.predecessorRevision??0)>=e.revision)&&o(t,"predecessorRevision","invalid_predecessor","Later revisions require an earlier predecessor revision"),b(e.retention?.retainUntil,"retention.retainUntil",t),e.retention?.legalHold!==void 0&&typeof e.retention.legalHold!="boolean"&&o(t,"retention.legalHold","invalid_boolean","legalHold must be a boolean"),e.extensions&&A(e.extensions,"extensions",t,new Set),t}function V(e){let t=le(e);if(t.length>0)throw new k("XENO artifact validation failed",t)}function q(e,t={}){for(let n of e){let i=n.codePointAt(0);if(i===127)return!0;if(!(i>31)&&!(i===9&&t.allowTab===!0)&&!((i===10||i===13)&&t.allowLineBreaks===!0))return!0}return!1}var L="xeno.oracle-report.v1",p=class extends Error{constructor(n){super(`XENO Oracle report is invalid: ${n.join("; ")}`);this.issues=n;this.name="XenoOracleValidationError"}issues;code="XENO_ORACLE_INVALID"},M=class{execute;adjudicate;now;idFactory;constructor(t){if(typeof t?.execute!="function"||typeof t?.adjudicate!="function")throw new TypeError("Oracle execution and adjudication functions are required");this.execute=t.execute,this.adjudicate=t.adjudicate,this.now=t.now??(()=>new Date().toISOString()),this.idFactory=t.idFactory??(n=>`${n}_${H()}`)}async run(t){let n=U(t.question,"question",128e3),i=t.runId??`oracle_run_${H()}`;K(i,"runId");let r=[t.primary,...t.critics,t.adjudicator];me(r,t.primary,t.critics,t.adjudicator);let a=this.now(),d=await this.execute({runId:i,question:n,participant:structuredClone(t.primary)}),u=D(d,t.primary,this.idFactory("opinion"),this.now()),O=await Promise.all(t.critics.map(async l=>{let h=await this.execute({runId:i,question:n,participant:structuredClone(l),primaryOpinion:structuredClone(u)});return D(h,l,this.idFactory("opinion"),this.now())})),c=[u,...O],g=await this.adjudicate({runId:i,question:n,participant:structuredClone(t.adjudicator),opinions:structuredClone(c)}),X=fe(g,t.adjudicator,this.now()),W=this.now(),Z=new Set(r.map(_)),G=new Set(c.flatMap(l=>l.citations.map(h=>h.citationId))),j={schemaVersion:L,reportId:this.idFactory("oracle"),runId:i,question:n,questionHash:y(n),startedAt:a,completedAt:W,opinions:c,adjudication:X,summary:{participantCount:r.length,distinctModelCount:Z.size,totalInputTokens:c.reduce((l,h)=>l+h.usage.inputTokens,X.usage.inputTokens),totalOutputTokens:c.reduce((l,h)=>l+h.usage.outputTokens,X.usage.outputTokens),unresolvedDisagreements:X.disagreements.filter(l=>l.resolution==="unresolved").length,citationCount:G.size}};return C(j),j}};function C(e){let t=[];e?.schemaVersion!==L&&t.push("schemaVersion must be xeno.oracle-report.v1"),f(e?.reportId,"reportId",t),f(e?.runId,"runId",t),m(e?.question,"question",t,128e3),(e?.questionHash?.algorithm!=="sha256"||e.questionHash.value!==y(e.question??"").value)&&t.push("questionHash does not match question"),I(e?.startedAt,"startedAt",t),I(e?.completedAt,"completedAt",t),Date.parse(e?.completedAt)<Date.parse(e?.startedAt)&&t.push("completedAt cannot precede startedAt"),(!Array.isArray(e?.opinions)||e.opinions.length<2)&&t.push("at least two independent opinions are required");let n=new Set,i=new Set,r=new Set;for(let c of e?.opinions??[]){P(c,t),n.has(c.participant.participantId)&&t.push(`duplicate participant ${c.participant.participantId}`),n.add(c.participant.participantId),i.add(_(c.participant));for(let g of c.citations)r.add(g.citationId)}i.size<2&&t.push("Oracle requires at least two distinct provider/model identities"),F(e?.adjudication,r,t),e?.adjudication?.participant&&(n.add(e.adjudication.participant.participantId),i.add(_(e.adjudication.participant)));let a=[...(e?.opinions??[]).map(c=>c.usage),e?.adjudication?.usage].filter(Boolean),d=a.reduce((c,g)=>c+g.inputTokens,0),u=a.reduce((c,g)=>c+g.outputTokens,0);e?.summary?.participantCount!==n.size&&t.push("summary participantCount is inconsistent"),e?.summary?.distinctModelCount!==i.size&&t.push("summary distinctModelCount is inconsistent"),(e?.summary?.totalInputTokens!==d||e?.summary?.totalOutputTokens!==u)&&t.push("summary token usage is inconsistent"),e?.summary?.citationCount!==r.size&&t.push("summary citationCount is inconsistent");let O=e?.adjudication?.disagreements?.filter(c=>c.resolution==="unresolved").length??0;if(e?.summary?.unresolvedDisagreements!==O&&t.push("summary unresolvedDisagreements is inconsistent"),t.length>0)throw new p([...new Set(t)])}function ke(e,t){C(e);let n=e,i=E(n),r={schemaVersion:1,artifactId:t.artifactId??`oracle_${y(`${e.runId}:${e.questionHash.value}`).value.slice(0,24)}`,revision:1,kind:"custom:oracle-report",title:"Cross-model Oracle report",description:`${e.summary.distinctModelCount} distinct models; ${e.summary.unresolvedDisagreements} unresolved disagreements`,state:"pending_review",createdAt:e.completedAt,mediaType:"application/vnd.xeno.oracle-report+json",sensitivity:t.sensitivity??"internal",...t.identity?{identity:structuredClone(t.identity)}:{},content:{hash:x(n),sizeBytes:Buffer.byteLength(i,"utf8"),encoding:"utf8",storage:{type:"inline",text:i},redactedPreview:`${e.adjudication.verdict}: ${e.adjudication.conclusion.slice(0,240)}`},provenance:{producer:structuredClone(t.producer),attributes:{distinctModelCount:e.summary.distinctModelCount,participants:e.opinions.map(a=>`${a.participant.providerId}:${a.participant.model}`),adjudicator:`${e.adjudication.participant.providerId}:${e.adjudication.participant.model}`}},...t.accessPolicyId?{accessPolicyId:t.accessPolicyId}:{},extensions:{"xeno.oracle.verdict":e.adjudication.verdict,"xeno.oracle.confidence":e.adjudication.confidence,"xeno.oracle.unresolved":e.summary.unresolvedDisagreements,"xeno.oracle.questionHash":e.questionHash.value}};return V(r),r}function Se(e){if(e.kind!=="custom:oracle-report"||e.mediaType!=="application/vnd.xeno.oracle-report+json")throw new p([`Artifact ${e.artifactId} is not an Oracle report`]);if(e.content.storage.type!=="inline"||typeof e.content.storage.text!="string")throw new p(["Oracle reports require inline JSON content"]);let t;try{t=JSON.parse(e.content.storage.text)}catch{throw new p(["Oracle report content is invalid JSON"])}if(C(t),x(t).value!==e.content.hash.value)throw new p(["Oracle report content hash does not match the artifact"]);return structuredClone(t)}function D(e,t,n,i){let r=z(e.usage),a={...structuredClone(e.opinion),opinionId:n,participant:structuredClone(t),completedAt:i,usage:r},d=[];if(P(a,d),d.length>0)throw new p(d);return a}function fe(e,t,n){let i={...structuredClone(e.adjudication),participant:structuredClone(t),completedAt:n,usage:z(e.usage)},r=[];if(F(i,void 0,r),r.length>0)throw new p(r);return i}function me(e,t,n,i){let r=[];(n.length<1||n.length>8)&&r.push("Oracle requires one through eight critic models"),t.role!=="primary"&&r.push("primary participant role must be primary"),n.some(u=>u.role!=="critic")&&r.push("critic participant roles must be critic"),i.role!=="adjudicator"&&r.push("adjudicator participant role must be adjudicator");let a=new Set,d=new Set;for(let u of e)$(u,r),a.has(u.participantId)&&r.push(`duplicate participant ${u.participantId}`),a.add(u.participantId),d.add(_(u));if(d.size<2&&r.push("Oracle requires at least two distinct provider/model identities"),r.length>0)throw new p([...new Set(r)])}function P(e,t){f(e?.opinionId,"opinionId",t),$(e?.participant,t),m(e?.answer,"opinion answer",t,256e3),m(e?.publicRationale,"opinion publicRationale",t,128e3),T(e?.verdict)||t.push("opinion verdict is invalid"),S(e?.confidence,"opinion confidence",t),I(e?.completedAt,"opinion completedAt",t),B(e?.usage,"opinion usage",t);let n=new Set;for(let r of e?.citations??[])ge(r,t),n.has(r.citationId)&&t.push(`duplicate citation ${r.citationId}`),n.add(r.citationId);let i=new Set;for(let r of e?.claims??[]){f(r?.claimId,"claimId",t),i.has(r.claimId)&&t.push(`duplicate claim ${r.claimId}`),i.add(r.claimId),m(r?.statement,`claim ${r.claimId} statement`,t,32e3),T(r?.verdict)||t.push(`claim ${r.claimId} verdict is invalid`),S(r?.confidence,`claim ${r.claimId} confidence`,t);for(let a of r?.citationIds??[])n.has(a)||t.push(`claim ${r.claimId} references unknown citation ${a}`)}}function F(e,t,n){$(e?.participant,n),e?.participant?.role!=="adjudicator"&&n.push("adjudication participant role must be adjudicator"),m(e?.conclusion,"adjudication conclusion",n,256e3),m(e?.publicRationale,"adjudication publicRationale",n,128e3),T(e?.verdict)||n.push("adjudication verdict is invalid"),S(e?.confidence,"adjudication confidence",n),I(e?.completedAt,"adjudication completedAt",n),B(e?.usage,"adjudication usage",n);let i=new Set;for(let r of e?.disagreements??[])f(r?.disagreementId,"disagreementId",n),i.has(r.disagreementId)&&n.push(`duplicate disagreement ${r.disagreementId}`),i.add(r.disagreementId),m(r?.summary,`disagreement ${r.disagreementId} summary`,n,32e3),(!Array.isArray(r?.participantIds)||r.participantIds.length<2)&&n.push(`disagreement ${r.disagreementId} requires at least two participants`),["low","medium","high"].includes(r?.severity)||n.push(`disagreement ${r.disagreementId} severity is invalid`),r?.resolution!=="resolved"&&r?.resolution!=="unresolved"&&n.push(`disagreement ${r.disagreementId} resolution is invalid`);if(t)for(let r of e?.citationIds??[])t.has(r)||n.push(`adjudication references unknown citation ${r}`)}function $(e,t){f(e?.participantId,"participantId",t),f(e?.providerId,"providerId",t),m(e?.model,"participant model",t,512),e?.connectionId!==void 0&&f(e.connectionId,"connectionId",t),["primary","critic","adjudicator"].includes(e?.role)||t.push("participant role is invalid")}function ge(e,t){f(e?.citationId,"citationId",t);try{let n=new URL(e?.uri);n.protocol!=="https:"&&n.protocol!=="http:"&&t.push(`citation ${e.citationId} must use HTTP(S)`),(n.username||n.password)&&t.push(`citation ${e.citationId} cannot contain credentials`)}catch{t.push(`citation ${e?.citationId??"(unknown)"} URI is invalid`)}e?.retrievedAt!==void 0&&I(e.retrievedAt,`citation ${e.citationId} retrievedAt`,t),e?.contentHash&&(e.contentHash.algorithm!=="sha256"||!/^[a-f0-9]{64}$/u.test(e.contentHash.value))&&t.push(`citation ${e.citationId} contentHash is invalid`)}function z(e){return{inputTokens:J(e?.inputTokens),outputTokens:J(e?.outputTokens)}}function B(e,t,n){(!Number.isInteger(e?.inputTokens)||e.inputTokens<0)&&n.push(`${t} inputTokens must be a non-negative integer`),(!Number.isInteger(e?.outputTokens)||e.outputTokens<0)&&n.push(`${t} outputTokens must be a non-negative integer`)}function J(e){return Number.isInteger(e)&&(e??-1)>=0?e:0}function _(e){return`${e.providerId.trim().toLowerCase()}\0${e.model.trim().toLowerCase()}`}function U(e,t,n){let i=typeof e=="string"?e.trim():"";if(!i||i.length>n||q(i,{allowTab:!0,allowLineBreaks:!0}))throw new p([`${t} must be non-empty bounded text`]);return i}function K(e,t){let n=typeof e=="string"?e.trim():"";if(!/^[A-Za-z0-9][A-Za-z0-9._:@/-]{0,255}$/u.test(n))throw new p([`${t} is invalid`]);return n}function f(e,t,n){try{K(e,t)}catch{n.push(`${t} is invalid`)}}function m(e,t,n,i){try{U(e,t,i)}catch{n.push(`${t} must be non-empty bounded text`)}}function S(e,t,n){(typeof e!="number"||!Number.isFinite(e)||e<0||e>1)&&n.push(`${t} must be between 0 and 1`)}function I(e,t,n){(typeof e!="string"||!Number.isFinite(Date.parse(e)))&&n.push(`${t} must be an ISO timestamp`)}function T(e){return e==="supported"||e==="contested"||e==="unsupported"||e==="insufficient-evidence"}export{L as XENO_ORACLE_REPORT_SCHEMA_VERSION,M as XenoOracleCoordinator,p as XenoOracleValidationError,C as assertValidXenoOracleReport,Se as xenoArtifactToOracleReport,ke as xenoOracleReportToArtifact};
@@ -0,0 +1 @@
1
+ {"inputs":{"src/artifacts/hash.ts":{"bytes":1530,"imports":[{"path":"node:crypto","kind":"import-statement","external":true}],"format":"esm"},"src/artifacts/types.ts":{"bytes":9397,"imports":[],"format":"esm"},"src/artifacts/validation.ts":{"bytes":25931,"imports":[{"path":"node:buffer","kind":"import-statement","external":true},{"path":"src/artifacts/hash.ts","kind":"import-statement","original":"./hash.js"},{"path":"src/artifacts/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/utils/text-security.ts":{"bytes":833,"imports":[],"format":"esm"},"src/oracle/protocol.ts":{"bytes":24342,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/artifacts/hash.ts","kind":"import-statement","original":"../artifacts/hash.js"},{"path":"src/artifacts/types.ts","kind":"import-statement","original":"../artifacts/types.js"},{"path":"src/artifacts/validation.ts","kind":"import-statement","original":"../artifacts/validation.js"},{"path":"src/utils/text-security.ts","kind":"import-statement","original":"../utils/text-security.js"}],"format":"esm"},"src/oracle/index.ts":{"bytes":32,"imports":[{"path":"src/oracle/protocol.ts","kind":"import-statement","original":"./protocol.js"}],"format":"esm"}},"outputs":{"dist/oracle/index.cjs":{"imports":[{"path":"node:crypto","kind":"require-call","external":true},{"path":"node:crypto","kind":"require-call","external":true},{"path":"node:buffer","kind":"require-call","external":true}],"exports":[],"entryPoint":"src/oracle/index.ts","inputs":{"src/oracle/index.ts":{"bytesInOutput":243},"src/oracle/protocol.ts":{"bytesInOutput":10786},"src/artifacts/hash.ts":{"bytesInOutput":715},"src/artifacts/validation.ts":{"bytesInOutput":10650},"src/utils/text-security.ts":{"bytesInOutput":179}},"bytes":23195}}}
@@ -0,0 +1 @@
1
+ {"inputs":{"src/artifacts/hash.ts":{"bytes":1530,"imports":[{"path":"node:crypto","kind":"import-statement","external":true}],"format":"esm"},"src/artifacts/types.ts":{"bytes":9397,"imports":[],"format":"esm"},"src/artifacts/validation.ts":{"bytes":25931,"imports":[{"path":"node:buffer","kind":"import-statement","external":true},{"path":"src/artifacts/hash.ts","kind":"import-statement","original":"./hash.js"},{"path":"src/artifacts/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/utils/text-security.ts":{"bytes":833,"imports":[],"format":"esm"},"src/oracle/protocol.ts":{"bytes":24342,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/artifacts/hash.ts","kind":"import-statement","original":"../artifacts/hash.js"},{"path":"src/artifacts/types.ts","kind":"import-statement","original":"../artifacts/types.js"},{"path":"src/artifacts/validation.ts","kind":"import-statement","original":"../artifacts/validation.js"},{"path":"src/utils/text-security.ts","kind":"import-statement","original":"../utils/text-security.js"}],"format":"esm"},"src/oracle/index.ts":{"bytes":32,"imports":[{"path":"src/oracle/protocol.ts","kind":"import-statement","original":"./protocol.js"}],"format":"esm"}},"outputs":{"dist/oracle/index.js":{"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"node:crypto","kind":"import-statement","external":true},{"path":"node:buffer","kind":"import-statement","external":true}],"exports":["XENO_ORACLE_REPORT_SCHEMA_VERSION","XenoOracleCoordinator","XenoOracleValidationError","assertValidXenoOracleReport","xenoArtifactToOracleReport","xenoOracleReportToArtifact"],"entryPoint":"src/oracle/index.ts","inputs":{"src/oracle/protocol.ts":{"bytesInOutput":10768},"src/artifacts/hash.ts":{"bytesInOutput":712},"src/artifacts/validation.ts":{"bytesInOutput":10642},"src/utils/text-security.ts":{"bytesInOutput":179},"src/oracle/index.ts":{"bytesInOutput":0}},"bytes":22506}}}
@@ -0,0 +1,11 @@
1
+ "use strict";var Re=Object.defineProperty;var jt=Object.getOwnPropertyDescriptor;var Jt=Object.getOwnPropertyNames;var Xt=Object.prototype.hasOwnProperty;var Vt=(e,t)=>{for(var n in t)Re(e,n,{get:t[n],enumerable:!0})},Ut=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Jt(t))!Xt.call(e,o)&&o!==n&&Re(e,o,{get:()=>t[o],enumerable:!(r=jt(t,o))||r.enumerable});return e};var Bt=e=>Ut(Re({},"__esModule",{value:!0}),e);var Sr={};Vt(Sr,{BUILT_IN_XENO_PROVIDER_PRESETS:()=>St,DualLLMProvider:()=>ne,FileXenoProviderConnectionStore:()=>ze,ProviderError:()=>y,ToolSchemaProjectionError:()=>C,XENO_PROVIDER_CATALOG_SCHEMA_VERSION:()=>Ve,XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION:()=>ve,XenoProviderCatalog:()=>W,assertDirectEndpointResolution:()=>q,classifyProviderHttpError:()=>oe,createDirectProvider:()=>Tt,directProviderConfigFromConnection:()=>cr,parseRetryAfter:()=>re,probeXenoProvider:()=>ar,projectToolDefinitionsForProvider:()=>pe,projectToolSchemaForProvider:()=>De,providerCapabilityError:()=>B,providerProtocolError:()=>h,selectXenoProviderRoute:()=>lr,validateDirectEndpoint:()=>D});module.exports=Bt(Sr);var We="https://api.xenostudio.ai";var Er=300*1e3;function Ye(e,t){return{id:t?.id??"dual",...t?.model?{model:t.model}:{},capabilities:{streaming:!0,tools:!1,vision:!1},async complete(n,r,o,i,s){let a=qt(r);if(i){let m="";for await(let d of e.chatStream({model:n,messages:a})){if(s?.aborted)break;m+=d,i(d)}return{content:m.length>0?[{type:"text",text:m}]:[],stopReason:"end_turn",inputTokens:0,outputTokens:0}}let l=await e.chat({model:n,messages:a});return{content:l.content.length>0?[{type:"text",text:l.content}]:[],stopReason:"end_turn",inputTokens:l.usage?.promptTokens??0,outputTokens:l.usage?.completionTokens??0}}}}function qt(e){let t=[];for(let n of e){if(typeof n.content=="string"){t.push({role:n.role,content:n.content});continue}let r=[];for(let i of n.content)if(i.type==="text")r.push(i.text);else if(i.type==="tool_use")r.push(`[tool_use ${i.name} ${JSON.stringify(i.input)}]`);else if(i.type==="tool_result"){let s=typeof i.content=="string"?i.content:JSON.stringify(i.content);r.push(`[tool_result ${i.tool_use_id}: ${s}]`)}let o=r.join(`
2
+ `).trim();o.length>0&&t.push({role:n.role,content:o})}return t}var zt="http://localhost:3338",Kt=We,Ft=2e3,Ce=12e4,Wt=3e4,ne=class{localUrl;cloudUrl;cloudApiKey;mode;defaultLocalModel;defaultCloudModel;localAvailable=null;localModelName=null;lastHealthCheck=0;constructor(t){this.localUrl=t?.localUrl??zt,this.cloudUrl=t?.cloudUrl??Kt,this.cloudApiKey=t?.cloudApiKey??process.env.XENO_API_KEY??"",this.mode=t?.mode??"auto",this.defaultLocalModel=t?.localModel??"default",this.defaultCloudModel=t?.cloudModel??"claude-sonnet-4-6"}async chat(t){let n=await this.shouldUseLocal();if(this.mode==="local"&&!n)return{success:!1,content:"",endpoint:"local",model:"",usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:"Local xeno-rt is not available and mode is set to local-only"};if(n)try{return await this.chatLocal(t)}catch(r){return this.mode==="local"?{success:!1,content:"",endpoint:"local",model:t.model??this.defaultLocalModel,usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:r instanceof Error?r.message:String(r)}:this.chatCloud(t)}return this.chatCloud(t)}async*chatStream(t){let n=await this.shouldUseLocal();if(this.mode==="local"&&!n)throw new Error("Local xeno-rt is not available and mode is set to local-only");let r=n?this.localUrl:this.cloudUrl,o=t.model??(n?this.defaultLocalModel:this.defaultCloudModel),i=t.systemPrompt?[{role:"system",content:t.systemPrompt},...t.messages]:t.messages,s={model:o,messages:i,stream:!0,max_tokens:t.maxTokens??4096,temperature:t.temperature??.7};t.jsonMode&&(s.response_format={type:"json_object"}),t.stop&&t.stop.length>0&&(s.stop=t.stop);let a={"Content-Type":"application/json"};n||(a.Authorization=`Bearer ${this.cloudApiKey}`,a["User-Agent"]="XenoAgentSDK/0.4.0");let l=new AbortController,c=setTimeout(()=>l.abort(),Ce);try{let m=await fetch(`${r}/v1/chat/completions`,{method:"POST",headers:a,body:JSON.stringify(s),signal:l.signal});if(!m.ok){let P=await m.text().catch(()=>"");throw new Error(`LLM stream failed (HTTP ${m.status}): ${P}`)}if(!m.body)throw new Error("Response body is null \u2014 streaming not supported");let d=m.body.getReader(),g=new TextDecoder,f="";for(;;){let{done:P,value:x}=await d.read();if(P)break;f+=g.decode(x,{stream:!0});let b=f.split(`
3
+ `);f=b.pop()??"";for(let R of b){let k=R.trim();if(!k||!k.startsWith("data: "))continue;let v=k.slice(6);if(v==="[DONE]")return;try{let G=JSON.parse(v).choices[0]?.delta.content;G&&(yield G)}catch{}}}}finally{clearTimeout(c)}}async isLocalAvailable(t=!1){let n=Date.now();if(!t&&this.localAvailable!==null&&n-this.lastHealthCheck<Wt)return this.localAvailable;try{let r=new AbortController,o=setTimeout(()=>r.abort(),Ft);try{let i=await fetch(`${this.localUrl}/v1/models`,{signal:r.signal});if(!i.ok)return this.localAvailable=!1,this.localModelName=null,this.lastHealthCheck=n,!1;let s=await i.json();return this.localModelName=s.data?.[0]?.id??null,this.localAvailable=!0,this.lastHealthCheck=n,!0}finally{clearTimeout(o)}}catch{return this.localAvailable=!1,this.localModelName=null,this.lastHealthCheck=n,!1}}setMode(t){this.mode=t}getMode(){return this.mode}setLocalUrl(t){this.localUrl=t,this.localAvailable=null,this.lastHealthCheck=0}setCloudApiKey(t){this.cloudApiKey=t}async getStatus(){let t=await this.isLocalAvailable(),n;return this.mode==="local"?n="local":this.mode==="cloud"?n="cloud":n=t?"local":"cloud",{mode:this.mode,localAvailable:t,activeEndpoint:n,localModel:this.localModelName??void 0,localUrl:this.localUrl,cloudUrl:this.cloudUrl}}asLLMProvider(t){return Ye(this,t)}async shouldUseLocal(){return this.mode==="cloud"?!1:this.mode==="local"?this.isLocalAvailable():this.isLocalAvailable()}async chatLocal(t){let n=t.model??this.defaultLocalModel,r=t.systemPrompt?[{role:"system",content:t.systemPrompt},...t.messages]:t.messages,o={model:n,messages:r,stream:!1,max_tokens:t.maxTokens??4096,temperature:t.temperature??.7};t.jsonMode&&(o.response_format={type:"json_object"}),t.stop&&t.stop.length>0&&(o.stop=t.stop);let i=new AbortController,s=setTimeout(()=>i.abort(),Ce);try{let a=await fetch(`${this.localUrl}/v1/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o),signal:i.signal});if(!a.ok){let f=await a.text().catch(()=>"");throw new Error(`Local LLM request failed (HTTP ${a.status}): ${f}`)}let l=await a.json(),d=(l.choices?.[0]??{}).message??{},g=l.usage??{};return{success:!0,content:String(d.content??""),endpoint:"local",model:String(l.model??n),usage:{promptTokens:g.prompt_tokens??0,completionTokens:g.completion_tokens??0,totalTokens:g.total_tokens??0}}}finally{clearTimeout(s)}}async chatCloud(t){let n=t.model??this.defaultCloudModel,r=t.systemPrompt?[{role:"system",content:t.systemPrompt},...t.messages]:t.messages,o={model:n,messages:r,stream:!1,max_tokens:t.maxTokens??4096,temperature:t.temperature??.7};t.jsonMode&&(o.response_format={type:"json_object"}),t.stop&&t.stop.length>0&&(o.stop=t.stop);let i={"Content-Type":"application/json",Authorization:`Bearer ${this.cloudApiKey}`,"User-Agent":"XenoAgentSDK/0.4.0"},s=new AbortController,a=setTimeout(()=>s.abort(),Ce);try{let l=await fetch(`${this.cloudUrl}/v1/chat/completions`,{method:"POST",headers:i,body:JSON.stringify(o),signal:s.signal});if(!l.ok){let P=`Cloud LLM request failed (HTTP ${l.status})`;try{let b=(await l.json()).error;P=typeof b=="string"?b:b?.message??P}catch{}return{success:!1,content:"",endpoint:"cloud",model:n,usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:P}}let c=await l.json(),g=(c.choices?.[0]??{}).message??{},f=c.usage??{};return{success:!0,content:String(g.content??""),endpoint:"cloud",model:String(c.model??n),usage:{promptTokens:f.prompt_tokens??0,completionTokens:f.completion_tokens??0,totalTokens:f.total_tokens??0}}}finally{clearTimeout(a)}}};var Je=require("node:crypto");function Yt(e){return/^data:([^;,]+)[;,]/i.exec(e.trim())?.[1]}function Gt(e){let t=[];for(let n of e){if(n.type==="text"){t.push(n.text);continue}if(n.type==="image_url"){t.push(`[image ${Yt(n.image_url.url)??"unknown"}]`);continue}let r=n.text??n.data;if(r&&r.trim().length>0){t.push(r);continue}let o=n.uri??n.mimeType??"resource";t.push(`[resource ${o}]`)}return t.join(`
4
+
5
+ `).trim()}function Z(e){return typeof e=="string"?e:Gt(e)}var se=require("node:perf_hooks");var Zt=1;var Qt=12,en=128,tn=/^xeno\.[a-z0-9]+(?:[._][a-z0-9]+)*$/u,nn=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/u,rn=/(?:[\\/]|@|https?:|bearer|token|secret|password|credential|api[_-]?key|[0-9a-f]{8}-[0-9a-f-]{27,})/iu,on=new Set(["arch","cached","capability","category","component","contained","error_code","frame_kind","gate","method","mode","operation","outcome","platform","previous_state","protocol_version","provider","queue","reason","recovery","retry_kind","state","status","tool","transport","trigger"]),Ge=new Set,Ze=new Map;function sn(e){let t=e.trim().toLowerCase();return!t||t.length>64||rn.test(t)||!nn.test(t)?null:t}function an(e,t){if(typeof t=="boolean")return t;if(typeof t=="number")return e!=="protocol_version"||!Number.isInteger(t)||t<0||t>100?null:t;if(typeof t!="string")return null;let n=sn(t);if(!n)return null;let r=Ze.get(e);return r||(r=new Set,Ze.set(e,r)),!r.has(n)&&r.size>=en?"other":(r.add(n),n)}function ln(e={}){let t={};for(let[n,r]of Object.entries(e)){if(Object.keys(t).length>=Qt)break;if(!on.has(n))continue;let o=an(n,r);o!==null&&(t[n]=o)}return Object.freeze(t)}function Qe(e){if(Ge.size===0||!tn.test(e.name)||e.name.length>128)return;let t=e.kind==="event"?1:e.value??1;if(!Number.isFinite(t)||t<0)return;let n=Object.freeze({schemaVersion:Zt,kind:e.kind,name:e.name,value:Math.min(t,Number.MAX_SAFE_INTEGER),timestamp:(e.timestamp??new Date).toISOString(),attributes:ln(e.attributes)});for(let r of Ge)try{r(n)}catch{}}function U(e,t=1,n){Qe({kind:"counter",name:e,value:t,attributes:n})}function _e(e,t,n){Qe({kind:"histogram",name:e,value:t,attributes:n})}var nt=require("node:dns/promises"),ie=require("node:net");var y=class extends Error{category;code;retryable;providerId;statusCode;retryAfterMs;requestId;constructor(t,n){super(t,n.cause!==void 0?{cause:n.cause}:void 0),this.name="ProviderError",this.category=n.category,this.code=n.code,this.retryable=n.retryable??!1,this.providerId=n.providerId,this.statusCode=n.statusCode,this.retryAfterMs=n.retryAfterMs,this.requestId=n.requestId}};function re(e,t=Date.now()){if(!e)return;let n=Number(e.trim());if(Number.isFinite(n)&&n>=0)return Math.ceil(n*1e3);let r=Date.parse(e);if(Number.isFinite(r))return Math.max(0,r-t)}function cn(e){if(typeof e=="string")return e;if(!e||typeof e!="object")return"";let t=e,n=t.error;if(typeof n=="string")return n;if(n&&typeof n=="object"){let r=n;if(typeof r.message=="string")return r.message;if(typeof r.type=="string")return r.type}return typeof t.message=="string"?t.message:""}function Te(e,t){return t.some(n=>e.includes(n))}function oe(e){let t=cn(e.body).trim(),n=t.toLowerCase(),r=t?`: ${t.slice(0,1e3)}`:"",o={providerId:e.providerId,statusCode:e.statusCode,retryAfterMs:e.retryAfterMs,requestId:e.requestId};return e.statusCode===401?new y(`Provider authentication failed${r}`,{...o,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):e.statusCode===403?new y(`Provider authorization failed${r}`,{...o,category:"authorization",code:"PROVIDER_AUTHORIZATION_FAILED"}):e.statusCode===429?new y(`Provider rate limit reached${r}`,{...o,category:"rate_limit",code:"PROVIDER_RATE_LIMITED",retryable:!0}):Te(n,["context length","context window","maximum context","too many tokens"])?new y(`Provider context window exceeded${r}`,{...o,category:"context_overflow",code:"PROVIDER_CONTEXT_OVERFLOW"}):Te(n,["safety","content policy","blocked_reason","responsible_ai_policy_violation"])?new y(`Provider safety policy refused the request${r}`,{...o,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):e.statusCode===404||Te(n,["model not found","model does not exist","unsupported model"])?new y(`Provider model is unavailable${r}`,{...o,category:"unsupported_model",code:"PROVIDER_MODEL_UNSUPPORTED"}):e.statusCode===408||e.statusCode===504?new y(`Provider request timed out${r}`,{...o,category:"timeout",code:"PROVIDER_TIMEOUT",retryable:!0}):e.statusCode>=500||e.statusCode===409||e.statusCode===425?new y(`Provider server error${r}`,{...o,category:"server",code:"PROVIDER_SERVER_ERROR",retryable:!0}):new y(`Provider rejected the request with HTTP ${e.statusCode}${r}`,{...o,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}function h(e,t,n){return new y(`Malformed ${e} response: ${t}`,{providerId:e,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",...n!==void 0?{cause:n}:{}})}function B(e,t){return U("xeno.provider.capability_mismatches",1,{component:"provider_contract",provider:e,capability:t,error_code:"provider_capability_unsupported"}),new y(`${e} does not advertise the required ${t} capability`,{providerId:e,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}var rt=new Set(["metadata.google.internal","metadata.azure.internal","instance-data.ec2.internal"]);function _(e){return new y(`Provider endpoint rejected: ${e}`,{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"})}function dn(e){let t=e.split(".");if(t.length!==4)return null;let n=t.map(r=>Number(r));return n.every(r=>Number.isInteger(r)&&r>=0&&r<=255)?n:null}function et(e){let t=dn(e);if(!t)return"public";let[n,r]=t;return n===0?"unspecified":n===127?"loopback":n===169&&r===254?"link-local":n===10||n===172&&r>=16&&r<=31||n===192&&r===168?"private":"public"}function ot(e){let t=e.toLowerCase().split("%")[0];return(0,ie.isIP)(t)===4?et(t):t==="::"||t==="::0"?"unspecified":t==="::1"?"loopback":t.startsWith("::ffff:")?et(t.slice(7)):/^f[cd]/.test(t)?"private":/^fe[89ab]/.test(t)?"link-local":"public"}function tt(e){return e==="example"||e.endsWith(".example")||e==="test"||e.endsWith(".test")||e==="invalid"||e.endsWith(".invalid")}function un(e){return e==="localhost"||e.endsWith(".localhost")}function D(e,t={}){let n;try{n=new URL(e)}catch{throw _("the URL is invalid")}if(n.username||n.password)throw _("embedded credentials are forbidden");if(n.hash||n.search)throw _("base URLs cannot contain a query or fragment");if(!n.hostname||n.hostname.includes("%"))throw _("the hostname is empty or ambiguous");if(rt.has(n.hostname.toLowerCase()))throw _("cloud metadata destinations are forbidden");if(n.protocol!=="https:"&&n.protocol!=="http:")throw _(`scheme ${n.protocol} is unsupported`);let r=t.profile??"public-https";if(n.protocol==="http:"&&r!=="local-network")throw _("plain HTTP requires the explicit local-network profile");let o=(0,ie.isIP)(n.hostname)?ot(n.hostname):null;if(o==="link-local"||o==="unspecified")throw _(`${o} destinations are forbidden`);if(r==="public-https"&&(o==="private"||o==="loopback"||un(n.hostname)))throw _("private and loopback destinations require the local-network profile");if(r==="local-network"&&n.protocol==="http:"&&o==="public"&&!t.allowedHosts?.includes(n.hostname))throw _("local-network HTTP must resolve to loopback or a private address");return n}async function q(e,t={}){let n=e.hostname.toLowerCase();if(rt.has(n))throw _("cloud metadata destinations are forbidden");let r=new Set((t.allowedHosts??[]).map(s=>s.toLowerCase())),o=(0,ie.isIP)(n)?[n]:tt(n)?[]:t.resolveHostname?await t.resolveHostname(n):(await(0,nt.lookup)(n,{all:!0,verbatim:!0})).map(s=>s.address);if(!o.length&&!tt(n))throw _("DNS resolution returned no addresses");let i=t.profile??"public-https";for(let s of o){let a=ot(s);if(a==="link-local"||a==="unspecified")throw _(`DNS resolved to a forbidden ${a} address`);if(i==="public-https"&&a!=="public"&&!r.has(n))throw _(`DNS resolved public endpoint to ${a} address ${s}`);if(i==="local-network"&&e.protocol==="http:"&&a==="public"&&!r.has(n))throw _(`local-network HTTP resolved to public address ${s}`)}}var H={connectTimeoutMs:15e3,totalTimeoutMs:12e4,idleTimeoutMs:3e4,maxResponseBytes:8*1024*1024,maxHeaderBytes:64*1024,maxEventBytes:1024*1024};function mn(e={}){return{connectTimeoutMs:Math.max(100,e.connectTimeoutMs??H.connectTimeoutMs),totalTimeoutMs:Math.max(100,e.totalTimeoutMs??H.totalTimeoutMs),idleTimeoutMs:Math.max(100,e.idleTimeoutMs??H.idleTimeoutMs),maxResponseBytes:Math.max(1024,e.maxResponseBytes??H.maxResponseBytes),maxHeaderBytes:Math.max(1024,e.maxHeaderBytes??H.maxHeaderBytes),maxEventBytes:Math.max(1024,e.maxEventBytes??H.maxEventBytes)}}function Se(e,t,n){let r=new y(t==="cancelled"?"Provider request was cancelled":"Provider request timed out",{providerId:e,category:t,code:t==="cancelled"?"PROVIDER_CANCELLED":"PROVIDER_TIMEOUT",retryable:t==="timeout",...n!==void 0?{cause:n}:{}});return t==="cancelled"&&(r.name="AbortError"),r}function pn(e){let t=0;return e.forEach((n,r)=>{t+=Buffer.byteLength(r)+Buffer.byteLength(n)+4}),t}async function it(e,t,n,r){if(!e.body)return"";let o=e.body.getReader(),i=new TextDecoder,s=0,a="",l,c=()=>{l&&clearTimeout(l),l=setTimeout(()=>r.abort("idle-timeout"),n.idleTimeoutMs)};c();try{for(;;){let{value:m,done:d}=await o.read();if(d)break;if(c(),s+=m.byteLength,s>n.maxResponseBytes)throw r.abort("response-limit"),h(t,`response exceeded ${n.maxResponseBytes} bytes`);a+=i.decode(m,{stream:!0})}return a+=i.decode(),a}finally{l&&clearTimeout(l),o.releaseLock()}}async function st(e,t,n,r){let o=se.performance.now(),i=mn(n.limits);U("xeno.provider.requests",1,{component:"provider_transport",provider:n.providerId,transport:"http"}),await q(e,n.endpointPolicy);let s=new AbortController,a=null,l=t.signal,c=()=>s.abort("caller");if(l?.aborted)throw Se(n.providerId,"cancelled");l?.addEventListener("abort",c,{once:!0});let m=setTimeout(()=>{a="total",s.abort("total-timeout")},i.totalTimeoutMs),d=setTimeout(()=>{a="connect",s.abort("connect-timeout")},i.connectTimeoutMs);try{let g=await fetch(e,{...t,signal:s.signal,redirect:"manual"});if(clearTimeout(d),pn(g.headers)>i.maxHeaderBytes)throw h(n.providerId,`response headers exceeded ${i.maxHeaderBytes} bytes`);if(g.status>=300&&g.status<400)throw new y("Provider redirects are disabled",{providerId:n.providerId,category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED",statusCode:g.status});if(!g.ok){let P=await it(g,n.providerId,i,s),x=P;try{x=P?JSON.parse(P):{}}catch{}throw oe({providerId:n.providerId,statusCode:g.status,body:x,retryAfterMs:re(g.headers.get("retry-after")),requestId:g.headers.get("request-id")??g.headers.get("x-request-id")??void 0})}let f=await r(g,s,i);return U("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),_e("xeno.provider.request_duration_ms",se.performance.now()-o,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),f}catch(g){let f;throw g instanceof y?f=g:l?.aborted||s.signal.reason==="caller"?f=Se(n.providerId,"cancelled",g):a||s.signal.reason==="idle-timeout"?f=Se(n.providerId,"timeout",g):f=new y("Provider transport failed",{providerId:n.providerId,category:"transport",code:"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:g}),U("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:f.category,error_code:f.code}),_e("xeno.provider.request_duration_ms",se.performance.now()-o,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:f.category}),f}finally{clearTimeout(d),clearTimeout(m),l?.removeEventListener("abort",c)}}async function at(e,t,n){return st(e,t,n,async(r,o,i)=>{let s=await it(r,n.providerId,i,o),a;try{a=s?JSON.parse(s):{}}catch(l){throw h(n.providerId,"body is not valid JSON",l)}if(!a||typeof a!="object"||Array.isArray(a))throw h(n.providerId,"JSON body must be an object");return a})}async function Q(e,t,n,r){return st(e,t,n,async(o,i,s)=>{if(!o.body)throw h(n.providerId,"stream response has no body");let a=o.body.getReader(),l=new TextDecoder,c="",m=0,d="message",g=[],f,P=()=>{f&&clearTimeout(f),f=setTimeout(()=>i.abort("idle-timeout"),s.idleTimeoutMs)},x=async()=>{if(g.length===0){d="message";return}let b=g.join(`
6
+ `);if(Buffer.byteLength(b)>s.maxEventBytes)throw h(n.providerId,`stream event exceeded ${s.maxEventBytes} bytes`);await r({event:d,data:b}),d="message",g=[]};P();try{for(;;){let{value:b,done:R}=await a.read();if(R)break;if(P(),m+=b.byteLength,m>s.maxResponseBytes)throw h(n.providerId,`stream exceeded ${s.maxResponseBytes} bytes`);for(c+=l.decode(b,{stream:!0});;){let k=c.indexOf(`
7
+ `);if(k<0)break;let v=c.slice(0,k).replace(/\r$/,"");if(c=c.slice(k+1),!v)await x();else if(!v.startsWith(":")){let Y=v.indexOf(":"),G=Y<0?v:v.slice(0,Y),Fe=Y<0?"":v.slice(Y+1).replace(/^ /,"");G==="event"?d=Fe:G==="data"&&g.push(Fe)}}}if(c+=l.decode(),c.trim())for(let b of c.split(/\r?\n/))b.startsWith("data:")?g.push(b.slice(5).replace(/^ /,"")):b.startsWith("event:")&&(d=b.slice(6).trim());await x()}finally{f&&clearTimeout(f),a.releaseLock()}})}var xt=require("node:crypto");var Ee=require("node:net"),ue=class extends Error{issues;constructor(t){super(`Invalid JSON Schema: ${t.map(n=>`${n.path||"#"} ${n.message}`).join("; ")}`),this.name="JsonSchemaCompilationError",this.issues=t}},Ie="https://json-schema.org/draft/2020-12/schema",fn=new Set(["string","number","integer","boolean","array","object","null"]),gn=new Set(["$schema","$id","$anchor","$ref","$defs","$comment","title","description","default","examples","deprecated","readOnly","writeOnly","type","enum","const","multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","format","prefixItems","items","contains","minContains","maxContains","minItems","maxItems","uniqueItems","properties","patternProperties","additionalProperties","required","dependentRequired","minProperties","maxProperties","allOf","anyOf","oneOf","not"]),ut=new Map([["date",e=>gt(e)],["date-time",e=>Mn(e)],["time",e=>yt(e)],["duration",e=>/^P(?!$)(?:\d+(?:[.,]\d+)?Y)?(?:\d+(?:[.,]\d+)?M)?(?:\d+(?:[.,]\d+)?W)?(?:\d+(?:[.,]\d+)?D)?(?:T(?=\d)(?:\d+(?:[.,]\d+)?H)?(?:\d+(?:[.,]\d+)?M)?(?:\d+(?:[.,]\d+)?S)?)?$/u.test(e)],["email",e=>lt(e)],["idn-email",e=>lt(e)],["hostname",e=>Oe(e)],["idn-hostname",e=>Oe(e)],["ipv4",e=>(0,Ee.isIP)(e)===4],["ipv6",e=>(0,Ee.isIP)(e)===6],["uuid",e=>/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(e)],["uri",e=>ct(e)],["iri",e=>ct(e)],["uri-reference",e=>dt(e)],["iri-reference",e=>dt(e)],["uri-template",e=>$n(e)],["json-pointer",e=>/^(?:\/(?:[^~/]|~[01])*)*$/u.test(e)],["relative-json-pointer",e=>/^(?:0|[1-9]\d*)(?:#|(?:\/(?:[^~/]|~[01])*)*)$/u.test(e)],["regex",(e,t)=>Me(e,t.maxPatternLength)!==void 0]]);function yn(e={}){return{strictKeywords:e.strictKeywords??!0,assertFormats:e.assertFormats??!1,maxSchemaDepth:M(e.maxSchemaDepth,64,1,256,"maxSchemaDepth"),maxSchemaNodes:M(e.maxSchemaNodes,4096,1,1e5,"maxSchemaNodes"),maxReferences:M(e.maxReferences,512,0,1e4,"maxReferences"),maxPatternLength:M(e.maxPatternLength,256,1,4096,"maxPatternLength"),maxValidationDepth:M(e.maxValidationDepth,128,1,1024,"maxValidationDepth"),maxValidationSteps:M(e.maxValidationSteps,1e5,100,1e7,"maxValidationSteps"),maxValidationErrors:M(e.maxValidationErrors,64,1,1024,"maxValidationErrors"),maxInputBytes:M(e.maxInputBytes,16*1024*1024,1024,256*1024*1024,"maxInputBytes")}}function M(e,t,n,r,o){let i=e??t;if(!Number.isInteger(i)||i<n||i>r)throw new TypeError(`${o} must be an integer from ${n} to ${r}.`);return i}function hn(e,t={}){let n={root:e,options:yn(t),issues:[],rawByPointer:new Map,anchors:new Map,compiledByPointer:new Map,schemaNodes:0,references:0,nextNodeId:1};ce(e,"",0,n);let r=j(e,"",0,n);if(n.issues.length>0||!r)throw new ue(n.issues);return Object.freeze({dialect:Ie,formatAssertion:n.options.assertFormats,validate(o){let i=[],s=Ae(o);if(s)return i.push({path:s.path,keyword:"type",schemaPath:"#",message:s.message}),{valid:!1,errors:i,steps:0,truncated:!1};let a=JSON.stringify(o),l=Buffer.byteLength(a??"null","utf8");if(l>n.options.maxInputBytes)return i.push({path:"",keyword:"maxInputBytes",schemaPath:"#",message:`input is ${l} bytes; limit is ${n.options.maxInputBytes}`}),{valid:!1,errors:i,steps:0,truncated:!1};let c={options:n.options,errors:i,budget:{steps:0,exhausted:!1},activePairs:new Set,objectIds:new WeakMap,nextObjectId:{value:1}};return A(o,r,"",0,c),{valid:i.length===0,errors:i,steps:c.budget.steps,truncated:c.budget.exhausted||i.length>=n.options.maxValidationErrors}}})}function mt(e,t={}){if(!T(e)||e.type!=="object"||!T(e.properties))throw new ue([{path:"#",keyword:"type",message:"tool input schema root must declare type object and a properties object"}]);return hn(e,t)}function ce(e,t,n,r){if(n>r.options.maxSchemaDepth){u(r,t,void 0,`schema depth exceeds ${r.options.maxSchemaDepth}`);return}if(typeof e!="boolean"&&!T(e)){u(r,t,void 0,"schema must be an object or boolean");return}if(!r.rawByPointer.has(t)){if(r.schemaNodes+=1,r.schemaNodes>r.options.maxSchemaNodes){u(r,t,void 0,`schema node count exceeds ${r.options.maxSchemaNodes}`);return}if(r.rawByPointer.set(t,e),typeof e!="boolean"){e.$anchor!==void 0&&(typeof e.$anchor!="string"||!/^[A-Za-z][A-Za-z0-9._:-]*$/u.test(e.$anchor)?u(r,t,"$anchor","$anchor must be a valid plain-name anchor"):r.anchors.has(e.$anchor)?u(r,t,"$anchor",`duplicate anchor ${e.$anchor}`):r.anchors.set(e.$anchor,t));for(let o of["$defs","properties","patternProperties"]){let i=e[o];if(i!==void 0){if(!T(i)){u(r,t,o,`${o} must be an object`);continue}for(let[s,a]of Object.entries(i))ce(a,O(t,o,s),n+1,r)}}for(let o of["items","contains","additionalProperties","not"])e[o]!==void 0&&ce(e[o],O(t,o),n+1,r);for(let o of["prefixItems","allOf","anyOf","oneOf"]){let i=e[o];if(i!==void 0){if(!Array.isArray(i)){u(r,t,o,`${o} must be an array of schemas`);continue}i.forEach((s,a)=>ce(s,O(t,o,String(a)),n+1,r))}}}}}function j(e,t,n,r){let o=r.compiledByPointer.get(t);if(o)return o;if(typeof e!="boolean"&&!T(e))return;let i={id:r.nextNodeId++,schemaPath:bt(t)};if(r.compiledByPointer.set(t,i),typeof e=="boolean")return i.boolean=e,i;if(bn(e,t,r),Pn(e,t,r),e.$schema!==void 0&&(t!==""||e.$schema!==Ie&&e.$schema!==`${Ie}#`)&&u(r,t,"$schema",t===""?`unsupported dialect ${String(e.$schema)}`:"$schema is only supported at the root"),e.$id!==void 0&&typeof e.$id!="string"&&u(r,t,"$id","$id must be a string"),e.$ref!==void 0)if(typeof e.$ref!="string")u(r,t,"$ref","$ref must be a string");else{r.references+=1,r.references>r.options.maxReferences&&u(r,t,"$ref",`reference count exceeds ${r.options.maxReferences}`);let s=Tn(e.$ref,t,r);if(s!==void 0){let a=r.rawByPointer.get(s);a===void 0?u(r,t,"$ref",`unresolved local reference ${e.$ref}`):i.ref=j(a,s,n+1,r)}}if(i.types=wn(e.type,t,r),e.enum!==void 0){let s=e.enum;!Array.isArray(s)||s.length===0?u(r,t,"enum","enum must be a non-empty array"):s.some((a,l)=>s.some((c,m)=>m<l&&z(a,c)))?u(r,t,"enum","enum values must be unique"):s.some(a=>Ae(a))?u(r,t,"enum","enum values must be JSON values"):i.enumValues=s}if(Object.prototype.hasOwnProperty.call(e,"const")&&(Ae(e.const)?u(r,t,"const","const must be a JSON value"):(i.hasConst=!0,i.constValue=e.const)),i.multipleOf=Cn(e.multipleOf,t,"multipleOf",r),i.maximum=ee(e.maximum,t,"maximum",r),i.exclusiveMaximum=ee(e.exclusiveMaximum,t,"exclusiveMaximum",r),i.minimum=ee(e.minimum,t,"minimum",r),i.exclusiveMinimum=ee(e.exclusiveMinimum,t,"exclusiveMinimum",r),i.maxLength=$(e.maxLength,t,"maxLength",r),i.minLength=$(e.minLength,t,"minLength",r),i.minItems=$(e.minItems,t,"minItems",r),i.maxItems=$(e.maxItems,t,"maxItems",r),i.minContains=$(e.minContains,t,"minContains",r),i.maxContains=$(e.maxContains,t,"maxContains",r),i.minProperties=$(e.minProperties,t,"minProperties",r),i.maxProperties=$(e.maxProperties,t,"maxProperties",r),_n(i,t,r),e.pattern!==void 0)if(typeof e.pattern!="string")u(r,t,"pattern","pattern must be a string");else{let s=Me(e.pattern,r.options.maxPatternLength);s?i.pattern={source:e.pattern,regex:s}:u(r,t,"pattern","pattern is invalid or outside the safe regex subset")}if(e.format!==void 0&&(typeof e.format!="string"?u(r,t,"format","format must be a string"):r.options.assertFormats&&!ut.has(e.format)?u(r,t,"format",`unsupported asserted format ${e.format}`):i.format=e.format),i.prefixItems=le(e.prefixItems,t,"prefixItems",n,r,!0),i.items=ae(e.items,t,"items",n,r),i.contains=ae(e.contains,t,"contains",n,r),(e.minContains!==void 0||e.maxContains!==void 0)&&e.contains===void 0&&u(r,t,"contains","minContains/maxContains require contains"),e.uniqueItems!==void 0&&(typeof e.uniqueItems!="boolean"?u(r,t,"uniqueItems","uniqueItems must be boolean"):i.uniqueItems=e.uniqueItems),i.properties=xn(e.properties,t,"properties",n,r),i.patternProperties=vn(e.patternProperties,t,n,r),i.additionalProperties=ae(e.additionalProperties,t,"additionalProperties",n,r),i.required=pt(e.required,t,"required",r,!0),i.dependentRequired=Rn(e.dependentRequired,t,r),i.allOf=le(e.allOf,t,"allOf",n,r,!1),i.anyOf=le(e.anyOf,t,"anyOf",n,r,!1),i.oneOf=le(e.oneOf,t,"oneOf",n,r,!1),i.not=ae(e.not,t,"not",n,r),T(e.$defs))for(let[s,a]of Object.entries(e.$defs))j(a,O(t,"$defs",s),n+1,r);return i}function bn(e,t,n){if(n.options.strictKeywords)for(let r of Object.keys(e))!gn.has(r)&&!r.startsWith("x-")&&u(n,t,r,`unsupported keyword ${r}`)}function Pn(e,t,n){for(let r of["$comment","title","description"])e[r]!==void 0&&typeof e[r]!="string"&&u(n,t,r,`${r} must be a string`);for(let r of["deprecated","readOnly","writeOnly"])e[r]!==void 0&&typeof e[r]!="boolean"&&u(n,t,r,`${r} must be boolean`);e.examples!==void 0&&!Array.isArray(e.examples)&&u(n,t,"examples","examples must be an array")}function wn(e,t,n){if(e===void 0)return;let r=Array.isArray(e)?e:[e];if(r.length===0||r.some(o=>typeof o!="string"||!fn.has(o))){u(n,t,"type","type must be a recognized type or non-empty unique type array");return}return new Set(r).size!==r.length&&u(n,t,"type","type array must not contain duplicates"),r}function ae(e,t,n,r,o){if(e!==void 0)return j(e,O(t,n),r+1,o)}function le(e,t,n,r,o,i){if(e!==void 0){if(!Array.isArray(e)||!i&&e.length===0){u(o,t,n,`${n} must be ${i?"an array":"a non-empty array"} of schemas`);return}return e.map((s,a)=>j(s,O(t,n,String(a)),r+1,o)).filter(s=>!!s)}}function xn(e,t,n,r,o){if(e===void 0)return;if(!T(e)){u(o,t,n,`${n} must be an object of schemas`);return}let i=new Map;for(let[s,a]of Object.entries(e)){let l=j(a,O(t,n,s),r+1,o);l&&i.set(s,l)}return i}function vn(e,t,n,r){if(e===void 0)return;if(!T(e)){u(r,t,"patternProperties","patternProperties must be an object of schemas");return}let o=[];for(let[i,s]of Object.entries(e)){let a=Me(i,r.options.maxPatternLength);if(!a){u(r,t,"patternProperties",`pattern ${JSON.stringify(i)} is invalid or outside the safe regex subset`);continue}let l=j(s,O(t,"patternProperties",i),n+1,r);l&&o.push({pattern:{source:i,regex:a},schema:l})}return o}function Rn(e,t,n){if(e===void 0)return;if(!T(e)){u(n,t,"dependentRequired","dependentRequired must be an object");return}let r=new Map;for(let[o,i]of Object.entries(e)){let s=pt(i,O(t,"dependentRequired",o),"dependentRequired",n,!0);s&&r.set(o,s)}return r}function pt(e,t,n,r,o){if(e!==void 0){if(!Array.isArray(e)||e.some(i=>typeof i!="string")){u(r,t,n,`${n} must be an array of strings`);return}return o&&new Set(e).size!==e.length&&u(r,t,n,`${n} values must be unique`),e}}function Cn(e,t,n,r){let o=ee(e,t,n,r);return o!==void 0&&o<=0&&u(r,t,n,`${n} must be greater than zero`),o!==void 0&&o>0?o:void 0}function ee(e,t,n,r){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)){u(r,t,n,`${n} must be a finite number`);return}return e}}function $(e,t,n,r){if(e!==void 0){if(!Number.isSafeInteger(e)||e<0){u(r,t,n,`${n} must be a non-negative safe integer`);return}return e}}function _n(e,t,n){for(let[r,o,i]of[[e.minLength,e.maxLength,"length"],[e.minItems,e.maxItems,"items"],[e.minContains,e.maxContains,"contains"],[e.minProperties,e.maxProperties,"properties"]])r!==void 0&&o!==void 0&&r>o&&u(n,t,i,`minimum ${i} exceeds maximum`)}function Tn(e,t,n){if(!e.startsWith("#")){u(n,t,"$ref","remote and file references are not supported");return}if(e==="#")return"";if(e.startsWith("#/")){let s=`/${e.slice(2).split("/").map(a=>a.replace(/~1/g,"/").replace(/~0/g,"~")).map(ht).join("/")}`;return n.rawByPointer.has(s)||u(n,t,"$ref",`unresolved JSON Pointer ${e}`),s}let r=e.slice(1),o=n.anchors.get(r);return o===void 0&&u(n,t,"$ref",`unresolved anchor ${e}`),o}function A(e,t,n,r,o){if(!ft(o)||o.errors.length>=o.options.maxValidationErrors)return;if(r>o.options.maxValidationDepth){w(o,n,"maxDepth",t,`validation depth exceeds ${o.options.maxValidationDepth}`);return}if(t.boolean!==void 0){t.boolean||w(o,n,"falseSchema",t,"is rejected by the false schema");return}let i=On(t,e,o);if(!o.activePairs.has(i)){o.activePairs.add(i);try{if(t.ref&&A(e,t.ref,n,r+1,o),t.enumValues&&!t.enumValues.some(s=>z(s,e))&&w(o,n,"enum",t,`expected one of ${t.enumValues.map(Le).join(", ")} but got ${ke(e)}`),t.hasConst&&!z(t.constValue,e)&&w(o,n,"const",t,`expected ${Le(t.constValue)} but got ${ke(e)}`),t.types&&!t.types.some(s=>Ln(e,s))){let s=t.types.length===1?t.types[0]:`one of [${t.types.join(", ")}]`;w(o,n,"type",t,`expected type ${s} but got ${ke(e)}`);return}Sn(e,t,n,r,o),typeof e=="number"&&kn(e,t,n,o),typeof e=="string"&&En(e,t,n,o),Array.isArray(e)&&In(e,t,n,r,o),T(e)&&An(e,t,n,r,o)}finally{o.activePairs.delete(i)}}}function Sn(e,t,n,r,o){for(let i of t.allOf??[])A(e,i,n,r+1,o);if(t.anyOf&&t.anyOf.filter(s=>de(e,s,n,r+1,o)).length===0&&w(o,n,"anyOf",t,"must match at least one anyOf branch"),t.oneOf){let i=t.oneOf.filter(s=>de(e,s,n,r+1,o)).length;i!==1&&w(o,n,"oneOf",t,`must match exactly one oneOf branch; matched ${i}`)}t.not&&de(e,t.not,n,r+1,o)&&w(o,n,"not",t,"must not match the disallowed schema")}function kn(e,t,n,r){t.multipleOf!==void 0&&!Nn(e,t.multipleOf)&&w(r,n,"multipleOf",t,`must be a multiple of ${t.multipleOf}`),t.maximum!==void 0&&e>t.maximum&&w(r,n,"maximum",t,`must be <= ${t.maximum}`),t.exclusiveMaximum!==void 0&&e>=t.exclusiveMaximum&&w(r,n,"exclusiveMaximum",t,`must be < ${t.exclusiveMaximum}`),t.minimum!==void 0&&e<t.minimum&&w(r,n,"minimum",t,`must be >= ${t.minimum}`),t.exclusiveMinimum!==void 0&&e<=t.exclusiveMinimum&&w(r,n,"exclusiveMinimum",t,`must be > ${t.exclusiveMinimum}`)}function En(e,t,n,r){let o=[...e].length;if(t.minLength!==void 0&&o<t.minLength&&w(r,n,"minLength",t,`must contain at least ${t.minLength} Unicode code points`),t.maxLength!==void 0&&o>t.maxLength&&w(r,n,"maxLength",t,`must contain at most ${t.maxLength} Unicode code points`),t.pattern&&!t.pattern.regex.test(e)&&w(r,n,"pattern",t,`must match pattern ${JSON.stringify(t.pattern.source)}`),t.format&&r.options.assertFormats){let i=ut.get(t.format);i&&!i(e,r.options)&&w(r,n,"format",t,`must match format ${t.format}`)}}function In(e,t,n,r,o){if(t.minItems!==void 0&&e.length<t.minItems&&w(o,n,"minItems",t,`must contain at least ${t.minItems} items`),t.maxItems!==void 0&&e.length>t.maxItems&&w(o,n,"maxItems",t,`must contain at most ${t.maxItems} items`),t.uniqueItems)e:for(let s=0;s<e.length;s+=1)for(let a=0;a<s;a+=1){if(!ft(o))break e;if(z(e[s],e[a])){w(o,E(n,String(s)),"uniqueItems",t,`duplicates item ${a}`);break e}}let i=t.prefixItems?.length??0;if(t.prefixItems?.forEach((s,a)=>{a<e.length&&A(e[a],s,E(n,String(a)),r+1,o)}),t.items)for(let s=i;s<e.length;s+=1)A(e[s],t.items,E(n,String(s)),r+1,o);if(t.contains){let s=0;for(let l=0;l<e.length;l+=1)de(e[l],t.contains,E(n,String(l)),r+1,o)&&(s+=1);let a=t.minContains??1;s<a&&w(o,n,"minContains",t,`contains matched ${s} items; minimum is ${a}`),t.maxContains!==void 0&&s>t.maxContains&&w(o,n,"maxContains",t,`contains matched ${s} items; maximum is ${t.maxContains}`)}}function An(e,t,n,r,o){let i=Object.keys(e);t.minProperties!==void 0&&i.length<t.minProperties&&w(o,n,"minProperties",t,`must contain at least ${t.minProperties} properties`),t.maxProperties!==void 0&&i.length>t.maxProperties&&w(o,n,"maxProperties",t,`must contain at most ${t.maxProperties} properties`);for(let s of t.required??[])Object.prototype.hasOwnProperty.call(e,s)||w(o,E(n,s),"required",t,"is required");for(let[s,a]of t.dependentRequired??[])if(Object.prototype.hasOwnProperty.call(e,s))for(let l of a)Object.prototype.hasOwnProperty.call(e,l)||w(o,E(n,l),"dependentRequired",t,`is required when ${s} is present`);for(let s of i){let a=!1,l=t.properties?.get(s);l&&(a=!0,A(e[s],l,E(n,s),r+1,o));for(let c of t.patternProperties??[])c.pattern.regex.test(s)&&(a=!0,A(e[s],c.schema,E(n,s),r+1,o));!a&&t.additionalProperties&&A(e[s],t.additionalProperties,E(n,s),r+1,o)}}function de(e,t,n,r,o){let i={...o,errors:[],activePairs:new Set(o.activePairs)};return A(e,t,n,r,i),i.errors.length===0&&!i.budget.exhausted}function ft(e){return e.budget.steps+=1,e.budget.steps<=e.options.maxValidationSteps?!0:(e.budget.exhausted||(e.budget.exhausted=!0,w(e,"","maxValidationSteps",{schemaPath:"#"},`validation steps exceed ${e.options.maxValidationSteps}`)),!1)}function w(e,t,n,r,o){e.errors.length>=e.options.maxValidationErrors||e.errors.push({path:t,keyword:n,schemaPath:r.schemaPath,message:o})}function On(e,t,n){if(t!==null&&typeof t=="object"){let r=n.objectIds.get(t);return r===void 0&&(r=n.nextObjectId.value++,n.objectIds.set(t,r)),`${e.id}:object:${r}`}return`${e.id}:${typeof t}:${Le(t)}`}function Ln(e,t){switch(t){case"string":return typeof e=="string";case"number":return typeof e=="number"&&Number.isFinite(e);case"integer":return typeof e=="number"&&Number.isSafeInteger(e);case"boolean":return typeof e=="boolean";case"array":return Array.isArray(e);case"object":return T(e);case"null":return e===null}}function Ae(e){let t=new WeakSet,n=(r,o)=>{if(r===null||typeof r=="string"||typeof r=="boolean")return;if(typeof r=="number")return Number.isFinite(r)?void 0:{path:o,message:"must be a finite JSON number"};if(typeof r!="object")return{path:o,message:`must be a JSON value, not ${typeof r}`};if(t.has(r))return{path:o,message:"must not contain cyclic references"};t.add(r);let i=Array.isArray(r)?r.entries():Object.entries(r);for(let[s,a]of i){let l=n(a,E(o,String(s)));if(l)return l}t.delete(r)};return n(e,"")}function Me(e,t){if(!([...e].length>t)&&!/\\(?:[1-9]|k<)/u.test(e)&&!/\(\?<(?:[=!]|[A-Za-z])/u.test(e)&&!/\((?:[^()\\]|\\.)*[+*{](?:[^()\\]|\\.)*\)[+*{?]/u.test(e))try{return new RegExp(e,"u")}catch{return}}function gt(e){let t=/^(\d{4})-(\d{2})-(\d{2})$/u.exec(e);if(!t)return!1;let n=new Date(Date.UTC(Number(t[1]),Number(t[2])-1,Number(t[3])));return n.getUTCFullYear()===Number(t[1])&&n.getUTCMonth()===Number(t[2])-1&&n.getUTCDate()===Number(t[3])}function yt(e){let t=/^(\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/u.exec(e);return t?Number(t[1])<=23&&Number(t[2])<=59&&Number(t[3])<=60:!1}function Mn(e){let t=/^([^Tt ]+)[Tt ](.+)$/u.exec(e);return!!(t&&gt(t[1])&&yt(t[2]))}function lt(e){if([...e].length>254||/[\s<>(),;:\\"\[\]]/u.test(e))return!1;let t=e.lastIndexOf("@");return t>0&&t<e.length-1&&[...e.slice(0,t)].length<=64&&Oe(e.slice(t+1))}function Oe(e){if([...e].length>253)return!1;let t=e.endsWith(".")?e.slice(0,-1):e;return t.length>0&&t.split(".").every(n=>n.length>0&&n.length<=63&&!n.startsWith("-")&&!n.endsWith("-")&&/^[\p{L}\p{N}-]+$/u.test(n))}function ct(e){try{return!!(new URL(e).protocol&&!/\s/u.test(e))}catch{return!1}}function dt(e){try{return new URL(e,"https://xeno.invalid/"),!/\s/u.test(e)}catch{return!1}}function $n(e){let t=0;for(let n of e)if(n==="{"&&(t+=1),n==="}"&&(t-=1),t<0||t>1)return!1;return t===0&&![...e].some(n=>{let r=n.codePointAt(0);return r<=31||r===127})}function Nn(e,t){let n=e/t;return Math.abs(n-Math.round(n))<=Number.EPSILON*Math.max(1,Math.abs(n))*8}function T(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function z(e,t){if(Object.is(e,t))return!0;if(typeof e!=typeof t||e===null||t===null)return!1;if(Array.isArray(e)&&Array.isArray(t))return e.length===t.length&&e.every((n,r)=>z(n,t[r]));if(T(e)&&T(t)){let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(o=>Object.prototype.hasOwnProperty.call(t,o)&&z(e[o],t[o]))}return!1}function E(e,t){let n=/^[A-Za-z_$][A-Za-z0-9_$]*$/u.test(t)?t:`[${JSON.stringify(t)}]`;return e.length===0?n:n.startsWith("[")?`${e}${n}`:`${e}.${n}`}function O(e,...t){return`${e}/${t.map(ht).join("/")}`}function ht(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function bt(e){return e.length===0?"#":`#${e}`}function u(e,t,n,r){e.issues.length>=64||e.issues.push({path:bt(t),...n?{keyword:n}:{},message:r})}function ke(e){return e===null?"null":Array.isArray(e)?"array":typeof e=="number"?Number.isSafeInteger(e)?"integer":"number":typeof e}function Le(e){try{let t=JSON.stringify(e);return t===void 0?String(e):t}catch{return String(e)}}var C=class extends Error{dialect;path;constructor(t,n,r){super(`Tool schema cannot be projected to ${t} at ${n}: ${r}`),this.name="ToolSchemaProjectionError",this.dialect=t,this.path=n}},Pt=new Set(["$schema","$id","$anchor","$defs","$comment","title","default","examples","deprecated","readOnly","writeOnly"]),Dn=new Set(["type","description","enum","format","properties","required","items","minItems","maxItems","minLength","maxLength","minimum","maximum","anyOf"]);function De(e,t){mt(e);let n=Ne(e),r=n,o=wt(n);if(t==="xeno")return{schema:n,dialect:t,canonicalSha256:o,projectedSha256:o,changes:[]};let i={dialect:t,root:r,pointers:new Map,anchors:new Map,changes:[],activeReferences:new Set};me(r,"",i);let s=J(r,"#",i);if(!K(s))throw new C(t,"#","provider tool root must remain an object schema");return jn(n,s,t),{schema:s,dialect:t,canonicalSha256:o,projectedSha256:wt(s),changes:i.changes}}function pe(e,t){return e.map(n=>{let r=De(n.input_schema,t);return{definition:{...n,input_schema:r.schema},projection:r}})}function J(e,t,n){if(typeof e=="boolean"){if(n.dialect!=="google")return e;if(e)return{};throw new C(n.dialect,t,"false schemas are not representable by this provider")}if(typeof e.$ref=="string"){let o=Jn(e.$ref,t,n);if(n.activeReferences.has(e.$ref))throw new C(n.dialect,t,`recursive reference ${e.$ref} cannot be serialized safely`);let i=Object.fromEntries(Object.entries(e).filter(([a])=>a!=="$ref"&&!Pt.has(a)));if(Object.keys(i).length>0){if(n.dialect==="google")throw new C(n.dialect,t,"$ref siblings require an unsupported intersection");n.activeReferences.add(e.$ref);let a=J(o,`${t}/$ref`,n);n.activeReferences.delete(e.$ref);let l=J(i,t,n);return n.changes.push({path:t,keyword:"$ref",action:"transformed",reason:"inlined local reference with sibling intersection"}),{allOf:[a,l]}}n.activeReferences.add(e.$ref);let s=J(o,`${t}/$ref`,n);return n.activeReferences.delete(e.$ref),n.changes.push({path:t,keyword:"$ref",action:"transformed",reason:"inlined local reference"}),s}let r={};for(let[o,i]of Object.entries(e))if(o!=="$ref"){if(Pt.has(o)||o.startsWith("x-")){o==="description"?r.description=i:n.changes.push({path:t,keyword:o,action:"omitted",reason:"provider wire metadata is not required for canonical validation"});continue}if(n.dialect==="google"&&!Dn.has(o)){if(o==="const"){r.enum=[Ne(i)],n.changes.push({path:t,keyword:o,action:"transformed",reason:"Google wire schema represents const as a single-value enum"});continue}if(o==="prefixItems")throw new C(n.dialect,t,"tuple prefixItems cannot preserve the provider structural contract");n.changes.push({path:t,keyword:o,action:"omitted",reason:"constraint remains enforced by canonical local validation"});continue}if(o==="type"&&n.dialect==="google"&&Array.isArray(i)){let s=i.filter(a=>a!=="null");if(s.length!==1||i.length!==2)throw new C(n.dialect,t,"type union cannot be represented without weakening structure");r.type=s[0],r.nullable=!0,n.changes.push({path:t,keyword:o,action:"transformed",reason:"nullable two-type union mapped to Google nullable"});continue}if(o==="properties"||o==="patternProperties"||o==="$defs"){if(!K(i))throw new C(n.dialect,t,`${o} must be an object`);let s={};for(let[a,l]of Object.entries(i))s[a]=J(l,`${t}/${o}/${je(a)}`,n);r[o]=s;continue}if(["items","contains","additionalProperties","not"].includes(o)){r[o]=J(i,`${t}/${o}`,n);continue}if(["prefixItems","allOf","anyOf","oneOf"].includes(o)){if(!Array.isArray(i))throw new C(n.dialect,t,`${o} must be an array`);r[o]=i.map((s,a)=>J(s,`${t}/${o}/${a}`,n));continue}r[o]=Ne(i)}if(n.dialect==="google"){let o=e.type!==void 0||e.properties!==void 0||e.items!==void 0,i=r.type!==void 0||r.properties!==void 0||r.items!==void 0;if(!o&&(e.oneOf!==void 0||e.allOf!==void 0||e.not!==void 0)||o&&!i)throw new C(n.dialect,t,"minimum structural contract cannot be represented")}return r}function jn(e,t,n){if(t.type!=="object"||!K(t.properties))throw new C(n,"#","root object/properties contract changed");let r=Object.keys(e.properties).sort(),o=Object.keys(t.properties).sort();if(JSON.stringify(r)!==JSON.stringify(o))throw new C(n,"#","root property identity changed");let i=[...e.required??[]].sort(),s=Array.isArray(t.required)?[...t.required].sort():[];if(JSON.stringify(i)!==JSON.stringify(s))throw new C(n,"#","root required-property contract changed")}function me(e,t,n){if(n.pointers.set(t,e),typeof e!="boolean"){typeof e.$anchor=="string"&&n.anchors.set(e.$anchor,e);for(let r of["$defs","properties","patternProperties"]){let o=e[r];if(K(o))for(let[i,s]of Object.entries(o))me(s,`${t}/${r}/${je(i)}`,n)}for(let r of["items","contains","additionalProperties","not"]){let o=e[r];(typeof o=="boolean"||K(o))&&me(o,`${t}/${r}`,n)}for(let r of["prefixItems","allOf","anyOf","oneOf"]){let o=e[r];Array.isArray(o)&&o.forEach((i,s)=>me(i,`${t}/${r}/${s}`,n))}}}function Jn(e,t,n){if(!e.startsWith("#"))throw new C(n.dialect,t,"remote references are forbidden");if(e==="#")return n.root;if(e.startsWith("#/")){let r=e.slice(1).split("/").map(i=>i.replace(/~1/g,"/").replace(/~0/g,"~")).map(je).join("/"),o=n.pointers.get(r);if(o!==void 0)return o}else{let r=n.anchors.get(e.slice(1));if(r!==void 0)return r}throw new C(n.dialect,t,`unresolved reference ${e}`)}function wt(e){return(0,xt.createHash)("sha256").update($e(e)).digest("hex")}function $e(e){return Array.isArray(e)?`[${e.map($e).join(",")}]`:K(e)?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${$e(e[t])}`).join(",")}}`:JSON.stringify(e)}function Ne(e){return JSON.parse(JSON.stringify(e))}function je(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function K(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var Xn={anthropic:{streaming:!1,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1},"openai-responses":{streaming:!1,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1},google:{streaming:!1,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1}};function Vn(e){let t=e.kind==="anthropic"?"https://api.anthropic.com":e.kind==="google"?"https://generativelanguage.googleapis.com":e.kind==="openai-responses"?"https://api.openai.com":null;if(!e.baseURL&&!t)throw new y("Generic OpenAI-compatible providers require baseURL",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let n=D(e.baseURL??t,{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname});return n.pathname=n.pathname.replace(/\/$/,""),n}function fe(e,t){let n=new URL(e.toString());return n.pathname=`${n.pathname.replace(/\/$/,"")}/${t.replace(/^\//,"")}`,n}function Un(e){let t=e.authentication??{type:"bearer"};if(t.type==="none"||!e.apiKey)return{};if(t.type==="bearer")return{authorization:`Bearer ${e.apiKey}`};let n=t.header.trim().toLowerCase(),r=new Set(["host","content-length","connection","transfer-encoding","cookie","set-cookie","proxy-authorization"]);if(!/^[a-z0-9-]{1,80}$/.test(n)||r.has(n))throw new y("Generic provider authentication header is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let o=t.prefix??"";if(/[\r\n]/.test(o))throw new y("Generic provider authentication prefix is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});return{[n]:`${o}${e.apiKey}`}}function Bn(e){let t;if(e.kind==="openai-compatible"){if(!e.capabilityProfile)throw new y("Generic OpenAI-compatible providers require an explicit capabilityProfile",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"});t={...e.capabilityProfile};for(let n of["structuredOutput","promptCaching"])if(t[n])throw B("direct-openai-compatible",n);if(!!e.streaming!=!!t.streaming)throw new y("Generic endpoint streaming config must match capabilityProfile.streaming",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}else t={...Xn[e.kind],streaming:!!e.streaming,reasoningMetadata:e.kind==="anthropic"&&!!e.streaming};return{...t,vision:t.imageInput}}function ge(e,t){return{providerId:t,endpointPolicy:{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname},limits:e.transportLimits}}function Ct(e){let t=/^data:([^;,]+);base64,([a-z0-9+/=\r\n]+)$/i.exec(e);return t?{mediaType:t[1],data:t[2].replace(/\s/g,"")}:null}function te(e){let t=Array.isArray(e.assistant_content)?e.assistant_content:[],n=Array.isArray(e.assistant_only_content)?e.assistant_only_content:[];return[...t,...n].filter(r=>r?.type==="image_url")}function _t(e){return e.filter(t=>t?.type==="image_url")}function qn(e){return e.some(t=>Array.isArray(t.content)&&t.content.some(n=>n.type==="image_url"||n.type==="tool_result"&&te(n).length>0))}function vt(e){let t=Ct(e.image_url.url);return t?{type:"image",source:{type:"base64",media_type:t.mediaType,data:t.data}}:{type:"image",source:{type:"url",url:e.image_url.url}}}function Hn(e){return e.map(t=>({role:t.role,content:typeof t.content=="string"?t.content:t.content.flatMap(n=>{if(n.type==="image_url")return[vt(n)];if(n.type==="text")return[n];if(n.type==="tool_use")return[{type:"tool_use",id:n.id,name:n.name,input:n.input}];let r=te(n),o=[{type:"text",text:Z(n.content)}];return o.push(...r.map(vt)),[{type:"tool_result",tool_use_id:n.tool_use_id,content:o,is_error:n.is_error}]})}))}function zn(e){return{type:"input_image",image_url:e.image_url.url,detail:e.image_url.detail??"auto"}}function Kn(e){let t=[];for(let n of e){if(typeof n.content=="string"){t.push({role:n.role,content:n.content});continue}let r=n.content.filter(i=>i.type==="text").map(i=>i.text).join(`
8
+ `),o=[..._t(n.content),...n.content.flatMap(i=>i.type==="tool_result"?te(i):[])];(r||o.length)&&t.push({role:n.role,content:[...r?[{type:"input_text",text:r}]:[],...o.map(zn)]});for(let i of n.content)i.type==="tool_use"?t.push({type:"function_call",call_id:i.id,name:i.name,arguments:JSON.stringify(i.input)}):i.type==="tool_result"&&t.push({type:"function_call_output",call_id:i.tool_use_id,output:Z(i.content)})}return t}function Rt(e){let t=Ct(e.image_url.url);return t?{inlineData:{mimeType:t.mediaType,data:t.data}}:{fileData:{fileUri:e.image_url.url}}}function Fn(e){let t=new Map;for(let n of e)if(Array.isArray(n.content))for(let r of n.content)r.type==="tool_use"&&t.set(r.id,r.name);return e.map(n=>typeof n.content=="string"?{role:n.role==="assistant"?"model":"user",parts:[{text:n.content}]}:{role:n.role==="assistant"?"model":"user",parts:n.content.flatMap(r=>{if(r.type==="image_url")return[Rt(r)];if(r.type==="text")return[{text:r.text}];if(r.type==="tool_use")return[{functionCall:{id:r.id,name:r.name,args:r.input},...r.provider_metadata?.thoughtSignature?{thoughtSignature:r.provider_metadata.thoughtSignature}:{}}];let o=Z(r.content);return[{functionResponse:{id:r.tool_use_id,name:t.get(r.tool_use_id)??"unknown_tool",response:r.is_error?{error:o}:{result:o}}},...te(r).map(Rt)]})})}function Wn(e,t){let n=t?[{role:"system",content:t}]:[];for(let r of e){if(typeof r.content=="string"){n.push({role:r.role,content:r.content});continue}let o=r.content.filter(a=>a.type==="text").map(a=>a.text).join(`
9
+ `),i=r.content.filter(a=>a.type==="tool_use").map(a=>({id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.input)}}));(o||i.length)&&n.push({role:r.role,content:o||null,...i.length?{tool_calls:i}:{}});for(let a of r.content)a.type==="tool_result"&&n.push({role:"tool",tool_call_id:a.tool_use_id,content:Z(a.content)});let s=[..._t(r.content),...r.content.flatMap(a=>a.type==="tool_result"?te(a):[])];s.length&&n.push({role:"user",content:s.map(a=>({type:"image_url",image_url:{url:a.image_url.url,detail:a.image_url.detail??"auto"}}))})}return n}function Yn(e){return e.map(t=>({name:t.name,description:t.description,parameters:t.input_schema}))}function ye(e={}){return{inputTokens:Number(e.input_tokens??e.prompt_tokens??e.promptTokenCount??0),outputTokens:Number(e.output_tokens??e.completion_tokens??e.candidatesTokenCount??0)}}function he(e,t,n){return{content:e,stopReason:t,...ye(n)}}function N(e,t,n){if(t&&typeof t=="object"&&!Array.isArray(t))return t;if(typeof t!="string")throw h(e,`${n} arguments must be JSON`);try{let r=JSON.parse(t||"{}");if(!r||typeof r!="object"||Array.isArray(r))throw new Error("arguments are not an object");return r}catch(r){throw h(e,`${n} contains malformed tool arguments`,r)}}function Gn(e,t){if(!Array.isArray(t.content))throw h(e,"content must be an array");let n=t.content.flatMap(o=>{if(o.type==="text"&&typeof o.text=="string")return[{type:"text",text:o.text}];if(o.type==="tool_use"){if(!o.id||!o.name)throw h(e,"tool_use is missing id or name");return[{type:"tool_use",id:String(o.id),name:String(o.name),input:N(e,o.input??{},"tool_use")}]}return[]}),r=t.stop_reason==="tool_use"?"tool_use":t.stop_reason==="max_tokens"?"max_tokens":"end_turn";return he(n,r,t.usage??{})}function Zn(e,t){if(!Array.isArray(t.output))throw h(e,"output must be an array");let n=[];for(let i of t.output)if(i.type==="message"){if(!Array.isArray(i.content))throw h(e,"message content must be an array");for(let s of i.content)s.type==="output_text"&&typeof s.text=="string"&&n.push({type:"text",text:s.text})}else if(i.type==="function_call"){if(!i.call_id&&!i.id)throw h(e,"function_call is missing an id");if(!i.name)throw h(e,"function_call is missing a name");n.push({type:"tool_use",id:String(i.call_id??i.id),name:String(i.name),input:N(e,i.arguments??"{}","function_call")})}let r=n.some(i=>i.type==="tool_use"),o=t.status==="incomplete"&&t.incomplete_details?.reason==="max_output_tokens";return he(n,r?"tool_use":o?"max_tokens":"end_turn",t.usage??{})}function Qn(e,t){if(!Array.isArray(t.candidates)||t.candidates.length===0){let s=t.promptFeedback?.blockReason;throw s?new y(`Provider safety policy refused the request: ${String(s)}`,{providerId:e,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):h(e,"candidates must contain at least one item")}let n=t.candidates[0]??{};if(!Array.isArray(n.content?.parts))throw h(e,"candidate parts must be an array");let r=n.content.parts.flatMap((s,a)=>{if(typeof s.text=="string")return[{type:"text",text:s.text}];if(s.functionCall){let l=s.functionCall;if(!l.name)throw h(e,"functionCall is missing a name");return[{type:"tool_use",id:String(l.id??`gemini-${a}-${(0,Je.randomUUID)().slice(0,8)}`),name:String(l.name),input:N(e,l.args??{},"functionCall"),...s.thoughtSignature?{provider_metadata:{thoughtSignature:s.thoughtSignature}}:{}}]}return[]}),o=r.some(s=>s.type==="tool_use"),i=String(n.finishReason??"").includes("MAX_TOKENS");return he(r,o?"tool_use":i?"max_tokens":"end_turn",t.usageMetadata??{})}function er(e,t){if(!Array.isArray(t.choices)||t.choices.length===0)throw h(e,"choices must contain an item");let n=t.choices[0]??{},r=n.message;if(!r||typeof r!="object")throw h(e,"choice message is missing");let o=[];if(typeof r.content=="string"&&r.content&&o.push({type:"text",text:r.content}),Array.isArray(r.tool_calls))for(let s of r.tool_calls){if(!s.id||!s.function?.name)throw h(e,"tool call is missing id or name");o.push({type:"tool_use",id:String(s.id),name:String(s.function.name),input:N(e,s.function.arguments??"{}","tool call")})}let i=n.finish_reason==="length"?"max_tokens":o.some(s=>s.type==="tool_use")?"tool_use":"end_turn";return he(o,i,t.usage??{})}async function p(e,t){try{await e?.onEvent?.(t)}catch{}}async function tr(e,t,n){await p(n,{type:"message.started"});let r=0;for(let o of e.content)o.type==="text"?(t?.(o.text),await p(n,{type:"text.delta",text:o.text})):o.type==="tool_use"&&(await p(n,{type:"tool_call.started",index:r,toolCallId:o.id,name:o.name}),await p(n,{type:"tool_call.completed",index:r,toolCallId:o.id,name:o.name,input:o.input}),r+=1);await p(n,{type:"usage.updated",inputTokens:e.inputTokens,outputTokens:e.outputTokens}),await p(n,{type:"message.completed",stopReason:e.stopReason})}function be(){return{content:[],inputTokens:0,outputTokens:0,stopReason:"end_turn",terminal:!1}}function Pe(e,t){if(!t.terminal)throw h(e,"stream ended without a terminal event");return{content:t.content,stopReason:t.stopReason,inputTokens:t.inputTokens,outputTokens:t.outputTokens}}function we(e,t){try{let n=JSON.parse(t.data);if(!n||typeof n!="object"||Array.isArray(n))throw new Error("frame is not an object");return n}catch(n){throw h(e,`invalid stream JSON for ${t.event}`,n)}}async function nr(e){let t=be(),n=new Map;return await Q(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},ge(e.config,e.providerId),async r=>{let o=we(e.providerId,r),i=String(o.type??r.event);if(i==="message_start")t.inputTokens=Number(o.message?.usage?.input_tokens??0),await p(e.context,{type:"message.started",providerMessageId:o.message?.id});else if(i==="content_block_start"){let s=Number(o.index??0),a=o.content_block??{};if(a.type==="tool_use"){let l={index:s,id:String(a.id),name:String(a.name),arguments:""};n.set(s,l),await p(e.context,{type:"tool_call.started",index:s,toolCallId:l.id,name:l.name})}else if(a.type==="text"&&a.text){let l=String(a.text);t.content.push({type:"text",text:l}),e.onText?.(l),await p(e.context,{type:"text.delta",text:l})}}else if(i==="content_block_delta"){let s=o.delta??{};if(s.type==="text_delta"){let a=String(s.text??"");if(a){let l=t.content.at(-1);l?.type==="text"?l.text+=a:t.content.push({type:"text",text:a}),e.onText?.(a),await p(e.context,{type:"text.delta",text:a})}}else if(s.type==="thinking_delta")await p(e.context,{type:"reasoning.delta",text:String(s.thinking??"")});else if(s.type==="input_json_delta"){let a=Number(o.index??0),l=n.get(a);if(!l)throw h(e.providerId,"tool argument delta arrived before tool start");let c=String(s.partial_json??"");l.arguments+=c,await p(e.context,{type:"tool_call.arguments.delta",index:a,toolCallId:l.id,delta:c})}}else if(i==="content_block_stop"){let s=Number(o.index??0),a=n.get(s);if(a){let l=N(e.providerId,a.arguments||"{}","streamed tool call");t.content.push({type:"tool_use",id:a.id,name:a.name,input:l}),await p(e.context,{type:"tool_call.completed",index:s,toolCallId:a.id,name:a.name,input:l})}}else if(i==="message_delta"){t.outputTokens=Number(o.usage?.output_tokens??t.outputTokens);let s=o.delta?.stop_reason;t.stopReason=s==="tool_use"?"tool_use":s==="max_tokens"?"max_tokens":"end_turn",await p(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}else if(i==="message_stop")t.terminal=!0,await p(e.context,{type:"message.completed",stopReason:t.stopReason});else if(i==="error")throw h(e.providerId,String(o.error?.message??"stream error"))}),Pe(e.providerId,t)}async function rr(e){let t=be(),n=new Map;return await Q(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},ge(e.config,e.providerId),async r=>{if(r.data==="[DONE]")return;let o=we(e.providerId,r),i=String(o.type??r.event);if(i==="response.created")await p(e.context,{type:"message.started",providerMessageId:o.response?.id});else if(i==="response.output_text.delta"){let s=String(o.delta??""),a=t.content.at(-1);a?.type==="text"?a.text+=s:t.content.push({type:"text",text:s}),e.onText?.(s),await p(e.context,{type:"text.delta",text:s})}else if(i==="response.output_item.added"&&o.item?.type==="function_call"){let s=Number(o.output_index??n.size),a={index:s,id:String(o.item.call_id??o.item.id),name:String(o.item.name),arguments:String(o.item.arguments??"")};n.set(s,a),await p(e.context,{type:"tool_call.started",index:s,toolCallId:a.id,name:a.name})}else if(i==="response.function_call_arguments.delta"){let s=Number(o.output_index??0),a=n.get(s);if(!a)throw h(e.providerId,"tool argument delta arrived before tool start");let l=String(o.delta??"");a.arguments+=l,await p(e.context,{type:"tool_call.arguments.delta",index:s,toolCallId:a.id,delta:l})}else if(i==="response.output_item.done"&&o.item?.type==="function_call"){let s=Number(o.output_index??0),a=n.get(s)??{index:s,id:String(o.item.call_id??o.item.id),name:String(o.item.name),arguments:""},l=String(o.item.arguments??a.arguments??"{}"),c=N(e.providerId,l,"streamed function call");t.content.push({type:"tool_use",id:a.id,name:a.name,input:c}),t.stopReason="tool_use",await p(e.context,{type:"tool_call.completed",index:s,toolCallId:a.id,name:a.name,input:c})}else if(i==="response.completed"||i==="response.incomplete"){let s=o.response??{},a=ye(s.usage??{});t.inputTokens=a.inputTokens,t.outputTokens=a.outputTokens,i==="response.incomplete"&&(t.stopReason="max_tokens"),t.terminal=!0,await p(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens}),await p(e.context,{type:"message.completed",stopReason:t.stopReason})}else if(i==="response.failed"||i==="error")throw h(e.providerId,String(o.response?.error?.message??o.error?.message??"stream failed"))}),Pe(e.providerId,t)}async function or(e){let t=be(),n=new Map;await p(e.context,{type:"message.started"}),await Q(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0,stream_options:{include_usage:!0}}),signal:e.signal},ge(e.config,e.providerId),async r=>{if(r.data==="[DONE]"){t.terminal=!0;return}let o=we(e.providerId,r);if(o.usage){let i=ye(o.usage);t.inputTokens=i.inputTokens,t.outputTokens=i.outputTokens,await p(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}for(let i of o.choices??[]){let s=i.delta??{};if(typeof s.content=="string"&&s.content){let a=t.content.at(-1);a?.type==="text"?a.text+=s.content:t.content.push({type:"text",text:s.content}),e.onText?.(s.content),await p(e.context,{type:"text.delta",text:s.content})}for(let a of s.tool_calls??[]){let l=Number(a.index??0),c=n.get(l);c||(c={index:l,id:String(a.id??`call-${l}`),name:"",arguments:""},n.set(l,c)),a.id&&(c.id=String(a.id)),a.function?.name&&(c.name+=String(a.function.name)),c.name&&!c.started&&(await p(e.context,{type:"tool_call.started",index:l,toolCallId:c.id,name:c.name}),c.started=!0);let m=String(a.function?.arguments??"");m&&(c.arguments+=m,await p(e.context,{type:"tool_call.arguments.delta",index:l,toolCallId:c.id,delta:m}))}i.finish_reason&&(t.stopReason=i.finish_reason==="length"?"max_tokens":n.size?"tool_use":"end_turn")}});for(let r of[...n.values()].sort((o,i)=>o.index-i.index)){let o=N(e.providerId,r.arguments||"{}","streamed tool call");t.content.push({type:"tool_use",id:r.id,name:r.name,input:o}),await p(e.context,{type:"tool_call.completed",index:r.index,toolCallId:r.id,name:r.name,input:o})}return await p(e.context,{type:"message.completed",stopReason:t.stopReason}),Pe(e.providerId,t)}async function ir(e){let t=be(),n=0;return await p(e.context,{type:"message.started"}),await Q(e.url,{method:"POST",headers:e.headers,body:JSON.stringify(e.body),signal:e.signal},ge(e.config,e.providerId),async r=>{let o=we(e.providerId,r);if(o.usageMetadata){let s=ye(o.usageMetadata);t.inputTokens=s.inputTokens,t.outputTokens=s.outputTokens,await p(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}let i=o.candidates?.[0];for(let s of i?.content?.parts??[])if(typeof s.text=="string"){let a=t.content.at(-1);a?.type==="text"?a.text+=s.text:t.content.push({type:"text",text:s.text}),e.onText?.(s.text),await p(e.context,{type:"text.delta",text:s.text})}else if(s.functionCall){let a=s.functionCall,l=String(a.id??`gemini-${n}-${(0,Je.randomUUID)().slice(0,8)}`),c=String(a.name??""),m=N(e.providerId,a.args??{},"streamed function call");await p(e.context,{type:"tool_call.started",index:n,toolCallId:l,name:c}),t.content.push({type:"tool_use",id:l,name:c,input:m,...s.thoughtSignature?{provider_metadata:{thoughtSignature:s.thoughtSignature}}:{}}),await p(e.context,{type:"tool_call.completed",index:n,toolCallId:l,name:c,input:m}),n+=1}i?.finishReason&&(t.stopReason=String(i.finishReason).includes("MAX_TOKENS")?"max_tokens":n?"tool_use":"end_turn",t.terminal=!0,await p(e.context,{type:"message.completed",stopReason:t.stopReason}))}),Pe(e.providerId,t)}function sr(e){return e instanceof y?{type:"provider.error",code:e.code,category:e.category,retryable:e.retryable}:{type:"provider.error",code:"PROVIDER_TRANSPORT_ERROR",category:"transport",retryable:!1}}function Tt(e){let t=`direct-${e.kind}`,n=Vn(e),r=Bn(e),o={profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname},i={providerId:t,endpointPolicy:o,limits:e.transportLimits};return{id:t,capabilities:r,async complete(s,a,l,c,m,d){if(l.length>0&&!r.tools)throw B(t,"tools");if(qn(a)&&!r.imageInput)throw B(t,"image input");let g=e.kind==="openai-compatible"?"openai-chat":e.kind,f=pe(l,g).map(({definition:R})=>R),P,x={"content-type":"application/json"},b;try{if(e.kind==="anthropic"){if(P=fe(n,"/v1/messages"),x={...x,"x-api-key":e.apiKey,"anthropic-version":e.anthropicVersion??"2023-06-01"},b={model:s,max_tokens:e.maxTokens??8192,system:d?.systemPrompt,messages:Hn(a),tools:f.map(v=>({name:v.name,description:v.description,input_schema:v.input_schema}))},e.streaming)return await nr({providerId:t,url:P,headers:x,body:b,config:e,signal:m,onText:c,context:d})}else if(e.kind==="google"){let v=e.streaming?"streamGenerateContent":"generateContent";if(P=fe(n,`/v1beta/models/${encodeURIComponent(s)}:${v}`),e.streaming&&P.searchParams.set("alt","sse"),x={...x,"x-goog-api-key":e.apiKey},b={systemInstruction:d?.systemPrompt?{parts:[{text:d.systemPrompt}]}:void 0,contents:Fn(a),tools:f.length>0?[{functionDeclarations:Yn(f)}]:void 0,generationConfig:{maxOutputTokens:e.maxTokens??8192}},e.streaming)return await ir({providerId:t,url:P,headers:x,body:b,config:e,signal:m,onText:c,context:d})}else if(e.kind==="openai-compatible"){if(P=fe(n,e.chatCompletionsPath??"/v1/chat/completions"),x={...x,...Un(e)},b={model:s,messages:Wn(a,d?.systemPrompt),tools:f.length>0?f.map(v=>({type:"function",function:{name:v.name,description:v.description,parameters:v.input_schema}})):void 0,max_tokens:e.maxTokens??8192},e.streaming)return await or({providerId:t,url:P,headers:x,body:b,config:e,signal:m,onText:c,context:d})}else if(P=fe(n,"/v1/responses"),x={...x,authorization:`Bearer ${e.apiKey}`},b={model:s,instructions:d?.systemPrompt,input:Kn(a),tools:f.map(v=>({type:"function",name:v.name,description:v.description,parameters:v.input_schema})),max_output_tokens:e.maxTokens??8192,store:!1},e.streaming)return await rr({providerId:t,url:P,headers:x,body:b,config:e,signal:m,onText:c,context:d});let R=await at(P,{method:"POST",headers:x,body:JSON.stringify(b),signal:m},i),k=e.kind==="anthropic"?Gn(t,R):e.kind==="google"?Qn(t,R):e.kind==="openai-compatible"?er(t,R):Zn(t,R);return await tr(k,c,d),k}catch(R){throw R instanceof y&&R.category==="cancelled"?await p(d,{type:"provider.cancelled"}):(await p(d,sr(R)),R instanceof y&&R.retryable&&await p(d,{type:"provider.retry",retryAfterMs:R.retryAfterMs,reason:R.category})),R}}}}function Xe(e,t={}){for(let n of e){let r=n.codePointAt(0);if(r===127)return!0;if(!(r>31)&&!(r===9&&t.allowTab===!0)&&!((r===10||r===13)&&t.allowLineBreaks===!0))return!0}return!1}var Ve=1,X={streaming:!0,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!0,usageAccounting:!0,promptCaching:!1,modelDiscovery:!0},xe={...X,reasoningMetadata:!1},St=[I("xeno","XENO hosted","xeno","openai-compatible","https://api.xenostudio.ai","public-https","bearer-env","XENO_API_KEY","/v1/models",X),I("openai","OpenAI","direct","openai-responses","https://api.openai.com","public-https","bearer-env","OPENAI_API_KEY","/v1/models",X),I("anthropic","Anthropic","direct","anthropic","https://api.anthropic.com","public-https","header-env","ANTHROPIC_API_KEY","/v1/models",{...X,structuredOutput:!1}),I("google","Google AI Studio","direct","google","https://generativelanguage.googleapis.com","public-https","header-env","GOOGLE_API_KEY","/v1beta/models",X),I("openrouter","OpenRouter","gateway","openai-compatible","https://openrouter.ai/api","public-https","bearer-env","OPENROUTER_API_KEY","/v1/models",xe),I("xeno-rt","xeno-rt","local","openai-compatible","http://127.0.0.1:3338","local-network","none",void 0,"/v1/models",xe,["running xeno-rt endpoint"]),I("ollama","Ollama","local","openai-compatible","http://127.0.0.1:11434","local-network","none",void 0,"/v1/models",xe,["Ollama OpenAI compatibility endpoint"]),I("azure-openai","Azure OpenAI","cloud","openai-compatible",void 0,"public-https","header-env","AZURE_OPENAI_API_KEY",void 0,xe,["resource endpoint","deployment","API version","host adapter for deployment-shaped requests"]),I("aws-bedrock","Amazon Bedrock","cloud","aws-bedrock",void 0,"public-https","cloud-chain",void 0,void 0,{...X,modelDiscovery:!1},["AWS credential chain","region","Bedrock host adapter"]),I("vertex-ai","Google Vertex AI","cloud","vertex-ai",void 0,"public-https","cloud-chain",void 0,void 0,{...X,modelDiscovery:!1},["Google application-default credentials","project","region","Vertex host adapter"])],W=class{presets=new Map;constructor(t=St){for(let n of t)this.add(n)}add(t){yr(t),this.presets.set(t.id,structuredClone(t))}get(t){let n=this.presets.get(t);return n?structuredClone(n):void 0}list(){return[...this.presets.values()].map(t=>structuredClone(t)).sort((t,n)=>t.displayName.localeCompare(n.displayName))}resolve(t,n){let r=this.get(t.providerId);if(!r)throw new Error(`Unknown provider preset: ${t.providerId}`);let o=[],i;try{i=kt(t.baseUrl??r.defaultBaseUrl,r)}catch(l){o.push(l instanceof Error?l.message:String(l))}i||o.push("Provider endpoint is not configured");let s=t.secretRef?.trim()||r.auth.defaultSecretRef;(r.auth.mode==="bearer-env"||r.auth.mode==="header-env")&&!s&&o.push("Credential reference is not configured"),s&&n&&!n(s)&&o.push(`Credential reference ${s} is not available`),(r.adapterKind==="aws-bedrock"||r.adapterKind==="vertex-ai"||r.id==="azure-openai")&&o.push("Provider requires a dedicated host adapter");let a="ready";return t.enabled===!1?a="blocked":o.some(l=>l.includes("host adapter"))?a="requires-host-adapter":o.some(l=>l.includes("Credential"))?a="missing-credential":o.length&&(a="needs-configuration"),{connection:hr(t),preset:r,...i?{endpoint:i}:{},...s?{secretRef:s}:{},readiness:a,blockers:o}}};async function ar(e){let n=(e.catalog??new W).resolve(e.connection),r=n.preset.auth.mode,o=n.secretRef?await e.resolveSecretRef?.(n.secretRef):void 0,i=r==="none"?"not-required":r==="cloud-chain"?"external":o?"present":"missing",s={schemaVersion:1,connectionId:n.connection.id,providerId:n.preset.id,...n.endpoint?{endpoint:n.endpoint}:{},readiness:n.readiness,credentialState:i,reachable:!1,authenticated:null,models:[],capabilities:n.preset.capabilities,errors:[...n.blockers]};if(n.readiness==="requires-host-adapter"||n.readiness==="blocked"||!n.endpoint)return s;if((r==="bearer-env"||r==="header-env")&&!o)return{...s,readiness:"missing-credential",errors:F([...s.errors,`Credential reference ${n.secretRef??"(missing)"} did not resolve`])};if(!n.preset.discoveryPath)return{...s,readiness:"ready",errors:F(s.errors)};let a=D(n.endpoint,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts});try{await q(a,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts,resolveHostname:e.resolveHostname})}catch(d){return{...s,readiness:"blocked",errors:F([...s.errors,d instanceof Error?d.message:String(d)])}}let l=ur(a,n.preset.discoveryPath),c=dr(n.preset,o),m=Date.now();try{let d=await mr(e.fetchImpl??fetch,l,{headers:c},e.timeoutMs??8e3),g=Date.now()-m,f=d.status===401||d.status===403?!1:d.ok?!0:null;if(!d.ok)return{...s,reachable:!0,authenticated:f,latencyMs:g,readiness:f===!1?"missing-credential":"blocked",errors:F([...s.errors,`Provider discovery returned HTTP ${d.status}`])};let P=new Uint8Array(await d.arrayBuffer()),x=e.maxResponseBytes??2*1024*1024;if(P.byteLength>x)throw new Error(`Provider discovery response exceeds ${x} bytes`);let b=JSON.parse(new TextDecoder().decode(P));return{...s,readiness:"ready",reachable:!0,authenticated:f,latencyMs:g,models:pr(b),errors:F(s.errors)}}catch(d){return{...s,readiness:"blocked",latencyMs:Date.now()-m,errors:F([...s.errors,br(d)])}}}function lr(e,t={}){let n=t.allowedProviderIds?new Set(t.allowedProviderIds):null,r=new Set(t.deniedProviderIds??[]),o=new Map((t.fallbackOrder??[]).map((i,s)=>[i,s]));return e.filter(({connection:i,model:s})=>{let a=i.preset.id;return!(i.readiness!=="ready"||i.connection.enabled===!1||n&&!n.has(a)||r.has(a)||!fr({...i.preset.capabilities,...s.capabilities??{}},t.require)||t.maxInputCostPerMillion!==void 0&&(s.inputCostPerMillion??1/0)>t.maxInputCostPerMillion||t.maxOutputCostPerMillion!==void 0&&(s.outputCostPerMillion??1/0)>t.maxOutputCostPerMillion)}).sort((i,s)=>{if(t.preferLocal&&i.connection.preset.family!==s.connection.preset.family){if(i.connection.preset.family==="local")return-1;if(s.connection.preset.family==="local")return 1}let a=o.get(i.connection.preset.id)??Number.MAX_SAFE_INTEGER,l=o.get(s.connection.preset.id)??Number.MAX_SAFE_INTEGER;return a-l||i.connection.preset.id.localeCompare(s.connection.preset.id)||i.model.id.localeCompare(s.model.id)})}function cr(e,t){if(e.readiness==="requires-host-adapter")throw new Error(`${e.preset.displayName} requires a dedicated host adapter`);if(!e.endpoint)throw new Error("Provider endpoint is not configured");if(e.preset.adapterKind==="aws-bedrock"||e.preset.adapterKind==="vertex-ai")throw new Error("Cloud adapter cannot be represented as DirectProviderConfig");if((e.preset.auth.mode==="bearer-env"||e.preset.auth.mode==="header-env")&&!t)throw new Error("Provider credential did not resolve");let n=gr(e.preset.capabilities);return{kind:e.preset.adapterKind,apiKey:t??"",baseURL:e.endpoint,endpointProfile:e.preset.endpointProfile,allowedHosts:e.preset.allowedHosts,streaming:n.streaming,...e.preset.adapterKind==="openai-compatible"?{capabilityProfile:n}:{},...e.preset.auth.mode==="header-env"?{authentication:{type:"header",header:e.preset.auth.header??Ue(e.preset.id),prefix:e.preset.auth.prefix}}:{},...e.preset.auth.mode==="none"?{authentication:{type:"none"}}:{}}}function I(e,t,n,r,o,i,s,a,l,c,m=[]){return{schemaVersion:Ve,id:e,displayName:t,family:n,adapterKind:r,...o?{defaultBaseUrl:o}:{},endpointProfile:i,...o?{allowedHosts:[new URL(o).hostname]}:{},auth:{mode:s,...a?{defaultSecretRef:a}:{},...s==="header-env"?{header:Ue(e)}:{},description:s==="none"?"No credential required":s==="cloud-chain"?"Provider-owned cloud credential chain":`Environment/credential reference ${a}`},capabilities:c,...l?{discoveryPath:l}:{},requires:m}}function Ue(e){return e==="anthropic"?"x-api-key":e==="google"?"x-goog-api-key":e==="azure-openai"?"api-key":"authorization"}function dr(e,t){return e.auth.mode==="none"||e.auth.mode==="cloud-chain"?{accept:"application/json"}:t?e.auth.mode==="bearer-env"?{accept:"application/json",authorization:`Bearer ${t}`}:{accept:"application/json",[e.auth.header??Ue(e.id)]:`${e.auth.prefix??""}${t}`}:{accept:"application/json"}}function kt(e,t){return e?D(e.trim().replace(/\/+$/,""),{profile:t.endpointProfile,allowedHosts:t.allowedHosts}).toString().replace(/\/$/,""):void 0}function ur(e,t){let n=new URL(e.toString());if(!t.startsWith("/")||t.includes("..")||t.includes("#"))throw new Error("Provider discovery path is invalid");return n.pathname=`${n.pathname.replace(/\/$/,"")}${t}`.replace(/\/{2,}/g,"/"),n}async function mr(e,t,n,r){let o=new AbortController,i=setTimeout(()=>o.abort(new Error("Provider probe timed out")),Math.max(100,Math.min(r,6e4)));i.unref?.();try{return await e(t,{...n,signal:o.signal,redirect:"error"})}finally{clearTimeout(i)}}function pr(e){if(!e||typeof e!="object")return[];let t=e,r=(Array.isArray(t.data)?t.data:Array.isArray(t.models)?t.models:[]).flatMap(o=>{if(!o||typeof o!="object")return[];let i=o,a=(typeof i.id=="string"?i.id:typeof i.name=="string"?i.name.replace(/^models\//,""):"").trim();return!a||a.length>300||Xe(a)?[]:[{id:a,...typeof i.displayName=="string"&&i.displayName.trim()?{displayName:i.displayName.trim().slice(0,300)}:{},...typeof i.owned_by=="string"&&i.owned_by.trim()?{ownedBy:i.owned_by.trim().slice(0,200)}:{},metadataSource:"provider"}]});return[...new Map(r.map(o=>[o.id,o])).values()].sort((o,i)=>o.id.localeCompare(i.id))}function fr(e,t){return t?Object.entries(t).every(([n,r])=>r!==!0||e[n]===!0):!0}function gr(e){return{streaming:e.streaming,textInput:e.textInput,imageInput:e.imageInput,tools:e.tools,parallelToolCalls:e.parallelToolCalls,structuredOutput:e.structuredOutput,reasoningMetadata:e.reasoningMetadata,usageAccounting:e.usageAccounting,cancellation:!0,retryAfter:!0,promptCaching:e.promptCaching}}function yr(e){if(e.schemaVersion!==Ve||!/^[a-z0-9][a-z0-9._-]{1,80}$/.test(e.id))throw new Error("Provider preset id is invalid");if(!e.displayName.trim())throw new Error(`Provider preset ${e.id} requires displayName`);if(e.defaultBaseUrl&&kt(e.defaultBaseUrl,e),e.discoveryPath&&(!e.discoveryPath.startsWith("/")||e.discoveryPath.includes("..")))throw new Error(`Provider preset ${e.id} discoveryPath is invalid`);if(e.auth.header&&!/^[A-Za-z0-9-]{1,80}$/.test(e.auth.header))throw new Error(`Provider preset ${e.id} auth header is invalid`)}function hr(e){let t=e.id.trim();if(!t||t.length>120||Xe(t))throw new Error("Provider connection id is invalid");let n=e.secretRef?.trim();if(n&&!/^[A-Za-z_][A-Za-z0-9_.:/-]{0,255}$/.test(n))throw new Error("Provider credential reference is invalid");return{id:t,providerId:e.providerId.trim(),...e.baseUrl?.trim()?{baseUrl:e.baseUrl.trim()}:{},...n?{secretRef:n}:{},...e.model?.trim()?{model:e.model.trim().slice(0,300)}:{},enabled:e.enabled!==!1,...e.metadata?{metadata:{...e.metadata}}:{}}}function F(e){return[...new Set(e)]}function br(e){return(e instanceof Error?e.message:String(e)).replace(/(Bearer\s+)[A-Za-z0-9._~+/=-]+/gi,"$1[redacted]").replace(/([?&#](?:token|key|secret|password|api[_-]?key)=)[^&#\s]+/gi,"$1[redacted]").slice(0,500)}var Ke=require("node:crypto"),S=require("node:fs/promises"),V=require("node:path");function Et(e){return JSON.stringify(Be(e,new Set))}function Be(e,t){if(e===null||typeof e!="object"){if(typeof e=="number"&&!Number.isFinite(e))throw new TypeError("Artifact JSON cannot contain non-finite numbers");return e}if(t.has(e))throw new TypeError("Artifact JSON cannot contain cycles");if(t.add(e),Array.isArray(e)){let r=e.map(o=>Be(o,t));return t.delete(e),r}let n={};for(let r of Object.keys(e).sort((o,i)=>o.localeCompare(i))){let o=e[r];if(o===void 0)throw new TypeError(`Artifact JSON property ${r} is undefined`);n[r]=Be(o,t)}return t.delete(e),n}var L=require("node:fs"),qe=require("node:os"),At=require("node:path");function Pr(){return new Date().toISOString()}function wr(){return new Date(Date.now()-Math.floor(process.uptime()*1e3)).toISOString()}function Ot(e){try{return JSON.parse((0,L.readFileSync)(e,"utf8"))}catch{return null}}function xr(e){if(!e||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}function vr(e){return e.hostname!==(0,qe.hostname)()?!0:xr(e.pid)}function It(e,t){(0,L.mkdirSync)((0,At.dirname)(e),{recursive:!0}),(0,L.writeFileSync)(e,JSON.stringify(t,null,2)+`
10
+ `,{encoding:"utf8",flag:"wx"})}function Rr(e,t){let n=Ot(e);n?.pid!==t.pid||n.hostname!==t.hostname||(0,L.rmSync)(e,{force:!0})}function Lt(e,t,n){let r=Pr(),o={schemaVersion:1,name:t,pid:process.pid,hostname:(0,qe.hostname)(),processStartedAt:wr(),version:n,acquiredAt:r,updatedAt:r};try{It(e,o)}catch(i){if(i.code!=="EEXIST")throw i;let a=Ot(e);if(a&&vr(a))throw new Error(`${t} is already locked by PID ${a.pid} on ${a.hostname}.`);(0,L.rmSync)(e,{force:!0}),It(e,o)}return{record:o,release:()=>{Rr(e,o)}}}var ve=1,ze=class{directory;snapshotPath;lockPath;catalog;now;constructor(t){this.directory=(0,V.resolve)(t.directory),this.snapshotPath=(0,V.join)(this.directory,"providers.json"),this.lockPath=(0,V.join)(this.directory,"providers.lock"),this.catalog=t.catalog??new W,this.now=t.now??(()=>new Date)}async upsert(t){let n=this.catalog.resolve(t).connection;return $t(n),this.mutate(r=>{let o=r.connections.filter(i=>i.id!==n.id);return o.push(n),{snapshot:He(r,o,r.routingPolicy,this.now()),result:n}})}async remove(t){return this.mutate(n=>{let r=n.connections.filter(o=>o.id!==t);return r.length===n.connections.length?{snapshot:n,result:!1}:{snapshot:He(n,r,n.routingPolicy,this.now()),result:!0}})}async setRoutingPolicy(t){let n=Nt(t);return this.mutate(r=>({snapshot:He(r,r.connections,n,this.now()),result:n}))}async get(t){return(await this.load()).connections.find(n=>n.id===t)??null}async list(){return(await this.load()).connections}async load(){try{let t=JSON.parse(await(0,S.readFile)(this.snapshotPath,"utf8"));return _r(t,this.catalog),t}catch(t){if(t.code==="ENOENT")return Cr(this.now());throw t}}async mutate(t){await(0,S.mkdir)(this.directory,{recursive:!0,mode:448});let n=Lt(this.lockPath,"xeno provider connection store","1");try{let r=await this.load(),{snapshot:o,result:i}=t(r);return o!==r&&await Tr(this.snapshotPath,`${JSON.stringify(o,null,2)}
11
+ `),i}finally{n.release()}}};function Cr(e){return Mt({schemaVersion:ve,generation:0,updatedAt:e.toISOString(),connections:[],routingPolicy:{}})}function He(e,t,n,r){return Mt({schemaVersion:ve,generation:e.generation+1,updatedAt:r.toISOString(),connections:[...t].sort((o,i)=>o.id.localeCompare(i.id)),routingPolicy:n})}function Mt(e){return{...e,checksum:{algorithm:"sha256",value:(0,Ke.createHash)("sha256").update(Dt(e)).digest("hex")}}}function _r(e,t){if(e.schemaVersion!==ve||!Array.isArray(e.connections))throw new Error("Invalid provider connection snapshot");let{checksum:n,...r}=e;if(n?.algorithm!=="sha256"||n.value!==(0,Ke.createHash)("sha256").update(Dt(r)).digest("hex"))throw new Error("Provider connection snapshot checksum mismatch");let o=new Set;for(let i of e.connections){let s=t.resolve(i).connection;if($t(s),o.has(s.id))throw new Error(`Duplicate provider connection: ${s.id}`);o.add(s.id)}Nt(e.routingPolicy)}function $t(e){let t=JSON.stringify(e);if(/\b(?:sk-[A-Za-z0-9_-]{16,}|xox[baprs]-[A-Za-z0-9-]{16,}|AKIA[0-9A-Z]{16})\b/.test(t))throw new Error("Provider connection configuration cannot contain raw credentials");if(e.baseUrl&&/[?&#](?:token|key|secret|password|api[_-]?key)=/i.test(e.baseUrl))throw new Error("Provider endpoint cannot contain credentials")}function Nt(e){let t=r=>r?[...new Set(r.map(o=>o.trim()).filter(Boolean))].sort():void 0,n={...t(e.allowedProviderIds)?{allowedProviderIds:t(e.allowedProviderIds)}:{},...t(e.deniedProviderIds)?{deniedProviderIds:t(e.deniedProviderIds)}:{},...t(e.fallbackOrder)?{fallbackOrder:t(e.fallbackOrder)}:{},...e.preferLocal!==void 0?{preferLocal:!!e.preferLocal}:{},...e.require?{require:{...e.require}}:{}};for(let[r,o]of[["maxInputCostPerMillion",e.maxInputCostPerMillion],["maxOutputCostPerMillion",e.maxOutputCostPerMillion]])if(o!==void 0){if(!Number.isFinite(o)||o<0)throw new Error(`${r} must be a non-negative finite number`);n[r]=o}return n}async function Tr(e,t){await(0,S.mkdir)((0,V.dirname)(e),{recursive:!0,mode:448});let n=`${e}.${process.pid}.${Date.now()}.tmp`,r;try{r=await(0,S.open)(n,"wx",384),await r.writeFile(t,"utf8"),await r.sync(),await r.close(),r=void 0,await(0,S.rename)(n,e),await(0,S.chmod)(e,384).catch(()=>{})}finally{r&&await r.close().catch(()=>{}),await(0,S.unlink)(n).catch(()=>{})}}function Dt(e){return Et(e)}0&&(module.exports={BUILT_IN_XENO_PROVIDER_PRESETS,DualLLMProvider,FileXenoProviderConnectionStore,ProviderError,ToolSchemaProjectionError,XENO_PROVIDER_CATALOG_SCHEMA_VERSION,XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION,XenoProviderCatalog,assertDirectEndpointResolution,classifyProviderHttpError,createDirectProvider,directProviderConfigFromConnection,parseRetryAfter,probeXenoProvider,projectToolDefinitionsForProvider,projectToolSchemaForProvider,providerCapabilityError,providerProtocolError,selectXenoProviderRoute,validateDirectEndpoint});