@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.
- package/LICENSE +15 -0
- package/README.md +511 -0
- package/dist/agents/index.cjs +17 -0
- package/dist/agents/index.d.cts +244 -0
- package/dist/agents/index.d.ts +244 -0
- package/dist/agents/index.js +17 -0
- package/dist/agents/metafile-cjs.json +1 -0
- package/dist/agents/metafile-esm.json +1 -0
- package/dist/artifacts/browser.cjs +1 -0
- package/dist/artifacts/browser.d.cts +8 -0
- package/dist/artifacts/browser.d.ts +8 -0
- package/dist/artifacts/browser.js +1 -0
- package/dist/artifacts/diff-artifact-C2tQZWcs.d.cts +354 -0
- package/dist/artifacts/diff-artifact-C2tQZWcs.d.ts +354 -0
- package/dist/artifacts/index.cjs +10 -0
- package/dist/artifacts/index.d.cts +588 -0
- package/dist/artifacts/index.d.ts +588 -0
- package/dist/artifacts/index.js +10 -0
- package/dist/artifacts/metafile-cjs.json +1 -0
- package/dist/artifacts/metafile-esm.json +1 -0
- package/dist/automation/index.cjs +438 -0
- package/dist/automation/index.d.cts +878 -0
- package/dist/automation/index.d.ts +878 -0
- package/dist/automation/index.js +438 -0
- package/dist/automation/metafile-cjs.json +1 -0
- package/dist/automation/metafile-esm.json +1 -0
- package/dist/control-plane/index.cjs +7 -0
- package/dist/control-plane/index.d.cts +403 -0
- package/dist/control-plane/index.d.ts +403 -0
- package/dist/control-plane/index.js +7 -0
- package/dist/control-plane/metafile-cjs.json +1 -0
- package/dist/control-plane/metafile-esm.json +1 -0
- package/dist/control-room/index.cjs +1 -0
- package/dist/control-room/index.d.cts +216 -0
- package/dist/control-room/index.d.ts +216 -0
- package/dist/control-room/index.js +1 -0
- package/dist/control-room/metafile-cjs.json +1 -0
- package/dist/control-room/metafile-esm.json +1 -0
- package/dist/electron/index.cjs +1476 -0
- package/dist/electron/index.d.cts +1583 -0
- package/dist/electron/index.d.ts +1583 -0
- package/dist/electron/index.js +1476 -0
- package/dist/electron/metafile-cjs.json +1 -0
- package/dist/electron/metafile-esm.json +1 -0
- package/dist/governance/index.cjs +33 -0
- package/dist/governance/index.d.cts +397 -0
- package/dist/governance/index.d.ts +397 -0
- package/dist/governance/index.js +33 -0
- package/dist/governance/metafile-cjs.json +1 -0
- package/dist/governance/metafile-esm.json +1 -0
- package/dist/hooks/index.cjs +9 -0
- package/dist/hooks/index.d.cts +198 -0
- package/dist/hooks/index.d.ts +198 -0
- package/dist/hooks/index.js +9 -0
- package/dist/hooks/metafile-cjs.json +1 -0
- package/dist/hooks/metafile-esm.json +1 -0
- package/dist/hosted/index.cjs +1 -0
- package/dist/hosted/index.d.cts +490 -0
- package/dist/hosted/index.d.ts +490 -0
- package/dist/hosted/index.js +1 -0
- package/dist/hosted/metafile-cjs.json +1 -0
- package/dist/hosted/metafile-esm.json +1 -0
- package/dist/index.cjs +2161 -0
- package/dist/index.d.cts +12259 -0
- package/dist/index.d.ts +12259 -0
- package/dist/index.js +2161 -0
- package/dist/intelligence/index.cjs +10 -0
- package/dist/intelligence/index.d.cts +220 -0
- package/dist/intelligence/index.d.ts +220 -0
- package/dist/intelligence/index.js +10 -0
- package/dist/intelligence/metafile-cjs.json +1 -0
- package/dist/intelligence/metafile-esm.json +1 -0
- package/dist/mcp/index.cjs +28 -0
- package/dist/mcp/index.d.cts +960 -0
- package/dist/mcp/index.d.ts +960 -0
- package/dist/mcp/index.js +28 -0
- package/dist/mcp/metafile-cjs.json +1 -0
- package/dist/mcp/metafile-esm.json +1 -0
- package/dist/metafile-cjs.json +1 -0
- package/dist/metafile-esm.json +1 -0
- package/dist/oracle/index.cjs +1 -0
- package/dist/oracle/index.d.cts +310 -0
- package/dist/oracle/index.d.ts +310 -0
- package/dist/oracle/index.js +1 -0
- package/dist/oracle/metafile-cjs.json +1 -0
- package/dist/oracle/metafile-esm.json +1 -0
- package/dist/providers/index.cjs +11 -0
- package/dist/providers/index.d.cts +462 -0
- package/dist/providers/index.d.ts +462 -0
- package/dist/providers/index.js +11 -0
- package/dist/providers/metafile-cjs.json +1 -0
- package/dist/providers/metafile-esm.json +1 -0
- package/dist/recipes/index.cjs +2 -0
- package/dist/recipes/index.d.cts +86 -0
- package/dist/recipes/index.d.ts +86 -0
- package/dist/recipes/index.js +2 -0
- package/dist/recipes/metafile-cjs.json +1 -0
- package/dist/recipes/metafile-esm.json +1 -0
- package/dist/research/index.cjs +3 -0
- package/dist/research/index.d.cts +285 -0
- package/dist/research/index.d.ts +285 -0
- package/dist/research/index.js +3 -0
- package/dist/research/metafile-cjs.json +1 -0
- package/dist/research/metafile-esm.json +1 -0
- package/dist/session/index.cjs +56 -0
- package/dist/session/index.d.cts +523 -0
- package/dist/session/index.d.ts +523 -0
- package/dist/session/index.js +56 -0
- package/dist/session/metafile-cjs.json +1 -0
- package/dist/session/metafile-esm.json +1 -0
- package/dist/sharing/index.cjs +4 -0
- package/dist/sharing/index.d.cts +272 -0
- package/dist/sharing/index.d.ts +272 -0
- package/dist/sharing/index.js +4 -0
- package/dist/sharing/metafile-cjs.json +1 -0
- package/dist/sharing/metafile-esm.json +1 -0
- package/dist/skills/index.cjs +6 -0
- package/dist/skills/index.d.cts +277 -0
- package/dist/skills/index.d.ts +277 -0
- package/dist/skills/index.js +6 -0
- package/dist/skills/metafile-cjs.json +1 -0
- package/dist/skills/metafile-esm.json +1 -0
- package/dist/soul/index.cjs +32 -0
- package/dist/soul/index.d.cts +138 -0
- package/dist/soul/index.d.ts +138 -0
- package/dist/soul/index.js +32 -0
- package/dist/soul/metafile-cjs.json +1 -0
- package/dist/soul/metafile-esm.json +1 -0
- package/dist/terminal/index.cjs +4 -0
- package/dist/terminal/index.d.cts +55 -0
- package/dist/terminal/index.d.ts +55 -0
- package/dist/terminal/index.js +4 -0
- package/dist/terminal/metafile-cjs.json +1 -0
- package/dist/terminal/metafile-esm.json +1 -0
- package/dist/ui/index.cjs +35 -0
- package/dist/ui/index.d.cts +298 -0
- package/dist/ui/index.d.ts +298 -0
- package/dist/ui/index.js +35 -0
- package/dist/ui/metafile-cjs.json +1 -0
- package/dist/ui/metafile-esm.json +1 -0
- package/dist/utils/index.cjs +23 -0
- package/dist/utils/index.d.cts +245 -0
- package/dist/utils/index.d.ts +245 -0
- package/dist/utils/index.js +23 -0
- package/dist/utils/metafile-cjs.json +1 -0
- package/dist/utils/metafile-esm.json +1 -0
- package/native/mxc/LICENSE.microsoft-mxc-sdk.md +21 -0
- package/native/mxc/README.md +25 -0
- package/native/mxc/bin/arm64/lxc-exec +0 -0
- package/native/mxc/bin/arm64/mxc-exec-mac +0 -0
- package/native/mxc/bin/arm64/wxc-exec.exe +0 -0
- package/native/mxc/bin/arm64/wxc-host-prep.exe +0 -0
- package/native/mxc/bin/x64/lxc-exec +0 -0
- package/native/mxc/bin/x64/wxc-exec.exe +0 -0
- package/native/mxc/bin/x64/wxc-host-prep.exe +0 -0
- package/native/mxc/package.json +58 -0
- package/ownership/CLEAN_ROOM_CONTRIBUTOR_GUIDE.md +63 -0
- package/ownership/audit.mjs +727 -0
- package/ownership/evidence/PROPRIETARY-COMMAND-1/implementation-record.md +77 -0
- package/ownership/evidence/PROPRIETARY-COMMAND-1/provenance-review.md +51 -0
- package/ownership/evidence/PROPRIETARY-MEDIA-1/implementation-record.md +131 -0
- package/ownership/evidence/PROPRIETARY-MEDIA-1/provenance-review.md +50 -0
- package/ownership/evidence/PROPRIETARY-PTY-1/implementation-record.md +86 -0
- package/ownership/evidence/PROPRIETARY-PTY-1/provenance-review.md +52 -0
- package/ownership/evidence/PROPRIETARY-RUNTIME-1/implementation-record.md +68 -0
- package/ownership/evidence/PROPRIETARY-RUNTIME-1/provenance-review.md +32 -0
- package/ownership/evidence/PROPRIETARY-TOOLCHAIN-1/implementation-record.md +53 -0
- package/ownership/evidence/PROPRIETARY-TOOLCHAIN-1/provenance-review.md +32 -0
- package/ownership/evidence/PROPRIETARY-UI-1/implementation-record.md +96 -0
- package/ownership/evidence/PROPRIETARY-UI-1/provenance-review.md +46 -0
- package/ownership/ownership-policy.json +232 -0
- package/ownership/ownership-policy.schema.json +192 -0
- package/ownership/templates/clean-room-implementation-record.md +70 -0
- package/ownership/templates/provenance-review.md +51 -0
- package/package.json +209 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
var je="https://api.xenostudio.ai";var Sr=300*1e3;function Je(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=Ot(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 Ot(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 Mt="http://localhost:3338",$t=je,Nt=2e3,pe=12e4,Dt=3e4,fe=class{localUrl;cloudUrl;cloudApiKey;mode;defaultLocalModel;defaultCloudModel;localAvailable=null;localModelName=null;lastHealthCheck=0;constructor(t){this.localUrl=t?.localUrl??Mt,this.cloudUrl=t?.cloudUrl??$t,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(),pe);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 S=R.trim();if(!S||!S.startsWith("data: "))continue;let v=S.slice(6);if(v==="[DONE]")return;try{let H=JSON.parse(v).choices[0]?.delta.content;H&&(yield H)}catch{}}}}finally{clearTimeout(c)}}async isLocalAvailable(t=!1){let n=Date.now();if(!t&&this.localAvailable!==null&&n-this.lastHealthCheck<Dt)return this.localAvailable;try{let r=new AbortController,o=setTimeout(()=>r.abort(),Nt);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 Je(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(),pe);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(),pe);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)}}};import{randomUUID as pt}from"node:crypto";function jt(e){return/^data:([^;,]+)[;,]/i.exec(e.trim())?.[1]}function Jt(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 ${jt(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:Jt(e)}import{performance as we}from"node:perf_hooks";var Xt=1;var Vt=12,Ut=128,Bt=/^xeno\.[a-z0-9]+(?:[._][a-z0-9]+)*$/u,qt=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/u,Ht=/(?:[\\/]|@|https?:|bearer|token|secret|password|credential|api[_-]?key|[0-9a-f]{8}-[0-9a-f-]{27,})/iu,zt=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"]),Xe=new Set,Ve=new Map;function Kt(e){let t=e.trim().toLowerCase();return!t||t.length>64||Ht.test(t)||!qt.test(t)?null:t}function Ft(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=Kt(t);if(!n)return null;let r=Ve.get(e);return r||(r=new Set,Ve.set(e,r)),!r.has(n)&&r.size>=Ut?"other":(r.add(n),n)}function Wt(e={}){let t={};for(let[n,r]of Object.entries(e)){if(Object.keys(t).length>=Vt)break;if(!zt.has(n))continue;let o=Ft(n,r);o!==null&&(t[n]=o)}return Object.freeze(t)}function Ue(e){if(Xe.size===0||!Bt.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:Xt,kind:e.kind,name:e.name,value:Math.min(t,Number.MAX_SAFE_INTEGER),timestamp:(e.timestamp??new Date).toISOString(),attributes:Wt(e.attributes)});for(let r of Xe)try{r(n)}catch{}}function j(e,t=1,n){Ue({kind:"counter",name:e,value:t,attributes:n})}function ge(e,t,n){Ue({kind:"histogram",name:e,value:t,attributes:n})}import{lookup as Gt}from"node:dns/promises";import{isIP as Pe}from"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 he(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 Yt(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 ye(e,t){return t.some(n=>e.includes(n))}function be(e){let t=Yt(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}):ye(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"}):ye(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||ye(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 K(e,t){return j("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 He=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 Zt(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 Be(e){let t=Zt(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 ze(e){let t=e.toLowerCase().split("%")[0];return Pe(t)===4?Be(t):t==="::"||t==="::0"?"unspecified":t==="::1"?"loopback":t.startsWith("::ffff:")?Be(t.slice(7)):/^f[cd]/.test(t)?"private":/^fe[89ab]/.test(t)?"link-local":"public"}function qe(e){return e==="example"||e.endsWith(".example")||e==="test"||e.endsWith(".test")||e==="invalid"||e.endsWith(".invalid")}function Qt(e){return e==="localhost"||e.endsWith(".localhost")}function J(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(He.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=Pe(n.hostname)?ze(n.hostname):null;if(o==="link-local"||o==="unspecified")throw _(`${o} destinations are forbidden`);if(r==="public-https"&&(o==="private"||o==="loopback"||Qt(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 F(e,t={}){let n=e.hostname.toLowerCase();if(He.has(n))throw _("cloud metadata destinations are forbidden");let r=new Set((t.allowedHosts??[]).map(s=>s.toLowerCase())),o=Pe(n)?[n]:qe(n)?[]:t.resolveHostname?await t.resolveHostname(n):(await Gt(n,{all:!0,verbatim:!0})).map(s=>s.address);if(!o.length&&!qe(n))throw _("DNS resolution returned no addresses");let i=t.profile??"public-https";for(let s of o){let a=ze(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 X={connectTimeoutMs:15e3,totalTimeoutMs:12e4,idleTimeoutMs:3e4,maxResponseBytes:8*1024*1024,maxHeaderBytes:64*1024,maxEventBytes:1024*1024};function en(e={}){return{connectTimeoutMs:Math.max(100,e.connectTimeoutMs??X.connectTimeoutMs),totalTimeoutMs:Math.max(100,e.totalTimeoutMs??X.totalTimeoutMs),idleTimeoutMs:Math.max(100,e.idleTimeoutMs??X.idleTimeoutMs),maxResponseBytes:Math.max(1024,e.maxResponseBytes??X.maxResponseBytes),maxHeaderBytes:Math.max(1024,e.maxHeaderBytes??X.maxHeaderBytes),maxEventBytes:Math.max(1024,e.maxEventBytes??X.maxEventBytes)}}function xe(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 tn(e){let t=0;return e.forEach((n,r)=>{t+=Buffer.byteLength(r)+Buffer.byteLength(n)+4}),t}async function Ke(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 Fe(e,t,n,r){let o=we.now(),i=en(n.limits);j("xeno.provider.requests",1,{component:"provider_transport",provider:n.providerId,transport:"http"}),await F(e,n.endpointPolicy);let s=new AbortController,a=null,l=t.signal,c=()=>s.abort("caller");if(l?.aborted)throw xe(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),tn(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 Ke(g,n.providerId,i,s),x=P;try{x=P?JSON.parse(P):{}}catch{}throw be({providerId:n.providerId,statusCode:g.status,body:x,retryAfterMs:he(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 j("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),ge("xeno.provider.request_duration_ms",we.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=xe(n.providerId,"cancelled",g):a||s.signal.reason==="idle-timeout"?f=xe(n.providerId,"timeout",g):f=new y("Provider transport failed",{providerId:n.providerId,category:"transport",code:"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:g}),j("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:f.category,error_code:f.code}),ge("xeno.provider.request_duration_ms",we.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 We(e,t,n){return Fe(e,t,n,async(r,o,i)=>{let s=await Ke(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 W(e,t,n,r){return Fe(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 S=c.indexOf(`
|
|
7
|
+
`);if(S<0)break;let v=c.slice(0,S).replace(/\r$/,"");if(c=c.slice(S+1),!v)await x();else if(!v.startsWith(":")){let q=v.indexOf(":"),H=q<0?v:v.slice(0,q),De=q<0?"":v.slice(q+1).replace(/^ /,"");H==="event"?d=De:H==="data"&&g.push(De)}}}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()}})}import{createHash as Tn}from"node:crypto";import{isIP as Ye}from"node:net";var re=class extends Error{issues;constructor(t){super(`Invalid JSON Schema: ${t.map(n=>`${n.path||"#"} ${n.message}`).join("; ")}`),this.name="JsonSchemaCompilationError",this.issues=t}},Re="https://json-schema.org/draft/2020-12/schema",nn=new Set(["string","number","integer","boolean","array","object","null"]),rn=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"]),et=new Map([["date",e=>ot(e)],["date-time",e=>Rn(e)],["time",e=>it(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=>Ge(e)],["idn-email",e=>Ge(e)],["hostname",e=>_e(e)],["idn-hostname",e=>_e(e)],["ipv4",e=>Ye(e)===4],["ipv6",e=>Ye(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=>Ze(e)],["iri",e=>Ze(e)],["uri-reference",e=>Qe(e)],["iri-reference",e=>Qe(e)],["uri-template",e=>Cn(e)],["json-pointer",e=>/^(?:\/(?:[^~/]|~[01])*)*$/u.test(e)],["relative-json-pointer",e=>/^(?:0|[1-9]\d*)(?:#|(?:\/(?:[^~/]|~[01])*)*)$/u.test(e)],["regex",(e,t)=>Se(e,t.maxPatternLength)!==void 0]]);function on(e={}){return{strictKeywords:e.strictKeywords??!0,assertFormats:e.assertFormats??!1,maxSchemaDepth:O(e.maxSchemaDepth,64,1,256,"maxSchemaDepth"),maxSchemaNodes:O(e.maxSchemaNodes,4096,1,1e5,"maxSchemaNodes"),maxReferences:O(e.maxReferences,512,0,1e4,"maxReferences"),maxPatternLength:O(e.maxPatternLength,256,1,4096,"maxPatternLength"),maxValidationDepth:O(e.maxValidationDepth,128,1,1024,"maxValidationDepth"),maxValidationSteps:O(e.maxValidationSteps,1e5,100,1e7,"maxValidationSteps"),maxValidationErrors:O(e.maxValidationErrors,64,1,1024,"maxValidationErrors"),maxInputBytes:O(e.maxInputBytes,16*1024*1024,1024,256*1024*1024,"maxInputBytes")}}function O(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 sn(e,t={}){let n={root:e,options:on(t),issues:[],rawByPointer:new Map,anchors:new Map,compiledByPointer:new Map,schemaNodes:0,references:0,nextNodeId:1};te(e,"",0,n);let r=$(e,"",0,n);if(n.issues.length>0||!r)throw new re(n.issues);return Object.freeze({dialect:Re,formatAssertion:n.options.assertFormats,validate(o){let i=[],s=Ce(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 I(o,r,"",0,c),{valid:i.length===0,errors:i,steps:c.budget.steps,truncated:c.budget.exhausted||i.length>=n.options.maxValidationErrors}}})}function tt(e,t={}){if(!T(e)||e.type!=="object"||!T(e.properties))throw new re([{path:"#",keyword:"type",message:"tool input schema root must declare type object and a properties object"}]);return sn(e,t)}function te(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))te(a,A(t,o,s),n+1,r)}}for(let o of["items","contains","additionalProperties","not"])e[o]!==void 0&&te(e[o],A(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)=>te(s,A(t,o,String(a)),n+1,r))}}}}}function $(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:at(t)};if(r.compiledByPointer.set(t,i),typeof e=="boolean")return i.boolean=e,i;if(an(e,t,r),ln(e,t,r),e.$schema!==void 0&&(t!==""||e.$schema!==Re&&e.$schema!==`${Re}#`)&&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=gn(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=$(a,s,n+1,r)}}if(i.types=cn(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&&V(a,c)))?u(r,t,"enum","enum values must be unique"):s.some(a=>Ce(a))?u(r,t,"enum","enum values must be JSON values"):i.enumValues=s}if(Object.prototype.hasOwnProperty.call(e,"const")&&(Ce(e.const)?u(r,t,"const","const must be a JSON value"):(i.hasConst=!0,i.constValue=e.const)),i.multipleOf=pn(e.multipleOf,t,"multipleOf",r),i.maximum=Y(e.maximum,t,"maximum",r),i.exclusiveMaximum=Y(e.exclusiveMaximum,t,"exclusiveMaximum",r),i.minimum=Y(e.minimum,t,"minimum",r),i.exclusiveMinimum=Y(e.exclusiveMinimum,t,"exclusiveMinimum",r),i.maxLength=L(e.maxLength,t,"maxLength",r),i.minLength=L(e.minLength,t,"minLength",r),i.minItems=L(e.minItems,t,"minItems",r),i.maxItems=L(e.maxItems,t,"maxItems",r),i.minContains=L(e.minContains,t,"minContains",r),i.maxContains=L(e.maxContains,t,"maxContains",r),i.minProperties=L(e.minProperties,t,"minProperties",r),i.maxProperties=L(e.maxProperties,t,"maxProperties",r),fn(i,t,r),e.pattern!==void 0)if(typeof e.pattern!="string")u(r,t,"pattern","pattern must be a string");else{let s=Se(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&&!et.has(e.format)?u(r,t,"format",`unsupported asserted format ${e.format}`):i.format=e.format),i.prefixItems=ee(e.prefixItems,t,"prefixItems",n,r,!0),i.items=Q(e.items,t,"items",n,r),i.contains=Q(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=dn(e.properties,t,"properties",n,r),i.patternProperties=un(e.patternProperties,t,n,r),i.additionalProperties=Q(e.additionalProperties,t,"additionalProperties",n,r),i.required=nt(e.required,t,"required",r,!0),i.dependentRequired=mn(e.dependentRequired,t,r),i.allOf=ee(e.allOf,t,"allOf",n,r,!1),i.anyOf=ee(e.anyOf,t,"anyOf",n,r,!1),i.oneOf=ee(e.oneOf,t,"oneOf",n,r,!1),i.not=Q(e.not,t,"not",n,r),T(e.$defs))for(let[s,a]of Object.entries(e.$defs))$(a,A(t,"$defs",s),n+1,r);return i}function an(e,t,n){if(n.options.strictKeywords)for(let r of Object.keys(e))!rn.has(r)&&!r.startsWith("x-")&&u(n,t,r,`unsupported keyword ${r}`)}function ln(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 cn(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"||!nn.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 Q(e,t,n,r,o){if(e!==void 0)return $(e,A(t,n),r+1,o)}function ee(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)=>$(s,A(t,n,String(a)),r+1,o)).filter(s=>!!s)}}function dn(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=$(a,A(t,n,s),r+1,o);l&&i.set(s,l)}return i}function un(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=Se(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=$(s,A(t,"patternProperties",i),n+1,r);l&&o.push({pattern:{source:i,regex:a},schema:l})}return o}function mn(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=nt(i,A(t,"dependentRequired",o),"dependentRequired",n,!0);s&&r.set(o,s)}return r}function nt(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 pn(e,t,n,r){let o=Y(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 Y(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 L(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 fn(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 gn(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(st).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 I(e,t,n,r,o){if(!rt(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=xn(t,e,o);if(!o.activePairs.has(i)){o.activePairs.add(i);try{if(t.ref&&I(e,t.ref,n,r+1,o),t.enumValues&&!t.enumValues.some(s=>V(s,e))&&w(o,n,"enum",t,`expected one of ${t.enumValues.map(Te).join(", ")} but got ${ve(e)}`),t.hasConst&&!V(t.constValue,e)&&w(o,n,"const",t,`expected ${Te(t.constValue)} but got ${ve(e)}`),t.types&&!t.types.some(s=>vn(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 ${ve(e)}`);return}yn(e,t,n,r,o),typeof e=="number"&&hn(e,t,n,o),typeof e=="string"&&bn(e,t,n,o),Array.isArray(e)&&Pn(e,t,n,r,o),T(e)&&wn(e,t,n,r,o)}finally{o.activePairs.delete(i)}}}function yn(e,t,n,r,o){for(let i of t.allOf??[])I(e,i,n,r+1,o);if(t.anyOf&&t.anyOf.filter(s=>ne(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=>ne(e,s,n,r+1,o)).length;i!==1&&w(o,n,"oneOf",t,`must match exactly one oneOf branch; matched ${i}`)}t.not&&ne(e,t.not,n,r+1,o)&&w(o,n,"not",t,"must not match the disallowed schema")}function hn(e,t,n,r){t.multipleOf!==void 0&&!_n(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 bn(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=et.get(t.format);i&&!i(e,r.options)&&w(r,n,"format",t,`must match format ${t.format}`)}}function Pn(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(!rt(o))break e;if(V(e[s],e[a])){w(o,k(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&&I(e[a],s,k(n,String(a)),r+1,o)}),t.items)for(let s=i;s<e.length;s+=1)I(e[s],t.items,k(n,String(s)),r+1,o);if(t.contains){let s=0;for(let l=0;l<e.length;l+=1)ne(e[l],t.contains,k(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 wn(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,k(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,k(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,I(e[s],l,k(n,s),r+1,o));for(let c of t.patternProperties??[])c.pattern.regex.test(s)&&(a=!0,I(e[s],c.schema,k(n,s),r+1,o));!a&&t.additionalProperties&&I(e[s],t.additionalProperties,k(n,s),r+1,o)}}function ne(e,t,n,r,o){let i={...o,errors:[],activePairs:new Set(o.activePairs)};return I(e,t,n,r,i),i.errors.length===0&&!i.budget.exhausted}function rt(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 xn(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}:${Te(t)}`}function vn(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 Ce(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,k(o,String(s)));if(l)return l}t.delete(r)};return n(e,"")}function Se(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 ot(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 it(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 Rn(e){let t=/^([^Tt ]+)[Tt ](.+)$/u.exec(e);return!!(t&&ot(t[1])&&it(t[2]))}function Ge(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&&_e(e.slice(t+1))}function _e(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 Ze(e){try{return!!(new URL(e).protocol&&!/\s/u.test(e))}catch{return!1}}function Qe(e){try{return new URL(e,"https://xeno.invalid/"),!/\s/u.test(e)}catch{return!1}}function Cn(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 _n(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 V(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)=>V(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)&&V(e[o],t[o]))}return!1}function k(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 A(e,...t){return`${e}/${t.map(st).join("/")}`}function st(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function at(e){return e.length===0?"#":`#${e}`}function u(e,t,n,r){e.issues.length>=64||e.issues.push({path:at(t),...n?{keyword:n}:{},message:r})}function ve(e){return e===null?"null":Array.isArray(e)?"array":typeof e=="number"?Number.isSafeInteger(e)?"integer":"number":typeof e}function Te(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}},lt=new Set(["$schema","$id","$anchor","$defs","$comment","title","default","examples","deprecated","readOnly","writeOnly"]),Sn=new Set(["type","description","enum","format","properties","required","items","minItems","maxItems","minLength","maxLength","minimum","maximum","anyOf"]);function dt(e,t){tt(e);let n=Ee(e),r=n,o=ct(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};oe(r,"",i);let s=N(r,"#",i);if(!U(s))throw new C(t,"#","provider tool root must remain an object schema");return kn(n,s,t),{schema:s,dialect:t,canonicalSha256:o,projectedSha256:ct(s),changes:i.changes}}function Ie(e,t){return e.map(n=>{let r=dt(n.input_schema,t);return{definition:{...n,input_schema:r.schema},projection:r}})}function N(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=En(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"&&!lt.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=N(o,`${t}/$ref`,n);n.activeReferences.delete(e.$ref);let l=N(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=N(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(lt.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"&&!Sn.has(o)){if(o==="const"){r.enum=[Ee(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(!U(i))throw new C(n.dialect,t,`${o} must be an object`);let s={};for(let[a,l]of Object.entries(i))s[a]=N(l,`${t}/${o}/${Ae(a)}`,n);r[o]=s;continue}if(["items","contains","additionalProperties","not"].includes(o)){r[o]=N(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)=>N(s,`${t}/${o}/${a}`,n));continue}r[o]=Ee(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 kn(e,t,n){if(t.type!=="object"||!U(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 oe(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(U(o))for(let[i,s]of Object.entries(o))oe(s,`${t}/${r}/${Ae(i)}`,n)}for(let r of["items","contains","additionalProperties","not"]){let o=e[r];(typeof o=="boolean"||U(o))&&oe(o,`${t}/${r}`,n)}for(let r of["prefixItems","allOf","anyOf","oneOf"]){let o=e[r];Array.isArray(o)&&o.forEach((i,s)=>oe(i,`${t}/${r}/${s}`,n))}}}function En(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(Ae).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 ct(e){return Tn("sha256").update(ke(e)).digest("hex")}function ke(e){return Array.isArray(e)?`[${e.map(ke).join(",")}]`:U(e)?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${ke(e[t])}`).join(",")}}`:JSON.stringify(e)}function Ee(e){return JSON.parse(JSON.stringify(e))}function Ae(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function U(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var In={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 An(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=J(e.baseURL??t,{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname});return n.pathname=n.pathname.replace(/\/$/,""),n}function ie(e,t){let n=new URL(e.toString());return n.pathname=`${n.pathname.replace(/\/$/,"")}/${t.replace(/^\//,"")}`,n}function On(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 Ln(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 K("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={...In[e.kind],streaming:!!e.streaming,reasoningMetadata:e.kind==="anthropic"&&!!e.streaming};return{...t,vision:t.imageInput}}function se(e,t){return{providerId:t,endpointPolicy:{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname},limits:e.transportLimits}}function ft(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 G(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 gt(e){return e.filter(t=>t?.type==="image_url")}function Mn(e){return e.some(t=>Array.isArray(t.content)&&t.content.some(n=>n.type==="image_url"||n.type==="tool_result"&&G(n).length>0))}function ut(e){let t=ft(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 $n(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[ut(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=G(n),o=[{type:"text",text:z(n.content)}];return o.push(...r.map(ut)),[{type:"tool_result",tool_use_id:n.tool_use_id,content:o,is_error:n.is_error}]})}))}function Nn(e){return{type:"input_image",image_url:e.image_url.url,detail:e.image_url.detail??"auto"}}function Dn(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=[...gt(n.content),...n.content.flatMap(i=>i.type==="tool_result"?G(i):[])];(r||o.length)&&t.push({role:n.role,content:[...r?[{type:"input_text",text:r}]:[],...o.map(Nn)]});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 mt(e){let t=ft(e.image_url.url);return t?{inlineData:{mimeType:t.mediaType,data:t.data}}:{fileData:{fileUri:e.image_url.url}}}function jn(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[mt(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}}},...G(r).map(mt)]})})}function Jn(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=[...gt(r.content),...r.content.flatMap(a=>a.type==="tool_result"?G(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 Xn(e){return e.map(t=>({name:t.name,description:t.description,parameters:t.input_schema}))}function ae(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 le(e,t,n){return{content:e,stopReason:t,...ae(n)}}function M(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 Vn(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:M(e,o.input??{},"tool_use")}]}return[]}),r=t.stop_reason==="tool_use"?"tool_use":t.stop_reason==="max_tokens"?"max_tokens":"end_turn";return le(n,r,t.usage??{})}function Un(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:M(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 le(n,r?"tool_use":o?"max_tokens":"end_turn",t.usage??{})}function Bn(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}-${pt().slice(0,8)}`),name:String(l.name),input:M(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 le(r,o?"tool_use":i?"max_tokens":"end_turn",t.usageMetadata??{})}function qn(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:M(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 le(o,i,t.usage??{})}async function p(e,t){try{await e?.onEvent?.(t)}catch{}}async function Hn(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 ce(){return{content:[],inputTokens:0,outputTokens:0,stopReason:"end_turn",terminal:!1}}function de(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 ue(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 zn(e){let t=ce(),n=new Map;return await W(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},se(e.config,e.providerId),async r=>{let o=ue(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=M(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"))}),de(e.providerId,t)}async function Kn(e){let t=ce(),n=new Map;return await W(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},se(e.config,e.providerId),async r=>{if(r.data==="[DONE]")return;let o=ue(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=M(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=ae(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"))}),de(e.providerId,t)}async function Fn(e){let t=ce(),n=new Map;await p(e.context,{type:"message.started"}),await W(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0,stream_options:{include_usage:!0}}),signal:e.signal},se(e.config,e.providerId),async r=>{if(r.data==="[DONE]"){t.terminal=!0;return}let o=ue(e.providerId,r);if(o.usage){let i=ae(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=M(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}),de(e.providerId,t)}async function Wn(e){let t=ce(),n=0;return await p(e.context,{type:"message.started"}),await W(e.url,{method:"POST",headers:e.headers,body:JSON.stringify(e.body),signal:e.signal},se(e.config,e.providerId),async r=>{let o=ue(e.providerId,r);if(o.usageMetadata){let s=ae(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}-${pt().slice(0,8)}`),c=String(a.name??""),m=M(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}))}),de(e.providerId,t)}function Yn(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 Gn(e){let t=`direct-${e.kind}`,n=An(e),r=Ln(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 K(t,"tools");if(Mn(a)&&!r.imageInput)throw K(t,"image input");let g=e.kind==="openai-compatible"?"openai-chat":e.kind,f=Ie(l,g).map(({definition:R})=>R),P,x={"content-type":"application/json"},b;try{if(e.kind==="anthropic"){if(P=ie(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:$n(a),tools:f.map(v=>({name:v.name,description:v.description,input_schema:v.input_schema}))},e.streaming)return await zn({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=ie(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:jn(a),tools:f.length>0?[{functionDeclarations:Xn(f)}]:void 0,generationConfig:{maxOutputTokens:e.maxTokens??8192}},e.streaming)return await Wn({providerId:t,url:P,headers:x,body:b,config:e,signal:m,onText:c,context:d})}else if(e.kind==="openai-compatible"){if(P=ie(n,e.chatCompletionsPath??"/v1/chat/completions"),x={...x,...On(e)},b={model:s,messages:Jn(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 Fn({providerId:t,url:P,headers:x,body:b,config:e,signal:m,onText:c,context:d})}else if(P=ie(n,"/v1/responses"),x={...x,authorization:`Bearer ${e.apiKey}`},b={model:s,instructions:d?.systemPrompt,input:Dn(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 Kn({providerId:t,url:P,headers:x,body:b,config:e,signal:m,onText:c,context:d});let R=await We(P,{method:"POST",headers:x,body:JSON.stringify(b),signal:m},i),S=e.kind==="anthropic"?Vn(t,R):e.kind==="google"?Bn(t,R):e.kind==="openai-compatible"?qn(t,R):Un(t,R);return await Hn(S,c,d),S}catch(R){throw R instanceof y&&R.category==="cancelled"?await p(d,{type:"provider.cancelled"}):(await p(d,Yn(R)),R instanceof y&&R.retryable&&await p(d,{type:"provider.retry",retryAfterMs:R.retryAfterMs,reason:R.category})),R}}}}function Oe(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 yt=1,D={streaming:!0,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!0,usageAccounting:!0,promptCaching:!1,modelDiscovery:!0},me={...D,reasoningMetadata:!1},Zn=[E("xeno","XENO hosted","xeno","openai-compatible","https://api.xenostudio.ai","public-https","bearer-env","XENO_API_KEY","/v1/models",D),E("openai","OpenAI","direct","openai-responses","https://api.openai.com","public-https","bearer-env","OPENAI_API_KEY","/v1/models",D),E("anthropic","Anthropic","direct","anthropic","https://api.anthropic.com","public-https","header-env","ANTHROPIC_API_KEY","/v1/models",{...D,structuredOutput:!1}),E("google","Google AI Studio","direct","google","https://generativelanguage.googleapis.com","public-https","header-env","GOOGLE_API_KEY","/v1beta/models",D),E("openrouter","OpenRouter","gateway","openai-compatible","https://openrouter.ai/api","public-https","bearer-env","OPENROUTER_API_KEY","/v1/models",me),E("xeno-rt","xeno-rt","local","openai-compatible","http://127.0.0.1:3338","local-network","none",void 0,"/v1/models",me,["running xeno-rt endpoint"]),E("ollama","Ollama","local","openai-compatible","http://127.0.0.1:11434","local-network","none",void 0,"/v1/models",me,["Ollama OpenAI compatibility endpoint"]),E("azure-openai","Azure OpenAI","cloud","openai-compatible",void 0,"public-https","header-env","AZURE_OPENAI_API_KEY",void 0,me,["resource endpoint","deployment","API version","host adapter for deployment-shaped requests"]),E("aws-bedrock","Amazon Bedrock","cloud","aws-bedrock",void 0,"public-https","cloud-chain",void 0,void 0,{...D,modelDiscovery:!1},["AWS credential chain","region","Bedrock host adapter"]),E("vertex-ai","Google Vertex AI","cloud","vertex-ai",void 0,"public-https","cloud-chain",void 0,void 0,{...D,modelDiscovery:!1},["Google application-default credentials","project","region","Vertex host adapter"])],Z=class{presets=new Map;constructor(t=Zn){for(let n of t)this.add(n)}add(t){ir(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=ht(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:sr(t),preset:r,...i?{endpoint:i}:{},...s?{secretRef:s}:{},readiness:a,blockers:o}}};async function co(e){let n=(e.catalog??new Z).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:B([...s.errors,`Credential reference ${n.secretRef??"(missing)"} did not resolve`])};if(!n.preset.discoveryPath)return{...s,readiness:"ready",errors:B(s.errors)};let a=J(n.endpoint,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts});try{await F(a,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts,resolveHostname:e.resolveHostname})}catch(d){return{...s,readiness:"blocked",errors:B([...s.errors,d instanceof Error?d.message:String(d)])}}let l=er(a,n.preset.discoveryPath),c=Qn(n.preset,o),m=Date.now();try{let d=await tr(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:B([...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:nr(b),errors:B(s.errors)}}catch(d){return{...s,readiness:"blocked",latencyMs:Date.now()-m,errors:B([...s.errors,ar(d)])}}}function uo(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)||!rr({...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 mo(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=or(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??Le(e.preset.id),prefix:e.preset.auth.prefix}}:{},...e.preset.auth.mode==="none"?{authentication:{type:"none"}}:{}}}function E(e,t,n,r,o,i,s,a,l,c,m=[]){return{schemaVersion:yt,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:Le(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 Le(e){return e==="anthropic"?"x-api-key":e==="google"?"x-goog-api-key":e==="azure-openai"?"api-key":"authorization"}function Qn(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??Le(e.id)]:`${e.auth.prefix??""}${t}`}:{accept:"application/json"}}function ht(e,t){return e?J(e.trim().replace(/\/+$/,""),{profile:t.endpointProfile,allowedHosts:t.allowedHosts}).toString().replace(/\/$/,""):void 0}function er(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 tr(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 nr(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||Oe(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 rr(e,t){return t?Object.entries(t).every(([n,r])=>r!==!0||e[n]===!0):!0}function or(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 ir(e){if(e.schemaVersion!==yt||!/^[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&&ht(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 sr(e){let t=e.id.trim();if(!t||t.length>120||Oe(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 B(e){return[...new Set(e)]}function ar(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)}import{createHash as Tt}from"node:crypto";import{chmod as hr,mkdir as St,open as br,readFile as Pr,rename as wr,unlink as xr}from"node:fs/promises";import{dirname as vr,join as Ct,resolve as Rr}from"node:path";function bt(e){return JSON.stringify(Me(e,new Set))}function Me(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=>Me(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]=Me(o,t)}return t.delete(e),n}import{mkdirSync as lr,readFileSync as cr,rmSync as wt,writeFileSync as dr}from"node:fs";import{hostname as xt}from"node:os";import{dirname as ur}from"node:path";function mr(){return new Date().toISOString()}function pr(){return new Date(Date.now()-Math.floor(process.uptime()*1e3)).toISOString()}function vt(e){try{return JSON.parse(cr(e,"utf8"))}catch{return null}}function fr(e){if(!e||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}function gr(e){return e.hostname!==xt()?!0:fr(e.pid)}function Pt(e,t){lr(ur(e),{recursive:!0}),dr(e,JSON.stringify(t,null,2)+`
|
|
10
|
+
`,{encoding:"utf8",flag:"wx"})}function yr(e,t){let n=vt(e);n?.pid!==t.pid||n.hostname!==t.hostname||wt(e,{force:!0})}function Rt(e,t,n){let r=mr(),o={schemaVersion:1,name:t,pid:process.pid,hostname:xt(),processStartedAt:pr(),version:n,acquiredAt:r,updatedAt:r};try{Pt(e,o)}catch(i){if(i.code!=="EEXIST")throw i;let a=vt(e);if(a&&gr(a))throw new Error(`${t} is already locked by PID ${a.pid} on ${a.hostname}.`);wt(e,{force:!0}),Pt(e,o)}return{record:o,release:()=>{yr(e,o)}}}var Ne=1,_t=class{directory;snapshotPath;lockPath;catalog;now;constructor(t){this.directory=Rr(t.directory),this.snapshotPath=Ct(this.directory,"providers.json"),this.lockPath=Ct(this.directory,"providers.lock"),this.catalog=t.catalog??new Z,this.now=t.now??(()=>new Date)}async upsert(t){let n=this.catalog.resolve(t).connection;return Et(n),this.mutate(r=>{let o=r.connections.filter(i=>i.id!==n.id);return o.push(n),{snapshot:$e(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:$e(n,r,n.routingPolicy,this.now()),result:!0}})}async setRoutingPolicy(t){let n=It(t);return this.mutate(r=>({snapshot:$e(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 Pr(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 St(this.directory,{recursive:!0,mode:448});let n=Rt(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 kt({schemaVersion:Ne,generation:0,updatedAt:e.toISOString(),connections:[],routingPolicy:{}})}function $e(e,t,n,r){return kt({schemaVersion:Ne,generation:e.generation+1,updatedAt:r.toISOString(),connections:[...t].sort((o,i)=>o.id.localeCompare(i.id)),routingPolicy:n})}function kt(e){return{...e,checksum:{algorithm:"sha256",value:Tt("sha256").update(At(e)).digest("hex")}}}function _r(e,t){if(e.schemaVersion!==Ne||!Array.isArray(e.connections))throw new Error("Invalid provider connection snapshot");let{checksum:n,...r}=e;if(n?.algorithm!=="sha256"||n.value!==Tt("sha256").update(At(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(Et(s),o.has(s.id))throw new Error(`Duplicate provider connection: ${s.id}`);o.add(s.id)}It(e.routingPolicy)}function Et(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 It(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 St(vr(e),{recursive:!0,mode:448});let n=`${e}.${process.pid}.${Date.now()}.tmp`,r;try{r=await br(n,"wx",384),await r.writeFile(t,"utf8"),await r.sync(),await r.close(),r=void 0,await wr(n,e),await hr(e,384).catch(()=>{})}finally{r&&await r.close().catch(()=>{}),await xr(n).catch(()=>{})}}function At(e){return bt(e)}export{Zn as BUILT_IN_XENO_PROVIDER_PRESETS,fe as DualLLMProvider,_t as FileXenoProviderConnectionStore,y as ProviderError,C as ToolSchemaProjectionError,yt as XENO_PROVIDER_CATALOG_SCHEMA_VERSION,Ne as XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION,Z as XenoProviderCatalog,F as assertDirectEndpointResolution,be as classifyProviderHttpError,Gn as createDirectProvider,mo as directProviderConfigFromConnection,he as parseRetryAfter,co as probeXenoProvider,Ie as projectToolDefinitionsForProvider,dt as projectToolSchemaForProvider,K as providerCapabilityError,h as providerProtocolError,uo as selectXenoProviderRoute,J as validateDirectEndpoint};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"inputs":{"src/config/models.ts":{"bytes":11671,"imports":[],"format":"esm"},"src/core/llm-provider.ts":{"bytes":12540,"imports":[],"format":"esm"},"src/providers/DualLLMProvider.ts":{"bytes":19754,"imports":[{"path":"src/config/models.ts","kind":"import-statement","original":"../config/models.js"},{"path":"src/core/llm-provider.ts","kind":"import-statement","original":"../core/llm-provider.js"}],"format":"esm"},"src/utils/tool-result-content.ts":{"bytes":4887,"imports":[],"format":"esm"},"src/observability/telemetry.ts":{"bytes":7495,"imports":[{"path":"node:perf_hooks","kind":"import-statement","external":true}],"format":"esm"},"src/observability/index.ts":{"bytes":33,"imports":[{"path":"src/observability/telemetry.ts","kind":"import-statement","original":"./telemetry.js"}],"format":"esm"},"src/providers/provider-errors.ts":{"bytes":6785,"imports":[{"path":"src/observability/index.ts","kind":"import-statement","original":"../observability/index.js"}],"format":"esm"},"src/providers/endpoint-policy.ts":{"bytes":5679,"imports":[{"path":"node:dns/promises","kind":"import-statement","external":true},{"path":"node:net","kind":"import-statement","external":true},{"path":"src/providers/provider-errors.ts","kind":"import-statement","original":"./provider-errors.js"}],"format":"esm"},"src/providers/bounded-provider-transport.ts":{"bytes":11504,"imports":[{"path":"node:perf_hooks","kind":"import-statement","external":true},{"path":"src/observability/index.ts","kind":"import-statement","original":"../observability/index.js"},{"path":"src/providers/endpoint-policy.ts","kind":"import-statement","original":"./endpoint-policy.js"},{"path":"src/providers/provider-errors.ts","kind":"import-statement","original":"./provider-errors.js"}],"format":"esm"},"src/utils/json-schema.ts":{"bytes":44449,"imports":[{"path":"node:net","kind":"import-statement","external":true}],"format":"esm"},"src/providers/tool-schema-projection.ts":{"bytes":12530,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/utils/json-schema.ts","kind":"import-statement","original":"../utils/json-schema.js"}],"format":"esm"},"src/providers/direct-provider.ts":{"bytes":43193,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/utils/tool-result-content.ts","kind":"import-statement","original":"../utils/tool-result-content.js"},{"path":"src/providers/bounded-provider-transport.ts","kind":"import-statement","original":"./bounded-provider-transport.js"},{"path":"src/providers/endpoint-policy.ts","kind":"import-statement","original":"./endpoint-policy.js"},{"path":"src/providers/provider-errors.ts","kind":"import-statement","original":"./provider-errors.js"},{"path":"src/providers/tool-schema-projection.ts","kind":"import-statement","original":"./tool-schema-projection.js"}],"format":"esm"},"src/utils/text-security.ts":{"bytes":833,"imports":[],"format":"esm"},"src/providers/catalog.ts":{"bytes":22681,"imports":[{"path":"src/providers/endpoint-policy.ts","kind":"import-statement","original":"./endpoint-policy.js"},{"path":"src/utils/text-security.ts","kind":"import-statement","original":"../utils/text-security.js"}],"format":"esm"},"src/artifacts/hash.ts":{"bytes":1530,"imports":[{"path":"node:crypto","kind":"import-statement","external":true}],"format":"esm"},"src/control-plane/lock.ts":{"bytes":2591,"imports":[{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:os","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true}],"format":"esm"},"src/providers/file-connection-store.ts":{"bytes":8464,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"node:fs/promises","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"src/artifacts/hash.ts","kind":"import-statement","original":"../artifacts/hash.js"},{"path":"src/control-plane/lock.ts","kind":"import-statement","original":"../control-plane/lock.js"},{"path":"src/providers/catalog.ts","kind":"import-statement","original":"./catalog.js"}],"format":"esm"},"src/providers/index.ts":{"bytes":1557,"imports":[{"path":"src/providers/DualLLMProvider.ts","kind":"import-statement","original":"./DualLLMProvider.js"},{"path":"src/providers/direct-provider.ts","kind":"import-statement","original":"./direct-provider.js"},{"path":"src/providers/provider-errors.ts","kind":"import-statement","original":"./provider-errors.js"},{"path":"src/providers/endpoint-policy.ts","kind":"import-statement","original":"./endpoint-policy.js"},{"path":"src/providers/tool-schema-projection.ts","kind":"import-statement","original":"./tool-schema-projection.js"},{"path":"src/providers/catalog.ts","kind":"import-statement","original":"./catalog.js"},{"path":"src/providers/file-connection-store.ts","kind":"import-statement","original":"./file-connection-store.js"}],"format":"esm"}},"outputs":{"dist/providers/index.cjs":{"imports":[{"path":"node:crypto","kind":"require-call","external":true},{"path":"node:perf_hooks","kind":"require-call","external":true},{"path":"node:dns/promises","kind":"require-call","external":true},{"path":"node:net","kind":"require-call","external":true},{"path":"node:crypto","kind":"require-call","external":true},{"path":"node:net","kind":"require-call","external":true},{"path":"node:crypto","kind":"require-call","external":true},{"path":"node:fs/promises","kind":"require-call","external":true},{"path":"node:path","kind":"require-call","external":true},{"path":"node:fs","kind":"require-call","external":true},{"path":"node:os","kind":"require-call","external":true},{"path":"node:path","kind":"require-call","external":true}],"exports":[],"entryPoint":"src/providers/index.ts","inputs":{"src/providers/index.ts":{"bytesInOutput":699},"src/config/models.ts":{"bytesInOutput":50},"src/core/llm-provider.ts":{"bytesInOutput":1072},"src/providers/DualLLMProvider.ts":{"bytesInOutput":5733},"src/providers/direct-provider.ts":{"bytesInOutput":21433},"src/utils/tool-result-content.ts":{"bytesInOutput":435},"src/providers/bounded-provider-transport.ts":{"bytesInOutput":5113},"src/observability/telemetry.ts":{"bytesInOutput":1599},"src/observability/index.ts":{"bytesInOutput":0},"src/providers/endpoint-policy.ts":{"bytesInOutput":2961},"src/providers/provider-errors.ts":{"bytesInOutput":3038},"src/providers/tool-schema-projection.ts":{"bytesInOutput":5704},"src/utils/json-schema.ts":{"bytesInOutput":19783},"src/utils/text-security.ts":{"bytesInOutput":180},"src/providers/catalog.ts":{"bytesInOutput":10865},"src/providers/file-connection-store.ts":{"bytesInOutput":3787},"src/artifacts/hash.ts":{"bytesInOutput":564},"src/control-plane/lock.ts":{"bytesInOutput":1067}},"bytes":85070}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"inputs":{"src/config/models.ts":{"bytes":11671,"imports":[],"format":"esm"},"src/core/llm-provider.ts":{"bytes":12540,"imports":[],"format":"esm"},"src/providers/DualLLMProvider.ts":{"bytes":19754,"imports":[{"path":"src/config/models.ts","kind":"import-statement","original":"../config/models.js"},{"path":"src/core/llm-provider.ts","kind":"import-statement","original":"../core/llm-provider.js"}],"format":"esm"},"src/utils/tool-result-content.ts":{"bytes":4887,"imports":[],"format":"esm"},"src/observability/telemetry.ts":{"bytes":7495,"imports":[{"path":"node:perf_hooks","kind":"import-statement","external":true}],"format":"esm"},"src/observability/index.ts":{"bytes":33,"imports":[{"path":"src/observability/telemetry.ts","kind":"import-statement","original":"./telemetry.js"}],"format":"esm"},"src/providers/provider-errors.ts":{"bytes":6785,"imports":[{"path":"src/observability/index.ts","kind":"import-statement","original":"../observability/index.js"}],"format":"esm"},"src/providers/endpoint-policy.ts":{"bytes":5679,"imports":[{"path":"node:dns/promises","kind":"import-statement","external":true},{"path":"node:net","kind":"import-statement","external":true},{"path":"src/providers/provider-errors.ts","kind":"import-statement","original":"./provider-errors.js"}],"format":"esm"},"src/providers/bounded-provider-transport.ts":{"bytes":11504,"imports":[{"path":"node:perf_hooks","kind":"import-statement","external":true},{"path":"src/observability/index.ts","kind":"import-statement","original":"../observability/index.js"},{"path":"src/providers/endpoint-policy.ts","kind":"import-statement","original":"./endpoint-policy.js"},{"path":"src/providers/provider-errors.ts","kind":"import-statement","original":"./provider-errors.js"}],"format":"esm"},"src/utils/json-schema.ts":{"bytes":44449,"imports":[{"path":"node:net","kind":"import-statement","external":true}],"format":"esm"},"src/providers/tool-schema-projection.ts":{"bytes":12530,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/utils/json-schema.ts","kind":"import-statement","original":"../utils/json-schema.js"}],"format":"esm"},"src/providers/direct-provider.ts":{"bytes":43193,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/utils/tool-result-content.ts","kind":"import-statement","original":"../utils/tool-result-content.js"},{"path":"src/providers/bounded-provider-transport.ts","kind":"import-statement","original":"./bounded-provider-transport.js"},{"path":"src/providers/endpoint-policy.ts","kind":"import-statement","original":"./endpoint-policy.js"},{"path":"src/providers/provider-errors.ts","kind":"import-statement","original":"./provider-errors.js"},{"path":"src/providers/tool-schema-projection.ts","kind":"import-statement","original":"./tool-schema-projection.js"}],"format":"esm"},"src/utils/text-security.ts":{"bytes":833,"imports":[],"format":"esm"},"src/providers/catalog.ts":{"bytes":22681,"imports":[{"path":"src/providers/endpoint-policy.ts","kind":"import-statement","original":"./endpoint-policy.js"},{"path":"src/utils/text-security.ts","kind":"import-statement","original":"../utils/text-security.js"}],"format":"esm"},"src/artifacts/hash.ts":{"bytes":1530,"imports":[{"path":"node:crypto","kind":"import-statement","external":true}],"format":"esm"},"src/control-plane/lock.ts":{"bytes":2591,"imports":[{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:os","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true}],"format":"esm"},"src/providers/file-connection-store.ts":{"bytes":8464,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"node:fs/promises","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"src/artifacts/hash.ts","kind":"import-statement","original":"../artifacts/hash.js"},{"path":"src/control-plane/lock.ts","kind":"import-statement","original":"../control-plane/lock.js"},{"path":"src/providers/catalog.ts","kind":"import-statement","original":"./catalog.js"}],"format":"esm"},"src/providers/index.ts":{"bytes":1557,"imports":[{"path":"src/providers/DualLLMProvider.ts","kind":"import-statement","original":"./DualLLMProvider.js"},{"path":"src/providers/direct-provider.ts","kind":"import-statement","original":"./direct-provider.js"},{"path":"src/providers/provider-errors.ts","kind":"import-statement","original":"./provider-errors.js"},{"path":"src/providers/endpoint-policy.ts","kind":"import-statement","original":"./endpoint-policy.js"},{"path":"src/providers/tool-schema-projection.ts","kind":"import-statement","original":"./tool-schema-projection.js"},{"path":"src/providers/catalog.ts","kind":"import-statement","original":"./catalog.js"},{"path":"src/providers/file-connection-store.ts","kind":"import-statement","original":"./file-connection-store.js"}],"format":"esm"}},"outputs":{"dist/providers/index.js":{"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"node:perf_hooks","kind":"import-statement","external":true},{"path":"node:dns/promises","kind":"import-statement","external":true},{"path":"node:net","kind":"import-statement","external":true},{"path":"node:crypto","kind":"import-statement","external":true},{"path":"node:net","kind":"import-statement","external":true},{"path":"node:crypto","kind":"import-statement","external":true},{"path":"node:fs/promises","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:os","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true}],"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"],"entryPoint":"src/providers/index.ts","inputs":{"src/config/models.ts":{"bytesInOutput":50},"src/core/llm-provider.ts":{"bytesInOutput":1072},"src/providers/DualLLMProvider.ts":{"bytesInOutput":5733},"src/providers/index.ts":{"bytesInOutput":0},"src/providers/direct-provider.ts":{"bytesInOutput":21409},"src/utils/tool-result-content.ts":{"bytesInOutput":435},"src/providers/bounded-provider-transport.ts":{"bytesInOutput":5090},"src/observability/telemetry.ts":{"bytesInOutput":1599},"src/observability/index.ts":{"bytesInOutput":0},"src/providers/endpoint-policy.ts":{"bytesInOutput":2943},"src/providers/provider-errors.ts":{"bytesInOutput":3038},"src/providers/tool-schema-projection.ts":{"bytesInOutput":5702},"src/utils/json-schema.ts":{"bytesInOutput":19764},"src/utils/text-security.ts":{"bytesInOutput":180},"src/providers/catalog.ts":{"bytesInOutput":10865},"src/providers/file-connection-store.ts":{"bytesInOutput":3786},"src/artifacts/hash.ts":{"bytesInOutput":564},"src/control-plane/lock.ts":{"bytesInOutput":1054}},"bytes":83931}}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var I=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var C=(e,t)=>{for(var i in t)I(e,i,{get:t[i],enumerable:!0})},$=(e,t,i,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of x(t))!T.call(e,o)&&o!==i&&I(e,o,{get:()=>t[o],enumerable:!(r=k(t,o))||r.enumerable});return e};var N=e=>$(I({},"__esModule",{value:!0}),e);var Y={};C(Y,{XENO_RECIPE_SCHEMA_VERSION:()=>S,XenoRecipeValidationError:()=>d,assertValidXenoRecipeDefinition:()=>y,compileXenoRecipe:()=>O,parseXenoRecipeDefinition:()=>D,serializeXenoRecipe:()=>F,xenoRecipeFingerprint:()=>_});module.exports=N(Y);var b=require("node:crypto");function m(e){return{algorithm:"sha256",value:(0,b.createHash)("sha256").update(e).digest("hex")}}function p(e){return JSON.stringify(w(e,new Set))}function h(e){return m(p(e))}function w(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=>w(o,t));return t.delete(e),r}let i={};for(let r of Object.keys(e).sort((o,a)=>o.localeCompare(a))){let o=e[r];if(o===void 0)throw new TypeError(`Artifact JSON property ${r} is undefined`);i[r]=w(o,t)}return t.delete(e),i}var P="[\\u0000-\\u001f\\u007f]",re=new RegExp(P);var Se=64*1024*1024;var Ce=16*1024*1024;function X(e,t={}){for(let i of e){let r=i.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 S="xeno.recipe.v1",d=class extends Error{constructor(i){super(`XENO recipe is invalid: ${i.join("; ")}`);this.issues=i;this.name="XenoRecipeValidationError"}issues;code="XENO_RECIPE_INVALID"};function D(e){let t=l(e,"recipe",["schemaVersion","recipeId","name","description","version","modes","inputs","requiredSecretRefs","authority","budget","steps","provenance"]),i=l(t.authority,"authority",["permissionMode","externalActions","network"]),r=l(t.budget,"budget",["maxAgents","maxConcurrency","maxTotalTokens","timeoutMs"]),o={schemaVersion:t.schemaVersion,recipeId:c(t.recipeId,"recipeId"),name:c(t.name,"name"),description:c(t.description,"description"),version:g(t.version,"version"),modes:u(t.modes,"modes").map(a=>a),inputs:u(t.inputs,"inputs").map((a,n)=>L(a,n)),requiredSecretRefs:u(t.requiredSecretRefs,"requiredSecretRefs").map(a=>c(a,"secret ref")),authority:{permissionMode:i.permissionMode,externalActions:i.externalActions,network:i.network},budget:{maxAgents:g(r.maxAgents,"budget.maxAgents"),maxConcurrency:g(r.maxConcurrency,"budget.maxConcurrency"),maxTotalTokens:g(r.maxTotalTokens,"budget.maxTotalTokens"),timeoutMs:g(r.timeoutMs,"budget.timeoutMs")},steps:u(t.steps,"steps").map((a,n)=>M(a,n)),...t.provenance!==void 0?{provenance:H(t.provenance)}:{}};return y(o),o}function y(e){let t=[];e?.schemaVersion!==S&&t.push("schemaVersion must be xeno.recipe.v1"),A(e?.recipeId,"recipeId",t),f(e?.name,"name",t,256),f(e?.description,"description",t,8e3),(!Number.isSafeInteger(e?.version)||e.version<1||e.version>1e6)&&t.push("version must be a positive bounded integer"),(!Array.isArray(e?.modes)||e.modes.length<1)&&t.push("modes must contain at least one execution mode");let i=new Set;for(let n of e?.modes??[])n!=="interactive"&&n!=="headless"&&n!=="ci"&&t.push(`unsupported recipe mode ${String(n)}`),i.has(n)&&t.push(`duplicate recipe mode ${n}`),i.add(n);Z(e?.authority?.permissionMode)||t.push("authority.permissionMode is invalid"),e?.authority?.externalActions!=="deny"&&e?.authority?.externalActions!=="approval-required"&&t.push("authority.externalActions is invalid"),e?.authority?.network!=="deny"&&e?.authority?.network!=="environment-policy"&&t.push("authority.network is invalid"),q(e?.budget,t);let r=new Set;for(let n of e?.inputs??[]){if(G(n?.name,t),r.has(n.name)&&t.push(`duplicate input ${n.name}`),r.add(n.name),f(n?.description,`input ${n.name} description`,t,2e3),typeof n?.required!="boolean"&&t.push(`input ${n.name} required must be boolean`),n?.default!==void 0&&f(n.default,`input ${n.name} default`,t,32e3),n?.required&&n?.default!==void 0&&t.push(`required input ${n.name} cannot define a default`),n?.enum!==void 0){(!Array.isArray(n.enum)||n.enum.length<1||n.enum.length>256)&&t.push(`input ${n.name} enum is invalid`);for(let s of n.enum??[])f(s,`input ${n.name} enum value`,t,2e3);n.default!==void 0&&!n.enum.includes(n.default)&&t.push(`input ${n.name} default is outside its enum`)}if(n?.pattern!==void 0){f(n.pattern,`input ${n.name} pattern`,t,1e3);try{new RegExp(n.pattern,"u")}catch{t.push(`input ${n.name} pattern is invalid`)}}}let o=new Set;for(let n of e?.requiredSecretRefs??[])/^[A-Z_][A-Z0-9_]{0,127}$/u.test(n)||t.push(`required secret ref ${n} is invalid`),o.has(n)&&t.push(`duplicate secret ref ${n}`),o.add(n);(!Array.isArray(e?.steps)||e.steps.length<1||e.steps.length>256)&&t.push("steps must contain 1 through 256 records"),Array.isArray(e?.steps)&&e.steps.length>(e?.budget?.maxAgents??0)&&t.push("budget.maxAgents must cover every recipe step");let a=new Map;for(let n of e?.steps??[]){A(n?.id,"step id",t),a.has(n.id)&&t.push(`duplicate step ${n.id}`),a.set(n.id,n),f(n?.title,`step ${n.id} title`,t,2e3),n?.kind!=="agent"&&n?.kind!=="verification"&&t.push(`step ${n.id} kind is invalid`),f(n?.prompt,`step ${n.id} prompt`,t,128e3),n?.agentProfile!==void 0&&A(n.agentProfile,`step ${n.id} agentProfile`,t);for(let s of n?.dependsOn??[])A(s,`step ${n.id} dependency`,t);n?.approval&&f(n.approval.message,`step ${n.id} approval message`,t,8e3);for(let s of n?.expectedArtifacts??[])K(s,`step ${n.id} expected artifact`,t);for(let s of U(n?.prompt??""))r.has(s)||t.push(`step ${n.id} references unknown input ${s}`);/\{\{\s*(?:secret|env)[.:]/iu.test(n?.prompt??"")&&t.push(`step ${n.id} cannot interpolate secrets into prompts`)}for(let n of e?.steps??[])for(let s of n.dependsOn??[])a.has(s)||t.push(`step ${n.id} depends on unknown step ${s}`),s===n.id&&t.push(`step ${n.id} cannot depend on itself`);if(j(e?.steps??[],t),t.length>0)throw new d([...new Set(t)])}function O(e,t){if(y(e),!e.modes.includes(t.mode))throw new d([`recipe does not allow ${t.mode} mode`]);let i=t.inputs??{},r=new Map(e.inputs.map(s=>[s.name,s])),o=Object.keys(i).filter(s=>!r.has(s));if(o.length>0)throw new d(o.map(s=>`unknown recipe input ${s}`));let a={};for(let s of e.inputs){let E=i[s.name]??s.default;if(E===void 0){if(s.required)throw new d([`required recipe input ${s.name} is missing`]);a[s.name]="";continue}a[s.name]=B(s,E)}let n=e.requiredSecretRefs.filter(s=>t.hasSecretRef&&!t.hasSecretRef(s));if(n.length>0)throw new d(n.map(s=>`required secret reference is unavailable: ${s}`));return{schemaVersion:1,recipeId:e.recipeId,recipeVersion:e.version,recipeFingerprint:_(e),mode:t.mode,inputs:a,requiredSecretRefs:[...e.requiredSecretRefs],authority:structuredClone(e.authority),budget:structuredClone(e.budget),steps:J(e.steps).map(s=>({...structuredClone(s),prompt:z(s.prompt,a)}))}}function _(e){return y(e),{algorithm:"sha256",value:h(e).value}}function F(e){return y(e),`${p(e)}
|
|
2
|
+
`}function L(e,t){let i=l(e,`inputs[${t}]`,["name","description","required","default","enum","pattern"]);return{name:c(i.name,`inputs[${t}].name`),description:c(i.description,`inputs[${t}].description`),required:W(i.required,`inputs[${t}].required`),...i.default!==void 0?{default:c(i.default,`inputs[${t}].default`)}:{},...i.enum!==void 0?{enum:u(i.enum,`inputs[${t}].enum`).map(r=>c(r,"enum value"))}:{},...i.pattern!==void 0?{pattern:c(i.pattern,`inputs[${t}].pattern`)}:{}}}function M(e,t){let i=l(e,`steps[${t}]`,["id","title","kind","prompt","dependsOn","agentProfile","approval","expectedArtifacts"]),r=i.approval===void 0?void 0:l(i.approval,`steps[${t}].approval`,["message"]);return{id:c(i.id,`steps[${t}].id`),title:c(i.title,`steps[${t}].title`),kind:i.kind,prompt:c(i.prompt,`steps[${t}].prompt`),...i.dependsOn!==void 0?{dependsOn:u(i.dependsOn,"dependsOn").map(o=>c(o,"dependency"))}:{},...i.agentProfile!==void 0?{agentProfile:c(i.agentProfile,"agentProfile")}:{},...r?{approval:{message:c(r.message,"approval message")}}:{},...i.expectedArtifacts!==void 0?{expectedArtifacts:u(i.expectedArtifacts,"expectedArtifacts").map(o=>c(o,"expected artifact"))}:{}}}function H(e){let t=l(e,"provenance",["publisherId","source","revision"]);return{publisherId:c(t.publisherId,"provenance.publisherId"),...t.source!==void 0?{source:c(t.source,"provenance.source")}:{},...t.revision!==void 0?{revision:c(t.revision,"provenance.revision")}:{}}}function q(e,t){(!Number.isSafeInteger(e?.maxAgents)||e.maxAgents<1||e.maxAgents>256)&&t.push("budget.maxAgents is invalid"),(!Number.isSafeInteger(e?.maxConcurrency)||e.maxConcurrency<1||e.maxConcurrency>64)&&t.push("budget.maxConcurrency is invalid"),e?.maxConcurrency>e?.maxAgents&&t.push("budget.maxConcurrency cannot exceed maxAgents"),(!Number.isSafeInteger(e?.maxTotalTokens)||e.maxTotalTokens<1||e.maxTotalTokens>1e8)&&t.push("budget.maxTotalTokens is invalid"),(!Number.isSafeInteger(e?.timeoutMs)||e.timeoutMs<1e3||e.timeoutMs>10080*60*1e3)&&t.push("budget.timeoutMs is invalid")}function j(e,t){let i=new Map(e.map(n=>[n.id,n])),r=new Set,o=new Set,a=n=>{if(!(o.has(n)||!i.has(n))){if(r.has(n)){t.push(`recipe step dependency cycle includes ${n}`);return}r.add(n);for(let s of i.get(n)?.dependsOn??[])a(s);r.delete(n),o.add(n)}};for(let n of e)a(n.id)}function J(e){let t=new Map(e.map(o=>[o.id,o])),i=new Map(e.map((o,a)=>[o.id,{step:o,index:a,dependencies:new Set(o.dependsOn??[])}])),r=[];for(;i.size>0;){let o=[...i.values()].filter(({dependencies:a})=>[...a].every(n=>!i.has(n))).sort((a,n)=>a.index-n.index);if(o.length===0)throw new d(["recipe step dependency graph is cyclic"]);for(let a of o)r.push(t.get(a.step.id)),i.delete(a.step.id)}return r}function B(e,t){let i=t.trim();if(i.length>32e3||X(i,{allowTab:!0,allowLineBreaks:!0}))throw new d([`input ${e.name} is invalid`]);if(e.enum&&!e.enum.includes(i))throw new d([`input ${e.name} is outside its enum`]);if(e.pattern&&!new RegExp(e.pattern,"u").test(i))throw new d([`input ${e.name} does not match its pattern`]);return i}function z(e,t){return e.replace(/\{\{\s*input\.([A-Za-z_][A-Za-z0-9_-]*)\s*\}\}/gu,(i,r)=>t[r]??"")}function U(e){return[...e.matchAll(/\{\{\s*input\.([A-Za-z_][A-Za-z0-9_-]*)\s*\}\}/gu)].map(t=>t[1])}function l(e,t,i){if(!e||typeof e!="object"||Array.isArray(e))throw new d([`${t} must be an object`]);let r=e,o=Object.keys(r).filter(a=>!i.includes(a));if(o.length>0)throw new d(o.map(a=>`${t} contains unsupported field ${a}`));return r}function u(e,t){if(!Array.isArray(e))throw new d([`${t} must be an array`]);return e}function c(e,t){if(typeof e!="string")throw new d([`${t} must be text`]);return e}function W(e,t){if(typeof e!="boolean")throw new d([`${t} must be boolean`]);return e}function g(e,t){if(!Number.isSafeInteger(e))throw new d([`${t} must be an integer`]);return e}function A(e,t,i){(typeof e!="string"||!/^[A-Za-z0-9][A-Za-z0-9._:@/-]{0,255}$/u.test(e))&&i.push(`${t} is invalid`)}function G(e,t){(typeof e!="string"||!/^[A-Za-z_][A-Za-z0-9_-]{0,127}$/u.test(e))&&t.push(`input name ${String(e)} is invalid`)}function f(e,t,i,r){(typeof e!="string"||!e.trim()||e.length>r||X(e,{allowTab:!0,allowLineBreaks:!0}))&&i.push(`${t} must be non-empty bounded text`)}function K(e,t,i){(typeof e!="string"||!e||e.startsWith("/")||/^[A-Za-z]:[\\/]/u.test(e)||e.includes("\\")||e.split("/").some(r=>!r||r==="."||r===".."))&&i.push(`${t} must be workflow-relative`)}function Z(e){return e==="default"||e==="plan"||e==="acceptEdits"||e==="auto"||e==="dontAsk"}0&&(module.exports={XENO_RECIPE_SCHEMA_VERSION,XenoRecipeValidationError,assertValidXenoRecipeDefinition,compileXenoRecipe,parseXenoRecipeDefinition,serializeXenoRecipe,xenoRecipeFingerprint});
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
declare const XENO_RECIPE_SCHEMA_VERSION: "xeno.recipe.v1";
|
|
2
|
+
type XenoRecipeMode = "interactive" | "headless" | "ci";
|
|
3
|
+
type XenoRecipePermissionMode = "default" | "plan" | "acceptEdits" | "auto" | "dontAsk";
|
|
4
|
+
interface XenoRecipeInputDefinition {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
required: boolean;
|
|
8
|
+
default?: string;
|
|
9
|
+
enum?: string[];
|
|
10
|
+
pattern?: string;
|
|
11
|
+
}
|
|
12
|
+
interface XenoRecipeStepDefinition {
|
|
13
|
+
id: string;
|
|
14
|
+
title: string;
|
|
15
|
+
kind: "agent" | "verification";
|
|
16
|
+
prompt: string;
|
|
17
|
+
dependsOn?: string[];
|
|
18
|
+
agentProfile?: string;
|
|
19
|
+
approval?: {
|
|
20
|
+
message: string;
|
|
21
|
+
};
|
|
22
|
+
expectedArtifacts?: string[];
|
|
23
|
+
}
|
|
24
|
+
interface XenoRecipeDefinition {
|
|
25
|
+
schemaVersion: typeof XENO_RECIPE_SCHEMA_VERSION;
|
|
26
|
+
recipeId: string;
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
version: number;
|
|
30
|
+
modes: XenoRecipeMode[];
|
|
31
|
+
inputs: XenoRecipeInputDefinition[];
|
|
32
|
+
requiredSecretRefs: string[];
|
|
33
|
+
authority: {
|
|
34
|
+
permissionMode: XenoRecipePermissionMode;
|
|
35
|
+
externalActions: "deny" | "approval-required";
|
|
36
|
+
network: "deny" | "environment-policy";
|
|
37
|
+
};
|
|
38
|
+
budget: {
|
|
39
|
+
maxAgents: number;
|
|
40
|
+
maxConcurrency: number;
|
|
41
|
+
maxTotalTokens: number;
|
|
42
|
+
timeoutMs: number;
|
|
43
|
+
};
|
|
44
|
+
steps: XenoRecipeStepDefinition[];
|
|
45
|
+
provenance?: {
|
|
46
|
+
publisherId: string;
|
|
47
|
+
source?: string;
|
|
48
|
+
revision?: string;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
interface XenoCompiledRecipeStep extends XenoRecipeStepDefinition {
|
|
52
|
+
prompt: string;
|
|
53
|
+
}
|
|
54
|
+
interface XenoCompiledRecipe {
|
|
55
|
+
schemaVersion: 1;
|
|
56
|
+
recipeId: string;
|
|
57
|
+
recipeVersion: number;
|
|
58
|
+
recipeFingerprint: {
|
|
59
|
+
algorithm: "sha256";
|
|
60
|
+
value: string;
|
|
61
|
+
};
|
|
62
|
+
mode: XenoRecipeMode;
|
|
63
|
+
inputs: Record<string, string>;
|
|
64
|
+
requiredSecretRefs: string[];
|
|
65
|
+
authority: XenoRecipeDefinition["authority"];
|
|
66
|
+
budget: XenoRecipeDefinition["budget"];
|
|
67
|
+
steps: XenoCompiledRecipeStep[];
|
|
68
|
+
}
|
|
69
|
+
declare class XenoRecipeValidationError extends Error {
|
|
70
|
+
readonly issues: string[];
|
|
71
|
+
readonly code = "XENO_RECIPE_INVALID";
|
|
72
|
+
constructor(issues: string[]);
|
|
73
|
+
}
|
|
74
|
+
declare function parseXenoRecipeDefinition(value: unknown): XenoRecipeDefinition;
|
|
75
|
+
declare function assertValidXenoRecipeDefinition(recipe: XenoRecipeDefinition): void;
|
|
76
|
+
declare function compileXenoRecipe(recipe: XenoRecipeDefinition, options: {
|
|
77
|
+
mode: XenoRecipeMode;
|
|
78
|
+
inputs?: Record<string, string>;
|
|
79
|
+
hasSecretRef?: (reference: string) => boolean;
|
|
80
|
+
}): XenoCompiledRecipe;
|
|
81
|
+
declare function xenoRecipeFingerprint(recipe: XenoRecipeDefinition): {
|
|
82
|
+
algorithm: "sha256";
|
|
83
|
+
value: string;
|
|
84
|
+
};
|
|
85
|
+
declare function serializeXenoRecipe(recipe: XenoRecipeDefinition): string;
|
|
86
|
+
export { XENO_RECIPE_SCHEMA_VERSION, type XenoCompiledRecipe, type XenoCompiledRecipeStep, type XenoRecipeDefinition, type XenoRecipeInputDefinition, type XenoRecipeMode, type XenoRecipePermissionMode, type XenoRecipeStepDefinition, XenoRecipeValidationError, assertValidXenoRecipeDefinition, compileXenoRecipe, parseXenoRecipeDefinition, serializeXenoRecipe, xenoRecipeFingerprint };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
declare const XENO_RECIPE_SCHEMA_VERSION: "xeno.recipe.v1";
|
|
2
|
+
type XenoRecipeMode = "interactive" | "headless" | "ci";
|
|
3
|
+
type XenoRecipePermissionMode = "default" | "plan" | "acceptEdits" | "auto" | "dontAsk";
|
|
4
|
+
interface XenoRecipeInputDefinition {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
required: boolean;
|
|
8
|
+
default?: string;
|
|
9
|
+
enum?: string[];
|
|
10
|
+
pattern?: string;
|
|
11
|
+
}
|
|
12
|
+
interface XenoRecipeStepDefinition {
|
|
13
|
+
id: string;
|
|
14
|
+
title: string;
|
|
15
|
+
kind: "agent" | "verification";
|
|
16
|
+
prompt: string;
|
|
17
|
+
dependsOn?: string[];
|
|
18
|
+
agentProfile?: string;
|
|
19
|
+
approval?: {
|
|
20
|
+
message: string;
|
|
21
|
+
};
|
|
22
|
+
expectedArtifacts?: string[];
|
|
23
|
+
}
|
|
24
|
+
interface XenoRecipeDefinition {
|
|
25
|
+
schemaVersion: typeof XENO_RECIPE_SCHEMA_VERSION;
|
|
26
|
+
recipeId: string;
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
version: number;
|
|
30
|
+
modes: XenoRecipeMode[];
|
|
31
|
+
inputs: XenoRecipeInputDefinition[];
|
|
32
|
+
requiredSecretRefs: string[];
|
|
33
|
+
authority: {
|
|
34
|
+
permissionMode: XenoRecipePermissionMode;
|
|
35
|
+
externalActions: "deny" | "approval-required";
|
|
36
|
+
network: "deny" | "environment-policy";
|
|
37
|
+
};
|
|
38
|
+
budget: {
|
|
39
|
+
maxAgents: number;
|
|
40
|
+
maxConcurrency: number;
|
|
41
|
+
maxTotalTokens: number;
|
|
42
|
+
timeoutMs: number;
|
|
43
|
+
};
|
|
44
|
+
steps: XenoRecipeStepDefinition[];
|
|
45
|
+
provenance?: {
|
|
46
|
+
publisherId: string;
|
|
47
|
+
source?: string;
|
|
48
|
+
revision?: string;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
interface XenoCompiledRecipeStep extends XenoRecipeStepDefinition {
|
|
52
|
+
prompt: string;
|
|
53
|
+
}
|
|
54
|
+
interface XenoCompiledRecipe {
|
|
55
|
+
schemaVersion: 1;
|
|
56
|
+
recipeId: string;
|
|
57
|
+
recipeVersion: number;
|
|
58
|
+
recipeFingerprint: {
|
|
59
|
+
algorithm: "sha256";
|
|
60
|
+
value: string;
|
|
61
|
+
};
|
|
62
|
+
mode: XenoRecipeMode;
|
|
63
|
+
inputs: Record<string, string>;
|
|
64
|
+
requiredSecretRefs: string[];
|
|
65
|
+
authority: XenoRecipeDefinition["authority"];
|
|
66
|
+
budget: XenoRecipeDefinition["budget"];
|
|
67
|
+
steps: XenoCompiledRecipeStep[];
|
|
68
|
+
}
|
|
69
|
+
declare class XenoRecipeValidationError extends Error {
|
|
70
|
+
readonly issues: string[];
|
|
71
|
+
readonly code = "XENO_RECIPE_INVALID";
|
|
72
|
+
constructor(issues: string[]);
|
|
73
|
+
}
|
|
74
|
+
declare function parseXenoRecipeDefinition(value: unknown): XenoRecipeDefinition;
|
|
75
|
+
declare function assertValidXenoRecipeDefinition(recipe: XenoRecipeDefinition): void;
|
|
76
|
+
declare function compileXenoRecipe(recipe: XenoRecipeDefinition, options: {
|
|
77
|
+
mode: XenoRecipeMode;
|
|
78
|
+
inputs?: Record<string, string>;
|
|
79
|
+
hasSecretRef?: (reference: string) => boolean;
|
|
80
|
+
}): XenoCompiledRecipe;
|
|
81
|
+
declare function xenoRecipeFingerprint(recipe: XenoRecipeDefinition): {
|
|
82
|
+
algorithm: "sha256";
|
|
83
|
+
value: string;
|
|
84
|
+
};
|
|
85
|
+
declare function serializeXenoRecipe(recipe: XenoRecipeDefinition): string;
|
|
86
|
+
export { XENO_RECIPE_SCHEMA_VERSION, type XenoCompiledRecipe, type XenoCompiledRecipeStep, type XenoRecipeDefinition, type XenoRecipeInputDefinition, type XenoRecipeMode, type XenoRecipePermissionMode, type XenoRecipeStepDefinition, XenoRecipeValidationError, assertValidXenoRecipeDefinition, compileXenoRecipe, parseXenoRecipeDefinition, serializeXenoRecipe, xenoRecipeFingerprint };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createHash as E}from"node:crypto";function m(e){return{algorithm:"sha256",value:E("sha256").update(e).digest("hex")}}function p(e){return JSON.stringify(I(e,new Set))}function h(e){return m(p(e))}function I(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(s=>I(s,t));return t.delete(e),r}let i={};for(let r of Object.keys(e).sort((s,a)=>s.localeCompare(a))){let s=e[r];if(s===void 0)throw new TypeError(`Artifact JSON property ${r} is undefined`);i[r]=I(s,t)}return t.delete(e),i}var b="[\\u0000-\\u001f\\u007f]",U=new RegExp(b);var he=64*1024*1024;var Ie=16*1024*1024;function R(e,t={}){for(let i of e){let r=i.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 _="xeno.recipe.v1",d=class extends Error{constructor(i){super(`XENO recipe is invalid: ${i.join("; ")}`);this.issues=i;this.name="XenoRecipeValidationError"}issues;code="XENO_RECIPE_INVALID"};function nt(e){let t=l(e,"recipe",["schemaVersion","recipeId","name","description","version","modes","inputs","requiredSecretRefs","authority","budget","steps","provenance"]),i=l(t.authority,"authority",["permissionMode","externalActions","network"]),r=l(t.budget,"budget",["maxAgents","maxConcurrency","maxTotalTokens","timeoutMs"]),s={schemaVersion:t.schemaVersion,recipeId:c(t.recipeId,"recipeId"),name:c(t.name,"name"),description:c(t.description,"description"),version:g(t.version,"version"),modes:u(t.modes,"modes").map(a=>a),inputs:u(t.inputs,"inputs").map((a,n)=>x(a,n)),requiredSecretRefs:u(t.requiredSecretRefs,"requiredSecretRefs").map(a=>c(a,"secret ref")),authority:{permissionMode:i.permissionMode,externalActions:i.externalActions,network:i.network},budget:{maxAgents:g(r.maxAgents,"budget.maxAgents"),maxConcurrency:g(r.maxConcurrency,"budget.maxConcurrency"),maxTotalTokens:g(r.maxTotalTokens,"budget.maxTotalTokens"),timeoutMs:g(r.timeoutMs,"budget.timeoutMs")},steps:u(t.steps,"steps").map((a,n)=>T(a,n)),...t.provenance!==void 0?{provenance:C(t.provenance)}:{}};return A(s),s}function A(e){let t=[];e?.schemaVersion!==_&&t.push("schemaVersion must be xeno.recipe.v1"),y(e?.recipeId,"recipeId",t),f(e?.name,"name",t,256),f(e?.description,"description",t,8e3),(!Number.isSafeInteger(e?.version)||e.version<1||e.version>1e6)&&t.push("version must be a positive bounded integer"),(!Array.isArray(e?.modes)||e.modes.length<1)&&t.push("modes must contain at least one execution mode");let i=new Set;for(let n of e?.modes??[])n!=="interactive"&&n!=="headless"&&n!=="ci"&&t.push(`unsupported recipe mode ${String(n)}`),i.has(n)&&t.push(`duplicate recipe mode ${n}`),i.add(n);H(e?.authority?.permissionMode)||t.push("authority.permissionMode is invalid"),e?.authority?.externalActions!=="deny"&&e?.authority?.externalActions!=="approval-required"&&t.push("authority.externalActions is invalid"),e?.authority?.network!=="deny"&&e?.authority?.network!=="environment-policy"&&t.push("authority.network is invalid"),$(e?.budget,t);let r=new Set;for(let n of e?.inputs??[]){if(L(n?.name,t),r.has(n.name)&&t.push(`duplicate input ${n.name}`),r.add(n.name),f(n?.description,`input ${n.name} description`,t,2e3),typeof n?.required!="boolean"&&t.push(`input ${n.name} required must be boolean`),n?.default!==void 0&&f(n.default,`input ${n.name} default`,t,32e3),n?.required&&n?.default!==void 0&&t.push(`required input ${n.name} cannot define a default`),n?.enum!==void 0){(!Array.isArray(n.enum)||n.enum.length<1||n.enum.length>256)&&t.push(`input ${n.name} enum is invalid`);for(let o of n.enum??[])f(o,`input ${n.name} enum value`,t,2e3);n.default!==void 0&&!n.enum.includes(n.default)&&t.push(`input ${n.name} default is outside its enum`)}if(n?.pattern!==void 0){f(n.pattern,`input ${n.name} pattern`,t,1e3);try{new RegExp(n.pattern,"u")}catch{t.push(`input ${n.name} pattern is invalid`)}}}let s=new Set;for(let n of e?.requiredSecretRefs??[])/^[A-Z_][A-Z0-9_]{0,127}$/u.test(n)||t.push(`required secret ref ${n} is invalid`),s.has(n)&&t.push(`duplicate secret ref ${n}`),s.add(n);(!Array.isArray(e?.steps)||e.steps.length<1||e.steps.length>256)&&t.push("steps must contain 1 through 256 records"),Array.isArray(e?.steps)&&e.steps.length>(e?.budget?.maxAgents??0)&&t.push("budget.maxAgents must cover every recipe step");let a=new Map;for(let n of e?.steps??[]){y(n?.id,"step id",t),a.has(n.id)&&t.push(`duplicate step ${n.id}`),a.set(n.id,n),f(n?.title,`step ${n.id} title`,t,2e3),n?.kind!=="agent"&&n?.kind!=="verification"&&t.push(`step ${n.id} kind is invalid`),f(n?.prompt,`step ${n.id} prompt`,t,128e3),n?.agentProfile!==void 0&&y(n.agentProfile,`step ${n.id} agentProfile`,t);for(let o of n?.dependsOn??[])y(o,`step ${n.id} dependency`,t);n?.approval&&f(n.approval.message,`step ${n.id} approval message`,t,8e3);for(let o of n?.expectedArtifacts??[])M(o,`step ${n.id} expected artifact`,t);for(let o of O(n?.prompt??""))r.has(o)||t.push(`step ${n.id} references unknown input ${o}`);/\{\{\s*(?:secret|env)[.:]/iu.test(n?.prompt??"")&&t.push(`step ${n.id} cannot interpolate secrets into prompts`)}for(let n of e?.steps??[])for(let o of n.dependsOn??[])a.has(o)||t.push(`step ${n.id} depends on unknown step ${o}`),o===n.id&&t.push(`step ${n.id} cannot depend on itself`);if(N(e?.steps??[],t),t.length>0)throw new d([...new Set(t)])}function it(e,t){if(A(e),!e.modes.includes(t.mode))throw new d([`recipe does not allow ${t.mode} mode`]);let i=t.inputs??{},r=new Map(e.inputs.map(o=>[o.name,o])),s=Object.keys(i).filter(o=>!r.has(o));if(s.length>0)throw new d(s.map(o=>`unknown recipe input ${o}`));let a={};for(let o of e.inputs){let X=i[o.name]??o.default;if(X===void 0){if(o.required)throw new d([`required recipe input ${o.name} is missing`]);a[o.name]="";continue}a[o.name]=V(o,X)}let n=e.requiredSecretRefs.filter(o=>t.hasSecretRef&&!t.hasSecretRef(o));if(n.length>0)throw new d(n.map(o=>`required secret reference is unavailable: ${o}`));return{schemaVersion:1,recipeId:e.recipeId,recipeVersion:e.version,recipeFingerprint:k(e),mode:t.mode,inputs:a,requiredSecretRefs:[...e.requiredSecretRefs],authority:structuredClone(e.authority),budget:structuredClone(e.budget),steps:P(e.steps).map(o=>({...structuredClone(o),prompt:D(o.prompt,a)}))}}function k(e){return A(e),{algorithm:"sha256",value:h(e).value}}function rt(e){return A(e),`${p(e)}
|
|
2
|
+
`}function x(e,t){let i=l(e,`inputs[${t}]`,["name","description","required","default","enum","pattern"]);return{name:c(i.name,`inputs[${t}].name`),description:c(i.description,`inputs[${t}].description`),required:F(i.required,`inputs[${t}].required`),...i.default!==void 0?{default:c(i.default,`inputs[${t}].default`)}:{},...i.enum!==void 0?{enum:u(i.enum,`inputs[${t}].enum`).map(r=>c(r,"enum value"))}:{},...i.pattern!==void 0?{pattern:c(i.pattern,`inputs[${t}].pattern`)}:{}}}function T(e,t){let i=l(e,`steps[${t}]`,["id","title","kind","prompt","dependsOn","agentProfile","approval","expectedArtifacts"]),r=i.approval===void 0?void 0:l(i.approval,`steps[${t}].approval`,["message"]);return{id:c(i.id,`steps[${t}].id`),title:c(i.title,`steps[${t}].title`),kind:i.kind,prompt:c(i.prompt,`steps[${t}].prompt`),...i.dependsOn!==void 0?{dependsOn:u(i.dependsOn,"dependsOn").map(s=>c(s,"dependency"))}:{},...i.agentProfile!==void 0?{agentProfile:c(i.agentProfile,"agentProfile")}:{},...r?{approval:{message:c(r.message,"approval message")}}:{},...i.expectedArtifacts!==void 0?{expectedArtifacts:u(i.expectedArtifacts,"expectedArtifacts").map(s=>c(s,"expected artifact"))}:{}}}function C(e){let t=l(e,"provenance",["publisherId","source","revision"]);return{publisherId:c(t.publisherId,"provenance.publisherId"),...t.source!==void 0?{source:c(t.source,"provenance.source")}:{},...t.revision!==void 0?{revision:c(t.revision,"provenance.revision")}:{}}}function $(e,t){(!Number.isSafeInteger(e?.maxAgents)||e.maxAgents<1||e.maxAgents>256)&&t.push("budget.maxAgents is invalid"),(!Number.isSafeInteger(e?.maxConcurrency)||e.maxConcurrency<1||e.maxConcurrency>64)&&t.push("budget.maxConcurrency is invalid"),e?.maxConcurrency>e?.maxAgents&&t.push("budget.maxConcurrency cannot exceed maxAgents"),(!Number.isSafeInteger(e?.maxTotalTokens)||e.maxTotalTokens<1||e.maxTotalTokens>1e8)&&t.push("budget.maxTotalTokens is invalid"),(!Number.isSafeInteger(e?.timeoutMs)||e.timeoutMs<1e3||e.timeoutMs>10080*60*1e3)&&t.push("budget.timeoutMs is invalid")}function N(e,t){let i=new Map(e.map(n=>[n.id,n])),r=new Set,s=new Set,a=n=>{if(!(s.has(n)||!i.has(n))){if(r.has(n)){t.push(`recipe step dependency cycle includes ${n}`);return}r.add(n);for(let o of i.get(n)?.dependsOn??[])a(o);r.delete(n),s.add(n)}};for(let n of e)a(n.id)}function P(e){let t=new Map(e.map(s=>[s.id,s])),i=new Map(e.map((s,a)=>[s.id,{step:s,index:a,dependencies:new Set(s.dependsOn??[])}])),r=[];for(;i.size>0;){let s=[...i.values()].filter(({dependencies:a})=>[...a].every(n=>!i.has(n))).sort((a,n)=>a.index-n.index);if(s.length===0)throw new d(["recipe step dependency graph is cyclic"]);for(let a of s)r.push(t.get(a.step.id)),i.delete(a.step.id)}return r}function V(e,t){let i=t.trim();if(i.length>32e3||R(i,{allowTab:!0,allowLineBreaks:!0}))throw new d([`input ${e.name} is invalid`]);if(e.enum&&!e.enum.includes(i))throw new d([`input ${e.name} is outside its enum`]);if(e.pattern&&!new RegExp(e.pattern,"u").test(i))throw new d([`input ${e.name} does not match its pattern`]);return i}function D(e,t){return e.replace(/\{\{\s*input\.([A-Za-z_][A-Za-z0-9_-]*)\s*\}\}/gu,(i,r)=>t[r]??"")}function O(e){return[...e.matchAll(/\{\{\s*input\.([A-Za-z_][A-Za-z0-9_-]*)\s*\}\}/gu)].map(t=>t[1])}function l(e,t,i){if(!e||typeof e!="object"||Array.isArray(e))throw new d([`${t} must be an object`]);let r=e,s=Object.keys(r).filter(a=>!i.includes(a));if(s.length>0)throw new d(s.map(a=>`${t} contains unsupported field ${a}`));return r}function u(e,t){if(!Array.isArray(e))throw new d([`${t} must be an array`]);return e}function c(e,t){if(typeof e!="string")throw new d([`${t} must be text`]);return e}function F(e,t){if(typeof e!="boolean")throw new d([`${t} must be boolean`]);return e}function g(e,t){if(!Number.isSafeInteger(e))throw new d([`${t} must be an integer`]);return e}function y(e,t,i){(typeof e!="string"||!/^[A-Za-z0-9][A-Za-z0-9._:@/-]{0,255}$/u.test(e))&&i.push(`${t} is invalid`)}function L(e,t){(typeof e!="string"||!/^[A-Za-z_][A-Za-z0-9_-]{0,127}$/u.test(e))&&t.push(`input name ${String(e)} is invalid`)}function f(e,t,i,r){(typeof e!="string"||!e.trim()||e.length>r||R(e,{allowTab:!0,allowLineBreaks:!0}))&&i.push(`${t} must be non-empty bounded text`)}function M(e,t,i){(typeof e!="string"||!e||e.startsWith("/")||/^[A-Za-z]:[\\/]/u.test(e)||e.includes("\\")||e.split("/").some(r=>!r||r==="."||r===".."))&&i.push(`${t} must be workflow-relative`)}function H(e){return e==="default"||e==="plan"||e==="acceptEdits"||e==="auto"||e==="dontAsk"}export{_ as XENO_RECIPE_SCHEMA_VERSION,d as XenoRecipeValidationError,A as assertValidXenoRecipeDefinition,it as compileXenoRecipe,nt as parseXenoRecipeDefinition,rt as serializeXenoRecipe,k as xenoRecipeFingerprint};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"inputs":{"src/artifacts/types.ts":{"bytes":9397,"imports":[],"format":"esm"},"src/artifacts/hash.ts":{"bytes":1530,"imports":[{"path":"node:crypto","kind":"import-statement","external":true}],"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/artifacts/evidence-graph.ts":{"bytes":9299,"imports":[{"path":"src/artifacts/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/artifacts/repository.ts":{"bytes":30001,"imports":[{"path":"src/artifacts/types.ts","kind":"import-statement","original":"./types.js"},{"path":"src/artifacts/validation.ts","kind":"import-statement","original":"./validation.js"}],"format":"esm"},"src/control-plane/lock.ts":{"bytes":2591,"imports":[{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:os","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true}],"format":"esm"},"src/version.ts":{"bytes":38,"imports":[],"format":"esm"},"src/artifacts/file-repository.ts":{"bytes":16811,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"node:fs/promises","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"src/control-plane/lock.ts","kind":"import-statement","original":"../control-plane/lock.js"},{"path":"src/version.ts","kind":"import-statement","original":"../version.js"},{"path":"src/artifacts/hash.ts","kind":"import-statement","original":"./hash.js"},{"path":"src/artifacts/repository.ts","kind":"import-statement","original":"./repository.js"},{"path":"src/artifacts/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/artifacts/diff-artifact.ts":{"bytes":18491,"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"},{"path":"src/artifacts/validation.ts","kind":"import-statement","original":"./validation.js"}],"format":"esm"},"src/artifacts/review-service.ts":{"bytes":8903,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/artifacts/diff-artifact.ts","kind":"import-statement","original":"./diff-artifact.js"},{"path":"src/artifacts/repository.ts","kind":"import-statement","original":"./repository.js"}],"format":"esm"},"src/artifacts/spec-lifecycle.ts":{"bytes":31787,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/artifacts/hash.ts","kind":"import-statement","original":"./hash.js"},{"path":"src/artifacts/review-service.ts","kind":"import-statement","original":"./review-service.js"},{"path":"src/artifacts/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/artifacts/multi-agent-review.ts":{"bytes":30924,"imports":[{"path":"node:crypto","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"},{"path":"src/artifacts/validation.ts","kind":"import-statement","original":"./validation.js"}],"format":"esm"},"src/artifacts/legacy-adapters.ts":{"bytes":11181,"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"},{"path":"src/artifacts/validation.ts","kind":"import-statement","original":"./validation.js"},{"path":"src/artifacts/diff-artifact.ts","kind":"import-statement","original":"./diff-artifact.js"}],"format":"esm"},"src/artifacts/index.ts":{"bytes":396,"imports":[{"path":"src/artifacts/types.ts","kind":"import-statement","original":"./types.js"},{"path":"src/artifacts/validation.ts","kind":"import-statement","original":"./validation.js"},{"path":"src/artifacts/hash.ts","kind":"import-statement","original":"./hash.js"},{"path":"src/artifacts/evidence-graph.ts","kind":"import-statement","original":"./evidence-graph.js"},{"path":"src/artifacts/repository.ts","kind":"import-statement","original":"./repository.js"},{"path":"src/artifacts/file-repository.ts","kind":"import-statement","original":"./file-repository.js"},{"path":"src/artifacts/diff-artifact.ts","kind":"import-statement","original":"./diff-artifact.js"},{"path":"src/artifacts/review-service.ts","kind":"import-statement","original":"./review-service.js"},{"path":"src/artifacts/spec-lifecycle.ts","kind":"import-statement","original":"./spec-lifecycle.js"},{"path":"src/artifacts/multi-agent-review.ts","kind":"import-statement","original":"./multi-agent-review.js"},{"path":"src/artifacts/legacy-adapters.ts","kind":"import-statement","original":"./legacy-adapters.js"}],"format":"esm"},"src/utils/text-security.ts":{"bytes":833,"imports":[],"format":"esm"},"src/recipes/protocol.ts":{"bytes":20322,"imports":[{"path":"src/artifacts/index.ts","kind":"import-statement","original":"../artifacts/index.js"},{"path":"src/utils/text-security.ts","kind":"import-statement","original":"../utils/text-security.js"}],"format":"esm"},"src/recipes/index.ts":{"bytes":32,"imports":[{"path":"src/recipes/protocol.ts","kind":"import-statement","original":"./protocol.js"}],"format":"esm"}},"outputs":{"dist/recipes/index.cjs":{"imports":[{"path":"node:crypto","kind":"require-call","external":true}],"exports":[],"entryPoint":"src/recipes/index.ts","inputs":{"src/recipes/index.ts":{"bytesInOutput":249},"src/artifacts/index.ts":{"bytesInOutput":0},"src/artifacts/hash.ts":{"bytesInOutput":715},"src/artifacts/validation.ts":{"bytesInOutput":50},"src/artifacts/file-repository.ts":{"bytesInOutput":20},"src/artifacts/diff-artifact.ts":{"bytesInOutput":20},"src/utils/text-security.ts":{"bytesInOutput":179},"src/recipes/protocol.ts":{"bytesInOutput":10069}},"bytes":11921}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"inputs":{"src/artifacts/types.ts":{"bytes":9397,"imports":[],"format":"esm"},"src/artifacts/hash.ts":{"bytes":1530,"imports":[{"path":"node:crypto","kind":"import-statement","external":true}],"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/artifacts/evidence-graph.ts":{"bytes":9299,"imports":[{"path":"src/artifacts/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/artifacts/repository.ts":{"bytes":30001,"imports":[{"path":"src/artifacts/types.ts","kind":"import-statement","original":"./types.js"},{"path":"src/artifacts/validation.ts","kind":"import-statement","original":"./validation.js"}],"format":"esm"},"src/control-plane/lock.ts":{"bytes":2591,"imports":[{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:os","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true}],"format":"esm"},"src/version.ts":{"bytes":38,"imports":[],"format":"esm"},"src/artifacts/file-repository.ts":{"bytes":16811,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"node:fs/promises","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"src/control-plane/lock.ts","kind":"import-statement","original":"../control-plane/lock.js"},{"path":"src/version.ts","kind":"import-statement","original":"../version.js"},{"path":"src/artifacts/hash.ts","kind":"import-statement","original":"./hash.js"},{"path":"src/artifacts/repository.ts","kind":"import-statement","original":"./repository.js"},{"path":"src/artifacts/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/artifacts/diff-artifact.ts":{"bytes":18491,"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"},{"path":"src/artifacts/validation.ts","kind":"import-statement","original":"./validation.js"}],"format":"esm"},"src/artifacts/review-service.ts":{"bytes":8903,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/artifacts/diff-artifact.ts","kind":"import-statement","original":"./diff-artifact.js"},{"path":"src/artifacts/repository.ts","kind":"import-statement","original":"./repository.js"}],"format":"esm"},"src/artifacts/spec-lifecycle.ts":{"bytes":31787,"imports":[{"path":"node:crypto","kind":"import-statement","external":true},{"path":"src/artifacts/hash.ts","kind":"import-statement","original":"./hash.js"},{"path":"src/artifacts/review-service.ts","kind":"import-statement","original":"./review-service.js"},{"path":"src/artifacts/types.ts","kind":"import-statement","original":"./types.js"}],"format":"esm"},"src/artifacts/multi-agent-review.ts":{"bytes":30924,"imports":[{"path":"node:crypto","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"},{"path":"src/artifacts/validation.ts","kind":"import-statement","original":"./validation.js"}],"format":"esm"},"src/artifacts/legacy-adapters.ts":{"bytes":11181,"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"},{"path":"src/artifacts/validation.ts","kind":"import-statement","original":"./validation.js"},{"path":"src/artifacts/diff-artifact.ts","kind":"import-statement","original":"./diff-artifact.js"}],"format":"esm"},"src/artifacts/index.ts":{"bytes":396,"imports":[{"path":"src/artifacts/types.ts","kind":"import-statement","original":"./types.js"},{"path":"src/artifacts/validation.ts","kind":"import-statement","original":"./validation.js"},{"path":"src/artifacts/hash.ts","kind":"import-statement","original":"./hash.js"},{"path":"src/artifacts/evidence-graph.ts","kind":"import-statement","original":"./evidence-graph.js"},{"path":"src/artifacts/repository.ts","kind":"import-statement","original":"./repository.js"},{"path":"src/artifacts/file-repository.ts","kind":"import-statement","original":"./file-repository.js"},{"path":"src/artifacts/diff-artifact.ts","kind":"import-statement","original":"./diff-artifact.js"},{"path":"src/artifacts/review-service.ts","kind":"import-statement","original":"./review-service.js"},{"path":"src/artifacts/spec-lifecycle.ts","kind":"import-statement","original":"./spec-lifecycle.js"},{"path":"src/artifacts/multi-agent-review.ts","kind":"import-statement","original":"./multi-agent-review.js"},{"path":"src/artifacts/legacy-adapters.ts","kind":"import-statement","original":"./legacy-adapters.js"}],"format":"esm"},"src/utils/text-security.ts":{"bytes":833,"imports":[],"format":"esm"},"src/recipes/protocol.ts":{"bytes":20322,"imports":[{"path":"src/artifacts/index.ts","kind":"import-statement","original":"../artifacts/index.js"},{"path":"src/utils/text-security.ts","kind":"import-statement","original":"../utils/text-security.js"}],"format":"esm"},"src/recipes/index.ts":{"bytes":32,"imports":[{"path":"src/recipes/protocol.ts","kind":"import-statement","original":"./protocol.js"}],"format":"esm"}},"outputs":{"dist/recipes/index.js":{"imports":[{"path":"node:crypto","kind":"import-statement","external":true}],"exports":["XENO_RECIPE_SCHEMA_VERSION","XenoRecipeValidationError","assertValidXenoRecipeDefinition","compileXenoRecipe","parseXenoRecipeDefinition","serializeXenoRecipe","xenoRecipeFingerprint"],"entryPoint":"src/recipes/index.ts","inputs":{"src/artifacts/index.ts":{"bytesInOutput":0},"src/artifacts/hash.ts":{"bytesInOutput":712},"src/artifacts/validation.ts":{"bytesInOutput":49},"src/artifacts/file-repository.ts":{"bytesInOutput":20},"src/artifacts/diff-artifact.ts":{"bytesInOutput":20},"src/utils/text-security.ts":{"bytesInOutput":179},"src/recipes/protocol.ts":{"bytesInOutput":10072},"src/recipes/index.ts":{"bytesInOutput":0}},"bytes":11270}}}
|