@vpxa/aikit 0.1.198 → 0.1.200

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vpxa/aikit",
3
- "version": "0.1.198",
3
+ "version": "0.1.200",
4
4
  "type": "module",
5
5
  "description": "Local-first AI developer toolkit — knowledge base, code analysis, context management, and developer tools for LLM agents",
6
6
  "license": "MIT",
@@ -1805,7 +1805,7 @@ main > * {
1805
1805
 
1806
1806
  `)}function Er(e){return e.length===0?``:e.map(e=>{let t=e.initScript?` <script>\n${e.initScript}\n <\/script>\n`:``;if(e.inlineSource)return`${t} <script>${e.inlineSource.replace(/<\/script/gi,`<\\/script`)}${e.onload?`\n;${e.onload}`:``}<\/script>`;if(!e.src)return t.trimEnd();let r=e.onload?` onload="${e.onload}"`:``;if(!e.fallback)return`${t} <script src="${n(e.src)}"${r}><\/script>`;let i=e.onload?`f.onload=function(){${e.onload}};`:``;return`${t} <script src="${n(e.src)}"${r} onerror="(function(el){var f=document.createElement('script');f.src='${n(e.fallback)}';${i}document.head.appendChild(f);el.remove()})(this)"><\/script>`}).join(`
1807
1807
  `)}function Dr(e){return[` <script>`,` (() => {`,` const preferredTheme = ${JSON.stringify(e)};`,` const storageKey = "aikit-theme-mode";`,` const html = document.documentElement;`,` const toolbox = {`,` container: () => document.querySelector(".aikit-toolbox"),`,` button: () => document.querySelector(".aikit-toolbox-toggle"),`,` menu: () => document.querySelector(".aikit-toolbox-menu"),`,` firstItem: () => document.querySelector(".aikit-toolbox-item"),`,` };`,` const systemTheme = () =>`,` window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches`,` ? "dark"`,` : "light";`,` const readStoredTheme = () => {`,` try {`,` const stored = localStorage.getItem("aikit-theme-mode");`,` return stored === "light" || stored === "dark" ? stored : null;`,` } catch (_error) {`,` return null;`,` }`,` };`,` const resolvedTheme = () => html.getAttribute("data-theme") || readStoredTheme() || systemTheme();`,` const setToolboxOpen = (open, options = {}) => {`,` const button = toolbox.button();`,` const menu = toolbox.menu();`,` if (!button || !menu) return;`,` menu.hidden = !open;`,` button.setAttribute("aria-expanded", String(open));`,` if (open) {`,` if (options.focusItem) toolbox.firstItem()?.focus();`,` } else if (options.restoreFocus) {`,` button.focus();`,` }`,` };`,` const inlineComputedStyles = (source, clone) => {`,` if (!(source instanceof Element) || !(clone instanceof Element)) return;`,` const computed = window.getComputedStyle(source);`,` const cssText = Array.from(computed)`,` .map((name) => {`,` const value = computed.getPropertyValue(name);`,` const priority = computed.getPropertyPriority(name);`,' return `${name}:${value}${priority ? " !important" : ""};`;',` })`,` .join("");`,` clone.setAttribute("style", cssText);`,` for (let index = 0; index < source.children.length; index += 1) {`,` inlineComputedStyles(source.children[index], clone.children[index]);`,` }`,` };`,` const captureDocumentAsPng = async () => {`,` const width = Math.max(`,` document.documentElement.scrollWidth,`,` document.documentElement.clientWidth,`,` document.body ? document.body.scrollWidth : 0,`,` );`,` const height = Math.max(`,` document.documentElement.scrollHeight,`,` document.documentElement.clientHeight,`,` document.body ? document.body.scrollHeight : 0,`,` );`,` const scale = window.devicePixelRatio || 1;`,` const canvas = document.createElement("canvas");`,` canvas.width = Math.max(1, Math.ceil(width * scale));`,` canvas.height = Math.max(1, Math.ceil(height * scale));`,` const context = canvas.getContext("2d");`,` if (!context) throw new Error("Canvas context unavailable");`,` context.scale(scale, scale);`,` const clone = document.documentElement.cloneNode(true);`,` if (!(clone instanceof Element)) throw new Error("Document clone failed");`,` clone.setAttribute("xmlns", "http://www.w3.org/1999/xhtml");`,` clone.querySelectorAll("script").forEach((node) => node.remove());`,` inlineComputedStyles(document.documentElement, clone);`,' const svgMarkup = [`<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}">`, `<foreignObject width="100%" height="100%">${new XMLSerializer().serializeToString(clone)}</foreignObject>`, "</svg>"].join("");',` const svgBlob = new Blob([svgMarkup], { type: "image/svg+xml;charset=utf-8" });`,` const objectUrl = URL.createObjectURL(svgBlob);`,` try {`,` await new Promise((resolve, reject) => {`,` const image = new Image();`,` image.onload = () => {`,` context.drawImage(image, 0, 0, width, height);`,` resolve(undefined);`,` };`,` image.onerror = () => reject(new Error("ForeignObject render failed"));`,` image.src = objectUrl;`,` });`,` } finally {`,` URL.revokeObjectURL(objectUrl);`,` }`,` const blob = await new Promise((resolve) => canvas.toBlob(resolve, "image/png"));`,` if (!blob) throw new Error("PNG export failed");`,` const downloadUrl = URL.createObjectURL(blob);`,` const link = document.createElement("a");`,` const timestamp = new Date().toISOString().replace(/[.:]/g, "-");`,` link.href = downloadUrl;`," link.download = `aikit-screenshot-${timestamp}.png`;",` document.body.appendChild(link);`,` link.click();`,` link.remove();`,` URL.revokeObjectURL(downloadUrl);`,` };`,` const updateToggle = (theme) => {`,` const button = document.querySelector(".aikit-theme-toggle");`,` const nextTheme = theme === "dark" ? "light" : "dark";`,` if (button) {`,` button.setAttribute("aria-label", "Switch to " + nextTheme + " theme");`,` button.setAttribute("aria-pressed", String(theme === "dark"));`,` }`,` };`,` const applyTheme = (theme, persist = true) => {`,` html.setAttribute("data-theme", theme);`,` if (persist) {`,` try {`,` localStorage.setItem("aikit-theme-mode", theme);`,` } catch (_error) {`,` // Ignore storage failures.`,` }`,` }`,` updateToggle(theme);`,` };`,` if (preferredTheme === "light" || preferredTheme === "dark") {`,` applyTheme(preferredTheme, false);`,` } else {`,` applyTheme(readStoredTheme() || systemTheme(), false);`,` }`,` window.toggleTheme = () => {`,` applyTheme(resolvedTheme() === "dark" ? "light" : "dark");`,` };`,` window.toggleToolbox = () => {`,` const menu = toolbox.menu();`,` setToolboxOpen(Boolean(menu?.hidden), { focusItem: Boolean(menu?.hidden) });`,` };`,` window.screenshotPage = async () => {`,` const scrollX = window.scrollX;`,` const scrollY = window.scrollY;`,` setToolboxOpen(false);`,` window.scrollTo(0, 0);`,` await new Promise((resolve) => window.requestAnimationFrame(() => resolve(undefined)));`,` try {`,` await captureDocumentAsPng();`,` } catch (_error) {`,` window.print();`,` } finally {`,` window.scrollTo(scrollX, scrollY);`,` }`,` };`,` document.addEventListener("click", (event) => {`,` const container = toolbox.container();`,` if (!container) return;`,` const target = event.target;`,` if (target instanceof Node && container.contains(target)) return;`,` setToolboxOpen(false);`,` });`,` document.addEventListener("keydown", (event) => {`,` if (event.key === "Escape") {`,` setToolboxOpen(false, { restoreFocus: true });`,` return;`,` }`,` if ((event.key === "ArrowDown" || event.key === "Enter" || event.key === " ") && event.target === toolbox.button()) {`,` event.preventDefault();`,` setToolboxOpen(true, { focusItem: true });`,` }`,` });`,` if (preferredTheme === "auto" && window.matchMedia) {`,` const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");`,` mediaQuery.addEventListener("change", () => {`,` if (readStoredTheme()) return;`,` applyTheme(systemTheme(), false);`,` });`,` }`,` })();`,` <\/script>`].join(`
1808
- `)}function Or(e,t){if(t!==`local-interactive`)return``;let r=new Set,i=[];for(let t of e)r.has(t.entry)||(r.add(t.entry),i.push(` <script type="module" src="${n(t.entry)}"><\/script>`));return i.join(`
1808
+ `)}function Or(e,t){if(t!==`local-interactive`)return``;let r=new Set,i=[];for(let t of e)r.has(t.entry)||(r.add(t.entry),i.push(` <script type="module" src="${n(t.entry)}"><\/script>`));return i.length>0&&i.push(` <script type="module">`,` import { hydrateAsync } from "/@aikit/blocks-interactive/dist/index.mjs";`,` const boot = () => {`,` void hydrateAsync();`,` };`,` if (document.readyState === "loading") {`,` document.addEventListener("DOMContentLoaded", boot, { once: true });`,` } else {`,` boot();`,` }`,` <\/script>`),i.join(`
1809
1809
  `)}function kr(e){let t=n(e.lang??`en`),r=n(e.dir??`ltr`),i=e.colorScheme??`auto`,a=e.generatedAt??new Date().toISOString(),o=[`lang="${t}"`,`dir="${r}"`];i!==`auto`&&o.push(`data-theme="${i}"`);let s=Tr(e.tokenCss??Bt(`light`)),c=Er(e.headScripts??[]),l=e.islands.length>0&&e.payload?` <script type="application/json" id="surface-payload">${Cr(e.payload)}<\/script>`:``,u=Or(e.islands,e.exportPolicy),d=[Dr(i),l,u].filter(Boolean).join(`
1810
1810
  `);return[`<!DOCTYPE html>`,`<html ${o.join(` `)}>`,`<head>`,` <meta charset="utf-8">`,` <meta name="viewport" content="width=device-width, initial-scale=1">`,` <title>${n(e.title)}</title>`,wr(s,e.css),c,`</head>`,`<body data-surface-nonce="${n(e.nonce)}">`,Wt({title:e.title,transport:e.transport}),` <main>${e.html}</main>`,Gt({generatedAt:a}),d,`</body>`,`</html>`].filter(Boolean).join(`
1811
1811
  `)}export{R as HEADER_CLASS_NAMES,Kt as HEADER_CSS,Xt as TemplateRegistry,Ft as allCss,I as baseCss,f as blockItems,Gt as buildFooter,Wt as buildHeader,kr as buildShell,$t as checklistTemplate,L as collectCss,Pt as darkTokenNames,P as darkTokens,yr as dashboardTemplateDefinition,on as dataTableTemplate,Z as defaultRegistry,pn as diffViewTemplate,yn as documentTemplate,W as errorTemplate,n as escapeHtml,Sr as flameGraphTemplateDefinition,wn as formTemplate,a as formatValue,zt as generateDarkTokenCss,Bt as generateTokenCss,s as inlineMarkdown,t as isError,e as isResult,br as kanbanTemplateDefinition,xr as listSortTemplateDefinition,jn as pickerTemplate,z as renderBlock,Jt as renderBlocks,ir as renderSurface,Bn as reportTemplate,i as sanitizeId,r as sanitizeUrl,Wn as statusBoardTemplate,Yn as timelineTemplate,Nt as tokenNames,N as tokens,u as toneName,d as toneVar,er as treeTemplate,o as tryParseJson};
@@ -2110,14 +2110,14 @@ container holding the app. Specify either width or maxWidth, and either height o
2110
2110
  .sort-list { list-style: none; padding: 0; margin: 0; }
2111
2111
  .sort-item { display: flex; align-items: center; gap: 10px; padding: 10px 14px; margin: 4px 0;
2112
2112
  background: var(--aikit-surface, #252526); border: 1px solid var(--aikit-border, #3c3c3c);
2113
- border-radius: 6px; cursor: grab; transition: all 0.15s; }
2113
+ border-radius: 6px; cursor: grab; transition: background 0.15s, border-color 0.15s, opacity 0.15s; }
2114
2114
  .sort-item:hover { border-color: var(--aikit-accent, #0078d4); }
2115
2115
  .sort-item.dragging { opacity: 0.4; }
2116
2116
  .sort-item.drag-over { border-color: var(--aikit-accent, #0078d4); background: color-mix(in srgb, var(--aikit-accent, #0078d4) 10%, transparent); }
2117
2117
  .drag-handle { font-size: 18px; color: var(--aikit-muted, #858585); cursor: grab; user-select: none; }
2118
2118
  .sort-label { flex: 1; color: var(--aikit-text, #ccc); }
2119
2119
  .sort-pos { font-size: 12px; color: var(--aikit-muted, #858585); font-variant-numeric: tabular-nums; }
2120
- `,Ew={name:`list-sort`,label:`Sortable List`,detect(e){if(typeof e!=`object`||!e||Array.isArray(e))return 0;let t=e;return t.items&&Array.isArray(t.items)&&!t.categories?.8:0},render(e,t,n){let r=t,i=Q(`div`,`block tpl-list-sort`);ew(`tpl-list-sort`,Tw);function a(e){i.innerHTML=``;let t=Q(`ul`,`sort-list`),r=-1;for(let i=0;i<e.length;i++){let o=e[i],s=document.createElement(`li`);s.className=`sort-item`,s.draggable=!0,s.dataset.idx=String(i);let c=Q(`span`,`drag-handle`,`⠿`),l=Q(`span`,`sort-label`,o.label),u=Q(`span`,`sort-pos`,`#${i+1}`);s.appendChild(c),s.appendChild(l),s.appendChild(u),s.addEventListener(`dragstart`,()=>{r=Number(s.dataset.idx),s.classList.add(`dragging`)}),s.addEventListener(`dragend`,()=>{s.classList.remove(`dragging`)}),s.addEventListener(`dragover`,e=>{e.preventDefault(),s.classList.add(`drag-over`)}),s.addEventListener(`dragleave`,()=>{s.classList.remove(`drag-over`)}),s.addEventListener(`drop`,t=>{t.preventDefault(),s.classList.remove(`drag-over`);let i=Number(s.dataset.idx);if(r>=0&&r!==i){let t=[...e],[o]=t.splice(r,1);t.splice(i,0,o),a(t),n.emitAction({type:`button`,id:`reorder`,label:`Reorder`},JSON.stringify(t.map(e=>e.id)))}}),t.appendChild(s)}i.appendChild(t)}a([...r.items??[]]),e.appendChild(i)},styles(){return Tw}},Dw=document.getElementById(`app`);if(!Dw)throw Error(`Missing #app element`);var $=Dw,Ow=XC(),kw=Ow?void 0:new uC({name:`AI Kit Present`,version:`1.0.0`}),Aw=new uw;Aw.register(Ew),Aw.register(Sw),Aw.register(yw),Aw.register(ww);var jw=GC(kw),Mw={app:kw,data:ZC(kw),emitAction:jw},Nw=new _w,Pw=new iw,Fw=kw?new QC(kw):void 0,Iw=null;function Lw(){Iw?.(),Iw=null,Uw?.destroy&&Uw.destroy(),Uw=null}function Rw(e,t){let n=new Map,r=e=>{n.set(o(e.id),e)};for(let e of t??[])r(e);for(let t of e)if(!(t.type!==`actions`||!Array.isArray(t.value)))for(let e of t.value)e&&typeof e==`object`&&`id`in e&&r(e);return n}function zw(e,t,n){let r=Rw(t,n);Iw=WC(e,t,(e,t)=>{jw(r.get(e)??{type:t===void 0?`button`:`select`,id:e,label:e},t)})}function Bw(e,t,n){let r=document.documentElement.dir,i=JC(e,t,{colorScheme:Nw.getTheme(),lang:document.documentElement.lang||void 0,dir:r===`ltr`||r===`rtl`||r===`auto`?r:void 0});return i?{blocks:i.blocks,actions:n.actions}:null}var Vw;function Hw(e){Lw(),$.innerHTML=``;let t=lw(e);if(e.title){let t=Q(`div`,`header`);t.appendChild(Q(`h1`,``,e.title)),t.appendChild(Q(`span`,`badge streaming`,`⟳`)),$.appendChild(t)}let n=Q(`div`,`content`);zw(n,t.blocks??[]),$.appendChild(n)}var Uw=null;function Ww(e,t){$.innerHTML=``;let n=Q(`div`,`error-panel`);n.appendChild(Q(`h3`,``,`⚠ ${e}`)),n.appendChild(Q(`pre`,``,t instanceof Error?t.message:String(t))),$.appendChild(n)}function Gw(e){Lw(),$.innerHTML=``;let t=lw(e),n=t.data;if(!n){$.innerHTML=`<p class="no-data">No content data received.</p>`;return}if(e.title){let t=Q(`div`,`header`);t.appendChild(Q(`h1`,``,e.title)),t.appendChild(Q(`span`,`badge`,`AI KIT`)),$.appendChild(t)}let r=t.template?Aw.get(t.template):Aw.detect(n),i=Q(`div`,`content`);if(r)Uw=r,r.render(i,n,Mw);else if(t.template){let r=Bw(t.template,n,e);r?zw(i,r.blocks,r.actions):zw(i,t.blocks??[],e.actions)}else zw(i,t.blocks??[],e.actions);if($.appendChild(i),e.actions?.length){let t=Q(`div`,`actions-shell`),n=WC(t,[{type:`actions`,value:e.actions}],(t,n)=>{jw(e.actions?.find(e=>o(e.id)===t)??{type:n===void 0?`button`:`select`,id:t,label:t},n)}),r=Iw;Iw=()=>{r?.(),n()},$.appendChild(t)}let a=Q(`div`,`footer`);a.innerHTML=`<span class="footer-brand">Powered by <strong>AI Kit</strong></span>`,$.appendChild(a)}kw?(kw.connect().then(()=>{let e=kw.getHostContext();e&&(Nw.apply(e),Pw.apply(e),Fw?.apply(e))}),kw.onhostcontextchanged=e=>{Nw.apply(e),Pw.apply(e),Fw?.apply(e),Uw?.onThemeChange&&Uw.onThemeChange(Nw.getTheme())},kw.ontoolinputpartial=e=>{let t=e.arguments;t&&($.dataset.streaming=`true`,clearTimeout(Vw),Vw=setTimeout(()=>{try{let e=t.content;if(!e)return;Hw({title:t.title,template:t.template,content:e})}catch{}},80))},kw.ontoolinput=()=>{clearTimeout(Vw),delete $.dataset.streaming},kw.ontoolresult=e=>{if(clearTimeout(Vw),delete $.dataset.streaming,e.structuredContent)try{Gw(e.structuredContent);return}catch(e){Ww(`Render error`,e);return}let t=e.content?.find(e=>e.type===`text`)?.text;if(!t){$.innerHTML=`<p>No data received.</p>`;return}try{Gw(JSON.parse(t))}catch{Gw({content:t})}}):Ow&&(document.documentElement.dataset.theme=`dark`,Gw(Ow));</script>
2120
+ `,Ew={name:`list-sort`,label:`Sortable List`,detect(e){if(typeof e!=`object`||!e||Array.isArray(e))return 0;let t=e;return t.items&&Array.isArray(t.items)&&!t.categories?.8:0},render(e,t,n){let r=t,i=Q(`div`,`block tpl-list-sort`);ew(`tpl-list-sort`,Tw);function a(e){i.innerHTML=``;let t=Q(`ul`,`sort-list`),r=-1;for(let i=0;i<e.length;i++){let o=e[i],s=document.createElement(`li`);s.className=`sort-item`,s.draggable=!0,s.dataset.idx=String(i);let c=Q(`span`,`drag-handle`,`⠿`),l=Q(`span`,`sort-label`,o.label),u=Q(`span`,`sort-pos`,`#${i+1}`);s.appendChild(c),s.appendChild(l),s.appendChild(u),s.addEventListener(`dragstart`,()=>{r=Number(s.dataset.idx),s.classList.add(`dragging`)}),s.addEventListener(`dragend`,()=>{s.classList.remove(`dragging`)}),s.addEventListener(`dragenter`,e=>{e.preventDefault()}),s.addEventListener(`dragover`,e=>{e.preventDefault(),s.classList.add(`drag-over`)}),s.addEventListener(`dragleave`,()=>{s.classList.remove(`drag-over`)}),s.addEventListener(`drop`,t=>{t.preventDefault(),s.classList.remove(`drag-over`);let i=Number(s.dataset.idx);if(r>=0&&r!==i){let t=[...e],[o]=t.splice(r,1);t.splice(i,0,o),a(t),n.emitAction({type:`button`,id:`reorder`,label:`Reorder`},JSON.stringify(t.map(e=>e.id)))}}),t.appendChild(s)}i.appendChild(t)}a([...r.items??[]]),e.appendChild(i)},styles(){return Tw}},Dw=document.getElementById(`app`);if(!Dw)throw Error(`Missing #app element`);var $=Dw,Ow=XC(),kw=Ow?void 0:new uC({name:`AI Kit Present`,version:`1.0.0`}),Aw=new uw;Aw.register(Ew),Aw.register(Sw),Aw.register(yw),Aw.register(ww);var jw=GC(kw),Mw={app:kw,data:ZC(kw),emitAction:jw},Nw=new _w,Pw=new iw,Fw=kw?new QC(kw):void 0,Iw=null;function Lw(){Iw?.(),Iw=null,Uw?.destroy&&Uw.destroy(),Uw=null}function Rw(e,t){let n=new Map,r=e=>{n.set(o(e.id),e)};for(let e of t??[])r(e);for(let t of e)if(!(t.type!==`actions`||!Array.isArray(t.value)))for(let e of t.value)e&&typeof e==`object`&&`id`in e&&r(e);return n}function zw(e,t,n){let r=Rw(t,n);Iw=WC(e,t,(e,t)=>{jw(r.get(e)??{type:t===void 0?`button`:`select`,id:e,label:e},t)})}function Bw(e,t,n){let r=document.documentElement.dir,i=JC(e,t,{colorScheme:Nw.getTheme(),lang:document.documentElement.lang||void 0,dir:r===`ltr`||r===`rtl`||r===`auto`?r:void 0});return i?{blocks:i.blocks,actions:n.actions}:null}var Vw;function Hw(e){Lw(),$.innerHTML=``;let t=lw(e);if(e.title){let t=Q(`div`,`header`);t.appendChild(Q(`h1`,``,e.title)),t.appendChild(Q(`span`,`badge streaming`,`⟳`)),$.appendChild(t)}let n=Q(`div`,`content`);zw(n,t.blocks??[]),$.appendChild(n)}var Uw=null;function Ww(e,t){$.innerHTML=``;let n=Q(`div`,`error-panel`);n.appendChild(Q(`h3`,``,`⚠ ${e}`)),n.appendChild(Q(`pre`,``,t instanceof Error?t.message:String(t))),$.appendChild(n)}function Gw(e){Lw(),$.innerHTML=``;let t=lw(e),n=t.data;if(!n){$.innerHTML=`<p class="no-data">No content data received.</p>`;return}if(e.title){let t=Q(`div`,`header`);t.appendChild(Q(`h1`,``,e.title)),t.appendChild(Q(`span`,`badge`,`AI KIT`)),$.appendChild(t)}let r=t.template?Aw.get(t.template):Aw.detect(n),i=Q(`div`,`content`);if(r)Uw=r,r.render(i,n,Mw);else if(t.template){let r=Bw(t.template,n,e);r?zw(i,r.blocks,r.actions):zw(i,t.blocks??[],e.actions)}else zw(i,t.blocks??[],e.actions);if($.appendChild(i),e.actions?.length){let t=Q(`div`,`actions-shell`),n=WC(t,[{type:`actions`,value:e.actions}],(t,n)=>{jw(e.actions?.find(e=>o(e.id)===t)??{type:n===void 0?`button`:`select`,id:t,label:t},n)}),r=Iw;Iw=()=>{r?.(),n()},$.appendChild(t)}let a=Q(`div`,`footer`);a.innerHTML=`<span class="footer-brand">Powered by <strong>AI Kit</strong></span>`,$.appendChild(a)}kw?(kw.connect().then(()=>{let e=kw.getHostContext();e&&(Nw.apply(e),Pw.apply(e),Fw?.apply(e))}),kw.onhostcontextchanged=e=>{Nw.apply(e),Pw.apply(e),Fw?.apply(e),Uw?.onThemeChange&&Uw.onThemeChange(Nw.getTheme())},kw.ontoolinputpartial=e=>{let t=e.arguments;t&&($.dataset.streaming=`true`,clearTimeout(Vw),Vw=setTimeout(()=>{try{let e=t.content;if(!e)return;Hw({title:t.title,template:t.template,content:e})}catch{}},80))},kw.ontoolinput=()=>{clearTimeout(Vw),delete $.dataset.streaming},kw.ontoolresult=e=>{if(clearTimeout(Vw),delete $.dataset.streaming,e.structuredContent)try{Gw(e.structuredContent);return}catch(e){Ww(`Render error`,e);return}let t=e.content?.find(e=>e.type===`text`)?.text;if(!t){$.innerHTML=`<p>No data received.</p>`;return}try{Gw(JSON.parse(t))}catch{Gw({content:t})}}):Ow&&(document.documentElement.dataset.theme=`dark`,Gw(Ow));</script>
2121
2121
  </head>
2122
2122
  <body>
2123
2123
  <div id="app">