cli-jaw 2.17.60 → 2.17.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/public/css/chat.css +18 -4
- package/public/css/layout.css +12 -0
- package/public/dist/.vite/manifest.json +120 -110
- package/public/dist/assets/Profile-DPqrYA44.js +1 -0
- package/public/dist/assets/{app-Cn7mvbfa.js → app-ByMfeXp-.js} +4 -4
- package/public/dist/assets/app-DAJWqs33.css +1 -0
- package/public/dist/assets/bgtask-badge-Ch88fnhf.js +1 -0
- package/public/dist/assets/{bgtask-badge-DwA2ufcC.js → bgtask-badge-DfiHuzxT.js} +1 -1
- package/public/dist/assets/{employees-DrXQ9oRa.js → employees-BQaJNp-u.js} +1 -1
- package/public/dist/assets/favicon-32-C4u_h46P.png +0 -0
- package/public/dist/assets/icon-192-CADbZUeU.png +0 -0
- package/public/dist/assets/{iframe-renderer-CLqxxRj1.js → iframe-renderer-Bj1JolO8.js} +2 -2
- package/public/dist/assets/iframe-renderer-DWnvUSrx.js +1 -0
- package/public/dist/assets/manager-BnQHAKk6.css +1 -0
- package/public/dist/assets/{manager-BpPiQqP8.js → manager-C5cU1joU.js} +1 -1
- package/public/dist/assets/{manifest-Bw-LRm-c.json → manifest-BgdjNQXm.json} +1 -1
- package/public/dist/assets/mascot-BPkuMHQQ.png +0 -0
- package/public/dist/assets/memory-Bk_cb3sw.js +1 -0
- package/public/dist/assets/{memory-CPfFQFaW.js → memory-EG1B51up.js} +1 -1
- package/public/dist/assets/{message-history-BhiEuMLw.js → message-history-D2vniu04.js} +1 -1
- package/public/dist/assets/message-history-GAtF_wbZ.js +1 -0
- package/public/dist/assets/{render-CdATJ4wM.js → render-Dp07lZAJ.js} +1 -1
- package/public/dist/assets/{settings-CUxM2lH7.js → settings-CA2LQDGh.js} +1 -1
- package/public/dist/assets/settings-WVGhtneN.js +1 -0
- package/public/dist/assets/{settings-core-D_2F4S22.js → settings-core-B5Uf_lWY.js} +1 -1
- package/public/dist/assets/settings-core-CgKGnMA5.js +1 -0
- package/public/dist/assets/{settings-embedding-LIMq5ebM.css → settings-embedding-DhEdT86W.css} +1 -1
- package/public/dist/assets/{settings-embedding-abQOXHyq.js → settings-embedding-oGvFayh-.js} +1 -1
- package/public/dist/assets/{settings-Cjrg6SrM.js → settings-jlI4X-zt.js} +1 -1
- package/public/dist/assets/shark-sprite-v5dtON_I.png +0 -0
- package/public/dist/assets/sidebar-BUemG2ZN.js +49 -0
- package/public/dist/assets/{skills-CD3PFa7e.js → skills-CKUcEN9m.js} +1 -1
- package/public/dist/assets/skills-Co7Mr-qP.js +1 -0
- package/public/dist/assets/slash-commands-BEr-vmIr.js +1 -0
- package/public/dist/assets/{slash-commands-Czgl_F8c.js → slash-commands-D34GgHFX.js} +1 -1
- package/public/dist/assets/{trace-drawer-BYKkBIG-.js → trace-drawer-DBmK-5F_.js} +1 -1
- package/public/dist/assets/ui-TUyJsMUf.js +1 -0
- package/public/dist/assets/{ui-B0OYr3pK.js → ui-vm2iuLcS.js} +1 -1
- package/public/dist/index.html +8 -8
- package/public/dist/manager/index.html +4 -4
- package/public/dist/settings/index.html +2 -2
- package/public/icons/favicon-32.png +0 -0
- package/public/icons/icon-192.png +0 -0
- package/public/icons/icon-512-maskable.png +0 -0
- package/public/icons/icon-512.png +0 -0
- package/public/icons/mascot.png +0 -0
- package/public/img/shark-sprite.png +0 -0
- package/public/index.html +4 -4
- package/public/js/features/attention-badge.ts +22 -4
- package/public/js/features/avatar.ts +4 -2
- package/public/manager/src/components/CommandBar.tsx +1 -0
- package/public/manager/src/manager-p0-1-1.css +7 -0
- package/public/manager/src/settings/pages/components/AvatarCard.tsx +3 -1
- package/public/manager/src/settings-shell.css +6 -0
- package/public/manifest.json +1 -1
- package/public/sw.js +1 -1
- package/scripts/brand/generate-brand-assets.py +226 -0
- package/scripts/brand/mascot-master.png +0 -0
- package/scripts/check-app-icon-assets.cjs +19 -0
- package/public/assets/shark.svg +0 -1
- package/public/dist/assets/Profile-BSV3ztzm.js +0 -1
- package/public/dist/assets/app-BCBnxiGr.css +0 -1
- package/public/dist/assets/bgtask-badge-C_bWwh_e.js +0 -1
- package/public/dist/assets/icon-192-CwXPIYF5.png +0 -0
- package/public/dist/assets/iframe-renderer-DjRrBgkV.js +0 -1
- package/public/dist/assets/manager-Nk7-RYPs.css +0 -1
- package/public/dist/assets/memory-BOwQYuLb.js +0 -1
- package/public/dist/assets/message-history-CqWYH9Sx.js +0 -1
- package/public/dist/assets/settings-core-BNFL4oSA.js +0 -1
- package/public/dist/assets/settings-kHiXb__9.js +0 -1
- package/public/dist/assets/shark-sprite-B3AAuERd.png +0 -0
- package/public/dist/assets/sidebar-DE-2OtXs.js +0 -49
- package/public/dist/assets/skills-iVr8hW-f.js +0 -1
- package/public/dist/assets/slash-commands-DbBIj8wv.js +0 -1
- package/public/dist/assets/ui-CpxBqLlq.js +0 -1
|
Binary file
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-DSSkXCir.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{t as e}from"./state-Dl-xxPoS.js";import{i as t,t as n}from"./api-CUtiCd2-.js";import{n as r,t as i}from"./bounded-api-DdpT93LB.js";import{t as a}from"./preload-helper-CfbQpVni.js";import{O as o,P as s,f as c,g as l,j as u,n as d}from"./render-Dp07lZAJ.js";import{t as f}from"./icons-CVkqyECl.js";import{t as p}from"./copy-text-DjgetgoZ.js";import{_ as m,g as h,p as g}from"./iframe-renderer-Bj1JolO8.js";import{A as _,C as v,D as y,E as b,F as x,H as S,I as C,M as w,N as T,O as ee,S as te,T as ne,U as E,_ as re,b as ie,d as D,f as ae,g as O,h as k,j as oe,k as se,m as ce,p as le,u as ue,v as de,w as A,x as j,y as M}from"./message-history-D2vniu04.js";import{n as N}from"./presentation-DWHWElFr.js";import{a as P,d as fe,f as F,i as pe,l as I,n as me,r as he,s as ge,t as _e,u as ve}from"./ui-vm2iuLcS.js";var L=null,ye=0,be=[],xe=2e3,Se=3e4,Ce=1.5,we=null,Te=4e4,Ee=1e4,De=0,Oe=!1,ke=null,Ae=null;function je(e){Ae=e}function Me(){let e=null;try{e=Ae?.()??null}catch{e=null}return e?`&scope=${encodeURIComponent(e)}`:``}function Ne(){ke||=setInterval(()=>{L&&Fe&&Oe&&(Date.now()-De<=Te||(console.warn(`[sse] stalled channel (no ping in`,Te,`ms) — forcing reconnect`),L.close(),L=null,Fe=!1,Ve?.(),Ye(Pe)))},Ee)}var Pe=``,Fe=!1,Ie=!1,Le=!1,Re=!1,ze=!1,Be=null,Ve=null,He=null;function Ue(e){Be=e}function We(e){Ve=e}function Ge(e){He=e}function Ke(e,t,n){let r={topic:e,event:t,handler:n};return be.push(r),()=>{let e=be.indexOf(r);e>=0&&be.splice(e,1)}}function qe(e,t,n){for(let r of be)if((r.topic===`*`||r.topic===e)&&(r.event===null||r.event===t))try{r.handler(n)}catch(e){console.warn(`[sse] handler error:`,e.message)}}function Je(){Ie||we||(we=setTimeout(()=>{we=null,Ye(Pe)},xe),xe=Math.min(xe*Ce,Se))}function Ye(e){Pe=e,Ie=!1,we&&=(clearTimeout(we),null),L&&L.close();let t=`${n}/api/events?lang=${encodeURIComponent(e)}`+Me()+(ye?`&lastEventId=${ye}`:``);Re=!1,ze=!1,L=new EventSource(t),Ne(),L.onopen=()=>{xe=2e3,Fe=!0,Le=!0,Re=!0,De=Date.now(),Be?.()},L.onerror=()=>{if(L?.close(),L=null,!Re&&!Le&&He){ze||(ze=!0,He());return}Fe&&(Fe=!1,Ve?.()),Je()},L.onmessage=e=>{ye=parseInt(e.lastEventId||`0`,10)||ye;let t;try{t=JSON.parse(e.data)}catch{console.warn(`[sse] malformed message:`,e.data);return}if(!t||typeof t!=`object`||typeof t.topic!=`string`||typeof t.event!=`string`){console.warn(`[sse] invalid message shape:`,t);return}if(De=Date.now(),t.topic===`system`&&t.event===`ping`){Oe=!0;return}qe(t.topic,t.event,t)}}var Xe=3e3,R=new Map,z=[],Ze=(e,t)=>`${e}:${t}`;function Qe(e=[]){let t=document.getElementById(`pendingQueue`);if(t){if(z=e.slice(),!e.length){it(new Set),t.classList.remove(`visible`),t.innerHTML=``;return}t.classList.add(`visible`),t.innerHTML=`
|
|
3
|
+
<div class="pending-queue-header">
|
|
4
|
+
<span class="pending-queue-title">${f.hourglass} <span data-i18n="queue.pendingTitle">${o(s(`queue.pendingTitle`))}</span> <span class="pending-queue-count">${e.length}</span></span>
|
|
5
|
+
</div>
|
|
6
|
+
<div class="pending-queue-list">
|
|
7
|
+
${e.map($e).join(``)}
|
|
8
|
+
</div>
|
|
9
|
+
`,it(new Set(e.map(e=>e.id))),rt()}}function $e(e){let t=(e.prompt||``).replace(/\s+/g,` `).trim(),n=t.length>140?t.slice(0,140)+`…`:t,r=e.source?`<span class="pending-row-source">${o(e.source)}</span>`:``,i=o(s(`queue.copy`)),a=o(s(`queue.steer`)),c=o(s(`queue.delete`));return`<div class="pending-row" data-pending-id="${o(e.id)}" title="${o(t)}">
|
|
10
|
+
<span class="pending-row-text">${o(n)}</span>
|
|
11
|
+
${r}
|
|
12
|
+
<button class="pending-row-btn pending-row-copy" data-pending-action="copy" title="${i}" aria-label="${i}"><span class="pending-btn-content">${f.copy}</span></button>
|
|
13
|
+
<button class="pending-row-btn pending-row-steer" data-pending-action="steer" data-i18n-title="queue.steer" title="${a}" aria-label="${a}"><span class="pending-arm-fill" aria-hidden="true"></span><span class="pending-btn-content"><span class="pending-steer-arrow" aria-hidden="true">↳</span><span class="pending-steer-label">${a}</span></span></button>
|
|
14
|
+
<button class="pending-row-btn pending-row-delete" data-pending-action="delete" data-i18n-title="queue.delete" title="${c}" aria-label="${c}"><span class="pending-arm-fill" aria-hidden="true"></span><span class="pending-btn-content">${f.trash}</span></button>
|
|
15
|
+
</div>`}function et(e,t){let n=document.querySelector(`.pending-row[data-pending-id="${CSS.escape(e)}"]`);return n?n.querySelector(`[data-pending-action="${t}"]`):null}function tt(e,t){let n=et(e,t);if(!n)return;n.classList.add(`armed`),n.setAttribute(`title`,s(`queue.cancelArm`));let r=n.querySelector(`.pending-arm-fill`);r&&(r.style.animation=`none`,r.offsetWidth,r.style.animation=``)}function nt(e,t){let n=et(e,t);n&&(n.classList.remove(`armed`),n.setAttribute(`title`,s(t===`steer`?`queue.steer`:`queue.delete`)))}function rt(){for(let e of R.values()){let t=et(e.id,e.action);t&&(t.classList.add(`armed`),t.setAttribute(`title`,s(`queue.cancelArm`)))}}function it(e){for(let[t,n]of R)e.has(n.id)||(clearTimeout(n.timerId),R.delete(t))}function at(e,n){let r=Ze(e,n),i=setTimeout(()=>st(e,n),Xe);R.set(r,{id:e,action:n,timerId:i}),tt(e,n),n===`steer`&&t(`/api/orchestrate/queue/${encodeURIComponent(e)}/hold`,`POST`,{}).catch(()=>{})}function ot(e,n){let r=Ze(e,n),i=R.get(r);i&&(clearTimeout(i.timerId),R.delete(r),nt(e,n),n===`steer`&&t(`/api/orchestrate/queue/${encodeURIComponent(e)}/hold`,`DELETE`,{}).catch(()=>{}))}async function st(e,n){R.delete(Ze(e,n));let r=n===`steer`?`/api/orchestrate/queue/${encodeURIComponent(e)}/steer`:`/api/orchestrate/queue/${encodeURIComponent(e)}`,i=n===`steer`?`POST`:`DELETE`;if(n===`steer`&&x(`running`),await t(r,i,{})==null){z=z.filter(t=>t.id!==e),Qe(z),n===`steer`&&Z(`steer-fire-miss`).catch(()=>{});return}z=z.filter(t=>t.id!==e),Qe(z)}function ct(e,t){if(R.has(Ze(e,t))){ot(e,t);return}at(e,t)}function lt(){let e=document.getElementById(`pendingQueue`);e&&e.addEventListener(`click`,async e=>{let t=e.target?.closest(`[data-pending-action]`);if(!t)return;let n=t.closest(`.pending-row`)?.dataset.pendingId;if(!n)return;let r=t.dataset.pendingAction;if(r===`copy`){let e=z.find(e=>e.id===n);if(e?.prompt&&(await p(e.prompt)).ok){let e=t.querySelector(`.pending-btn-content`);e&&(e.innerHTML=f.checkSimple,setTimeout(()=>{e.innerHTML=f.copy},600))}return}ct(n,r===`steer`?`steer`:`delete`)})}var ut=800,dt=64,ft=`CLI-JAW`,pt=`/icons/favicon-32.png`,mt=`#22d3ee`,ht=!1,B=0,gt=ft,V=null,_t=``,vt=!1,yt=0,bt=null;function xt(){return navigator}function St(){return document.visibilityState!==`visible`||!document.hasFocus()}function Ct(e){return e-yt<ut}function wt(){if(V)return V;let e=document.querySelector(`link[rel~="icon"]`);if(e)return V=e,_t=e.href||e.getAttribute(`href`)||``,e;let t=document.createElement(`link`);return t.rel=`icon`,document.head.appendChild(t),V=t,vt=!0,t}function Tt(){if(bt)return;let e=new Image;e.addEventListener(`load`,()=>{B>0&&kt()}),e.src=pt,bt=e}function Et(e){let t=document.createElement(`canvas`);t.width=dt,t.height=dt;let n=t.getContext(`2d`);return n?(n.clearRect(0,0,dt,dt),bt&&bt.complete&&bt.naturalWidth>0?n.drawImage(bt,2,6,52,52):(n.beginPath(),n.arc(28,32,26,0,Math.PI*2),n.fillStyle=mt,n.fill()),n.beginPath(),n.arc(50,15,e>1?12:9,0,Math.PI*2),n.fillStyle=`#ff335f`,n.fill(),n.lineWidth=4,n.strokeStyle=`#ffffff`,n.stroke(),e>1&&(n.fillStyle=`#ffffff`,n.font=`bold 15px sans-serif`,n.textAlign=`center`,n.textBaseline=`middle`,n.fillText(String(Math.min(e,9)),50,16)),t.toDataURL(`image/png`)):_t}async function Dt(e){let t=xt();if(typeof t.setAppBadge==`function`)try{await t.setAppBadge(e)}catch{}}async function Ot(){let e=xt();if(typeof e.clearAppBadge==`function`)try{await e.clearAppBadge()}catch{}}function kt(){document.title=`(${B}) ${gt}`;let e=wt();e&&(e.href=Et(B)),Dt(B)}function At(){document.title=gt}function jt(){if(V){if(vt){V.remove(),V=null,vt=!1;return}V.href=_t}}function Mt(){ht||(ht=!0,gt=document.title||ft,wt(),Tt(),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`&&Pt()}),window.addEventListener(`focus`,()=>Pt()))}function Nt(){if(!ht||!St())return;let e=Date.now();Ct(e)||(yt=e,B+=1,kt())}function Pt(){ht&&B!==0&&(B=0,yt=0,At(),jt(),Ot())}function Ft(e,t){return!e||!t||e===`all`||e===t}function It(e){let t=N(e);return!t||e.version!==1?null:{version:1,...t}}var Lt=6291456,Rt=e=>typeof e==`object`&&!!e&&!Array.isArray(e),H=e=>typeof e==`string`&&e.length>0&&e.length<=240;function zt(e){let{runId:t,sessionId:n,scope:r,turnId:i,requestId:a,requestType:o,expiresAt:s}=e;if(!H(t)||!H(n)||!H(r)||!H(i)||!H(a)||o!==`approval`&&o!==`question`||typeof s!=`number`||!Number.isSafeInteger(s))return null;let c=de(e.view);return c?{runId:t,sessionId:n,scope:r,turnId:i,requestId:a,requestType:o,expiresAt:s,view:c}:null}function Bt(e){return JSON.stringify([e.runId,e.sessionId,e.scope,e.turnId,e.requestId,e.requestType,e.view])}function Vt(e){let t=e.view.fields;return t.length>0&&(e.requestType===`approval`?t.length===1&&!t[0].multiSelect&&!t[0].allowFreeform&&t[0].options.length>0:t.every(e=>e.options.length>0||e.allowFreeform))}function Ht(e,t,n={}){let a={...t},o=e.ownerDocument,s=o.createElement(`section`);s.className=`native-requests`,s.hidden=!0,s.setAttribute(`aria-label`,`Live runtime requests`);let c=o.createElement(`p`);c.className=`native-request-status`;let l=o.createElement(`p`);l.className=`native-request-announcer`,l.setAttribute(`role`,`status`),l.setAttribute(`aria-live`,`polite`),l.setAttribute(`aria-atomic`,`true`);let u=o.createElement(`h2`);u.className=`native-request-title`;let d=o.createElement(`p`);d.className=`native-request-context`;let f=o.createElement(`div`);f.className=`native-request-controls`;let p=de(`Refresh requests`,()=>{n.onRefresh?n.onRefresh():F()});s.append(u,d,c,f,p);let m=[...e.children].find(e=>e.classList.contains(`chat-input-area`));e.insertBefore(l,m??null),e.insertBefore(s,m??null);let h=null,g=null,_=null,v,y=0,b=0,x=!1,S=!1,C=!1,w=!1,T=n.health??`healthy`,ee=0,te=!1,ne=!1,E=()=>!x&&(n.isCurrent?.()??!0),re=0,ie=null,D=null,ae=!1,O=null,k=o.defaultView,oe=()=>{ae=!0,++re,D=null},se=()=>{ae=!1},ce=e=>{s.contains(e.target)||(++re,D=null)};o.addEventListener(`focusin`,ce),k?.addEventListener(`blur`,oe),k?.addEventListener(`focus`,se);function le(){return ae?null:s.contains(o.activeElement)?re:C&&o.activeElement===o.body?ie:null}function ue(t=!0){if(D===null)return;if(ae||D!==re){D=null;return}let n=s.isConnected&&!s.hidden?f.querySelector(`input:not(:disabled), textarea:not(:disabled), button:not(:disabled)[aria-disabled="false"]`)??p:e.querySelector(`#chatInput`)??o.getElementById(`chatInput`);n?.isConnected&&!n.hasAttribute(`disabled`)&&n.focus({preventScroll:!0}),t&&!C&&(D=null)}function de(e,t){let n=o.createElement(`button`);return n.type=`button`,n.textContent=e,n.addEventListener(`click`,t),n}function A(e,t=!1){t&&(O=e);let n=(T===`healthy`?``:T===`unknown`?`Live request updates not connected. `:`Connection lost. Live request updates unavailable. `)+(te&&T!==`healthy`?`Manually refreshed; updates remain unavailable. `:``)+e;c.textContent!==n&&(c.textContent=n);let r=T===`healthy`&&e===`No pending runtime requests.`?O??e:n;l.textContent!==r&&(l.textContent=r)}function j(){f.querySelectorAll(`button`).forEach(e=>{let t=w||C||!S;e.disabled=w||C||!S&&o.activeElement!==e,e.setAttribute(`aria-disabled`,String(t))}),f.querySelectorAll(`input, textarea`).forEach(e=>{e.disabled=C}),s.setAttribute(`aria-busy`,String(C))}function M(e=le()){D=e,clearTimeout(v),v=void 0,h=null,S=!1,b++,u.textContent=``,d.textContent=``,f.replaceChildren(),ue(!1)}function N(){clearTimeout(v),h&&!w&&(v=setTimeout(()=>{if(E()){if(h&&h.expiresAt>Date.now()){N();return}M(),A(T===`healthy`?`Request expired. Checking pending requests.`:`Request expired. Refresh requests to check what is pending.`,!0),F(`auto`)}},Math.min(2147483647,Math.max(0,h.expiresAt-Date.now()))))}function P(e){u.textContent=e.view.title,d.textContent=`Execution scope: ${e.scope} · Run: ${e.runId}`;let t=e.view.fields;if(!Vt(e))return;let n=b,r=e=>{b===n&&fe(e)},i=o.createElement(`form`);i.noValidate=!0;let a=[];for(let[n,s]of t.entries()){let t=o.createElement(`fieldset`),c=o.createElement(`legend`);c.textContent=s.label,t.append(c);let l=[];for(let i of s.options)if(e.requestType===`approval`)t.append(de(i.label,()=>r({optionId:i.id})));else{let e=o.createElement(`label`),r=o.createElement(`input`);r.type=s.multiSelect?`checkbox`:`radio`,r.name=`native-question-${n}`,r.value=i.id,e.append(r,o.createTextNode(i.label)),t.append(e),l.push({id:i.id,input:r})}let u=null;if(e.requestType===`question`&&s.allowFreeform){!s.multiSelect&&l.length&&t.append(de(`Clear selection`,()=>{l.forEach(e=>{e.input.checked=!1})}));let e=o.createElement(`label`);e.append(o.createTextNode(`Other answer`)),u=o.createElement(`textarea`),u.maxLength=2e3,e.append(u),t.append(e)}if(e.requestType===`question`){let e=o.createElement(`p`);e.textContent=s.multiSelect?`Choose at least one answer.`:`Choose exactly one answer.`,t.append(e)}a.push({field:s,choices:l,text:u}),i.append(t)}if(e.requestType===`question`){let e=o.createElement(`button`);e.type=`submit`,e.textContent=`Submit answers`,i.append(e)}i.addEventListener(`submit`,t=>{if(t.preventDefault(),e.requestType!==`question`||!E()||w||C||!S||b!==n)return;let i=0,o=[];for(let{field:e,choices:t,text:n}of a){let r=t.filter(e=>e.input.checked).map(e=>e.id),a=n?.value??``,s=a.length>0,c=r.length+(s&&a.trim()?1:0);if(s&&(!e.allowFreeform||!a.trim()||a.length>2e3)||(e.multiSelect?c<1||r.length>e.options.length:c!==1)){A(`Answer every question. Choose one answer for single-choice questions; other answers must be nonblank and at most 2,000 characters.`);return}i+=a.length,o.push([e.id,{selected:r,...s?{text:a}:{}}])}if(i>8e3){A(`Keep all other answers within 8,000 characters in total.`);return}r({answers:Object.fromEntries(o)})}),i.append(de(`Cancel request`,()=>r({optionId:null}))),f.append(i)}async function fe(e){let t=h;if(!E()||w||C||!S||!t)return;if(t.expiresAt<=Date.now()){M(),A(`Request expired.`,!0),await F(`auto`);return}ie=le();let n=ie;C=!0,S=!1;let a=b,o=ee;++y,g?.abort();let s=new AbortController;_=s,O=null,j(),A(`Sending response.`);let c=`optionId`in e&&e.optionId===null?`Request cancelled.`:`Response accepted.`,l=!1;try{let n=await r(`/api/runtime/requests/`+encodeURIComponent(t.requestId),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({runId:t.runId,sessionId:t.sessionId,scope:t.scope,turnId:t.turnId,response:e})},s.signal,65536);if(!Rt(n)||n.ok!==!0||!Rt(n.data)||n.data.accepted!==!0)throw Error(`unconfirmed`);l=!0}catch(e){c=e instanceof i&&e.status===409?`Request expired or was already answered. Pending requests refreshed.`:`Response could not be confirmed. Check pending requests before trying again.`}finally{_===s&&(_=null),C=!1}if(!E())return;if(w||o!==ee){j();return}if(b!==a){j(),ue();return}l?M(n):S=!1,j(),A(c,!0);let u=y+1;await F(`auto`),!x&&!w&&S&&y===u&&!l&&h&&Bt(h)===Bt(t)&&A(c)}async function F(e=`manual`){if(!E()||e===`auto`&&T!==`healthy`)return;let t=++y;g?.abort();let n=new AbortController;g=n,S=!1,j(),!h&&!ne&&(s.hidden=!1,A(`Loading pending requests.`));try{if(!H(a.sessionId)||!H(a.scope))throw Error(`invalid_identity`);let i=await r(`/api/runtime/requests?sessionId=`+encodeURIComponent(a.sessionId),{method:`GET`},n.signal,Lt);if(!E()||t!==y||n.signal.aborted)return;if(!Rt(i)||i.ok!==!0||!Rt(i.data))throw Error(`invalid_list`);let o=i.data.requests;if(!Array.isArray(o)||o.length>128)throw Error(`invalid_list`);let c=new Set,l=null,u=null,d=!1;for(let e of o){if(!Rt(e)){d=!0;continue}if(H(e.requestId)){if(c.has(e.requestId))throw Error(`duplicate_request`);c.add(e.requestId)}if(e.sessionId!==a.sessionId)continue;let t=zt(e);if(!t){d=!0;continue}t.expiresAt<=Date.now()||(l??=t,h&&Bt(h)===Bt(t)&&(u=t))}let f=u??l;h&&!u&&A(h.expiresAt<=Date.now()?`Request expired.`:`Request is no longer pending.`,!0),u||M(),h=f,S=!0,w=!1,ne=!0,te=e===`manual`,s.hidden=!h&&!d&&T===`healthy`,h?(u||(O=null),A(Vt(h)?(O?O+` `:``)+`Runtime is waiting for your response.`:`This request cannot be answered here. Refresh requests or use Stop.`),u||P(h),N()):A(d?`This request cannot be displayed safely. Refresh requests or use Stop.`:`No pending runtime requests.`),j(),ue()}catch{if(!E()||t!==y||n.signal.aborted)return;s.hidden=!1,j(),A(`Pending requests could not be loaded. Refresh requests to retry.`)}finally{g===n&&(g=null)}}function pe(e){x||(T=e,te=!1,++ee,w=!0,S=!1,++y,g?.abort(),g=null,clearTimeout(v),v=void 0,s.hidden=!1,j(),A(`Your draft is kept. Refresh requests to check what is pending.`))}return T!==`healthy`&&pe(T),n.autoStart!==!1&&F(`auto`),{refresh:F,setStreamHealth:pe,suspend(){pe(`unavailable`)},dispose(){x||(x=!0,++y,g?.abort(),_?.abort(),M(),s.remove(),l.remove(),ue(),o.removeEventListener(`focusin`,ce),k?.removeEventListener(`blur`,oe),k?.removeEventListener(`focus`,se))}}}function Ut(t){let n=`unknown`,r=0,i=0,a=null,o=``,s=null,c=null,u=!1,d=null,f=()=>l(`/api/orchestrate/snapshot`),p=e=>a?.sessionId===e.sessionId&&a.scope===e.scope;function m(e){let n=t.host();if(n&&!s){if(!c){let e=n.ownerDocument;c=e.createElement(`section`),c.className=`native-requests`,c.setAttribute(`aria-label`,`Live runtime requests`);let t=e.createElement(`p`);t.className=`native-request-status`,t.setAttribute(`role`,`status`);let r=e.createElement(`button`);r.type=`button`,r.textContent=`Refresh requests`,r.addEventListener(`click`,()=>{_()}),c.append(t,r);let i=[...n.children].find(e=>e.classList.contains(`chat-input-area`));n.insertBefore(c,i??null)}c.querySelector(`p`).textContent=e}}function h(){s?.dispose(),s=null,a=null,e.activityIdentity=null}function g(){if(u||n!==`healthy`||!s||d?.epoch===r&&d.path===o&&(!d.panel||d.panel===s))return;u=!0;let e=r;queueMicrotask(()=>{u=!1,e===r&&n===`healthy`&&o===f()&&s?.refresh(`auto`)})}async function _(){if(d?.epoch===r&&d.path===f()&&d.panel===s)return;let e={epoch:r,path:f(),panel:s};d=e;try{(!s||o!==f())&&await t.refreshSnapshot(),e.epoch===r&&e.path===f()&&o===e.path&&(!e.panel||e.panel===s)&&await s?.refresh(`manual`)}catch{m(`Request identity could not be loaded. Refresh requests to retry.`)}finally{d===e&&(d=null)}}function v(e){n=e,++r,s?.setStreamHealth(e),m(e===`healthy`?`Loading request identity.`:`Live request updates unavailable. Refresh requests to check pending requests manually.`)}return{channelChanged(){v(`unknown`)},unavailable(){v(`unavailable`)},sseOpened(){v(`healthy`)},invalidateIdentity(){++r,++i,h(),m(`Request identity changed. Refresh requests to check this conversation.`)},beginSnapshot(){let l=f();o&&o!==l&&h();let u=r,d=++i,v=()=>u===r&&d===i&&l===f();return{path:l,isCurrent:v,accept(r){if(!v())return;let i=N(r);if(!i){h(),m(`Request identity unavailable. Refresh requests to retry.`);return}if(!p(i)){h(),a=i,o=l;let e=t.host();e&&(c?.remove(),c=null,s=Ht(e,i,{health:n,autoStart:!1,onRefresh:()=>{_()},isCurrent:()=>a===i&&o===f()}))}e.activityIdentity=i,g()},fail(){v()&&(h(),m(`Request identity could not be loaded. Refresh requests to retry.`))}}},event(e,t){if(n!==`healthy`||!a||o!==f())return;let r=e===`agent_runtime_requests_changed`?It(t):null,i=e===`agent_runtime`?re(t):null,s=typeof t==`object`&&!!t&&t.sseReplay===!0;(r&&p(r)||i&&p(i)&&(i.kind===`request`||i.kind===`request-settled`||i.kind===`turn-end`&&!s))&&g()},dispose(){++r,++i,h(),c?.remove(),c=null}}}j({currentMessage:()=>e.currentAgentDiv,useMessage:t=>{e.currentAgentDiv=t},createMessage:Wt,reconcileMessage:(e,t)=>m().reconcileMessage(e,t),replaceAnswer:fe,evicted:ae,closeTrace:()=>{a(()=>import(`./trace-drawer-DBmK-5F_.js`).then(e=>e.closeTraceDrawer()),__vite__mapDeps([0])).catch(e=>console.warn(`[activity] trace close unavailable`,e))},inspectTrace:(e,t)=>{a(()=>import(`./trace-drawer-DBmK-5F_.js`).then(n=>n.openTraceDrawer(e,void 0,t)),__vite__mapDeps([0])).catch(e=>console.warn(`[activity] trace unavailable`,e))}});function Wt(){return he(),S(`agent`,``)}var U=Ut({host:()=>document.querySelector(`.chat-area`),refreshSnapshot:()=>Z(`native-request-retry`,{hydrateRun:!0})}),W=[`I`,`P`,`A`,`B`,`C`],G=null;function Gt(e,t,n){let r=W.indexOf(n);if(r<0)return;let i=e.getBoundingClientRect(),a=t.offsetWidth||36,o=document.getElementById(`dot-${n}`);if(!o)return;let s=W[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.transform=`translateX(${r-i.left-a/2}px)`}else{let e=o.getBoundingClientRect();t.style.transform=`translateX(${e.left-i.left+e.width/2-a/2}px)`}}var Kt={},qt=8,Jt=64,K=null,q=0,Yt=[],Xt=new Map;function Zt(e){return e!==null&&(Yt.includes(e)||A(e)||!!v(e)?.answerSource)}function Qt(e){let t=Number(e);return Number.isFinite(t)&&t>0?Math.floor(t):null}function $t(e,t){if(e&&t!=null)for(t>(Xt.get(e)||0)&&Xt.set(e,t);Xt.size>Jt;){let e=null;for(let t of Xt.keys())if(t!==K){e=t;break}if(!e)break;Xt.delete(e)}}function en(e){let t=new Map;for(let n of e?.toolLog||[]){let e=typeof n?.traceRunId==`string`&&n.traceRunId?n.traceRunId:null,r=Qt(n?.traceSeq);e&&r!=null&&r>(t.get(e)||0)&&t.set(e,r)}return t}function tn(e,t,n){return!n||!e||t==null?!1:t<=(Xt.get(e)||0)}function nn(e){++J;let t=e??K;K=null,q=0,t&&!Yt.includes(t)&&(Yt.push(t),Yt.length>qt&&Yt.shift())}function rn(e){e&&e!==K&&(++J,K=e,q=0)}function an(e){if(e?.running){typeof e.traceRunId==`string`&&e.traceRunId&&(K=e.traceRunId),q=typeof e.textLen==`number`?e.textLen:(e.text||``).length;for(let[t,n]of en(e))$t(t,n)}}var on=``,J=0,Y=!1,sn=!1,cn=0,ln=[],un=!1;function X(){Y=!1,_(!1),k(!1),K&&te(K)}function dn(){ie(),ln=[],cn=0,un=!1}function fn(t,n=`Activity preview is unavailable at its retention limit. The final answer will still appear here.`){let r=e.currentAgentDiv;if((!r||r.dataset.traceRunId!==t)&&(r=Wt(),e.currentAgentDiv=r,r.dataset.traceRunId=t),!r.querySelector(`.activity-unavailable`)){let e=r.ownerDocument.createElement(`p`);e.className=`activity-unavailable`,e.setAttribute(`role`,`status`),e.textContent=n,r.querySelector(`.agent-body`)?.prepend(e)}rn(t)}function pn(e){let t=new TextEncoder().encode(JSON.stringify(e)).length;if(ln.length>=256||cn+t>1048576){ln=[],cn=0,un=!0;return}ln.push(e),cn+=t}function mn(t){let n=e.activityIdentity;if(!Y||!n){pn({gap:t});return}t.sessionId===n.sessionId&&t.scope===n.scope&&(v(t.runId)?te(t.runId):K===t.runId&&e.currentAgentDiv&&fn(t.runId,`Activity is incomplete. Runtime updates were not recorded; the final answer remains available separately.`))}function hn(t,n=!1){let r=e.activityIdentity;if(!Y||!r){pn({event:t,replay:n});return}if(t.sessionId!==r.sessionId||t.scope!==r.scope)return;let i=v(t.runId);if(i&&i.model.identity.turnId!==t.turnId)return;let a=Zt(t.runId);if(a&&!i||!i&&K&&K!==t.runId&&(t.kind!==`turn-start`||n))return;let o;try{o=ne(t,!K||K===t.runId)??(t.kind===`turn-end`&&i?.model.end?.seq===t.seq?i:null)}catch(e){if(!(e instanceof M))throw e;!n&&(!K||K===t.runId||t.kind===`turn-start`)&&fn(t.runId);return}if(o){if(++J,un&&te(t.runId),t.kind!==`turn-end`){!a&&!n&&rn(t.runId);return}a||K&&K!==t.runId||e.currentAgentDiv!==o.message||(o.answerSource=`canonical`,nn(t.runId),P(t.finalText,void 0,t.finalText===null?`absent`:`present`,t.runId,o.cacheScope,t.sessionId),Nt())}}function gn(t){if(t.isEmployee===!0)return;let n=typeof t.traceRunId==`string`&&t.traceRunId?t.traceRunId:null,r=t.runtimeFinality===`present`||t.runtimeFinality===`absent`?t.runtimeFinality:void 0;if(!n&&!r&&(t.error===!0||K&&v(K))){typeof t.text==`string`&&t.text&&E(o(t.text),`tool-activity`);return}let i=n?v(n):void 0,a=!!i&&r!==`absent`&&typeof t.text==`string`;if(Zt(n)){if(a&&n)ee(n,t.text);else if(!i&&n&&r!==`absent`&&typeof t.text==`string`){let r=N(t);r&&r.sessionId===e.activityIdentity?.sessionId&&se({...r,runId:n,text:t.text})}return}if(n&&K&&n!==K)return;w(n,t.runtimeStatus??(t.error===!0?`error`:void 0)),i&&(i.answerSource=`compatibility`),nn(n);let s=t.type===`agent_done`?t.toolLog:void 0;i&&n?(P(r===`absent`?null:t.text||``,s,r??(a?`present`:void 0),n,i.cacheScope,i.model.identity.sessionId),r===`absent`&&typeof t.text==`string`&&t.text&&E(o(t.text.slice(0,500)),`activity-diagnostic`)):P(t.text||``,s,r),Nt()}function _n(t){let n=e.currentAgentDiv,r=v(t.runId);if(n&&K===t.runId&&e.activityIdentity?.sessionId===t.sessionId&&n===t.message&&n.dataset.traceRunId===t.runId&&!Zt(t.runId)&&!(r&&(r.model.identity.sessionId!==t.sessionId||r.model.identity.scope!==t.scope||t.turnId!==void 0&&r.model.identity.turnId!==t.turnId))){if(w(t.runId,t.status),nn(t.runId),n.dataset.activitySaved===`true`){r&&(r.answerSource=`saved`),delete n.dataset.activityRecovering,he(),x(`idle`);return}r?r.answerSource=t.answer.kind===`saved`?`saved`:`unavailable`:t.answer.kind!==`saved`&&e.activityIdentity&&T({runId:t.runId,sessionId:t.sessionId,scope:e.activityIdentity.scope,message:n,cacheScope:t.cacheScope}),P(t.answer.kind===`saved`?t.answer.message.content:null,void 0,t.answer.kind===`saved`?`present`:`absent`,t.runId,t.cacheScope,t.sessionId),Nt()}}function vn(){ce(e.activityIdentity,{terminal:_n,refreshIdentity:()=>Z(`history-identity`,{hydrateRun:!0})}),k(Y)}function yn(){let t=ln;ln=[],cn=0;for(let e of t)`event`in e?hn(e.event,e.replay):mn(e.gap);un&&K&&e.currentAgentDiv&&!v(K)&&fn(K,`Activity is incomplete. Updates were dropped while reconnecting; the final answer remains available separately.`),un=!1}var bn=0,xn=null,Sn=0,Cn=!1,wn=0,Tn=750,En=750;async function Dn(t={}){let n=U.beginSnapshot(),i=J,o;try{o=await r(n.path,{method:`GET`},new AbortController().signal,16777216)}catch(e){throw n.isCurrent()&&X(),n.fail(),e}if(!n.isCurrent())return;n.accept(o?.activityIdentity),Y=sn&&e.activityIdentity!==null,oe(e.activityIdentity),_(Y),vn(),on=String(o.orc.scope||``),Hn(o.orc.state),Pn(o.orc.ctx||null),Nn(o.heartbeat||{pending:0,deferredPending:0}),Mn(o.workers),C(o.runtime.queuePending),me(o.queued||[]),Qe(o.queued||[]);let s=Zt(o.activeRun?.traceRunId??null),c=i===J;t.hydrateRun&&c&&!s&&(ge(o.activeRun),an(o.activeRun),o.activeRun?.running&&o.activeRun.traceRunId&&e.currentAgentDiv&&(e.currentAgentDiv.dataset.traceRunId=o.activeRun.traceRunId,e.activityIdentity&&(e.currentAgentDiv.dataset.messageSessionId=e.activityIdentity.sessionId),y(o.activeRun.traceRunId,e.currentAgentDiv))),Bn(),c&&(o.runtime.busy&&!s?x(`running`):I()||x(`idle`)),Y&&yn();let l=document.getElementById(`chatMessages`);l&&le(l),Y&&t.hydrateRun&&e.currentAgentDiv&&K&&(c||v(K)?.degraded)&&D(e.currentAgentDiv,K,!0),a(()=>import(`./employees-BQaJNp-u.js`).then(e=>{typeof e.renderEmployees==`function`&&e.renderEmployees()}),__vite__mapDeps([0]))}function Z(e=`manual`,t={}){let n=Date.now();return t.hydrateRun?Dn(t):xn||(n-Sn<Tn?Promise.resolve():(Sn=n,xn=Dn(t).catch(t=>{throw console.warn(`[ws] orchestrate snapshot sync failed (${e})`,t),t}).finally(()=>{xn=null}),xn))}function On(e){return e===`iframe-visible`||e===`pageshow`||e===`discard`||e===`visibilitychange`}function kn(e){h(e),a(()=>import(`./ui-TUyJsMUf.js`).then(async t=>{if(On(e)&&bn>0)try{await t.loadMessages(),bn=Date.now()}catch(t){console.warn(`[ws] restore loadMessages failed (${e})`,t)}await Z(e,{hydrateRun:!0})}),__vite__mapDeps([0])).catch(()=>{}).finally(()=>{g(e)})}function Q(e){let t=Date.now();!On(e)&&t-wn<En||(wn=t,kn(e))}function An(e){let t=Array.isArray(e.changedKeys)?e.changedKeys:[];if(t.includes(`presentation`)&&a(()=>import(`./presentation-preference-BYEPPRPg.js`).then(e=>e.refreshPresentationSettings()),[]).catch(e=>console.warn(`[ws] presentation refresh failed`,e)),t.includes(`multiSession`)){window.location.reload();return}t.includes(`workingDir`)||t.includes(`projectDirs`)?a(()=>import(`./ui-TUyJsMUf.js`).then(async e=>{try{await e.loadMessages(),bn=Date.now()}catch(e){console.warn(`[ws] settings scope loadMessages failed`,e)}await Z(`settings_change`).catch(()=>{}).finally(()=>e.reconcileChatBottomAfterRestore(`settings_change`))}),__vite__mapDeps([0])):Z(`settings_change`).catch(()=>{}),a(()=>import(`./settings-core-CgKGnMA5.js`).then(t=>t.refreshHeaderFromSettingsChange(e)),__vite__mapDeps([0])).catch(()=>{})}function jn(){Cn||(Cn=!0,window.addEventListener(`focus`,()=>{Q(`focus`)}),window.addEventListener(`pageshow`,e=>{e.persisted&&Q(`pageshow`)}),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`&&Q(`visibilitychange`)}),document.addEventListener(`resume`,()=>{Q(`resume`)}),`wasDiscarded`in document&&document.wasDiscarded&&Q(`discard`),window.addEventListener(`message`,e=>{e.data?.type===`jaw-preview-visibility`&&e.data.visible&&Q(`iframe-visible`)}))}function Mn(e){for(let e of Object.keys(Kt))delete Kt[e];for(let t of e)t.state===`running`&&t.phase&&(Kt[t.agentId]={phase:t.phase,phaseLabel:t.phaseLabel||``})}function Nn(t){let n={pending:Number(t?.pending||0),deferredPending:Number(t?.deferredPending||0),...t?.reason?{reason:t.reason}:{},...t?.policy?{policy:t.policy}:{},...t?.jobId?{jobId:t.jobId}:{},...t?.jobName?{jobName:t.jobName}:{}};e.heartbeatRuntime=n;let r=document.getElementById(`pabcHeartbeatStatus`);if(r){if(n.reason===`pabcd_active`&&n.deferredPending>0){let e=n.jobName?`: ${n.jobName}`:``;r.textContent=`heartbeat deferred (${n.deferredPending})${e}`,r.hidden=!1}else r.textContent=``,r.hidden=!0}}function Pn(t){e.orcTaskAnchor=String(t?.taskAnchor||``).trim(),e.orcResolvedSelection=t?.resolvedSelection||null;let n=document.getElementById(`pabcTaskAnchor`);n&&(e.orcTaskAnchor?(n.textContent=`anchor: ${e.orcResolvedSelection?.index?`${e.orcResolvedSelection.index}. `:``}${e.orcTaskAnchor}`,n.hidden=!1):(n.textContent=``,n.hidden=!0),Rn(t?.interview||null))}var Fn=(()=>{try{return localStorage.getItem(`jaw:interviewCollapsed`)===`1`}catch{return!1}})();function In(e){Fn=e;try{localStorage.setItem(`jaw:interviewCollapsed`,e?`1`:`0`)}catch{}let t=document.getElementById(`interviewPanel`);if(!t)return;t.classList.toggle(`collapsed`,e);let n=t.querySelector(`.iv-toggle`);n&&n.setAttribute(`aria-expanded`,String(!e))}function Ln(e){let t=e=>{switch(e){case`max`:return 1;case`xhigh`:return .8;case`high`:return .6;case`medium`:return .4;default:return .2}},n=e=>{switch(e){case`max`:return`#2196f3`;case`xhigh`:return`#4caf50`;case`high`:return`#8bc34a`;case`medium`:return`#ff9800`;default:return`#f44336`}},r=[t(e.goal),t(e.constraint),t(e.success),t(e.ontology)],i=1-r.reduce((e,t)=>e+t,0)/r.length,a=Object.values(e).every(e=>e===`max`)||i<=.2?`🟢 Ready`:i<=.4?`🟡 Almost`:`🔴 Needs work`,o=(e,r)=>{let i=t(r);return`<div style="display:flex;align-items:center;gap:6px;font-size:12px">
|
|
16
|
+
<span style="width:70px;color:var(--text-secondary)">${e}</span>
|
|
17
|
+
<div style="flex:1;height:5px;background:var(--bg-tertiary);border-radius:3px">
|
|
18
|
+
<div style="width:${i*100}%;height:100%;background:${n(r)};border-radius:3px;transition:width .3s"></div>
|
|
19
|
+
</div>
|
|
20
|
+
<span style="width:60px;text-align:right;font-weight:600;font-size:11px">${i.toFixed(1)} ${r.toUpperCase()}</span>
|
|
21
|
+
</div>`};return`<div style="display:flex;flex-direction:column;gap:3px;margin:6px 0">
|
|
22
|
+
<div style="display:flex;justify-content:space-between;font-size:11px;margin-bottom:2px">
|
|
23
|
+
<span style="color:var(--text-secondary)">Ambiguity: ${i.toFixed(2)}</span>
|
|
24
|
+
<span>${a}</span>
|
|
25
|
+
</div>
|
|
26
|
+
${o(`Goal`,e.goal)}
|
|
27
|
+
${o(`Constraint`,e.constraint)}
|
|
28
|
+
${o(`Success`,e.success)}
|
|
29
|
+
${o(`Ontology`,e.ontology)}
|
|
30
|
+
</div>`}function Rn(e){let t=document.getElementById(`interviewPanel`);if(!t)return;if(!e||!e.known.length&&!e.unknown.length){t.hidden=!0;return}t.hidden=!1,t.classList.toggle(`collapsed`,Fn);let n=e=>{switch(e){case`user_statement`:return`🟢`;case`repo_fact`:return`🔵`;case`inference`:return`🟡`;case`assumption`:return`🟠`;case`default`:return`⚪`;default:return`·`}},r=e.known.map(e=>{if(typeof e==`string`)return`<li class="iv-known">· ${o(e)}</li>`;let t=e,r=n(t.source),i=t.dimension?` <span class="iv-dim">[${t.dimension}]</span>`:``;return`<li class="iv-known">${r} ${o(t.fact)}${i}</li>`}).join(``),i=e.unknown.map(e=>`<li class="iv-unknown">❓ ${o(typeof e==`string`?e:JSON.stringify(e))}</li>`).join(``);t.innerHTML=`
|
|
31
|
+
<button type="button" class="iv-toggle" aria-expanded="${!Fn}" aria-controls="interviewBody" title="인터뷰 트래커 접기/펼치기">
|
|
32
|
+
<span class="iv-chevron" aria-hidden="true">▸</span>
|
|
33
|
+
<span class="iv-summary">Interview · <span class="iv-known-count">Known ${e.known.length}</span> · <span class="iv-unknown-count">Unknown ${e.unknown.length}</span>${e.known.filter(e=>typeof e==`object`&&e&&`source`in e&&e.source===`assumption`).length>0?` · <span class="iv-assumption-count">⚠️ ${e.known.filter(e=>typeof e==`object`&&e&&`source`in e&&e.source===`assumption`).length} assumptions</span>`:``} · Round ${e.round}</span>
|
|
34
|
+
</button>
|
|
35
|
+
<div class="iv-body" id="interviewBody">
|
|
36
|
+
${e.assessment?`<div class="iv-section iv-section-ambiguity">${Ln(e.assessment)}</div>`:``}
|
|
37
|
+
<div class="iv-section iv-section-known"><strong>Known (${e.known.length})</strong><ul>${r}</ul></div>
|
|
38
|
+
<div class="iv-section iv-section-unknown"><strong>Unknown (${e.unknown.length})</strong><ul>${i}</ul></div>
|
|
39
|
+
</div>
|
|
40
|
+
`,t.dataset.toggleBound||(t.dataset.toggleBound=`1`,t.addEventListener(`click`,e=>{e.target.closest(`.iv-toggle`)&&In(!Fn)}))}function zn(e,t){let n=document.getElementById(`budgetPanel`);if(!n)return;if(!e||t!==`B`){n.hidden=!0;return}n.hidden=!1;let r=(e,t,n)=>{let r=n>0?Math.min(t/n*100,100):0;return`<div style="display:flex;align-items:center;gap:6px;font-size:12px">
|
|
41
|
+
<span style="width:70px;color:var(--text-secondary)">${e}</span>
|
|
42
|
+
<div style="flex:1;height:5px;background:var(--bg-tertiary);border-radius:3px">
|
|
43
|
+
<div style="width:${r}%;height:100%;background:${r>=100?`#f44336`:r>=66?`#ff9800`:`#4caf50`};border-radius:3px"></div>
|
|
44
|
+
</div>
|
|
45
|
+
<span style="width:30px;text-align:right;font-size:11px">${t}/${n}</span>
|
|
46
|
+
</div>`};n.innerHTML=`<div style="font-size:11px;font-weight:600;margin-bottom:4px;color:var(--text-secondary)">Build Budget</div>
|
|
47
|
+
${r(`Workers`,e.spent.workerDispatches,e.maxWorkerDispatches)}
|
|
48
|
+
${r(`Self-heal`,e.spent.selfHealRetries,e.maxSelfHealRetries)}
|
|
49
|
+
${r(`Verify`,e.spent.verificationRounds,e.maxVerificationRounds)}`}async function Bn(){try{let t=await fetch(`${n}/api/goal`);if(!t.ok)return;let r=await t.json();r.goal?e.activeGoal={id:r.goal.id,objective:r.goal.objective,status:r.goal.status,createdAt:r.goal.createdAt,updatedAt:r.goal.updatedAt,lastCheckpointSummary:r.goal.lastCheckpoint?.summary,nextAction:r.goal.lastCheckpoint?.nextAction}:e.activeGoal=null,Vn()}catch{}}function Vn(){let t=document.getElementById(`goalCockpit`);if(!t)return;let n=e.activeGoal;if(!n||n.status===`complete`||n.status===`cancelled`){t.hidden=!0,t.innerHTML=``;return}t.hidden=!1,t.replaceChildren();let r=n.status===`paused`?`paused`:n.status===`blocked`?`blocked`:`active`,i=document.createElement(`span`);i.className=`goal-objective`,i.title=n.objective,i.textContent=n.objective;let a=document.createElement(`span`);if(a.className=`goal-status goal-status--${r}`,a.textContent=n.status,t.append(i,a),n.nextAction){let e=document.createElement(`span`);e.className=`goal-next`,e.textContent=n.nextAction,t.append(e)}}function Hn(t,n){let r=new Set([`IDLE`,`I`,`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:``,I:`INTERVIEW`,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(()=>{G&&o.classList.contains(`running`)&&Gt(a,o,G)}).observe(a);let e=0;window.addEventListener(`resize`,()=>{cancelAnimationFrame(e),e=requestAnimationFrame(()=>{G&&o.classList.contains(`running`)&&Gt(a,o,G)})})}if(r===`IDLE`)a.classList.remove(`visible`,`shimmer-out`),o.classList.remove(`running`),G=null;else if(r===`D`){W.forEach(e=>{let t=document.getElementById(`dot-${e}`);t&&(t.className=`pabc-dot done`,t.setAttribute(`data-phase`,e))});for(let e=0;e<W.length;e++){let t=document.getElementById(`pabc-conn-${e}`);t&&(t.className=`pabc-connector done`)}o.classList.remove(`running`),G=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=W.indexOf(r);W.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<W.length;t++){let n=document.getElementById(`pabc-conn-${t}`);n&&(n.className=`pabc-connector ${t<e?`done`:``}`)}G=r,requestAnimationFrame(()=>Gt(a,o,r))}s&&n&&(s.textContent=n)}}var Un=!1,Wn=Promise.resolve(),Gn=0;function Kn(){sn=!1,X(),U.channelChanged(),jn(),Un||(Un=!0,ar()),rr(),Ye(u())}var qn=Kn;function Jn(e){sn=e===`sse`,X(),e===`sse`&&U.sseOpened(),console.log(`[${e}] connected`),tr=2e3,Qn();let t=Date.now()-bn<1e4;Wn=a(()=>import(`./ui-TUyJsMUf.js`).then(async n=>{if(n.cleanupToolActivity(),!t)try{await n.loadMessages(),bn=Date.now()}catch(t){console.error(`[${e}] loadMessages failed`,t)}await Z(`reconnect`,{hydrateRun:!0}).catch(()=>{}).finally(()=>n.reconcileChatBottomAfterRestore(`reconnect`)),a(()=>import(`./memory-Bk_cb3sw.js`).then(e=>e.refreshMemorySidebar()),__vite__mapDeps([0])).catch(()=>{}),a(()=>import(`./bgtask-badge-Ch88fnhf.js`).then(e=>e.refreshBgtaskBadge()),__vite__mapDeps([0])).catch(()=>{})}),__vite__mapDeps([0]))}function Yn(){X(),un=!0,h(`replay_gap`),Wn=a(()=>import(`./ui-TUyJsMUf.js`).then(async e=>{try{await e.loadMessages(),bn=Date.now()}catch(e){console.error(`[sse] replay gap loadMessages failed`,e)}await Z(`replay_gap`,{hydrateRun:!0}).catch(()=>{}).finally(()=>e.reconcileChatBottomAfterRestore(`replay_gap`))}),__vite__mapDeps([0]))}var Xn=8e3,Zn=null;function Qn(){Zn!==null&&(window.clearTimeout(Zn),Zn=null)}function $n(){sn=!1,X(),U.unavailable(),console.log(`[channel] disconnected`),he(),Zn===null&&(Zn=window.setTimeout(()=>{Zn=null,x(`idle`),E(`${f.exec} ${s(`ws.disconnected`)}`,`tool-activity`)},Xn))}var $=null,er=!1,tr=2e3,nr=3e4;function rr(){if($){er=!0;try{$.close()}catch{}$=null}}function ir(){if($)return;console.warn(`[channel] /api/events unavailable — falling back to legacy WebSocket`);let e=`ws://${location.host}`,t=new WebSocket(`${e}${n}/?lang=${u()}`);$=t,er=!1,t.onmessage=e=>{let t;try{t=JSON.parse(e.data)}catch{console.warn(`[ws] malformed message:`,e.data);return}if(!t||typeof t!=`object`||typeof t.type!=`string`){console.warn(`[ws] invalid message shape:`,t);return}or(t)};let r=!1;t.onopen=()=>{r=!0,tr=2e3,Jn(`ws`)},t.onclose=()=>{if($===t&&($=null),er){er=!1;return}if(r){$n(),setTimeout(Kn,2e3);return}tr=Math.min(tr*2,nr),setTimeout(Kn,tr)}}function ar(){Ke(`widget`,`widget_updated`,e=>{let t=e.chatId,n=e.widgetId;typeof t==`string`&&typeof n==`string`&&a(()=>import(`./iframe-renderer-DWnvUSrx.js`).then(e=>e.refreshFileWidget(t,n)),__vite__mapDeps([0])).catch(e=>console.warn(`[widget] refresh failed:`,e.message))}),Ke(`*`,null,e=>{U.event(String(e.event),e),or({...e,type:e.event})}),Ue(()=>Jn(`sse`)),We(()=>$n()),Ge(()=>{sn=!1,X(),U.unavailable(),ir()})}function or(t){if(t.type===`agent_runtime`){let e=re(t);e&&hn(e,t.sseReplay===!0);return}if(t.type===`agent_runtime_gap`){let e=t,n=N(e);n&&typeof e.runId==`string`&&e.runId.length>0&&e.runId.length<=240&&mn({...n,runId:e.runId});return}if(t.type===`agent_tool`){if(I())return;let e=typeof t.traceRunId==`string`&&t.traceRunId?t.traceRunId:null,n=Qt(t.traceSeq);if(Zt(e)||tn(e,n,t.sseReplay===!0))return;++J,t.isEmployee!==!0&&rn(e);let r=t.toolType===`thinking`?`thinking`:t.toolType===`search`?`search`:t.toolType===`subagent`?`subagent`:`tool`;F({id:`step-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,type:r,icon:t.icon||f.tool,rawIcon:t.rawIcon||t.icon||``,label:t.label||``,isEmployee:t.isEmployee===!0,detail:t.detail||``,stepRef:t.stepRef||``,traceRunId:t.traceRunId||``,traceSeq:t.traceSeq,detailAvailable:t.detailAvailable,detailBytes:t.detailBytes,rawRetentionStatus:t.rawRetentionStatus,status:t.status||`running`,startTime:typeof t.startedAt==`number`&&t.startedAt>0?t.startedAt:Date.now()},typeof t.startedAt==`number`&&t.startedAt>0?t.startedAt:void 0),$t(e,n)}else if(t.type===`agent_output`||t.type===`agent_chunk`){if(I())return;let e=typeof t.traceRunId==`string`&&t.traceRunId?t.traceRunId:null;if(Zt(e))return;rn(e);let n=t.text||``;if(e&&typeof t.textLen==`number`){if(t.textLen<=q){t.sseReplay!==!0&&t.textLen<q&&(console.warn(`[ws] live agent_output behind applied cursor — resync (${t.textLen} < ${q})`),q=t.textLen);return}let e=t.textLen-q;e<n.length&&(n=n.slice(-e)),q=t.textLen}++J,_e(n)}else if(t.type===`agent_status`){if(!t.running&&I())return;t.running&&I()&&pe(),++J,t.running===void 0?x(t.status||`idle`):x(t.running?`running`:`idle`),t.agentId&&t.phase&&(Kt[t.agentId]={phase:t.phase,phaseLabel:t.phaseLabel||``},a(()=>import(`./employees-BQaJNp-u.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0])))}else if(t.type===`bgtask_update`)a(()=>import(`./bgtask-badge-Ch88fnhf.js`).then(e=>e.applyBgtaskUpdate(t)),__vite__mapDeps([0])).catch(()=>{});else if(t.type===`queue_update`)C(t.pending||0),Array.isArray(t.queued)&&Qe(t.queued),Z(`queue_update`).catch(()=>{});else if(t.type===`agent_retry`){let e=Number(t.delay??0),n=t.reason,r=o(String(n||`429`));E(s(e>0?`ws.retry`:`ws.retryNow`,{cli:o(t.cli||``),reason:r,delay:e}),`tool-activity`)}else if(t.type===`agent_fallback`)E(s(`ws.fallback`,{from:o(t.from||``),to:o(t.to||``)}),`tool-activity`);else if(t.type===`agent_smoke`)E(`${f.warning} ${o(t.cli||`agent`)}: smoke response detected — auto-continuing`,`tool-activity`);else if(t.type===`goal_done`)e.activeGoal=null,Vn(),E(`🎯 Goal completed${t.source===`ai_output`?` (detected from AI output)`:``}`,`tool-activity`);else if(t.type===`goal_cancel`)e.activeGoal=null,Vn(),E(`🎯 Goal cancelled`,`tool-activity`);else if(t.type===`schedule_wakeup`)E(`⏰ Wakeup scheduled in ${t.delaySeconds}s — ${o(String(t.reason||``))}`,`tool-activity`);else if(t.type===`goal_continuation_limit`)E(`⚠️ Goal continuation limit reached (${t.attempts} attempts)`,`tool-activity`);else if(t.type===`goal_continuation`)E(`🎯 Active goal — auto-continuing`,`tool-activity`);else if(t.type===`agent_done`){if(t.steered===!0){let e=N(t);e&&t.traceRunId&&b({...e,runId:t.traceRunId})}t.steered||I()||gn(t)}else if(t.type===`orchestrate_done`)gn(t);else if(t.type===`clear`){++J,ue(),dn(),oe(e.activityIdentity),d(),he(),m().clear();let t=document.getElementById(`chatMessages`);t&&(t.innerHTML=``),vn(),O(e.activityIdentity?.sessionId??null,new Set),a(()=>import(`./idb-cache-CFBnPfHz.js`).then(e=>e.clearScopedCache()),[]).catch(()=>{})}else if(t.type===`session_reset`)E(`${f.refresh} Session reset — history preserved`,`tool-activity`);else if(t.type===`agent_added`||t.type===`agent_updated`||t.type===`agent_deleted`)a(()=>import(`./employees-BQaJNp-u.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0]));else if(t.type===`heartbeat_pending`){let e={pending:t.pending||0,deferredPending:t.deferredPending||0};t.reason!==void 0&&(e.reason=t.reason),t.policy!==void 0&&(e.policy=t.policy),t.jobId!==void 0&&(e.jobId=t.jobId),t.jobName!==void 0&&(e.jobName=t.jobName),Nn(e)}else if(t.type===`orc_state`)sr(t);else if(t.type===`memory_status`)a(()=>import(`./memory-Bk_cb3sw.js`).then(e=>e.refreshMemorySidebar()),__vite__mapDeps([0]));else if(t.type===`steer_started`){let e=N(t);if(e&&t.traceRunId&&b({...e,runId:t.traceRunId}),t.mode===`native-input`||t.mode===`cancel-reprompt`||K&&v(K))return;ve(),nn(null),P(``),x(`steering`)}else if(t.type===`new_message`&&(t.source===`telegram`||t.source===`discord`||t.source===`slack`||t.source===`bgtask`||t.source===`cli`||t.source===`goal`||t.external===!0||t.fromQueue===!0)){let e=t.role===`assistant`?`agent`:t.role||`user`,n=t.content||``,r=t.cli;a(()=>import(`./message-history-GAtF_wbZ.js`).then(i=>{if(i.historyReloadInFlight()){i.loadMessages().then(()=>i.loadMessages()).catch(e=>console.warn(`[ws] new_message reload after in-flight failed`,e));return}S(e,n,r,{...t.steered===void 0?{}:{steered:t.steered}})}),__vite__mapDeps([0]))}else t.type===`system_notice`?E(`ℹ️ ${o(t.text||``)}`,`tool-activity`):t.type===`replay_gap`?Yn():t.type===`worker_stalled`?E(`⚠️ Worker stalled: ${o(t.employeeName||t.agentId||``)}`,`tool-activity`):t.type===`steer_context_lost`?E(`⚠️ 이전 턴의 진행 내용을 살리지 못했습니다 — 새 턴은 그 맥락 없이 시작합니다.`,`tool-activity`):t.type===`worker_disconnected`?E(`🔌 Worker disconnected: ${o(t.agentId||``)} (exit ${o(String(t.exitCode??`?`))})`,`tool-activity`):t.type===`worker_timeout`?E(`⏱️ Worker timed out: ${o(t.employeeName||t.agentId||``)}`,`tool-activity`):t.type===`alert_escalation`?E(o(t.message||``),`tool-activity`):t.type===`schedule_wakeup_failed`?E(`⚠️ Wakeup failed — ${o(String(t.reason||``))}: ${o(String(t.error||``))}`,`tool-activity`):t.type===`goal_continuation_failed`?E(`⚠️ Goal continuation failed: ${o(String(t.error||``))}`,`tool-activity`):t.type===`settings_change`?An(t):t.type===`session_list`?c(t):(t.type===`session_switched`||t.type===`session_created`)&&(ue(),X(),dn(),U.invalidateIdentity(),window.location.reload())}function sr(e){let t=++Gn;Wn.then(()=>{t===Gn&&Ft(e.scope,on)&&(Hn(typeof e.state==`string`?e.state:`IDLE`,e.title),Pn({taskAnchor:e.taskAnchor||null,resolvedSelection:e.resolvedSelection||null,interview:e.interview||null}),zn(e.buildBudget||null,typeof e.state==`string`?e.state:`IDLE`))})}function cr(e){return Kt[e]||null}var lr=`sidebarState`,ur=900,dr=768;function fr(){return window.innerWidth<=dr}function pr(){document.body.classList.remove(`left-expanded`,`right-expanded`)}function mr(e){let t=`${e}-expanded`,n=e===`left`?`right-expanded`:`left-expanded`,r=!document.body.classList.contains(t);document.body.classList.remove(n),document.body.classList.toggle(t,r)}function hr(){let e={};try{e=JSON.parse(localStorage.getItem(lr)||`{}`)}catch{}e.left&&document.body.classList.add(`left-collapsed`),e.right&&document.body.classList.add(`right-collapsed`);let t=fr();document.getElementById(`toggleLeft`)?.addEventListener(`click`,_r),document.getElementById(`toggleRight`)?.addEventListener(`click`,vr),window.addEventListener(`resize`,()=>{let e=fr();if(window.innerWidth>ur){pr();let e={};try{e=JSON.parse(localStorage.getItem(lr)||`{}`)}catch{}document.body.classList.toggle(`left-collapsed`,!!e.left),document.body.classList.toggle(`right-collapsed`,!!e.right)}else document.body.classList.remove(`left-collapsed`,`right-collapsed`),e!==t&&pr();t=e,xr()}),window.innerWidth<=ur&&(document.body.classList.remove(`left-collapsed`,`right-collapsed`),fr()&&pr()),xr()}function gr(){return window.innerWidth<=ur}function _r(){gr()?mr(`left`):document.body.classList.toggle(`left-collapsed`),Sr(),xr()}function vr(){gr()?mr(`right`):document.body.classList.toggle(`right-collapsed`),br()&&document.getElementById(`tabAgents`)?.classList.contains(`active`)&&a(()=>import(`./employees-BQaJNp-u.js`).then(e=>e.loadEmployees(!0)),__vite__mapDeps([0])),Sr(),xr()}function yr(){return gr()?document.body.classList.contains(`left-expanded`):!document.body.classList.contains(`left-collapsed`)}function br(){return gr()?document.body.classList.contains(`right-expanded`):!document.body.classList.contains(`right-collapsed`)}function xr(){let e=document.getElementById(`toggleLeft`),t=document.getElementById(`toggleRight`);e&&(e.innerHTML=yr()?f.chevronLeft:f.chevronRight),t&&(t.innerHTML=br()?f.chevronRight:f.chevronLeft)}function Sr(){localStorage.setItem(lr,JSON.stringify({left:document.body.classList.contains(`left-collapsed`),right:document.body.classList.contains(`right-collapsed`)}))}export{Kn as a,Z as c,lt as d,je as f,vr as i,Pt as l,br as n,cr as o,_r as r,qn as s,hr as t,Mt as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./state-Dl-xxPoS.js";import{i as t}from"./api-CUtiCd2-.js";import{A as n,O as r,P as i}from"./render-
|
|
1
|
+
import{t as e}from"./state-Dl-xxPoS.js";import{i as t}from"./api-CUtiCd2-.js";import{A as n,O as r,P as i}from"./render-Dp07lZAJ.js";import{a,t as o}from"./icons-CVkqyECl.js";var s=[`productivity`,`communication`,`devtools`,`ai-media`,`utility`,`smarthome`,`automation`];function c(e,t){return!t||[e.id,e.name,e.description,e.category,e.requires?.env?.join(` `),e.requires?.bins?.join(` `),e.install].filter(Boolean).join(` `).toLowerCase().includes(t)}async function l(){try{let t=await n(`/api/skills`);e.allSkills=await t.json(),u()}catch{let e=document.getElementById(`skillsList`);e&&(e.innerHTML=`<div style="color:var(--text-dim);font-size:11px">${i(`skill.loadFail`)}</div>`)}}function u(){let t=document.getElementById(`skillsList`),n=document.getElementById(`skillsCount`);if(!t||!n)return;let l=e.allSkills,u=l;e.currentSkillFilter===`installed`?u=l.filter(e=>e.enabled):e.currentSkillFilter===`other`?u=l.filter(e=>!s.includes(e.category||``)):e.currentSkillFilter!==`all`&&(u=l.filter(t=>t.category===e.currentSkillFilter));let d=e.currentSkillSearch.trim().toLowerCase();u=u.filter(e=>c(e,d));let f=l.filter(e=>e.enabled).length;if(n.textContent=d?i(`skill.countFiltered`,{shown:u.length,active:f,total:l.length}):i(`skill.count`,{active:f,total:l.length}),!u.length){t.innerHTML=`<div class="skill-empty">${r(i(`skill.search.empty`))}</div>`;return}t.innerHTML=u.map(e=>{let t=[];return e.requires?.env&&t.push(`${o.key} `+e.requires.env.map(e=>r(e)).join(`, `)),e.requires?.bins&&t.push(`${o.settings} `+e.requires.bins.map(e=>r(e)).join(`, `)),e.install&&t.push(r(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?a(e.emoji):o.tool}</span>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./skills-CKUcEN9m.js";export{e as loadSkills};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./slash-commands-D34GgHFX.js";export{e as loadCommands};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./api-CUtiCd2-.js";import{O as t,P as n}from"./render-
|
|
1
|
+
import{n as e}from"./api-CUtiCd2-.js";import{O as t,P as n}from"./render-Dp07lZAJ.js";import{t as r}from"./locale-B9w_kUtW.js";var i={activeCli:o(`activeCli`,2,1,2,2,1,3),model:o(`model`,2,1,1,2,1,2),effort:o(`effort`,2,1,1),permissions:o(`permissions`,2,1,1),flushAgent:o(`flushAgent`,2,1,1,2,1,3),employees:o(`employees`,3,3,2,4,1,2),skills:o(`skills`,2,1,1,4,1,3),activeChannel:o(`activeChannel`,2,1,1),telegram:{...o(`telegram`,2,1,2,8),docLinks:[{url:`https://t.me/BotFather`,labelKey:`help.telegram.link.botfather`},{url:`https://core.telegram.org/bots/tutorial`,labelKey:`help.telegram.link.docs`}]},discord:{...o(`discord`,2,1,2,9),docLinks:[{url:`https://discord.com/developers/applications`,labelKey:`help.discord.link.portal`},{url:`https://discord.com/developers/docs/getting-started`,labelKey:`help.discord.link.docs`}]},slack:{...o(`slack`,2,1,2,9),docLinks:[{url:`https://api.slack.com/apps`,labelKey:`help.slack.link.portal`},{url:`https://docs.slack.dev/apis/events-api/using-socket-mode/`,labelKey:`help.slack.link.docs`}]},fallbackOrder:o(`fallbackOrder`,2,1,1,2,1,3),mcp:o(`mcp`,2,1,1,4,1,5),memory:o(`memory`,2,1,2,4,1,2),stt:o(`stt`,2,1,1),promptTemplates:o(`promptTemplates`,2,1,1),chatInput:o(`chatInput`,3,2,2),orchestration:o(`orchestration`,3,2,2,8,1,8),attachments:o(`attachments`,3,2,2),diagrams:o(`diagrams`,3,2,2),keyboardShortcuts:o(`keyboardShortcuts`,3,2,2,3,2,3),session:o(`session`,3,1,2,8,1,9),cliTools:o(`cliTools`,3,1,2,6,1,9),agentControl:o(`agentControl`,3,1,2,6,1,6),goals:o(`goals`,3,1,2,10,1,25)};function a(e){return typeof e==`string`&&Object.prototype.hasOwnProperty.call(i,e)}function o(e,t,n,r,i=2,a=1,o=0){return{titleKey:`help.${e}.title`,introKey:`help.${e}.intro`,effectKey:`help.${e}.effect`,useWhenKeys:s(`help.${e}.use`,t),howToKeys:s(`help.${e}.howTo`,i),exampleKeys:s(`help.${e}.example`,a),avoidWhenKeys:s(`help.${e}.avoid`,n),relatedKeys:s(`help.${e}.related`,r),...o>0?{subcmdKeys:s(`help.${e}.subcmd`,o)}:{}}}function s(e,t){return Array.from({length:t},(t,n)=>`${e}.${n+1}`)}var c=!1,l=null,u=null,d=null,f=null,p=null,m=!1;function h(){c||(c=!0,document.addEventListener(`click`,v),document.addEventListener(`keydown`,y,!0))}function g(e,t=null,n=[e]){if(!i[e]){console.warn(`[help-dialog] unknown topic:`,e);return}b(),p=t,x(e,T(n,e)),l?.classList.add(`open`),l?.setAttribute(`aria-hidden`,`false`),m=!0,requestAnimationFrame(()=>f?.focus())}function _(){if(!m)return;l?.classList.remove(`open`),l?.setAttribute(`aria-hidden`,`true`),m=!1;let e=p;p=null,e?.focus()}function v(e){let t=e.target?.closest(`[data-help-topic]`);if(!t)return;let n=t.getAttribute(`data-help-topic`);if(!a(n)){console.warn(`[help-dialog] invalid topic:`,n);return}e.preventDefault(),g(n,t,w(t.getAttribute(`data-help-topics`),n))}function y(e){m&&e.key===`Escape`&&(e.preventDefault(),e.stopImmediatePropagation(),_())}function b(){if(l&&u&&d&&f)return;l=document.createElement(`div`),l.id=`helpDialog`,l.className=`modal-overlay help-dialog-overlay`,l.setAttribute(`role`,`presentation`),l.setAttribute(`aria-hidden`,`true`),l.addEventListener(`click`,e=>{e.target===l&&_()});let e=document.createElement(`div`);e.className=`modal-box help-dialog-box`,e.setAttribute(`role`,`dialog`),e.setAttribute(`aria-modal`,`true`),e.setAttribute(`aria-labelledby`,`helpDialogTitle`),e.addEventListener(`click`,e=>e.stopPropagation());let t=document.createElement(`div`);t.className=`modal-header help-dialog-header`,u=document.createElement(`span`),u.id=`helpDialogTitle`,f=document.createElement(`button`),f.type=`button`,f.className=`btn-modal-close help-dialog-close`,f.setAttribute(`aria-label`,n(`help.close`)),f.textContent=`x`,f.addEventListener(`click`,()=>_()),d=document.createElement(`div`),d.className=`help-dialog-body`;let r=document.createElement(`div`);r.className=`modal-footer help-dialog-footer`;let i=document.createElement(`button`);i.type=`button`,i.className=`btn-save help-dialog-done`,i.textContent=n(`help.close`),i.addEventListener(`click`,()=>_()),t.append(u,f),r.append(i),e.append(t,d,r),l.append(e),document.body.append(l)}function x(e,t=[e]){if(!u||!d||!f)return;let r=i[e];u.textContent=n(r.titleKey),f.setAttribute(`aria-label`,n(`help.close`)),d.replaceChildren();let a=document.createElement(`div`);if(a.className=`help-dialog-content`,S(a,r),t.length<=1){d.append(a);return}let o=document.createElement(`div`);o.className=`help-dialog-layout`,o.append(C(t,e),a),d.append(o)}function S(e,t){t.docLinks?.length&&E(e,t.docLinks),D(e,n(`help.section.what`),n(t.introKey)),D(e,n(`help.section.effect`),n(t.effectKey),`help-effect-text`),O(e,n(`help.section.useWhen`),t.useWhenKeys),A(e,n(`help.section.howTo`),t.howToKeys),O(e,n(`help.section.example`),t.exampleKeys,!1,`help-example-list`),t.avoidWhenKeys?.length&&O(e,n(`help.section.avoidWhen`),t.avoidWhenKeys),t.subcmdKeys?.length&&j(e,n(`help.section.commands`),t.subcmdKeys),t.relatedKeys?.length&&O(e,n(`help.section.related`),t.relatedKeys,!0)}function C(e,t){let r=document.createElement(`nav`);r.className=`help-dialog-nav`,r.setAttribute(`aria-label`,n(`help.section.related`));for(let a of e){let o=i[a],s=document.createElement(`button`);s.type=`button`,s.className=`help-dialog-nav-item`,s.textContent=n(o.titleKey),a===t&&(s.classList.add(`active`),s.setAttribute(`aria-current`,`page`)),s.addEventListener(`click`,()=>x(a,e)),r.append(s)}return r}function w(e,t){return T(e?.split(/[\s,]+/).filter(Boolean)??[],t)}function T(e,t){let n=[];for(let t of e)a(t)&&!n.includes(t)&&n.push(t);return n.includes(t)||n.unshift(t),n}function E(e,t){let r=document.createElement(`section`);r.className=`help-dialog-section help-doc-links`;let i=document.createElement(`nav`);i.className=`help-doc-links-nav`;for(let e of t){let t=document.createElement(`a`);t.href=e.url,t.target=`_blank`,t.rel=`noopener noreferrer`,t.className=`help-doc-link`,t.textContent=n(e.labelKey);let r=document.createElement(`span`);r.className=`help-doc-link-icon`,r.textContent=`↗`,t.append(r),i.append(t)}r.append(i),e.append(r)}function D(e,t,n,r){let i=k(t),a=document.createElement(`p`);r&&(a.className=r),a.textContent=n,i.append(a),e.append(i)}function O(e,t,r,i=!1,a){let o=k(t),s=document.createElement(`ul`);s.className=a??(i?`help-related-list`:`help-dialog-list`);for(let e of r){let t=document.createElement(`li`);t.textContent=n(e),s.append(t)}o.append(s),e.append(o)}function k(e){let t=document.createElement(`section`);t.className=`help-dialog-section`;let n=document.createElement(`h3`);return n.textContent=e,t.append(n),t}function A(e,t,r){let i=k(t),a=document.createElement(`ol`);a.className=`help-dialog-list help-howto-list`;for(let e of r){let t=document.createElement(`li`);t.textContent=n(e),a.append(t)}i.append(a),e.append(i)}function j(e,t,r){let i=k(t),a=document.createElement(`dl`);a.className=`help-subcmd-list`;for(let e of r){let t=n(e),r=t.indexOf(` — `),i=r>=0?t.slice(0,r):t,o=r>=0?t.slice(r+3):``,s=document.createElement(`dt`);s.className=`help-subcmd-cmd`;let c=document.createElement(`code`);c.textContent=i,s.append(c);let l=document.createElement(`dd`);l.className=`help-subcmd-desc`,l.textContent=o,a.append(s,l)}i.append(a),e.append(i)}var M={mcp:`mcp`,memory:`memory`,model:`model`,effort:`effort`,cli:`activeCli`,skill:`skills`,employee:`employees`,orchestrate:`orchestration`,pabcd:`orchestration`,flush:`flushAgent`,fallback:`fallbackOrder`,prompt:`promptTemplates`,browser:`mcp`,status:`activeCli`,steer:`chatInput`,clear:`session`,compact:`session`,reset:`session`,purge:`session`,new:`session`,switch:`session`,sw:`session`,sessions:`session`,ss:`session`,version:`cliTools`,project:`cliTools`,proj:`cliTools`,ide:`cliTools`,file:`cliTools`,forward:`agentControl`,thought:`agentControl`,goal:`goals`,goalplan:`goals`,gd:`goals`,plan:`goals`,interview:`goals`,deliberate:`goals`,planaudit:`goals`,review:`goals`,search:`mcp`,team:`goals`,task:`goals`,help:`keyboardShortcuts`,h:`keyboardShortcuts`,commands:`keyboardShortcuts`,cmd:`keyboardShortcuts`,fork:`session`,quit:`session`,q:`session`,exit:`session`,telegram:`telegram`,discord:`discord`,slack:`slack`,stt:`stt`,attachments:`attachments`,diagrams:`diagrams`};function N(e){let t=e.replace(/^\//,``).trim().split(/\s+/);if(t.length<2||t[t.length-1].toLowerCase()!==`info`)return!1;let n=M[t[0].toLowerCase()];return n?(g(n),!0):!1}var P=[],F=[],I=-1,L=!1,R=null;function z(e){let t=String(e||``).slice(1).trim().split(/\s+/)[0]||``;return t.includes(`/`)||t.includes(`\\`)}var B=()=>document.getElementById(`cmdDropdown`),V=()=>document.getElementById(`chatInput`);function H(e){let t=String(e||``).toLowerCase();return P.filter(e=>`/${e.name}`.startsWith(t))}function U(e){let t=e.workflow?.workflowArgs||[];return t.length?t.map(e=>e.required?`<${e.name}>`:`[${e.name}]`).join(` `):e.args||``}function W(e){let n=e.workflow;return n?`<span class="cmd-meta">
|
|
2
2
|
<span class="cmd-chip">${t(n.phase)}</span>
|
|
3
3
|
<span class="cmd-chip cmd-risk-${t(n.risk)}">${t(n.risk)}</span>
|
|
4
4
|
<span class="cmd-chip">${t(n.output)}</span>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./bounded-api-DdpT93LB.js";import{O as t}from"./render-
|
|
1
|
+
import{n as e}from"./bounded-api-DdpT93LB.js";import{O as t}from"./render-Dp07lZAJ.js";import{r as n}from"./provider-icons-Bge6teOj.js";var r=80,i=16777216,a=``,o=0,s=0,c=!1,l=null,u=0,d=!1,f=0,p=null,m=null,h=null,g=null,_=null;function v(e){return e.eventType||e.event_type||`event`}function y(e,t=a){return e===f&&t===a}function b(e){return m?e+(e.includes(`?`)?`&`:`?`)+new URLSearchParams({session:m}):e}async function x(t,n){let r=await e(t,{method:`GET`},n,i);if(r&&typeof r==`object`&&`ok`in r){if(r.ok!==!0||!(`data`in r))throw Error(`trace_unavailable`);return r.data}if(!r||typeof r!=`object`)throw Error(`trace_unavailable`);return r}function S(){let e=document.getElementById(`traceDrawerOverlay`);return e||(e=document.createElement(`div`),e.id=`traceDrawerOverlay`,e.className=`trace-drawer-overlay`,e.innerHTML=`<aside class="trace-drawer" role="dialog" aria-modal="true" aria-labelledby="traceDrawerTitle">
|
|
2
2
|
<header class="trace-drawer-header">
|
|
3
3
|
<div><p class="trace-drawer-kicker">Raw trace</p><h2 id="traceDrawerTitle">Trace</h2></div>
|
|
4
4
|
<button class="trace-drawer-close" type="button" aria-label="Close trace drawer">×</button>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{p as e}from"./iframe-renderer-Bj1JolO8.js";import{I as t,s as n}from"./message-history-D2vniu04.js";import{r}from"./ui-vm2iuLcS.js";export{r as cleanupToolActivity,n as loadMessages,e as reconcileChatBottomAfterRestore,t as updateQueueBadge};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-DSSkXCir.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./state-Dl-xxPoS.js";import{t}from"./preload-helper-CfbQpVni.js";import{E as n,T as r,k as i,t as a}from"./render-CdATJ4wM.js";import{a as o,n as s}from"./icons-CVkqyECl.js";import{A as c,C as l,D as u,N as d,O as f,S as p,_ as ee,b as m,k as h,m as g,t as _,v,w as y,x as b}from"./iframe-renderer-CLqxxRj1.js";import{B as x,F as S,G as C,H as w,J as T,K as E,L as te,P as ne,Q as D,R as re,U as ie,V as O,W as k,Y as A,Z as j,a as ae,l as oe,q as M,z as N}from"./message-history-BhiEuMLw.js";import{c as se}from"./idb-cache-BRpjf_a8.js";var P=2e3,F=80,ce=400;function le(e){if(e<=P)return F;let t=e/P*F;return Math.min(ce,Math.round(t))}function I(e){return{chunks:[],fullText:``,textDirty:!1,element:e,pendingRAF:null,isFinalized:!1,lastRenderTime:0}}function ue(e,t=``){let n=I(e);return t?(n.chunks=[t],n.fullText=t,n.textDirty=!1,n.element.innerHTML=a(t,!0)+`<span class="stream-cursor" aria-hidden="true"></span>`):n.element.innerHTML=`<span class="stream-cursor" aria-hidden="true"></span>`,n}function L(e){return e.textDirty&&=(e.fullText=e.chunks.join(``),!1),e.fullText}function R(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=L(e);n.length<P||t-e.lastRenderTime>le(n.length)?(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(L(e),!0)+`<span class="stream-cursor" aria-hidden="true"></span>`,e.lastRenderTime=performance.now())})}))}function z(e,t=!1){e.isFinalized=!0,e.pendingRAF&&=(cancelAnimationFrame(e.pendingRAF),null);let n=L(e);return t||(e.element.innerHTML=a(n)),n}function B(e){return typeof e.traceSeq==`number`&&Number.isFinite(e.traceSeq)&&e.traceSeq>0}function V(e,t){return!!t.traceRunId&&!!e.traceRunId&&t.traceRunId===e.traceRunId&&B(t)&&B(e)&&t.traceSeq===e.traceSeq&&t.type===e.type&&t.label===e.label&&!!t.isEmployee==!!e.isEmployee}function H(e,t){return t.stepRef&&e.stepRef===t.stepRef?!0:V(e,t)}function U(e,t,n={}){return[...e].reverse().filter(e=>n.includeDone||e.status===`running`).find(e=>H(e,t))??null}function de(e,t){let n=e.filter(e=>e.status===`running`&&!e.stepRef&&e.label===t.label&&e.type===t.type&&!!e.isEmployee==!!t.isEmployee);return n.length===1?n[0]:null}function fe(e,t){let n=[...e].reverse().filter(e=>e.status===`running`);return U(n,t)||de(n,t)}function pe(){e.currentProcessBlock&&u(e.currentProcessBlock),e.currentAgentDiv instanceof HTMLElement&&u(e.currentAgentDiv),D(),c(),e.currentAgentDiv=null,e.currentProcessBlock=null,q=null}var W=0;function me(){W=Date.now()}function he(){W=0}function ge(){return Date.now()-W<8e3}function G(e){for(let t of document.querySelectorAll(`.msg-user`))if(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING)return!0;return!1}function K(){let t=e.currentAgentDiv&&e.currentAgentDiv.isConnected?e.currentAgentDiv:null;return t?G(t)?(e.currentAgentDiv=null,e.currentProcessBlock=null,q=null,null):t:null}function _e(){let e=Array.from(document.querySelectorAll(`.msg-agent`)).at(-1)??null;return!e||G(e)?null:e}function ve(t,n){k();let r=K();if(r||(r=w(`agent`,``),e.currentAgentDiv=r,e.currentProcessBlock=null),M(r),!e.currentProcessBlock){let t=r.querySelector(`.agent-body`);t&&(e.currentProcessBlock=C(r)),!e.currentProcessBlock&&t&&(T(r),e.currentProcessBlock=p(t))}if(n&&e.currentProcessBlock&&!e.currentProcessBlock.startedAt&&(e.currentProcessBlock.startedAt=n),e.currentProcessBlock){let n=t.rawIcon||t.icon,r=t.status||s(t.icon)||`running`;if(r===`done`||r===`error`){let i=fe(e.currentProcessBlock.steps,t);if(i){t.icon=o(t.icon);let a=t.type===`thinking`?h(i.id,t.detail):y(i.id,t.detail);f(e.currentProcessBlock,i.id,{...i,...t,id:i.id,rawIcon:n,detail:a,detailPreview:a,label:t.label||i.label,status:r,startTime:i.startTime}),g();return}if(t.stepRef&&(r===`done`||r===`error`)){let i=[...e.currentProcessBlock.steps].reverse().find(e=>e.stepRef===t.stepRef&&(e.status===`done`||e.status===`error`));if(i){t.icon=o(t.icon);let a=t.type===`thinking`?h(i.id,t.detail):y(i.id,t.detail);f(e.currentProcessBlock,i.id,{...i,...t,id:i.id,rawIcon:n,status:r,detail:a,detailPreview:a,startTime:i.startTime}),g();return}}}if(t.stepRef&&r===`running`){let r=[...e.currentProcessBlock.steps].reverse().find(e=>e.stepRef===t.stepRef&&e.status===`running`);if(r){t.rawIcon=n,t.icon=o(t.icon);let i=h(r.id,t.detail);f(e.currentProcessBlock,r.id,{...r,...t,id:r.id,rawIcon:n,status:`running`,detail:i,detailPreview:i,label:t.label||r.label,startTime:r.startTime}),g();return}}let i=U(e.currentProcessBlock.steps,t,{includeDone:!0});if(i){t.rawIcon=n,t.icon=o(t.icon);let a=t.detail||``,s=l(i.id)||i.detail||i.detailPreview||``,c=a.length>=s.length?a:s,u=h(i.id,c),d=(i.status===`done`||i.status===`error`)&&r===`running`?i.status:r;f(e.currentProcessBlock,i.id,{...i,...t,id:i.id,rawIcon:n,status:d,detail:u,detailPreview:u,label:t.label||i.label,startTime:i.startTime}),g();return}if(t.detail){let n=[...e.currentProcessBlock.steps].reverse().find(e=>e.status===`running`&&e.label===t.label&&e.type===t.type&&!!e.isEmployee==!!t.isEmployee&&!e.detail);if(n){f(e.currentProcessBlock,n.id,t),g();return}}t.rawIcon=n,t.icon=o(t.icon),v(e.currentProcessBlock,t)}g()}var q=null,J=`data-active-run-hydrated`;function Y(e){document.querySelectorAll(`[${J}="true"]`).forEach(t=>{e&&t===e||t.remove()})}function ye(e){let t=K()??_e();Y(t);let n=t||w(`agent`,``,e||null);return n.setAttribute(J,`true`),n}function be(e,t){let n=l(e.id)||e.detail||e.detailPreview||``,r=t.detail||t.detailPreview||``;return r.length>=n.length?r:n}function X(e){return e.stepRef?!0:!!e.traceRunId&&typeof e.traceSeq==`number`&&Number.isFinite(e.traceSeq)&&e.traceSeq>0}function xe(e,t){let n=e.steps.filter(e=>!X(e)),r=0,i=!0;for(let a of t){let t=e.steps.find(e=>H(e,a))??null;if(!t&&!X(a)&&i){let e=n[r]??null;e?e.type===a.type&&!!e.isEmployee==!!a.isEmployee?(t=e,r++):i=!1:r++}if(!t){let n=e.steps.filter(e=>e.label===a.label&&e.type===a.type&&!!e.isEmployee==!!a.isEmployee);t=n.length===1?n[0]:null}if(!t){if(v(e,a),!X(a)&&i){let t=e.steps[e.steps.length-1];t&&n.push(t)}continue}let o=h(t.id,be(t,a));f(e,t.id,{...t,...a,id:t.id,detail:o,detailPreview:o,label:a.label||t.label})}}function Se(e=[]){document.querySelectorAll(`[data-queued-overlay="true"]`).forEach(e=>e.remove())}var Z=``;function Ce(e){let t=Array.isArray(e.toolLog)?e.toolLog:[],n=t.map(e=>`${e.stepRef||``}~${e.traceRunId||``}~${e.traceSeq??``}~${e.status||``}~${e.label||``}~${(e.detail||``).length}`).join(`|`);return`${e.traceRunId||``}:${e.cli||``}:${(e.text||``).length}:${t.length}:${n}`}function we(t){if(!t?.running){Z=``,Y();return}let n=Ce(t);if(n===Z&&K())return;D(),k(),e.currentAgentDiv=ye(t.cli||null);let r=e.currentAgentDiv.querySelector(`.agent-body`),i=N(t.toolLog||[]);M(e.currentAgentDiv),e.currentProcessBlock=C(e.currentAgentDiv),r&&i.length?(e.currentProcessBlock||(T(e.currentAgentDiv),e.currentProcessBlock=p(r)),t.startedAt&&(e.currentProcessBlock.startedAt=t.startedAt),xe(e.currentProcessBlock,O(i,t.startedAt))):e.currentProcessBlock=C(e.currentAgentDiv);let a=e.currentAgentDiv.querySelector(`.msg-content`);a&&(q=ue(a,t.text||``)),Z=n}function Q(t){if(!t)return;k(),K()||(e.currentAgentDiv=w(`agent`,``),q=null);let n=e.currentAgentDiv?.querySelector(`.msg-content`);n&&(q||=I(n),R(q,t)),g()}var $=0;function Te(e){e.querySelectorAll(`.mermaid-pending`).forEach(e=>{delete e.dataset.mermaidQueued,delete e.dataset.mermaidQueuedAt})}function Ee(e,t){let o=e.querySelector(`.msg-content`);if(!o)return;let s=i(t);(o.getAttribute(`data-raw`)!==s||!s&&o.childNodes.length!==0)&&(r(o),o.innerHTML=s?a(t):``,o.setAttribute(`data-raw`,s),o.classList.remove(`lazy-pending`),_(o),n(o,{immediate:!0}))}function De(t,r,o,s,c,l){let f=o===`present`||o===`absent`,p=Date.now();if(!e.currentAgentDiv&&p-$<500)return;Z=``,D(),k(),e.currentAgentDiv&&M(e.currentAgentDiv);let h=A(e.currentProcessBlock??e.currentAgentDiv,!0),g=N(re(Array.isArray(r)?r:[],h)),v=x(g),y=!!e.currentProcessBlock||!!(e.currentAgentDiv&&E(e.currentAgentDiv));e.currentProcessBlock&&(b(e.currentProcessBlock),e.currentProcessBlock=null);let C=g.length>0;if(t||C||f){(!e.currentAgentDiv||!e.currentAgentDiv.isConnected)&&(e.currentAgentDiv=w(`agent`,``));let r=!!(e.currentAgentDiv.dataset.activityKey||e.currentAgentDiv.dataset.activityAnswerPending||s&&l&&e.currentAgentDiv.dataset.traceRunId===s&&e.currentAgentDiv.dataset.messageSessionId===l);s&&(e.currentAgentDiv.dataset.traceRunId=s),delete e.currentAgentDiv.dataset.activityRecovering,e.currentAgentDiv.removeAttribute(J);let o=e.currentAgentDiv?.querySelector(`.msg-content`),p=q?z(q,!0):``,h=f?t??``:t||p;if(q=null,o&&(o.innerHTML=f&&!h?``:a(h)),C&&e.currentAgentDiv&&!y&&!E(e.currentAgentDiv)){let t=e.currentAgentDiv.querySelector(`.msg-content`);t&&t.insertAdjacentHTML(`beforebegin`,m(O(g),!0))}e.currentAgentDiv&&M(e.currentAgentDiv),o&&o.setAttribute(`data-raw`,i(h)),o&&_(o);let b=ee(),x=!!(b.active&&e.currentAgentDiv&&e.currentAgentDiv.isConnected);if(o&&!x&&n(o,{immediate:!0}),x){let t=e.currentAgentDiv;Te(t),t.querySelectorAll(`.diagram-widget`).forEach(e=>{let t=e,n=t.dataset.widgetHtml,r=t.dataset.widgetId;if(!n&&!r)return;let i=document.createElement(`div`);i.className=`diagram-widget-pending`,r?i.dataset.widgetId=r:n&&(i.dataset.diagramHtml=n),e.replaceWith(i)}),v&&!r?(b.onLazyRender||oe(b),b.appendItem(te({role:`assistant`,content:h,cli:null,tool_log:v,trace_run_id:t.dataset.traceRunId??null},b.count)),u(t),b.scrollToBottom()):(t.dataset.turnIndex=String(b.count),t.dataset.messageId||(t.dataset.messageId=d()),r&&ae(b),b.appendLiveItem(t)),t.remove()}(h||s&&r)&&se({role:`assistant`,content:h,tool_log:v,trace_run_id:e.currentAgentDiv?.dataset.traceRunId??null,timestamp:Date.now(),...c===void 0?{}:{scope:c},...l===void 0?{}:{session_id:l}}).catch(()=>{})}q=null,e.currentAgentDiv=null,$=Date.now(),S(`idle`),ne()}function Oe(e,n){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`),n&&(n.classList.add(`active`),n.setAttribute(`aria-selected`,`true`)),e===`agents`&&t(()=>import(`./employees-DrXQ9oRa.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0])),e===`skills`&&t(()=>import(`./skills-iVr8hW-f.js`).then(e=>e.loadSkills()),__vite__mapDeps([0]))}function ke(){document.getElementById(`tabSettings`)?.classList.contains(`active`)||t(()=>import(`./settings-kHiXb__9.js`).then(e=>e.updateSettings()),__vite__mapDeps([0]))}function Ae(){j({onStatus:ie})}export{De as a,Ae as c,Ee as d,ve as f,he as i,ge as l,Se as n,ke as o,Oe as p,pe as r,we as s,Q as t,me as u};
|
|
2
|
+
import{t as e}from"./state-Dl-xxPoS.js";import{t}from"./preload-helper-CfbQpVni.js";import{E as n,T as r,k as i,t as a}from"./render-Dp07lZAJ.js";import{a as o,n as s}from"./icons-CVkqyECl.js";import{A as c,C as l,D as u,N as d,O as f,S as p,_ as ee,b as m,k as h,m as g,t as _,v,w as y,x as b}from"./iframe-renderer-Bj1JolO8.js";import{B as x,F as S,G as C,H as w,J as T,K as E,L as te,P as ne,Q as D,R as re,U as ie,V as O,W as k,Y as A,Z as j,a as ae,l as oe,q as M,z as N}from"./message-history-D2vniu04.js";import{c as se}from"./idb-cache-BRpjf_a8.js";var P=2e3,F=80,ce=400;function le(e){if(e<=P)return F;let t=e/P*F;return Math.min(ce,Math.round(t))}function I(e){return{chunks:[],fullText:``,textDirty:!1,element:e,pendingRAF:null,isFinalized:!1,lastRenderTime:0}}function ue(e,t=``){let n=I(e);return t?(n.chunks=[t],n.fullText=t,n.textDirty=!1,n.element.innerHTML=a(t,!0)+`<span class="stream-cursor" aria-hidden="true"></span>`):n.element.innerHTML=`<span class="stream-cursor" aria-hidden="true"></span>`,n}function L(e){return e.textDirty&&=(e.fullText=e.chunks.join(``),!1),e.fullText}function R(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=L(e);n.length<P||t-e.lastRenderTime>le(n.length)?(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(L(e),!0)+`<span class="stream-cursor" aria-hidden="true"></span>`,e.lastRenderTime=performance.now())})}))}function z(e,t=!1){e.isFinalized=!0,e.pendingRAF&&=(cancelAnimationFrame(e.pendingRAF),null);let n=L(e);return t||(e.element.innerHTML=a(n)),n}function B(e){return typeof e.traceSeq==`number`&&Number.isFinite(e.traceSeq)&&e.traceSeq>0}function V(e,t){return!!t.traceRunId&&!!e.traceRunId&&t.traceRunId===e.traceRunId&&B(t)&&B(e)&&t.traceSeq===e.traceSeq&&t.type===e.type&&t.label===e.label&&!!t.isEmployee==!!e.isEmployee}function H(e,t){return t.stepRef&&e.stepRef===t.stepRef?!0:V(e,t)}function U(e,t,n={}){return[...e].reverse().filter(e=>n.includeDone||e.status===`running`).find(e=>H(e,t))??null}function de(e,t){let n=e.filter(e=>e.status===`running`&&!e.stepRef&&e.label===t.label&&e.type===t.type&&!!e.isEmployee==!!t.isEmployee);return n.length===1?n[0]:null}function fe(e,t){let n=[...e].reverse().filter(e=>e.status===`running`);return U(n,t)||de(n,t)}function pe(){e.currentProcessBlock&&u(e.currentProcessBlock),e.currentAgentDiv instanceof HTMLElement&&u(e.currentAgentDiv),D(),c(),e.currentAgentDiv=null,e.currentProcessBlock=null,q=null}var W=0;function me(){W=Date.now()}function he(){W=0}function ge(){return Date.now()-W<8e3}function G(e){for(let t of document.querySelectorAll(`.msg-user`))if(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING)return!0;return!1}function K(){let t=e.currentAgentDiv&&e.currentAgentDiv.isConnected?e.currentAgentDiv:null;return t?G(t)?(e.currentAgentDiv=null,e.currentProcessBlock=null,q=null,null):t:null}function _e(){let e=Array.from(document.querySelectorAll(`.msg-agent`)).at(-1)??null;return!e||G(e)?null:e}function ve(t,n){k();let r=K();if(r||(r=w(`agent`,``),e.currentAgentDiv=r,e.currentProcessBlock=null),M(r),!e.currentProcessBlock){let t=r.querySelector(`.agent-body`);t&&(e.currentProcessBlock=C(r)),!e.currentProcessBlock&&t&&(T(r),e.currentProcessBlock=p(t))}if(n&&e.currentProcessBlock&&!e.currentProcessBlock.startedAt&&(e.currentProcessBlock.startedAt=n),e.currentProcessBlock){let n=t.rawIcon||t.icon,r=t.status||s(t.icon)||`running`;if(r===`done`||r===`error`){let i=fe(e.currentProcessBlock.steps,t);if(i){t.icon=o(t.icon);let a=t.type===`thinking`?h(i.id,t.detail):y(i.id,t.detail);f(e.currentProcessBlock,i.id,{...i,...t,id:i.id,rawIcon:n,detail:a,detailPreview:a,label:t.label||i.label,status:r,startTime:i.startTime}),g();return}if(t.stepRef&&(r===`done`||r===`error`)){let i=[...e.currentProcessBlock.steps].reverse().find(e=>e.stepRef===t.stepRef&&(e.status===`done`||e.status===`error`));if(i){t.icon=o(t.icon);let a=t.type===`thinking`?h(i.id,t.detail):y(i.id,t.detail);f(e.currentProcessBlock,i.id,{...i,...t,id:i.id,rawIcon:n,status:r,detail:a,detailPreview:a,startTime:i.startTime}),g();return}}}if(t.stepRef&&r===`running`){let r=[...e.currentProcessBlock.steps].reverse().find(e=>e.stepRef===t.stepRef&&e.status===`running`);if(r){t.rawIcon=n,t.icon=o(t.icon);let i=h(r.id,t.detail);f(e.currentProcessBlock,r.id,{...r,...t,id:r.id,rawIcon:n,status:`running`,detail:i,detailPreview:i,label:t.label||r.label,startTime:r.startTime}),g();return}}let i=U(e.currentProcessBlock.steps,t,{includeDone:!0});if(i){t.rawIcon=n,t.icon=o(t.icon);let a=t.detail||``,s=l(i.id)||i.detail||i.detailPreview||``,c=a.length>=s.length?a:s,u=h(i.id,c),d=(i.status===`done`||i.status===`error`)&&r===`running`?i.status:r;f(e.currentProcessBlock,i.id,{...i,...t,id:i.id,rawIcon:n,status:d,detail:u,detailPreview:u,label:t.label||i.label,startTime:i.startTime}),g();return}if(t.detail){let n=[...e.currentProcessBlock.steps].reverse().find(e=>e.status===`running`&&e.label===t.label&&e.type===t.type&&!!e.isEmployee==!!t.isEmployee&&!e.detail);if(n){f(e.currentProcessBlock,n.id,t),g();return}}t.rawIcon=n,t.icon=o(t.icon),v(e.currentProcessBlock,t)}g()}var q=null,J=`data-active-run-hydrated`;function Y(e){document.querySelectorAll(`[${J}="true"]`).forEach(t=>{e&&t===e||t.remove()})}function ye(e){let t=K()??_e();Y(t);let n=t||w(`agent`,``,e||null);return n.setAttribute(J,`true`),n}function be(e,t){let n=l(e.id)||e.detail||e.detailPreview||``,r=t.detail||t.detailPreview||``;return r.length>=n.length?r:n}function X(e){return e.stepRef?!0:!!e.traceRunId&&typeof e.traceSeq==`number`&&Number.isFinite(e.traceSeq)&&e.traceSeq>0}function xe(e,t){let n=e.steps.filter(e=>!X(e)),r=0,i=!0;for(let a of t){let t=e.steps.find(e=>H(e,a))??null;if(!t&&!X(a)&&i){let e=n[r]??null;e?e.type===a.type&&!!e.isEmployee==!!a.isEmployee?(t=e,r++):i=!1:r++}if(!t){let n=e.steps.filter(e=>e.label===a.label&&e.type===a.type&&!!e.isEmployee==!!a.isEmployee);t=n.length===1?n[0]:null}if(!t){if(v(e,a),!X(a)&&i){let t=e.steps[e.steps.length-1];t&&n.push(t)}continue}let o=h(t.id,be(t,a));f(e,t.id,{...t,...a,id:t.id,detail:o,detailPreview:o,label:a.label||t.label})}}function Se(e=[]){document.querySelectorAll(`[data-queued-overlay="true"]`).forEach(e=>e.remove())}var Z=``;function Ce(e){let t=Array.isArray(e.toolLog)?e.toolLog:[],n=t.map(e=>`${e.stepRef||``}~${e.traceRunId||``}~${e.traceSeq??``}~${e.status||``}~${e.label||``}~${(e.detail||``).length}`).join(`|`);return`${e.traceRunId||``}:${e.cli||``}:${(e.text||``).length}:${t.length}:${n}`}function we(t){if(!t?.running){Z=``,Y();return}let n=Ce(t);if(n===Z&&K())return;D(),k(),e.currentAgentDiv=ye(t.cli||null);let r=e.currentAgentDiv.querySelector(`.agent-body`),i=N(t.toolLog||[]);M(e.currentAgentDiv),e.currentProcessBlock=C(e.currentAgentDiv),r&&i.length?(e.currentProcessBlock||(T(e.currentAgentDiv),e.currentProcessBlock=p(r)),t.startedAt&&(e.currentProcessBlock.startedAt=t.startedAt),xe(e.currentProcessBlock,O(i,t.startedAt))):e.currentProcessBlock=C(e.currentAgentDiv);let a=e.currentAgentDiv.querySelector(`.msg-content`);a&&(q=ue(a,t.text||``)),Z=n}function Q(t){if(!t)return;k(),K()||(e.currentAgentDiv=w(`agent`,``),q=null);let n=e.currentAgentDiv?.querySelector(`.msg-content`);n&&(q||=I(n),R(q,t)),g()}var $=0;function Te(e){e.querySelectorAll(`.mermaid-pending`).forEach(e=>{delete e.dataset.mermaidQueued,delete e.dataset.mermaidQueuedAt})}function Ee(e,t){let o=e.querySelector(`.msg-content`);if(!o)return;let s=i(t);(o.getAttribute(`data-raw`)!==s||!s&&o.childNodes.length!==0)&&(r(o),o.innerHTML=s?a(t):``,o.setAttribute(`data-raw`,s),o.classList.remove(`lazy-pending`),_(o),n(o,{immediate:!0}))}function De(t,r,o,s,c,l){let f=o===`present`||o===`absent`,p=Date.now();if(!e.currentAgentDiv&&p-$<500)return;Z=``,D(),k(),e.currentAgentDiv&&M(e.currentAgentDiv);let h=A(e.currentProcessBlock??e.currentAgentDiv,!0),g=N(re(Array.isArray(r)?r:[],h)),v=x(g),y=!!e.currentProcessBlock||!!(e.currentAgentDiv&&E(e.currentAgentDiv));e.currentProcessBlock&&(b(e.currentProcessBlock),e.currentProcessBlock=null);let C=g.length>0;if(t||C||f){(!e.currentAgentDiv||!e.currentAgentDiv.isConnected)&&(e.currentAgentDiv=w(`agent`,``));let r=!!(e.currentAgentDiv.dataset.activityKey||e.currentAgentDiv.dataset.activityAnswerPending||s&&l&&e.currentAgentDiv.dataset.traceRunId===s&&e.currentAgentDiv.dataset.messageSessionId===l);s&&(e.currentAgentDiv.dataset.traceRunId=s),delete e.currentAgentDiv.dataset.activityRecovering,e.currentAgentDiv.removeAttribute(J);let o=e.currentAgentDiv?.querySelector(`.msg-content`),p=q?z(q,!0):``,h=f?t??``:t||p;if(q=null,o&&(o.innerHTML=f&&!h?``:a(h)),C&&e.currentAgentDiv&&!y&&!E(e.currentAgentDiv)){let t=e.currentAgentDiv.querySelector(`.msg-content`);t&&t.insertAdjacentHTML(`beforebegin`,m(O(g),!0))}e.currentAgentDiv&&M(e.currentAgentDiv),o&&o.setAttribute(`data-raw`,i(h)),o&&_(o);let b=ee(),x=!!(b.active&&e.currentAgentDiv&&e.currentAgentDiv.isConnected);if(o&&!x&&n(o,{immediate:!0}),x){let t=e.currentAgentDiv;Te(t),t.querySelectorAll(`.diagram-widget`).forEach(e=>{let t=e,n=t.dataset.widgetHtml,r=t.dataset.widgetId;if(!n&&!r)return;let i=document.createElement(`div`);i.className=`diagram-widget-pending`,r?i.dataset.widgetId=r:n&&(i.dataset.diagramHtml=n),e.replaceWith(i)}),v&&!r?(b.onLazyRender||oe(b),b.appendItem(te({role:`assistant`,content:h,cli:null,tool_log:v,trace_run_id:t.dataset.traceRunId??null},b.count)),u(t),b.scrollToBottom()):(t.dataset.turnIndex=String(b.count),t.dataset.messageId||(t.dataset.messageId=d()),r&&ae(b),b.appendLiveItem(t)),t.remove()}(h||s&&r)&&se({role:`assistant`,content:h,tool_log:v,trace_run_id:e.currentAgentDiv?.dataset.traceRunId??null,timestamp:Date.now(),...c===void 0?{}:{scope:c},...l===void 0?{}:{session_id:l}}).catch(()=>{})}q=null,e.currentAgentDiv=null,$=Date.now(),S(`idle`),ne()}function Oe(e,n){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`),n&&(n.classList.add(`active`),n.setAttribute(`aria-selected`,`true`)),e===`agents`&&t(()=>import(`./employees-BQaJNp-u.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0])),e===`skills`&&t(()=>import(`./skills-Co7Mr-qP.js`).then(e=>e.loadSkills()),__vite__mapDeps([0]))}function ke(){document.getElementById(`tabSettings`)?.classList.contains(`active`)||t(()=>import(`./settings-WVGhtneN.js`).then(e=>e.updateSettings()),__vite__mapDeps([0]))}function Ae(){j({onStatus:ie})}export{De as a,Ae as c,Ee as d,ve as f,he as i,ge as l,Se as n,ke as o,Oe as p,pe as r,we as s,Q as t,me as u};
|
package/public/dist/index.html
CHANGED
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
<meta name="theme-color" content="#22d3ee">
|
|
22
22
|
<meta name="mobile-web-app-capable" content="yes">
|
|
23
23
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
|
24
|
-
<link rel="icon"
|
|
25
|
-
<link rel="manifest" href="/dist/assets/manifest-
|
|
26
|
-
<link rel="apple-touch-icon" href="/dist/assets/icon-192-
|
|
24
|
+
<link rel="icon" type="image/png" href="/dist/assets/favicon-32-C4u_h46P.png">
|
|
25
|
+
<link rel="manifest" href="/dist/assets/manifest-BgdjNQXm.json">
|
|
26
|
+
<link rel="apple-touch-icon" href="/dist/assets/icon-192-CADbZUeU.png">
|
|
27
27
|
<title>CLI-JAW</title>
|
|
28
28
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
29
29
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
href="https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@400;500;600;700&family=Outfit:wght@400;500;600;700&display=swap"
|
|
32
32
|
rel="stylesheet">
|
|
33
33
|
<!-- Vite handles module bundling in dev (HMR) and production (build) -->
|
|
34
|
-
<script type="module" crossorigin src="/dist/assets/app-
|
|
34
|
+
<script type="module" crossorigin src="/dist/assets/app-ByMfeXp-.js"></script>
|
|
35
35
|
<link rel="stylesheet" crossorigin href="/dist/assets/vendor-render-DSSkXCir.css">
|
|
36
|
-
<link rel="stylesheet" crossorigin href="/dist/assets/app-
|
|
36
|
+
<link rel="stylesheet" crossorigin href="/dist/assets/app-DAJWqs33.css">
|
|
37
37
|
</head>
|
|
38
38
|
|
|
39
39
|
<body>
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
<!-- Left Sidebar -->
|
|
50
50
|
<nav class="sidebar-left" role="navigation" aria-label="Main navigation">
|
|
51
51
|
<button class="sidebar-toggle" id="toggleLeft" title="Collapse" aria-label="Collapse sidebar">◀</button>
|
|
52
|
-
<div class="logo">CLI-JAW</div>
|
|
52
|
+
<div class="logo"><img class="logo-mark" src="/dist/assets/mascot-BPkuMHQQ.png" alt="" width="28" height="28" aria-hidden="true">CLI-JAW</div>
|
|
53
53
|
<span id="orcStateBadge" class="orc-state-badge" style="display:none"></span>
|
|
54
54
|
|
|
55
55
|
<div>
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
<div class="section-title" style="margin-top:12px" data-i18n="sidebar.avatar">아바타</div>
|
|
120
120
|
<div class="avatar-row">
|
|
121
121
|
<div class="avatar-card">
|
|
122
|
-
<div class="avatar-preview agent-icon" id="agentAvatarPreview"
|
|
122
|
+
<div class="avatar-preview agent-icon" id="agentAvatarPreview" aria-hidden="true"></div>
|
|
123
123
|
<span class="avatar-card-label">Agent</span>
|
|
124
124
|
<div class="avatar-card-actions">
|
|
125
125
|
<button class="avatar-action-btn" id="agentAvatarUploadBtn" title="Upload image">
|
|
@@ -220,7 +220,7 @@
|
|
|
220
220
|
</div>
|
|
221
221
|
<div class="chat-messages" id="chatMessages"></div>
|
|
222
222
|
<div class="empty-state" id="emptyState">
|
|
223
|
-
<div class="empty-icon"
|
|
223
|
+
<div class="empty-icon"><img src="/dist/assets/mascot-BPkuMHQQ.png" alt="" width="96" height="96" aria-hidden="true"></div>
|
|
224
224
|
<div class="empty-title">CLI-JAW</div>
|
|
225
225
|
<div class="empty-subtitle">메시지를 입력하세요</div>
|
|
226
226
|
</div>
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<link rel="icon" type="image/png" href="/dist/assets/icon-192-
|
|
6
|
+
<link rel="icon" type="image/png" href="/dist/assets/icon-192-CADbZUeU.png">
|
|
7
7
|
<title>Jaw Manager</title>
|
|
8
8
|
<script src="/manager/theme-boot.js"></script>
|
|
9
|
-
<script type="module" crossorigin src="/dist/assets/manager-
|
|
9
|
+
<script type="module" crossorigin src="/dist/assets/manager-C5cU1joU.js"></script>
|
|
10
10
|
<link rel="stylesheet" crossorigin href="/dist/assets/vendor-render-DSSkXCir.css">
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/dist/assets/settings-embedding-
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/dist/assets/manager-
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/dist/assets/settings-embedding-DhEdT86W.css">
|
|
12
|
+
<link rel="stylesheet" crossorigin href="/dist/assets/manager-BnQHAKk6.css">
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
|
15
15
|
<div id="manager-root"></div>
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Settings</title>
|
|
7
7
|
<script src="/manager/theme-boot.js"></script>
|
|
8
|
-
<script type="module" crossorigin src="/dist/assets/settings-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/dist/assets/settings-embedding-
|
|
8
|
+
<script type="module" crossorigin src="/dist/assets/settings-CA2LQDGh.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/dist/assets/settings-embedding-DhEdT86W.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div id="settings-root"></div>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/public/index.html
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
<meta name="theme-color" content="#22d3ee">
|
|
22
22
|
<meta name="mobile-web-app-capable" content="yes">
|
|
23
23
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
|
24
|
-
<link rel="icon"
|
|
24
|
+
<link rel="icon" type="image/png" href="/icons/favicon-32.png">
|
|
25
25
|
<link rel="manifest" href="/manifest.json">
|
|
26
26
|
<link rel="apple-touch-icon" href="/icons/icon-192.png">
|
|
27
27
|
<title>CLI-JAW</title>
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
<!-- Left Sidebar -->
|
|
62
62
|
<nav class="sidebar-left" role="navigation" aria-label="Main navigation">
|
|
63
63
|
<button class="sidebar-toggle" id="toggleLeft" title="Collapse" aria-label="Collapse sidebar">◀</button>
|
|
64
|
-
<div class="logo">CLI-JAW</div>
|
|
64
|
+
<div class="logo"><img class="logo-mark" src="/icons/mascot.png" alt="" width="28" height="28" aria-hidden="true">CLI-JAW</div>
|
|
65
65
|
<span id="orcStateBadge" class="orc-state-badge" style="display:none"></span>
|
|
66
66
|
|
|
67
67
|
<div>
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
<div class="section-title" style="margin-top:12px" data-i18n="sidebar.avatar">아바타</div>
|
|
132
132
|
<div class="avatar-row">
|
|
133
133
|
<div class="avatar-card">
|
|
134
|
-
<div class="avatar-preview agent-icon" id="agentAvatarPreview"
|
|
134
|
+
<div class="avatar-preview agent-icon" id="agentAvatarPreview" aria-hidden="true"></div>
|
|
135
135
|
<span class="avatar-card-label">Agent</span>
|
|
136
136
|
<div class="avatar-card-actions">
|
|
137
137
|
<button class="avatar-action-btn" id="agentAvatarUploadBtn" title="Upload image">
|
|
@@ -232,7 +232,7 @@
|
|
|
232
232
|
</div>
|
|
233
233
|
<div class="chat-messages" id="chatMessages"></div>
|
|
234
234
|
<div class="empty-state" id="emptyState">
|
|
235
|
-
<div class="empty-icon"
|
|
235
|
+
<div class="empty-icon"><img src="/icons/mascot.png" alt="" width="96" height="96" aria-hidden="true"></div>
|
|
236
236
|
<div class="empty-title">CLI-JAW</div>
|
|
237
237
|
<div class="empty-subtitle">메시지를 입력하세요</div>
|
|
238
238
|
</div>
|
|
@@ -6,6 +6,8 @@ type BadgeNavigator = Navigator & {
|
|
|
6
6
|
const COMPLETION_DEDUPE_MS = 800;
|
|
7
7
|
const BADGE_SIZE = 64;
|
|
8
8
|
const BASE_TITLE_FALLBACK = 'CLI-JAW';
|
|
9
|
+
const MASCOT_FAVICON_SRC = '/icons/favicon-32.png';
|
|
10
|
+
const MASCOT_FALLBACK_COLOR = '#22d3ee';
|
|
9
11
|
|
|
10
12
|
let initialized = false;
|
|
11
13
|
let unreadCount = 0;
|
|
@@ -14,6 +16,7 @@ let faviconLink: HTMLLinkElement | null = null;
|
|
|
14
16
|
let originalFaviconHref = '';
|
|
15
17
|
let createdFaviconLink = false;
|
|
16
18
|
let lastNotifyAt = 0;
|
|
19
|
+
let mascotImage: HTMLImageElement | null = null;
|
|
17
20
|
|
|
18
21
|
function getBadgeNavigator(): BadgeNavigator {
|
|
19
22
|
return navigator as BadgeNavigator;
|
|
@@ -43,6 +46,16 @@ function getOrCreateFaviconLink(): HTMLLinkElement | null {
|
|
|
43
46
|
return link;
|
|
44
47
|
}
|
|
45
48
|
|
|
49
|
+
function ensureMascotImage(): void {
|
|
50
|
+
if (mascotImage) return;
|
|
51
|
+
const img = new Image();
|
|
52
|
+
img.addEventListener('load', () => {
|
|
53
|
+
if (unreadCount > 0) applyUnreadState();
|
|
54
|
+
});
|
|
55
|
+
img.src = MASCOT_FAVICON_SRC;
|
|
56
|
+
mascotImage = img;
|
|
57
|
+
}
|
|
58
|
+
|
|
46
59
|
function renderBadgeFavicon(count: number): string {
|
|
47
60
|
const canvas = document.createElement('canvas');
|
|
48
61
|
canvas.width = BADGE_SIZE;
|
|
@@ -51,10 +64,14 @@ function renderBadgeFavicon(count: number): string {
|
|
|
51
64
|
if (!ctx) return originalFaviconHref;
|
|
52
65
|
|
|
53
66
|
ctx.clearRect(0, 0, BADGE_SIZE, BADGE_SIZE);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
67
|
+
if (mascotImage && mascotImage.complete && mascotImage.naturalWidth > 0) {
|
|
68
|
+
ctx.drawImage(mascotImage, 2, 6, 52, 52);
|
|
69
|
+
} else {
|
|
70
|
+
ctx.beginPath();
|
|
71
|
+
ctx.arc(28, 32, 26, 0, Math.PI * 2);
|
|
72
|
+
ctx.fillStyle = MASCOT_FALLBACK_COLOR;
|
|
73
|
+
ctx.fill();
|
|
74
|
+
}
|
|
58
75
|
|
|
59
76
|
ctx.beginPath();
|
|
60
77
|
ctx.arc(50, 15, count > 1 ? 12 : 9, 0, Math.PI * 2);
|
|
@@ -122,6 +139,7 @@ export function initAttentionBadge(): void {
|
|
|
122
139
|
initialized = true;
|
|
123
140
|
baseTitle = document.title || BASE_TITLE_FALLBACK;
|
|
124
141
|
getOrCreateFaviconLink();
|
|
142
|
+
ensureMascotImage();
|
|
125
143
|
document.addEventListener('visibilitychange', () => {
|
|
126
144
|
if (document.visibilityState === 'visible') clearUnreadResponses();
|
|
127
145
|
});
|
|
@@ -17,7 +17,9 @@ type AvatarState = {
|
|
|
17
17
|
|
|
18
18
|
const AGENT_KEY = 'agentAvatar';
|
|
19
19
|
const USER_KEY = 'userAvatar';
|
|
20
|
-
|
|
20
|
+
// Front-facing mascot mark (transparent PNG) — kept as markup so avatarMarkup can
|
|
21
|
+
// render it exactly like the stored SVG/emoji defaults.
|
|
22
|
+
const DEFAULT_AGENT = '<img class="avatar-mascot" src="/icons/mascot.png" alt="" aria-hidden="true">';
|
|
21
23
|
const DEFAULT_USER = ICONS.user;
|
|
22
24
|
|
|
23
25
|
const avatarState: Record<AvatarRole, AvatarState> = {
|
|
@@ -57,7 +59,7 @@ function avatarMarkup(role: AvatarRole): string {
|
|
|
57
59
|
if (current.imageUrl) {
|
|
58
60
|
return `<img class="avatar-image" src="${escapeHtml(current.imageUrl)}" alt="" loading="lazy" decoding="async">`;
|
|
59
61
|
}
|
|
60
|
-
// Default
|
|
62
|
+
// Default avatars are markup (Lucide SVG, emoji, or the mascot image) — render as-is
|
|
61
63
|
return current.emoji;
|
|
62
64
|
}
|
|
63
65
|
|
|
@@ -27,6 +27,7 @@ export function CommandBar(props: CommandBarProps) {
|
|
|
27
27
|
)}
|
|
28
28
|
title={(
|
|
29
29
|
<h1 className="manager-brand-heading" aria-label="CLI-JAW Dashboard">
|
|
30
|
+
<img className="manager-brand-mark" src="/icons/mascot.png" alt="" width={20} height={20} aria-hidden="true" />
|
|
30
31
|
<span className="manager-brand-wordmark">CLI-JAW</span>
|
|
31
32
|
<span className="manager-brand-dash">DASH</span>
|
|
32
33
|
</h1>
|
|
@@ -120,9 +120,11 @@ export function AvatarCard({ kind, port }: Props) {
|
|
|
120
120
|
<div className="settings-avatar-preview" aria-label={`${label} preview`}>
|
|
121
121
|
{imageUrl ? (
|
|
122
122
|
<img src={imageUrl} alt={`${label} current`} />
|
|
123
|
+
) : kind === 'agent' ? (
|
|
124
|
+
<img className="settings-avatar-mascot" src="/icons/mascot.png" alt="" aria-hidden="true" />
|
|
123
125
|
) : (
|
|
124
126
|
<span className="settings-avatar-placeholder" aria-hidden="true">
|
|
125
|
-
|
|
127
|
+
👤
|
|
126
128
|
</span>
|
|
127
129
|
)}
|
|
128
130
|
</div>
|
package/public/manifest.json
CHANGED
package/public/sw.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// ── CLI-JAW Service Worker ──
|
|
2
2
|
// Three-tier fetch: navigate→network-first, hashed→cache-first, static→stale-while-revalidate
|
|
3
3
|
|
|
4
|
-
const CACHE_NAME = 'clijaw-v3-dev-
|
|
4
|
+
const CACHE_NAME = 'clijaw-v3-dev-20260925-mascot';
|
|
5
5
|
const STATIC_ASSETS = [
|
|
6
6
|
// Only pre-cache immutable/semi-static assets — NOT '/' (HTML is dynamic)
|
|
7
7
|
'/css/variables.css',
|