@maxhealth.tech/prefab 0.3.21 → 0.3.22

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/CHANGELOG.md CHANGED
@@ -6,6 +6,16 @@ All notable changes to this project will be documented in this file.
6
6
 
7
7
  <!-- Add new entries directly below. Keep this line: it makes a release merge conflict rather than file them under a published version. -->
8
8
 
9
+ ## [0.3.22] — 2026-11-12
10
+
11
+ ### Added
12
+
13
+ - **`uiToolMeta(resourceUri?)`** returns the tool-definition `_meta` that points an MCP Apps host at a `ui://` renderer, the prefab viewer by default, so servers stop spelling out `{ ui: { resourceUri: PREFAB_RESOURCE_URI } }` by hand. Exported from the root and from `@maxhealth.tech/prefab/mcp`.
14
+
15
+ ### Changed
16
+
17
+ - **The skill's wire-format reference is generated from `docs/reference/wire-format.md`** by the build, like its example assets, instead of being a second hand-written copy. The skill now also gets the expression grammar, the scope-variable table and `validateWireFormat`; the docs page gains the multi-action example and the theme token list the skill had.
18
+
9
19
  ## [0.3.21] — 2026-11-05
10
20
 
11
21
  ### Fixed
package/dist/a2ui.min.js CHANGED
@@ -1 +1 @@
1
- (()=>{var{defineProperty:k,getOwnPropertyNames:fe,getOwnPropertyDescriptor:me}=Object,ge=Object.prototype.hasOwnProperty;function he(e){return this[e]}var ye=(e)=>{var n=(L??=new WeakMap).get(e),t;if(n)return n;if(n=k({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function"){for(var i of fe(e))if(!ge.call(n,i))k(n,i,{get:he.bind(e,i),enumerable:!(t=me(e,i))||t.enumerable})}return L.set(e,n),n},L;var Ae=(e)=>e;function be(e,n){this[e]=Ae.bind(null,n)}var Ce=(e,n)=>{for(var t in n)k(e,t,{get:n[t],enumerable:!0,configurable:!0,set:be.bind(n,t)})};var Ze={};Ce(Ze,{default:()=>Qe,emit:()=>le,envelope:()=>de});var J={silent:0,error:1,warn:2,info:3,debug:4},ve="warn";function O(e){let n=e?`[prefab:${e}]`:"[prefab]",t=(i,r,o)=>{if(J[i]>J[ve])return;console[i](`${n} ${r}`,...o)};return{error:(i,...r)=>t("error",i,r),warn:(i,...r)=>t("warn",i,r),info:(i,...r)=>t("info",i,r),debug:(i,...r)=>t("debug",i,r)}}var nn=O();function d(e){return e!=null&&typeof e==="object"&&!Array.isArray(e)}function b(e){return typeof e==="string"?e:void 0}function F(e){return d(e)?e:void 0}function _(e){return Array.isArray(e)?e.filter(d):[]}function U(e){return d(e)&&typeof e.action==="string"}function m(e){if(!d(e)||typeof e.type!=="string")return;let n={type:e.type};for(let[t,i]of Object.entries(e))if(t==="children"){if(Array.isArray(i))n.children=y(i)}else if(t==="onMount"){if(U(i)||Array.isArray(i)&&i.every(U))n.onMount=i}else if(t==="id"||t==="cssClass"){if(typeof i==="string")n[t]=i}else if(t!=="type")n[t]=i;return n}function y(e){if(!Array.isArray(e))return[];let n=[];for(let t of e){let i=m(t);if(i)n.push(i)}return n}var Se=/^(.+?)\s*\|\s*([A-Za-z_][\w]*)\s*(?::\s*(.+))?$/;function j(e){let n=Se.exec(e);if(n==null)return;let t=n[1].trim();if(t.includes("|"))return;let i=n.at(3)?.trim();if(i===void 0)return{base:t,name:n[2]};let r=/^'([^']*)'$|^"([^"]*)"$/.exec(i);if(r!=null){let s=r.at(1)??r.at(2);return{base:t,name:n[2],arg:s??""}}let o=Number(i);if(!Number.isNaN(o))return{base:t,name:n[2],arg:o};return}function T(e,n){return(t)=>({call:{call:"formatDate",args:{value:t,format:e}},note:`the "${n}" pipe renders in the reader's locale; A2UI needs an explicit pattern, so "${e}" was used`})}var xe={currency:(e,n)=>({call:{call:"formatCurrency",args:{value:e,currency:typeof n==="string"?n:"USD"}}}),number:(e,n)=>({call:{call:"formatNumber",args:{value:e,...typeof n==="number"&&{decimals:n}}}}),round:(e,n)=>({call:{call:"formatNumber",args:{value:e,decimals:typeof n==="number"?n:0}}}),pluralize:(e,n)=>{if(typeof n!=="string")return;return{call:{call:"pluralize",args:{value:e,one:n,other:`${n}s`}}}},date:T("y-MM-dd","date"),time:T("HH:mm","time"),datetime:T("y-MM-dd HH:mm","datetime")};function V(e,n){return xe[e.name]?.(n,e.arg)}var we=/^\s*\{\{\s*(.+?)\s*\}\}\s*$/s,ke=/\{\{\s*(.+?)\s*\}\}/g,Oe=/^\$?[A-Za-z_][\w$]*(?:\.(?:[A-Za-z_$][\w$]*|\d+))*$/,H="$index";function p(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function Te(e){return"/"+e.map(p).join("/")}function De(e){return e.startsWith("state.")?e.slice(6):e}function D(e,n){if(!Oe.test(e))return;let t=De(e).split("."),i=t[0],r=Object.hasOwn(n,i)?n[i]:void 0;if(r===void 0){if(i.startsWith("$"))return;return Te(t)}let o=t.slice(1);if(r==="")return o.length===0?void 0:o.map(p).join("/");return o.length===0?r:`${r}/${o.map(p).join("/")}`}function q(e){return e.replace(/\$\{/g,"\\${")}function Re(e,n){let t,i="",r=0;for(let o of e.matchAll(ke)){let s=o[1].trim(),a=D(s,n);if(a==null){t=s;break}i+=q(e.slice(r,o.index)),i+=`\${${a}}`,r=o.index+o[0].length}if(t!=null)return;return i+=q(e.slice(r)),{call:"formatString",args:{value:i}}}function Me(e,n){let t=j(e);if(t==null)return;let i=D(t.base,n),r=i!=null?{path:i}:/^-?\d+(\.\d+)?$/.test(t.base)?Number(t.base):void 0;if(r===void 0)return;let o=V(t,r);if(o==null)return;return{kind:"format",value:o.call,...o.note!=null&&{note:o.note}}}function g(e,n={}){let t=we.exec(e);if(t!=null&&!t[1].includes("{{")&&!t[1].includes("}}")){let o=t[1].trim();if(o===H&&H in n)return{kind:"index",value:{call:"@index"}};let s=D(o,n);if(s!=null)return{kind:"binding",value:{path:s}};let a=Me(o,n);if(a!=null)return a;return{kind:"unbindable",expression:o}}if(!e.includes("{{"))return{kind:"literal",value:e};let r=Re(e,n);if(r!=null)return{kind:"format",value:r};return{kind:"unbindable",expression:e}}function C(e,n={}){if(e==null)return;let t=g(e,n);switch(t.kind){case"literal":return t.value;case"binding":return t.value;case"format":return t.value;case"index":return t.value;default:return}}var Ie=["accountCircle","add","arrowBack","arrowForward","attachFile","calendarToday","call","camera","check","close","delete","download","edit","event","error","fastForward","favorite","favoriteOff","folder","help","home","info","locationOn","lock","lockOpen","mail","menu","moreVert","moreHoriz","notificationsOff","notifications","pause","payment","person","phone","photo","play","print","refresh","rewind","search","send","settings","share","shoppingCart","skipNext","skipPrevious","star","starHalf","starOff","stop","upload","visibility","visibilityOff","volumeDown","volumeMute","volumeOff","volumeUp","warning"],Ee=new Map(Ie.map((e)=>[z(e),e])),Ne={alertcircle:"error",alerttriangle:"warning",alertoctagon:"error",xcircle:"error",circlex:"error",circlealert:"error",checkcircle:"check",circlecheck:"check",checkcircle2:"check",infocircle:"info",circleinfo:"info",helpcircle:"help",circlehelp:"help",bell:"notifications",belloff:"notificationsOff",arrowleft:"arrowBack",arrowright:"arrowForward",chevronleft:"arrowBack",chevronright:"arrowForward",x:"close",plus:"add",trash:"delete",trash2:"delete",ellipsisvertical:"moreVert",ellipsis:"moreHoriz",morehorizontal:"moreHoriz",morevertical:"moreVert",pencil:"edit",pen:"edit",squarepen:"edit",user:"person",usercircle:"accountCircle",circleuser:"accountCircle",eye:"visibility",eyeoff:"visibilityOff",mappin:"locationOn",map:"locationOn",image:"photo",images:"photo",file:"folder",files:"folder",calendar:"calendarToday",calendardays:"calendarToday",clock:"event",creditcard:"payment",cart:"shoppingCart",shoppingbag:"shoppingCart",phonecall:"call",mailopen:"mail",inbox:"mail",cog:"settings",gear:"settings",sliders:"settings",rotatecw:"refresh",rotateccw:"refresh",refreshcw:"refresh",heart:"favorite",heartoff:"favoriteOff",volume:"volumeUp",volume1:"volumeDown",volume2:"volumeUp",volumex:"volumeOff",skipforward:"skipNext",skipback:"skipPrevious",paperclip:"attachFile",link:"share",share2:"share",magnifyingglass:"search",searchicon:"search"};function z(e){return e.replace(/[\s._-]/g,"").toLowerCase()}function G(e){let n=z(e);return Ee.get(n)??Ne[n]}function R(e,...n){for(let t of n){let i=e[t];if(typeof i==="string"||typeof i==="number"||typeof i==="boolean")return String(i)}return}function Pe(e){if(!d(e))return{};return Object.fromEntries(Object.entries(e).map(([n,t])=>[n,y(t)]))}var M={ForEach:(e,n)=>{let t=R(e,"expression");if(t==null){n.note("unsupported","ForEach","no expression to iterate");return}let i=n.bind(t);if(i.kind!=="binding"){n.note("expression","ForEach",`"${t}" is not a plain path, so there is no list to bind`);return}let r=n.inScope({$item:"",$index:""},()=>n.single(e.children));if(r==null){n.note("unsupported","ForEach","the loop body had nothing to render");return}return{component:"Column",children:{path:i.value.path,componentId:r}}},Define:()=>{return},Use:(e,n)=>{let t=R(e,"def","name");if(t==null){n.note("unsupported","Use","no definition name");return}let i=n.definition(t);if(i==null){n.note("unsupported","Use",`no definition named "${t}" was declared`);return}let r=e.overrides,o={};if(r!=null&&typeof r==="object"&&!Array.isArray(r)){let A=n.bindData(`use_${t}`,r);for(let c of Object.keys(r))o[c]=`${A}/${p(c)}`}let s={...Pe(e.slots),...Array.isArray(e.children)&&e.children.length>0?{default:e.children}:{}},a=n.expand(t,()=>n.inScope(o,()=>n.withSlots(s,()=>n.single(i))));if(a==null){n.note("unsupported","Use",`definition "${t}" rendered nothing`);return}return{component:"Column",children:[a]}},Slot:(e,n)=>{let t=R(e,"name")??"default",i=n.slotContent(t)??(Array.isArray(e.children)?e.children:void 0),r=i!=null?n.single(i):void 0;if(r==null){n.note("unsupported","Slot",`slot "${t}" had neither content nor a fallback`);return}return{component:"Column",children:[r]}}};for(let e of["If","Elif","Else","Condition","Match","Case"])M[e]=(n,t)=>{t.note("unsupported",n.type,"A2UI has no declarative conditional; the agent re-sends updateComponents when the shape changes");return};var K=["TableHead","TableBody","TableFooter","TableRow","TableCell","TableHeader","ExpandableRow"];function Be(e){let n=[];for(let t of _(e.columns)){let i=b(t.accessor)??b(t.key);if(i==null)continue;n.push({key:i,header:b(t.header)??i})}return n}function $e(e,n){let t=e.rows;if(typeof t==="string"){let i=g(t);if(i.kind==="binding")return i.value.path;n.note("expression","DataTable",`rows expression "${t}" is not a plain path; the table has no data source`);return}if(Array.isArray(t))return n.bindData("rows",t);n.note("unsupported","DataTable","no rows to render");return}function W(e,n){let t=Be(e);if(t.length===0){n.note("unsupported","DataTable","no usable column definitions");return}let i=$e(e,n);if(i==null)return;let r=n.push({component:"Row",children:t.map((a)=>n.push({component:"Text",text:a.header,variant:"caption"})),align:"center"}),o=n.push({component:"Row",children:t.map((a)=>n.push({component:"Text",text:{path:a.key.split(".").join("/")}})),align:"center"}),s=n.push({component:"Column",children:{path:i,componentId:o}});if(e.search===!0||e.paginated===!0)n.note("degraded","DataTable","search and pagination dropped; A2UI Basic has no table controls");return{component:"Column",children:[r,s]}}function Le(e){let n=[],t=(i)=>{if(i.type==="TableRow"||i.type==="ExpandableRow"){n.push(i);return}if(Array.isArray(i.children))for(let r of i.children)t(r)};if(Array.isArray(e.children))for(let i of e.children)t(i);return n}function Je(e,n){let t=e.type==="TableHeader";if(Array.isArray(e.children)&&e.children.length>0)return n.single(e.children);let i=e.content??e.text??e.label;if(typeof i!=="string"&&typeof i!=="number"&&typeof i!=="boolean")return;let r=String(i),o=C(r);if(o==null){n.note("expression",e.type,`cell expression "${r}" has no A2UI equivalent`);return}return n.push({component:"Text",text:o,...t&&{variant:"caption"}})}function Y(e,n){let t=Le(e),i=[];for(let r of t){let s=(Array.isArray(r.children)?r.children:[]).map((a)=>Je(a,n)).filter((a)=>a!=null);if(s.length===0)continue;i.push(n.push({component:"Row",children:s,align:"center"}))}if(i.length===0){n.note("unsupported","Table","no rows with renderable cells");return}return n.note("degraded","Table","rendered as a Column of Rows; column widths do not align"),{component:"Column",children:i}}function u(e,...n){for(let t of n){let i=e[t];if(typeof i==="string"||typeof i==="number"||typeof i==="boolean")return String(i)}return}function l(e,n,t){let i=u(e,...t?.keys??["content","text","label","title"]);if(i==null){n.note("unsupported",e.type,"no text content to render");return}let r=n.bind(i);if(r.kind==="unbindable")n.note("expression",e.type,`"${r.expression}" is richer than a JSON Pointer; the text was left as written`);let o=t?.prefix??"",s=t?.suffix??"";if(r.kind==="format"&&r.note!=null)n.note("degraded",e.type,r.note);if(r.kind==="binding"||r.kind==="format"||r.kind==="index"){if(o!==""||s!=="")n.note("degraded",e.type,"Markdown emphasis dropped: the text is a data binding");return{component:"Text",text:r.value,...t?.variant!=null&&{variant:t.variant}}}let a=r.kind==="literal"?r.value:i;return{component:"Text",text:`${o}${a}${s}`,...t?.variant!=null&&{variant:t.variant}}}var Ue={start:"start",end:"end",center:"center",between:"spaceBetween",around:"spaceAround",evenly:"spaceEvenly",spaceBetween:"spaceBetween",spaceAround:"spaceAround",spaceEvenly:"spaceEvenly"},Fe={start:"start",end:"end",center:"center",stretch:"stretch",baseline:"baseline"};function v(e){return(n,t)=>{let i=t.children(n.children);if(i.length===0){t.note("unsupported",n.type,`${e} requires at least one child and none survived`);return}let r=typeof n.justify==="string"?Ue[n.justify]:void 0,o=typeof n.align==="string"?Fe[n.align]:void 0;return{component:e,children:i,...r!=null&&{justify:r},...o!=null&&{align:o}}}}var _e=["Div","Container","Stack","Grid","GridItem","Page","Pages","Dashboard","DashboardItem","MasterDetail","Detail","Form","Fieldset","CardContent","CardHeader","CardFooter","Accordion","Carousel","SelectGroup","ComboboxGroup","Section","Article","Aside","Header","Footer","Nav","Span"],je=["ButtonGroup","Toolbar","Inline"],Ve={H1:"# ",H2:"## ",H3:"### ",H4:"#### ",H5:"##### ",H6:"###### "},Z={Heading:(e,n)=>{let t=typeof e.level==="number"?Math.min(6,Math.max(1,e.level)):1;return l(e,n,{prefix:`${"#".repeat(t)} `})},Text:(e,n)=>l(e,n),P:(e,n)=>l(e,n),Lead:(e,n)=>l(e,n),Large:(e,n)=>l(e,n),Small:(e,n)=>l(e,n,{variant:"caption"}),Muted:(e,n)=>l(e,n,{variant:"caption"}),Label:(e,n)=>l(e,n,{variant:"caption"}),TableCaption:(e,n)=>l(e,n,{variant:"caption"}),BlockQuote:(e,n)=>l(e,n,{prefix:"> "}),Code:(e,n)=>l(e,n,{prefix:"`",suffix:"`"}),Kbd:(e,n)=>l(e,n,{prefix:"`",suffix:"`"}),Markdown:(e,n)=>l(e,n),Badge:(e,n)=>l(e,n,{keys:["label","content"],variant:"caption"}),CardTitle:(e,n)=>l(e,n,{prefix:"**",suffix:"**"}),CardDescription:(e,n)=>l(e,n,{variant:"caption"}),Tooltip:(e,n)=>l(e,n,{variant:"caption"}),AlertTitle:(e,n)=>l(e,n,{prefix:"**",suffix:"**"}),AlertDescription:(e,n)=>l(e,n)};for(let[e,n]of Object.entries(Ve))Z[e]=(t,i)=>l(t,i,{prefix:n});function I(e){return(n,t)=>{let i=t.dyn(u(n,"src","url"));if(i==null){t.note("unsupported",n.type,"no resolvable source URL");return}let r=e==="Video"?void 0:t.dyn(u(n,"alt","description")),o=e==="Video"?t.dyn(u(n,"poster","posterUrl")):void 0;return{component:e,url:i,...r!=null&&{description:r},...o!=null&&{posterUrl:o}}}}var He={text:"shortText",email:"shortText",url:"shortText",tel:"shortText",search:"shortText",password:"obscured",number:"number"};function h(e,n){let t=typeof e.name==="string"?e.name:void 0;if(t==null)return;let i=n.bind(`{{ ${t} }}`);return i.kind==="binding"?i.value:void 0}function B(e,n){let t=h(e,n);if(t==null)return;let i=[];if(e.required===!0)i.push({condition:{call:"required",args:{value:t}}});if(e.inputType==="email")i.push({condition:{call:"email",args:{value:t}}});return i.length>0?i:void 0}function qe(e,n){let t=Array.isArray(e.children)?e.children:[],i=[];for(let r of t){let o=u(r,"value");if(o==null){n.note("degraded",e.type,`dropped a ${r.type} child that carries no option value`);continue}i.push({label:u(r,"label")??o,value:o})}return i}function E(e,n,t){if(u(e,"label","name")==null)n.note("degraded",e.type,"no label available for the DateTimeInput");return{component:"DateTimeInput",value:h(e,n)??"",...t}}function N(e){return(n,t)=>{let i=t.dyn(u(n,"label","name"));if(i==null){t.note("unsupported",n.type,"ChoicePicker requires a label and none could be derived");return}let r=qe(n,t);if(r.length===0){t.note("unsupported",n.type,"no options to choose from");return}let o=h(n,t),s=B(n,t);return{component:"ChoicePicker",label:i,variant:e,options:r,...o!=null&&{value:o},...s!=null&&{checks:s}}}}function X(e,n,t){let i=n.dyn(u(e,"label","name"));if(i==null){n.note("unsupported",e.type,"TextField requires a label and none could be derived");return}let r=h(e,n),o=n.dyn(u(e,"placeholder")),s=B(e,n);return{component:"TextField",label:i,variant:t,...r!=null&&{value:r},...o!=null&&{placeholder:o},...s!=null&&{checks:s}}}var P={Input:(e,n)=>{let t=typeof e.inputType==="string"?e.inputType:"text",i=He[t];if(i==null)n.note("degraded",e.type,`inputType "${t}" has no A2UI variant; used shortText`);return X(e,n,i??"shortText")},Textarea:(e,n)=>X(e,n,"longText"),Checkbox:(e,n)=>{let t=n.dyn(u(e,"label","name"));if(t==null){n.note("unsupported",e.type,"CheckBox requires a label and none could be derived");return}let i=B(e,n);return{component:"CheckBox",label:t,value:h(e,n)??!1,...i!=null&&{checks:i}}},Slider:(e,n)=>{let t=typeof e.max==="number"?e.max:void 0;if(t==null){n.note("unsupported",e.type,"Slider requires a max and prefab left it open");return}let i=n.dyn(u(e,"label","name")),r=typeof e.min==="number"?e.min:void 0,o=typeof e.step==="number"?e.step:void 0,s=o!=null&&o>0?Math.max(1,Math.round((t-(r??0))/o)):void 0;return{component:"Slider",max:t,value:h(e,n)??r??0,...i!=null&&{label:i},...r!=null&&{min:r},...s!=null&&{steps:s}}},Button:(e,n)=>{let t=u(e,"label","content")??"Button",i=n.action(e.onClick,"Button")??(e.submit===!0?{event:{name:"submit"}}:void 0);if(i==null){n.note("unsupported",e.type,"Button requires an action and none could be derived");return}let r=n.push({component:"Text",text:n.dyn(t)??t}),o=e.variant==="link"||e.variant==="ghost"?"borderless":e.variant==="default"?"primary":"default";return{component:"Button",child:r,action:i,variant:o}},Link:(e,n)=>{let t=u(e,"href","url");if(t==null){n.note("unsupported",e.type,"no href to open");return}let i=u(e,"content","label")??t;return{component:"Button",child:n.push({component:"Text",text:n.dyn(i)??i}),variant:"borderless",action:{functionCall:{call:"openUrl",args:{url:t}}}}},DatePicker:(e,n)=>E(e,n,{enableDate:!0}),TimePicker:(e,n)=>E(e,n,{enableTime:!0}),DateTimePicker:(e,n)=>E(e,n,{enableDate:!0,enableTime:!0}),Select:(e,n)=>N(e.multiple===!0?"multipleSelection":"mutuallyExclusive")(e,n),RadioGroup:N("mutuallyExclusive"),Combobox:N("mutuallyExclusive")};P.Switch=P.Checkbox;var ze={Card:(e,n)=>{let t=n.single(e.children);if(t==null){n.note("unsupported","Card","Card requires a child and it had none");return}return{component:"Card",child:t}},Alert:(e,n)=>{let t=n.single(e.children);if(t==null){n.note("unsupported","Alert","no alert body to render");return}let i=typeof e.variant==="string"?e.variant:"default";return n.note("degraded","Alert",`variant "${i}" rendered as a plain Card`),{component:"Card",child:t}},Separator:()=>({component:"Divider"}),Divider:()=>({component:"Divider"}),Icon:(e,n)=>{let t=u(e,"name","icon");if(t==null){n.note("unsupported","Icon","no icon name");return}let i=G(t);if(i==null){n.note("unsupported","Icon",`"${t}" has no equivalent in the A2UI icon set`);return}if(i!==t)n.note("degraded","Icon",`"${t}" mapped to the A2UI icon "${i}"`);return{component:"Icon",name:i}},Metric:(e,n)=>{let t=[],i=u(e,"label","title");if(i!=null)t.push(n.push({component:"Text",text:n.dyn(i)??i,variant:"caption"}));let r=u(e,"value");if(r!=null)t.push(n.push({component:"Text",text:n.dyn(r)??r}));if(t.length===0){n.note("unsupported","Metric","neither a label nor a value to render");return}return n.note("degraded","Metric","rendered as a Column of Text; trend and delta styling dropped"),{component:"Column",children:t}},Tabs:(e,n)=>{let t=Array.isArray(e.children)?e.children:[],i=[];for(let r of t){let o=n.single(r.children);if(o==null)continue;i.push({title:u(r,"title")??"Tab",child:o})}if(i.length===0){n.note("unsupported","Tabs","no tab had renderable content");return}return{component:"Tabs",tabs:i}},Dialog:(e,n)=>{let t=n.single(e.children);if(t==null){n.note("unsupported","Dialog","no dialog body to render");return}let i=m(e.trigger),r=i!=null?u(i,"label","content")??u(e,"title")??"Open":u(e,"title")??"Open";return{component:"Modal",trigger:(i!=null?n.child(i):void 0)??n.push({component:"Text",text:n.dyn(r)??r}),content:t}},AccordionItem:(e,n)=>{let t=[],i=u(e,"title");if(i!=null)t.push(n.push({component:"Text",text:i,variant:"caption"}));if(t.push(...n.children(e.children)),t.length===0){n.note("unsupported","AccordionItem","nothing to render");return}return n.note("degraded","AccordionItem","rendered expanded; A2UI Basic has no disclosure component"),{component:"Column",children:t}}},S={Column:v("Column"),Row:v("Row"),...Z,...P,...ze,...M,Image:I("Image"),Video:I("Video"),Audio:I("AudioPlayer"),Table:Y,DataTable:W};for(let e of _e)S[e]??=v("Column");for(let e of je)S[e]??=v("Row");var Ge=new Set(["Tab","SelectOption","ComboboxOption","Radio","Option",...K]),Ke={LineChart:"charts",BarChart:"charts",AreaChart:"charts",PieChart:"charts",ScatterChart:"charts",RadarChart:"charts",RadialChart:"charts",Histogram:"charts",Sparkline:"charts",Svg:"inline vector graphics",Mermaid:"diagrams",Embed:"embedded frames",DropZone:"file uploads",Ring:"progress rings",Loader:"loading indicators",Progress:"progress bars"};function Q(e){return S[e]}function ee(e){return Ge.has(e)}function ne(){return Object.keys(S).sort()}function te(e,n){let t=Ke[e.type];if(t!=null){n.note("unsupported",e.type,`${t} are outside the A2UI Basic catalog`);return}if(Array.isArray(e.children)&&e.children.length>0){let i=n.children(e.children);if(i.length>0)return n.note("degraded",e.type,"no Basic-catalog equivalent; flattened to a Column"),{component:"Column",children:i}}if(u(e,"content","text","label","title")!=null)return n.note("degraded",e.type,"no Basic-catalog equivalent; rendered as Text"),l(e,n);n.note("unsupported",e.type,"no Basic-catalog equivalent and nothing to render");return}var f="v1.0",x="https://a2ui.org/specification/v1_0/catalogs/basic/catalog.json",ie="application/a2ui+json",re="a2ui://",w="root";var We=O("a2ui");function Ye(e){let n=e.children;if(e.type==="Div"&&typeof e.cssClass==="string"&&e.cssClass.startsWith("pf-app-root")&&Array.isArray(n)&&n.length===1)return n[0];return e}function oe(e,n){if(e.type==="Define"){let t=typeof e.name==="string"?e.name:void 0;if(t!=null&&Array.isArray(e.children))n.set(t,e.children)}if(Array.isArray(e.children))for(let t of e.children)oe(t,n)}class se{warn;components=new Map;dataModel=new Map;used=new Set([w]);diagnostics=[];definitions=new Map;counter=0;scope={};slots={};expanding=new Set;constructor(e){this.warn=e}bind(e){return g(e,this.scope)}dyn(e){return C(e,this.scope)}inScope(e,n){let t=this.scope;this.scope={...t,...e};try{return n()}finally{this.scope=t}}withSlots(e,n){let t=this.slots;this.slots={...t,...e};try{return n()}finally{this.slots=t}}slotContent(e){return this.slots[e]}definition(e){if(this.expanding.has(e)){this.note("unsupported","Use",`definition "${e}" uses itself; A2UI has no recursive template`);return}return this.definitions.get(e)}expand(e,n){this.expanding.add(e);try{return n()}finally{this.expanding.delete(e)}}note(e,n,t){if(this.diagnostics.push({kind:e,subject:n,detail:t}),this.warn)We.warn(`${e}: ${n} — ${t}`)}allocate(e){let n=typeof e?.id==="string"&&e.id.length>0?e.id:void 0;if(n!=null&&!this.used.has(n))return this.used.add(n),n;let t;do this.counter+=1,t=`c${this.counter}`;while(this.used.has(t));return this.used.add(t),t}push(e){let n=this.allocate();return this.components.set(n,{id:n,...e}),n}bindData(e,n){let t=e,i=0;while(this.dataModel.has(t))i+=1,t=`${e}${i}`;return this.dataModel.set(t,n),`/${p(t)}`}child(e){return this.emit(e,!1)}children(e){let n=[];for(let t of y(e)){let i=this.emit(t,!1);if(i!=null)n.push(i)}return n}single(e){let n=this.children(e);if(n.length===0)return;if(n.length===1)return n[0];return this.push({component:"Column",children:n})}action(e,n){if(e==null)return;if(Array.isArray(e)){if(e.length===0)return;if(e.length>1)this.note("action",n,`${e.length} actions were bound; A2UI carries one, so the rest were dropped`);return this.action(e[0],n)}if(!d(e))return;let t=e,i=typeof t.action==="string"?t.action:void 0;if(i==null)return;switch(i){case"toolCall":case"callTool":{let r=typeof t.tool==="string"?t.tool:void 0;if(r==null)return;let o=this.eventContext(t.arguments,n);return{event:{name:r,...o!=null&&{context:o}}}}case"sendMessage":return{event:{name:"sendMessage",context:{message:typeof t.message==="string"?t.message:""}}};case"openLink":{let r=typeof t.url==="string"?t.url:typeof t.href==="string"?t.href:void 0;if(r==null)return;return{functionCall:{call:"openUrl",args:{url:r}}}}default:{this.note("action",n,`"${i}" has no renderer-side equivalent; emitted as an agent event`);let{action:r,...o}=t,s=this.eventContext(o,n);return{event:{name:i,...s!=null&&{context:s}}}}}}eventContext(e,n){if(!d(e))return;let t={};for(let[i,r]of Object.entries(e)){if(typeof r==="number"||typeof r==="boolean"||r===null){t[i]=r;continue}if(typeof r!=="string"){this.note("action",n,`argument "${i}" is not a scalar and was dropped from the event context`);continue}let o=g(r);if(o.kind==="unbindable"){this.note("action",n,`argument "${i}" uses "${o.expression}", which A2UI cannot bind; it was dropped`);continue}t[i]=o.kind==="binding"?o.value:o.value}return Object.keys(t).length>0?t:void 0}rollback(e,n){let t=[...this.components.keys()];for(let r=e;r<t.length;r++)if(this.components.delete(t[r]),t[r]!==w)this.used.delete(t[r]);let i=[...this.dataModel.keys()];for(let r=n;r<i.length;r++)this.dataModel.delete(i[r])}emit(e,n){if(typeof e.type!=="string")return;if(ee(e.type)){this.note("unsupported",e.type,"only meaningful inside its parent; emitted standalone it has no meaning");return}let t=this.components.size,i=this.dataModel.size,r=n?w:this.allocate(e);this.components.set(r,void 0);let s=(Q(e.type)??te)(e,this);if(s==null){this.rollback(t,i);return}return this.components.set(r,{id:r,...s}),r}finish(e,n){let t=n.surfaceId??"prefab";for(let[c,pe]of Object.entries(e.defs??{}))this.definitions.set(c,[pe]);if(oe(e.view,this.definitions),this.emit(Ye(e.view),!0)==null)this.note("unsupported","view","nothing in the view could be expressed in A2UI; the surface is empty");let r=[];for(let c of this.components.values())if(c!=null)r.push(c);let o={...Object.fromEntries(this.dataModel),...e.state??{}},s=Object.keys(o).length>0,a=[],A=n.catalogId??x;if(n.stream===!0){if(a.push({version:f,createSurface:{surfaceId:t,catalogId:A,...n.sendDataModel===!0&&{sendDataModel:!0}}}),r.length>0)a.push({version:f,updateComponents:{surfaceId:t,components:r}});if(s)a.push({version:f,updateDataModel:{surfaceId:t,value:o}})}else a.push({version:f,createSurface:{surfaceId:t,catalogId:A,...n.sendDataModel===!0&&{sendDataModel:!0},...r.length>0&&{components:r},...s&&{dataModel:o}}});return{messages:a,diagnostics:this.diagnostics}}}function ae(e,n){let t=n??{};return new se(t.warn===!0).finish(e,t)}var ue="0.3.21";function le(e,n){let t=d(e)?m(e.view):void 0;if(!d(e)||t==null)throw TypeError('PrefabA2UI.emit: expected a $prefab payload with a "view"');return ae({view:t,state:F(e.state),defs:Xe(e.defs)},n)}function Xe(e){if(!d(e))return;let n={};for(let[t,i]of Object.entries(e)){let r=m(i);if(r)n[t]=r}return n}function de(e){return{messages:e}}var ce={emit:le,envelope:de,mappedTypes:ne,VERSION:ue,A2UI_VERSION:f,A2UI_BASIC_CATALOG:x,A2UI_MIME:ie,A2UI_SCHEME:re},Qe=ce;if(typeof window<"u")Object.assign(window,{PrefabA2UI:ce});})();
1
+ (()=>{var{defineProperty:k,getOwnPropertyNames:fe,getOwnPropertyDescriptor:me}=Object,ge=Object.prototype.hasOwnProperty;function he(e){return this[e]}var ye=(e)=>{var n=(L??=new WeakMap).get(e),t;if(n)return n;if(n=k({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function"){for(var i of fe(e))if(!ge.call(n,i))k(n,i,{get:he.bind(e,i),enumerable:!(t=me(e,i))||t.enumerable})}return L.set(e,n),n},L;var Ae=(e)=>e;function be(e,n){this[e]=Ae.bind(null,n)}var Ce=(e,n)=>{for(var t in n)k(e,t,{get:n[t],enumerable:!0,configurable:!0,set:be.bind(n,t)})};var Ze={};Ce(Ze,{default:()=>Qe,emit:()=>le,envelope:()=>de});var J={silent:0,error:1,warn:2,info:3,debug:4},ve="warn";function O(e){let n=e?`[prefab:${e}]`:"[prefab]",t=(i,r,o)=>{if(J[i]>J[ve])return;console[i](`${n} ${r}`,...o)};return{error:(i,...r)=>t("error",i,r),warn:(i,...r)=>t("warn",i,r),info:(i,...r)=>t("info",i,r),debug:(i,...r)=>t("debug",i,r)}}var nn=O();function d(e){return e!=null&&typeof e==="object"&&!Array.isArray(e)}function b(e){return typeof e==="string"?e:void 0}function F(e){return d(e)?e:void 0}function _(e){return Array.isArray(e)?e.filter(d):[]}function U(e){return d(e)&&typeof e.action==="string"}function m(e){if(!d(e)||typeof e.type!=="string")return;let n={type:e.type};for(let[t,i]of Object.entries(e))if(t==="children"){if(Array.isArray(i))n.children=y(i)}else if(t==="onMount"){if(U(i)||Array.isArray(i)&&i.every(U))n.onMount=i}else if(t==="id"||t==="cssClass"){if(typeof i==="string")n[t]=i}else if(t!=="type")n[t]=i;return n}function y(e){if(!Array.isArray(e))return[];let n=[];for(let t of e){let i=m(t);if(i)n.push(i)}return n}var Se=/^(.+?)\s*\|\s*([A-Za-z_][\w]*)\s*(?::\s*(.+))?$/;function j(e){let n=Se.exec(e);if(n==null)return;let t=n[1].trim();if(t.includes("|"))return;let i=n.at(3)?.trim();if(i===void 0)return{base:t,name:n[2]};let r=/^'([^']*)'$|^"([^"]*)"$/.exec(i);if(r!=null){let s=r.at(1)??r.at(2);return{base:t,name:n[2],arg:s??""}}let o=Number(i);if(!Number.isNaN(o))return{base:t,name:n[2],arg:o};return}function T(e,n){return(t)=>({call:{call:"formatDate",args:{value:t,format:e}},note:`the "${n}" pipe renders in the reader's locale; A2UI needs an explicit pattern, so "${e}" was used`})}var xe={currency:(e,n)=>({call:{call:"formatCurrency",args:{value:e,currency:typeof n==="string"?n:"USD"}}}),number:(e,n)=>({call:{call:"formatNumber",args:{value:e,...typeof n==="number"&&{decimals:n}}}}),round:(e,n)=>({call:{call:"formatNumber",args:{value:e,decimals:typeof n==="number"?n:0}}}),pluralize:(e,n)=>{if(typeof n!=="string")return;return{call:{call:"pluralize",args:{value:e,one:n,other:`${n}s`}}}},date:T("y-MM-dd","date"),time:T("HH:mm","time"),datetime:T("y-MM-dd HH:mm","datetime")};function V(e,n){return xe[e.name]?.(n,e.arg)}var we=/^\s*\{\{\s*(.+?)\s*\}\}\s*$/s,ke=/\{\{\s*(.+?)\s*\}\}/g,Oe=/^\$?[A-Za-z_][\w$]*(?:\.(?:[A-Za-z_$][\w$]*|\d+))*$/,H="$index";function p(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function Te(e){return"/"+e.map(p).join("/")}function De(e){return e.startsWith("state.")?e.slice(6):e}function D(e,n){if(!Oe.test(e))return;let t=De(e).split("."),i=t[0],r=Object.hasOwn(n,i)?n[i]:void 0;if(r===void 0){if(i.startsWith("$"))return;return Te(t)}let o=t.slice(1);if(r==="")return o.length===0?void 0:o.map(p).join("/");return o.length===0?r:`${r}/${o.map(p).join("/")}`}function q(e){return e.replace(/\$\{/g,"\\${")}function Re(e,n){let t,i="",r=0;for(let o of e.matchAll(ke)){let s=o[1].trim(),a=D(s,n);if(a==null){t=s;break}i+=q(e.slice(r,o.index)),i+=`\${${a}}`,r=o.index+o[0].length}if(t!=null)return;return i+=q(e.slice(r)),{call:"formatString",args:{value:i}}}function Me(e,n){let t=j(e);if(t==null)return;let i=D(t.base,n),r=i!=null?{path:i}:/^-?\d+(\.\d+)?$/.test(t.base)?Number(t.base):void 0;if(r===void 0)return;let o=V(t,r);if(o==null)return;return{kind:"format",value:o.call,...o.note!=null&&{note:o.note}}}function g(e,n={}){let t=we.exec(e);if(t!=null&&!t[1].includes("{{")&&!t[1].includes("}}")){let o=t[1].trim();if(o===H&&H in n)return{kind:"index",value:{call:"@index"}};let s=D(o,n);if(s!=null)return{kind:"binding",value:{path:s}};let a=Me(o,n);if(a!=null)return a;return{kind:"unbindable",expression:o}}if(!e.includes("{{"))return{kind:"literal",value:e};let r=Re(e,n);if(r!=null)return{kind:"format",value:r};return{kind:"unbindable",expression:e}}function C(e,n={}){if(e==null)return;let t=g(e,n);switch(t.kind){case"literal":return t.value;case"binding":return t.value;case"format":return t.value;case"index":return t.value;default:return}}var Ie=["accountCircle","add","arrowBack","arrowForward","attachFile","calendarToday","call","camera","check","close","delete","download","edit","event","error","fastForward","favorite","favoriteOff","folder","help","home","info","locationOn","lock","lockOpen","mail","menu","moreVert","moreHoriz","notificationsOff","notifications","pause","payment","person","phone","photo","play","print","refresh","rewind","search","send","settings","share","shoppingCart","skipNext","skipPrevious","star","starHalf","starOff","stop","upload","visibility","visibilityOff","volumeDown","volumeMute","volumeOff","volumeUp","warning"],Ee=new Map(Ie.map((e)=>[z(e),e])),Ne={alertcircle:"error",alerttriangle:"warning",alertoctagon:"error",xcircle:"error",circlex:"error",circlealert:"error",checkcircle:"check",circlecheck:"check",checkcircle2:"check",infocircle:"info",circleinfo:"info",helpcircle:"help",circlehelp:"help",bell:"notifications",belloff:"notificationsOff",arrowleft:"arrowBack",arrowright:"arrowForward",chevronleft:"arrowBack",chevronright:"arrowForward",x:"close",plus:"add",trash:"delete",trash2:"delete",ellipsisvertical:"moreVert",ellipsis:"moreHoriz",morehorizontal:"moreHoriz",morevertical:"moreVert",pencil:"edit",pen:"edit",squarepen:"edit",user:"person",usercircle:"accountCircle",circleuser:"accountCircle",eye:"visibility",eyeoff:"visibilityOff",mappin:"locationOn",map:"locationOn",image:"photo",images:"photo",file:"folder",files:"folder",calendar:"calendarToday",calendardays:"calendarToday",clock:"event",creditcard:"payment",cart:"shoppingCart",shoppingbag:"shoppingCart",phonecall:"call",mailopen:"mail",inbox:"mail",cog:"settings",gear:"settings",sliders:"settings",rotatecw:"refresh",rotateccw:"refresh",refreshcw:"refresh",heart:"favorite",heartoff:"favoriteOff",volume:"volumeUp",volume1:"volumeDown",volume2:"volumeUp",volumex:"volumeOff",skipforward:"skipNext",skipback:"skipPrevious",paperclip:"attachFile",link:"share",share2:"share",magnifyingglass:"search",searchicon:"search"};function z(e){return e.replace(/[\s._-]/g,"").toLowerCase()}function G(e){let n=z(e);return Ee.get(n)??Ne[n]}function R(e,...n){for(let t of n){let i=e[t];if(typeof i==="string"||typeof i==="number"||typeof i==="boolean")return String(i)}return}function Pe(e){if(!d(e))return{};return Object.fromEntries(Object.entries(e).map(([n,t])=>[n,y(t)]))}var M={ForEach:(e,n)=>{let t=R(e,"expression");if(t==null){n.note("unsupported","ForEach","no expression to iterate");return}let i=n.bind(t);if(i.kind!=="binding"){n.note("expression","ForEach",`"${t}" is not a plain path, so there is no list to bind`);return}let r=n.inScope({$item:"",$index:""},()=>n.single(e.children));if(r==null){n.note("unsupported","ForEach","the loop body had nothing to render");return}return{component:"Column",children:{path:i.value.path,componentId:r}}},Define:()=>{return},Use:(e,n)=>{let t=R(e,"def","name");if(t==null){n.note("unsupported","Use","no definition name");return}let i=n.definition(t);if(i==null){n.note("unsupported","Use",`no definition named "${t}" was declared`);return}let r=e.overrides,o={};if(r!=null&&typeof r==="object"&&!Array.isArray(r)){let A=n.bindData(`use_${t}`,r);for(let c of Object.keys(r))o[c]=`${A}/${p(c)}`}let s={...Pe(e.slots),...Array.isArray(e.children)&&e.children.length>0?{default:e.children}:{}},a=n.expand(t,()=>n.inScope(o,()=>n.withSlots(s,()=>n.single(i))));if(a==null){n.note("unsupported","Use",`definition "${t}" rendered nothing`);return}return{component:"Column",children:[a]}},Slot:(e,n)=>{let t=R(e,"name")??"default",i=n.slotContent(t)??(Array.isArray(e.children)?e.children:void 0),r=i!=null?n.single(i):void 0;if(r==null){n.note("unsupported","Slot",`slot "${t}" had neither content nor a fallback`);return}return{component:"Column",children:[r]}}};for(let e of["If","Elif","Else","Condition","Match","Case"])M[e]=(n,t)=>{t.note("unsupported",n.type,"A2UI has no declarative conditional; the agent re-sends updateComponents when the shape changes");return};var K=["TableHead","TableBody","TableFooter","TableRow","TableCell","TableHeader","ExpandableRow"];function Be(e){let n=[];for(let t of _(e.columns)){let i=b(t.accessor)??b(t.key);if(i==null)continue;n.push({key:i,header:b(t.header)??i})}return n}function $e(e,n){let t=e.rows;if(typeof t==="string"){let i=g(t);if(i.kind==="binding")return i.value.path;n.note("expression","DataTable",`rows expression "${t}" is not a plain path; the table has no data source`);return}if(Array.isArray(t))return n.bindData("rows",t);n.note("unsupported","DataTable","no rows to render");return}function W(e,n){let t=Be(e);if(t.length===0){n.note("unsupported","DataTable","no usable column definitions");return}let i=$e(e,n);if(i==null)return;let r=n.push({component:"Row",children:t.map((a)=>n.push({component:"Text",text:a.header,variant:"caption"})),align:"center"}),o=n.push({component:"Row",children:t.map((a)=>n.push({component:"Text",text:{path:a.key.split(".").join("/")}})),align:"center"}),s=n.push({component:"Column",children:{path:i,componentId:o}});if(e.search===!0||e.paginated===!0)n.note("degraded","DataTable","search and pagination dropped; A2UI Basic has no table controls");return{component:"Column",children:[r,s]}}function Le(e){let n=[],t=(i)=>{if(i.type==="TableRow"||i.type==="ExpandableRow"){n.push(i);return}if(Array.isArray(i.children))for(let r of i.children)t(r)};if(Array.isArray(e.children))for(let i of e.children)t(i);return n}function Je(e,n){let t=e.type==="TableHeader";if(Array.isArray(e.children)&&e.children.length>0)return n.single(e.children);let i=e.content??e.text??e.label;if(typeof i!=="string"&&typeof i!=="number"&&typeof i!=="boolean")return;let r=String(i),o=C(r);if(o==null){n.note("expression",e.type,`cell expression "${r}" has no A2UI equivalent`);return}return n.push({component:"Text",text:o,...t&&{variant:"caption"}})}function Y(e,n){let t=Le(e),i=[];for(let r of t){let s=(Array.isArray(r.children)?r.children:[]).map((a)=>Je(a,n)).filter((a)=>a!=null);if(s.length===0)continue;i.push(n.push({component:"Row",children:s,align:"center"}))}if(i.length===0){n.note("unsupported","Table","no rows with renderable cells");return}return n.note("degraded","Table","rendered as a Column of Rows; column widths do not align"),{component:"Column",children:i}}function u(e,...n){for(let t of n){let i=e[t];if(typeof i==="string"||typeof i==="number"||typeof i==="boolean")return String(i)}return}function l(e,n,t){let i=u(e,...t?.keys??["content","text","label","title"]);if(i==null){n.note("unsupported",e.type,"no text content to render");return}let r=n.bind(i);if(r.kind==="unbindable")n.note("expression",e.type,`"${r.expression}" is richer than a JSON Pointer; the text was left as written`);let o=t?.prefix??"",s=t?.suffix??"";if(r.kind==="format"&&r.note!=null)n.note("degraded",e.type,r.note);if(r.kind==="binding"||r.kind==="format"||r.kind==="index"){if(o!==""||s!=="")n.note("degraded",e.type,"Markdown emphasis dropped: the text is a data binding");return{component:"Text",text:r.value,...t?.variant!=null&&{variant:t.variant}}}let a=r.kind==="literal"?r.value:i;return{component:"Text",text:`${o}${a}${s}`,...t?.variant!=null&&{variant:t.variant}}}var Ue={start:"start",end:"end",center:"center",between:"spaceBetween",around:"spaceAround",evenly:"spaceEvenly",spaceBetween:"spaceBetween",spaceAround:"spaceAround",spaceEvenly:"spaceEvenly"},Fe={start:"start",end:"end",center:"center",stretch:"stretch",baseline:"baseline"};function v(e){return(n,t)=>{let i=t.children(n.children);if(i.length===0){t.note("unsupported",n.type,`${e} requires at least one child and none survived`);return}let r=typeof n.justify==="string"?Ue[n.justify]:void 0,o=typeof n.align==="string"?Fe[n.align]:void 0;return{component:e,children:i,...r!=null&&{justify:r},...o!=null&&{align:o}}}}var _e=["Div","Container","Stack","Grid","GridItem","Page","Pages","Dashboard","DashboardItem","MasterDetail","Detail","Form","Fieldset","CardContent","CardHeader","CardFooter","Accordion","Carousel","SelectGroup","ComboboxGroup","Section","Article","Aside","Header","Footer","Nav","Span"],je=["ButtonGroup","Toolbar","Inline"],Ve={H1:"# ",H2:"## ",H3:"### ",H4:"#### ",H5:"##### ",H6:"###### "},Z={Heading:(e,n)=>{let t=typeof e.level==="number"?Math.min(6,Math.max(1,e.level)):1;return l(e,n,{prefix:`${"#".repeat(t)} `})},Text:(e,n)=>l(e,n),P:(e,n)=>l(e,n),Lead:(e,n)=>l(e,n),Large:(e,n)=>l(e,n),Small:(e,n)=>l(e,n,{variant:"caption"}),Muted:(e,n)=>l(e,n,{variant:"caption"}),Label:(e,n)=>l(e,n,{variant:"caption"}),TableCaption:(e,n)=>l(e,n,{variant:"caption"}),BlockQuote:(e,n)=>l(e,n,{prefix:"> "}),Code:(e,n)=>l(e,n,{prefix:"`",suffix:"`"}),Kbd:(e,n)=>l(e,n,{prefix:"`",suffix:"`"}),Markdown:(e,n)=>l(e,n),Badge:(e,n)=>l(e,n,{keys:["label","content"],variant:"caption"}),CardTitle:(e,n)=>l(e,n,{prefix:"**",suffix:"**"}),CardDescription:(e,n)=>l(e,n,{variant:"caption"}),Tooltip:(e,n)=>l(e,n,{variant:"caption"}),AlertTitle:(e,n)=>l(e,n,{prefix:"**",suffix:"**"}),AlertDescription:(e,n)=>l(e,n)};for(let[e,n]of Object.entries(Ve))Z[e]=(t,i)=>l(t,i,{prefix:n});function I(e){return(n,t)=>{let i=t.dyn(u(n,"src","url"));if(i==null){t.note("unsupported",n.type,"no resolvable source URL");return}let r=e==="Video"?void 0:t.dyn(u(n,"alt","description")),o=e==="Video"?t.dyn(u(n,"poster","posterUrl")):void 0;return{component:e,url:i,...r!=null&&{description:r},...o!=null&&{posterUrl:o}}}}var He={text:"shortText",email:"shortText",url:"shortText",tel:"shortText",search:"shortText",password:"obscured",number:"number"};function h(e,n){let t=typeof e.name==="string"?e.name:void 0;if(t==null)return;let i=n.bind(`{{ ${t} }}`);return i.kind==="binding"?i.value:void 0}function B(e,n){let t=h(e,n);if(t==null)return;let i=[];if(e.required===!0)i.push({condition:{call:"required",args:{value:t}}});if(e.inputType==="email")i.push({condition:{call:"email",args:{value:t}}});return i.length>0?i:void 0}function qe(e,n){let t=Array.isArray(e.children)?e.children:[],i=[];for(let r of t){let o=u(r,"value");if(o==null){n.note("degraded",e.type,`dropped a ${r.type} child that carries no option value`);continue}i.push({label:u(r,"label")??o,value:o})}return i}function E(e,n,t){if(u(e,"label","name")==null)n.note("degraded",e.type,"no label available for the DateTimeInput");return{component:"DateTimeInput",value:h(e,n)??"",...t}}function N(e){return(n,t)=>{let i=t.dyn(u(n,"label","name"));if(i==null){t.note("unsupported",n.type,"ChoicePicker requires a label and none could be derived");return}let r=qe(n,t);if(r.length===0){t.note("unsupported",n.type,"no options to choose from");return}let o=h(n,t),s=B(n,t);return{component:"ChoicePicker",label:i,variant:e,options:r,...o!=null&&{value:o},...s!=null&&{checks:s}}}}function X(e,n,t){let i=n.dyn(u(e,"label","name"));if(i==null){n.note("unsupported",e.type,"TextField requires a label and none could be derived");return}let r=h(e,n),o=n.dyn(u(e,"placeholder")),s=B(e,n);return{component:"TextField",label:i,variant:t,...r!=null&&{value:r},...o!=null&&{placeholder:o},...s!=null&&{checks:s}}}var P={Input:(e,n)=>{let t=typeof e.inputType==="string"?e.inputType:"text",i=He[t];if(i==null)n.note("degraded",e.type,`inputType "${t}" has no A2UI variant; used shortText`);return X(e,n,i??"shortText")},Textarea:(e,n)=>X(e,n,"longText"),Checkbox:(e,n)=>{let t=n.dyn(u(e,"label","name"));if(t==null){n.note("unsupported",e.type,"CheckBox requires a label and none could be derived");return}let i=B(e,n);return{component:"CheckBox",label:t,value:h(e,n)??!1,...i!=null&&{checks:i}}},Slider:(e,n)=>{let t=typeof e.max==="number"?e.max:void 0;if(t==null){n.note("unsupported",e.type,"Slider requires a max and prefab left it open");return}let i=n.dyn(u(e,"label","name")),r=typeof e.min==="number"?e.min:void 0,o=typeof e.step==="number"?e.step:void 0,s=o!=null&&o>0?Math.max(1,Math.round((t-(r??0))/o)):void 0;return{component:"Slider",max:t,value:h(e,n)??r??0,...i!=null&&{label:i},...r!=null&&{min:r},...s!=null&&{steps:s}}},Button:(e,n)=>{let t=u(e,"label","content")??"Button",i=n.action(e.onClick,"Button")??(e.submit===!0?{event:{name:"submit"}}:void 0);if(i==null){n.note("unsupported",e.type,"Button requires an action and none could be derived");return}let r=n.push({component:"Text",text:n.dyn(t)??t}),o=e.variant==="link"||e.variant==="ghost"?"borderless":e.variant==="default"?"primary":"default";return{component:"Button",child:r,action:i,variant:o}},Link:(e,n)=>{let t=u(e,"href","url");if(t==null){n.note("unsupported",e.type,"no href to open");return}let i=u(e,"content","label")??t;return{component:"Button",child:n.push({component:"Text",text:n.dyn(i)??i}),variant:"borderless",action:{functionCall:{call:"openUrl",args:{url:t}}}}},DatePicker:(e,n)=>E(e,n,{enableDate:!0}),TimePicker:(e,n)=>E(e,n,{enableTime:!0}),DateTimePicker:(e,n)=>E(e,n,{enableDate:!0,enableTime:!0}),Select:(e,n)=>N(e.multiple===!0?"multipleSelection":"mutuallyExclusive")(e,n),RadioGroup:N("mutuallyExclusive"),Combobox:N("mutuallyExclusive")};P.Switch=P.Checkbox;var ze={Card:(e,n)=>{let t=n.single(e.children);if(t==null){n.note("unsupported","Card","Card requires a child and it had none");return}return{component:"Card",child:t}},Alert:(e,n)=>{let t=n.single(e.children);if(t==null){n.note("unsupported","Alert","no alert body to render");return}let i=typeof e.variant==="string"?e.variant:"default";return n.note("degraded","Alert",`variant "${i}" rendered as a plain Card`),{component:"Card",child:t}},Separator:()=>({component:"Divider"}),Divider:()=>({component:"Divider"}),Icon:(e,n)=>{let t=u(e,"name","icon");if(t==null){n.note("unsupported","Icon","no icon name");return}let i=G(t);if(i==null){n.note("unsupported","Icon",`"${t}" has no equivalent in the A2UI icon set`);return}if(i!==t)n.note("degraded","Icon",`"${t}" mapped to the A2UI icon "${i}"`);return{component:"Icon",name:i}},Metric:(e,n)=>{let t=[],i=u(e,"label","title");if(i!=null)t.push(n.push({component:"Text",text:n.dyn(i)??i,variant:"caption"}));let r=u(e,"value");if(r!=null)t.push(n.push({component:"Text",text:n.dyn(r)??r}));if(t.length===0){n.note("unsupported","Metric","neither a label nor a value to render");return}return n.note("degraded","Metric","rendered as a Column of Text; trend and delta styling dropped"),{component:"Column",children:t}},Tabs:(e,n)=>{let t=Array.isArray(e.children)?e.children:[],i=[];for(let r of t){let o=n.single(r.children);if(o==null)continue;i.push({title:u(r,"title")??"Tab",child:o})}if(i.length===0){n.note("unsupported","Tabs","no tab had renderable content");return}return{component:"Tabs",tabs:i}},Dialog:(e,n)=>{let t=n.single(e.children);if(t==null){n.note("unsupported","Dialog","no dialog body to render");return}let i=m(e.trigger),r=i!=null?u(i,"label","content")??u(e,"title")??"Open":u(e,"title")??"Open";return{component:"Modal",trigger:(i!=null?n.child(i):void 0)??n.push({component:"Text",text:n.dyn(r)??r}),content:t}},AccordionItem:(e,n)=>{let t=[],i=u(e,"title");if(i!=null)t.push(n.push({component:"Text",text:i,variant:"caption"}));if(t.push(...n.children(e.children)),t.length===0){n.note("unsupported","AccordionItem","nothing to render");return}return n.note("degraded","AccordionItem","rendered expanded; A2UI Basic has no disclosure component"),{component:"Column",children:t}}},S={Column:v("Column"),Row:v("Row"),...Z,...P,...ze,...M,Image:I("Image"),Video:I("Video"),Audio:I("AudioPlayer"),Table:Y,DataTable:W};for(let e of _e)S[e]??=v("Column");for(let e of je)S[e]??=v("Row");var Ge=new Set(["Tab","SelectOption","ComboboxOption","Radio","Option",...K]),Ke={LineChart:"charts",BarChart:"charts",AreaChart:"charts",PieChart:"charts",ScatterChart:"charts",RadarChart:"charts",RadialChart:"charts",Histogram:"charts",Sparkline:"charts",Svg:"inline vector graphics",Mermaid:"diagrams",Embed:"embedded frames",DropZone:"file uploads",Ring:"progress rings",Loader:"loading indicators",Progress:"progress bars"};function Q(e){return S[e]}function ee(e){return Ge.has(e)}function ne(){return Object.keys(S).sort()}function te(e,n){let t=Ke[e.type];if(t!=null){n.note("unsupported",e.type,`${t} are outside the A2UI Basic catalog`);return}if(Array.isArray(e.children)&&e.children.length>0){let i=n.children(e.children);if(i.length>0)return n.note("degraded",e.type,"no Basic-catalog equivalent; flattened to a Column"),{component:"Column",children:i}}if(u(e,"content","text","label","title")!=null)return n.note("degraded",e.type,"no Basic-catalog equivalent; rendered as Text"),l(e,n);n.note("unsupported",e.type,"no Basic-catalog equivalent and nothing to render");return}var f="v1.0",x="https://a2ui.org/specification/v1_0/catalogs/basic/catalog.json",ie="application/a2ui+json",re="a2ui://",w="root";var We=O("a2ui");function Ye(e){let n=e.children;if(e.type==="Div"&&typeof e.cssClass==="string"&&e.cssClass.startsWith("pf-app-root")&&Array.isArray(n)&&n.length===1)return n[0];return e}function oe(e,n){if(e.type==="Define"){let t=typeof e.name==="string"?e.name:void 0;if(t!=null&&Array.isArray(e.children))n.set(t,e.children)}if(Array.isArray(e.children))for(let t of e.children)oe(t,n)}class se{warn;components=new Map;dataModel=new Map;used=new Set([w]);diagnostics=[];definitions=new Map;counter=0;scope={};slots={};expanding=new Set;constructor(e){this.warn=e}bind(e){return g(e,this.scope)}dyn(e){return C(e,this.scope)}inScope(e,n){let t=this.scope;this.scope={...t,...e};try{return n()}finally{this.scope=t}}withSlots(e,n){let t=this.slots;this.slots={...t,...e};try{return n()}finally{this.slots=t}}slotContent(e){return this.slots[e]}definition(e){if(this.expanding.has(e)){this.note("unsupported","Use",`definition "${e}" uses itself; A2UI has no recursive template`);return}return this.definitions.get(e)}expand(e,n){this.expanding.add(e);try{return n()}finally{this.expanding.delete(e)}}note(e,n,t){if(this.diagnostics.push({kind:e,subject:n,detail:t}),this.warn)We.warn(`${e}: ${n} — ${t}`)}allocate(e){let n=typeof e?.id==="string"&&e.id.length>0?e.id:void 0;if(n!=null&&!this.used.has(n))return this.used.add(n),n;let t;do this.counter+=1,t=`c${this.counter}`;while(this.used.has(t));return this.used.add(t),t}push(e){let n=this.allocate();return this.components.set(n,{id:n,...e}),n}bindData(e,n){let t=e,i=0;while(this.dataModel.has(t))i+=1,t=`${e}${i}`;return this.dataModel.set(t,n),`/${p(t)}`}child(e){return this.emit(e,!1)}children(e){let n=[];for(let t of y(e)){let i=this.emit(t,!1);if(i!=null)n.push(i)}return n}single(e){let n=this.children(e);if(n.length===0)return;if(n.length===1)return n[0];return this.push({component:"Column",children:n})}action(e,n){if(e==null)return;if(Array.isArray(e)){if(e.length===0)return;if(e.length>1)this.note("action",n,`${e.length} actions were bound; A2UI carries one, so the rest were dropped`);return this.action(e[0],n)}if(!d(e))return;let t=e,i=typeof t.action==="string"?t.action:void 0;if(i==null)return;switch(i){case"toolCall":case"callTool":{let r=typeof t.tool==="string"?t.tool:void 0;if(r==null)return;let o=this.eventContext(t.arguments,n);return{event:{name:r,...o!=null&&{context:o}}}}case"sendMessage":return{event:{name:"sendMessage",context:{message:typeof t.message==="string"?t.message:""}}};case"openLink":{let r=typeof t.url==="string"?t.url:typeof t.href==="string"?t.href:void 0;if(r==null)return;return{functionCall:{call:"openUrl",args:{url:r}}}}default:{this.note("action",n,`"${i}" has no renderer-side equivalent; emitted as an agent event`);let{action:r,...o}=t,s=this.eventContext(o,n);return{event:{name:i,...s!=null&&{context:s}}}}}}eventContext(e,n){if(!d(e))return;let t={};for(let[i,r]of Object.entries(e)){if(typeof r==="number"||typeof r==="boolean"||r===null){t[i]=r;continue}if(typeof r!=="string"){this.note("action",n,`argument "${i}" is not a scalar and was dropped from the event context`);continue}let o=g(r);if(o.kind==="unbindable"){this.note("action",n,`argument "${i}" uses "${o.expression}", which A2UI cannot bind; it was dropped`);continue}t[i]=o.kind==="binding"?o.value:o.value}return Object.keys(t).length>0?t:void 0}rollback(e,n){let t=[...this.components.keys()];for(let r=e;r<t.length;r++)if(this.components.delete(t[r]),t[r]!==w)this.used.delete(t[r]);let i=[...this.dataModel.keys()];for(let r=n;r<i.length;r++)this.dataModel.delete(i[r])}emit(e,n){if(typeof e.type!=="string")return;if(ee(e.type)){this.note("unsupported",e.type,"only meaningful inside its parent; emitted standalone it has no meaning");return}let t=this.components.size,i=this.dataModel.size,r=n?w:this.allocate(e);this.components.set(r,void 0);let s=(Q(e.type)??te)(e,this);if(s==null){this.rollback(t,i);return}return this.components.set(r,{id:r,...s}),r}finish(e,n){let t=n.surfaceId??"prefab";for(let[c,pe]of Object.entries(e.defs??{}))this.definitions.set(c,[pe]);if(oe(e.view,this.definitions),this.emit(Ye(e.view),!0)==null)this.note("unsupported","view","nothing in the view could be expressed in A2UI; the surface is empty");let r=[];for(let c of this.components.values())if(c!=null)r.push(c);let o={...Object.fromEntries(this.dataModel),...e.state??{}},s=Object.keys(o).length>0,a=[],A=n.catalogId??x;if(n.stream===!0){if(a.push({version:f,createSurface:{surfaceId:t,catalogId:A,...n.sendDataModel===!0&&{sendDataModel:!0}}}),r.length>0)a.push({version:f,updateComponents:{surfaceId:t,components:r}});if(s)a.push({version:f,updateDataModel:{surfaceId:t,value:o}})}else a.push({version:f,createSurface:{surfaceId:t,catalogId:A,...n.sendDataModel===!0&&{sendDataModel:!0},...r.length>0&&{components:r},...s&&{dataModel:o}}});return{messages:a,diagnostics:this.diagnostics}}}function ae(e,n){let t=n??{};return new se(t.warn===!0).finish(e,t)}var ue="0.3.22";function le(e,n){let t=d(e)?m(e.view):void 0;if(!d(e)||t==null)throw TypeError('PrefabA2UI.emit: expected a $prefab payload with a "view"');return ae({view:t,state:F(e.state),defs:Xe(e.defs)},n)}function Xe(e){if(!d(e))return;let n={};for(let[t,i]of Object.entries(e)){let r=m(i);if(r)n[t]=r}return n}function de(e){return{messages:e}}var ce={emit:le,envelope:de,mappedTypes:ne,VERSION:ue,A2UI_VERSION:f,A2UI_BASIC_CATALOG:x,A2UI_MIME:ie,A2UI_SCHEME:re},Qe=ce;if(typeof window<"u")Object.assign(window,{PrefabA2UI:ce});})();
@@ -1,5 +1,5 @@
1
1
  /** Package version, stamped by `release.yml`. Identifies the app to MCP Apps hosts and pins the CDN URL. */
2
- export declare const VERSION = "0.3.21";
2
+ export declare const VERSION = "0.3.22";
3
3
  /** `$prefab.version` of the wire format, matching upstream PrefectHQ/prefab 0.3; the renderer still reads 0.2. */
4
4
  export declare const PROTOCOL_VERSION = "0.3";
5
5
  //# sourceMappingURL=version.d.ts.map
@@ -1,5 +1,5 @@
1
1
  /** Package version, stamped by `release.yml`. Identifies the app to MCP Apps hosts and pins the CDN URL. */
2
- export const VERSION = '0.3.21';
2
+ export const VERSION = '0.3.22';
3
3
  /** `$prefab.version` of the wire format, matching upstream PrefectHQ/prefab 0.3; the renderer still reads 0.2. */
4
4
  export const PROTOCOL_VERSION = '0.3';
5
5
  //# sourceMappingURL=version.js.map
package/dist/index.d.ts CHANGED
@@ -55,7 +55,7 @@ export { toolResult } from './mcp/result.js';
55
55
  export type { ToolResultOptions } from './mcp/result.js';
56
56
  export { themeBridgeCss, VSCODE_BRIDGE } from './mcp/theme-bridge.js';
57
57
  export type { ThemeBridge, VsCodeTokenSource } from './mcp/theme-bridge.js';
58
- export { resourceMeta, registerViewerResource, rendererHtml, PREFAB_CDN_META, PREFAB_RESOURCE_URI, MCP_APP_MIME, APPS_EXTENSION, DEFAULT_VIEWER_CACHE } from './mcp/resource.js';
58
+ export { resourceMeta, registerViewerResource, rendererHtml, PREFAB_CDN_META, PREFAB_RESOURCE_URI, uiToolMeta, MCP_APP_MIME, APPS_EXTENSION, DEFAULT_VIEWER_CACHE } from './mcp/resource.js';
59
59
  export type { McpAppCsp, McpAppPermissions, ResourceMetaOptions, RendererHtmlOptions, ViewerResourceOptions, McpServerLike, ResourceConfig, ResourceReadHandler } from './mcp/resource.js';
60
60
  export type { McpToolResult, McpDisplayResult, McpContent, McpTextContent, McpImageContent, McpResourceContent, McpTextResourceContents, McpBlobResourceContents, McpCacheScope, McpCacheHint, McpResourceReadResult } from './mcp/types.js';
61
61
  export { formSchema, formInputRequest, acceptedFormInput, inputResponse } from './mcp/input-required.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAClF,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC1G,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC1E,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC3E,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9E,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAGxD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AACtD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAGpD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC7J,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAGlF,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAA;AAG5J,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAGlH,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AACxH,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAG/G,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAGrJ,OAAO,EACL,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAC1C,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAC/D,QAAQ,EAAE,MAAM,EAAE,MAAM,EACxB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EACzE,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAC7D,UAAU,GACX,MAAM,4BAA4B,CAAA;AACnC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAGlG,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AAGtI,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAA;AAG1F,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAGjF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAGhG,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAGxE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AACpJ,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,qBAAqB,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAG1N,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAC9F,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAC1E,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAClE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACpF,YAAY,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACnF,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACjE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC1E,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAChF,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAG/E,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClK,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAC3K,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC3E,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAChL,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC1L,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,aAAa,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAC5O,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACxG,YAAY,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACjF,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAG7K,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACjH,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACvK,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC/G,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAG5E,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACtL,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACvE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtK,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC3F,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAC/D,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAC7D,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -50,7 +50,7 @@ export { autoProgress } from './auto/progress.js';
50
50
  export { display, display_form, display_update, display_error, display_success, displayForm, displayUpdate, displayError, displaySuccess } from './mcp/display.js';
51
51
  export { toolResult } from './mcp/result.js';
52
52
  export { themeBridgeCss, VSCODE_BRIDGE } from './mcp/theme-bridge.js';
53
- export { resourceMeta, registerViewerResource, rendererHtml, PREFAB_CDN_META, PREFAB_RESOURCE_URI, MCP_APP_MIME, APPS_EXTENSION, DEFAULT_VIEWER_CACHE } from './mcp/resource.js';
53
+ export { resourceMeta, registerViewerResource, rendererHtml, PREFAB_CDN_META, PREFAB_RESOURCE_URI, uiToolMeta, MCP_APP_MIME, APPS_EXTENSION, DEFAULT_VIEWER_CACHE } from './mcp/resource.js';
54
54
  export { formSchema, formInputRequest, acceptedFormInput, inputResponse } from './mcp/input-required.js';
55
55
  // ── A2UI ─────────────────────────────────────────────────────────────────────
56
56
  export { emitA2UI, mappedTypes, A2UI_VERSION, A2UI_BASIC_CATALOG, A2UI_MIME, A2UI_SCHEME } from './a2ui/index.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,gFAAgF;AAChF,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAElF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAE1E,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9E,gFAAgF;AAChF,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAGrD,gFAAgF;AAChF,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAG7J,gFAAgF;AAChF,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAA;AAE5J,gFAAgF;AAChF,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAElH,gFAAgF;AAChF,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AAGxH,gFAAgF;AAChF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAErJ,gFAAgF;AAChF,OAAO,EACL,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAC1C,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAC/D,QAAQ,EAAE,MAAM,EAAE,MAAM,EACxB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EACzE,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAC7D,UAAU,GACX,MAAM,4BAA4B,CAAA;AAGnC,gFAAgF;AAChF,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AAEtI,gFAAgF;AAChF,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAA;AAE1F,gFAAgF;AAChF,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAEjF,gFAAgF;AAChF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAEhG,gFAAgF;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAGrD,gFAAgF;AAChF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAGpJ,gFAAgF;AAChF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAC9F,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAUjD,gFAAgF;AAChF,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAElK,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErE,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAG5L,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAIxG,gFAAgF;AAChF,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAEjH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAG/G,gFAAgF;AAChF,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEtL,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtK,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC3F,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAE/D,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA"}
@@ -11,7 +11,7 @@ export { display_a2ui, displayA2ui, registerA2uiResource, a2uiPayload, A2UI_RESO
11
11
  export type { DisplayA2uiOptions, A2uiResourceOptions } from './a2ui.js';
12
12
  export { themeBridgeCss, VSCODE_BRIDGE } from './theme-bridge.js';
13
13
  export type { ThemeBridge, VsCodeTokenSource } from './theme-bridge.js';
14
- export { resourceMeta, registerViewerResource, rendererHtml, resolveCache, PREFAB_CDN_META, PREFAB_RESOURCE_URI, MCP_APP_MIME, APPS_EXTENSION, DEFAULT_VIEWER_CACHE, } from './resource.js';
14
+ export { resourceMeta, registerViewerResource, rendererHtml, resolveCache, PREFAB_CDN_META, PREFAB_RESOURCE_URI, uiToolMeta, MCP_APP_MIME, APPS_EXTENSION, DEFAULT_VIEWER_CACHE, } from './resource.js';
15
15
  export type { McpAppCsp, McpAppPermissions, ResourceMetaOptions, RendererHtmlOptions, ViewerResourceOptions, McpServerLike, ResourceConfig, ResourceReadHandler, } from './resource.js';
16
16
  export type { McpToolResult, McpDisplayResult, McpContent, McpTextContent, McpImageContent, McpResourceContent, McpTextResourceContents, McpBlobResourceContents, McpCacheScope, McpCacheHint, McpResourceReadResult } from './types.js';
17
17
  export type { McpStringSchema, McpNumberSchema, McpBooleanSchema, McpEnumSchema, McpMultiEnumSchema, McpPrimitiveSchema, McpRestrictedSchema, McpElicitFormRequest, McpElicitUrlRequest, McpElicitRequest, McpElicitResult, McpInputRequests, McpInputResponses, McpInputRequiredResult, } from './types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC9J,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,gBAAgB,GACjB,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACpG,YAAY,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAE7E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC3G,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAExE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAEvE,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,oBAAoB,GACrB,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,mBAAmB,GACpB,MAAM,eAAe,CAAA;AAEtB,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,aAAa,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAExO,YAAY,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC9J,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,gBAAgB,GACjB,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACpG,YAAY,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAE7E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC3G,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAExE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAEvE,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,oBAAoB,GACrB,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,mBAAmB,GACpB,MAAM,eAAe,CAAA;AAEtB,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,aAAa,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAExO,YAAY,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,YAAY,CAAA"}
package/dist/mcp/index.js CHANGED
@@ -6,5 +6,5 @@ export { toolResult } from './result.js';
6
6
  export { formSchema, formInputRequest, acceptedFormInput, inputResponse } from './input-required.js';
7
7
  export { display_a2ui, displayA2ui, registerA2uiResource, a2uiPayload, A2UI_RESOURCE_URI } from './a2ui.js';
8
8
  export { themeBridgeCss, VSCODE_BRIDGE } from './theme-bridge.js';
9
- export { resourceMeta, registerViewerResource, rendererHtml, resolveCache, PREFAB_CDN_META, PREFAB_RESOURCE_URI, MCP_APP_MIME, APPS_EXTENSION, DEFAULT_VIEWER_CACHE, } from './resource.js';
9
+ export { resourceMeta, registerViewerResource, rendererHtml, resolveCache, PREFAB_CDN_META, PREFAB_RESOURCE_URI, uiToolMeta, MCP_APP_MIME, APPS_EXTENSION, DEFAULT_VIEWER_CACHE, } from './resource.js';
10
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAW9J,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGpG,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG3G,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGjE,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,oBAAoB,GACrB,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAW9J,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGpG,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG3G,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGjE,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,oBAAoB,GACrB,MAAM,eAAe,CAAA"}
@@ -61,7 +61,7 @@ interface McpAppPermissionsWire {
61
61
  * server.registerTool('browse', {
62
62
  * title: 'Browse',
63
63
  * inputSchema: schema,
64
- * _meta: { ui: { resourceUri: 'ui://my/viewer' } },
64
+ * _meta: uiToolMeta('ui://my/viewer'),
65
65
  * }, (args) => display(autoTable(rows)))
66
66
  * ```
67
67
  */
@@ -80,6 +80,12 @@ export declare const PREFAB_CDN_META: {
80
80
  };
81
81
  /** Default URI for the prefab viewer resource. */
82
82
  export declare const PREFAB_RESOURCE_URI = "ui://prefab/viewer";
83
+ /** The tool-definition `_meta` that points an MCP Apps host at a `ui://` renderer, the prefab viewer by default. */
84
+ export declare function uiToolMeta(resourceUri?: string): {
85
+ ui: {
86
+ resourceUri: string;
87
+ };
88
+ };
83
89
  /** MIME type required by MCP Apps hosts. */
84
90
  export declare const MCP_APP_MIME = "text/html;profile=mcp-app";
85
91
  /** The MCP Apps extension id, `…/ui` per the spec and ext-apps (`…/apps` in some SDK doc examples is only illustrative). */
@@ -167,7 +173,7 @@ export declare function resolveCache(hint?: McpCacheHint, defaults?: Required<Mc
167
173
  *
168
174
  * @example
169
175
  * ```ts
170
- * import { registerViewerResource, PREFAB_RESOURCE_URI, display } from '@maxhealth.tech/prefab/mcp'
176
+ * import { registerViewerResource, uiToolMeta, display } from '@maxhealth.tech/prefab/mcp'
171
177
  *
172
178
  * registerViewerResource(server)
173
179
  *
@@ -175,7 +181,7 @@ export declare function resolveCache(hint?: McpCacheHint, defaults?: Required<Mc
175
181
  * server.registerTool('browse', {
176
182
  * title: 'Browse patients',
177
183
  * inputSchema: { query: z.string() },
178
- * _meta: { ui: { resourceUri: PREFAB_RESOURCE_URI } },
184
+ * _meta: uiToolMeta(),
179
185
  * }, async (args) => display(autoTable(await search(args.query))))
180
186
  * ```
181
187
  */
@@ -1 +1 @@
1
- {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../src/mcp/resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../src/mcp/resource.ts"],"names":[],"mappings":"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"}
@@ -29,7 +29,7 @@ const log = createLogger('mcp');
29
29
  * server.registerTool('browse', {
30
30
  * title: 'Browse',
31
31
  * inputSchema: schema,
32
- * _meta: { ui: { resourceUri: 'ui://my/viewer' } },
32
+ * _meta: uiToolMeta('ui://my/viewer'),
33
33
  * }, (args) => display(autoTable(rows)))
34
34
  * ```
35
35
  */
@@ -63,6 +63,10 @@ export const PREFAB_CDN_META = resourceMeta({
63
63
  // ── Constants ────────────────────────────────────────────────────────────────
64
64
  /** Default URI for the prefab viewer resource. */
65
65
  export const PREFAB_RESOURCE_URI = 'ui://prefab/viewer';
66
+ /** The tool-definition `_meta` that points an MCP Apps host at a `ui://` renderer, the prefab viewer by default. */
67
+ export function uiToolMeta(resourceUri = PREFAB_RESOURCE_URI) {
68
+ return { ui: { resourceUri } };
69
+ }
66
70
  /** MIME type required by MCP Apps hosts. */
67
71
  export const MCP_APP_MIME = 'text/html;profile=mcp-app';
68
72
  /** The MCP Apps extension id, `…/ui` per the spec and ext-apps (`…/apps` in some SDK doc examples is only illustrative). */
@@ -148,7 +152,7 @@ function declareAppsExtension(server) {
148
152
  *
149
153
  * @example
150
154
  * ```ts
151
- * import { registerViewerResource, PREFAB_RESOURCE_URI, display } from '@maxhealth.tech/prefab/mcp'
155
+ * import { registerViewerResource, uiToolMeta, display } from '@maxhealth.tech/prefab/mcp'
152
156
  *
153
157
  * registerViewerResource(server)
154
158
  *
@@ -156,7 +160,7 @@ function declareAppsExtension(server) {
156
160
  * server.registerTool('browse', {
157
161
  * title: 'Browse patients',
158
162
  * inputSchema: { query: z.string() },
159
- * _meta: { ui: { resourceUri: PREFAB_RESOURCE_URI } },
163
+ * _meta: uiToolMeta(),
160
164
  * }, async (args) => display(autoTable(await search(args.query))))
161
165
  * ```
162
166
  */
@@ -1 +1 @@
1
- {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../src/mcp/resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../src/mcp/resource.ts"],"names":[],"mappings":"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"}
@@ -13,4 +13,4 @@ ${n}
13
13
  ${Ht(e.dark," ")}
14
14
  }
15
15
  }`)}return t.join(`
16
- `)}function Se(e,t){e.setAttribute("data-theme",t),e.classList.toggle("dark",t==="dark"),e.classList.toggle("light",t==="light")}function Dt(e,t){if(!t)return;if(t.light)for(let[n,o]of Object.entries(t.light))e.style.setProperty(`--${Ot(n)}`,$t(o));if(t.dark){let o=document.getElementById("prefab-dark-theme");if(!o)o=document.createElement("style"),o.id="prefab-dark-theme",document.head.appendChild(o);o.textContent=co({dark:t.dark})}}function It(e,t){if(!e||typeof document>"u")return;let n=(o)=>{for(let[r,i]of Object.entries(e))if(ds(r,o))o.preventDefault(),t(i)};return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)}function ds(e,t){let n=e.toLowerCase().split("+").map((i)=>i.trim()),o=n[n.length-1],r=new Set(n.slice(0,-1));if(r.has("ctrl")!==(t.ctrlKey||t.metaKey))return!1;if(r.has("shift")!==t.shiftKey)return!1;if(r.has("alt")!==t.altKey)return!1;return t.key.toLowerCase()===o}var po='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z"/></svg>',uo='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.72 9.72 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z"/></svg>',fo={"top-right":"top: 8px; right: 8px;","top-left":"top: 8px; left: 8px;","bottom-right":"bottom: 8px; right: 8px;","bottom-left":"bottom: 8px; left: 8px;"};function ps(e,t){try{let o=localStorage.getItem(t);if(o==="light"||o==="dark")return o}catch{}let n=e.getAttribute("data-theme")??document.documentElement.getAttribute("data-theme");if(n==="light"||n==="dark")return n;if(typeof window<"u"&&window.matchMedia("(prefers-color-scheme: light)").matches)return"light";return"dark"}function jt(e,t){if(typeof document>"u")return()=>{};let n=t?.position??"top-right",o=t?.storageKey??"prefab-theme",r=t?.syncDocument??!0,i=getComputedStyle(e).position;if(i==="static"||i==="")e.style.position="relative";let s=document.createElement("button");s.className="pf-theme-toggle",s.setAttribute("aria-label","Toggle theme"),s.setAttribute("title","Toggle light/dark"),Object.assign(s.style,{position:"absolute",zIndex:"100",width:"28px",height:"28px",border:"1px solid var(--border, #e5e7eb)",borderRadius:"6px",background:"var(--card, rgba(255,255,255,0.8))",color:"var(--foreground, #333)",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",padding:"0",opacity:"0.7",transition:"opacity 0.15s, border-color 0.15s"});let a=fo[n]??fo["top-right"];for(let d of a.split(";")){let[g,m]=d.split(":").map((b)=>b.trim());if(g&&m)s.style.setProperty(g,m)}s.addEventListener("mouseenter",()=>{s.style.opacity="1"}),s.addEventListener("mouseleave",()=>{s.style.opacity="0.7"});function l(d){if(Se(e,d),r)Se(document.documentElement,d);s.innerHTML=d==="dark"?uo:po;try{localStorage.setItem(o,d)}catch{}}let c=ps(e,o);l(c),s.addEventListener("click",()=>{let d=e.getAttribute("data-theme")??"dark";l(d==="dark"?"light":"dark")}),e.appendChild(s);let u;if(r)u=new MutationObserver((d)=>{for(let g of d)if(g.type==="attributes"&&g.attributeName==="data-theme"){let m=document.documentElement.getAttribute("data-theme");if((m==="light"||m==="dark")&&m!==e.getAttribute("data-theme")){Se(e,m),s.innerHTML=m==="dark"?uo:po;try{localStorage.setItem(o,m)}catch{}}}}),u.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]});return()=>{u?.disconnect(),s.remove()}}function Ze(e){let t=e?.baseUrl??(typeof window<"u"?window.location.origin:""),n={"Content-Type":"application/json",...e?.headers},o=e?.fetch??globalThis.fetch.bind(globalThis);return{async callTool(r,i){let s=await o(`${t}/mcp/tools/call`,{method:"POST",headers:n,body:JSON.stringify({jsonrpc:"2.0",method:"tools/call",params:{name:r,arguments:i}})});if(!s.ok)throw Error(`MCP tool call failed: ${s.status} ${s.statusText}`);let a=await s.json(),l=H(a);if(!l)return a;if(Boolean(l.error))throw Error(y(H(l.error)?.message)??"MCP tool call returned error");let u=K(H(l.result)?.content??l.content);for(let d of u)if(d.type==="text"&&typeof d.text==="string"){try{return JSON.parse(d.text)}catch{}return d.text}return l.result??l},async sendMessage(r){await o(`${t}/mcp/messages`,{method:"POST",headers:n,body:JSON.stringify({message:r})})}}}function Qe(){return{callTool(e){return N.warn(`No MCP transport: callTool('${e}') ignored`),Promise.resolve(null)},sendMessage(e){return N.warn("No MCP transport: sendMessage ignored",e),Promise.resolve()}}}var mo="0.3.21";var us=["light","dark","auto"],fs=["inline","fullscreen","pip"];function go(e){return k(e)&&typeof e.type==="string"&&(e.id===void 0||typeof e.id==="string")&&(e.payload===void 0||k(e.payload))}function et(e){return typeof e==="boolean"?e:void 0}function ho(e){let t=H(e.capabilities)??{},n=H(e.theme),o=H(e.toolInput),r=H(e.meta);return{hostName:y(e.hostName),hostVersion:y(e.hostVersion),capabilities:{toast:et(t.toast),clipboard:et(t.clipboard),navigation:et(t.navigation),messaging:et(t.messaging),displayModes:Ft(t.displayModes)},...n&&{theme:ms(n)},...o&&{toolInput:o},...r&&{meta:r}}}function ms(e){let t=y(e.fontCss);return{...tt({theme:e.colorScheme,styles:{variables:e.variables}}),...t!=null&&{fontCss:t}}}function Ft(e){let t=Array.isArray(e)?e:[];return fs.filter((n)=>t.includes(n))}function tt(e){let t={},n=us.find((s)=>s===e.theme);if(n)t.colorScheme=n;let o=H(e.styles),r=H(o?.variables);if(r)t.variables=Object.fromEntries(Object.entries(r).filter((s)=>typeof s[1]==="string"));let i=y(H(o?.css)?.fonts);if(i!=null)t.fontCss=i;return t}function gs(e){return k(e)&&e.jsonrpc==="2.0"}class Ae{hostOrigin;listeners=new Map;protocol="prefab";cleanup;pending=new Map;callIdCounter=0;rpcPending=new Map;rpcIdCounter=0;sentRpcIds=new Set;postFn;_hostSupportsSubscriptions=!1;constructor(e="*"){this.hostOrigin=e}connect(){if(typeof window>"u")return;let e=ys();if(e)this.postFn=(n)=>e.postMessage(n);let t=(n)=>{if(this.hostOrigin!=="*"&&n.origin!==this.hostOrigin)return;let o=n.data;if(gs(o)){this.handleJsonRpc(o);return}if(!go(o)||!o.type.startsWith("prefab:"))return;let r=o;if(r.type==="prefab:tool-call-response"&&r.id){let s=this.pending.get(r.id);if(s){if(this.pending.delete(r.id),r.payload?.error!=null)s.reject(Error(v(r.payload.error)));else s.resolve(r.payload?.result);return}}let i=this.listeners.get(r.type);if(i)for(let s of i)s(r.payload??{})};window.addEventListener("message",t),this.cleanup=()=>window.removeEventListener("message",t)}async initialize(e){try{return await Promise.any([this.initPrefab(e),this.initJsonRpc(e)])}catch(t){let n=t instanceof AggregateError?t.errors.map((o)=>o.message).join("; "):String(t);throw Error(`Bridge init failed — no host responded. Tried: ${n}`,{cause:t})}}createTransport(){if(this.protocol==="jsonrpc")return this.createJsonRpcTransport();return this.createPrefabTransport()}requestMode(e){if(this.protocol==="jsonrpc")this.sendRpcRequest("ui/request-display-mode",{mode:e});else this.sendPrefab("prefab:request-mode",{mode:e})}openLink(e,t){if(this.protocol==="jsonrpc")this.sendRpcRequest("ui/open-link",{url:e,target:t});else this.sendPrefab("prefab:open-link",{url:e,target:t})}updateContext(e){if(this.protocol==="jsonrpc")this.sendRpcRequest("ui/update-model-context",{structuredContent:e});else this.sendPrefab("prefab:update-context",{context:e})}setupAutoResize(e){if(typeof ResizeObserver>"u")return yo;let t=-1,n=-1,o=(s,a)=>{if(s===t&&a===n)return;if(t=s,n=a,this.protocol==="jsonrpc")this.sendRpcNotification("ui/notifications/size-changed",{width:s,height:a});else this.sendPrefab("prefab:size-changed",{width:s,height:a})},r=new ResizeObserver((s)=>{for(let a of s)if(a.borderBoxSize.length){let l=a.borderBoxSize[0];o(Math.ceil(l.inlineSize),Math.ceil(l.blockSize))}else{let l=a.target.getBoundingClientRect();o(Math.ceil(l.width),Math.ceil(l.height))}});r.observe(e);let i=e.getBoundingClientRect();return o(Math.ceil(i.width),Math.ceil(i.height)),()=>r.disconnect()}notifyPreferredSize(e){if(this.protocol==="jsonrpc")this.sendRpcNotification("ui/notifications/preferred-size",e);else this.sendPrefab("prefab:preferred-size",e)}subscribe(e,t,n){let o=(r)=>{if(r.uri!==e)return;t(r.contents??r.data??r)};if(this.protocol==="jsonrpc")this.on("prefab:resource-updated",o),this.sendRpcRequest("resources/subscribe",{uri:e}).catch((r)=>{this.off("prefab:resource-updated",o),n?.(r)});else this.on("prefab:resource-updated",o),this.sendPrefab("prefab:subscribe",{uri:e});return()=>{if(this.off("prefab:resource-updated",o),this.protocol==="jsonrpc")this.sendRpcRequest("resources/unsubscribe",{uri:e}).catch(yo);else this.sendPrefab("prefab:unsubscribe",{uri:e})}}get supportsSubscriptions(){return this._hostSupportsSubscriptions}on(e,t){if(!this.listeners.has(e))this.listeners.set(e,new Set);let n=this.listeners.get(e);if(n)n.add(t)}off(e,t){this.listeners.get(e)?.delete(t)}disconnect(){this.cleanup?.(),this.listeners.clear();for(let[,e]of this.pending)e.reject(Error("Bridge disconnected"));this.pending.clear();for(let[,e]of this.rpcPending)e.reject(Error("Bridge disconnected"));this.rpcPending.clear(),this.sentRpcIds.clear()}get activeProtocol(){return this.protocol}initPrefab(e){return new Promise((t,n)=>{let o=!1,r=(i)=>{if(o)return;o=!0,this.off("prefab:init-response",r),this.protocol="prefab",this._hostSupportsSubscriptions=H(i.capabilities)?.subscriptions===!0,t(ho(i))};this.on("prefab:init-response",r),this.sendPrefab("prefab:init",{capabilities:e}),setTimeout(()=>{if(!o)o=!0,this.off("prefab:init-response",r),n(Error("prefab:init timeout"))},2000)})}createPrefabTransport(){return{callTool:(e,t)=>{let n=`tc-${++this.callIdCounter}`;return new Promise((o,r)=>{this.pending.set(n,{resolve:o,reject:r}),this.sendPrefab("prefab:tool-call",{tool:e,arguments:t},n),setTimeout(()=>{if(this.pending.has(n))this.pending.delete(n),r(Error(`Tool call '${e}' timed out`))},30000)})},sendMessage:(e)=>(this.sendPrefab("prefab:send-message",{message:e}),Promise.resolve()),updateModelContext:(e)=>(this.sendPrefab("prefab:update-context",{context:e.structuredContent,content:e.content}),Promise.resolve()),subscribe:(e,t,n)=>this.subscribe(e,t,n),capabilities:{subscriptions:this._hostSupportsSubscriptions}}}sendPrefab(e,t,n){if(typeof window>"u")return;let o=window.parent!==window?window.parent:window,r={type:e,payload:t,id:n};o.postMessage(r,this.hostOrigin)}handleJsonRpc(e){if(!("method"in e)){let o=this.rpcPending.get(e.id);if(o)if(this.rpcPending.delete(e.id),e.error)o.reject(Error(e.error.message));else o.resolve(e.result);return}let t=e.method,n=e.params??{};if(e.id!=null&&this.sentRpcIds.delete(e.id))return;if(e.id!=null)this.postJsonRpc({jsonrpc:"2.0",id:e.id,result:{}});switch(t){case"ui/notifications/tool-input":this.dispatch("prefab:tool-input",{args:n.arguments??n});break;case"ui/notifications/tool-input-partial":this.dispatch("prefab:tool-input-partial",{args:n.arguments??n});break;case"ui/notifications/tool-result":this.dispatch("prefab:tool-result",{result:n});break;case"ui/notifications/tool-cancelled":this.dispatch("prefab:tool-cancelled",n);break;case"ui/notifications/host-context-changed":{this.dispatch("prefab:theme-update",{...tt(n)}),this.dispatch("prefab:host-context-changed",n);break}case"ui/resource-teardown":this.dispatch("prefab:teardown",n);break;case"ui/notifications/resource-updated":case"notifications/resources/updated":this.dispatch("prefab:resource-updated",n);break}}initJsonRpc(e){return new Promise((t,n)=>{let o=++this.rpcIdCounter,r=!1;this.rpcPending.set(o,{resolve:(i)=>{if(r)return;r=!0,this.protocol="jsonrpc";let s=H(i)??{},a=H(s.hostInfo)??{},l=H(s.hostContext)??{},c=H(s.hostCapabilities)??{},u=typeof l.theme==="string"||k(l.styles)?tt(l):void 0;this.postJsonRpc({jsonrpc:"2.0",method:"ui/notifications/initialized",params:{}});let d=H(c.resources);this._hostSupportsSubscriptions=c.subscriptions===!0||d?.subscribe===!0,t({hostName:y(a.name),hostVersion:y(a.version),capabilities:{toast:!0,navigation:c.openLinks!=null,messaging:!0,displayModes:Ft(l.availableDisplayModes)},theme:u,toolInput:void 0,meta:l})},reject:(i)=>{if(r)return;r=!0,n(i)}}),this.postJsonRpc({jsonrpc:"2.0",id:o,method:"ui/initialize",params:{protocolVersion:"2026-01-26",appInfo:{name:"prefab",version:mo},appCapabilities:{...e.displayModes&&{availableDisplayModes:e.displayModes}}}}),setTimeout(()=>{if(!r)r=!0,this.rpcPending.delete(o),n(Error("ui/initialize timeout"))},2000)})}createJsonRpcTransport(){return{callTool:(e,t)=>this.sendRpcRequest("tools/call",{name:e,arguments:t}),sendMessage:async(e)=>{await this.sendRpcRequest("ui/message",{role:"user",content:[{type:"text",text:e}]})},updateModelContext:async(e)=>{await this.sendRpcRequest("ui/update-model-context",{...e})},subscribe:(e,t,n)=>this.subscribe(e,t,n),capabilities:{subscriptions:this._hostSupportsSubscriptions}}}sendRpcRequest(e,t){let n=++this.rpcIdCounter;return new Promise((o,r)=>{this.rpcPending.set(n,{resolve:o,reject:r}),this.postJsonRpc({jsonrpc:"2.0",id:n,method:e,params:t}),setTimeout(()=>{if(this.rpcPending.has(n))this.rpcPending.delete(n),r(Error(`JSON-RPC '${e}' timed out`))},30000)})}sendRpcNotification(e,t){this.postJsonRpc({jsonrpc:"2.0",method:e,params:t})}postJsonRpc(e){if(typeof window>"u")return;if((typeof e.id==="number"||typeof e.id==="string")&&typeof e.method==="string")this.sentRpcIds.add(e.id);if(this.postFn)this.postFn(e);else(window.parent!==window?window.parent:window).postMessage(e,this.hostOrigin)}dispatch(e,t){let n=this.listeners.get(e);if(n)for(let o of n)o(t)}}var yo=()=>{};function Bt(e,t){if(t.variables)for(let[n,o]of Object.entries(t.variables))e.style.setProperty(n.startsWith("--")?n:`--${n}`,o);if(t.colorScheme&&t.colorScheme!=="auto")e.setAttribute("data-theme",t.colorScheme);if(t.fontCss)hs(t.fontCss)}function hs(e){if(document.getElementById("__prefab-host-fonts"))return;let n=document.createElement("style");n.id="__prefab-host-fonts",n.textContent=e,document.head.appendChild(n)}function nt(){if(typeof window>"u")return!1;try{return window.self!==window.top}catch{return!0}}function ys(){if(typeof window>"u")return;let e=Reflect.get(window,"acquireVsCodeApi");if(typeof e==="function")try{let t=Reflect.apply(e,void 0,[]);if(k(t)&&typeof t.postMessage==="function"){let n=t.postMessage;return{postMessage:(o)=>{Reflect.apply(n,t,[o])}}}}catch{return}return}var bo=["Accordion","AccordionItem","Alert","AlertDescription","AlertTitle","AreaChart","Audio","Badge","BarChart","BlockQuote","Button","ButtonGroup","Calendar","Card","CardContent","CardDescription","CardFooter","CardHeader","CardTitle","Carousel","Checkbox","ChoiceCard","Code","Column","Combobox","ComboboxGroup","ComboboxLabel","ComboboxOption","ComboboxSeparator","Condition","Container","Dashboard","DashboardItem","DataTable","DatePicker","Define","Detail","Dialog","Div","Dot","DropZone","Elif","Else","Embed","ExpandableRow","Field","FieldContent","FieldDescription","FieldError","FieldTitle","ForEach","Form","Grid","GridItem","H1","H2","H3","H4","Heading","Histogram","HoverCard","Icon","If","Image","Input","Kbd","Label","Large","Lead","LineChart","Link","Loader","Markdown","MasterDetail","Mermaid","Metric","Muted","P","Page","Pages","PdfViewer","PieChart","Popover","Progress","RadarChart","RadialChart","Radio","RadioGroup","Ring","Row","ScatterChart","Select","SelectGroup","SelectLabel","SelectOption","SelectSeparator","Separator","Slider","Slot","Small","Span","Sparkline","Svg","Switch","Tab","Table","TableBody","TableCaption","TableCell","TableFooter","TableHead","TableHeader","TableRow","Tabs","Text","Textarea","Tooltip","Use","Video"];var vo=new Set(bo);function _t(e,t={}){let n=[],o=t.strict??!1;if(!k(e))return n.push({path:"$",message:"Wire data must be a non-null object"}),{valid:!1,errors:n};let r=e,i=r.$prefab;if(!k(i))n.push({path:"$.$prefab",message:"Missing or invalid $prefab header"});else if(typeof i.version!=="string")n.push({path:"$.$prefab.version",message:"version must be a string"});if(r.view==null)n.push({path:"$.view",message:'Missing required "view" field'});else Vt(r.view,"$.view",n,o);if(r.state!==void 0){if(r.state===null||typeof r.state!=="object"||Array.isArray(r.state))n.push({path:"$.state",message:"state must be a plain object"})}if(r.theme!==void 0)Cs(r.theme,n);if(r.css!==void 0)xo(r.css,"$.css",n);if(r.stylesheets!==void 0)xo(r.stylesheets,"$.stylesheets",n);if(r.mode!==void 0&&r.mode!=="light"&&r.mode!=="dark")n.push({path:"$.mode",message:'mode must be "light" or "dark"'});let s=r.defs;if(s!==void 0)if(!k(s))n.push({path:"$.defs",message:"defs must be a plain object"});else for(let[l,c]of Object.entries(s))Vt(c,`$.defs.${l}`,n,o);let a=r.keyBindings;if(a!==void 0)if(!k(a))n.push({path:"$.keyBindings",message:"keyBindings must be a plain object"});else for(let[l,c]of Object.entries(a))zt(c,`$.keyBindings.${l}`,n);return{valid:n.length===0,errors:n}}function Vt(e,t,n,o){if(!k(e)){n.push({path:t,message:"Component must be a plain object"});return}let r=e;if(typeof r.type!=="string"||r.type.length===0){n.push({path:`${t}.type`,message:'Component must have a non-empty "type" string'});return}if(o&&!vo.has(r.type))n.push({path:`${t}.type`,message:`Unknown component type: "${r.type}"`});if(r.children!==void 0)if(!Array.isArray(r.children))n.push({path:`${t}.children`,message:"children must be an array"});else for(let s=0;s<r.children.length;s++)Vt(r.children[s],`${t}.children[${s}]`,n,o);let i=["onClick","on_click","onChange","on_change","onSubmit","on_submit","onMount","on_mount","onClose","on_close"];for(let s of i)if(r[s]!==void 0)zt(r[s],`${t}.${s}`,n);for(let[s,a]of Object.entries(r)){if(s==="type"||bs.has(s)||i.includes(s))continue;if(Co(a)||Array.isArray(a)&&a.some(Co))n.push({path:`${t}.${s}`,message:`Components under "${s}" are ignored by the renderer; move them into "children"`})}}var bs=new Set(["children","fallback","trigger","empty","else","summary"]);function Co(e){return k(e)&&typeof e.type==="string"&&vo.has(e.type)}function zt(e,t,n){if(Array.isArray(e)){for(let i=0;i<e.length;i++)zt(e[i],`${t}[${i}]`,n);return}if(!k(e)){n.push({path:t,message:"Action must be an object or array of objects"});return}let o=e,r=typeof o.action==="string"&&o.action.length>0?o.action:typeof o.type==="string"&&o.type.length>0?o.type:void 0;if(r===void 0){n.push({path:`${t}.type`,message:'Action must have a non-empty "type" or "action" string'});return}if(r.toLowerCase()==="showtoast"){if(typeof o.message!=="string"||o.message.length===0)n.push({path:`${t}.message`,message:'showToast requires a non-empty "message" string'})}}function xo(e,t,n){if(!Array.isArray(e)){n.push({path:t,message:`${t} must be an array of strings`});return}for(let o=0;o<e.length;o++)if(typeof e[o]!=="string")n.push({path:`${t}[${o}]`,message:"must be a string"})}function Cs(e,t){if(!k(e)){t.push({path:"$.theme",message:"theme must be a plain object"});return}for(let n of["light","dark"])if(e[n]!==void 0){if(!k(e[n]))t.push({path:`$.theme.${n}`,message:`theme.${n} must be a plain object`})}}var z={mount(e,t,n){if(Ye(),n?.validate!==!1)for(let w of _t(t).errors)N.warn(`wire validation ${w.path}: ${w.message}`);let o=t,r={tracked:[],evalBlocked:!1};if(o.pipes)for(let[w,R]of Object.entries(o.pipes))wo(w,R,r);let i=new Re(o.state),s=n?.transport,a;if(!s)a=Qe();else if("callTool"in s)a=s;else a=Ze(s);let l=n?.onToast??vs,c=new yt;function u(w){if(!z.isPrefabData(w))return;let R=w;if(o=R,R.state)i.merge(R.state);if(R.defs)g.defs=R.defs;if(R.theme)Dt(e,R.theme);if(R.mode)ko(e,R.mode);if(R.pipes)for(let[S,T]of Object.entries(R.pipes))wo(S,T,r);for(let S of m)S.remove();if(m.length=0,m.push(...So(R.css,R.stylesheets)),Ro(e,R.layout),b?.(),b=void 0,R.keyBindings)b=It(R.keyBindings,(S)=>{D(O(S,{store:i,transport:a,scope:{},rerender:()=>E(),remount:u,onToast:l}),"keyBinding")});E(),d(R)}function d(w){if(w.onMount!=null)D(O(w.onMount,g),"onMount")}let g={store:i,scope:{},transport:a,rerender:()=>E(),remount:u,onToast:l,defs:o.defs,destroyRegistry:c};if(Dt(e,o.theme),o.mode)ko(e,o.mode);Ro(e,o.layout);let m=So(o.css,o.stylesheets),b;if(o.keyBindings)b=It(o.keyBindings,(w)=>{D(O(w,{store:i,transport:a,scope:{},rerender:()=>E(),remount:u,onToast:l}),"keyBinding")});let h,x=n?.themeToggle??!0;if(x!==!1)h=jt(e,typeof x==="object"?x:void 0);function E(){c.flush();let w=e.querySelector(".pf-theme-toggle");e.innerHTML="";let R=V(o.view,g);if(e.appendChild(R),w)e.appendChild(w)}return E(),d(o),{rerender:()=>E(),update(w){if(i.merge(w.update.state),E(),w.update.actions!=null)D(O(w.update.actions,g),"update action")},store:i,destroy(){c.flush(),h?.(),b?.(),rn(),ln();for(let w of m)w.remove();for(let w of r.tracked)lt(w);e.innerHTML=""}}},isPrefabData(e){return e!=null&&typeof e==="object"&&"$prefab"in e},isPrefabUpdate(e){return e!=null&&typeof e==="object"&&"$prefab"in e&&"update"in e}};function xs(e){if(e instanceof EvalError)return!0;return e instanceof Error&&/unsafe-eval|Content Security Policy|call to Function/i.test(e.message)}function wo(e,t,n){if(on.has(e)){N.warn(`wire pipe "${e}" ignored — shadows built-in`);return}if(He(e)!=null){N.debug(`wire pipe "${e}" — already registered, keeping local implementation`);return}if(n.evalBlocked)return;try{let o=Function("return ("+t+")")();if(!Zt(o)){N.warn(`wire pipe "${e}" — source did not evaluate to a function`);return}at(e,o),n.tracked.push(e)}catch(o){if(xs(o)){n.evalBlocked=!0,N.warn("wire pipes cannot be hydrated — this host's CSP forbids eval. Pre-register them with "+"prefab.registerPipe() from a companion script (rendererHtml({ scripts })) and they are used as-is.");return}N.warn(`wire pipe "${e}" — failed to hydrate:`,o)}}function vs(e){if(typeof document>"u")return;let t=ks(),n=document.createElement("div"),o=e.variant??"default";n.className=`pf-toast${o!=="default"?` pf-toast--${o}`:""}`,n.setAttribute("data-variant",o),n.style.marginBottom="8px",n.style.transition="opacity 0.3s ease";let r=document.createElement("div");if(r.textContent=e.message,r.style.fontWeight="500",n.appendChild(r),e.description){let s=document.createElement("div");s.textContent=e.description,s.style.fontSize="14px",s.style.color="var(--muted-foreground, #6b7280)",n.appendChild(s)}t.appendChild(n);let i=e.duration??4000;setTimeout(()=>{n.style.opacity="0",setTimeout(()=>n.remove(),300)},i)}function ko(e,t){if(Se(e,t),typeof document<"u")Se(document.documentElement,t)}function ws(e){let t=e.trim();if(t.includes("{")||t.includes("}"))return!1;return/^(https?:)?\/\//i.test(t)||t.startsWith("/")||/\.css(\?|#|$)/i.test(t)}function So(e,t){let n=[];if(typeof document>"u")return n;for(let o of e??[]){let r=document.createElement("style");r.textContent=o,r.dataset.prefab="injected",document.head.appendChild(r),n.push(r)}for(let o of t??[])if(ws(o)){let r=document.createElement("link");r.rel="stylesheet",r.href=o,r.dataset.prefab="injected",document.head.appendChild(r),n.push(r)}else{let r=document.createElement("style");r.textContent=o,r.dataset.prefab="injected",document.head.appendChild(r),n.push(r)}return n}function Ro(e,t){if(e.style.height="",e.style.minHeight="",e.style.maxHeight="",e.style.overflow="",!t)return;if(t.preferredHeight!=null)e.style.height=`${t.preferredHeight}px`;if(t.minHeight!=null)e.style.minHeight=`${t.minHeight}px`;if(t.maxHeight!=null)e.style.maxHeight=`${t.maxHeight}px`,e.style.overflow="auto"}function ks(){let t=document.getElementById("prefab-toast-container");if(!t)t=document.createElement("div"),t.id="prefab-toast-container",t.style.position="fixed",t.style.bottom="16px",t.style.right="16px",t.style.zIndex="9999",t.style.maxWidth="400px",document.body.appendChild(t);return t}if(typeof window<"u"){Object.assign(window,{PrefabRenderer:z}),Object.assign(window,{prefab:{app:ot,mount:z.mount.bind(z),isPrefabData:z.isPrefabData.bind(z),isPrefabUpdate:z.isPrefabUpdate.bind(z),Bridge:Ae,isIframe:nt,registerPipe:at,unregisterPipe:lt,listPipes:Qt,registerComponent:p,createThemeToggle:jt,validateWireFormat:_t,setLogLevel:qt}});let e=Reflect.get(window,"__PREFAB_DATA__");if(z.isPrefabData(e)){let t=document.getElementById("prefab-root");if(t)z.mount(t,e)}}async function ot(e){Ye();let t=e?.mode??"auto",n=t==="bridge"||t==="auto"&&nt(),o,r,i={capabilities:{}};if(n)r=new Ae(e?.hostOrigin),r.connect(),i=await r.initialize(e?.capabilities??{toolInput:!0}),o=r.createTransport();else if(e?.transport)o=Ze(e.transport);else o=Qe();if(i.theme&&typeof document<"u")Bt(document.documentElement,i.theme);if(typeof document<"u"&&!r)Rs();let s,a,l,c,u,d=i.toolInput,g;if(r)r.on("prefab:tool-input",(h)=>{let x=H(h.args)??h;if(s)s(x);else d=x}),r.on("prefab:tool-result",(h)=>{let x=h.result??h;if(a)a(x);else g=x}),r.on("prefab:tool-cancelled",()=>{l?.()}),r.on("prefab:tool-input-partial",(h)=>{c?.(H(h.args)??h)}),r.on("prefab:theme-update",(h)=>{if(typeof document<"u")Bt(document.documentElement,h)}),r.on("prefab:host-context-changed",(h)=>{u?.(h)});function m(h,...x){let E=Wt(h),w=new Re,R={store:w,scope:{},transport:o,rerender:()=>S(),onToast:void 0};function S(){E.innerHTML="";for(let T of x)E.appendChild(V(T,R))}return S(),{rerender:S,store:w,destroy:()=>{E.innerHTML=""}}}return{callTool:(h,x={})=>o.callTool(h,x),sendMessage:(h)=>o.sendMessage(h),onToolInput:(h)=>{if(s=h,d){let x=d;d=void 0,queueMicrotask(()=>h(x))}},onToolResult:(h)=>{if(a=h,g!==void 0){let x=g;g=void 0,queueMicrotask(()=>h(x))}},onToolCancelled:(h)=>{l=h},onToolInputPartial:(h)=>{c=h},onHostContextChanged:(h)=>{u=h},render:m,mount:(h,x,E)=>{let w=Wt(h);return z.mount(w,x,{transport:o,...E})},requestMode:(h)=>r?.requestMode(h),openLink:(h,x)=>{if(r)r.openLink(h,x);else if(typeof window<"u")window.open(h,x??"_blank")},updateContext:(h)=>{if(r)r.updateContext(h)},setupAutoResize:(h)=>{if(!r)return Ss;let x=typeof h==="string"?Wt(h):h;return r.setupAutoResize(x)},notifyPreferredSize:(h)=>{if(r)r.notifyPreferredSize(h)},host:i,capabilities:i.capabilities,theme:i.theme,transport:o,destroy:()=>r?.disconnect()}}var Ss=()=>{};function Wt(e){if(typeof e==="string"){if(typeof document>"u")throw Error("Cannot resolve selector outside browser");let t=document.querySelector(e);if(!(t instanceof HTMLElement))throw Error(`Element not found: ${e}`);return t}return e}function Rs(){function e(){let n=document.body.getAttribute("data-vscode-theme-kind");if(!n)return;let o=n.includes("light")?"light":"dark";document.documentElement.setAttribute("data-theme",o)}e(),new MutationObserver(e).observe(document.body,{attributes:!0,attributeFilter:["data-vscode-theme-kind"]})}var Kt=it("auto"),Eo="#root";function Jt(e){return z.isPrefabData(e)}function To(e){return z.isPrefabUpdate(e)}function Mo(e){if(Jt(e))return e;if(k(e)){let t=e;if(Jt(t.structuredContent))return t.structuredContent;if(Array.isArray(t.content)){for(let n of t.content)if(k(n)&&n.type==="text"&&typeof n.text==="string")try{let o=JSON.parse(n.text);if(Jt(o))return o}catch{}}}return null}async function No(){let e=document.querySelector(Eo);if(!e){Kt.error(`Mount target "${Eo}" not found`);return}let t=e,n=await ot();n.setupAutoResize(t);let o;function r(i){if(o)o.destroy();if(o=n.mount(t,i),i.layout)n.notifyPreferredSize(i.layout)}n.onToolResult((i)=>{let s=Mo(i);if(s)r(s);else if(To(i)&&o)o.update(i)}),n.onToolInput((i)=>{let s=Mo(i);if(s)r(s);else if(To(i)&&o)o.update(i)})}function Es(){if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",()=>{No().catch((e)=>{Kt.error("Boot failed:",e)})},{once:!0});else queueMicrotask(()=>{No().catch((e)=>{Kt.error("Boot failed:",e)})})}Es();})();
16
+ `)}function Se(e,t){e.setAttribute("data-theme",t),e.classList.toggle("dark",t==="dark"),e.classList.toggle("light",t==="light")}function Dt(e,t){if(!t)return;if(t.light)for(let[n,o]of Object.entries(t.light))e.style.setProperty(`--${Ot(n)}`,$t(o));if(t.dark){let o=document.getElementById("prefab-dark-theme");if(!o)o=document.createElement("style"),o.id="prefab-dark-theme",document.head.appendChild(o);o.textContent=co({dark:t.dark})}}function It(e,t){if(!e||typeof document>"u")return;let n=(o)=>{for(let[r,i]of Object.entries(e))if(ds(r,o))o.preventDefault(),t(i)};return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)}function ds(e,t){let n=e.toLowerCase().split("+").map((i)=>i.trim()),o=n[n.length-1],r=new Set(n.slice(0,-1));if(r.has("ctrl")!==(t.ctrlKey||t.metaKey))return!1;if(r.has("shift")!==t.shiftKey)return!1;if(r.has("alt")!==t.altKey)return!1;return t.key.toLowerCase()===o}var po='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z"/></svg>',uo='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.72 9.72 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z"/></svg>',fo={"top-right":"top: 8px; right: 8px;","top-left":"top: 8px; left: 8px;","bottom-right":"bottom: 8px; right: 8px;","bottom-left":"bottom: 8px; left: 8px;"};function ps(e,t){try{let o=localStorage.getItem(t);if(o==="light"||o==="dark")return o}catch{}let n=e.getAttribute("data-theme")??document.documentElement.getAttribute("data-theme");if(n==="light"||n==="dark")return n;if(typeof window<"u"&&window.matchMedia("(prefers-color-scheme: light)").matches)return"light";return"dark"}function jt(e,t){if(typeof document>"u")return()=>{};let n=t?.position??"top-right",o=t?.storageKey??"prefab-theme",r=t?.syncDocument??!0,i=getComputedStyle(e).position;if(i==="static"||i==="")e.style.position="relative";let s=document.createElement("button");s.className="pf-theme-toggle",s.setAttribute("aria-label","Toggle theme"),s.setAttribute("title","Toggle light/dark"),Object.assign(s.style,{position:"absolute",zIndex:"100",width:"28px",height:"28px",border:"1px solid var(--border, #e5e7eb)",borderRadius:"6px",background:"var(--card, rgba(255,255,255,0.8))",color:"var(--foreground, #333)",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",padding:"0",opacity:"0.7",transition:"opacity 0.15s, border-color 0.15s"});let a=fo[n]??fo["top-right"];for(let d of a.split(";")){let[g,m]=d.split(":").map((b)=>b.trim());if(g&&m)s.style.setProperty(g,m)}s.addEventListener("mouseenter",()=>{s.style.opacity="1"}),s.addEventListener("mouseleave",()=>{s.style.opacity="0.7"});function l(d){if(Se(e,d),r)Se(document.documentElement,d);s.innerHTML=d==="dark"?uo:po;try{localStorage.setItem(o,d)}catch{}}let c=ps(e,o);l(c),s.addEventListener("click",()=>{let d=e.getAttribute("data-theme")??"dark";l(d==="dark"?"light":"dark")}),e.appendChild(s);let u;if(r)u=new MutationObserver((d)=>{for(let g of d)if(g.type==="attributes"&&g.attributeName==="data-theme"){let m=document.documentElement.getAttribute("data-theme");if((m==="light"||m==="dark")&&m!==e.getAttribute("data-theme")){Se(e,m),s.innerHTML=m==="dark"?uo:po;try{localStorage.setItem(o,m)}catch{}}}}),u.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]});return()=>{u?.disconnect(),s.remove()}}function Ze(e){let t=e?.baseUrl??(typeof window<"u"?window.location.origin:""),n={"Content-Type":"application/json",...e?.headers},o=e?.fetch??globalThis.fetch.bind(globalThis);return{async callTool(r,i){let s=await o(`${t}/mcp/tools/call`,{method:"POST",headers:n,body:JSON.stringify({jsonrpc:"2.0",method:"tools/call",params:{name:r,arguments:i}})});if(!s.ok)throw Error(`MCP tool call failed: ${s.status} ${s.statusText}`);let a=await s.json(),l=H(a);if(!l)return a;if(Boolean(l.error))throw Error(y(H(l.error)?.message)??"MCP tool call returned error");let u=K(H(l.result)?.content??l.content);for(let d of u)if(d.type==="text"&&typeof d.text==="string"){try{return JSON.parse(d.text)}catch{}return d.text}return l.result??l},async sendMessage(r){await o(`${t}/mcp/messages`,{method:"POST",headers:n,body:JSON.stringify({message:r})})}}}function Qe(){return{callTool(e){return N.warn(`No MCP transport: callTool('${e}') ignored`),Promise.resolve(null)},sendMessage(e){return N.warn("No MCP transport: sendMessage ignored",e),Promise.resolve()}}}var mo="0.3.22";var us=["light","dark","auto"],fs=["inline","fullscreen","pip"];function go(e){return k(e)&&typeof e.type==="string"&&(e.id===void 0||typeof e.id==="string")&&(e.payload===void 0||k(e.payload))}function et(e){return typeof e==="boolean"?e:void 0}function ho(e){let t=H(e.capabilities)??{},n=H(e.theme),o=H(e.toolInput),r=H(e.meta);return{hostName:y(e.hostName),hostVersion:y(e.hostVersion),capabilities:{toast:et(t.toast),clipboard:et(t.clipboard),navigation:et(t.navigation),messaging:et(t.messaging),displayModes:Ft(t.displayModes)},...n&&{theme:ms(n)},...o&&{toolInput:o},...r&&{meta:r}}}function ms(e){let t=y(e.fontCss);return{...tt({theme:e.colorScheme,styles:{variables:e.variables}}),...t!=null&&{fontCss:t}}}function Ft(e){let t=Array.isArray(e)?e:[];return fs.filter((n)=>t.includes(n))}function tt(e){let t={},n=us.find((s)=>s===e.theme);if(n)t.colorScheme=n;let o=H(e.styles),r=H(o?.variables);if(r)t.variables=Object.fromEntries(Object.entries(r).filter((s)=>typeof s[1]==="string"));let i=y(H(o?.css)?.fonts);if(i!=null)t.fontCss=i;return t}function gs(e){return k(e)&&e.jsonrpc==="2.0"}class Ae{hostOrigin;listeners=new Map;protocol="prefab";cleanup;pending=new Map;callIdCounter=0;rpcPending=new Map;rpcIdCounter=0;sentRpcIds=new Set;postFn;_hostSupportsSubscriptions=!1;constructor(e="*"){this.hostOrigin=e}connect(){if(typeof window>"u")return;let e=ys();if(e)this.postFn=(n)=>e.postMessage(n);let t=(n)=>{if(this.hostOrigin!=="*"&&n.origin!==this.hostOrigin)return;let o=n.data;if(gs(o)){this.handleJsonRpc(o);return}if(!go(o)||!o.type.startsWith("prefab:"))return;let r=o;if(r.type==="prefab:tool-call-response"&&r.id){let s=this.pending.get(r.id);if(s){if(this.pending.delete(r.id),r.payload?.error!=null)s.reject(Error(v(r.payload.error)));else s.resolve(r.payload?.result);return}}let i=this.listeners.get(r.type);if(i)for(let s of i)s(r.payload??{})};window.addEventListener("message",t),this.cleanup=()=>window.removeEventListener("message",t)}async initialize(e){try{return await Promise.any([this.initPrefab(e),this.initJsonRpc(e)])}catch(t){let n=t instanceof AggregateError?t.errors.map((o)=>o.message).join("; "):String(t);throw Error(`Bridge init failed — no host responded. Tried: ${n}`,{cause:t})}}createTransport(){if(this.protocol==="jsonrpc")return this.createJsonRpcTransport();return this.createPrefabTransport()}requestMode(e){if(this.protocol==="jsonrpc")this.sendRpcRequest("ui/request-display-mode",{mode:e});else this.sendPrefab("prefab:request-mode",{mode:e})}openLink(e,t){if(this.protocol==="jsonrpc")this.sendRpcRequest("ui/open-link",{url:e,target:t});else this.sendPrefab("prefab:open-link",{url:e,target:t})}updateContext(e){if(this.protocol==="jsonrpc")this.sendRpcRequest("ui/update-model-context",{structuredContent:e});else this.sendPrefab("prefab:update-context",{context:e})}setupAutoResize(e){if(typeof ResizeObserver>"u")return yo;let t=-1,n=-1,o=(s,a)=>{if(s===t&&a===n)return;if(t=s,n=a,this.protocol==="jsonrpc")this.sendRpcNotification("ui/notifications/size-changed",{width:s,height:a});else this.sendPrefab("prefab:size-changed",{width:s,height:a})},r=new ResizeObserver((s)=>{for(let a of s)if(a.borderBoxSize.length){let l=a.borderBoxSize[0];o(Math.ceil(l.inlineSize),Math.ceil(l.blockSize))}else{let l=a.target.getBoundingClientRect();o(Math.ceil(l.width),Math.ceil(l.height))}});r.observe(e);let i=e.getBoundingClientRect();return o(Math.ceil(i.width),Math.ceil(i.height)),()=>r.disconnect()}notifyPreferredSize(e){if(this.protocol==="jsonrpc")this.sendRpcNotification("ui/notifications/preferred-size",e);else this.sendPrefab("prefab:preferred-size",e)}subscribe(e,t,n){let o=(r)=>{if(r.uri!==e)return;t(r.contents??r.data??r)};if(this.protocol==="jsonrpc")this.on("prefab:resource-updated",o),this.sendRpcRequest("resources/subscribe",{uri:e}).catch((r)=>{this.off("prefab:resource-updated",o),n?.(r)});else this.on("prefab:resource-updated",o),this.sendPrefab("prefab:subscribe",{uri:e});return()=>{if(this.off("prefab:resource-updated",o),this.protocol==="jsonrpc")this.sendRpcRequest("resources/unsubscribe",{uri:e}).catch(yo);else this.sendPrefab("prefab:unsubscribe",{uri:e})}}get supportsSubscriptions(){return this._hostSupportsSubscriptions}on(e,t){if(!this.listeners.has(e))this.listeners.set(e,new Set);let n=this.listeners.get(e);if(n)n.add(t)}off(e,t){this.listeners.get(e)?.delete(t)}disconnect(){this.cleanup?.(),this.listeners.clear();for(let[,e]of this.pending)e.reject(Error("Bridge disconnected"));this.pending.clear();for(let[,e]of this.rpcPending)e.reject(Error("Bridge disconnected"));this.rpcPending.clear(),this.sentRpcIds.clear()}get activeProtocol(){return this.protocol}initPrefab(e){return new Promise((t,n)=>{let o=!1,r=(i)=>{if(o)return;o=!0,this.off("prefab:init-response",r),this.protocol="prefab",this._hostSupportsSubscriptions=H(i.capabilities)?.subscriptions===!0,t(ho(i))};this.on("prefab:init-response",r),this.sendPrefab("prefab:init",{capabilities:e}),setTimeout(()=>{if(!o)o=!0,this.off("prefab:init-response",r),n(Error("prefab:init timeout"))},2000)})}createPrefabTransport(){return{callTool:(e,t)=>{let n=`tc-${++this.callIdCounter}`;return new Promise((o,r)=>{this.pending.set(n,{resolve:o,reject:r}),this.sendPrefab("prefab:tool-call",{tool:e,arguments:t},n),setTimeout(()=>{if(this.pending.has(n))this.pending.delete(n),r(Error(`Tool call '${e}' timed out`))},30000)})},sendMessage:(e)=>(this.sendPrefab("prefab:send-message",{message:e}),Promise.resolve()),updateModelContext:(e)=>(this.sendPrefab("prefab:update-context",{context:e.structuredContent,content:e.content}),Promise.resolve()),subscribe:(e,t,n)=>this.subscribe(e,t,n),capabilities:{subscriptions:this._hostSupportsSubscriptions}}}sendPrefab(e,t,n){if(typeof window>"u")return;let o=window.parent!==window?window.parent:window,r={type:e,payload:t,id:n};o.postMessage(r,this.hostOrigin)}handleJsonRpc(e){if(!("method"in e)){let o=this.rpcPending.get(e.id);if(o)if(this.rpcPending.delete(e.id),e.error)o.reject(Error(e.error.message));else o.resolve(e.result);return}let t=e.method,n=e.params??{};if(e.id!=null&&this.sentRpcIds.delete(e.id))return;if(e.id!=null)this.postJsonRpc({jsonrpc:"2.0",id:e.id,result:{}});switch(t){case"ui/notifications/tool-input":this.dispatch("prefab:tool-input",{args:n.arguments??n});break;case"ui/notifications/tool-input-partial":this.dispatch("prefab:tool-input-partial",{args:n.arguments??n});break;case"ui/notifications/tool-result":this.dispatch("prefab:tool-result",{result:n});break;case"ui/notifications/tool-cancelled":this.dispatch("prefab:tool-cancelled",n);break;case"ui/notifications/host-context-changed":{this.dispatch("prefab:theme-update",{...tt(n)}),this.dispatch("prefab:host-context-changed",n);break}case"ui/resource-teardown":this.dispatch("prefab:teardown",n);break;case"ui/notifications/resource-updated":case"notifications/resources/updated":this.dispatch("prefab:resource-updated",n);break}}initJsonRpc(e){return new Promise((t,n)=>{let o=++this.rpcIdCounter,r=!1;this.rpcPending.set(o,{resolve:(i)=>{if(r)return;r=!0,this.protocol="jsonrpc";let s=H(i)??{},a=H(s.hostInfo)??{},l=H(s.hostContext)??{},c=H(s.hostCapabilities)??{},u=typeof l.theme==="string"||k(l.styles)?tt(l):void 0;this.postJsonRpc({jsonrpc:"2.0",method:"ui/notifications/initialized",params:{}});let d=H(c.resources);this._hostSupportsSubscriptions=c.subscriptions===!0||d?.subscribe===!0,t({hostName:y(a.name),hostVersion:y(a.version),capabilities:{toast:!0,navigation:c.openLinks!=null,messaging:!0,displayModes:Ft(l.availableDisplayModes)},theme:u,toolInput:void 0,meta:l})},reject:(i)=>{if(r)return;r=!0,n(i)}}),this.postJsonRpc({jsonrpc:"2.0",id:o,method:"ui/initialize",params:{protocolVersion:"2026-01-26",appInfo:{name:"prefab",version:mo},appCapabilities:{...e.displayModes&&{availableDisplayModes:e.displayModes}}}}),setTimeout(()=>{if(!r)r=!0,this.rpcPending.delete(o),n(Error("ui/initialize timeout"))},2000)})}createJsonRpcTransport(){return{callTool:(e,t)=>this.sendRpcRequest("tools/call",{name:e,arguments:t}),sendMessage:async(e)=>{await this.sendRpcRequest("ui/message",{role:"user",content:[{type:"text",text:e}]})},updateModelContext:async(e)=>{await this.sendRpcRequest("ui/update-model-context",{...e})},subscribe:(e,t,n)=>this.subscribe(e,t,n),capabilities:{subscriptions:this._hostSupportsSubscriptions}}}sendRpcRequest(e,t){let n=++this.rpcIdCounter;return new Promise((o,r)=>{this.rpcPending.set(n,{resolve:o,reject:r}),this.postJsonRpc({jsonrpc:"2.0",id:n,method:e,params:t}),setTimeout(()=>{if(this.rpcPending.has(n))this.rpcPending.delete(n),r(Error(`JSON-RPC '${e}' timed out`))},30000)})}sendRpcNotification(e,t){this.postJsonRpc({jsonrpc:"2.0",method:e,params:t})}postJsonRpc(e){if(typeof window>"u")return;if((typeof e.id==="number"||typeof e.id==="string")&&typeof e.method==="string")this.sentRpcIds.add(e.id);if(this.postFn)this.postFn(e);else(window.parent!==window?window.parent:window).postMessage(e,this.hostOrigin)}dispatch(e,t){let n=this.listeners.get(e);if(n)for(let o of n)o(t)}}var yo=()=>{};function Bt(e,t){if(t.variables)for(let[n,o]of Object.entries(t.variables))e.style.setProperty(n.startsWith("--")?n:`--${n}`,o);if(t.colorScheme&&t.colorScheme!=="auto")e.setAttribute("data-theme",t.colorScheme);if(t.fontCss)hs(t.fontCss)}function hs(e){if(document.getElementById("__prefab-host-fonts"))return;let n=document.createElement("style");n.id="__prefab-host-fonts",n.textContent=e,document.head.appendChild(n)}function nt(){if(typeof window>"u")return!1;try{return window.self!==window.top}catch{return!0}}function ys(){if(typeof window>"u")return;let e=Reflect.get(window,"acquireVsCodeApi");if(typeof e==="function")try{let t=Reflect.apply(e,void 0,[]);if(k(t)&&typeof t.postMessage==="function"){let n=t.postMessage;return{postMessage:(o)=>{Reflect.apply(n,t,[o])}}}}catch{return}return}var bo=["Accordion","AccordionItem","Alert","AlertDescription","AlertTitle","AreaChart","Audio","Badge","BarChart","BlockQuote","Button","ButtonGroup","Calendar","Card","CardContent","CardDescription","CardFooter","CardHeader","CardTitle","Carousel","Checkbox","ChoiceCard","Code","Column","Combobox","ComboboxGroup","ComboboxLabel","ComboboxOption","ComboboxSeparator","Condition","Container","Dashboard","DashboardItem","DataTable","DatePicker","Define","Detail","Dialog","Div","Dot","DropZone","Elif","Else","Embed","ExpandableRow","Field","FieldContent","FieldDescription","FieldError","FieldTitle","ForEach","Form","Grid","GridItem","H1","H2","H3","H4","Heading","Histogram","HoverCard","Icon","If","Image","Input","Kbd","Label","Large","Lead","LineChart","Link","Loader","Markdown","MasterDetail","Mermaid","Metric","Muted","P","Page","Pages","PdfViewer","PieChart","Popover","Progress","RadarChart","RadialChart","Radio","RadioGroup","Ring","Row","ScatterChart","Select","SelectGroup","SelectLabel","SelectOption","SelectSeparator","Separator","Slider","Slot","Small","Span","Sparkline","Svg","Switch","Tab","Table","TableBody","TableCaption","TableCell","TableFooter","TableHead","TableHeader","TableRow","Tabs","Text","Textarea","Tooltip","Use","Video"];var vo=new Set(bo);function _t(e,t={}){let n=[],o=t.strict??!1;if(!k(e))return n.push({path:"$",message:"Wire data must be a non-null object"}),{valid:!1,errors:n};let r=e,i=r.$prefab;if(!k(i))n.push({path:"$.$prefab",message:"Missing or invalid $prefab header"});else if(typeof i.version!=="string")n.push({path:"$.$prefab.version",message:"version must be a string"});if(r.view==null)n.push({path:"$.view",message:'Missing required "view" field'});else Vt(r.view,"$.view",n,o);if(r.state!==void 0){if(r.state===null||typeof r.state!=="object"||Array.isArray(r.state))n.push({path:"$.state",message:"state must be a plain object"})}if(r.theme!==void 0)Cs(r.theme,n);if(r.css!==void 0)xo(r.css,"$.css",n);if(r.stylesheets!==void 0)xo(r.stylesheets,"$.stylesheets",n);if(r.mode!==void 0&&r.mode!=="light"&&r.mode!=="dark")n.push({path:"$.mode",message:'mode must be "light" or "dark"'});let s=r.defs;if(s!==void 0)if(!k(s))n.push({path:"$.defs",message:"defs must be a plain object"});else for(let[l,c]of Object.entries(s))Vt(c,`$.defs.${l}`,n,o);let a=r.keyBindings;if(a!==void 0)if(!k(a))n.push({path:"$.keyBindings",message:"keyBindings must be a plain object"});else for(let[l,c]of Object.entries(a))zt(c,`$.keyBindings.${l}`,n);return{valid:n.length===0,errors:n}}function Vt(e,t,n,o){if(!k(e)){n.push({path:t,message:"Component must be a plain object"});return}let r=e;if(typeof r.type!=="string"||r.type.length===0){n.push({path:`${t}.type`,message:'Component must have a non-empty "type" string'});return}if(o&&!vo.has(r.type))n.push({path:`${t}.type`,message:`Unknown component type: "${r.type}"`});if(r.children!==void 0)if(!Array.isArray(r.children))n.push({path:`${t}.children`,message:"children must be an array"});else for(let s=0;s<r.children.length;s++)Vt(r.children[s],`${t}.children[${s}]`,n,o);let i=["onClick","on_click","onChange","on_change","onSubmit","on_submit","onMount","on_mount","onClose","on_close"];for(let s of i)if(r[s]!==void 0)zt(r[s],`${t}.${s}`,n);for(let[s,a]of Object.entries(r)){if(s==="type"||bs.has(s)||i.includes(s))continue;if(Co(a)||Array.isArray(a)&&a.some(Co))n.push({path:`${t}.${s}`,message:`Components under "${s}" are ignored by the renderer; move them into "children"`})}}var bs=new Set(["children","fallback","trigger","empty","else","summary"]);function Co(e){return k(e)&&typeof e.type==="string"&&vo.has(e.type)}function zt(e,t,n){if(Array.isArray(e)){for(let i=0;i<e.length;i++)zt(e[i],`${t}[${i}]`,n);return}if(!k(e)){n.push({path:t,message:"Action must be an object or array of objects"});return}let o=e,r=typeof o.action==="string"&&o.action.length>0?o.action:typeof o.type==="string"&&o.type.length>0?o.type:void 0;if(r===void 0){n.push({path:`${t}.type`,message:'Action must have a non-empty "type" or "action" string'});return}if(r.toLowerCase()==="showtoast"){if(typeof o.message!=="string"||o.message.length===0)n.push({path:`${t}.message`,message:'showToast requires a non-empty "message" string'})}}function xo(e,t,n){if(!Array.isArray(e)){n.push({path:t,message:`${t} must be an array of strings`});return}for(let o=0;o<e.length;o++)if(typeof e[o]!=="string")n.push({path:`${t}[${o}]`,message:"must be a string"})}function Cs(e,t){if(!k(e)){t.push({path:"$.theme",message:"theme must be a plain object"});return}for(let n of["light","dark"])if(e[n]!==void 0){if(!k(e[n]))t.push({path:`$.theme.${n}`,message:`theme.${n} must be a plain object`})}}var z={mount(e,t,n){if(Ye(),n?.validate!==!1)for(let w of _t(t).errors)N.warn(`wire validation ${w.path}: ${w.message}`);let o=t,r={tracked:[],evalBlocked:!1};if(o.pipes)for(let[w,R]of Object.entries(o.pipes))wo(w,R,r);let i=new Re(o.state),s=n?.transport,a;if(!s)a=Qe();else if("callTool"in s)a=s;else a=Ze(s);let l=n?.onToast??vs,c=new yt;function u(w){if(!z.isPrefabData(w))return;let R=w;if(o=R,R.state)i.merge(R.state);if(R.defs)g.defs=R.defs;if(R.theme)Dt(e,R.theme);if(R.mode)ko(e,R.mode);if(R.pipes)for(let[S,T]of Object.entries(R.pipes))wo(S,T,r);for(let S of m)S.remove();if(m.length=0,m.push(...So(R.css,R.stylesheets)),Ro(e,R.layout),b?.(),b=void 0,R.keyBindings)b=It(R.keyBindings,(S)=>{D(O(S,{store:i,transport:a,scope:{},rerender:()=>E(),remount:u,onToast:l}),"keyBinding")});E(),d(R)}function d(w){if(w.onMount!=null)D(O(w.onMount,g),"onMount")}let g={store:i,scope:{},transport:a,rerender:()=>E(),remount:u,onToast:l,defs:o.defs,destroyRegistry:c};if(Dt(e,o.theme),o.mode)ko(e,o.mode);Ro(e,o.layout);let m=So(o.css,o.stylesheets),b;if(o.keyBindings)b=It(o.keyBindings,(w)=>{D(O(w,{store:i,transport:a,scope:{},rerender:()=>E(),remount:u,onToast:l}),"keyBinding")});let h,x=n?.themeToggle??!0;if(x!==!1)h=jt(e,typeof x==="object"?x:void 0);function E(){c.flush();let w=e.querySelector(".pf-theme-toggle");e.innerHTML="";let R=V(o.view,g);if(e.appendChild(R),w)e.appendChild(w)}return E(),d(o),{rerender:()=>E(),update(w){if(i.merge(w.update.state),E(),w.update.actions!=null)D(O(w.update.actions,g),"update action")},store:i,destroy(){c.flush(),h?.(),b?.(),rn(),ln();for(let w of m)w.remove();for(let w of r.tracked)lt(w);e.innerHTML=""}}},isPrefabData(e){return e!=null&&typeof e==="object"&&"$prefab"in e},isPrefabUpdate(e){return e!=null&&typeof e==="object"&&"$prefab"in e&&"update"in e}};function xs(e){if(e instanceof EvalError)return!0;return e instanceof Error&&/unsafe-eval|Content Security Policy|call to Function/i.test(e.message)}function wo(e,t,n){if(on.has(e)){N.warn(`wire pipe "${e}" ignored — shadows built-in`);return}if(He(e)!=null){N.debug(`wire pipe "${e}" — already registered, keeping local implementation`);return}if(n.evalBlocked)return;try{let o=Function("return ("+t+")")();if(!Zt(o)){N.warn(`wire pipe "${e}" — source did not evaluate to a function`);return}at(e,o),n.tracked.push(e)}catch(o){if(xs(o)){n.evalBlocked=!0,N.warn("wire pipes cannot be hydrated — this host's CSP forbids eval. Pre-register them with "+"prefab.registerPipe() from a companion script (rendererHtml({ scripts })) and they are used as-is.");return}N.warn(`wire pipe "${e}" — failed to hydrate:`,o)}}function vs(e){if(typeof document>"u")return;let t=ks(),n=document.createElement("div"),o=e.variant??"default";n.className=`pf-toast${o!=="default"?` pf-toast--${o}`:""}`,n.setAttribute("data-variant",o),n.style.marginBottom="8px",n.style.transition="opacity 0.3s ease";let r=document.createElement("div");if(r.textContent=e.message,r.style.fontWeight="500",n.appendChild(r),e.description){let s=document.createElement("div");s.textContent=e.description,s.style.fontSize="14px",s.style.color="var(--muted-foreground, #6b7280)",n.appendChild(s)}t.appendChild(n);let i=e.duration??4000;setTimeout(()=>{n.style.opacity="0",setTimeout(()=>n.remove(),300)},i)}function ko(e,t){if(Se(e,t),typeof document<"u")Se(document.documentElement,t)}function ws(e){let t=e.trim();if(t.includes("{")||t.includes("}"))return!1;return/^(https?:)?\/\//i.test(t)||t.startsWith("/")||/\.css(\?|#|$)/i.test(t)}function So(e,t){let n=[];if(typeof document>"u")return n;for(let o of e??[]){let r=document.createElement("style");r.textContent=o,r.dataset.prefab="injected",document.head.appendChild(r),n.push(r)}for(let o of t??[])if(ws(o)){let r=document.createElement("link");r.rel="stylesheet",r.href=o,r.dataset.prefab="injected",document.head.appendChild(r),n.push(r)}else{let r=document.createElement("style");r.textContent=o,r.dataset.prefab="injected",document.head.appendChild(r),n.push(r)}return n}function Ro(e,t){if(e.style.height="",e.style.minHeight="",e.style.maxHeight="",e.style.overflow="",!t)return;if(t.preferredHeight!=null)e.style.height=`${t.preferredHeight}px`;if(t.minHeight!=null)e.style.minHeight=`${t.minHeight}px`;if(t.maxHeight!=null)e.style.maxHeight=`${t.maxHeight}px`,e.style.overflow="auto"}function ks(){let t=document.getElementById("prefab-toast-container");if(!t)t=document.createElement("div"),t.id="prefab-toast-container",t.style.position="fixed",t.style.bottom="16px",t.style.right="16px",t.style.zIndex="9999",t.style.maxWidth="400px",document.body.appendChild(t);return t}if(typeof window<"u"){Object.assign(window,{PrefabRenderer:z}),Object.assign(window,{prefab:{app:ot,mount:z.mount.bind(z),isPrefabData:z.isPrefabData.bind(z),isPrefabUpdate:z.isPrefabUpdate.bind(z),Bridge:Ae,isIframe:nt,registerPipe:at,unregisterPipe:lt,listPipes:Qt,registerComponent:p,createThemeToggle:jt,validateWireFormat:_t,setLogLevel:qt}});let e=Reflect.get(window,"__PREFAB_DATA__");if(z.isPrefabData(e)){let t=document.getElementById("prefab-root");if(t)z.mount(t,e)}}async function ot(e){Ye();let t=e?.mode??"auto",n=t==="bridge"||t==="auto"&&nt(),o,r,i={capabilities:{}};if(n)r=new Ae(e?.hostOrigin),r.connect(),i=await r.initialize(e?.capabilities??{toolInput:!0}),o=r.createTransport();else if(e?.transport)o=Ze(e.transport);else o=Qe();if(i.theme&&typeof document<"u")Bt(document.documentElement,i.theme);if(typeof document<"u"&&!r)Rs();let s,a,l,c,u,d=i.toolInput,g;if(r)r.on("prefab:tool-input",(h)=>{let x=H(h.args)??h;if(s)s(x);else d=x}),r.on("prefab:tool-result",(h)=>{let x=h.result??h;if(a)a(x);else g=x}),r.on("prefab:tool-cancelled",()=>{l?.()}),r.on("prefab:tool-input-partial",(h)=>{c?.(H(h.args)??h)}),r.on("prefab:theme-update",(h)=>{if(typeof document<"u")Bt(document.documentElement,h)}),r.on("prefab:host-context-changed",(h)=>{u?.(h)});function m(h,...x){let E=Wt(h),w=new Re,R={store:w,scope:{},transport:o,rerender:()=>S(),onToast:void 0};function S(){E.innerHTML="";for(let T of x)E.appendChild(V(T,R))}return S(),{rerender:S,store:w,destroy:()=>{E.innerHTML=""}}}return{callTool:(h,x={})=>o.callTool(h,x),sendMessage:(h)=>o.sendMessage(h),onToolInput:(h)=>{if(s=h,d){let x=d;d=void 0,queueMicrotask(()=>h(x))}},onToolResult:(h)=>{if(a=h,g!==void 0){let x=g;g=void 0,queueMicrotask(()=>h(x))}},onToolCancelled:(h)=>{l=h},onToolInputPartial:(h)=>{c=h},onHostContextChanged:(h)=>{u=h},render:m,mount:(h,x,E)=>{let w=Wt(h);return z.mount(w,x,{transport:o,...E})},requestMode:(h)=>r?.requestMode(h),openLink:(h,x)=>{if(r)r.openLink(h,x);else if(typeof window<"u")window.open(h,x??"_blank")},updateContext:(h)=>{if(r)r.updateContext(h)},setupAutoResize:(h)=>{if(!r)return Ss;let x=typeof h==="string"?Wt(h):h;return r.setupAutoResize(x)},notifyPreferredSize:(h)=>{if(r)r.notifyPreferredSize(h)},host:i,capabilities:i.capabilities,theme:i.theme,transport:o,destroy:()=>r?.disconnect()}}var Ss=()=>{};function Wt(e){if(typeof e==="string"){if(typeof document>"u")throw Error("Cannot resolve selector outside browser");let t=document.querySelector(e);if(!(t instanceof HTMLElement))throw Error(`Element not found: ${e}`);return t}return e}function Rs(){function e(){let n=document.body.getAttribute("data-vscode-theme-kind");if(!n)return;let o=n.includes("light")?"light":"dark";document.documentElement.setAttribute("data-theme",o)}e(),new MutationObserver(e).observe(document.body,{attributes:!0,attributeFilter:["data-vscode-theme-kind"]})}var Kt=it("auto"),Eo="#root";function Jt(e){return z.isPrefabData(e)}function To(e){return z.isPrefabUpdate(e)}function Mo(e){if(Jt(e))return e;if(k(e)){let t=e;if(Jt(t.structuredContent))return t.structuredContent;if(Array.isArray(t.content)){for(let n of t.content)if(k(n)&&n.type==="text"&&typeof n.text==="string")try{let o=JSON.parse(n.text);if(Jt(o))return o}catch{}}}return null}async function No(){let e=document.querySelector(Eo);if(!e){Kt.error(`Mount target "${Eo}" not found`);return}let t=e,n=await ot();n.setupAutoResize(t);let o;function r(i){if(o)o.destroy();if(o=n.mount(t,i),i.layout)n.notifyPreferredSize(i.layout)}n.onToolResult((i)=>{let s=Mo(i);if(s)r(s);else if(To(i)&&o)o.update(i)}),n.onToolInput((i)=>{let s=Mo(i);if(s)r(s);else if(To(i)&&o)o.update(i)})}function Es(){if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",()=>{No().catch((e)=>{Kt.error("Boot failed:",e)})},{once:!0});else queueMicrotask(()=>{No().catch((e)=>{Kt.error("Boot failed:",e)})})}Es();})();
@@ -13,4 +13,4 @@ ${n}
13
13
  ${Bt(e.dark," ")}
14
14
  }
15
15
  }`)}return t.join(`
16
- `)}function Re(e,t){e.setAttribute("data-theme",t),e.classList.toggle("dark",t==="dark"),e.classList.toggle("light",t==="light")}function zt(e,t){if(!t)return;if(t.light)for(let[n,o]of Object.entries(t.light))e.style.setProperty(`--${Vt(n)}`,_t(o));if(t.dark){let o=document.getElementById("prefab-dark-theme");if(!o)o=document.createElement("style"),o.id="prefab-dark-theme",document.head.appendChild(o);o.textContent=po({dark:t.dark})}}function Jt(e,t){if(!e||typeof document>"u")return;let n=(o)=>{for(let[r,i]of Object.entries(e))if(hs(r,o))o.preventDefault(),t(i)};return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)}function hs(e,t){let n=e.toLowerCase().split("+").map((i)=>i.trim()),o=n[n.length-1],r=new Set(n.slice(0,-1));if(r.has("ctrl")!==(t.ctrlKey||t.metaKey))return!1;if(r.has("shift")!==t.shiftKey)return!1;if(r.has("alt")!==t.altKey)return!1;return t.key.toLowerCase()===o}var uo='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z"/></svg>',fo='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.72 9.72 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z"/></svg>',mo={"top-right":"top: 8px; right: 8px;","top-left":"top: 8px; left: 8px;","bottom-right":"bottom: 8px; right: 8px;","bottom-left":"bottom: 8px; left: 8px;"};function ys(e,t){try{let o=localStorage.getItem(t);if(o==="light"||o==="dark")return o}catch{}let n=e.getAttribute("data-theme")??document.documentElement.getAttribute("data-theme");if(n==="light"||n==="dark")return n;if(typeof window<"u"&&window.matchMedia("(prefers-color-scheme: light)").matches)return"light";return"dark"}function Ie(e,t){if(typeof document>"u")return()=>{};let n=t?.position??"top-right",o=t?.storageKey??"prefab-theme",r=t?.syncDocument??!0,i=getComputedStyle(e).position;if(i==="static"||i==="")e.style.position="relative";let s=document.createElement("button");s.className="pf-theme-toggle",s.setAttribute("aria-label","Toggle theme"),s.setAttribute("title","Toggle light/dark"),Object.assign(s.style,{position:"absolute",zIndex:"100",width:"28px",height:"28px",border:"1px solid var(--border, #e5e7eb)",borderRadius:"6px",background:"var(--card, rgba(255,255,255,0.8))",color:"var(--foreground, #333)",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",padding:"0",opacity:"0.7",transition:"opacity 0.15s, border-color 0.15s"});let a=mo[n]??mo["top-right"];for(let d of a.split(";")){let[g,m]=d.split(":").map((b)=>b.trim());if(g&&m)s.style.setProperty(g,m)}s.addEventListener("mouseenter",()=>{s.style.opacity="1"}),s.addEventListener("mouseleave",()=>{s.style.opacity="0.7"});function l(d){if(Re(e,d),r)Re(document.documentElement,d);s.innerHTML=d==="dark"?fo:uo;try{localStorage.setItem(o,d)}catch{}}let c=ys(e,o);l(c),s.addEventListener("click",()=>{let d=e.getAttribute("data-theme")??"dark";l(d==="dark"?"light":"dark")}),e.appendChild(s);let u;if(r)u=new MutationObserver((d)=>{for(let g of d)if(g.type==="attributes"&&g.attributeName==="data-theme"){let m=document.documentElement.getAttribute("data-theme");if((m==="light"||m==="dark")&&m!==e.getAttribute("data-theme")){Re(e,m),s.innerHTML=m==="dark"?fo:uo;try{localStorage.setItem(o,m)}catch{}}}}),u.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]});return()=>{u?.disconnect(),s.remove()}}function at(e){let t=e?.baseUrl??(typeof window<"u"?window.location.origin:""),n={"Content-Type":"application/json",...e?.headers},o=e?.fetch??globalThis.fetch.bind(globalThis);return{async callTool(r,i){let s=await o(`${t}/mcp/tools/call`,{method:"POST",headers:n,body:JSON.stringify({jsonrpc:"2.0",method:"tools/call",params:{name:r,arguments:i}})});if(!s.ok)throw Error(`MCP tool call failed: ${s.status} ${s.statusText}`);let a=await s.json(),l=P(a);if(!l)return a;if(Boolean(l.error))throw Error(y(P(l.error)?.message)??"MCP tool call returned error");let u=W(P(l.result)?.content??l.content);for(let d of u)if(d.type==="text"&&typeof d.text==="string"){try{return JSON.parse(d.text)}catch{}return d.text}return l.result??l},async sendMessage(r){await o(`${t}/mcp/messages`,{method:"POST",headers:n,body:JSON.stringify({message:r})})}}}function lt(){return{callTool(e){return M.warn(`No MCP transport: callTool('${e}') ignored`),Promise.resolve(null)},sendMessage(e){return M.warn("No MCP transport: sendMessage ignored",e),Promise.resolve()}}}var go="0.3.21";var bs=["light","dark","auto"],Cs=["inline","fullscreen","pip"];function ho(e){return S(e)&&typeof e.type==="string"&&(e.id===void 0||typeof e.id==="string")&&(e.payload===void 0||S(e.payload))}function ct(e){return typeof e==="boolean"?e:void 0}function yo(e){let t=P(e.capabilities)??{},n=P(e.theme),o=P(e.toolInput),r=P(e.meta);return{hostName:y(e.hostName),hostVersion:y(e.hostVersion),capabilities:{toast:ct(t.toast),clipboard:ct(t.clipboard),navigation:ct(t.navigation),messaging:ct(t.messaging),displayModes:Wt(t.displayModes)},...n&&{theme:xs(n)},...o&&{toolInput:o},...r&&{meta:r}}}function xs(e){let t=y(e.fontCss);return{...dt({theme:e.colorScheme,styles:{variables:e.variables}}),...t!=null&&{fontCss:t}}}function Wt(e){let t=Array.isArray(e)?e:[];return Cs.filter((n)=>t.includes(n))}function dt(e){let t={},n=bs.find((s)=>s===e.theme);if(n)t.colorScheme=n;let o=P(e.styles),r=P(o?.variables);if(r)t.variables=Object.fromEntries(Object.entries(r).filter((s)=>typeof s[1]==="string"));let i=y(P(o?.css)?.fonts);if(i!=null)t.fontCss=i;return t}function vs(e){return S(e)&&e.jsonrpc==="2.0"}class ye{hostOrigin;listeners=new Map;protocol="prefab";cleanup;pending=new Map;callIdCounter=0;rpcPending=new Map;rpcIdCounter=0;sentRpcIds=new Set;postFn;_hostSupportsSubscriptions=!1;constructor(e="*"){this.hostOrigin=e}connect(){if(typeof window>"u")return;let e=ks();if(e)this.postFn=(n)=>e.postMessage(n);let t=(n)=>{if(this.hostOrigin!=="*"&&n.origin!==this.hostOrigin)return;let o=n.data;if(vs(o)){this.handleJsonRpc(o);return}if(!ho(o)||!o.type.startsWith("prefab:"))return;let r=o;if(r.type==="prefab:tool-call-response"&&r.id){let s=this.pending.get(r.id);if(s){if(this.pending.delete(r.id),r.payload?.error!=null)s.reject(Error(v(r.payload.error)));else s.resolve(r.payload?.result);return}}let i=this.listeners.get(r.type);if(i)for(let s of i)s(r.payload??{})};window.addEventListener("message",t),this.cleanup=()=>window.removeEventListener("message",t)}async initialize(e){try{return await Promise.any([this.initPrefab(e),this.initJsonRpc(e)])}catch(t){let n=t instanceof AggregateError?t.errors.map((o)=>o.message).join("; "):String(t);throw Error(`Bridge init failed — no host responded. Tried: ${n}`,{cause:t})}}createTransport(){if(this.protocol==="jsonrpc")return this.createJsonRpcTransport();return this.createPrefabTransport()}requestMode(e){if(this.protocol==="jsonrpc")this.sendRpcRequest("ui/request-display-mode",{mode:e});else this.sendPrefab("prefab:request-mode",{mode:e})}openLink(e,t){if(this.protocol==="jsonrpc")this.sendRpcRequest("ui/open-link",{url:e,target:t});else this.sendPrefab("prefab:open-link",{url:e,target:t})}updateContext(e){if(this.protocol==="jsonrpc")this.sendRpcRequest("ui/update-model-context",{structuredContent:e});else this.sendPrefab("prefab:update-context",{context:e})}setupAutoResize(e){if(typeof ResizeObserver>"u")return bo;let t=-1,n=-1,o=(s,a)=>{if(s===t&&a===n)return;if(t=s,n=a,this.protocol==="jsonrpc")this.sendRpcNotification("ui/notifications/size-changed",{width:s,height:a});else this.sendPrefab("prefab:size-changed",{width:s,height:a})},r=new ResizeObserver((s)=>{for(let a of s)if(a.borderBoxSize.length){let l=a.borderBoxSize[0];o(Math.ceil(l.inlineSize),Math.ceil(l.blockSize))}else{let l=a.target.getBoundingClientRect();o(Math.ceil(l.width),Math.ceil(l.height))}});r.observe(e);let i=e.getBoundingClientRect();return o(Math.ceil(i.width),Math.ceil(i.height)),()=>r.disconnect()}notifyPreferredSize(e){if(this.protocol==="jsonrpc")this.sendRpcNotification("ui/notifications/preferred-size",e);else this.sendPrefab("prefab:preferred-size",e)}subscribe(e,t,n){let o=(r)=>{if(r.uri!==e)return;t(r.contents??r.data??r)};if(this.protocol==="jsonrpc")this.on("prefab:resource-updated",o),this.sendRpcRequest("resources/subscribe",{uri:e}).catch((r)=>{this.off("prefab:resource-updated",o),n?.(r)});else this.on("prefab:resource-updated",o),this.sendPrefab("prefab:subscribe",{uri:e});return()=>{if(this.off("prefab:resource-updated",o),this.protocol==="jsonrpc")this.sendRpcRequest("resources/unsubscribe",{uri:e}).catch(bo);else this.sendPrefab("prefab:unsubscribe",{uri:e})}}get supportsSubscriptions(){return this._hostSupportsSubscriptions}on(e,t){if(!this.listeners.has(e))this.listeners.set(e,new Set);let n=this.listeners.get(e);if(n)n.add(t)}off(e,t){this.listeners.get(e)?.delete(t)}disconnect(){this.cleanup?.(),this.listeners.clear();for(let[,e]of this.pending)e.reject(Error("Bridge disconnected"));this.pending.clear();for(let[,e]of this.rpcPending)e.reject(Error("Bridge disconnected"));this.rpcPending.clear(),this.sentRpcIds.clear()}get activeProtocol(){return this.protocol}initPrefab(e){return new Promise((t,n)=>{let o=!1,r=(i)=>{if(o)return;o=!0,this.off("prefab:init-response",r),this.protocol="prefab",this._hostSupportsSubscriptions=P(i.capabilities)?.subscriptions===!0,t(yo(i))};this.on("prefab:init-response",r),this.sendPrefab("prefab:init",{capabilities:e}),setTimeout(()=>{if(!o)o=!0,this.off("prefab:init-response",r),n(Error("prefab:init timeout"))},2000)})}createPrefabTransport(){return{callTool:(e,t)=>{let n=`tc-${++this.callIdCounter}`;return new Promise((o,r)=>{this.pending.set(n,{resolve:o,reject:r}),this.sendPrefab("prefab:tool-call",{tool:e,arguments:t},n),setTimeout(()=>{if(this.pending.has(n))this.pending.delete(n),r(Error(`Tool call '${e}' timed out`))},30000)})},sendMessage:(e)=>(this.sendPrefab("prefab:send-message",{message:e}),Promise.resolve()),updateModelContext:(e)=>(this.sendPrefab("prefab:update-context",{context:e.structuredContent,content:e.content}),Promise.resolve()),subscribe:(e,t,n)=>this.subscribe(e,t,n),capabilities:{subscriptions:this._hostSupportsSubscriptions}}}sendPrefab(e,t,n){if(typeof window>"u")return;let o=window.parent!==window?window.parent:window,r={type:e,payload:t,id:n};o.postMessage(r,this.hostOrigin)}handleJsonRpc(e){if(!("method"in e)){let o=this.rpcPending.get(e.id);if(o)if(this.rpcPending.delete(e.id),e.error)o.reject(Error(e.error.message));else o.resolve(e.result);return}let t=e.method,n=e.params??{};if(e.id!=null&&this.sentRpcIds.delete(e.id))return;if(e.id!=null)this.postJsonRpc({jsonrpc:"2.0",id:e.id,result:{}});switch(t){case"ui/notifications/tool-input":this.dispatch("prefab:tool-input",{args:n.arguments??n});break;case"ui/notifications/tool-input-partial":this.dispatch("prefab:tool-input-partial",{args:n.arguments??n});break;case"ui/notifications/tool-result":this.dispatch("prefab:tool-result",{result:n});break;case"ui/notifications/tool-cancelled":this.dispatch("prefab:tool-cancelled",n);break;case"ui/notifications/host-context-changed":{this.dispatch("prefab:theme-update",{...dt(n)}),this.dispatch("prefab:host-context-changed",n);break}case"ui/resource-teardown":this.dispatch("prefab:teardown",n);break;case"ui/notifications/resource-updated":case"notifications/resources/updated":this.dispatch("prefab:resource-updated",n);break}}initJsonRpc(e){return new Promise((t,n)=>{let o=++this.rpcIdCounter,r=!1;this.rpcPending.set(o,{resolve:(i)=>{if(r)return;r=!0,this.protocol="jsonrpc";let s=P(i)??{},a=P(s.hostInfo)??{},l=P(s.hostContext)??{},c=P(s.hostCapabilities)??{},u=typeof l.theme==="string"||S(l.styles)?dt(l):void 0;this.postJsonRpc({jsonrpc:"2.0",method:"ui/notifications/initialized",params:{}});let d=P(c.resources);this._hostSupportsSubscriptions=c.subscriptions===!0||d?.subscribe===!0,t({hostName:y(a.name),hostVersion:y(a.version),capabilities:{toast:!0,navigation:c.openLinks!=null,messaging:!0,displayModes:Wt(l.availableDisplayModes)},theme:u,toolInput:void 0,meta:l})},reject:(i)=>{if(r)return;r=!0,n(i)}}),this.postJsonRpc({jsonrpc:"2.0",id:o,method:"ui/initialize",params:{protocolVersion:"2026-01-26",appInfo:{name:"prefab",version:go},appCapabilities:{...e.displayModes&&{availableDisplayModes:e.displayModes}}}}),setTimeout(()=>{if(!r)r=!0,this.rpcPending.delete(o),n(Error("ui/initialize timeout"))},2000)})}createJsonRpcTransport(){return{callTool:(e,t)=>this.sendRpcRequest("tools/call",{name:e,arguments:t}),sendMessage:async(e)=>{await this.sendRpcRequest("ui/message",{role:"user",content:[{type:"text",text:e}]})},updateModelContext:async(e)=>{await this.sendRpcRequest("ui/update-model-context",{...e})},subscribe:(e,t,n)=>this.subscribe(e,t,n),capabilities:{subscriptions:this._hostSupportsSubscriptions}}}sendRpcRequest(e,t){let n=++this.rpcIdCounter;return new Promise((o,r)=>{this.rpcPending.set(n,{resolve:o,reject:r}),this.postJsonRpc({jsonrpc:"2.0",id:n,method:e,params:t}),setTimeout(()=>{if(this.rpcPending.has(n))this.rpcPending.delete(n),r(Error(`JSON-RPC '${e}' timed out`))},30000)})}sendRpcNotification(e,t){this.postJsonRpc({jsonrpc:"2.0",method:e,params:t})}postJsonRpc(e){if(typeof window>"u")return;if((typeof e.id==="number"||typeof e.id==="string")&&typeof e.method==="string")this.sentRpcIds.add(e.id);if(this.postFn)this.postFn(e);else(window.parent!==window?window.parent:window).postMessage(e,this.hostOrigin)}dispatch(e,t){let n=this.listeners.get(e);if(n)for(let o of n)o(t)}}var bo=()=>{};function je(e,t){if(t.variables)for(let[n,o]of Object.entries(t.variables))e.style.setProperty(n.startsWith("--")?n:`--${n}`,o);if(t.colorScheme&&t.colorScheme!=="auto")e.setAttribute("data-theme",t.colorScheme);if(t.fontCss)ws(t.fontCss)}function ws(e){if(document.getElementById("__prefab-host-fonts"))return;let n=document.createElement("style");n.id="__prefab-host-fonts",n.textContent=e,document.head.appendChild(n)}function Ee(){if(typeof window>"u")return!1;try{return window.self!==window.top}catch{return!0}}function ks(){if(typeof window>"u")return;let e=Reflect.get(window,"acquireVsCodeApi");if(typeof e==="function")try{let t=Reflect.apply(e,void 0,[]);if(S(t)&&typeof t.postMessage==="function"){let n=t.postMessage;return{postMessage:(o)=>{Reflect.apply(n,t,[o])}}}}catch{return}return}async function pt(e){st();let t=e?.mode??"auto",n=t==="bridge"||t==="auto"&&Ee(),o,r,i={capabilities:{}};if(n)r=new ye(e?.hostOrigin),r.connect(),i=await r.initialize(e?.capabilities??{toolInput:!0}),o=r.createTransport();else if(e?.transport)o=at(e.transport);else o=lt();if(i.theme&&typeof document<"u")je(document.documentElement,i.theme);if(typeof document<"u"&&!r)Rs();let s,a,l,c,u,d=i.toolInput,g;if(r)r.on("prefab:tool-input",(h)=>{let x=P(h.args)??h;if(s)s(x);else d=x}),r.on("prefab:tool-result",(h)=>{let x=h.result??h;if(a)a(x);else g=x}),r.on("prefab:tool-cancelled",()=>{l?.()}),r.on("prefab:tool-input-partial",(h)=>{c?.(P(h.args)??h)}),r.on("prefab:theme-update",(h)=>{if(typeof document<"u")je(document.documentElement,h)}),r.on("prefab:host-context-changed",(h)=>{u?.(h)});function m(h,...x){let E=Kt(h),w=new Me,R={store:w,scope:{},transport:o,rerender:()=>k(),onToast:void 0};function k(){E.innerHTML="";for(let T of x)E.appendChild(V(T,R))}return k(),{rerender:k,store:w,destroy:()=>{E.innerHTML=""}}}return{callTool:(h,x={})=>o.callTool(h,x),sendMessage:(h)=>o.sendMessage(h),onToolInput:(h)=>{if(s=h,d){let x=d;d=void 0,queueMicrotask(()=>h(x))}},onToolResult:(h)=>{if(a=h,g!==void 0){let x=g;g=void 0,queueMicrotask(()=>h(x))}},onToolCancelled:(h)=>{l=h},onToolInputPartial:(h)=>{c=h},onHostContextChanged:(h)=>{u=h},render:m,mount:(h,x,E)=>{let w=Kt(h);return U.mount(w,x,{transport:o,...E})},requestMode:(h)=>r?.requestMode(h),openLink:(h,x)=>{if(r)r.openLink(h,x);else if(typeof window<"u")window.open(h,x??"_blank")},updateContext:(h)=>{if(r)r.updateContext(h)},setupAutoResize:(h)=>{if(!r)return Ss;let x=typeof h==="string"?Kt(h):h;return r.setupAutoResize(x)},notifyPreferredSize:(h)=>{if(r)r.notifyPreferredSize(h)},host:i,capabilities:i.capabilities,theme:i.theme,transport:o,destroy:()=>r?.disconnect()}}var Ss=()=>{};function Kt(e){if(typeof e==="string"){if(typeof document>"u")throw Error("Cannot resolve selector outside browser");let t=document.querySelector(e);if(!(t instanceof HTMLElement))throw Error(`Element not found: ${e}`);return t}return e}function Rs(){function e(){let n=document.body.getAttribute("data-vscode-theme-kind");if(!n)return;let o=n.includes("light")?"light":"dark";document.documentElement.setAttribute("data-theme",o)}e(),new MutationObserver(e).observe(document.body,{attributes:!0,attributeFilter:["data-vscode-theme-kind"]})}var Co=["Accordion","AccordionItem","Alert","AlertDescription","AlertTitle","AreaChart","Audio","Badge","BarChart","BlockQuote","Button","ButtonGroup","Calendar","Card","CardContent","CardDescription","CardFooter","CardHeader","CardTitle","Carousel","Checkbox","ChoiceCard","Code","Column","Combobox","ComboboxGroup","ComboboxLabel","ComboboxOption","ComboboxSeparator","Condition","Container","Dashboard","DashboardItem","DataTable","DatePicker","Define","Detail","Dialog","Div","Dot","DropZone","Elif","Else","Embed","ExpandableRow","Field","FieldContent","FieldDescription","FieldError","FieldTitle","ForEach","Form","Grid","GridItem","H1","H2","H3","H4","Heading","Histogram","HoverCard","Icon","If","Image","Input","Kbd","Label","Large","Lead","LineChart","Link","Loader","Markdown","MasterDetail","Mermaid","Metric","Muted","P","Page","Pages","PdfViewer","PieChart","Popover","Progress","RadarChart","RadialChart","Radio","RadioGroup","Ring","Row","ScatterChart","Select","SelectGroup","SelectLabel","SelectOption","SelectSeparator","Separator","Slider","Slot","Small","Span","Sparkline","Svg","Switch","Tab","Table","TableBody","TableCaption","TableCell","TableFooter","TableHead","TableHeader","TableRow","Tabs","Text","Textarea","Tooltip","Use","Video"];var wo=new Set(Co);function Te(e,t={}){let n=[],o=t.strict??!1;if(!S(e))return n.push({path:"$",message:"Wire data must be a non-null object"}),{valid:!1,errors:n};let r=e,i=r.$prefab;if(!S(i))n.push({path:"$.$prefab",message:"Missing or invalid $prefab header"});else if(typeof i.version!=="string")n.push({path:"$.$prefab.version",message:"version must be a string"});if(r.view==null)n.push({path:"$.view",message:'Missing required "view" field'});else Gt(r.view,"$.view",n,o);if(r.state!==void 0){if(r.state===null||typeof r.state!=="object"||Array.isArray(r.state))n.push({path:"$.state",message:"state must be a plain object"})}if(r.theme!==void 0)Ts(r.theme,n);if(r.css!==void 0)vo(r.css,"$.css",n);if(r.stylesheets!==void 0)vo(r.stylesheets,"$.stylesheets",n);if(r.mode!==void 0&&r.mode!=="light"&&r.mode!=="dark")n.push({path:"$.mode",message:'mode must be "light" or "dark"'});let s=r.defs;if(s!==void 0)if(!S(s))n.push({path:"$.defs",message:"defs must be a plain object"});else for(let[l,c]of Object.entries(s))Gt(c,`$.defs.${l}`,n,o);let a=r.keyBindings;if(a!==void 0)if(!S(a))n.push({path:"$.keyBindings",message:"keyBindings must be a plain object"});else for(let[l,c]of Object.entries(a))qt(c,`$.keyBindings.${l}`,n);return{valid:n.length===0,errors:n}}function ko(e){return Te(e).valid}function Gt(e,t,n,o){if(!S(e)){n.push({path:t,message:"Component must be a plain object"});return}let r=e;if(typeof r.type!=="string"||r.type.length===0){n.push({path:`${t}.type`,message:'Component must have a non-empty "type" string'});return}if(o&&!wo.has(r.type))n.push({path:`${t}.type`,message:`Unknown component type: "${r.type}"`});if(r.children!==void 0)if(!Array.isArray(r.children))n.push({path:`${t}.children`,message:"children must be an array"});else for(let s=0;s<r.children.length;s++)Gt(r.children[s],`${t}.children[${s}]`,n,o);let i=["onClick","on_click","onChange","on_change","onSubmit","on_submit","onMount","on_mount","onClose","on_close"];for(let s of i)if(r[s]!==void 0)qt(r[s],`${t}.${s}`,n);for(let[s,a]of Object.entries(r)){if(s==="type"||Es.has(s)||i.includes(s))continue;if(xo(a)||Array.isArray(a)&&a.some(xo))n.push({path:`${t}.${s}`,message:`Components under "${s}" are ignored by the renderer; move them into "children"`})}}var Es=new Set(["children","fallback","trigger","empty","else","summary"]);function xo(e){return S(e)&&typeof e.type==="string"&&wo.has(e.type)}function qt(e,t,n){if(Array.isArray(e)){for(let i=0;i<e.length;i++)qt(e[i],`${t}[${i}]`,n);return}if(!S(e)){n.push({path:t,message:"Action must be an object or array of objects"});return}let o=e,r=typeof o.action==="string"&&o.action.length>0?o.action:typeof o.type==="string"&&o.type.length>0?o.type:void 0;if(r===void 0){n.push({path:`${t}.type`,message:'Action must have a non-empty "type" or "action" string'});return}if(r.toLowerCase()==="showtoast"){if(typeof o.message!=="string"||o.message.length===0)n.push({path:`${t}.message`,message:'showToast requires a non-empty "message" string'})}}function vo(e,t,n){if(!Array.isArray(e)){n.push({path:t,message:`${t} must be an array of strings`});return}for(let o=0;o<e.length;o++)if(typeof e[o]!=="string")n.push({path:`${t}[${o}]`,message:"must be a string"})}function Ts(e,t){if(!S(e)){t.push({path:"$.theme",message:"theme must be a plain object"});return}for(let n of["light","dark"])if(e[n]!==void 0){if(!S(e[n]))t.push({path:`$.theme.${n}`,message:`theme.${n} must be a plain object`})}}var U={mount(e,t,n){if(st(),n?.validate!==!1)for(let w of Te(t).errors)M.warn(`wire validation ${w.path}: ${w.message}`);let o=t,r={tracked:[],evalBlocked:!1};if(o.pipes)for(let[w,R]of Object.entries(o.pipes))So(w,R,r);let i=new Me(o.state),s=n?.transport,a;if(!s)a=lt();else if("callTool"in s)a=s;else a=at(s);let l=n?.onToast??Ns,c=new He;function u(w){if(!U.isPrefabData(w))return;let R=w;if(o=R,R.state)i.merge(R.state);if(R.defs)g.defs=R.defs;if(R.theme)zt(e,R.theme);if(R.mode)Ro(e,R.mode);if(R.pipes)for(let[k,T]of Object.entries(R.pipes))So(k,T,r);for(let k of m)k.remove();if(m.length=0,m.push(...Eo(R.css,R.stylesheets)),To(e,R.layout),b?.(),b=void 0,R.keyBindings)b=Jt(R.keyBindings,(k)=>{D(O(k,{store:i,transport:a,scope:{},rerender:()=>E(),remount:u,onToast:l}),"keyBinding")});E(),d(R)}function d(w){if(w.onMount!=null)D(O(w.onMount,g),"onMount")}let g={store:i,scope:{},transport:a,rerender:()=>E(),remount:u,onToast:l,defs:o.defs,destroyRegistry:c};if(zt(e,o.theme),o.mode)Ro(e,o.mode);To(e,o.layout);let m=Eo(o.css,o.stylesheets),b;if(o.keyBindings)b=Jt(o.keyBindings,(w)=>{D(O(w,{store:i,transport:a,scope:{},rerender:()=>E(),remount:u,onToast:l}),"keyBinding")});let h,x=n?.themeToggle??!0;if(x!==!1)h=Ie(e,typeof x==="object"?x:void 0);function E(){c.flush();let w=e.querySelector(".pf-theme-toggle");e.innerHTML="";let R=V(o.view,g);if(e.appendChild(R),w)e.appendChild(w)}return E(),d(o),{rerender:()=>E(),update(w){if(i.merge(w.update.state),E(),w.update.actions!=null)D(O(w.update.actions,g),"update action")},store:i,destroy(){c.flush(),h?.(),b?.(),sn(),cn();for(let w of m)w.remove();for(let w of r.tracked)Le(w);e.innerHTML=""}}},isPrefabData(e){return e!=null&&typeof e==="object"&&"$prefab"in e},isPrefabUpdate(e){return e!=null&&typeof e==="object"&&"$prefab"in e&&"update"in e}};function Ms(e){if(e instanceof EvalError)return!0;return e instanceof Error&&/unsafe-eval|Content Security Policy|call to Function/i.test(e.message)}function So(e,t,n){if(rn.has(e)){M.warn(`wire pipe "${e}" ignored — shadows built-in`);return}if(_e(e)!=null){M.debug(`wire pipe "${e}" — already registered, keeping local implementation`);return}if(n.evalBlocked)return;try{let o=Function("return ("+t+")")();if(!en(o)){M.warn(`wire pipe "${e}" — source did not evaluate to a function`);return}Ne(e,o),n.tracked.push(e)}catch(o){if(Ms(o)){n.evalBlocked=!0,M.warn("wire pipes cannot be hydrated — this host's CSP forbids eval. Pre-register them with "+"prefab.registerPipe() from a companion script (rendererHtml({ scripts })) and they are used as-is.");return}M.warn(`wire pipe "${e}" — failed to hydrate:`,o)}}function Ns(e){if(typeof document>"u")return;let t=As(),n=document.createElement("div"),o=e.variant??"default";n.className=`pf-toast${o!=="default"?` pf-toast--${o}`:""}`,n.setAttribute("data-variant",o),n.style.marginBottom="8px",n.style.transition="opacity 0.3s ease";let r=document.createElement("div");if(r.textContent=e.message,r.style.fontWeight="500",n.appendChild(r),e.description){let s=document.createElement("div");s.textContent=e.description,s.style.fontSize="14px",s.style.color="var(--muted-foreground, #6b7280)",n.appendChild(s)}t.appendChild(n);let i=e.duration??4000;setTimeout(()=>{n.style.opacity="0",setTimeout(()=>n.remove(),300)},i)}function Ro(e,t){if(Re(e,t),typeof document<"u")Re(document.documentElement,t)}function Ls(e){let t=e.trim();if(t.includes("{")||t.includes("}"))return!1;return/^(https?:)?\/\//i.test(t)||t.startsWith("/")||/\.css(\?|#|$)/i.test(t)}function Eo(e,t){let n=[];if(typeof document>"u")return n;for(let o of e??[]){let r=document.createElement("style");r.textContent=o,r.dataset.prefab="injected",document.head.appendChild(r),n.push(r)}for(let o of t??[])if(Ls(o)){let r=document.createElement("link");r.rel="stylesheet",r.href=o,r.dataset.prefab="injected",document.head.appendChild(r),n.push(r)}else{let r=document.createElement("style");r.textContent=o,r.dataset.prefab="injected",document.head.appendChild(r),n.push(r)}return n}function To(e,t){if(e.style.height="",e.style.minHeight="",e.style.maxHeight="",e.style.overflow="",!t)return;if(t.preferredHeight!=null)e.style.height=`${t.preferredHeight}px`;if(t.minHeight!=null)e.style.minHeight=`${t.minHeight}px`;if(t.maxHeight!=null)e.style.maxHeight=`${t.maxHeight}px`,e.style.overflow="auto"}function As(){let t=document.getElementById("prefab-toast-container");if(!t)t=document.createElement("div"),t.id="prefab-toast-container",t.style.position="fixed",t.style.bottom="16px",t.style.right="16px",t.style.zIndex="9999",t.style.maxWidth="400px",document.body.appendChild(t);return t}if(typeof window<"u"){Object.assign(window,{PrefabRenderer:U}),Object.assign(window,{prefab:{app:pt,mount:U.mount.bind(U),isPrefabData:U.isPrefabData.bind(U),isPrefabUpdate:U.isPrefabUpdate.bind(U),Bridge:ye,isIframe:Ee,registerPipe:Ne,unregisterPipe:Le,listPipes:Ve,registerComponent:p,createThemeToggle:Ie,validateWireFormat:Te,setLogLevel:Be}});let e=Reflect.get(window,"__PREFAB_DATA__");if(U.isPrefabData(e)){let t=document.getElementById("prefab-root");if(t)U.mount(t,e)}}})();
16
+ `)}function Re(e,t){e.setAttribute("data-theme",t),e.classList.toggle("dark",t==="dark"),e.classList.toggle("light",t==="light")}function zt(e,t){if(!t)return;if(t.light)for(let[n,o]of Object.entries(t.light))e.style.setProperty(`--${Vt(n)}`,_t(o));if(t.dark){let o=document.getElementById("prefab-dark-theme");if(!o)o=document.createElement("style"),o.id="prefab-dark-theme",document.head.appendChild(o);o.textContent=po({dark:t.dark})}}function Jt(e,t){if(!e||typeof document>"u")return;let n=(o)=>{for(let[r,i]of Object.entries(e))if(hs(r,o))o.preventDefault(),t(i)};return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)}function hs(e,t){let n=e.toLowerCase().split("+").map((i)=>i.trim()),o=n[n.length-1],r=new Set(n.slice(0,-1));if(r.has("ctrl")!==(t.ctrlKey||t.metaKey))return!1;if(r.has("shift")!==t.shiftKey)return!1;if(r.has("alt")!==t.altKey)return!1;return t.key.toLowerCase()===o}var uo='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z"/></svg>',fo='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.72 9.72 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z"/></svg>',mo={"top-right":"top: 8px; right: 8px;","top-left":"top: 8px; left: 8px;","bottom-right":"bottom: 8px; right: 8px;","bottom-left":"bottom: 8px; left: 8px;"};function ys(e,t){try{let o=localStorage.getItem(t);if(o==="light"||o==="dark")return o}catch{}let n=e.getAttribute("data-theme")??document.documentElement.getAttribute("data-theme");if(n==="light"||n==="dark")return n;if(typeof window<"u"&&window.matchMedia("(prefers-color-scheme: light)").matches)return"light";return"dark"}function Ie(e,t){if(typeof document>"u")return()=>{};let n=t?.position??"top-right",o=t?.storageKey??"prefab-theme",r=t?.syncDocument??!0,i=getComputedStyle(e).position;if(i==="static"||i==="")e.style.position="relative";let s=document.createElement("button");s.className="pf-theme-toggle",s.setAttribute("aria-label","Toggle theme"),s.setAttribute("title","Toggle light/dark"),Object.assign(s.style,{position:"absolute",zIndex:"100",width:"28px",height:"28px",border:"1px solid var(--border, #e5e7eb)",borderRadius:"6px",background:"var(--card, rgba(255,255,255,0.8))",color:"var(--foreground, #333)",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",padding:"0",opacity:"0.7",transition:"opacity 0.15s, border-color 0.15s"});let a=mo[n]??mo["top-right"];for(let d of a.split(";")){let[g,m]=d.split(":").map((b)=>b.trim());if(g&&m)s.style.setProperty(g,m)}s.addEventListener("mouseenter",()=>{s.style.opacity="1"}),s.addEventListener("mouseleave",()=>{s.style.opacity="0.7"});function l(d){if(Re(e,d),r)Re(document.documentElement,d);s.innerHTML=d==="dark"?fo:uo;try{localStorage.setItem(o,d)}catch{}}let c=ys(e,o);l(c),s.addEventListener("click",()=>{let d=e.getAttribute("data-theme")??"dark";l(d==="dark"?"light":"dark")}),e.appendChild(s);let u;if(r)u=new MutationObserver((d)=>{for(let g of d)if(g.type==="attributes"&&g.attributeName==="data-theme"){let m=document.documentElement.getAttribute("data-theme");if((m==="light"||m==="dark")&&m!==e.getAttribute("data-theme")){Re(e,m),s.innerHTML=m==="dark"?fo:uo;try{localStorage.setItem(o,m)}catch{}}}}),u.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]});return()=>{u?.disconnect(),s.remove()}}function at(e){let t=e?.baseUrl??(typeof window<"u"?window.location.origin:""),n={"Content-Type":"application/json",...e?.headers},o=e?.fetch??globalThis.fetch.bind(globalThis);return{async callTool(r,i){let s=await o(`${t}/mcp/tools/call`,{method:"POST",headers:n,body:JSON.stringify({jsonrpc:"2.0",method:"tools/call",params:{name:r,arguments:i}})});if(!s.ok)throw Error(`MCP tool call failed: ${s.status} ${s.statusText}`);let a=await s.json(),l=P(a);if(!l)return a;if(Boolean(l.error))throw Error(y(P(l.error)?.message)??"MCP tool call returned error");let u=W(P(l.result)?.content??l.content);for(let d of u)if(d.type==="text"&&typeof d.text==="string"){try{return JSON.parse(d.text)}catch{}return d.text}return l.result??l},async sendMessage(r){await o(`${t}/mcp/messages`,{method:"POST",headers:n,body:JSON.stringify({message:r})})}}}function lt(){return{callTool(e){return M.warn(`No MCP transport: callTool('${e}') ignored`),Promise.resolve(null)},sendMessage(e){return M.warn("No MCP transport: sendMessage ignored",e),Promise.resolve()}}}var go="0.3.22";var bs=["light","dark","auto"],Cs=["inline","fullscreen","pip"];function ho(e){return S(e)&&typeof e.type==="string"&&(e.id===void 0||typeof e.id==="string")&&(e.payload===void 0||S(e.payload))}function ct(e){return typeof e==="boolean"?e:void 0}function yo(e){let t=P(e.capabilities)??{},n=P(e.theme),o=P(e.toolInput),r=P(e.meta);return{hostName:y(e.hostName),hostVersion:y(e.hostVersion),capabilities:{toast:ct(t.toast),clipboard:ct(t.clipboard),navigation:ct(t.navigation),messaging:ct(t.messaging),displayModes:Wt(t.displayModes)},...n&&{theme:xs(n)},...o&&{toolInput:o},...r&&{meta:r}}}function xs(e){let t=y(e.fontCss);return{...dt({theme:e.colorScheme,styles:{variables:e.variables}}),...t!=null&&{fontCss:t}}}function Wt(e){let t=Array.isArray(e)?e:[];return Cs.filter((n)=>t.includes(n))}function dt(e){let t={},n=bs.find((s)=>s===e.theme);if(n)t.colorScheme=n;let o=P(e.styles),r=P(o?.variables);if(r)t.variables=Object.fromEntries(Object.entries(r).filter((s)=>typeof s[1]==="string"));let i=y(P(o?.css)?.fonts);if(i!=null)t.fontCss=i;return t}function vs(e){return S(e)&&e.jsonrpc==="2.0"}class ye{hostOrigin;listeners=new Map;protocol="prefab";cleanup;pending=new Map;callIdCounter=0;rpcPending=new Map;rpcIdCounter=0;sentRpcIds=new Set;postFn;_hostSupportsSubscriptions=!1;constructor(e="*"){this.hostOrigin=e}connect(){if(typeof window>"u")return;let e=ks();if(e)this.postFn=(n)=>e.postMessage(n);let t=(n)=>{if(this.hostOrigin!=="*"&&n.origin!==this.hostOrigin)return;let o=n.data;if(vs(o)){this.handleJsonRpc(o);return}if(!ho(o)||!o.type.startsWith("prefab:"))return;let r=o;if(r.type==="prefab:tool-call-response"&&r.id){let s=this.pending.get(r.id);if(s){if(this.pending.delete(r.id),r.payload?.error!=null)s.reject(Error(v(r.payload.error)));else s.resolve(r.payload?.result);return}}let i=this.listeners.get(r.type);if(i)for(let s of i)s(r.payload??{})};window.addEventListener("message",t),this.cleanup=()=>window.removeEventListener("message",t)}async initialize(e){try{return await Promise.any([this.initPrefab(e),this.initJsonRpc(e)])}catch(t){let n=t instanceof AggregateError?t.errors.map((o)=>o.message).join("; "):String(t);throw Error(`Bridge init failed — no host responded. Tried: ${n}`,{cause:t})}}createTransport(){if(this.protocol==="jsonrpc")return this.createJsonRpcTransport();return this.createPrefabTransport()}requestMode(e){if(this.protocol==="jsonrpc")this.sendRpcRequest("ui/request-display-mode",{mode:e});else this.sendPrefab("prefab:request-mode",{mode:e})}openLink(e,t){if(this.protocol==="jsonrpc")this.sendRpcRequest("ui/open-link",{url:e,target:t});else this.sendPrefab("prefab:open-link",{url:e,target:t})}updateContext(e){if(this.protocol==="jsonrpc")this.sendRpcRequest("ui/update-model-context",{structuredContent:e});else this.sendPrefab("prefab:update-context",{context:e})}setupAutoResize(e){if(typeof ResizeObserver>"u")return bo;let t=-1,n=-1,o=(s,a)=>{if(s===t&&a===n)return;if(t=s,n=a,this.protocol==="jsonrpc")this.sendRpcNotification("ui/notifications/size-changed",{width:s,height:a});else this.sendPrefab("prefab:size-changed",{width:s,height:a})},r=new ResizeObserver((s)=>{for(let a of s)if(a.borderBoxSize.length){let l=a.borderBoxSize[0];o(Math.ceil(l.inlineSize),Math.ceil(l.blockSize))}else{let l=a.target.getBoundingClientRect();o(Math.ceil(l.width),Math.ceil(l.height))}});r.observe(e);let i=e.getBoundingClientRect();return o(Math.ceil(i.width),Math.ceil(i.height)),()=>r.disconnect()}notifyPreferredSize(e){if(this.protocol==="jsonrpc")this.sendRpcNotification("ui/notifications/preferred-size",e);else this.sendPrefab("prefab:preferred-size",e)}subscribe(e,t,n){let o=(r)=>{if(r.uri!==e)return;t(r.contents??r.data??r)};if(this.protocol==="jsonrpc")this.on("prefab:resource-updated",o),this.sendRpcRequest("resources/subscribe",{uri:e}).catch((r)=>{this.off("prefab:resource-updated",o),n?.(r)});else this.on("prefab:resource-updated",o),this.sendPrefab("prefab:subscribe",{uri:e});return()=>{if(this.off("prefab:resource-updated",o),this.protocol==="jsonrpc")this.sendRpcRequest("resources/unsubscribe",{uri:e}).catch(bo);else this.sendPrefab("prefab:unsubscribe",{uri:e})}}get supportsSubscriptions(){return this._hostSupportsSubscriptions}on(e,t){if(!this.listeners.has(e))this.listeners.set(e,new Set);let n=this.listeners.get(e);if(n)n.add(t)}off(e,t){this.listeners.get(e)?.delete(t)}disconnect(){this.cleanup?.(),this.listeners.clear();for(let[,e]of this.pending)e.reject(Error("Bridge disconnected"));this.pending.clear();for(let[,e]of this.rpcPending)e.reject(Error("Bridge disconnected"));this.rpcPending.clear(),this.sentRpcIds.clear()}get activeProtocol(){return this.protocol}initPrefab(e){return new Promise((t,n)=>{let o=!1,r=(i)=>{if(o)return;o=!0,this.off("prefab:init-response",r),this.protocol="prefab",this._hostSupportsSubscriptions=P(i.capabilities)?.subscriptions===!0,t(yo(i))};this.on("prefab:init-response",r),this.sendPrefab("prefab:init",{capabilities:e}),setTimeout(()=>{if(!o)o=!0,this.off("prefab:init-response",r),n(Error("prefab:init timeout"))},2000)})}createPrefabTransport(){return{callTool:(e,t)=>{let n=`tc-${++this.callIdCounter}`;return new Promise((o,r)=>{this.pending.set(n,{resolve:o,reject:r}),this.sendPrefab("prefab:tool-call",{tool:e,arguments:t},n),setTimeout(()=>{if(this.pending.has(n))this.pending.delete(n),r(Error(`Tool call '${e}' timed out`))},30000)})},sendMessage:(e)=>(this.sendPrefab("prefab:send-message",{message:e}),Promise.resolve()),updateModelContext:(e)=>(this.sendPrefab("prefab:update-context",{context:e.structuredContent,content:e.content}),Promise.resolve()),subscribe:(e,t,n)=>this.subscribe(e,t,n),capabilities:{subscriptions:this._hostSupportsSubscriptions}}}sendPrefab(e,t,n){if(typeof window>"u")return;let o=window.parent!==window?window.parent:window,r={type:e,payload:t,id:n};o.postMessage(r,this.hostOrigin)}handleJsonRpc(e){if(!("method"in e)){let o=this.rpcPending.get(e.id);if(o)if(this.rpcPending.delete(e.id),e.error)o.reject(Error(e.error.message));else o.resolve(e.result);return}let t=e.method,n=e.params??{};if(e.id!=null&&this.sentRpcIds.delete(e.id))return;if(e.id!=null)this.postJsonRpc({jsonrpc:"2.0",id:e.id,result:{}});switch(t){case"ui/notifications/tool-input":this.dispatch("prefab:tool-input",{args:n.arguments??n});break;case"ui/notifications/tool-input-partial":this.dispatch("prefab:tool-input-partial",{args:n.arguments??n});break;case"ui/notifications/tool-result":this.dispatch("prefab:tool-result",{result:n});break;case"ui/notifications/tool-cancelled":this.dispatch("prefab:tool-cancelled",n);break;case"ui/notifications/host-context-changed":{this.dispatch("prefab:theme-update",{...dt(n)}),this.dispatch("prefab:host-context-changed",n);break}case"ui/resource-teardown":this.dispatch("prefab:teardown",n);break;case"ui/notifications/resource-updated":case"notifications/resources/updated":this.dispatch("prefab:resource-updated",n);break}}initJsonRpc(e){return new Promise((t,n)=>{let o=++this.rpcIdCounter,r=!1;this.rpcPending.set(o,{resolve:(i)=>{if(r)return;r=!0,this.protocol="jsonrpc";let s=P(i)??{},a=P(s.hostInfo)??{},l=P(s.hostContext)??{},c=P(s.hostCapabilities)??{},u=typeof l.theme==="string"||S(l.styles)?dt(l):void 0;this.postJsonRpc({jsonrpc:"2.0",method:"ui/notifications/initialized",params:{}});let d=P(c.resources);this._hostSupportsSubscriptions=c.subscriptions===!0||d?.subscribe===!0,t({hostName:y(a.name),hostVersion:y(a.version),capabilities:{toast:!0,navigation:c.openLinks!=null,messaging:!0,displayModes:Wt(l.availableDisplayModes)},theme:u,toolInput:void 0,meta:l})},reject:(i)=>{if(r)return;r=!0,n(i)}}),this.postJsonRpc({jsonrpc:"2.0",id:o,method:"ui/initialize",params:{protocolVersion:"2026-01-26",appInfo:{name:"prefab",version:go},appCapabilities:{...e.displayModes&&{availableDisplayModes:e.displayModes}}}}),setTimeout(()=>{if(!r)r=!0,this.rpcPending.delete(o),n(Error("ui/initialize timeout"))},2000)})}createJsonRpcTransport(){return{callTool:(e,t)=>this.sendRpcRequest("tools/call",{name:e,arguments:t}),sendMessage:async(e)=>{await this.sendRpcRequest("ui/message",{role:"user",content:[{type:"text",text:e}]})},updateModelContext:async(e)=>{await this.sendRpcRequest("ui/update-model-context",{...e})},subscribe:(e,t,n)=>this.subscribe(e,t,n),capabilities:{subscriptions:this._hostSupportsSubscriptions}}}sendRpcRequest(e,t){let n=++this.rpcIdCounter;return new Promise((o,r)=>{this.rpcPending.set(n,{resolve:o,reject:r}),this.postJsonRpc({jsonrpc:"2.0",id:n,method:e,params:t}),setTimeout(()=>{if(this.rpcPending.has(n))this.rpcPending.delete(n),r(Error(`JSON-RPC '${e}' timed out`))},30000)})}sendRpcNotification(e,t){this.postJsonRpc({jsonrpc:"2.0",method:e,params:t})}postJsonRpc(e){if(typeof window>"u")return;if((typeof e.id==="number"||typeof e.id==="string")&&typeof e.method==="string")this.sentRpcIds.add(e.id);if(this.postFn)this.postFn(e);else(window.parent!==window?window.parent:window).postMessage(e,this.hostOrigin)}dispatch(e,t){let n=this.listeners.get(e);if(n)for(let o of n)o(t)}}var bo=()=>{};function je(e,t){if(t.variables)for(let[n,o]of Object.entries(t.variables))e.style.setProperty(n.startsWith("--")?n:`--${n}`,o);if(t.colorScheme&&t.colorScheme!=="auto")e.setAttribute("data-theme",t.colorScheme);if(t.fontCss)ws(t.fontCss)}function ws(e){if(document.getElementById("__prefab-host-fonts"))return;let n=document.createElement("style");n.id="__prefab-host-fonts",n.textContent=e,document.head.appendChild(n)}function Ee(){if(typeof window>"u")return!1;try{return window.self!==window.top}catch{return!0}}function ks(){if(typeof window>"u")return;let e=Reflect.get(window,"acquireVsCodeApi");if(typeof e==="function")try{let t=Reflect.apply(e,void 0,[]);if(S(t)&&typeof t.postMessage==="function"){let n=t.postMessage;return{postMessage:(o)=>{Reflect.apply(n,t,[o])}}}}catch{return}return}async function pt(e){st();let t=e?.mode??"auto",n=t==="bridge"||t==="auto"&&Ee(),o,r,i={capabilities:{}};if(n)r=new ye(e?.hostOrigin),r.connect(),i=await r.initialize(e?.capabilities??{toolInput:!0}),o=r.createTransport();else if(e?.transport)o=at(e.transport);else o=lt();if(i.theme&&typeof document<"u")je(document.documentElement,i.theme);if(typeof document<"u"&&!r)Rs();let s,a,l,c,u,d=i.toolInput,g;if(r)r.on("prefab:tool-input",(h)=>{let x=P(h.args)??h;if(s)s(x);else d=x}),r.on("prefab:tool-result",(h)=>{let x=h.result??h;if(a)a(x);else g=x}),r.on("prefab:tool-cancelled",()=>{l?.()}),r.on("prefab:tool-input-partial",(h)=>{c?.(P(h.args)??h)}),r.on("prefab:theme-update",(h)=>{if(typeof document<"u")je(document.documentElement,h)}),r.on("prefab:host-context-changed",(h)=>{u?.(h)});function m(h,...x){let E=Kt(h),w=new Me,R={store:w,scope:{},transport:o,rerender:()=>k(),onToast:void 0};function k(){E.innerHTML="";for(let T of x)E.appendChild(V(T,R))}return k(),{rerender:k,store:w,destroy:()=>{E.innerHTML=""}}}return{callTool:(h,x={})=>o.callTool(h,x),sendMessage:(h)=>o.sendMessage(h),onToolInput:(h)=>{if(s=h,d){let x=d;d=void 0,queueMicrotask(()=>h(x))}},onToolResult:(h)=>{if(a=h,g!==void 0){let x=g;g=void 0,queueMicrotask(()=>h(x))}},onToolCancelled:(h)=>{l=h},onToolInputPartial:(h)=>{c=h},onHostContextChanged:(h)=>{u=h},render:m,mount:(h,x,E)=>{let w=Kt(h);return U.mount(w,x,{transport:o,...E})},requestMode:(h)=>r?.requestMode(h),openLink:(h,x)=>{if(r)r.openLink(h,x);else if(typeof window<"u")window.open(h,x??"_blank")},updateContext:(h)=>{if(r)r.updateContext(h)},setupAutoResize:(h)=>{if(!r)return Ss;let x=typeof h==="string"?Kt(h):h;return r.setupAutoResize(x)},notifyPreferredSize:(h)=>{if(r)r.notifyPreferredSize(h)},host:i,capabilities:i.capabilities,theme:i.theme,transport:o,destroy:()=>r?.disconnect()}}var Ss=()=>{};function Kt(e){if(typeof e==="string"){if(typeof document>"u")throw Error("Cannot resolve selector outside browser");let t=document.querySelector(e);if(!(t instanceof HTMLElement))throw Error(`Element not found: ${e}`);return t}return e}function Rs(){function e(){let n=document.body.getAttribute("data-vscode-theme-kind");if(!n)return;let o=n.includes("light")?"light":"dark";document.documentElement.setAttribute("data-theme",o)}e(),new MutationObserver(e).observe(document.body,{attributes:!0,attributeFilter:["data-vscode-theme-kind"]})}var Co=["Accordion","AccordionItem","Alert","AlertDescription","AlertTitle","AreaChart","Audio","Badge","BarChart","BlockQuote","Button","ButtonGroup","Calendar","Card","CardContent","CardDescription","CardFooter","CardHeader","CardTitle","Carousel","Checkbox","ChoiceCard","Code","Column","Combobox","ComboboxGroup","ComboboxLabel","ComboboxOption","ComboboxSeparator","Condition","Container","Dashboard","DashboardItem","DataTable","DatePicker","Define","Detail","Dialog","Div","Dot","DropZone","Elif","Else","Embed","ExpandableRow","Field","FieldContent","FieldDescription","FieldError","FieldTitle","ForEach","Form","Grid","GridItem","H1","H2","H3","H4","Heading","Histogram","HoverCard","Icon","If","Image","Input","Kbd","Label","Large","Lead","LineChart","Link","Loader","Markdown","MasterDetail","Mermaid","Metric","Muted","P","Page","Pages","PdfViewer","PieChart","Popover","Progress","RadarChart","RadialChart","Radio","RadioGroup","Ring","Row","ScatterChart","Select","SelectGroup","SelectLabel","SelectOption","SelectSeparator","Separator","Slider","Slot","Small","Span","Sparkline","Svg","Switch","Tab","Table","TableBody","TableCaption","TableCell","TableFooter","TableHead","TableHeader","TableRow","Tabs","Text","Textarea","Tooltip","Use","Video"];var wo=new Set(Co);function Te(e,t={}){let n=[],o=t.strict??!1;if(!S(e))return n.push({path:"$",message:"Wire data must be a non-null object"}),{valid:!1,errors:n};let r=e,i=r.$prefab;if(!S(i))n.push({path:"$.$prefab",message:"Missing or invalid $prefab header"});else if(typeof i.version!=="string")n.push({path:"$.$prefab.version",message:"version must be a string"});if(r.view==null)n.push({path:"$.view",message:'Missing required "view" field'});else Gt(r.view,"$.view",n,o);if(r.state!==void 0){if(r.state===null||typeof r.state!=="object"||Array.isArray(r.state))n.push({path:"$.state",message:"state must be a plain object"})}if(r.theme!==void 0)Ts(r.theme,n);if(r.css!==void 0)vo(r.css,"$.css",n);if(r.stylesheets!==void 0)vo(r.stylesheets,"$.stylesheets",n);if(r.mode!==void 0&&r.mode!=="light"&&r.mode!=="dark")n.push({path:"$.mode",message:'mode must be "light" or "dark"'});let s=r.defs;if(s!==void 0)if(!S(s))n.push({path:"$.defs",message:"defs must be a plain object"});else for(let[l,c]of Object.entries(s))Gt(c,`$.defs.${l}`,n,o);let a=r.keyBindings;if(a!==void 0)if(!S(a))n.push({path:"$.keyBindings",message:"keyBindings must be a plain object"});else for(let[l,c]of Object.entries(a))qt(c,`$.keyBindings.${l}`,n);return{valid:n.length===0,errors:n}}function ko(e){return Te(e).valid}function Gt(e,t,n,o){if(!S(e)){n.push({path:t,message:"Component must be a plain object"});return}let r=e;if(typeof r.type!=="string"||r.type.length===0){n.push({path:`${t}.type`,message:'Component must have a non-empty "type" string'});return}if(o&&!wo.has(r.type))n.push({path:`${t}.type`,message:`Unknown component type: "${r.type}"`});if(r.children!==void 0)if(!Array.isArray(r.children))n.push({path:`${t}.children`,message:"children must be an array"});else for(let s=0;s<r.children.length;s++)Gt(r.children[s],`${t}.children[${s}]`,n,o);let i=["onClick","on_click","onChange","on_change","onSubmit","on_submit","onMount","on_mount","onClose","on_close"];for(let s of i)if(r[s]!==void 0)qt(r[s],`${t}.${s}`,n);for(let[s,a]of Object.entries(r)){if(s==="type"||Es.has(s)||i.includes(s))continue;if(xo(a)||Array.isArray(a)&&a.some(xo))n.push({path:`${t}.${s}`,message:`Components under "${s}" are ignored by the renderer; move them into "children"`})}}var Es=new Set(["children","fallback","trigger","empty","else","summary"]);function xo(e){return S(e)&&typeof e.type==="string"&&wo.has(e.type)}function qt(e,t,n){if(Array.isArray(e)){for(let i=0;i<e.length;i++)qt(e[i],`${t}[${i}]`,n);return}if(!S(e)){n.push({path:t,message:"Action must be an object or array of objects"});return}let o=e,r=typeof o.action==="string"&&o.action.length>0?o.action:typeof o.type==="string"&&o.type.length>0?o.type:void 0;if(r===void 0){n.push({path:`${t}.type`,message:'Action must have a non-empty "type" or "action" string'});return}if(r.toLowerCase()==="showtoast"){if(typeof o.message!=="string"||o.message.length===0)n.push({path:`${t}.message`,message:'showToast requires a non-empty "message" string'})}}function vo(e,t,n){if(!Array.isArray(e)){n.push({path:t,message:`${t} must be an array of strings`});return}for(let o=0;o<e.length;o++)if(typeof e[o]!=="string")n.push({path:`${t}[${o}]`,message:"must be a string"})}function Ts(e,t){if(!S(e)){t.push({path:"$.theme",message:"theme must be a plain object"});return}for(let n of["light","dark"])if(e[n]!==void 0){if(!S(e[n]))t.push({path:`$.theme.${n}`,message:`theme.${n} must be a plain object`})}}var U={mount(e,t,n){if(st(),n?.validate!==!1)for(let w of Te(t).errors)M.warn(`wire validation ${w.path}: ${w.message}`);let o=t,r={tracked:[],evalBlocked:!1};if(o.pipes)for(let[w,R]of Object.entries(o.pipes))So(w,R,r);let i=new Me(o.state),s=n?.transport,a;if(!s)a=lt();else if("callTool"in s)a=s;else a=at(s);let l=n?.onToast??Ns,c=new He;function u(w){if(!U.isPrefabData(w))return;let R=w;if(o=R,R.state)i.merge(R.state);if(R.defs)g.defs=R.defs;if(R.theme)zt(e,R.theme);if(R.mode)Ro(e,R.mode);if(R.pipes)for(let[k,T]of Object.entries(R.pipes))So(k,T,r);for(let k of m)k.remove();if(m.length=0,m.push(...Eo(R.css,R.stylesheets)),To(e,R.layout),b?.(),b=void 0,R.keyBindings)b=Jt(R.keyBindings,(k)=>{D(O(k,{store:i,transport:a,scope:{},rerender:()=>E(),remount:u,onToast:l}),"keyBinding")});E(),d(R)}function d(w){if(w.onMount!=null)D(O(w.onMount,g),"onMount")}let g={store:i,scope:{},transport:a,rerender:()=>E(),remount:u,onToast:l,defs:o.defs,destroyRegistry:c};if(zt(e,o.theme),o.mode)Ro(e,o.mode);To(e,o.layout);let m=Eo(o.css,o.stylesheets),b;if(o.keyBindings)b=Jt(o.keyBindings,(w)=>{D(O(w,{store:i,transport:a,scope:{},rerender:()=>E(),remount:u,onToast:l}),"keyBinding")});let h,x=n?.themeToggle??!0;if(x!==!1)h=Ie(e,typeof x==="object"?x:void 0);function E(){c.flush();let w=e.querySelector(".pf-theme-toggle");e.innerHTML="";let R=V(o.view,g);if(e.appendChild(R),w)e.appendChild(w)}return E(),d(o),{rerender:()=>E(),update(w){if(i.merge(w.update.state),E(),w.update.actions!=null)D(O(w.update.actions,g),"update action")},store:i,destroy(){c.flush(),h?.(),b?.(),sn(),cn();for(let w of m)w.remove();for(let w of r.tracked)Le(w);e.innerHTML=""}}},isPrefabData(e){return e!=null&&typeof e==="object"&&"$prefab"in e},isPrefabUpdate(e){return e!=null&&typeof e==="object"&&"$prefab"in e&&"update"in e}};function Ms(e){if(e instanceof EvalError)return!0;return e instanceof Error&&/unsafe-eval|Content Security Policy|call to Function/i.test(e.message)}function So(e,t,n){if(rn.has(e)){M.warn(`wire pipe "${e}" ignored — shadows built-in`);return}if(_e(e)!=null){M.debug(`wire pipe "${e}" — already registered, keeping local implementation`);return}if(n.evalBlocked)return;try{let o=Function("return ("+t+")")();if(!en(o)){M.warn(`wire pipe "${e}" — source did not evaluate to a function`);return}Ne(e,o),n.tracked.push(e)}catch(o){if(Ms(o)){n.evalBlocked=!0,M.warn("wire pipes cannot be hydrated — this host's CSP forbids eval. Pre-register them with "+"prefab.registerPipe() from a companion script (rendererHtml({ scripts })) and they are used as-is.");return}M.warn(`wire pipe "${e}" — failed to hydrate:`,o)}}function Ns(e){if(typeof document>"u")return;let t=As(),n=document.createElement("div"),o=e.variant??"default";n.className=`pf-toast${o!=="default"?` pf-toast--${o}`:""}`,n.setAttribute("data-variant",o),n.style.marginBottom="8px",n.style.transition="opacity 0.3s ease";let r=document.createElement("div");if(r.textContent=e.message,r.style.fontWeight="500",n.appendChild(r),e.description){let s=document.createElement("div");s.textContent=e.description,s.style.fontSize="14px",s.style.color="var(--muted-foreground, #6b7280)",n.appendChild(s)}t.appendChild(n);let i=e.duration??4000;setTimeout(()=>{n.style.opacity="0",setTimeout(()=>n.remove(),300)},i)}function Ro(e,t){if(Re(e,t),typeof document<"u")Re(document.documentElement,t)}function Ls(e){let t=e.trim();if(t.includes("{")||t.includes("}"))return!1;return/^(https?:)?\/\//i.test(t)||t.startsWith("/")||/\.css(\?|#|$)/i.test(t)}function Eo(e,t){let n=[];if(typeof document>"u")return n;for(let o of e??[]){let r=document.createElement("style");r.textContent=o,r.dataset.prefab="injected",document.head.appendChild(r),n.push(r)}for(let o of t??[])if(Ls(o)){let r=document.createElement("link");r.rel="stylesheet",r.href=o,r.dataset.prefab="injected",document.head.appendChild(r),n.push(r)}else{let r=document.createElement("style");r.textContent=o,r.dataset.prefab="injected",document.head.appendChild(r),n.push(r)}return n}function To(e,t){if(e.style.height="",e.style.minHeight="",e.style.maxHeight="",e.style.overflow="",!t)return;if(t.preferredHeight!=null)e.style.height=`${t.preferredHeight}px`;if(t.minHeight!=null)e.style.minHeight=`${t.minHeight}px`;if(t.maxHeight!=null)e.style.maxHeight=`${t.maxHeight}px`,e.style.overflow="auto"}function As(){let t=document.getElementById("prefab-toast-container");if(!t)t=document.createElement("div"),t.id="prefab-toast-container",t.style.position="fixed",t.style.bottom="16px",t.style.right="16px",t.style.zIndex="9999",t.style.maxWidth="400px",document.body.appendChild(t);return t}if(typeof window<"u"){Object.assign(window,{PrefabRenderer:U}),Object.assign(window,{prefab:{app:pt,mount:U.mount.bind(U),isPrefabData:U.isPrefabData.bind(U),isPrefabUpdate:U.isPrefabUpdate.bind(U),Bridge:ye,isIframe:Ee,registerPipe:Ne,unregisterPipe:Le,listPipes:Ve,registerComponent:p,createThemeToggle:Ie,validateWireFormat:Te,setLogLevel:Be}});let e=Reflect.get(window,"__PREFAB_DATA__");if(U.isPrefabData(e)){let t=document.getElementById("prefab-root");if(t)U.mount(t,e)}}})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maxhealth.tech/prefab",
3
- "version": "0.3.21",
3
+ "version": "0.3.22",
4
4
  "description": "TypeScript authoring for A2UI and MCP Apps. Build agent UIs server-side and emit either wire format.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -65,7 +65,7 @@
65
65
  "gen:skill": "bun run scripts/gen-skill-assets.ts",
66
66
  "gen:types": "bun run scripts/gen-component-types.ts",
67
67
  "check:docs": "bun run scripts/check-doc-examples.ts",
68
- "check:changelog": "bun run scripts/check-changelog.ts",
68
+ "verify:dist": "node -e \"require('fs').existsSync('dist/renderer.min.js') || (console.error('missing dist/renderer.min.js'), process.exit(1))\"",
69
69
  "docs:api": "typedoc && bun run scripts/fix-typedoc-vue.ts",
70
70
  "predocs:dev": "bun run docs:api",
71
71
  "docs:dev": "vitepress dev docs",
@@ -102,15 +102,15 @@
102
102
  "@happy-dom/global-registrator": "^20.11.1",
103
103
  "@types/bun": "^1.4.4",
104
104
  "ajv": "^8.20.0",
105
- "brandc": "^0.8.0",
106
- "eslint": "^10.13.0",
105
+ "brandc": "^0.9.0",
106
+ "eslint": "^10.14.0",
107
107
  "happy-dom": "^20.11.1",
108
108
  "jiti": "^2.7.0",
109
109
  "typedoc": "^0.28.20",
110
110
  "typedoc-plugin-markdown": "^4.12.0",
111
111
  "typedoc-vitepress-theme": "^1.1.3",
112
112
  "typescript": "^6.0.3",
113
- "typescript-eslint": "^8.72.0",
113
+ "typescript-eslint": "^8.72.2",
114
114
  "vitepress": "1.6.4",
115
115
  "vitepress-plugin-llms": "^1.13.4"
116
116
  },