cli-jaw 1.6.10 → 1.6.11
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/dist/bin/postinstall.js +103 -14
- package/dist/bin/postinstall.js.map +1 -1
- package/dist/src/memory/heartbeat.js +1 -1
- package/dist/src/memory/heartbeat.js.map +1 -1
- package/dist/src/prompt/builder.js +6 -0
- package/dist/src/prompt/builder.js.map +1 -1
- package/package.json +1 -1
- package/public/dist/assets/{employees-C8NcsoIa.js → employees-km3MrgRX.js} +1 -1
- package/public/dist/assets/{index-DQ81DqnC.js → index-CihhAsFo.js} +4 -4
- package/public/dist/assets/render-CCNMcx8O.js +25 -0
- package/public/dist/assets/settings-Jzr8xYot.js +1 -0
- package/public/dist/assets/{settings-kyjHk6rj.js → settings-de6iL7ha.js} +1 -1
- package/public/dist/assets/{skills-B6bTgYdX.js → skills-CiZtWh5G.js} +1 -1
- package/public/dist/assets/skills-DGAnOiRN.js +1 -0
- package/public/dist/assets/{slash-commands-D-vY1ONF.js → slash-commands-BeZm3K9x.js} +1 -1
- package/public/dist/assets/slash-commands-D5ZGh5wk.js +1 -0
- package/public/dist/assets/{ui-B4mnMXvw.js → ui-C1QJBOEL.js} +2 -2
- package/public/dist/assets/ui-CxS6ErNQ.js +1 -0
- package/public/dist/assets/ws-DQ4lNPWK.js +2 -0
- package/public/dist/index.html +1 -1
- package/public/js/render.ts +19 -9
- package/public/js/virtual-scroll.ts +63 -23
- package/public/js/ws.ts +8 -4
- package/public/dist/assets/render-DLUswUab.js +0 -25
- package/public/dist/assets/settings-BQXndJHI.js +0 -1
- package/public/dist/assets/skills-BaSoozYo.js +0 -1
- package/public/dist/assets/slash-commands-DwlnxrFi.js +0 -1
- package/public/dist/assets/ui-BnZpTNdD.js +0 -1
- package/public/dist/assets/ws-BMpuc7kR.js +0 -2
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import{A as e,C as t,D as n,E as r,F as i,I as a,M as o,N as s,O as c,P as l,S as u,T as d,_ as f,b as ee,j as p,k as m,u as te,v as ne,w as h,x as re,y as g}from"./vendor-render-D2YP6GiF.js";import{r as ie}from"./api-DygAf_G_.js";import{Q as _,Z as v}from"./vendor-mermaid-DV2i2BfY.js";import{A as ae,B as oe,C as se,D as ce,E as le,F as ue,G as de,H as fe,I as pe,J as me,K as he,L as ge,M as _e,N as ve,O as ye,P as be,R as xe,S as Se,T as Ce,U as we,V as Te,W as Ee,_ as De,a as Oe,b as ke,c as Ae,d as je,f as Me,g as Ne,h as y,i as b,j as Pe,k as Fe,l as Ie,m as Le,n as Re,o as ze,p as Be,q as Ve,r as He,s as Ue,t as We,u as Ge,v as Ke,w as qe,x as Je,y as Ye,z as Xe}from"./vendor-icons-BqxEYYco.js";var x=`ko`,S={},C={};async function Ze(){let e=null;try{e=localStorage.getItem(`claw_locale`)}catch{}if(!e){let t=(navigator.language||`ko`).split(/[-_]/)[0].toLowerCase();e=[`en`,`ko`].includes(t)?t:`ko`}C=await w(`ko`),S=e===`ko`?C:await w(e),x=e,E()}async function w(e){try{let{api:t}=await v(async()=>{let{api:e}=await import(`./api-COrKYKcO.js`);return{api:e}},[]);return await t(`/api/i18n/${e}`)||{}}catch{return{}}}function T(e,t={}){let n=S[e]??C[e]??e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{${e}}`,String(r));return n}function E(){document.querySelectorAll(`[data-i18n]`).forEach(e=>{let t=e.getAttribute(`data-i18n`);t&&(e.textContent=T(t))}),document.querySelectorAll(`[data-i18n-placeholder]`).forEach(e=>{let t=e.getAttribute(`data-i18n-placeholder`);t&&(e.placeholder=T(t))}),document.querySelectorAll(`[data-i18n-title]`).forEach(e=>{let t=e.getAttribute(`data-i18n-title`);t&&(e.title=T(t))}),document.querySelectorAll(`[data-i18n-aria]`).forEach(e=>{let t=e.getAttribute(`data-i18n-aria`);t&&e.setAttribute(`aria-label`,T(t))})}async function Qe(e){if(e!==x){S=e===`ko`?C:await w(e),x=e;try{localStorage.setItem(`claw_locale`,e)}catch{}E();try{let{loadEmployees:e}=await v(async()=>{let{loadEmployees:e}=await import(`./employees-km3MrgRX.js`);return{loadEmployees:e}},[]);e()}catch{}try{let{loadSkills:e}=await v(async()=>{let{loadSkills:e}=await import(`./skills-DGAnOiRN.js`);return{loadSkills:e}},[]);e()}catch{}try{let{loadCommands:e}=await v(async()=>{let{loadCommands:e}=await import(`./slash-commands-D5ZGh5wk.js`);return{loadCommands:e}},[]);e()}catch{}try{let{loadSettings:e}=await v(async()=>{let{loadSettings:e}=await import(`./settings-Jzr8xYot.js`);return{loadSettings:e}},[]);e()}catch{}}}function $e(){return x}function et(e,t={}){let n=new URL(e,location.origin);return n.searchParams.has(`locale`)||n.searchParams.set(`locale`,x),fetch(n.toString(),t)}var D=14,tt=16;function O(e,t=tt){return me(e,{size:t})}var k={check:O(xe),error:O(ge),warning:O(b),skip:O(Ue),tool:O(He),thinking:O(ke),search:O(Ge),web:O(ae),exec:O(We),compacting:O(De),plan:O(Ke),brain:O(Ee),heartPulse:O(ye),lock:O(Je),lockOpen:O(Se),key:O(Ce),settings:O(Ae),file:O(ve),trash:O(Oe),lightbulb:O(qe),refresh:O(Me),mic:O(Ye),clipboard:O(pe),robot:O(de),palette:O(Ne),link:O(se),salute:O(Fe),shark:`🦈`,paperclip:O(y),save:O(je),gamepad:O(Pe),house:O(le),radio:O(Be),folder:O(_e),pencil:O(Le),chart:O(we),hourglass:O(ce),stop:O(ze),close:O(Re,D),send:O(Ie),copy:O(ue,D),download:O(be,D),checkSimple:O(fe,D),chevronLeft:O(oe,D),chevronRight:O(Xe,D),chevronDown:O(Te,D),arrowLeft:O(Ve,D),arrowRight:O(he,D)},nt={"✅":`check`,"❌":`error`,"🔧":`tool`,"⏭":`skip`,"🧠":`brain`,"💓":`heartPulse`,"🔒":`lock`,"🔓":`lockOpen`,"🔑":`key`,"⚙":`settings`,"⚙️":`settings`,"📄":`file`,"🗑":`trash`,"🗑️":`trash`,"⚠":`warning`,"⚠️":`warning`,"💡":`lightbulb`,"🦈":`shark`,"💭":`thinking`,"🔍":`search`,"🌐":`web`,"⚡":`exec`,"🗜":`compacting`,"🗜️":`compacting`,"📝":`plan`,"📑":`clipboard`,"🤖":`robot`,"📋":`clipboard`,"🔄":`refresh`,"🎨":`palette`,"🎤":`mic`,"🔗":`link`,"🫡":`salute`,"📎":`paperclip`,"💾":`save`,"🎮":`gamepad`,"🏠":`house`,"📡":`radio`,"📂":`folder`,"✏️":`pencil`,"📊":`chart`,"🎙️":`mic`};function rt(e){let t=nt[e];return t?k[t]:e}function it(e){return e===`✅`?`done`:e===`❌`?`error`:null}function at(e=document.body){let t=e.querySelectorAll(`[data-icon]`);for(let e of t){let t=e.dataset.icon;t&&k[t]&&(e.innerHTML=k[t],e.classList.add(`icon-hydrated`))}}function ot(e){let t=[],n=e.replace(/```[\s\S]*?```/g,e=>(t.push(e),`\x00P${t.length-1}\x00`)).replace(/`[^`]+`/g,e=>(t.push(e),`\x00P${t.length-1}\x00`));return n=n.replace(/([\p{P}])\*\*(?=[^\s\p{P}])/gu,(e,t)=>t===`*`?e:t+`**`),n=n.replace(/\x00P(\d+)\x00/g,(e,n)=>t[Number(n)]),n}var A=0;function st(e){let t=new Map;return{text:e.replace(/^ {0,3}(`{3,}|~{3,})[^\n]*\n[\s\S]*?\n {0,3}\1[ \t]*$/gm,e=>{let n=`\x00FENCE-${A++}\x00`;return t.set(n,e),n}),fences:t}}function ct(e,t){for(let[n,r]of t)e=e.replace(n,()=>r);return e}function j(e,t=!1){let n=[],r=``,i=0;for(;i<e.length;){let a=e.indexOf(`<svg`,i);if(a===-1){r+=e.slice(i);break}let o=e[a+4];if(o&&!/[\s\/>]/.test(o)){r+=e.slice(i,a+4),i=a+4;continue}r+=e.slice(i,a);let s=0,c=a,l=!1;for(;c<e.length;){let t=e.indexOf(`<svg`,c+1),o=e.indexOf(`</svg>`,c+(c===a?0:1));if(o===-1)break;if(t!==-1&&t<o){let n=e[t+4];n&&/[\s\/>]/.test(n)&&s++,c=t+4}else if(s===0){let t=o+6,s=e.slice(a,t),c=A++,u=`\n\n<div data-jaw-svg="${c}"></div>\n\n`;n.push({id:c,index:a,length:s.length,svg:s,kind:`complete`,placeholder:u}),r+=u,i=t,l=!0;break}else s--,c=o+6}if(!l){let o=A++;if(t){let t=e.slice(a),s=`\n\n<div data-jaw-svg="${o}" data-jaw-kind="partial"></div>\n\n`;n.push({id:o,index:a,length:t.length,svg:``,kind:`partial`,placeholder:s}),r+=s,i=e.length}else{let t=`\n\n<div data-jaw-svg="${o}" data-jaw-kind="error"></div>\n\n`,s=e.slice(a),c=s.search(/\n\s*\n/),l=c===-1?s.length:c;n.push({id:o,index:a,length:l,svg:``,kind:`error`,placeholder:t}),r+=t,i=a+l}}}return{text:r,blocks:n}}l.registerLanguage(`javascript`,s),l.registerLanguage(`js`,s),l.registerLanguage(`typescript`,o),l.registerLanguage(`ts`,o),l.registerLanguage(`python`,p),l.registerLanguage(`py`,p),l.registerLanguage(`bash`,e),l.registerLanguage(`shell`,m),l.registerLanguage(`sh`,m),l.registerLanguage(`json`,c),l.registerLanguage(`css`,n),l.registerLanguage(`xml`,r),l.registerLanguage(`html`,r),l.registerLanguage(`markdown`,d),l.registerLanguage(`md`,d),l.registerLanguage(`yaml`,h),l.registerLanguage(`yml`,h),l.registerLanguage(`sql`,t),l.registerLanguage(`rust`,u),l.registerLanguage(`rs`,u),l.registerLanguage(`go`,re),l.registerLanguage(`java`,ee),l.registerLanguage(`cpp`,g),l.registerLanguage(`c`,g),l.registerLanguage(`diff`,ne),l.registerLanguage(`plaintext`,f),l.registerLanguage(`text`,f);var M=null,N=Promise.resolve();function lt(){return document.documentElement.getAttribute(`data-theme`)===`light`?{primaryColor:`#e2e8f0`,primaryTextColor:`#1a202c`,primaryBorderColor:`#a0aec0`,lineColor:`#718096`,secondaryColor:`#ebf8ff`,tertiaryColor:`#f7fafc`,background:`transparent`,mainBkg:`#e2e8f0`,nodeBorder:`#a0aec0`,clusterBkg:`#f7fafc`,clusterBorder:`#cbd5e0`,titleColor:`#1a202c`,edgeLabelBackground:`#f7fafc`}:{primaryColor:`#2d3748`,primaryTextColor:`#e2e8f0`,primaryBorderColor:`#4a5568`,lineColor:`#718096`,secondaryColor:`#1a365d`,tertiaryColor:`#1a202c`,background:`transparent`,mainBkg:`#2d3748`,nodeBorder:`#4a5568`,clusterBkg:`#1a202c`,clusterBorder:`#2d3748`,titleColor:`#e2e8f0`,edgeLabelBackground:`#1a202c`}}async function P(){return M||(M=await v(()=>import(`./mermaid.core-C6Yxaqu5.js`),[]),M.default.setParseErrorHandler(()=>{})),M.default}function F(){M.default.initialize({startOnLoad:!1,theme:`base`,themeVariables:lt(),securityLevel:`strict`,suppressErrorRendering:!0})}function ut(e){let t=_.sanitize(e,{USE_PROFILES:{svg:!0,svgFilters:!0},FORBID_TAGS:[`script`,`iframe`,`object`,`embed`,`form`,`input`,`foreignObject`,`animate`,`set`,`animateTransform`,`animateMotion`],FORBID_ATTR:[`onerror`,`onclick`,`onload`,`onmouseover`,`onfocus`,`onblur`,`background`]}),n=document.createElement(`div`);n.innerHTML=t;for(let e of n.querySelectorAll(`style`)){let t=e.textContent||``;t=t.replace(/@import\b[^;]*;?/gi,`/* stripped */`),t=t.replace(/@font-face\s*\{[^}]*\}/gi,`/* stripped */`),t=t.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`),e.textContent=t}return n.innerHTML}function I(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}function L(e){return _.sanitize(e,{USE_PROFILES:{html:!0,svg:!0,svgFilters:!0},FORBID_TAGS:[`script`,`style`,`iframe`,`object`,`embed`,`form`,`input`,`foreignObject`,`animate`,`set`,`animateTransform`,`animateMotion`],FORBID_ATTR:[`onerror`,`onclick`,`onload`,`onmouseover`,`onfocus`,`onblur`,`background`],ADD_TAGS:[`use`],ADD_ATTR:[`aria-hidden`,`xmlns`,`viewBox`,`role`,`aria-label`,`data-jaw-svg`,`data-jaw-kind`]})}var dt=`http://www.w3.org/2000/svg`,ft=new Set([`a`,`area`,`link`]);_.addHook(`afterSanitizeAttributes`,e=>{let t=e.tagName.toLowerCase();if(e.namespaceURI===dt||!ft.has(t)){let t=e.getAttribute(`href`)||``;t&&!t.startsWith(`#`)&&e.removeAttribute(`href`)}let n=e.getAttributeNS(`http://www.w3.org/1999/xlink`,`href`)||e.getAttribute(`xlink:href`)||``;if(n&&!n.startsWith(`#`)&&(e.removeAttributeNS(`http://www.w3.org/1999/xlink`,`href`),e.removeAttribute(`xlink:href`)),t===`image`||t===`feimage`){let t=e.getAttribute(`src`)||``;t&&!t.startsWith(`#`)&&e.removeAttribute(`src`)}let r=[`fill`,`stroke`,`filter`,`mask`,`clip-path`,`marker-start`,`marker-mid`,`marker-end`,`cursor`];if(e.hasAttribute(`style`)){let t=e.style?.cssText||``;if(/url\s*\(/i.test(t)){let n=t.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`);e.style.cssText=n}}for(let t of r)if(e.hasAttribute(t)){let n=e.getAttribute(t)||``;if(/url\s*\(/i.test(n)){let r=n.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`);e.setAttribute(t,r)}}});var pt=/["'](?:subtasks|employee_config|agent_phases|orchestration_plan)["']\s*:/;function R(e){let t=e.replace(/```json\n([\s\S]*?)\n```/g,(e,t)=>pt.test(t)?``:e);return t=t.replace(/\{[^{}]*"subtasks"\s*:\s*\[[\s\S]*?\]\s*\}/g,``).trim(),t}function mt(e){let t=[],n=[],r=e.replace(/```[\s\S]*?```/g,e=>(n.push(e),`\x00C${n.length-1}\x00`)).replace(/`[^`]+`/g,e=>(n.push(e),`\x00C${n.length-1}\x00`));return r=r.replace(/\$\$([\s\S]+?)\$\$/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!0}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\\\[([\s\S]+?)\\\]/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!0}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/(?<!\$)\$(?!\$)([^\n$]+?)\$(?!\$)/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!1}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\\\((.+?)\\\)/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!1}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\x00C(\d+)\x00/g,(e,t)=>n[Number(t)]),{text:r,blocks:t}}function ht(e,t,n=!1){return e.replace(/\x00MATH-(\d+)\x00/g,(e,r)=>{let i=t[Number(r)];if(!i)return`<code title="math placeholder error">[math error]</code>`;if(n)return i.displayMode?`<div class="math-placeholder">${I(i.tex)}</div>`:`<code class="math-placeholder">${I(i.tex)}</code>`;try{return te.renderToString(i.tex,{displayMode:i.displayMode,throwOnError:!1})}catch{return i.displayMode?`<pre><code>${I(i.tex)}</code></pre>`:`<code>${I(i.tex)}</code>`}})}var z=0;async function gt(){let e=document.querySelectorAll(`.mermaid-rendered`);if(!e.length)return;let t=await P();for(let n of e){let e=n.dataset.mermaidCode;if(!e)continue;let r=`mermaid-${++z}`;try{F();let{svg:i}=await t.render(r,e);n.innerHTML=i,V(n)}catch{}}}var B=null;function _t(){B||=new IntersectionObserver(e=>{for(let t of e){if(!t.isIntersecting)continue;let e=t.target;e.classList.contains(`mermaid-pending`)&&(B.unobserve(e),bt(e))}},{rootMargin:`200px`})}function V(e){e.querySelector(`.mermaid-copy-btn`)?.remove(),e.querySelector(`.mermaid-save-btn`)?.remove();let t=document.createElement(`button`);t.className=`mermaid-save-btn`,t.type=`button`,t.ariaLabel=`Save as image`,t.title=`Save`,t.innerHTML=k.download,e.appendChild(t);let n=document.createElement(`button`);n.className=`mermaid-copy-btn`,n.type=`button`,n.ariaLabel=`Copy source`,n.title=`Copy`,n.innerHTML=k.copy,e.appendChild(n)}function vt(e,t,n){e.classList.remove(`mermaid-rendered`),e.innerHTML=`
|
|
2
|
+
<div class="mermaid-error">
|
|
3
|
+
<div class="mermaid-error-title">${k.warning} ${I(T(`mermaid.renderFail`)||`Mermaid render failed`)}</div>
|
|
4
|
+
<div class="mermaid-error-msg">${I(n.slice(0,200))}</div>
|
|
5
|
+
<pre class="mermaid-error-code"><code>${I(t)}</code></pre>
|
|
6
|
+
</div>`}async function yt(e){e.classList.remove(`mermaid-pending`);let t=e.textContent||``;e.dataset.mermaidCode=t;let n=`mermaid-${++z}`;try{let r=await P();F();let{svg:i}=await r.render(n,t);e.innerHTML=ut(i),e.classList.add(`mermaid-rendered`),V(e)}catch(n){vt(e,t,n?.message||n?.str||`Unknown error`)}}function bt(e){N=N.then(()=>yt(e))}async function xt(e){let t=(e||document).querySelectorAll(`.mermaid-pending`);if(t.length){_t();for(let e of t)B.observe(e)}}var H=!1;function St(){if(H)return!0;let e=new a;return e.code=function({text:e,lang:t}){if(t===`mermaid`)return`<div class="mermaid-container mermaid-pending">${I(e)}</div>`;if(t?.trim().toLowerCase()===`diagram-html`)return`<div class="diagram-widget-pending" data-diagram-html="${btoa(unescape(encodeURIComponent(e)))}"
|
|
7
|
+
role="status" aria-label="Interactive widget loading">
|
|
8
|
+
<div class="diagram-spinner"></div>
|
|
9
|
+
</div>`;let n=I(e);if(t&&l.getLanguage(t))try{n=l.highlight(e,{language:t}).value}catch{}else try{n=l.highlightAuto(e).value}catch{}let r=t?I(t):``,i=T(`code.copy`)||`Copy`;return`<div class="code-block"><div class="code-header"><span class="code-lang">${r}</span><button class="code-copy-btn" type="button" aria-label="${I(i)}">${I(i)}</button></div><pre><code class="hljs${t?` language-${I(t)}`:``}">${n}</code></pre></div>`},i.setOptions({renderer:e,gfm:!0,breaks:!1}),H=!0,!0}function Ct(e){(e||document).querySelectorAll(`.code-block pre code, .code-block-wrapper pre code`).forEach(e=>{if(e.dataset.highlighted===`yes`)return;let t=[...e.classList].find(e=>e.startsWith(`language-`))?.replace(`language-`,``),n=e.textContent||``;try{t&&l.getLanguage(t)?e.innerHTML=l.highlight(n,{language:t}).value:e.innerHTML=l.highlightAuto(n).value,e.dataset.highlighted=`yes`}catch{}})}var U=/(?:~\/[^\s)`\]"'<>]+|\/(?:Users|home|tmp|var|opt|private)\/[^\s)`\]"'<>]+)/g,wt=/[.,!?:;]+$/,Tt=/^(?:~\/|\/(?:Users|home|tmp|var|opt|private)\/)/;function Et(e){return Tt.test(e)}function W(e,t){t&&t.classList.add(`opening`),ie(`/api/file/open`,`POST`,{path:e}).then(e=>{t?.classList.remove(`opening`),e?.ok===!1?(t?.classList.add(`open-failed`),t&&(t.title=e?.error||`Failed to open`),setTimeout(()=>{t?.classList.remove(`open-failed`),t&&(t.title=``)},2e3)):(t?.classList.add(`opened`),setTimeout(()=>t?.classList.remove(`opened`),1500))}).catch(()=>{t?.classList.remove(`opening`),t?.classList.add(`open-failed`),setTimeout(()=>t?.classList.remove(`open-failed`),2e3)})}function G(e){let t=new Set([`PRE`,`A`,`BUTTON`,`TEXTAREA`,`INPUT`,`SCRIPT`,`STYLE`]),n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(n){let r=n.parentElement;for(;r&&r!==e;){if(t.has(r.tagName)||r.classList.contains(`file-path-link`)||r.tagName===`CODE`&&r.parentElement?.tagName===`PRE`)return NodeFilter.FILTER_REJECT;r=r.parentElement}return NodeFilter.FILTER_ACCEPT}}),r=new Map,i;for(;i=n.nextNode();){let e=i.textContent||``;U.lastIndex=0;let t,n=[];for(;t=U.exec(e);){let e=t[0],r=e.replace(wt,``);r.length<4||n.push({index:t.index,raw:e,clean:r})}n.length&&r.set(i,n)}for(let[e,t]of r){let n=e.textContent||``,r=e.parentNode;if(!r)continue;let i=document.createDocumentFragment(),a=0;for(let{index:e,raw:r,clean:o}of t){e>a&&i.appendChild(document.createTextNode(n.slice(a,e)));let t=document.createElement(`span`);t.className=`file-path-link`,t.setAttribute(`data-file-path`,o),t.setAttribute(`role`,`button`),t.setAttribute(`tabindex`,`0`),t.textContent=o,i.appendChild(t);let s=r.slice(o.length);s&&i.appendChild(document.createTextNode(s)),a=e+r.length}a<n.length&&i.appendChild(document.createTextNode(n.slice(a))),r.replaceChild(i,e)}}var K=!1;function Dt(){K||(K=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`a`),r=n?.getAttribute(`href`)||``;if(n&&Et(r)){e.preventDefault(),n.classList.add(`file-path-link`),W(r,n);return}let i=t?.closest(`.file-path-link`);if(!i)return;let a=i.getAttribute(`data-file-path`);a&&W(a,i)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target;t?.classList.contains(`file-path-link`)&&(e.preventDefault(),t.click())}))}var q=!1;function Ot(){q||(q=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`.code-copy-btn`);if(n){let e=n.closest(`.code-block`);if(!e)return;let t=e.querySelector(`pre code`);if(!t)return;navigator.clipboard.writeText(t.textContent||``).then(()=>{let e=n.textContent||``;n.textContent=T(`code.copied`),n.classList.add(`copied`),setTimeout(()=>{n.textContent=e,n.classList.remove(`copied`)},1500)}).catch(()=>{});return}let r=t?.closest(`.code-lang-label`);if(!r)return;let i=r.closest(`.code-block-wrapper`);if(!i)return;let a=i.querySelector(`pre code`);a&&navigator.clipboard.writeText(a.textContent||``).then(()=>{let e=r.textContent||``;r.textContent=T(`code.copied`),r.classList.add(`copied`),setTimeout(()=>{r.textContent=e,r.classList.remove(`copied`)},1500)}).catch(()=>{})}))}var J=!1;function kt(){J||(J=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`.diagram-copy-btn`);if(n){let e=n.closest(`.diagram-container`);if(!e)return;let t=``;if(e.dataset.widgetHtml)try{t=decodeURIComponent(escape(atob(e.dataset.widgetHtml)))}catch{return}else{let n=e.querySelector(`svg`);n&&(t=n.outerHTML)}t&&Y(n,t,`copy`);return}let r=t?.closest(`.mermaid-copy-btn`);if(r){let e=r.closest(`.mermaid-container`);if(!e)return;let t=e.dataset.mermaidCode||``;t&&Y(r,t,`copy`);return}let i=t?.closest(`.diagram-save-btn`);if(i){let e=i.closest(`.diagram-container`);if(!e)return;if(e.dataset.widgetHtml){let t=e.querySelector(`iframe`);t?.contentWindow&&(t.contentWindow.postMessage({type:`jaw-request-screenshot`},`*`),Y(i,``,`save`));return}let t=e.querySelector(`svg`);t&&X(t,i);return}let a=t?.closest(`.mermaid-save-btn`);if(a){let e=a.closest(`.mermaid-container`);if(!e)return;let t=e.querySelector(`svg`);t&&X(t,a);return}}))}function Y(e,t,n){let r=()=>{let t=e.innerHTML;e.innerHTML=k.checkSimple,e.classList.add(`copied`),setTimeout(()=>{e.innerHTML=t,e.classList.remove(`copied`)},1500)};n===`copy`?navigator.clipboard.writeText(t).then(r).catch(()=>{}):r()}function X(e,t){let n=e.cloneNode(!0),r=e.getBoundingClientRect();n.getAttribute(`width`)||n.setAttribute(`width`,String(r.width)),n.getAttribute(`height`)||n.setAttribute(`height`,String(r.height));let i=new XMLSerializer().serializeToString(n),a=`data:image/svg+xml;charset=utf-8,`+encodeURIComponent(i),o=new Image;o.onload=()=>{let e=document.createElement(`canvas`);e.width=o.naturalWidth*2,e.height=o.naturalHeight*2;let n=e.getContext(`2d`);n.scale(2,2),n.drawImage(o,0,0),e.toBlob(e=>{e&&(Z(e,`diagram-${Date.now()}.png`),Y(t,``,`save`))},`image/png`)},o.onerror=()=>{Z(new Blob([i],{type:`image/svg+xml;charset=utf-8`}),`diagram-${Date.now()}.svg`),Y(t,``,`save`)},o.src=a}function Z(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function At(e){return e.kind===`partial`?`<div class="diagram-container diagram-loading" role="status"
|
|
10
|
+
aria-label="Diagram loading"><div class="diagram-spinner"></div></div>`:e.kind===`error`?`<div class="diagram-container diagram-error" role="alert">
|
|
11
|
+
Malformed SVG: unclosed element</div>`:`<div class="diagram-container diagram-svg" tabindex="0"
|
|
12
|
+
role="figure" aria-label="SVG diagram">
|
|
13
|
+
${L(e.svg)}
|
|
14
|
+
<button class="diagram-save-btn" type="button"
|
|
15
|
+
aria-label="Save as image" title="Save">${k.download}</button>
|
|
16
|
+
<button class="diagram-copy-btn" type="button"
|
|
17
|
+
aria-label="Copy source" title="Copy">${k.copy}</button>
|
|
18
|
+
<button class="diagram-zoom-btn" type="button"
|
|
19
|
+
aria-label="Expand diagram" title="Expand">⤢</button>
|
|
20
|
+
</div>`}function jt(e,t){for(let n of t){let t=`<div\\b[^>]*?\\bdata-jaw-svg="${n.id}"[^>]*></div>`,r=new RegExp(t,`g`),i=At(n);e=e.replace(r,()=>i)}return e}function Mt(e){(e||document).querySelectorAll(`.diagram-zoom-btn`).forEach(e=>{e.dataset.bound||(e.dataset.bound=`1`,e.addEventListener(`click`,()=>{let t=e.closest(`.diagram-container`);if(!t)return;let n=t.cloneNode(!0);n.querySelectorAll(`.diagram-zoom-btn, .diagram-copy-btn, .diagram-save-btn`).forEach(e=>e.remove()),Nt(n.innerHTML)}))})}function Nt(e){let t=document.activeElement,n=document.createElement(`div`);n.className=`diagram-overlay`,n.setAttribute(`role`,`dialog`),n.setAttribute(`aria-modal`,`true`),n.setAttribute(`aria-label`,`Expanded diagram`),n.innerHTML=`
|
|
21
|
+
<div class="diagram-overlay-content">${L(e)}</div>
|
|
22
|
+
<button class="diagram-overlay-close" type="button" aria-label="Close">✕</button>
|
|
23
|
+
`,n.querySelectorAll(`.diagram-overlay-content svg`).forEach(e=>{if(!e.getAttribute(`viewBox`)){let t=e.getAttribute(`width`)||e.getBBox?.()?.width,n=e.getAttribute(`height`)||e.getBBox?.()?.height;t&&n&&e.setAttribute(`viewBox`,`0 0 ${parseFloat(String(t))} ${parseFloat(String(n))}`)}e.removeAttribute(`width`),e.removeAttribute(`height`)});let r=n.querySelector(`.diagram-overlay-close`),i=()=>{n.remove(),document.removeEventListener(`keydown`,a),t&&t.isConnected&&t.focus()},a=e=>{if(e.key===`Escape`){i();return}if(e.key===`Tab`){let t=n.querySelectorAll(`button, [href], [tabindex]:not([tabindex="-1"])`);if(t.length===0)return;let r=t[0],i=t[t.length-1];e.shiftKey&&document.activeElement===r?(e.preventDefault(),i.focus()):!e.shiftKey&&document.activeElement===i&&(e.preventDefault(),r.focus())}};r.addEventListener(`click`,i),document.addEventListener(`keydown`,a),document.body.appendChild(n),r.focus()}function Pt(e,t=!1){let n=R(e);if(!n)return`<em class="text-dim orchestrate-placeholder">${I(T(`orchestrator.dispatching`))}</em>`;let{text:r,fences:a}=st(n.replace(/\n{3,}/g,`
|
|
24
|
+
|
|
25
|
+
`)),{text:o,blocks:s}=j(r,t),{text:c,blocks:l}=mt(ct(o,a));St();let u=ot(c),d=i.parse(u);return d=d.replace(/<table/g,`<div class="table-wrapper"><table`).replace(/<\/table>/g,`</table></div>`),d=ht(d,l,t),d=L(d),d=jt(d,s),t||Ft(),Ot(),kt(),Dt(),d}var Q=null,$=null;function Ft(){$&&clearTimeout($),Q&&=(cancelAnimationFrame(Q),null),$=setTimeout(()=>{$=null,Q=requestAnimationFrame(()=>{Q=null,xt(),Ct(),Mt();let e=document.getElementById(`chatMessages`);e&&G(e)})},100)}function It(){$&&=(clearTimeout($),null),Q&&=(cancelAnimationFrame(Q),null)}export{gt as a,rt as c,et as d,$e as f,T as h,Pt as i,it as l,Qe as m,I as n,R as o,Ze as p,G as r,k as s,It as t,at as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as e,m as t,v as n}from"./settings-de6iL7ha.js";export{t as loadSettings,n as savePerCli,e as updateSettings};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./state-O6NVkWcL.js";import{n as t,r as n,t as r}from"./api-DygAf_G_.js";import{h as i,n as a,s as o}from"./render-
|
|
1
|
+
import{t as e}from"./state-O6NVkWcL.js";import{n as t,r as n,t as r}from"./api-DygAf_G_.js";import{h as i,n as a,s as o}from"./render-CCNMcx8O.js";import{n as s}from"./locale-DIXc-_34.js";import{a as c,i as l,r as u,t as d}from"./constants-74vpnlVG.js";function f(e){let t=document.getElementById(`sttEngine`),r=document.getElementById(`sttGeminiKey`),i=document.getElementById(`sttGeminiModel`),a=document.getElementById(`sttGeminiModelCustom`),o=document.getElementById(`sttWhisperModel`),s=document.getElementById(`sttOpenaiBaseUrl`),c=document.getElementById(`sttOpenaiKey`),l=document.getElementById(`sttOpenaiModel`),u=document.getElementById(`sttVertexJson`);if(t&&(t.value=e.engine||`auto`),r&&(r.placeholder=e.geminiKeySet?`✓ 입력됨 ····${e.geminiKeyLast4||``}`:`AIza...`),i){let t=e.geminiModel||`gemini-2.5-flash-lite`;Array.from(i.options).some(e=>e.value===t)?i.value=t:(i.value=`__custom__`,a&&(a.value=t,a.style.display=``))}o&&(o.value=e.whisperModel||`mlx-community/whisper-large-v3-turbo`),s&&(s.value=e.openaiBaseUrl||``),c&&(c.placeholder=e.openaiKeySet?`✓ 입력됨 ····${e.openaiKeyLast4||``}`:`sk-...`),l&&(l.value=e.openaiModel||``),u&&(u.value=e.vertexConfig||``);function d(){let e=t?.value||`auto`,n=e===`auto`||e===`gemini`,r=e===`openai`,i=e===`vertex`,a=e===`auto`||e===`whisper`;document.querySelectorAll(`.stt-gemini`).forEach(e=>e.style.display=n?``:`none`),document.querySelectorAll(`.stt-openai`).forEach(e=>e.style.display=r?``:`none`),document.querySelectorAll(`.stt-vertex`).forEach(e=>e.style.display=i?``:`none`),document.querySelectorAll(`.stt-whisper`).forEach(e=>e.style.display=a?``:`none`)}d();async function f(){let e={stt:{engine:t?.value||`auto`,geminiModel:(i?.value===`__custom__`?a?.value:i?.value)||`gemini-2.5-flash-lite`,whisperModel:o?.value||``,openaiBaseUrl:s?.value||``,openaiModel:l?.value||``,vertexConfig:u?.value||``}};r?.value&&(e.stt.geminiApiKey=r.value),c?.value&&(e.stt.openaiApiKey=c.value),console.log(`[stt] saving:`,{engine:e.stt.engine,hasGeminiKey:!!e.stt.geminiApiKey,hasOpenaiKey:!!e.stt.openaiApiKey});try{if(await n(`/api/settings`,`PUT`,e),r?.value){let e=r.value.slice(-4);r.value=``,r.placeholder=`✓ 입력됨 ····${e}`}if(c?.value){let e=c.value.slice(-4);c.value=``,c.placeholder=`✓ 입력됨 ····${e}`}}catch(e){console.error(`[stt] save failed:`,e)}}t?.addEventListener(`change`,()=>{d(),f()}),i?.addEventListener(`change`,()=>{a&&(a.style.display=i.value===`__custom__`?``:`none`),i.value!==`__custom__`&&f()}),a?.addEventListener(`blur`,f),r?.addEventListener(`blur`,()=>{r.value&&f()}),c?.addEventListener(`blur`,()=>{c.value&&f()}),s?.addEventListener(`blur`,f),l?.addEventListener(`blur`,f),o?.addEventListener(`blur`,f),u?.addEventListener(`blur`,f)}async function p(){let e=document.getElementById(`tgToken`)?.value.trim()||``,t=document.getElementById(`tgChatIds`)?.value.trim()||``;await n(`/api/settings`,`PUT`,{telegram:{token:e,allowedChatIds:t?t.split(`,`).map(e=>parseInt(e.trim(),10)).filter(e=>!isNaN(e)):[]}})}async function ee(e){document.getElementById(`tgOn`)?.classList.toggle(`active`,e),document.getElementById(`tgOff`)?.classList.toggle(`active`,!e),await n(`/api/settings`,`PUT`,{telegram:{enabled:e}})}async function te(e){document.getElementById(`tgForwardOn`)?.classList.toggle(`active`,e),document.getElementById(`tgForwardOff`)?.classList.toggle(`active`,!e),await n(`/api/settings`,`PUT`,{telegram:{forwardAll:e}})}async function m(e){document.getElementById(`tgMentionOn`)?.classList.toggle(`active`,e),document.getElementById(`tgMentionOff`)?.classList.toggle(`active`,!e),await n(`/api/settings`,`PUT`,{telegram:{mentionOnly:e}})}function h(e){if(!e.telegram)return;let t=e.telegram;document.getElementById(`tgOn`)?.classList.toggle(`active`,!!t.enabled),document.getElementById(`tgOff`)?.classList.toggle(`active`,!t.enabled);let n=document.getElementById(`tgToken`);t.token&&n&&(n.value=t.token);let r=document.getElementById(`tgChatIds`);t.allowedChatIds?.length&&r&&(r.value=t.allowedChatIds.join(`, `));let i=t.forwardAll!==!1;document.getElementById(`tgForwardOn`)?.classList.toggle(`active`,i),document.getElementById(`tgForwardOff`)?.classList.toggle(`active`,!i);let a=t.mentionOnly!==!1;document.getElementById(`tgMentionOn`)?.classList.toggle(`active`,a),document.getElementById(`tgMentionOff`)?.classList.toggle(`active`,!a)}async function g(){let e=document.getElementById(`dcToken`)?.value.trim()||``,t=document.getElementById(`dcGuildId`)?.value.trim()||``,r=document.getElementById(`dcChannelIds`)?.value.trim()||``;await n(`/api/settings`,`PUT`,{discord:{token:e,guildId:t,channelIds:r?r.split(`,`).map(e=>e.trim()).filter(Boolean):[]}})}async function _(e){document.getElementById(`dcOn`)?.classList.toggle(`active`,e),document.getElementById(`dcOff`)?.classList.toggle(`active`,!e),await n(`/api/settings`,`PUT`,{discord:{enabled:e}})}async function v(e){document.getElementById(`dcForwardOn`)?.classList.toggle(`active`,e),document.getElementById(`dcForwardOff`)?.classList.toggle(`active`,!e),await n(`/api/settings`,`PUT`,{discord:{forwardAll:e}})}async function ne(e){document.getElementById(`dcAllowBotsOn`)?.classList.toggle(`active`,e),document.getElementById(`dcAllowBotsOff`)?.classList.toggle(`active`,!e),await n(`/api/settings`,`PUT`,{discord:{allowBots:e}})}async function y(e){document.getElementById(`dcMentionOn`)?.classList.toggle(`active`,e),document.getElementById(`dcMentionOff`)?.classList.toggle(`active`,!e),await n(`/api/settings`,`PUT`,{discord:{mentionOnly:e}})}function re(e){if(!e.discord)return;let t=e.discord;document.getElementById(`dcOn`)?.classList.toggle(`active`,!!t.enabled),document.getElementById(`dcOff`)?.classList.toggle(`active`,!t.enabled);let n=document.getElementById(`dcToken`);t.token&&n&&(n.value=t.token);let r=document.getElementById(`dcGuildId`);t.guildId&&r&&(r.value=t.guildId);let i=document.getElementById(`dcChannelIds`);t.channelIds?.length&&i&&(i.value=t.channelIds.join(`, `));let a=t.forwardAll!==!1;document.getElementById(`dcForwardOn`)?.classList.toggle(`active`,a),document.getElementById(`dcForwardOff`)?.classList.toggle(`active`,!a);let o=!!t.allowBots;document.getElementById(`dcAllowBotsOn`)?.classList.toggle(`active`,o),document.getElementById(`dcAllowBotsOff`)?.classList.toggle(`active`,!o);let s=!!t.mentionOnly;document.getElementById(`dcMentionOn`)?.classList.toggle(`active`,s),document.getElementById(`dcMentionOff`)?.classList.toggle(`active`,!s)}async function ie(e){document.getElementById(`chTelegram`)?.classList.toggle(`active`,e===`telegram`),document.getElementById(`chDiscord`)?.classList.toggle(`active`,e===`discord`),document.getElementById(`channelTelegramSettings`)?.style.setProperty(`display`,e===`telegram`?``:`none`),document.getElementById(`channelDiscordSettings`)?.style.setProperty(`display`,e===`discord`?``:`none`),await n(`/api/settings`,`PUT`,{channel:e})}function ae(e){let t=e.channel||`telegram`;document.getElementById(`chTelegram`)?.classList.toggle(`active`,t===`telegram`),document.getElementById(`chDiscord`)?.classList.toggle(`active`,t===`discord`),document.getElementById(`channelTelegramSettings`)?.style.setProperty(`display`,t===`telegram`?``:`none`),document.getElementById(`channelDiscordSettings`)?.style.setProperty(`display`,t===`discord`?``:`none`)}function b(e){let t=document.getElementById(`fallbackOrderList`);if(!t)return;let n=Object.keys(e.perCli||{}),r=e.fallbackOrder||[],o=Math.min(n.length-1,3),s=``;for(let e=0;e<o;e++){let t=r[e]||``,o=n.map(e=>`<option value="${a(e)}" ${e===t?`selected`:``}>${a(e)}</option>`).join(``);s+=`
|
|
2
2
|
<div class="settings-row sub-row">
|
|
3
3
|
<label style="min-width:60px">Fallback ${e+1}</label>
|
|
4
4
|
<select id="fallback${e}"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./state-O6NVkWcL.js";import{r as t}from"./api-DygAf_G_.js";import{c as n,d as r,h as i,n as a,s as o}from"./render-
|
|
1
|
+
import{t as e}from"./state-O6NVkWcL.js";import{r as t}from"./api-DygAf_G_.js";import{c as n,d as r,h as i,n as a,s as o}from"./render-CCNMcx8O.js";var s=[`productivity`,`communication`,`devtools`,`ai-media`,`utility`,`smarthome`,`automation`];async function c(){try{e.allSkills=await(await r(`/api/skills`)).json(),l()}catch{let e=document.getElementById(`skillsList`);e&&(e.innerHTML=`<div style="color:var(--text-dim);font-size:11px">${i(`skill.loadFail`)}</div>`)}}function l(){let t=document.getElementById(`skillsList`),r=document.getElementById(`skillsCount`);if(!t||!r)return;let c=e.allSkills,l=c;e.currentSkillFilter===`installed`?l=c.filter(e=>e.enabled):e.currentSkillFilter===`other`?l=c.filter(e=>!s.includes(e.category||``)):e.currentSkillFilter!==`all`&&(l=c.filter(t=>t.category===e.currentSkillFilter));let u=c.filter(e=>e.enabled).length;r.textContent=i(`skill.count`,{active:u,total:c.length}),t.innerHTML=l.map(e=>{let t=[];return e.requires?.env&&t.push(`${o.key} `+e.requires.env.map(e=>a(e)).join(`, `)),e.requires?.bins&&t.push(`${o.settings} `+e.requires.bins.map(e=>a(e)).join(`, `)),e.install&&t.push(a(e.install)),`
|
|
2
2
|
<div class="skill-card ${e.enabled?`enabled`:``}">
|
|
3
3
|
<div class="skill-card-header">
|
|
4
4
|
<span class="skill-emoji">${e.emoji?n(e.emoji):o.tool}</span>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./skills-CiZtWh5G.js";export{e as loadSkills};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./api-DygAf_G_.js";import{h as t,n}from"./render-
|
|
1
|
+
import{t as e}from"./api-DygAf_G_.js";import{h as t,n}from"./render-CCNMcx8O.js";import{t as r}from"./locale-DIXc-_34.js";var i=[],a=[],o=-1,s=!1,c=null;function l(e){let t=String(e||``).slice(1).trim().split(/\s+/)[0]||``;return t.includes(`/`)||t.includes(`\\`)}var u=()=>document.getElementById(`cmdDropdown`),d=()=>document.getElementById(`chatInput`);function f(e){let t=String(e||``).toLowerCase();return i.filter(e=>`/${e.name}`.startsWith(t))}function p(){let e=u(),t=d();!e||!t||(c&&=(clearTimeout(c),null),e.style.display=`block`,requestAnimationFrame(()=>e.classList.add(`visible`)),s=!0,t.setAttribute(`aria-expanded`,`true`))}function m(){let e=u(),r=d();if(!e||!r)return;if(!a.length){if(!r.value.startsWith(`/`)||l(r.value)){_();return}e.innerHTML=`
|
|
2
2
|
<div class="cmd-item cmd-empty" role="option" aria-disabled="true">
|
|
3
3
|
${t(`cmd.noMatch`)}
|
|
4
4
|
</div>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./slash-commands-BeZm3K9x.js";export{e as loadCommands};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-Bjnw0wQ6.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./state-O6NVkWcL.js";import{t}from"./api-DygAf_G_.js";import{Z as n}from"./vendor-mermaid-DV2i2BfY.js";import{c as r,h as i,i as a,l as o,n as s,o as c,r as l,s as u}from"./render-DLUswUab.js";var d=`agentName`,f=`CLI-JAW`,p=f;function m(){return p}function h(e){p=(e||``).trim()||f,localStorage.setItem(d,p);let t=document.getElementById(`appNameInput`);t&&(t.value=p)}function ee(){p=localStorage.getItem(d)||f;let e=document.getElementById(`appNameInput`);e&&(e.value=p),document.getElementById(`appNameSave`)?.addEventListener(`click`,()=>{let e=document.getElementById(`appNameInput`);e&&h(e.value)}),document.getElementById(`appNameInput`)?.addEventListener(`keydown`,e=>{let t=e;t.key===`Enter`&&(t.preventDefault(),h(t.target.value),t.target.blur())})}var te=`clijaw`,ne=3,g=`messages`,re=`clijaw_scope`,_=localStorage.getItem(re)||`default`;function ie(e){_=e||`default`,localStorage.setItem(re,_)}var v=null;function y(){return v||(v=new Promise((e,t)=>{let n=indexedDB.open(te,ne);n.onupgradeneeded=e=>{let t=n.result,r=e.oldVersion;if(r<2){t.objectStoreNames.contains(g)&&t.deleteObjectStore(g);let e=t.createObjectStore(g,{keyPath:`id`,autoIncrement:!0});e.createIndex(`timestamp`,`timestamp`),e.createIndex(`scope`,`scope`)}else if(r===2){let e=n.transaction.objectStore(g);e.indexNames.contains(`scope`)||e.createIndex(`scope`,`scope`)}},n.onsuccess=()=>{let t=n.result;t.onversionchange=()=>{t.close(),v=null},t.onclose=()=>{v=null},e(t)},n.onblocked=()=>{console.warn(`[idb-cache] DB upgrade blocked by another tab`)},n.onerror=()=>{v=null,t(n.error)}}),v)}async function ae(e){try{let t=(await y()).transaction(g,`readwrite`),n=t.objectStore(g);n.clear();for(let t of e)n.add({role:t.role,content:t.content,cli:t.cli??null,tool_log:t.tool_log??null,timestamp:t.timestamp||Date.now(),scope:_});await new Promise((e,n)=>{t.oncomplete=()=>e(),t.onerror=()=>n(t.error)})}catch(e){console.warn(`[idb-cache] cacheMessages failed:`,e)}}async function b(e){try{let t=(await y()).transaction(g,`readwrite`);t.objectStore(g).add({role:e.role,content:e.content,cli:e.cli??null,tool_log:e.tool_log??null,timestamp:e.timestamp||Date.now(),scope:_}),await new Promise((e,n)=>{t.oncomplete=()=>e(),t.onerror=()=>n(t.error)})}catch(e){console.warn(`[idb-cache] upsertMessage failed:`,e)}}async function oe(e){try{let t=await y(),n=e||_;return new Promise((e,r)=>{let i=t.transaction(g,`readonly`).objectStore(g).index(`scope`).getAll(n);i.onsuccess=()=>e(i.result),i.onerror=()=>r(i.error)})}catch(e){return console.warn(`[idb-cache] getScopedMessages failed:`,e),[]}}async function se(){try{(await y()).transaction(g,`readwrite`).objectStore(g).clear()}catch(e){console.warn(`[idb-cache] clearCache failed:`,e)}}var x=5,S=80,ce=class{items=[];container;spacerTop;spacerBottom;viewport;_active=!1;_totalHeight=0;rafId=null;firstVisible=0;lastVisible=0;onLazyRender=null;onPostRender=null;constructor(e){this.container=document.getElementById(e),this.spacerTop=document.createElement(`div`),this.spacerTop.className=`vs-spacer-top`,this.spacerBottom=document.createElement(`div`),this.spacerBottom.className=`vs-spacer-bottom`,this.viewport=document.createElement(`div`),this.viewport.className=`vs-viewport`}get active(){return this._active}get count(){return this.items.length}flushToDOM(){this._active&&(this.container.removeEventListener(`scroll`,this.scrollHandler),this.rafId&&=(cancelAnimationFrame(this.rafId),null),this.container.innerHTML=this.items.map(e=>e.html).join(``),this._active=!1,this.firstVisible=0,this.lastVisible=0,this.items=[],this._totalHeight=0)}addItem(e,t){let n={id:e,html:t,height:S};this.items.push(n),this._totalHeight+=S,!this._active&&this.items.length>=80&&this.activate(),this._active&&this.scheduleRender()}appendLiveItem(e){if(!this._active)return;let t=e.outerHTML,n={id:crypto.randomUUID(),html:t,height:S};this.items.push(n),this._totalHeight+=S,this.render(),this.container.scrollTop=this._totalHeight}updateItemHtml(e,t){this.items[e]&&(this.items[e].html=t)}scrollHandler=()=>this.scheduleRender();activate(){this._active=!0,this._totalHeight=0,this.container.querySelectorAll(`.msg`).forEach((e,t)=>{this.items[t]&&(this.items[t].height=e.getBoundingClientRect().height,this._totalHeight+=this.items[t].height)}),this.container.innerHTML=``,this.container.append(this.spacerTop,this.viewport,this.spacerBottom),this.container.addEventListener(`scroll`,this.scrollHandler,{passive:!0}),this.render()}scheduleRender(){this.rafId||=requestAnimationFrame(()=>{this.rafId=null,this.render()})}render(){let e=this.container.scrollTop,t=this.container.clientHeight,n=0,r=0;for(let t=0;t<this.items.length;t++){if(n+this.items[t].height>e){r=t;break}n+=this.items[t].height}let i=Math.max(0,r-x),a=n,o=r;for(let n=r;n<this.items.length&&(a+=this.items[n].height,o=n,!(a>e+t));n++);let s=Math.min(this.items.length-1,o+x);if(i===this.firstVisible&&s===this.lastVisible)return;this.firstVisible=i,this.lastVisible=s;let c=0;for(let e=0;e<i;e++)c+=this.items[e].height;let l=0;for(let e=s+1;e<this.items.length;e++)l+=this.items[e].height;this.spacerTop.style.height=`${c}px`,this.spacerBottom.style.height=`${l}px`;let u=document.createDocumentFragment();for(let e=i;e<=s;e++){let t=this.items[e],n=document.createElement(`div`);n.innerHTML=t.html;let r=n.firstElementChild;r&&(r.dataset.vsIdx=String(e),u.appendChild(r))}if(this.viewport.innerHTML=``,this.viewport.appendChild(u),this.viewport.querySelectorAll(`[data-vs-idx]`).forEach(e=>{let t=Number(e.dataset.vsIdx);if(this.items[t]){let n=this.items[t].height,r=e.getBoundingClientRect().height;this.items[t].height=r,this._totalHeight+=r-n}}),this.onLazyRender){let e=this.viewport.querySelectorAll(`.lazy-pending`);e.length>0&&this.onLazyRender(Array.from(e))}this.onPostRender&&this.onPostRender(this.viewport)}scrollToBottom(){this.container.scrollTop=this._totalHeight,this.scheduleRender()}clear(){this.items=[],this._totalHeight=0,this._active&&(this.container.removeEventListener(`scroll`,this.scrollHandler),this.viewport.innerHTML=``,this.spacerTop.style.height=`0`,this.spacerBottom.style.height=`0`,this.container.innerHTML=``),this._active=!1,this.firstVisible=0,this.lastVisible=0,this.onLazyRender=null,this.onPostRender=null,this.rafId&&=(cancelAnimationFrame(this.rafId),null)}},le=null;function C(){return le||=new ce(`chatMessages`),le}var ue=2e3,de=80;function fe(e){return{chunks:[],fullText:``,textDirty:!1,element:e,pendingRAF:null,isFinalized:!1,lastRenderTime:0}}function w(e){return e.textDirty&&=(e.fullText=e.chunks.join(``),!1),e.fullText}function pe(e,t){e.chunks.push(t),e.textDirty=!0,!e.pendingRAF&&!e.isFinalized&&(e.pendingRAF=requestAnimationFrame(()=>{if(e.pendingRAF=null,e.isFinalized)return;let t=performance.now(),n=w(e);n.length<ue||t-e.lastRenderTime>de?(e.element.innerHTML=a(n,!0)+`<span class="stream-cursor" aria-hidden="true"></span>`,e.lastRenderTime=t):e.pendingRAF=requestAnimationFrame(()=>{e.pendingRAF=null,!e.isFinalized&&(e.element.innerHTML=a(w(e),!0)+`<span class="stream-cursor" aria-hidden="true"></span>`,e.lastRenderTime=performance.now())})}))}function me(e,t=!1){e.isFinalized=!0,e.pendingRAF&&=(cancelAnimationFrame(e.pendingRAF),null);let n=w(e);return t||(e.element.innerHTML=a(n)),n}var he=[`cdnjs.cloudflare.com`,`cdn.jsdelivr.net`,`unpkg.com`,`esm.sh`,`fonts.googleapis.com`,`fonts.gstatic.com`],ge=[/\beval\s*\(/,/\bnew\s+Function\s*\(/,/\bdocument\.cookie\b/,/\bwindow\.opener\b/,/\bwindow\.top\b/,/\bparent\.postMessage\b(?!.*jaw-)/,/\blocation\.href\s*=/,/\bwindow\.location\b/,/\bsetTimeout\s*\(\s*["'`]/,/\bsetInterval\s*\(\s*["'`]/,/\.constructor\s*\.\s*constructor/,/\bdocument\.write\s*\(/,/\binsertAdjacentHTML\s*\(/,/\bimport\s*\(/],_e=[];function ve(e){let t=[];if(e.length>524288)return{valid:!1,reason:`Payload too large (>512KB)`,warnings:t};let n=/(?:src|href)\s*=\s*["']https?:\/\/([^/"']+)/gi,r;for(;(r=n.exec(e))!==null;){let e=r[1];if(!he.some(t=>e===t||e.endsWith(`.`+t)))return{valid:!1,reason:`Blocked domain: ${e}`,warnings:t}}let i=/url\s*\(\s*['"]?https?:\/\/([^)'"]+)/gi;for(;(r=i.exec(e))!==null;){let e=r[1].split(`/`)[0];he.some(t=>e===t||e.endsWith(`.`+t))||t.push(`CSS url() references external domain: ${e}`)}for(let n of ge)if(n.test(e))return{valid:!1,reason:`Dangerous pattern: ${n.source}`,warnings:t};for(let n of _e)n.test(e)&&t.push(`DOM sink detected: ${n.source}`);return{valid:!0,warnings:t}}function ye(){let e=document.createElement(`button`);return e.className=`diagram-copy-btn`,e.type=`button`,e.ariaLabel=`Copy source`,e.title=`Copy`,e.innerHTML=u.copy,e}function be(){let e=document.createElement(`button`);return e.className=`diagram-save-btn`,e.type=`button`,e.ariaLabel=`Save as image`,e.title=`Save`,e.innerHTML=u.download,e}var xe=[`cdnjs.cloudflare.com`,`cdn.jsdelivr.net`,`unpkg.com`,`esm.sh`,`fonts.googleapis.com`,`fonts.gstatic.com`],T=new Set,E=new Map,D=null;function Se(){if(D)return;let e=document.getElementById(`chatMessages`);e&&(D=new MutationObserver(e=>{if(T.size)for(let t of e)for(let e of t.removedNodes)e instanceof HTMLIFrameElement&&e.contentWindow&&(T.delete(e.contentWindow),E.delete(e.contentWindow)),e instanceof HTMLElement&&e.querySelectorAll(`iframe`).forEach(e=>{e.contentWindow&&(T.delete(e.contentWindow),E.delete(e.contentWindow))})}),D.observe(e,{childList:!0,subtree:!0}))}function Ce(e){if(e.includes(`"importmap"`)||e.includes(`'importmap'`))return``;let t={},n=e.match(/(?:cdn\.jsdelivr\.net\/npm|unpkg\.com)\/three@([\d.]+)/);if(n){let r=n[1],i=e.includes(`unpkg.com/three@`)?`unpkg.com`:`cdn.jsdelivr.net/npm`;t.three=`https://${i}/three@${r}/${i===`unpkg.com`?`build/three.module.js`:`build/three.module.min.js`}`,t[`three/addons/`]=`https://${i}/three@${r}/examples/jsm/`}return Object.keys(t).length===0?``:`<script type="importmap">${JSON.stringify({imports:t})}<\/script>`}function we(e){let t=`'none'`;(e.includes(`cdn.jsdelivr.net/npm/us-atlas`)||e.includes(`cdn.jsdelivr.net/npm/world-atlas`)||e.includes(`cdn.jsdelivr.net/npm/datamaps`))&&(t=`https://cdn.jsdelivr.net`);let n=/Tone\.min\.js|tone@/.test(e)?`worker-src blob:;`:``,r=xe.map(e=>`https://${e}`),i=r.join(` `),a=[`data:`,`blob:`,...r],o=[`'unsafe-inline'`,`https://fonts.googleapis.com`];/L\.(map|tileLayer|marker|geoJSON|polyline|polygon|circle)\(|leaflet[\w.@/-]*\.(js|css)|tile\.openstreetmap\.org/.test(e)&&(a.push(`https://a.tile.openstreetmap.org`,`https://b.tile.openstreetmap.org`,`https://c.tile.openstreetmap.org`),o.push(`https://cdnjs.cloudflare.com`,`https://cdn.jsdelivr.net`));let s=a.join(` `);return`<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline' ${i}; style-src ${o.join(` `)}; img-src ${s}; font-src https://fonts.gstatic.com; connect-src ${t}; ${n} base-uri 'none';">`}function Te(){let e=!document.documentElement.hasAttribute(`data-theme`)||document.documentElement.getAttribute(`data-theme`)===`dark`,t=getComputedStyle(document.documentElement);return{isDark:e,tokens:{"--bg":t.getPropertyValue(`--bg`).trim(),"--surface":t.getPropertyValue(`--surface`).trim(),"--border":t.getPropertyValue(`--border`).trim(),"--text":t.getPropertyValue(`--text`).trim(),"--text-dim":t.getPropertyValue(`--text-dim`).trim(),"--accent":t.getPropertyValue(`--accent`).trim(),"--font-ui":t.getPropertyValue(`--font-ui`).trim(),"--font-mono":t.getPropertyValue(`--font-mono`).trim(),"--radius-sm":t.getPropertyValue(`--radius-sm`).trim(),"--radius-md":t.getPropertyValue(`--radius-md`).trim()}}}function Ee(e){return`
|
|
2
|
+
import{t as e}from"./state-O6NVkWcL.js";import{t}from"./api-DygAf_G_.js";import{Z as n}from"./vendor-mermaid-DV2i2BfY.js";import{c as r,h as i,i as a,l as o,n as s,o as c,r as l,s as u}from"./render-CCNMcx8O.js";var d=`agentName`,f=`CLI-JAW`,p=f;function m(){return p}function h(e){p=(e||``).trim()||f,localStorage.setItem(d,p);let t=document.getElementById(`appNameInput`);t&&(t.value=p)}function ee(){p=localStorage.getItem(d)||f;let e=document.getElementById(`appNameInput`);e&&(e.value=p),document.getElementById(`appNameSave`)?.addEventListener(`click`,()=>{let e=document.getElementById(`appNameInput`);e&&h(e.value)}),document.getElementById(`appNameInput`)?.addEventListener(`keydown`,e=>{let t=e;t.key===`Enter`&&(t.preventDefault(),h(t.target.value),t.target.blur())})}var te=`clijaw`,ne=3,g=`messages`,re=`clijaw_scope`,_=localStorage.getItem(re)||`default`;function ie(e){_=e||`default`,localStorage.setItem(re,_)}var v=null;function y(){return v||(v=new Promise((e,t)=>{let n=indexedDB.open(te,ne);n.onupgradeneeded=e=>{let t=n.result,r=e.oldVersion;if(r<2){t.objectStoreNames.contains(g)&&t.deleteObjectStore(g);let e=t.createObjectStore(g,{keyPath:`id`,autoIncrement:!0});e.createIndex(`timestamp`,`timestamp`),e.createIndex(`scope`,`scope`)}else if(r===2){let e=n.transaction.objectStore(g);e.indexNames.contains(`scope`)||e.createIndex(`scope`,`scope`)}},n.onsuccess=()=>{let t=n.result;t.onversionchange=()=>{t.close(),v=null},t.onclose=()=>{v=null},e(t)},n.onblocked=()=>{console.warn(`[idb-cache] DB upgrade blocked by another tab`)},n.onerror=()=>{v=null,t(n.error)}}),v)}async function ae(e){try{let t=(await y()).transaction(g,`readwrite`),n=t.objectStore(g);n.clear();for(let t of e)n.add({role:t.role,content:t.content,cli:t.cli??null,tool_log:t.tool_log??null,timestamp:t.timestamp||Date.now(),scope:_});await new Promise((e,n)=>{t.oncomplete=()=>e(),t.onerror=()=>n(t.error)})}catch(e){console.warn(`[idb-cache] cacheMessages failed:`,e)}}async function b(e){try{let t=(await y()).transaction(g,`readwrite`);t.objectStore(g).add({role:e.role,content:e.content,cli:e.cli??null,tool_log:e.tool_log??null,timestamp:e.timestamp||Date.now(),scope:_}),await new Promise((e,n)=>{t.oncomplete=()=>e(),t.onerror=()=>n(t.error)})}catch(e){console.warn(`[idb-cache] upsertMessage failed:`,e)}}async function oe(e){try{let t=await y(),n=e||_;return new Promise((e,r)=>{let i=t.transaction(g,`readonly`).objectStore(g).index(`scope`).getAll(n);i.onsuccess=()=>e(i.result),i.onerror=()=>r(i.error)})}catch(e){return console.warn(`[idb-cache] getScopedMessages failed:`,e),[]}}async function se(){try{(await y()).transaction(g,`readwrite`).objectStore(g).clear()}catch(e){console.warn(`[idb-cache] clearCache failed:`,e)}}var x=5,S=80,ce=class{items=[];container;spacerTop;spacerBottom;viewport;_active=!1;_totalHeight=0;rafId=null;firstVisible=0;lastVisible=0;onLazyRender=null;onPostRender=null;constructor(e){this.container=document.getElementById(e),this.spacerTop=document.createElement(`div`),this.spacerTop.className=`vs-spacer-top`,this.spacerBottom=document.createElement(`div`),this.spacerBottom.className=`vs-spacer-bottom`,this.viewport=document.createElement(`div`),this.viewport.className=`vs-viewport`}get active(){return this._active}get count(){return this.items.length}flushToDOM(){this._active&&(this.container.removeEventListener(`scroll`,this.scrollHandler),this.rafId&&=(cancelAnimationFrame(this.rafId),null),this.container.innerHTML=this.items.map(e=>e.html).join(``),this._active=!1,this.firstVisible=0,this.lastVisible=0,this.items=[],this._totalHeight=0)}addItem(e,t){let n={id:e,html:t,height:S};this.items.push(n),this._totalHeight+=S,!this._active&&this.items.length>=80&&this.activate(),this._active&&this.scheduleRender()}appendLiveItem(e){if(!this._active)return;let t=e.outerHTML,n={id:crypto.randomUUID(),html:t,height:S};this.items.push(n),this._totalHeight+=S,this.render(),this.container.scrollTop=this._totalHeight}updateItemHtml(e,t){this.items[e]&&(this.items[e].html=t)}scrollHandler=()=>this.scheduleRender();activate(){this._active=!0,this._totalHeight=0,this.container.querySelectorAll(`.msg`).forEach((e,t)=>{this.items[t]&&(this.items[t].height=e.getBoundingClientRect().height,this._totalHeight+=this.items[t].height)}),this.container.replaceChildren(this.spacerTop,this.viewport,this.spacerBottom),this.container.addEventListener(`scroll`,this.scrollHandler,{passive:!0}),this.render()}scheduleRender(){this.rafId||=requestAnimationFrame(()=>{this.rafId=null,this.render()})}render(){let e=this.container.scrollTop,t=this.container.clientHeight,n=0,r=0;for(let t=0;t<this.items.length;t++){if(n+this.items[t].height>e){r=t;break}n+=this.items[t].height}let i=Math.max(0,r-x),a=n,o=r;for(let n=r;n<this.items.length&&(a+=this.items[n].height,o=n,!(a>e+t));n++);let s=Math.min(this.items.length-1,o+x);if(i===this.firstVisible&&s===this.lastVisible)return;this.firstVisible=i,this.lastVisible=s;let c=0;for(let e=0;e<i;e++)c+=this.items[e].height;let l=0;for(let e=s+1;e<this.items.length;e++)l+=this.items[e].height;this.spacerTop.style.height=`${c}px`,this.spacerBottom.style.height=`${l}px`;let u=new Map;for(let e of Array.from(this.viewport.children)){let t=Number(e.dataset.vsIdx);isNaN(t)||u.set(t,e)}for(let[e,t]of u)(e<i||e>s)&&(t.remove(),u.delete(e));let d=[];for(let e=i;e<=s;e++){let t=u.get(e);if(t)d.push(t);else{let t=this.items[e],n=document.createElement(`div`);n.innerHTML=t.html;let r=n.firstElementChild;r&&(r.dataset.vsIdx=String(e),d.push(r))}}let f=this.viewport.firstChild;for(let e of d)e===f?f=f.nextSibling:this.viewport.insertBefore(e,f);if(this.onLazyRender){let e=this.viewport.querySelectorAll(`.lazy-pending`);e.length>0&&this.onLazyRender(Array.from(e))}this.onPostRender&&this.onPostRender(this.viewport),this.remeasureVisible()}remeasureVisible(){let e=[];this.viewport.querySelectorAll(`[data-vs-idx]`).forEach(t=>{let n=Number(t.dataset.vsIdx);this.items[n]&&e.push({idx:n,newH:t.getBoundingClientRect().height})});for(let{idx:t,newH:n}of e){let e=this.items[t].height;e!==n&&(this.items[t].height=n,this._totalHeight+=n-e)}}scrollToBottom(){this.container.scrollTop=this._totalHeight,this.scheduleRender()}clear(){this.items=[],this._totalHeight=0,this._active&&(this.container.removeEventListener(`scroll`,this.scrollHandler),this.viewport.innerHTML=``,this.spacerTop.style.height=`0`,this.spacerBottom.style.height=`0`,this.container.innerHTML=``),this._active=!1,this.firstVisible=0,this.lastVisible=0,this.onLazyRender=null,this.onPostRender=null,this.rafId&&=(cancelAnimationFrame(this.rafId),null)}},le=null;function C(){return le||=new ce(`chatMessages`),le}var ue=2e3,de=80;function fe(e){return{chunks:[],fullText:``,textDirty:!1,element:e,pendingRAF:null,isFinalized:!1,lastRenderTime:0}}function w(e){return e.textDirty&&=(e.fullText=e.chunks.join(``),!1),e.fullText}function pe(e,t){e.chunks.push(t),e.textDirty=!0,!e.pendingRAF&&!e.isFinalized&&(e.pendingRAF=requestAnimationFrame(()=>{if(e.pendingRAF=null,e.isFinalized)return;let t=performance.now(),n=w(e);n.length<ue||t-e.lastRenderTime>de?(e.element.innerHTML=a(n,!0)+`<span class="stream-cursor" aria-hidden="true"></span>`,e.lastRenderTime=t):e.pendingRAF=requestAnimationFrame(()=>{e.pendingRAF=null,!e.isFinalized&&(e.element.innerHTML=a(w(e),!0)+`<span class="stream-cursor" aria-hidden="true"></span>`,e.lastRenderTime=performance.now())})}))}function me(e,t=!1){e.isFinalized=!0,e.pendingRAF&&=(cancelAnimationFrame(e.pendingRAF),null);let n=w(e);return t||(e.element.innerHTML=a(n)),n}var he=[`cdnjs.cloudflare.com`,`cdn.jsdelivr.net`,`unpkg.com`,`esm.sh`,`fonts.googleapis.com`,`fonts.gstatic.com`],ge=[/\beval\s*\(/,/\bnew\s+Function\s*\(/,/\bdocument\.cookie\b/,/\bwindow\.opener\b/,/\bwindow\.top\b/,/\bparent\.postMessage\b(?!.*jaw-)/,/\blocation\.href\s*=/,/\bwindow\.location\b/,/\bsetTimeout\s*\(\s*["'`]/,/\bsetInterval\s*\(\s*["'`]/,/\.constructor\s*\.\s*constructor/,/\bdocument\.write\s*\(/,/\binsertAdjacentHTML\s*\(/,/\bimport\s*\(/],_e=[];function ve(e){let t=[];if(e.length>524288)return{valid:!1,reason:`Payload too large (>512KB)`,warnings:t};let n=/(?:src|href)\s*=\s*["']https?:\/\/([^/"']+)/gi,r;for(;(r=n.exec(e))!==null;){let e=r[1];if(!he.some(t=>e===t||e.endsWith(`.`+t)))return{valid:!1,reason:`Blocked domain: ${e}`,warnings:t}}let i=/url\s*\(\s*['"]?https?:\/\/([^)'"]+)/gi;for(;(r=i.exec(e))!==null;){let e=r[1].split(`/`)[0];he.some(t=>e===t||e.endsWith(`.`+t))||t.push(`CSS url() references external domain: ${e}`)}for(let n of ge)if(n.test(e))return{valid:!1,reason:`Dangerous pattern: ${n.source}`,warnings:t};for(let n of _e)n.test(e)&&t.push(`DOM sink detected: ${n.source}`);return{valid:!0,warnings:t}}function ye(){let e=document.createElement(`button`);return e.className=`diagram-copy-btn`,e.type=`button`,e.ariaLabel=`Copy source`,e.title=`Copy`,e.innerHTML=u.copy,e}function be(){let e=document.createElement(`button`);return e.className=`diagram-save-btn`,e.type=`button`,e.ariaLabel=`Save as image`,e.title=`Save`,e.innerHTML=u.download,e}var xe=[`cdnjs.cloudflare.com`,`cdn.jsdelivr.net`,`unpkg.com`,`esm.sh`,`fonts.googleapis.com`,`fonts.gstatic.com`],T=new Set,E=new Map,D=null;function Se(){if(D)return;let e=document.getElementById(`chatMessages`);e&&(D=new MutationObserver(e=>{if(T.size)for(let t of e)for(let e of t.removedNodes)e instanceof HTMLIFrameElement&&e.contentWindow&&(T.delete(e.contentWindow),E.delete(e.contentWindow)),e instanceof HTMLElement&&e.querySelectorAll(`iframe`).forEach(e=>{e.contentWindow&&(T.delete(e.contentWindow),E.delete(e.contentWindow))})}),D.observe(e,{childList:!0,subtree:!0}))}function Ce(e){if(e.includes(`"importmap"`)||e.includes(`'importmap'`))return``;let t={},n=e.match(/(?:cdn\.jsdelivr\.net\/npm|unpkg\.com)\/three@([\d.]+)/);if(n){let r=n[1],i=e.includes(`unpkg.com/three@`)?`unpkg.com`:`cdn.jsdelivr.net/npm`;t.three=`https://${i}/three@${r}/${i===`unpkg.com`?`build/three.module.js`:`build/three.module.min.js`}`,t[`three/addons/`]=`https://${i}/three@${r}/examples/jsm/`}return Object.keys(t).length===0?``:`<script type="importmap">${JSON.stringify({imports:t})}<\/script>`}function we(e){let t=`'none'`;(e.includes(`cdn.jsdelivr.net/npm/us-atlas`)||e.includes(`cdn.jsdelivr.net/npm/world-atlas`)||e.includes(`cdn.jsdelivr.net/npm/datamaps`))&&(t=`https://cdn.jsdelivr.net`);let n=/Tone\.min\.js|tone@/.test(e)?`worker-src blob:;`:``,r=xe.map(e=>`https://${e}`),i=r.join(` `),a=[`data:`,`blob:`,...r],o=[`'unsafe-inline'`,`https://fonts.googleapis.com`];/L\.(map|tileLayer|marker|geoJSON|polyline|polygon|circle)\(|leaflet[\w.@/-]*\.(js|css)|tile\.openstreetmap\.org/.test(e)&&(a.push(`https://a.tile.openstreetmap.org`,`https://b.tile.openstreetmap.org`,`https://c.tile.openstreetmap.org`),o.push(`https://cdnjs.cloudflare.com`,`https://cdn.jsdelivr.net`));let s=a.join(` `);return`<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline' ${i}; style-src ${o.join(` `)}; img-src ${s}; font-src https://fonts.gstatic.com; connect-src ${t}; ${n} base-uri 'none';">`}function Te(){let e=!document.documentElement.hasAttribute(`data-theme`)||document.documentElement.getAttribute(`data-theme`)===`dark`,t=getComputedStyle(document.documentElement);return{isDark:e,tokens:{"--bg":t.getPropertyValue(`--bg`).trim(),"--surface":t.getPropertyValue(`--surface`).trim(),"--border":t.getPropertyValue(`--border`).trim(),"--text":t.getPropertyValue(`--text`).trim(),"--text-dim":t.getPropertyValue(`--text-dim`).trim(),"--accent":t.getPropertyValue(`--accent`).trim(),"--font-ui":t.getPropertyValue(`--font-ui`).trim(),"--font-mono":t.getPropertyValue(`--font-mono`).trim(),"--radius-sm":t.getPropertyValue(`--radius-sm`).trim(),"--radius-md":t.getPropertyValue(`--radius-md`).trim()}}}function Ee(e){return`
|
|
3
3
|
<script>
|
|
4
4
|
(function() {
|
|
5
5
|
var __nonce = '${e}';
|
|
@@ -128,4 +128,4 @@ import{t as e}from"./state-O6NVkWcL.js";import{t}from"./api-DygAf_G_.js";import{
|
|
|
128
128
|
<div class="process-details">
|
|
129
129
|
<div class="process-steps-inner"></div>
|
|
130
130
|
</div>
|
|
131
|
-
</div>`}function Fe(e){let t=e.closest(`.process-step`),n=t?.querySelector(`.process-step-details`),r=e.querySelector(`.process-step-chevron`);if(!t||!n)return;let i=n.classList.contains(`collapsed`);n.classList.toggle(`collapsed`,!i),t.classList.toggle(`expanded`,i),e.setAttribute(`aria-expanded`,i?`true`:`false`),r&&(r.innerHTML=i?u.chevronDown:u.chevronRight)}function Ie(e){e.dataset.processBlockBound!==`1`&&(e.addEventListener(`click`,e=>{let t=e.target;if(!t)return;let n=t.closest(`.process-step-toggle`);if(n){Fe(n);return}let r=t.closest(`.process-summary`);if(r){let e=r.closest(`.process-block`);if(!e)return;let t=e.classList.contains(`collapsed`);e.classList.toggle(`collapsed`,!t),r.setAttribute(`aria-expanded`,t?`true`:`false`);let n=r.querySelector(`.process-chevron`);n&&(n.innerHTML=t?u.chevronDown:u.chevronRight)}}),e.dataset.processBlockBound=`1`)}function L(e,t=!0){let n=Pe(P(e),t),r=document.createElement(`div`);r.innerHTML=n;let i=r.querySelector(`.process-steps-inner`);i&&(i.innerHTML=e.map(I).join(``));let a=r.querySelector(`.process-dot`);if(a){let n=e.some(e=>e.status===`running`);a.classList.toggle(`running`,n&&!t),a.classList.toggle(`done`,!n||t)}return r.innerHTML}function R(e){let t=e.element.querySelector(`.process-summary-text`);t&&(t.innerHTML=P(e.steps));let n=e.steps.some(e=>e.status===`running`),r=e.element.querySelector(`.process-dot`);r&&(r.classList.toggle(`running`,n&&!e.collapsed),r.classList.toggle(`done`,!n||e.collapsed));let i=e.steps.length>0?Math.round((Date.now()-e.steps[0].startTime)/1e3):0,a=e.element.querySelector(`.process-duration`);a&&(a.textContent=i>0?`${i}s`:``)}function z(e){let t=document.createElement(`div`);t.innerHTML=Pe(``,!1);let n=t.firstElementChild,r=e.querySelector(`.msg-content`);return r?r.before(n):e.appendChild(n),{element:n,steps:[],collapsed:!1}}function B(e,t){e.steps.push(t);let n=e.element.querySelector(`.process-steps-inner`);n&&n.insertAdjacentHTML(`beforeend`,I(t)),R(e)}function V(e,t,n){let r=e.steps.findIndex(e=>e.id===t);if(r===-1)return;e.steps[r]=n;let i=e.element.querySelector(`[data-step-id="${t}"]`);if(i){let e=document.createElement(`div`);e.innerHTML=I(n);let t=e.firstElementChild;t&&i.replaceWith(t)}R(e)}function Le(e,t,n){let r=e.steps.find(e=>e.id===t);if(!r)return;r.status=n;let i=e.element.querySelector(`[data-step-id="${t}"]`);if(i){let e=i.querySelector(`.process-step-dot`);e&&(e.classList.remove(`running`,`done`,`error`),e.classList.add(n))}R(e)}function H(e){e.collapsed=!0,e.element.classList.add(`collapsed`);let t=e.element.querySelector(`.process-summary`);t&&t.setAttribute(`aria-expanded`,`false`);let n=e.element.querySelector(`.process-chevron`);n&&(n.innerHTML=u.chevronRight);for(let t of e.steps)t.status===`running`&&(t.status=`done`);e.element.querySelectorAll(`.process-step-dot.running`).forEach(e=>{e.classList.remove(`running`),e.classList.add(`done`)}),R(e)}function U(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function W(e){return u.shark}function G(e){return e.map(e=>({id:crypto.randomUUID(),icon:e.icon?r(e.icon):u.tool,label:e.label||e.name||`tool`,type:e.toolType||`tool`,detail:e.detail||``,stepRef:e.stepRef||``,status:e.status||`done`,startTime:Date.now()}))}function Re(t){let n=document.getElementById(`statusBadge`),r=document.getElementById(`btnSend`);e.agentBusy=t===`running`,document.getElementById(`typingIndicator`)?.classList.toggle(`active`,e.agentBusy),t===`running`?(n&&(n.className=`status-badge status-running`,n.textContent=`running`),r&&(r.innerHTML=u.stop,r.title=i(`btn.stop`),r.classList.add(`stop-mode`)),Be()):(n&&(n.className=`status-badge status-idle`,n.textContent=`idle`),r&&(r.innerHTML=u.send,r.title=`Send`,r.classList.remove(`stop-mode`)),K(),ze(0))}function ze(e){let t=document.getElementById(`queueBadge`);if(!t){t=document.createElement(`span`),t.id=`queueBadge`,t.className=`queue-badge`;let e=document.getElementById(`btnSend`);e?.parentElement&&(e.parentElement.style.position=`relative`),e&&(e.style.position=`relative`,e.appendChild(t))}t.textContent=e>0?String(e):``,t.style.display=e>0?`flex`:`none`}function Be(){let e=document.getElementById(`chatMessages`);if(!e||e.querySelector(`.skeleton-msg`))return;q();let t=document.createElement(`div`);t.className=`skeleton-msg`,t.innerHTML=`<div class="skeleton-line"></div><div class="skeleton-line"></div><div class="skeleton-line"></div>`,e.appendChild(t),Q()}function K(){document.querySelectorAll(`.skeleton-msg`).forEach(e=>e.remove())}function q(){document.getElementById(`emptyState`)?.classList.remove(`visible`)}function J(){let e=document.getElementById(`chatMessages`);e&&e.children.length===0&&document.getElementById(`emptyState`)?.classList.add(`visible`)}function Ve(e,t,n){let r=document.getElementById(`chatMessages`);if(!r)return;let i=C();q();let a=document.createElement(`div`);a.className=`msg msg-system`+(n?` msg-type-${n}`:``)+(t?` `+t:``),a.innerHTML=e,i.active?i.appendLiveItem(a):r.appendChild(a),Q()}function He(){N(),e.currentAgentDiv=null,e.currentProcessBlock=null}function Ue(t){if(K(),(!e.currentAgentDiv||!e.currentAgentDiv.isConnected)&&(e.currentAgentDiv=Z(`agent`,``),e.currentProcessBlock=null),!e.currentProcessBlock){let t=e.currentAgentDiv.querySelector(`.agent-body`);t&&(e.currentProcessBlock=z(t))}if(e.currentProcessBlock){let n=t.status&&t.status!==`running`?t.status:o(t.icon);if(n===`done`||n===`error`){let i=t.stepRef,a=i?[...e.currentProcessBlock.steps].reverse().find(e=>e.status===`running`&&e.stepRef===i):[...e.currentProcessBlock.steps].reverse().find(e=>e.status===`running`&&e.label===t.label);if(a){t.detail&&!a.detail?(t.icon=r(t.icon),V(e.currentProcessBlock,a.id,{...t,id:a.id})):Le(e.currentProcessBlock,a.id,n),Q();return}let o=[...e.currentProcessBlock.steps].reverse().find(e=>e.status===`running`);if(o){t.detail&&!o.detail?(t.icon=r(t.icon),V(e.currentProcessBlock,o.id,{...t,id:o.id})):Le(e.currentProcessBlock,o.id,n),Q();return}}if(t.detail){let n=[...e.currentProcessBlock.steps].reverse().find(e=>e.status===`running`&&e.label===t.label&&e.type===t.type&&!e.detail);if(n){V(e.currentProcessBlock,n.id,t),Q();return}}t.icon=r(t.icon),B(e.currentProcessBlock,t)}Q()}var Y=null;function We(t){if(!t)return;K(),(!e.currentAgentDiv||!e.currentAgentDiv.isConnected)&&(e.currentAgentDiv=Z(`agent`,``),Y=null);let n=e.currentAgentDiv?.querySelector(`.msg-content`);n&&(Y||=fe(n),pe(Y,t)),Q()}var X=0;function Ge(t,n){let r=Date.now();if(!e.currentAgentDiv&&r-X<500)return;N(),K();let i=!!e.currentProcessBlock;e.currentProcessBlock&&=(H(e.currentProcessBlock),null);let o=n&&n.length>0;if(t||o){(!e.currentAgentDiv||!e.currentAgentDiv.isConnected)&&(e.currentAgentDiv=Z(`agent`,``));let r=e.currentAgentDiv?.querySelector(`.msg-content`),s=Y?me(Y,!0):``,l=t||s;Y=null;let u=o&&!i?L(G(n),!0):``;r&&(r.innerHTML=u+a(l)),r&&r.setAttribute(`data-raw`,c(l)),r&&k(r);let d=C();d.active&&e.currentAgentDiv&&e.currentAgentDiv.isConnected&&(d.appendLiveItem(e.currentAgentDiv),e.currentAgentDiv.remove()),l&&b({role:`assistant`,content:l,tool_log:n?JSON.stringify(n):null,timestamp:Date.now()}).catch(()=>{})}Y=null,e.currentAgentDiv=null,X=Date.now(),Re(`idle`),$()}function Z(e,t,n){let r=document.getElementById(`chatMessages`),o=C();q(),K();let u=a(t),d=s(e===`user`?i(`msg.you`):m()),f=document.createElement(`div`);e===`agent`?(f.className=`msg msg-agent`,f.innerHTML=`<div class="agent-icon" aria-hidden="true">${W(n)}</div><div class="agent-body"><div class="msg-content">${u}</div><button class="msg-copy" title="Copy" aria-label="Copy message"></button></div>`):(f.className=`msg msg-${e}`,f.innerHTML=`<div class="msg-label">${d}</div><div class="msg-content">${u}</div><button class="msg-copy" title="Copy" aria-label="Copy message"></button>`);let p=f.querySelector(`.msg-content`);p&&p.setAttribute(`data-raw`,c(t));let h=e===`agent`&&!t;return o.active&&!h?o.appendLiveItem(f):(r?.appendChild(f),k(f),!o.active&&!h&&r&&r.querySelectorAll(`.msg`).length>=80&&(r.querySelectorAll(`.msg`).forEach(e=>{o.addItem(crypto.randomUUID(),e.outerHTML)}),o.onPostRender=e=>{k(e),l(e)})),Q(),f}var Ke=null;function Q(){Ke||=requestAnimationFrame(()=>{Ke=null;let e=document.getElementById(`chatMessages`);e&&(e.scrollTop=e.scrollHeight)})}function qe(e,t){document.querySelectorAll(`.tab-btn`).forEach(e=>{e.classList.remove(`active`),e.setAttribute(`aria-selected`,`false`)}),document.querySelectorAll(`.tab-content`).forEach(e=>e.classList.remove(`active`)),document.getElementById({agents:`tabAgents`,settings:`tabSettings`,skills:`tabSkills`}[e])?.classList.add(`active`),t&&(t.classList.add(`active`),t.setAttribute(`aria-selected`,`true`)),e===`settings`&&n(()=>import(`./settings-BQXndJHI.js`).then(e=>e.loadSettings()),__vite__mapDeps([0])),e===`agents`&&n(()=>import(`./employees-C8NcsoIa.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0])),e===`skills`&&n(()=>import(`./skills-BaSoozYo.js`).then(e=>e.loadSkills()),__vite__mapDeps([0]))}function Je(){document.getElementById(`tabSettings`)?.classList.contains(`active`)?n(()=>import(`./settings-BQXndJHI.js`).then(e=>e.savePerCli()),__vite__mapDeps([0])):n(()=>import(`./settings-BQXndJHI.js`).then(e=>e.updateSettings()),__vite__mapDeps([0]))}async function $(){let e=await t(`/api/messages`);if(!e)return;let n=document.getElementById(`statMsgs`);n&&(n.textContent=i(`stat.messages`,{count:e.length}))}async function Ye(){let e=C(),n=document.getElementById(`chatMessages`);try{let e=await t(`/api/settings`);e?.workingDir&&ie(e.workingDir)}catch{}let r=await t(`/api/messages`);if(r!==null){if(e.clear(),n&&(n.innerHTML=``),r.length>=80){for(let t of r){let n=t.role===`assistant`?`agent`:t.role,r=c(t.content),a=s(n===`user`?i(`msg.you`):m()),o=t.role===`assistant`?U(t.tool_log):[],l=o.length>0?L(G(o),!0):``,u=`<div class="skeleton-line"></div><div class="skeleton-line"></div>`,d=n===`agent`?`<div class="msg msg-agent"><div class="agent-icon" aria-hidden="true">${W(t.cli)}</div><div class="agent-body">${l}<div class="msg-content lazy-pending" data-raw="${s(r)}">${u}</div><button class="msg-copy" title="Copy" aria-label="Copy message"></button></div></div>`:`<div class="msg msg-${n}"><div class="msg-label">${a}</div><div class="msg-content lazy-pending" data-raw="${s(r)}">${u}</div><button class="msg-copy" title="Copy" aria-label="Copy message"></button></div>`;e.addItem(crypto.randomUUID(),d)}e.onLazyRender=t=>{for(let n of t){if(!n.classList.contains(`lazy-pending`))continue;let t=n.getAttribute(`data-raw`)||``;n.innerHTML=t?a(t):``,n.classList.remove(`lazy-pending`),k(n);let r=n.closest(`[data-vs-idx]`);if(r){let t=Number(r.dataset.vsIdx);e.updateItemHtml(t,r.outerHTML)}}},e.onPostRender=e=>{k(e),l(e)},e.scrollToBottom()}else r.forEach(e=>{let t=Z(e.role===`assistant`?`agent`:e.role,e.content,e.cli);if(e.role===`assistant`){let n=U(e.tool_log);if(n.length>0){let e=t.querySelector(`.agent-body`);if(e){let t=z(e);for(let e of G(n))B(t,e);H(t)}}}});ae(r.map(e=>({role:e.role,content:e.content,cli:e.cli??null,tool_log:e.tool_log??null,timestamp:Date.now()}))).catch(()=>{}),J();return}if(n&&n.children.length>0){J();return}let o=await oe();if(o.length>0){if(o.length>=80){for(let t of o){let n=t.role===`assistant`?`agent`:t.role,r=c(t.content),a=s(n===`user`?i(`msg.you`):m()),o=t.role===`assistant`&&t.tool_log?U(t.tool_log):[],l=o.length>0?L(G(o),!0):``,u=`<div class="skeleton-line"></div><div class="skeleton-line"></div>`,d=n===`agent`?`<div class="msg msg-agent"><div class="agent-icon" aria-hidden="true">${W(t.cli)}</div><div class="agent-body">${l}<div class="msg-content lazy-pending" data-raw="${s(r)}">${u}</div><button class="msg-copy" title="Copy" aria-label="Copy message"></button></div></div>`:`<div class="msg msg-${n}"><div class="msg-label">${a}</div><div class="msg-content lazy-pending" data-raw="${s(r)}">${u}</div><button class="msg-copy" title="Copy" aria-label="Copy message"></button></div>`;e.addItem(crypto.randomUUID(),d)}e.onLazyRender=t=>{for(let n of t){if(!n.classList.contains(`lazy-pending`))continue;let t=n.getAttribute(`data-raw`)||``;n.innerHTML=t?a(t):``,n.classList.remove(`lazy-pending`),k(n);let r=n.closest(`[data-vs-idx]`);if(r){let t=Number(r.dataset.vsIdx);e.updateItemHtml(t,r.outerHTML)}}},e.onPostRender=e=>{k(e),l(e)},e.scrollToBottom()}else o.forEach(e=>{let t=Z(e.role===`assistant`?`agent`:e.role,e.content,e.cli);if(e.role===`assistant`&&e.tool_log){let n=U(e.tool_log);if(n.length>0){let e=t.querySelector(`.agent-body`);if(e){let t=z(e);for(let e of G(n))B(t,e);H(t)}}}});Ve(`${u.warning} 오프라인 모드 — 캐시된 메시지 표시 중`)}J()}function Xe(){let e=document.getElementById(`chatMessages`);e&&(Ie(e),Me(e),e.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`.tool-group-summary`);if(n){let e=n.closest(`.tool-group`),t=n.nextElementSibling;if(e&&t){let r=!e.classList.contains(`expanded`);e.classList.toggle(`expanded`),t.classList.toggle(`collapsed`),n.setAttribute(`aria-expanded`,r?`true`:`false`)}return}let r=t.closest(`.msg-copy`);if(!r)return;let i=r.closest(`.msg`)?.querySelector(`.msg-content`);if(!i)return;let a=i.getAttribute(`data-raw`)||i.innerText||i.textContent||``;navigator.clipboard.writeText(a).then(()=>{r.classList.add(`copied`),r.innerHTML=u.checkSimple,setTimeout(()=>{r.classList.remove(`copied`),r.textContent=``},600)}).catch(()=>{})}))}export{se as _,Ge as a,Ye as c,Re as d,Ue as f,C as g,je as h,He as i,$ as l,ze as m,Ve as n,Je as o,qe as p,We as r,Xe as s,Z as t,Q as u,b as v,ee as y};
|
|
131
|
+
</div>`}function Fe(e){let t=e.closest(`.process-step`),n=t?.querySelector(`.process-step-details`),r=e.querySelector(`.process-step-chevron`);if(!t||!n)return;let i=n.classList.contains(`collapsed`);n.classList.toggle(`collapsed`,!i),t.classList.toggle(`expanded`,i),e.setAttribute(`aria-expanded`,i?`true`:`false`),r&&(r.innerHTML=i?u.chevronDown:u.chevronRight)}function Ie(e){e.dataset.processBlockBound!==`1`&&(e.addEventListener(`click`,e=>{let t=e.target;if(!t)return;let n=t.closest(`.process-step-toggle`);if(n){Fe(n);return}let r=t.closest(`.process-summary`);if(r){let e=r.closest(`.process-block`);if(!e)return;let t=e.classList.contains(`collapsed`);e.classList.toggle(`collapsed`,!t),r.setAttribute(`aria-expanded`,t?`true`:`false`);let n=r.querySelector(`.process-chevron`);n&&(n.innerHTML=t?u.chevronDown:u.chevronRight)}}),e.dataset.processBlockBound=`1`)}function L(e,t=!0){let n=Pe(P(e),t),r=document.createElement(`div`);r.innerHTML=n;let i=r.querySelector(`.process-steps-inner`);i&&(i.innerHTML=e.map(I).join(``));let a=r.querySelector(`.process-dot`);if(a){let n=e.some(e=>e.status===`running`);a.classList.toggle(`running`,n&&!t),a.classList.toggle(`done`,!n||t)}return r.innerHTML}function R(e){let t=e.element.querySelector(`.process-summary-text`);t&&(t.innerHTML=P(e.steps));let n=e.steps.some(e=>e.status===`running`),r=e.element.querySelector(`.process-dot`);r&&(r.classList.toggle(`running`,n&&!e.collapsed),r.classList.toggle(`done`,!n||e.collapsed));let i=e.steps.length>0?Math.round((Date.now()-e.steps[0].startTime)/1e3):0,a=e.element.querySelector(`.process-duration`);a&&(a.textContent=i>0?`${i}s`:``)}function z(e){let t=document.createElement(`div`);t.innerHTML=Pe(``,!1);let n=t.firstElementChild,r=e.querySelector(`.msg-content`);return r?r.before(n):e.appendChild(n),{element:n,steps:[],collapsed:!1}}function B(e,t){e.steps.push(t);let n=e.element.querySelector(`.process-steps-inner`);n&&n.insertAdjacentHTML(`beforeend`,I(t)),R(e)}function V(e,t,n){let r=e.steps.findIndex(e=>e.id===t);if(r===-1)return;e.steps[r]=n;let i=e.element.querySelector(`[data-step-id="${t}"]`);if(i){let e=document.createElement(`div`);e.innerHTML=I(n);let t=e.firstElementChild;t&&i.replaceWith(t)}R(e)}function Le(e,t,n){let r=e.steps.find(e=>e.id===t);if(!r)return;r.status=n;let i=e.element.querySelector(`[data-step-id="${t}"]`);if(i){let e=i.querySelector(`.process-step-dot`);e&&(e.classList.remove(`running`,`done`,`error`),e.classList.add(n))}R(e)}function H(e){e.collapsed=!0,e.element.classList.add(`collapsed`);let t=e.element.querySelector(`.process-summary`);t&&t.setAttribute(`aria-expanded`,`false`);let n=e.element.querySelector(`.process-chevron`);n&&(n.innerHTML=u.chevronRight);for(let t of e.steps)t.status===`running`&&(t.status=`done`);e.element.querySelectorAll(`.process-step-dot.running`).forEach(e=>{e.classList.remove(`running`),e.classList.add(`done`)}),R(e)}function U(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function W(e){return u.shark}function G(e){return e.map(e=>({id:crypto.randomUUID(),icon:e.icon?r(e.icon):u.tool,label:e.label||e.name||`tool`,type:e.toolType||`tool`,detail:e.detail||``,stepRef:e.stepRef||``,status:e.status||`done`,startTime:Date.now()}))}function Re(t){let n=document.getElementById(`statusBadge`),r=document.getElementById(`btnSend`);e.agentBusy=t===`running`,document.getElementById(`typingIndicator`)?.classList.toggle(`active`,e.agentBusy),t===`running`?(n&&(n.className=`status-badge status-running`,n.textContent=`running`),r&&(r.innerHTML=u.stop,r.title=i(`btn.stop`),r.classList.add(`stop-mode`)),Be()):(n&&(n.className=`status-badge status-idle`,n.textContent=`idle`),r&&(r.innerHTML=u.send,r.title=`Send`,r.classList.remove(`stop-mode`)),K(),ze(0))}function ze(e){let t=document.getElementById(`queueBadge`);if(!t){t=document.createElement(`span`),t.id=`queueBadge`,t.className=`queue-badge`;let e=document.getElementById(`btnSend`);e?.parentElement&&(e.parentElement.style.position=`relative`),e&&(e.style.position=`relative`,e.appendChild(t))}t.textContent=e>0?String(e):``,t.style.display=e>0?`flex`:`none`}function Be(){let e=document.getElementById(`chatMessages`);if(!e||e.querySelector(`.skeleton-msg`))return;q();let t=document.createElement(`div`);t.className=`skeleton-msg`,t.innerHTML=`<div class="skeleton-line"></div><div class="skeleton-line"></div><div class="skeleton-line"></div>`,e.appendChild(t),Q()}function K(){document.querySelectorAll(`.skeleton-msg`).forEach(e=>e.remove())}function q(){document.getElementById(`emptyState`)?.classList.remove(`visible`)}function J(){let e=document.getElementById(`chatMessages`);e&&e.children.length===0&&document.getElementById(`emptyState`)?.classList.add(`visible`)}function Ve(e,t,n){let r=document.getElementById(`chatMessages`);if(!r)return;let i=C();q();let a=document.createElement(`div`);a.className=`msg msg-system`+(n?` msg-type-${n}`:``)+(t?` `+t:``),a.innerHTML=e,i.active?i.appendLiveItem(a):r.appendChild(a),Q()}function He(){N(),e.currentAgentDiv=null,e.currentProcessBlock=null}function Ue(t){if(K(),(!e.currentAgentDiv||!e.currentAgentDiv.isConnected)&&(e.currentAgentDiv=Z(`agent`,``),e.currentProcessBlock=null),!e.currentProcessBlock){let t=e.currentAgentDiv.querySelector(`.agent-body`);t&&(e.currentProcessBlock=z(t))}if(e.currentProcessBlock){let n=t.status&&t.status!==`running`?t.status:o(t.icon);if(n===`done`||n===`error`){let i=t.stepRef,a=i?[...e.currentProcessBlock.steps].reverse().find(e=>e.status===`running`&&e.stepRef===i):[...e.currentProcessBlock.steps].reverse().find(e=>e.status===`running`&&e.label===t.label);if(a){t.detail&&!a.detail?(t.icon=r(t.icon),V(e.currentProcessBlock,a.id,{...t,id:a.id})):Le(e.currentProcessBlock,a.id,n),Q();return}let o=[...e.currentProcessBlock.steps].reverse().find(e=>e.status===`running`);if(o){t.detail&&!o.detail?(t.icon=r(t.icon),V(e.currentProcessBlock,o.id,{...t,id:o.id})):Le(e.currentProcessBlock,o.id,n),Q();return}}if(t.detail){let n=[...e.currentProcessBlock.steps].reverse().find(e=>e.status===`running`&&e.label===t.label&&e.type===t.type&&!e.detail);if(n){V(e.currentProcessBlock,n.id,t),Q();return}}t.icon=r(t.icon),B(e.currentProcessBlock,t)}Q()}var Y=null;function We(t){if(!t)return;K(),(!e.currentAgentDiv||!e.currentAgentDiv.isConnected)&&(e.currentAgentDiv=Z(`agent`,``),Y=null);let n=e.currentAgentDiv?.querySelector(`.msg-content`);n&&(Y||=fe(n),pe(Y,t)),Q()}var X=0;function Ge(t,n){let r=Date.now();if(!e.currentAgentDiv&&r-X<500)return;N(),K();let i=!!e.currentProcessBlock;e.currentProcessBlock&&=(H(e.currentProcessBlock),null);let o=n&&n.length>0;if(t||o){(!e.currentAgentDiv||!e.currentAgentDiv.isConnected)&&(e.currentAgentDiv=Z(`agent`,``));let r=e.currentAgentDiv?.querySelector(`.msg-content`),s=Y?me(Y,!0):``,l=t||s;Y=null;let u=o&&!i?L(G(n),!0):``;r&&(r.innerHTML=u+a(l)),r&&r.setAttribute(`data-raw`,c(l)),r&&k(r);let d=C();d.active&&e.currentAgentDiv&&e.currentAgentDiv.isConnected&&(d.appendLiveItem(e.currentAgentDiv),e.currentAgentDiv.remove()),l&&b({role:`assistant`,content:l,tool_log:n?JSON.stringify(n):null,timestamp:Date.now()}).catch(()=>{})}Y=null,e.currentAgentDiv=null,X=Date.now(),Re(`idle`),$()}function Z(e,t,n){let r=document.getElementById(`chatMessages`),o=C();q(),K();let u=a(t),d=s(e===`user`?i(`msg.you`):m()),f=document.createElement(`div`);e===`agent`?(f.className=`msg msg-agent`,f.innerHTML=`<div class="agent-icon" aria-hidden="true">${W(n)}</div><div class="agent-body"><div class="msg-content">${u}</div><button class="msg-copy" title="Copy" aria-label="Copy message"></button></div>`):(f.className=`msg msg-${e}`,f.innerHTML=`<div class="msg-label">${d}</div><div class="msg-content">${u}</div><button class="msg-copy" title="Copy" aria-label="Copy message"></button>`);let p=f.querySelector(`.msg-content`);p&&p.setAttribute(`data-raw`,c(t));let h=e===`agent`&&!t;return o.active&&!h?o.appendLiveItem(f):(r?.appendChild(f),k(f),!o.active&&!h&&r&&r.querySelectorAll(`.msg`).length>=80&&(r.querySelectorAll(`.msg`).forEach(e=>{o.addItem(crypto.randomUUID(),e.outerHTML)}),o.onPostRender=e=>{k(e),l(e)})),Q(),f}var Ke=null;function Q(){Ke||=requestAnimationFrame(()=>{Ke=null;let e=document.getElementById(`chatMessages`);e&&(e.scrollTop=e.scrollHeight)})}function qe(e,t){document.querySelectorAll(`.tab-btn`).forEach(e=>{e.classList.remove(`active`),e.setAttribute(`aria-selected`,`false`)}),document.querySelectorAll(`.tab-content`).forEach(e=>e.classList.remove(`active`)),document.getElementById({agents:`tabAgents`,settings:`tabSettings`,skills:`tabSkills`}[e])?.classList.add(`active`),t&&(t.classList.add(`active`),t.setAttribute(`aria-selected`,`true`)),e===`settings`&&n(()=>import(`./settings-Jzr8xYot.js`).then(e=>e.loadSettings()),__vite__mapDeps([0])),e===`agents`&&n(()=>import(`./employees-km3MrgRX.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0])),e===`skills`&&n(()=>import(`./skills-DGAnOiRN.js`).then(e=>e.loadSkills()),__vite__mapDeps([0]))}function Je(){document.getElementById(`tabSettings`)?.classList.contains(`active`)?n(()=>import(`./settings-Jzr8xYot.js`).then(e=>e.savePerCli()),__vite__mapDeps([0])):n(()=>import(`./settings-Jzr8xYot.js`).then(e=>e.updateSettings()),__vite__mapDeps([0]))}async function $(){let e=await t(`/api/messages`);if(!e)return;let n=document.getElementById(`statMsgs`);n&&(n.textContent=i(`stat.messages`,{count:e.length}))}async function Ye(){let e=C(),n=document.getElementById(`chatMessages`);try{let e=await t(`/api/settings`);e?.workingDir&&ie(e.workingDir)}catch{}let r=await t(`/api/messages`);if(r!==null){if(e.clear(),n&&(n.innerHTML=``),r.length>=80){for(let t of r){let n=t.role===`assistant`?`agent`:t.role,r=c(t.content),a=s(n===`user`?i(`msg.you`):m()),o=t.role===`assistant`?U(t.tool_log):[],l=o.length>0?L(G(o),!0):``,u=`<div class="skeleton-line"></div><div class="skeleton-line"></div>`,d=n===`agent`?`<div class="msg msg-agent"><div class="agent-icon" aria-hidden="true">${W(t.cli)}</div><div class="agent-body">${l}<div class="msg-content lazy-pending" data-raw="${s(r)}">${u}</div><button class="msg-copy" title="Copy" aria-label="Copy message"></button></div></div>`:`<div class="msg msg-${n}"><div class="msg-label">${a}</div><div class="msg-content lazy-pending" data-raw="${s(r)}">${u}</div><button class="msg-copy" title="Copy" aria-label="Copy message"></button></div>`;e.addItem(crypto.randomUUID(),d)}e.onLazyRender=t=>{for(let n of t){if(!n.classList.contains(`lazy-pending`))continue;let t=n.getAttribute(`data-raw`)||``;n.innerHTML=t?a(t):``,n.classList.remove(`lazy-pending`),k(n);let r=n.closest(`[data-vs-idx]`);if(r){let t=Number(r.dataset.vsIdx);e.updateItemHtml(t,r.outerHTML)}}},e.onPostRender=e=>{k(e),l(e)},e.scrollToBottom()}else r.forEach(e=>{let t=Z(e.role===`assistant`?`agent`:e.role,e.content,e.cli);if(e.role===`assistant`){let n=U(e.tool_log);if(n.length>0){let e=t.querySelector(`.agent-body`);if(e){let t=z(e);for(let e of G(n))B(t,e);H(t)}}}});ae(r.map(e=>({role:e.role,content:e.content,cli:e.cli??null,tool_log:e.tool_log??null,timestamp:Date.now()}))).catch(()=>{}),J();return}if(n&&n.children.length>0){J();return}let o=await oe();if(o.length>0){if(o.length>=80){for(let t of o){let n=t.role===`assistant`?`agent`:t.role,r=c(t.content),a=s(n===`user`?i(`msg.you`):m()),o=t.role===`assistant`&&t.tool_log?U(t.tool_log):[],l=o.length>0?L(G(o),!0):``,u=`<div class="skeleton-line"></div><div class="skeleton-line"></div>`,d=n===`agent`?`<div class="msg msg-agent"><div class="agent-icon" aria-hidden="true">${W(t.cli)}</div><div class="agent-body">${l}<div class="msg-content lazy-pending" data-raw="${s(r)}">${u}</div><button class="msg-copy" title="Copy" aria-label="Copy message"></button></div></div>`:`<div class="msg msg-${n}"><div class="msg-label">${a}</div><div class="msg-content lazy-pending" data-raw="${s(r)}">${u}</div><button class="msg-copy" title="Copy" aria-label="Copy message"></button></div>`;e.addItem(crypto.randomUUID(),d)}e.onLazyRender=t=>{for(let n of t){if(!n.classList.contains(`lazy-pending`))continue;let t=n.getAttribute(`data-raw`)||``;n.innerHTML=t?a(t):``,n.classList.remove(`lazy-pending`),k(n);let r=n.closest(`[data-vs-idx]`);if(r){let t=Number(r.dataset.vsIdx);e.updateItemHtml(t,r.outerHTML)}}},e.onPostRender=e=>{k(e),l(e)},e.scrollToBottom()}else o.forEach(e=>{let t=Z(e.role===`assistant`?`agent`:e.role,e.content,e.cli);if(e.role===`assistant`&&e.tool_log){let n=U(e.tool_log);if(n.length>0){let e=t.querySelector(`.agent-body`);if(e){let t=z(e);for(let e of G(n))B(t,e);H(t)}}}});Ve(`${u.warning} 오프라인 모드 — 캐시된 메시지 표시 중`)}J()}function Xe(){let e=document.getElementById(`chatMessages`);e&&(Ie(e),Me(e),e.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`.tool-group-summary`);if(n){let e=n.closest(`.tool-group`),t=n.nextElementSibling;if(e&&t){let r=!e.classList.contains(`expanded`);e.classList.toggle(`expanded`),t.classList.toggle(`collapsed`),n.setAttribute(`aria-expanded`,r?`true`:`false`)}return}let r=t.closest(`.msg-copy`);if(!r)return;let i=r.closest(`.msg`)?.querySelector(`.msg-content`);if(!i)return;let a=i.getAttribute(`data-raw`)||i.innerText||i.textContent||``;navigator.clipboard.writeText(a).then(()=>{r.classList.add(`copied`),r.innerHTML=u.checkSimple,setTimeout(()=>{r.classList.remove(`copied`),r.textContent=``},600)}).catch(()=>{})}))}export{se as _,Ge as a,Ye as c,Re as d,Ue as f,C as g,je as h,He as i,$ as l,ze as m,Ve as n,Je as o,qe as p,We as r,Xe as s,Z as t,Q as u,b as v,ee as y};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e,d as t,i as n,m as r}from"./ui-C1QJBOEL.js";export{n as cleanupToolActivity,e as loadMessages,t as setStatus,r as updateQueueBadge};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-Bjnw0wQ6.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{t as e}from"./state-O6NVkWcL.js";import{Z as t}from"./vendor-mermaid-DV2i2BfY.js";import{f as n,h as r,n as i,s as a,t as o}from"./render-CCNMcx8O.js";import{a as s,d as c,f as l,g as u,i as d,m as f,n as p,r as m,t as h}from"./ui-C1QJBOEL.js";var g=[`P`,`A`,`B`,`C`],_=null;function v(e,t,n){let r=g.indexOf(n);if(r<0)return;let i=e.getBoundingClientRect(),a=t.offsetWidth||36,o=document.getElementById(`dot-${n}`);if(!o)return;let s=g[r+1],c=s?document.getElementById(`dot-${s}`):null;if(c){let e=o.getBoundingClientRect(),n=c.getBoundingClientRect(),r=(e.right+n.left)/2;t.style.left=r-i.left-a/2+`px`}else{let e=o.getBoundingClientRect();t.style.left=e.left-i.left+e.width/2-a/2+`px`}}var y={},b=``,x=0;function S(e){for(let e of Object.keys(y))delete y[e];for(let t of e)t.state===`running`&&t.phase&&(y[t.agentId]={phase:t.phase,phaseLabel:t.phaseLabel||``})}function C(t,n){let r=new Set([`IDLE`,`P`,`A`,`B`,`C`,`D`]).has(t)?t:`IDLE`;if(e.orcState=r,r===`IDLE`||r===`D`)document.body.removeAttribute(`data-orc-state`),document.body.style.removeProperty(`--orc-glow`);else{document.body.setAttribute(`data-orc-state`,r);let e=`--orc-glow-${r}`,t=getComputedStyle(document.documentElement).getPropertyValue(e).trim();document.body.style.setProperty(`--orc-glow`,t)}document.body.classList.add(`orc-pulse`),setTimeout(()=>document.body.classList.remove(`orc-pulse`),700);let i=document.getElementById(`orcStateBadge`);i&&(i.textContent={IDLE:``,P:`PLAN`,A:`AUDIT`,B:`BUILD`,C:`CHECK`,D:`DONE`}[r],i.style.display=r===`IDLE`?`none`:`inline-block`);let a=document.getElementById(`pabcRoadmap`),o=document.getElementById(`sharkRunner`),s=document.getElementById(`pabcBrand`);if(a&&o){if(!a.dataset.resizeObserved){a.dataset.resizeObserved=`1`,new ResizeObserver(()=>{_&&o.classList.contains(`running`)&&v(a,o,_)}).observe(a);let e=0;window.addEventListener(`resize`,()=>{cancelAnimationFrame(e),e=requestAnimationFrame(()=>{_&&o.classList.contains(`running`)&&v(a,o,_)})})}if(r===`IDLE`)a.classList.remove(`visible`,`shimmer-out`),o.classList.remove(`running`),_=null;else if(r===`D`){g.forEach(e=>{let t=document.getElementById(`dot-${e}`);t&&(t.className=`pabc-dot done`,t.setAttribute(`data-phase`,e))});for(let e=0;e<4;e++){let t=document.getElementById(`pabc-conn-${e}`);t&&(t.className=`pabc-connector done`)}o.classList.remove(`running`),_=null,a.classList.add(`shimmer-out`),setTimeout(()=>a.classList.remove(`visible`,`shimmer-out`),1e3)}else{a.classList.remove(`shimmer-out`),a.classList.add(`visible`),o.classList.add(`running`);let e=g.indexOf(r);g.forEach((t,n)=>{let r=document.getElementById(`dot-${t}`);r&&(r.className=`pabc-dot ${n<e?`done`:n===e?`active`:`future`}`,r.setAttribute(`data-phase`,t))});for(let t=0;t<4;t++){let n=document.getElementById(`pabc-conn-${t}`);n&&(n.className=`pabc-connector ${t<e?`done`:``}`)}_=r,requestAnimationFrame(()=>v(a,o,r))}s&&n&&(s.textContent=n)}}function w(){let g=`ws://${location.host}`;e.ws=new WebSocket(`${g}?lang=${n()}`),e.ws.onmessage=e=>{let n;try{n=JSON.parse(e.data)}catch{console.warn(`[ws] malformed message:`,e.data);return}if(!n||typeof n!=`object`||typeof n.type!=`string`){console.warn(`[ws] invalid message shape:`,n);return}if(n.type===`agent_status`)n.running===void 0?c(n.status||`idle`):c(n.running?`running`:`idle`),n.agentId&&n.phase&&(y[n.agentId]={phase:n.phase,phaseLabel:n.phaseLabel||``},t(()=>import(`./employees-km3MrgRX.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0])));else if(n.type===`queue_update`)f(n.pending||0);else if(n.type===`worklog_created`)p(`${a.clipboard} Worklog: ${i(n.path||``)}`);else if(n.type===`round_start`){let e=n.agentPhases||n.subtasks||[],t=e.map(e=>i(e.agent||e.name||``)).join(`, `);p(r(`ws.roundStart`,{round:n.round||0,count:e.length,names:t}))}else if(n.type===`round_done`)n.action===`complete`?p(r(`ws.roundDone`,{round:n.round||0})):n.action===`next`?p(r(`ws.roundNext`,{round:n.round||0})):p(r(`ws.roundRetry`,{round:n.round||0}));else if(n.type===`agent_tool`){let e=n.toolType===`thinking`?`thinking`:n.toolType===`search`?`search`:`tool`;l({id:`step-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,type:e,icon:n.icon||a.tool,label:n.label||``,detail:n.detail||``,stepRef:n.stepRef||``,status:n.status||`running`,startTime:Date.now()})}else if(n.type===`agent_output`)m(n.text||``);else if(n.type===`agent_retry`)p(r(`ws.retry`,{cli:i(n.cli||``),delay:n.delay||10}),`tool-activity`);else if(n.type===`agent_fallback`)p(r(`ws.fallback`,{from:i(n.from||``),to:i(n.to||``)}),`tool-activity`);else if(n.type===`agent_smoke`)p(`${a.warning} ${i(n.cli||`agent`)}: smoke response detected — auto-continuing`,`tool-activity`);else if(n.type===`agent_done`)s(n.text||``,n.toolLog);else if(n.type===`orchestrate_done`)s(n.text||``);else if(n.type===`clear`){o(),d(),u().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``)}else if(n.type===`session_reset`)p(`${a.refresh} Session reset — history preserved`,`tool-activity`);else if(n.type===`agent_added`||n.type===`agent_updated`||n.type===`agent_deleted`)t(()=>import(`./employees-km3MrgRX.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0]));else if(n.type===`orc_state`){if(n.scope&&b&&n.scope!==b)return;C(typeof n.state==`string`?n.state:`IDLE`,n.title)}else n.type===`new_message`&&(n.source===`telegram`||n.source===`discord`)&&h(n.role===`assistant`?`agent`:n.role||`user`,n.content||``,n.cli)},e.ws.onopen=()=>{console.log(`[ws] connected`);let e=Date.now()-x<3e3;t(()=>import(`./ui-CxS6ErNQ.js`).then(async t=>{t.cleanupToolActivity(),e||(await t.loadMessages(),x=Date.now()),t.setStatus(`idle`)}),__vite__mapDeps([0])),fetch(`/api/orchestrate/snapshot`).then(e=>e.json()).then(e=>{b=String(e.orc.scope||``),C(e.orc.state),S(e.workers),f(e.runtime.queuePending),c(e.runtime.busy?`running`:`idle`),t(()=>import(`./employees-km3MrgRX.js`).then(e=>{typeof e.renderEmployees==`function`&&e.renderEmployees()}),__vite__mapDeps([0]))}).catch(()=>{})},e.ws.onclose=()=>{console.log(`[ws] disconnected, reconnecting in 2s...`),t(()=>import(`./ui-CxS6ErNQ.js`).then(e=>e.cleanupToolActivity()),__vite__mapDeps([0])),c(`idle`),p(`${a.exec} 연결 끊김 — 재연결 중...`,`tool-activity`),setTimeout(w,2e3)}}function T(e){return y[e]||null}export{T as n,w as t};
|
package/public/dist/index.html
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
href="https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@400;500;600;700&family=Outfit:wght@400;500;600;700&display=swap"
|
|
26
26
|
rel="stylesheet">
|
|
27
27
|
<!-- Vite handles module bundling in dev (HMR) and production (build) -->
|
|
28
|
-
<script type="module" crossorigin src="/dist/assets/index-
|
|
28
|
+
<script type="module" crossorigin src="/dist/assets/index-CihhAsFo.js"></script>
|
|
29
29
|
<link rel="stylesheet" crossorigin href="/dist/assets/vendor-render-Bjnw0wQ6.css">
|
|
30
30
|
<link rel="stylesheet" crossorigin href="/dist/assets/index-DbSvUuCm.css">
|
|
31
31
|
</head>
|
package/public/js/render.ts
CHANGED
|
@@ -963,20 +963,30 @@ export function renderMarkdown(text: string, isStreaming = false): string {
|
|
|
963
963
|
// ── Batched post-render scheduler ──
|
|
964
964
|
// Coalesces multiple renderMarkdown() calls into a single post-render pass.
|
|
965
965
|
let postRenderRAF: number | null = null;
|
|
966
|
+
let postRenderTimer: ReturnType<typeof setTimeout> | null = null;
|
|
966
967
|
|
|
967
968
|
function schedulePostRender(): void {
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
969
|
+
// Debounce: coalesce rapid VS render triggers into a single pass
|
|
970
|
+
if (postRenderTimer) clearTimeout(postRenderTimer);
|
|
971
|
+
if (postRenderRAF) { cancelAnimationFrame(postRenderRAF); postRenderRAF = null; }
|
|
972
|
+
postRenderTimer = setTimeout(() => {
|
|
973
|
+
postRenderTimer = null;
|
|
974
|
+
postRenderRAF = requestAnimationFrame(() => {
|
|
975
|
+
postRenderRAF = null;
|
|
976
|
+
renderMermaidBlocks();
|
|
977
|
+
rehighlightAll();
|
|
978
|
+
bindDiagramZoom();
|
|
979
|
+
const msgContainer = document.getElementById('chatMessages');
|
|
980
|
+
if (msgContainer) linkifyFilePaths(msgContainer);
|
|
981
|
+
});
|
|
982
|
+
}, 100);
|
|
977
983
|
}
|
|
978
984
|
|
|
979
985
|
export function cancelPostRender(): void {
|
|
986
|
+
if (postRenderTimer) {
|
|
987
|
+
clearTimeout(postRenderTimer);
|
|
988
|
+
postRenderTimer = null;
|
|
989
|
+
}
|
|
980
990
|
if (postRenderRAF) {
|
|
981
991
|
cancelAnimationFrame(postRenderRAF);
|
|
982
992
|
postRenderRAF = null;
|
|
@@ -102,8 +102,8 @@ export class VirtualScroll {
|
|
|
102
102
|
this._totalHeight += this.items[i].height;
|
|
103
103
|
}
|
|
104
104
|
});
|
|
105
|
-
|
|
106
|
-
this.container.
|
|
105
|
+
// Atomic swap — avoids visible blank frame during activation
|
|
106
|
+
this.container.replaceChildren(this.spacerTop, this.viewport, this.spacerBottom);
|
|
107
107
|
this.container.addEventListener('scroll', this.scrollHandler, { passive: true });
|
|
108
108
|
this.render();
|
|
109
109
|
}
|
|
@@ -152,32 +152,50 @@ export class VirtualScroll {
|
|
|
152
152
|
this.spacerTop.style.height = `${topSpace}px`;
|
|
153
153
|
this.spacerBottom.style.height = `${bottomSpace}px`;
|
|
154
154
|
|
|
155
|
-
|
|
155
|
+
// Build map of currently mounted items by vsIdx
|
|
156
|
+
const mounted = new Map<number, HTMLElement>();
|
|
157
|
+
for (const child of Array.from(this.viewport.children) as HTMLElement[]) {
|
|
158
|
+
const idx = Number(child.dataset.vsIdx);
|
|
159
|
+
if (!isNaN(idx)) mounted.set(idx, child);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Remove items no longer in range
|
|
163
|
+
for (const [idx, el] of mounted) {
|
|
164
|
+
if (idx < first || idx > last) {
|
|
165
|
+
el.remove();
|
|
166
|
+
mounted.delete(idx);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Build ordered list — reuse existing or create new
|
|
171
|
+
const ordered: HTMLElement[] = [];
|
|
156
172
|
for (let i = first; i <= last; i++) {
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
173
|
+
const existing = mounted.get(i);
|
|
174
|
+
if (existing) {
|
|
175
|
+
ordered.push(existing);
|
|
176
|
+
} else {
|
|
177
|
+
const item = this.items[i];
|
|
178
|
+
const div = document.createElement('div');
|
|
179
|
+
div.innerHTML = item.html;
|
|
180
|
+
const el = div.firstElementChild as HTMLElement;
|
|
181
|
+
if (el) {
|
|
182
|
+
el.dataset.vsIdx = String(i);
|
|
183
|
+
ordered.push(el);
|
|
184
|
+
}
|
|
164
185
|
}
|
|
165
186
|
}
|
|
166
|
-
this.viewport.innerHTML = '';
|
|
167
|
-
this.viewport.appendChild(frag);
|
|
168
187
|
|
|
169
|
-
//
|
|
170
|
-
this.viewport.
|
|
171
|
-
|
|
172
|
-
if (
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
this._totalHeight += (newH - oldH);
|
|
188
|
+
// Reorder viewport children to match (minimal DOM moves)
|
|
189
|
+
let nodeRef = this.viewport.firstChild as HTMLElement | null;
|
|
190
|
+
for (const el of ordered) {
|
|
191
|
+
if (el !== nodeRef) {
|
|
192
|
+
this.viewport.insertBefore(el, nodeRef);
|
|
193
|
+
} else {
|
|
194
|
+
nodeRef = nodeRef.nextSibling as HTMLElement | null;
|
|
177
195
|
}
|
|
178
|
-
}
|
|
196
|
+
}
|
|
179
197
|
|
|
180
|
-
// Fire lazy render callback
|
|
198
|
+
// Fire lazy render callback FIRST (replaces skeleton with real content)
|
|
181
199
|
if (this.onLazyRender) {
|
|
182
200
|
const lazyTargets = this.viewport.querySelectorAll<HTMLElement>('.lazy-pending');
|
|
183
201
|
if (lazyTargets.length > 0) {
|
|
@@ -185,10 +203,32 @@ export class VirtualScroll {
|
|
|
185
203
|
}
|
|
186
204
|
}
|
|
187
205
|
|
|
188
|
-
// Fire post-render callback for widget activation
|
|
206
|
+
// Fire post-render callback for widget activation
|
|
189
207
|
if (this.onPostRender) {
|
|
190
208
|
this.onPostRender(this.viewport);
|
|
191
209
|
}
|
|
210
|
+
|
|
211
|
+
// Batch-read heights AFTER lazy render + widget activation
|
|
212
|
+
this.remeasureVisible();
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/** Batch-read heights from visible elements, batch-write to items array.
|
|
216
|
+
* Separated read/write passes = single forced reflow. */
|
|
217
|
+
private remeasureVisible(): void {
|
|
218
|
+
const rects: { idx: number; newH: number }[] = [];
|
|
219
|
+
this.viewport.querySelectorAll('[data-vs-idx]').forEach(el => {
|
|
220
|
+
const idx = Number((el as HTMLElement).dataset.vsIdx);
|
|
221
|
+
if (this.items[idx]) {
|
|
222
|
+
rects.push({ idx, newH: el.getBoundingClientRect().height });
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
for (const { idx, newH } of rects) {
|
|
226
|
+
const oldH = this.items[idx].height;
|
|
227
|
+
if (oldH !== newH) {
|
|
228
|
+
this.items[idx].height = newH;
|
|
229
|
+
this._totalHeight += (newH - oldH);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
192
232
|
}
|
|
193
233
|
|
|
194
234
|
scrollToBottom(): void {
|
package/public/js/ws.ts
CHANGED
|
@@ -72,6 +72,7 @@ interface WsMessage {
|
|
|
72
72
|
const agentPhaseState: Record<string, { phase: string; phaseLabel: string }> = {};
|
|
73
73
|
|
|
74
74
|
let currentOrcScope = '';
|
|
75
|
+
let lastLoadTs = 0;
|
|
75
76
|
|
|
76
77
|
/** Hydrate agent phase cache from snapshot (used after reconnect) */
|
|
77
78
|
export function hydrateAgentPhases(workers: Array<{
|
|
@@ -276,11 +277,14 @@ export function connect(): void {
|
|
|
276
277
|
};
|
|
277
278
|
state.ws.onopen = () => {
|
|
278
279
|
console.log('[ws] connected');
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
import('./ui.js').then(m => {
|
|
280
|
+
const now = Date.now();
|
|
281
|
+
const skipReload = now - lastLoadTs < 3000;
|
|
282
|
+
import('./ui.js').then(async m => {
|
|
282
283
|
m.cleanupToolActivity();
|
|
283
|
-
|
|
284
|
+
if (!skipReload) {
|
|
285
|
+
await m.loadMessages();
|
|
286
|
+
lastLoadTs = Date.now();
|
|
287
|
+
}
|
|
284
288
|
m.setStatus('idle');
|
|
285
289
|
});
|
|
286
290
|
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import{A as e,C as t,D as n,E as r,F as i,I as a,M as o,N as s,O as c,P as l,S as u,T as d,_ as f,b as ee,j as p,k as m,u as te,v as ne,w as h,x as re,y as g}from"./vendor-render-D2YP6GiF.js";import{r as ie}from"./api-DygAf_G_.js";import{Q as _,Z as v}from"./vendor-mermaid-DV2i2BfY.js";import{A as ae,B as oe,C as se,D as ce,E as le,F as ue,G as de,H as fe,I as pe,J as me,K as he,L as ge,M as _e,N as ve,O as ye,P as be,R as xe,S as Se,T as Ce,U as we,V as Te,W as Ee,_ as De,a as Oe,b as ke,c as Ae,d as je,f as Me,g as y,h as b,i as x,j as Ne,k as Pe,l as Fe,m as Ie,n as Le,o as Re,p as ze,q as Be,r as Ve,s as He,t as Ue,u as We,v as Ge,w as Ke,x as qe,y as Je,z as Ye}from"./vendor-icons-BqxEYYco.js";var S=`ko`,C={},w={};async function Xe(){let e=null;try{e=localStorage.getItem(`claw_locale`)}catch{}if(!e){let t=(navigator.language||`ko`).split(/[-_]/)[0].toLowerCase();e=[`en`,`ko`].includes(t)?t:`ko`}w=await T(`ko`),C=e===`ko`?w:await T(e),S=e,D()}async function T(e){try{let{api:t}=await v(async()=>{let{api:e}=await import(`./api-COrKYKcO.js`);return{api:e}},[]);return await t(`/api/i18n/${e}`)||{}}catch{return{}}}function E(e,t={}){let n=C[e]??w[e]??e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{${e}}`,String(r));return n}function D(){document.querySelectorAll(`[data-i18n]`).forEach(e=>{let t=e.getAttribute(`data-i18n`);t&&(e.textContent=E(t))}),document.querySelectorAll(`[data-i18n-placeholder]`).forEach(e=>{let t=e.getAttribute(`data-i18n-placeholder`);t&&(e.placeholder=E(t))}),document.querySelectorAll(`[data-i18n-title]`).forEach(e=>{let t=e.getAttribute(`data-i18n-title`);t&&(e.title=E(t))}),document.querySelectorAll(`[data-i18n-aria]`).forEach(e=>{let t=e.getAttribute(`data-i18n-aria`);t&&e.setAttribute(`aria-label`,E(t))})}async function Ze(e){if(e!==S){C=e===`ko`?w:await T(e),S=e;try{localStorage.setItem(`claw_locale`,e)}catch{}D();try{let{loadEmployees:e}=await v(async()=>{let{loadEmployees:e}=await import(`./employees-C8NcsoIa.js`);return{loadEmployees:e}},[]);e()}catch{}try{let{loadSkills:e}=await v(async()=>{let{loadSkills:e}=await import(`./skills-BaSoozYo.js`);return{loadSkills:e}},[]);e()}catch{}try{let{loadCommands:e}=await v(async()=>{let{loadCommands:e}=await import(`./slash-commands-DwlnxrFi.js`);return{loadCommands:e}},[]);e()}catch{}try{let{loadSettings:e}=await v(async()=>{let{loadSettings:e}=await import(`./settings-BQXndJHI.js`);return{loadSettings:e}},[]);e()}catch{}}}function Qe(){return S}function $e(e,t={}){let n=new URL(e,location.origin);return n.searchParams.has(`locale`)||n.searchParams.set(`locale`,S),fetch(n.toString(),t)}var O=14,et=16;function k(e,t=et){return me(e,{size:t})}var A={check:k(xe),error:k(ge),warning:k(x),skip:k(He),tool:k(Ve),thinking:k(ke),search:k(We),web:k(ae),exec:k(Ue),compacting:k(De),plan:k(Ge),brain:k(Ee),heartPulse:k(ye),lock:k(qe),lockOpen:k(Se),key:k(Ce),settings:k(Ae),file:k(ve),trash:k(Oe),lightbulb:k(Ke),refresh:k(Me),mic:k(Je),clipboard:k(pe),robot:k(de),palette:k(y),link:k(se),salute:k(Pe),shark:`🦈`,paperclip:k(b),save:k(je),gamepad:k(Ne),house:k(le),radio:k(ze),folder:k(_e),pencil:k(Ie),chart:k(we),hourglass:k(ce),stop:k(Re),close:k(Le,O),send:k(Fe),copy:k(ue,O),download:k(be,O),checkSimple:k(fe,O),chevronLeft:k(oe,O),chevronRight:k(Ye,O),chevronDown:k(Te,O),arrowLeft:k(Be,O),arrowRight:k(he,O)},tt={"✅":`check`,"❌":`error`,"🔧":`tool`,"⏭":`skip`,"🧠":`brain`,"💓":`heartPulse`,"🔒":`lock`,"🔓":`lockOpen`,"🔑":`key`,"⚙":`settings`,"⚙️":`settings`,"📄":`file`,"🗑":`trash`,"🗑️":`trash`,"⚠":`warning`,"⚠️":`warning`,"💡":`lightbulb`,"🦈":`shark`,"💭":`thinking`,"🔍":`search`,"🌐":`web`,"⚡":`exec`,"🗜":`compacting`,"🗜️":`compacting`,"📝":`plan`,"📑":`clipboard`,"🤖":`robot`,"📋":`clipboard`,"🔄":`refresh`,"🎨":`palette`,"🎤":`mic`,"🔗":`link`,"🫡":`salute`,"📎":`paperclip`,"💾":`save`,"🎮":`gamepad`,"🏠":`house`,"📡":`radio`,"📂":`folder`,"✏️":`pencil`,"📊":`chart`,"🎙️":`mic`};function nt(e){let t=tt[e];return t?A[t]:e}function rt(e){return e===`✅`?`done`:e===`❌`?`error`:null}function it(e=document.body){let t=e.querySelectorAll(`[data-icon]`);for(let e of t){let t=e.dataset.icon;t&&A[t]&&(e.innerHTML=A[t],e.classList.add(`icon-hydrated`))}}function j(e){let t=[],n=e.replace(/```[\s\S]*?```/g,e=>(t.push(e),`\x00P${t.length-1}\x00`)).replace(/`[^`]+`/g,e=>(t.push(e),`\x00P${t.length-1}\x00`));return n=n.replace(/([\p{P}])\*\*(?=[^\s\p{P}])/gu,(e,t)=>t===`*`?e:t+`**`),n=n.replace(/\x00P(\d+)\x00/g,(e,n)=>t[Number(n)]),n}var M=0;function at(e){let t=new Map;return{text:e.replace(/^ {0,3}(`{3,}|~{3,})[^\n]*\n[\s\S]*?\n {0,3}\1[ \t]*$/gm,e=>{let n=`\x00FENCE-${M++}\x00`;return t.set(n,e),n}),fences:t}}function ot(e,t){for(let[n,r]of t)e=e.replace(n,()=>r);return e}function st(e,t=!1){let n=[],r=``,i=0;for(;i<e.length;){let a=e.indexOf(`<svg`,i);if(a===-1){r+=e.slice(i);break}let o=e[a+4];if(o&&!/[\s\/>]/.test(o)){r+=e.slice(i,a+4),i=a+4;continue}r+=e.slice(i,a);let s=0,c=a,l=!1;for(;c<e.length;){let t=e.indexOf(`<svg`,c+1),o=e.indexOf(`</svg>`,c+(c===a?0:1));if(o===-1)break;if(t!==-1&&t<o){let n=e[t+4];n&&/[\s\/>]/.test(n)&&s++,c=t+4}else if(s===0){let t=o+6,s=e.slice(a,t),c=M++,u=`\n\n<div data-jaw-svg="${c}"></div>\n\n`;n.push({id:c,index:a,length:s.length,svg:s,kind:`complete`,placeholder:u}),r+=u,i=t,l=!0;break}else s--,c=o+6}if(!l){let o=M++;if(t){let t=e.slice(a),s=`\n\n<div data-jaw-svg="${o}" data-jaw-kind="partial"></div>\n\n`;n.push({id:o,index:a,length:t.length,svg:``,kind:`partial`,placeholder:s}),r+=s,i=e.length}else{let t=`\n\n<div data-jaw-svg="${o}" data-jaw-kind="error"></div>\n\n`,s=e.slice(a),c=s.search(/\n\s*\n/),l=c===-1?s.length:c;n.push({id:o,index:a,length:l,svg:``,kind:`error`,placeholder:t}),r+=t,i=a+l}}}return{text:r,blocks:n}}l.registerLanguage(`javascript`,s),l.registerLanguage(`js`,s),l.registerLanguage(`typescript`,o),l.registerLanguage(`ts`,o),l.registerLanguage(`python`,p),l.registerLanguage(`py`,p),l.registerLanguage(`bash`,e),l.registerLanguage(`shell`,m),l.registerLanguage(`sh`,m),l.registerLanguage(`json`,c),l.registerLanguage(`css`,n),l.registerLanguage(`xml`,r),l.registerLanguage(`html`,r),l.registerLanguage(`markdown`,d),l.registerLanguage(`md`,d),l.registerLanguage(`yaml`,h),l.registerLanguage(`yml`,h),l.registerLanguage(`sql`,t),l.registerLanguage(`rust`,u),l.registerLanguage(`rs`,u),l.registerLanguage(`go`,re),l.registerLanguage(`java`,ee),l.registerLanguage(`cpp`,g),l.registerLanguage(`c`,g),l.registerLanguage(`diff`,ne),l.registerLanguage(`plaintext`,f),l.registerLanguage(`text`,f);var N=null,P=Promise.resolve();function ct(){return document.documentElement.getAttribute(`data-theme`)===`light`?{primaryColor:`#e2e8f0`,primaryTextColor:`#1a202c`,primaryBorderColor:`#a0aec0`,lineColor:`#718096`,secondaryColor:`#ebf8ff`,tertiaryColor:`#f7fafc`,background:`transparent`,mainBkg:`#e2e8f0`,nodeBorder:`#a0aec0`,clusterBkg:`#f7fafc`,clusterBorder:`#cbd5e0`,titleColor:`#1a202c`,edgeLabelBackground:`#f7fafc`}:{primaryColor:`#2d3748`,primaryTextColor:`#e2e8f0`,primaryBorderColor:`#4a5568`,lineColor:`#718096`,secondaryColor:`#1a365d`,tertiaryColor:`#1a202c`,background:`transparent`,mainBkg:`#2d3748`,nodeBorder:`#4a5568`,clusterBkg:`#1a202c`,clusterBorder:`#2d3748`,titleColor:`#e2e8f0`,edgeLabelBackground:`#1a202c`}}async function F(){return N||(N=await v(()=>import(`./mermaid.core-C6Yxaqu5.js`),[]),N.default.setParseErrorHandler(()=>{})),N.default}function I(){N.default.initialize({startOnLoad:!1,theme:`base`,themeVariables:ct(),securityLevel:`strict`,suppressErrorRendering:!0})}function lt(e){let t=_.sanitize(e,{USE_PROFILES:{svg:!0,svgFilters:!0},FORBID_TAGS:[`script`,`iframe`,`object`,`embed`,`form`,`input`,`foreignObject`,`animate`,`set`,`animateTransform`,`animateMotion`],FORBID_ATTR:[`onerror`,`onclick`,`onload`,`onmouseover`,`onfocus`,`onblur`,`background`]}),n=document.createElement(`div`);n.innerHTML=t;for(let e of n.querySelectorAll(`style`)){let t=e.textContent||``;t=t.replace(/@import\b[^;]*;?/gi,`/* stripped */`),t=t.replace(/@font-face\s*\{[^}]*\}/gi,`/* stripped */`),t=t.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`),e.textContent=t}return n.innerHTML}function L(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}function R(e){return _.sanitize(e,{USE_PROFILES:{html:!0,svg:!0,svgFilters:!0},FORBID_TAGS:[`script`,`style`,`iframe`,`object`,`embed`,`form`,`input`,`foreignObject`,`animate`,`set`,`animateTransform`,`animateMotion`],FORBID_ATTR:[`onerror`,`onclick`,`onload`,`onmouseover`,`onfocus`,`onblur`,`background`],ADD_TAGS:[`use`],ADD_ATTR:[`aria-hidden`,`xmlns`,`viewBox`,`role`,`aria-label`,`data-jaw-svg`,`data-jaw-kind`]})}var ut=`http://www.w3.org/2000/svg`,dt=new Set([`a`,`area`,`link`]);_.addHook(`afterSanitizeAttributes`,e=>{let t=e.tagName.toLowerCase();if(e.namespaceURI===ut||!dt.has(t)){let t=e.getAttribute(`href`)||``;t&&!t.startsWith(`#`)&&e.removeAttribute(`href`)}let n=e.getAttributeNS(`http://www.w3.org/1999/xlink`,`href`)||e.getAttribute(`xlink:href`)||``;if(n&&!n.startsWith(`#`)&&(e.removeAttributeNS(`http://www.w3.org/1999/xlink`,`href`),e.removeAttribute(`xlink:href`)),t===`image`||t===`feimage`){let t=e.getAttribute(`src`)||``;t&&!t.startsWith(`#`)&&e.removeAttribute(`src`)}let r=[`fill`,`stroke`,`filter`,`mask`,`clip-path`,`marker-start`,`marker-mid`,`marker-end`,`cursor`];if(e.hasAttribute(`style`)){let t=e.style?.cssText||``;if(/url\s*\(/i.test(t)){let n=t.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`);e.style.cssText=n}}for(let t of r)if(e.hasAttribute(t)){let n=e.getAttribute(t)||``;if(/url\s*\(/i.test(n)){let r=n.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`);e.setAttribute(t,r)}}});var ft=/["'](?:subtasks|employee_config|agent_phases|orchestration_plan)["']\s*:/;function z(e){let t=e.replace(/```json\n([\s\S]*?)\n```/g,(e,t)=>ft.test(t)?``:e);return t=t.replace(/\{[^{}]*"subtasks"\s*:\s*\[[\s\S]*?\]\s*\}/g,``).trim(),t}function pt(e){let t=[],n=[],r=e.replace(/```[\s\S]*?```/g,e=>(n.push(e),`\x00C${n.length-1}\x00`)).replace(/`[^`]+`/g,e=>(n.push(e),`\x00C${n.length-1}\x00`));return r=r.replace(/\$\$([\s\S]+?)\$\$/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!0}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\\\[([\s\S]+?)\\\]/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!0}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/(?<!\$)\$(?!\$)([^\n$]+?)\$(?!\$)/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!1}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\\\((.+?)\\\)/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!1}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\x00C(\d+)\x00/g,(e,t)=>n[Number(t)]),{text:r,blocks:t}}function mt(e,t,n=!1){return e.replace(/\x00MATH-(\d+)\x00/g,(e,r)=>{let i=t[Number(r)];if(!i)return`<code title="math placeholder error">[math error]</code>`;if(n)return i.displayMode?`<div class="math-placeholder">${L(i.tex)}</div>`:`<code class="math-placeholder">${L(i.tex)}</code>`;try{return te.renderToString(i.tex,{displayMode:i.displayMode,throwOnError:!1})}catch{return i.displayMode?`<pre><code>${L(i.tex)}</code></pre>`:`<code>${L(i.tex)}</code>`}})}var B=0;async function ht(){let e=document.querySelectorAll(`.mermaid-rendered`);if(!e.length)return;let t=await F();for(let n of e){let e=n.dataset.mermaidCode;if(!e)continue;let r=`mermaid-${++B}`;try{I();let{svg:i}=await t.render(r,e);n.innerHTML=i,H(n)}catch{}}}var V=null;function gt(){V||=new IntersectionObserver(e=>{for(let t of e){if(!t.isIntersecting)continue;let e=t.target;e.classList.contains(`mermaid-pending`)&&(V.unobserve(e),yt(e))}},{rootMargin:`200px`})}function H(e){e.querySelector(`.mermaid-copy-btn`)?.remove(),e.querySelector(`.mermaid-save-btn`)?.remove();let t=document.createElement(`button`);t.className=`mermaid-save-btn`,t.type=`button`,t.ariaLabel=`Save as image`,t.title=`Save`,t.innerHTML=A.download,e.appendChild(t);let n=document.createElement(`button`);n.className=`mermaid-copy-btn`,n.type=`button`,n.ariaLabel=`Copy source`,n.title=`Copy`,n.innerHTML=A.copy,e.appendChild(n)}function _t(e,t,n){e.classList.remove(`mermaid-rendered`),e.innerHTML=`
|
|
2
|
-
<div class="mermaid-error">
|
|
3
|
-
<div class="mermaid-error-title">${A.warning} ${L(E(`mermaid.renderFail`)||`Mermaid render failed`)}</div>
|
|
4
|
-
<div class="mermaid-error-msg">${L(n.slice(0,200))}</div>
|
|
5
|
-
<pre class="mermaid-error-code"><code>${L(t)}</code></pre>
|
|
6
|
-
</div>`}async function vt(e){e.classList.remove(`mermaid-pending`);let t=e.textContent||``;e.dataset.mermaidCode=t;let n=`mermaid-${++B}`;try{let r=await F();I();let{svg:i}=await r.render(n,t);e.innerHTML=lt(i),e.classList.add(`mermaid-rendered`),H(e)}catch(n){_t(e,t,n?.message||n?.str||`Unknown error`)}}function yt(e){P=P.then(()=>vt(e))}async function bt(e){let t=(e||document).querySelectorAll(`.mermaid-pending`);if(t.length){gt();for(let e of t)V.observe(e)}}var U=!1;function xt(){if(U)return!0;let e=new a;return e.code=function({text:e,lang:t}){if(t===`mermaid`)return`<div class="mermaid-container mermaid-pending">${L(e)}</div>`;if(t?.trim().toLowerCase()===`diagram-html`)return`<div class="diagram-widget-pending" data-diagram-html="${btoa(unescape(encodeURIComponent(e)))}"
|
|
7
|
-
role="status" aria-label="Interactive widget loading">
|
|
8
|
-
<div class="diagram-spinner"></div>
|
|
9
|
-
</div>`;let n=L(e);if(t&&l.getLanguage(t))try{n=l.highlight(e,{language:t}).value}catch{}else try{n=l.highlightAuto(e).value}catch{}let r=t?L(t):``,i=E(`code.copy`)||`Copy`;return`<div class="code-block"><div class="code-header"><span class="code-lang">${r}</span><button class="code-copy-btn" type="button" aria-label="${L(i)}">${L(i)}</button></div><pre><code class="hljs${t?` language-${L(t)}`:``}">${n}</code></pre></div>`},i.setOptions({renderer:e,gfm:!0,breaks:!1}),U=!0,!0}function St(e){(e||document).querySelectorAll(`.code-block pre code, .code-block-wrapper pre code`).forEach(e=>{if(e.dataset.highlighted===`yes`)return;let t=[...e.classList].find(e=>e.startsWith(`language-`))?.replace(`language-`,``),n=e.textContent||``;try{t&&l.getLanguage(t)?e.innerHTML=l.highlight(n,{language:t}).value:e.innerHTML=l.highlightAuto(n).value,e.dataset.highlighted=`yes`}catch{}})}var W=/(?:~\/[^\s)`\]"'<>]+|\/(?:Users|home|tmp|var|opt|private)\/[^\s)`\]"'<>]+)/g,Ct=/[.,!?:;]+$/,wt=/^(?:~\/|\/(?:Users|home|tmp|var|opt|private)\/)/;function Tt(e){return wt.test(e)}function G(e,t){t&&t.classList.add(`opening`),ie(`/api/file/open`,`POST`,{path:e}).then(e=>{t?.classList.remove(`opening`),e?.ok===!1?(t?.classList.add(`open-failed`),t&&(t.title=e?.error||`Failed to open`),setTimeout(()=>{t?.classList.remove(`open-failed`),t&&(t.title=``)},2e3)):(t?.classList.add(`opened`),setTimeout(()=>t?.classList.remove(`opened`),1500))}).catch(()=>{t?.classList.remove(`opening`),t?.classList.add(`open-failed`),setTimeout(()=>t?.classList.remove(`open-failed`),2e3)})}function K(e){let t=new Set([`PRE`,`A`,`BUTTON`,`TEXTAREA`,`INPUT`,`SCRIPT`,`STYLE`]),n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(n){let r=n.parentElement;for(;r&&r!==e;){if(t.has(r.tagName)||r.classList.contains(`file-path-link`)||r.tagName===`CODE`&&r.parentElement?.tagName===`PRE`)return NodeFilter.FILTER_REJECT;r=r.parentElement}return NodeFilter.FILTER_ACCEPT}}),r=new Map,i;for(;i=n.nextNode();){let e=i.textContent||``;W.lastIndex=0;let t,n=[];for(;t=W.exec(e);){let e=t[0],r=e.replace(Ct,``);r.length<4||n.push({index:t.index,raw:e,clean:r})}n.length&&r.set(i,n)}for(let[e,t]of r){let n=e.textContent||``,r=e.parentNode;if(!r)continue;let i=document.createDocumentFragment(),a=0;for(let{index:e,raw:r,clean:o}of t){e>a&&i.appendChild(document.createTextNode(n.slice(a,e)));let t=document.createElement(`span`);t.className=`file-path-link`,t.setAttribute(`data-file-path`,o),t.setAttribute(`role`,`button`),t.setAttribute(`tabindex`,`0`),t.textContent=o,i.appendChild(t);let s=r.slice(o.length);s&&i.appendChild(document.createTextNode(s)),a=e+r.length}a<n.length&&i.appendChild(document.createTextNode(n.slice(a))),r.replaceChild(i,e)}}var q=!1;function Et(){q||(q=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`a`),r=n?.getAttribute(`href`)||``;if(n&&Tt(r)){e.preventDefault(),n.classList.add(`file-path-link`),G(r,n);return}let i=t?.closest(`.file-path-link`);if(!i)return;let a=i.getAttribute(`data-file-path`);a&&G(a,i)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target;t?.classList.contains(`file-path-link`)&&(e.preventDefault(),t.click())}))}var J=!1;function Dt(){J||(J=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`.code-copy-btn`);if(n){let e=n.closest(`.code-block`);if(!e)return;let t=e.querySelector(`pre code`);if(!t)return;navigator.clipboard.writeText(t.textContent||``).then(()=>{let e=n.textContent||``;n.textContent=E(`code.copied`),n.classList.add(`copied`),setTimeout(()=>{n.textContent=e,n.classList.remove(`copied`)},1500)}).catch(()=>{});return}let r=t?.closest(`.code-lang-label`);if(!r)return;let i=r.closest(`.code-block-wrapper`);if(!i)return;let a=i.querySelector(`pre code`);a&&navigator.clipboard.writeText(a.textContent||``).then(()=>{let e=r.textContent||``;r.textContent=E(`code.copied`),r.classList.add(`copied`),setTimeout(()=>{r.textContent=e,r.classList.remove(`copied`)},1500)}).catch(()=>{})}))}var Y=!1;function Ot(){Y||(Y=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`.diagram-copy-btn`);if(n){let e=n.closest(`.diagram-container`);if(!e)return;let t=``;if(e.dataset.widgetHtml)try{t=decodeURIComponent(escape(atob(e.dataset.widgetHtml)))}catch{return}else{let n=e.querySelector(`svg`);n&&(t=n.outerHTML)}t&&X(n,t,`copy`);return}let r=t?.closest(`.mermaid-copy-btn`);if(r){let e=r.closest(`.mermaid-container`);if(!e)return;let t=e.dataset.mermaidCode||``;t&&X(r,t,`copy`);return}let i=t?.closest(`.diagram-save-btn`);if(i){let e=i.closest(`.diagram-container`);if(!e)return;if(e.dataset.widgetHtml){let t=e.querySelector(`iframe`);t?.contentWindow&&(t.contentWindow.postMessage({type:`jaw-request-screenshot`},`*`),X(i,``,`save`));return}let t=e.querySelector(`svg`);t&&Z(t,i);return}let a=t?.closest(`.mermaid-save-btn`);if(a){let e=a.closest(`.mermaid-container`);if(!e)return;let t=e.querySelector(`svg`);t&&Z(t,a);return}}))}function X(e,t,n){let r=()=>{let t=e.innerHTML;e.innerHTML=A.checkSimple,e.classList.add(`copied`),setTimeout(()=>{e.innerHTML=t,e.classList.remove(`copied`)},1500)};n===`copy`?navigator.clipboard.writeText(t).then(r).catch(()=>{}):r()}function Z(e,t){let n=e.cloneNode(!0),r=e.getBoundingClientRect();n.getAttribute(`width`)||n.setAttribute(`width`,String(r.width)),n.getAttribute(`height`)||n.setAttribute(`height`,String(r.height));let i=new XMLSerializer().serializeToString(n),a=`data:image/svg+xml;charset=utf-8,`+encodeURIComponent(i),o=new Image;o.onload=()=>{let e=document.createElement(`canvas`);e.width=o.naturalWidth*2,e.height=o.naturalHeight*2;let n=e.getContext(`2d`);n.scale(2,2),n.drawImage(o,0,0),e.toBlob(e=>{e&&(Q(e,`diagram-${Date.now()}.png`),X(t,``,`save`))},`image/png`)},o.onerror=()=>{Q(new Blob([i],{type:`image/svg+xml;charset=utf-8`}),`diagram-${Date.now()}.svg`),X(t,``,`save`)},o.src=a}function Q(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function kt(e){return e.kind===`partial`?`<div class="diagram-container diagram-loading" role="status"
|
|
10
|
-
aria-label="Diagram loading"><div class="diagram-spinner"></div></div>`:e.kind===`error`?`<div class="diagram-container diagram-error" role="alert">
|
|
11
|
-
Malformed SVG: unclosed element</div>`:`<div class="diagram-container diagram-svg" tabindex="0"
|
|
12
|
-
role="figure" aria-label="SVG diagram">
|
|
13
|
-
${R(e.svg)}
|
|
14
|
-
<button class="diagram-save-btn" type="button"
|
|
15
|
-
aria-label="Save as image" title="Save">${A.download}</button>
|
|
16
|
-
<button class="diagram-copy-btn" type="button"
|
|
17
|
-
aria-label="Copy source" title="Copy">${A.copy}</button>
|
|
18
|
-
<button class="diagram-zoom-btn" type="button"
|
|
19
|
-
aria-label="Expand diagram" title="Expand">⤢</button>
|
|
20
|
-
</div>`}function At(e,t){for(let n of t){let t=`<div\\b[^>]*?\\bdata-jaw-svg="${n.id}"[^>]*></div>`,r=new RegExp(t,`g`),i=kt(n);e=e.replace(r,()=>i)}return e}function jt(e){(e||document).querySelectorAll(`.diagram-zoom-btn`).forEach(e=>{e.dataset.bound||(e.dataset.bound=`1`,e.addEventListener(`click`,()=>{let t=e.closest(`.diagram-container`);if(!t)return;let n=t.cloneNode(!0);n.querySelectorAll(`.diagram-zoom-btn, .diagram-copy-btn, .diagram-save-btn`).forEach(e=>e.remove()),Mt(n.innerHTML)}))})}function Mt(e){let t=document.activeElement,n=document.createElement(`div`);n.className=`diagram-overlay`,n.setAttribute(`role`,`dialog`),n.setAttribute(`aria-modal`,`true`),n.setAttribute(`aria-label`,`Expanded diagram`),n.innerHTML=`
|
|
21
|
-
<div class="diagram-overlay-content">${R(e)}</div>
|
|
22
|
-
<button class="diagram-overlay-close" type="button" aria-label="Close">✕</button>
|
|
23
|
-
`,n.querySelectorAll(`.diagram-overlay-content svg`).forEach(e=>{if(!e.getAttribute(`viewBox`)){let t=e.getAttribute(`width`)||e.getBBox?.()?.width,n=e.getAttribute(`height`)||e.getBBox?.()?.height;t&&n&&e.setAttribute(`viewBox`,`0 0 ${parseFloat(String(t))} ${parseFloat(String(n))}`)}e.removeAttribute(`width`),e.removeAttribute(`height`)});let r=n.querySelector(`.diagram-overlay-close`),i=()=>{n.remove(),document.removeEventListener(`keydown`,a),t&&t.isConnected&&t.focus()},a=e=>{if(e.key===`Escape`){i();return}if(e.key===`Tab`){let t=n.querySelectorAll(`button, [href], [tabindex]:not([tabindex="-1"])`);if(t.length===0)return;let r=t[0],i=t[t.length-1];e.shiftKey&&document.activeElement===r?(e.preventDefault(),i.focus()):!e.shiftKey&&document.activeElement===i&&(e.preventDefault(),r.focus())}};r.addEventListener(`click`,i),document.addEventListener(`keydown`,a),document.body.appendChild(n),r.focus()}function Nt(e,t=!1){let n=z(e);if(!n)return`<em class="text-dim orchestrate-placeholder">${L(E(`orchestrator.dispatching`))}</em>`;let{text:r,fences:a}=at(n.replace(/\n{3,}/g,`
|
|
24
|
-
|
|
25
|
-
`)),{text:o,blocks:s}=st(r,t),{text:c,blocks:l}=pt(ot(o,a));xt();let u=j(c),d=i.parse(u);return d=d.replace(/<table/g,`<div class="table-wrapper"><table`).replace(/<\/table>/g,`</table></div>`),d=mt(d,l,t),d=R(d),d=At(d,s),t||Pt(),Dt(),Ot(),Et(),d}var $=null;function Pt(){$||=requestAnimationFrame(()=>{$=null,bt(),St(),jt();let e=document.getElementById(`chatMessages`);e&&K(e)})}function Ft(){$&&=(cancelAnimationFrame($),null)}export{ht as a,nt as c,$e as d,Qe as f,E as h,Nt as i,rt as l,Ze as m,L as n,z as o,Xe as p,K as r,A as s,Ft as t,it as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as e,m as t,v as n}from"./settings-kyjHk6rj.js";export{t as loadSettings,n as savePerCli,e as updateSettings};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./skills-B6bTgYdX.js";export{e as loadSkills};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./slash-commands-D-vY1ONF.js";export{e as loadCommands};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as e,d as t,i as n,m as r}from"./ui-B4mnMXvw.js";export{n as cleanupToolActivity,e as loadMessages,t as setStatus,r as updateQueueBadge};
|