cli-jaw 1.7.15 → 1.7.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server.js +3 -2
- package/dist/server.js.map +1 -1
- package/dist/src/agent/spawn.js +35 -0
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/cli/registry.js +2 -1
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/orchestrator/gateway.js +34 -0
- package/dist/src/orchestrator/gateway.js.map +1 -1
- package/dist/src/prompt/builder.js +1 -0
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/templates/a1-system.md +1 -0
- package/dist/src/prompt/templates/orchestration.md +11 -0
- package/dist/src/routes/orchestrate.js +26 -6
- package/dist/src/routes/orchestrate.js.map +1 -1
- package/package.json +1 -1
- package/public/dist/assets/index-DP2cLVrY.js +32 -0
- package/public/dist/index.html +1 -1
- package/public/js/features/chat.ts +109 -86
- package/public/dist/assets/index-DOuB99na.js +0 -32
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-Bjnw0wQ6.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{n as e,t}from"./vendor-render-D2YP6GiF.js";import{t as n}from"./state-O6NVkWcL.js";import{i as r,n as i,r as a,t as o}from"./api-DygAf_G_.js";import{Z as s}from"./vendor-mermaid-UktBx7L0.js";import{a as c,f as l,h as u,m as d,n as f,p as ee,s as p,t as te,u as ne}from"./render-UgUKF5BD.js";import{_ as re,b as ie,h as ae,l as oe,n as m,s as se,t as h,v as ce,y as le}from"./ui-BAV_8ELQ.js";import{a as g,n as ue}from"./idb-cache-DbK81tgv.js";import{r as de,t as fe}from"./ws-C1OfuLct.js";import{t as pe}from"./locale-CxI5nTcf.js";import{a as me,i as he,n as ge,o as _e,r as ve,t as ye}from"./slash-commands-6phI3_kC.js";import{i as be,t as xe}from"./skills-CJ63S2Sp.js";import{a as Se,r as Ce}from"./constants-Bzu8ZQYX.js";import{A as we,D as Te,E as Ee,F as De,I as Oe,M as ke,N as Ae,O as _,P as je,S as Me,_ as Ne,a as Pe,c as Fe,f as Ie,g as Le,h as Re,i as ze,j as Be,k as Ve,l as He,m as Ue,n as We,o as Ge,p as Ke,r as qe,s as Je,t as v,u as Ye,v as y,w as Xe,x as Ze}from"./settings-DYVwmidi.js";import{c as b,d as Qe,f as $e,i as et,l as tt,m as nt,n as rt,o as it,p as at,r as ot,s as st,t as ct,u as x}from"./memory-BFvNYzcC.js";var S=[];function lt(e){return/^\/compact(?:\s|$)/i.test(String(e||``).trim())?300*1e3:1e4}async function C(){let e=document.getElementById(`chatInput`),t=document.getElementById(`btnSend`);if(!e||!t)return;let o=document.activeElement===t;if(t.classList.contains(`stop-mode`)&&o&&!e.value.trim()&&!n.attachedFiles.length){i(`/api/stop`,`POST`);return}let c=e.value.trim();if(!c&&!n.attachedFiles.length)return;let l=c.slice(1).trim().split(/\s+/)[0]||``,d=l.includes(`/`)||l.includes(`\\`);if(c.startsWith(`/`)&&!n.attachedFiles.length&&!d){e.value=``,D(),ye();try{let e,t,n=lt(c);if(typeof AbortSignal?.timeout==`function`)e=AbortSignal.timeout(n);else{let r=new AbortController;e=r.signal,t=setTimeout(()=>r.abort(),n)}let i=pe(),o=await r(),s=await fetch(`/api/command`,{method:`POST`,headers:{"Content-Type":`application/json`,"Accept-Language":i,...o?{Authorization:`Bearer ${o}`}:{}},body:JSON.stringify({text:c,locale:i}),signal:e});t&&clearTimeout(t);let l=await s.json().catch(()=>({}));if(l?.code===`not_command`){h(`user`,c),g({role:`user`,content:c,timestamp:Date.now()}),await a(`/api/message`,`POST`,{prompt:c});return}if(!s.ok&&!l?.text)throw Error(`HTTP ${s.status}`);if(l?.code===`clear_screen`){te(),ce().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``)}l?.text&&m(f(l.text),``,l.type)}catch(e){m(u(`chat.cmd.fail`,{msg:e.message}),``,`error`)}return}if(n.attachedFiles.length){let t=`📎 [${n.attachedFiles.map(e=>e.name).join(`, `)}] ${c}`;h(`user`,t),g({role:`user`,content:t,timestamp:Date.now()}),e.value=``,D();try{let e=(await Promise.all(n.attachedFiles.map(e=>dt(e)))).map(e=>u(`chat.file.sent`,{path:e})).join(`
|
|
3
|
-
`);c&&(e+=u(`chat.file.sentWithMsg`,{text:c})),T(),await a(`/api/message`,`POST`,{prompt:e})}catch(e){m(u(`chat.file.uploadFail`,{msg:e.message})),T()}}else{h(`user`,c),g({role:`user`,content:c,timestamp:Date.now()}),e.value=``,D();let t=await fetch(`/api/message`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({prompt:c})}),n=await t.json().catch(()=>({}));if(!t.ok){m(`${p.error} ${f(n.error||u(`chat.requestFail`,{status:t.status}))}`,``,`error`);return}if(n.queued){let{updateQueueBadge:e}=await s(async()=>{let{updateQueueBadge:e}=await import(`./ui-CRPOxysY.js`);return{updateQueueBadge:e}},__vite__mapDeps([0]));e(n.pending||1)}else n.continued&&m(u(`chat.continue`))}}function ut(e){e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),C())}async function dt(e){let t=await fetch(`/api/upload`,{method:`POST`,headers:{"X-Filename":encodeURIComponent(e.name)},body:e});if(!t.ok)throw Error(`upload failed`);return(await t.json()).path}function w(e){for(let t of e)n.attachedFiles.some(e=>e.name===t.name)||n.attachedFiles.push(t);E(),document.getElementById(`chatInput`)?.focus()}function ft(e){n.attachedFiles.splice(e,1),E()}function T(){S.forEach(e=>URL.revokeObjectURL(e)),S=[],n.attachedFiles=[],E();let e=document.getElementById(`fileInput`);e&&(e.value=``)}function E(){let e=document.getElementById(`filePreview`),t=document.getElementById(`filePreviewList`);if(e){if(S.forEach(e=>URL.revokeObjectURL(e)),S=[],!n.attachedFiles.length){e.classList.remove(`visible`),t&&(t.innerHTML=``);return}e.classList.add(`visible`),t&&(t.innerHTML=n.attachedFiles.map((e,t)=>{let n=(e.size/1024).toFixed(1),r=e.type.startsWith(`image/`),i=``;if(r){let t=URL.createObjectURL(e);S.push(t),i=`<img src="${t}" class="file-chip-thumb" alt="">`}return`<div class="file-chip">
|
|
4
|
-
${i}
|
|
5
|
-
<span class="file-chip-name">${p.paperclip} ${f(e.name)} (${n}KB)</span>
|
|
6
|
-
<button class="file-chip-remove" data-file-idx="${t}" title="Remove">${p.close}</button>
|
|
7
|
-
</div>`}).join(``))}}async function pt(){te(),ce().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``);let{cleanupToolActivity:t}=await s(async()=>{let{cleanupToolActivity:e}=await import(`./ui-CRPOxysY.js`);return{cleanupToolActivity:e}},__vite__mapDeps([0]));t(),ue().catch(()=>{})}var mt=0;function ht(e){mt||=requestAnimationFrame(()=>{mt=0,e.style.height=`auto`,e.style.height=e.scrollHeight+`px`})}function gt(){let e=document.getElementById(`chatInput`);e&&e.addEventListener(`input`,()=>ht(e))}function D(){let e=document.getElementById(`chatInput`);e&&(e.style.height=`auto`)}function _t(){let e=document.querySelector(`.chat-area`),t=document.getElementById(`dragOverlay`);if(!e||!t)return;let n=0;e.addEventListener(`dragenter`,e=>{e.preventDefault(),n++,t.classList.add(`visible`)}),e.addEventListener(`dragleave`,e=>{e.preventDefault(),n--,n<=0&&(n=0,t.classList.remove(`visible`))}),e.addEventListener(`dragover`,e=>e.preventDefault()),e.addEventListener(`drop`,e=>{e.preventDefault(),n=0,t.classList.remove(`visible`);let r=[...e.dataTransfer?.files||[]];r.length&&w(r)}),document.getElementById(`fileInput`)?.addEventListener(`change`,e=>{let t=e.target,n=[...t.files||[]];n.length&&w(n),t.value=``}),document.addEventListener(`paste`,e=>{let t=e.clipboardData?.items;if(!t)return;let n=[];for(let e of t){if(e.kind!==`file`)continue;let t=e.getAsFile();if(t)if(!t.name||t.name===`image.png`){let e=new Date().toISOString().replace(/[:.]/g,`-`),r=t.type.split(`/`)[1]||`png`,i=new File([t],`pasted-${e}.${r}`,{type:t.type});n.push(i)}else n.push(t)}n.length&&(e.preventDefault(),w(n))})}async function vt(e,t,r){let i=document.getElementById(`chatInput`),o=i?.value.trim()||``,s=[...n.attachedFiles],c=[`🎤 [음성 메시지]`];s.length&&c.push(`📎 [${s.map(e=>e.name).join(`, `)}]`),o&&c.push(o),h(`user`,c.join(` `)),g({role:`user`,content:c.join(` `),timestamp:Date.now()}),i&&o&&(i.value=``,D()),s.length&&T();try{let n=await fetch(`/api/voice`,{method:`POST`,headers:{"Content-Type":r,"X-Voice-Ext":t,"X-STT-Only":`true`},body:e});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error||`HTTP ${n.status}`)}let i=await n.json().catch(()=>null);if(!i?.text)throw Error(`Empty STT result`);m(`${p.mic} STT (${f(i.engine||``)}, ${i.elapsed?.toFixed(1)}s): "${f(i.text.slice(0,100))}"`,``,`info`);let c=[];s.length&&(c=await Promise.all(s.map(e=>dt(e))));let l=[];for(let e of c)l.push(u(`chat.file.sent`,{path:e}));l.push(`🎤 ${i.text}`),o&&l.push(o),await a(`/api/message`,`POST`,{prompt:l.join(`
|
|
8
|
-
`)})}catch(e){m(u(`voice.sttFail`,{msg:e.message}),``,`error`)}}var yt={sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6},bt={jan:1,feb:2,mar:3,apr:4,may:5,jun:6,jul:7,aug:8,sep:9,oct:10,nov:11,dec:12};function xt(e){let t=typeof e==`string`?e.trim():``;if(t)try{return new Intl.DateTimeFormat(`en-US`,{timeZone:t}).format(new Date),t}catch{return}}function St(e){let t=e&&typeof e==`object`?e:{},n=t.kind,r=typeof t.timeZone==`string`?t.timeZone.trim():``,i=xt(t.timeZone);if(r&&!i)return{ok:!1,code:`invalid_timezone`,error:`invalid timeZone "${r}"`};if(n===`cron`){let e=typeof t.cron==`string`?t.cron.trim().replace(/\s+/g,` `):``;if(!e)return{ok:!1,code:`invalid_cron`,error:`cron expression required`};let n=Ct(e);return n?{ok:!1,code:`invalid_cron`,error:n}:{ok:!0,schedule:i?{kind:`cron`,cron:e,timeZone:i}:{kind:`cron`,cron:e}}}if(n==null||n===`every`){let e=typeof t.minutes==`number`?t.minutes:Number(t.minutes);if(!Number.isInteger(e)||e<1)return{ok:!1,code:`invalid_minutes`,error:`minutes must be an integer >= 1`};let n=Math.max(1,Math.floor(e));return{ok:!0,schedule:i?{kind:`every`,minutes:n,timeZone:i}:{kind:`every`,minutes:n}}}return{ok:!1,code:`invalid_kind`,error:`invalid heartbeat schedule kind "${String(n)}"`}}function Ct(e){try{let[t,n,r,i,a]=wt(e);return O(t,{min:0,max:59}),O(n,{min:0,max:23}),O(r,{min:1,max:31}),O(i,{min:1,max:12,aliases:bt}),O(a,{min:0,max:7,aliases:yt,normalize:Dt}),null}catch(e){return e.message}}function wt(e){let t=String(e||``).trim().replace(/\s+/g,` `).split(` `);if(t.length!==5)throw Error(`cron must have 5 fields, got ${t.length}`);return t}function O(e,t){for(let n of e.split(`,`))Tt(n.trim(),t)}function Tt(e,t){if(!e)throw Error(`empty cron segment`);let n=e;if(e.includes(`/`)){let[t,r,...i]=e.split(`/`);if(!t||!r||i.length>0)throw Error(`invalid cron step segment "${e}"`);n=t,Et(r,`invalid cron step "${r}"`)}if(n!==`*`){if(n.includes(`-`)){let[e,r,...i]=n.split(`-`);if(!e||!r||i.length>0||k(e,t)>k(r,t))throw Error(`invalid cron range "${n}"`);return}k(n,t)}}function k(e,t){let n=e.trim().toLowerCase(),r=t.aliases?.[n]??Number(n);if(!Number.isInteger(r))throw Error(`invalid cron value "${e}"`);let i=t.normalize?t.normalize(r):r;if(!Ot(i,t.min,t.max))throw Error(`cron value "${e}" out of range ${t.min}-${t.max}`);return i}function Et(e,t){let n=Number(e);if(!Number.isInteger(n)||n<=0)throw Error(t);return n}function Dt(e){return e===7?0:e}function Ot(e,t,n){return e>=t&&e<=n}async function kt(){n.heartbeatJobs=((await o(`/api/heartbeat`))?.jobs||[]).map(M),n.heartbeatErrors=P(n.heartbeatJobs),A(),document.getElementById(`heartbeatModal`)?.classList.add(`open`)}function At(e){e&&e.target!==e.currentTarget||document.getElementById(`heartbeatModal`)?.classList.remove(`open`)}function A(){let e=document.getElementById(`hbJobsList`);if(!e)return;let t=n.heartbeatJobs.map(M);n.heartbeatJobs=t,n.heartbeatErrors=P(t),t.length===0?e.innerHTML=`<p style="color:var(--text-dim);font-size:12px;text-align:center">${u(`hb.empty`)}</p>`:e.innerHTML=t.map((e,t)=>{let r=Ft(e.schedule),i=r.kind===`cron`,a=n.heartbeatErrors[e.id],o=a||Vt(r),s=a?`hb-schedule-meta hb-error`:`hb-schedule-meta hb-help`,c=i?`<input type="text" value="${f(r.cron)}" placeholder="${f(u(`hb.cronPlaceholder`))}"
|
|
9
|
-
data-hb-cron="${t}">`:`<input type="number" value="${r.minutes}" min="1" data-hb-minutes="${t}">`,l=i?`<span class="hb-chip">${f(u(`hb.cronLabel`))}</span>`:`<span class="hb-chip">${f(u(`hb.minutesLabel`))}</span>`;return`
|
|
10
|
-
<div class="hb-job-card">
|
|
11
|
-
<div class="hb-job-header">
|
|
12
|
-
<input type="text" value="${f(String(e.name||``))}" placeholder="${f(u(`hb.name`))}"
|
|
13
|
-
data-hb-name="${t}">
|
|
14
|
-
<button class="hb-toggle ${e.enabled?`on`:`off`}"
|
|
15
|
-
data-hb-toggle="${t}" aria-label="${f(String(e.name||`job`)+` toggle`)}"></button>
|
|
16
|
-
<button class="hb-del" data-hb-remove="${t}">${p.close}</button>
|
|
17
|
-
</div>
|
|
18
|
-
<div class="hb-job-schedule">
|
|
19
|
-
<select data-hb-kind="${t}">
|
|
20
|
-
<option value="every"${i?``:` selected`}>${f(u(`hb.kindEvery`))}</option>
|
|
21
|
-
<option value="cron"${i?` selected`:``}>${f(u(`hb.kindCron`))}</option>
|
|
22
|
-
</select>
|
|
23
|
-
${c}
|
|
24
|
-
${l}
|
|
25
|
-
<input type="text" value="${f(r.timeZone||``)}" placeholder="${f(Rt())}"
|
|
26
|
-
data-hb-timezone="${t}">
|
|
27
|
-
</div>
|
|
28
|
-
<p class="${s}">${f(o)}</p>
|
|
29
|
-
<textarea class="hb-prompt" rows="2" placeholder="${f(u(`hb.prompt`))}"
|
|
30
|
-
data-hb-prompt="${t}">${f(String(e.prompt||``))}</textarea>
|
|
31
|
-
</div>
|
|
32
|
-
`}).join(``);let r=t.filter(e=>e.enabled).length,i=document.getElementById(`hbSidebarBtn`);i&&(i.innerHTML=`${p.heartPulse} Heartbeat (${r})`)}function jt(){n.heartbeatJobs.push({id:`hb_`+Date.now(),name:``,enabled:!0,schedule:Lt({kind:`every`,minutes:5}),prompt:``}),A(),j()}function Mt(e){n.heartbeatJobs.splice(e,1),A(),j()}function Nt(e){let t=n.heartbeatJobs[e];t&&(t.enabled=!t.enabled,A(),j())}async function j(){let e=n.heartbeatJobs.map(M);if(n.heartbeatJobs=e,n.heartbeatErrors=P(e),Object.keys(n.heartbeatErrors).length>0){A();return}let t=await a(`/api/heartbeat`,`PUT`,{jobs:e});t?.jobs&&(n.heartbeatJobs=t.jobs.map(M),n.heartbeatErrors=P(n.heartbeatJobs),A())}async function Pt(){try{let e=((await o(`/api/heartbeat`))?.jobs||[]).map(M).filter(e=>e.enabled).length,t=document.getElementById(`hbSidebarBtn`);t&&(t.innerHTML=`${p.heartPulse} Heartbeat (${e})`)}catch{}}function M(e){return{id:String(e.id||`hb_${Date.now()}`),name:String(e.name||``),enabled:e.enabled!==!1,schedule:Ft(e.schedule),prompt:String(e.prompt||``)}}function Ft(e){let t=It(e?.timeZone);if(e?.kind===`cron`){let n=typeof e.cron==`string`?e.cron.trim().replace(/\s+/g,` `):`0 9 * * *`;return t?{kind:`cron`,cron:n,timeZone:t}:{kind:`cron`,cron:n}}let n=typeof e?.minutes==`number`&&Number.isFinite(e.minutes)&&e.minutes>0?Math.max(1,Math.floor(e.minutes)):5;return t?{kind:`every`,minutes:n,timeZone:t}:{kind:`every`,minutes:n}}function It(e){return(typeof e==`string`?e.trim():``)||void 0}function Lt(e){let t=N();return t?{...e,timeZone:t}:e}function N(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone||void 0}catch{return}}function Rt(){let e=N();return e?`${u(`hb.timezoneAuto`)} ${e}`:u(`hb.timezoneAuto`)}function P(e){let t={};for(let n of e){let e=zt(n);e&&(t[n.id]=e)}return t}function zt(e){let t=St(e.schedule);return t.ok?null:Bt(t.code,t.error)}function Bt(e,t){switch(e){case`invalid_cron`:return u(`hb.invalidCron`);case`invalid_timezone`:return u(`hb.invalidTimeZone`);case`invalid_minutes`:return u(`hb.invalidMinutes`);default:return t||u(`hb.invalidSchedule`)}}function Vt(e){let t=e.timeZone||N()||`Asia/Seoul`;return e.kind===`cron`?u(`hb.scheduleHintCron`,{cron:`0 9 * * *`,timeZone:t}):u(`hb.scheduleHintEvery`,{minutes:e.minutes,timeZone:t})}var F=`sidebarState`,I=900,Ht=768;function L(){return window.innerWidth<=Ht}function R(){document.body.classList.remove(`left-expanded`,`right-expanded`)}function Ut(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 Wt(){let e={};try{e=JSON.parse(localStorage.getItem(F)||`{}`)}catch{}e.left&&document.body.classList.add(`left-collapsed`),e.right&&document.body.classList.add(`right-collapsed`);let t=L();document.getElementById(`toggleLeft`)?.addEventListener(`click`,B),document.getElementById(`toggleRight`)?.addEventListener(`click`,V),window.addEventListener(`resize`,()=>{let e=L();if(window.innerWidth>I){R();let e={};try{e=JSON.parse(localStorage.getItem(F)||`{}`)}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&&R();t=e,H()}),window.innerWidth<=I&&(document.body.classList.remove(`left-collapsed`,`right-collapsed`),L()&&R()),H()}function z(){return window.innerWidth<=I}function B(){z()?Ut(`left`):document.body.classList.toggle(`left-collapsed`),qt(),H()}function V(){z()?Ut(`right`):document.body.classList.toggle(`right-collapsed`),qt(),H()}function Gt(){return z()?document.body.classList.contains(`left-expanded`):!document.body.classList.contains(`left-collapsed`)}function Kt(){return z()?document.body.classList.contains(`right-expanded`):!document.body.classList.contains(`right-collapsed`)}function H(){let e=document.getElementById(`toggleLeft`),t=document.getElementById(`toggleRight`);e&&(e.innerHTML=Gt()?p.chevronLeft:p.chevronRight),t&&(t.innerHTML=Kt()?p.chevronRight:p.chevronLeft)}function qt(){localStorage.setItem(F,JSON.stringify({left:document.body.classList.contains(`left-collapsed`),right:document.body.classList.contains(`right-collapsed`)}))}var Jt=`theme`,U=null;function Yt(n){let r=n===`light`?t:e;U||(U=document.createElement(`style`),U.id=`hljsTheme`,document.head.appendChild(U)),U.textContent=r}function Xt(){let e=localStorage.getItem(Jt),t=window.matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`;Qt(e||t),document.getElementById(`toggleTheme`)?.addEventListener(`click`,Zt)}function Zt(){let e=(document.documentElement.getAttribute(`data-theme`)||`dark`)===`dark`?`light`:`dark`;Qt(e),localStorage.setItem(Jt,e)}function Qt(e){document.documentElement.setAttribute(`data-theme`,e);let t=document.getElementById(`toggleTheme`);t&&t.classList.toggle(`is-light`,e===`light`),Yt(e),re(),c()}var $t=50,en=30,tn=80,nn=500,W=null,rn=!1;function an(){if(rn||!(`ontouchstart`in window))return;rn=!0;let e=document.querySelector(`.chat-area`);e&&(e.addEventListener(`touchstart`,on,{passive:!0}),e.addEventListener(`touchend`,sn,{passive:!0}))}function on(e){let t=e.touches[0],n=window.innerWidth,r=null;t.clientX<en?r=`left`:t.clientX>n-en&&(r=`right`),W={startX:t.clientX,startY:t.clientY,startTime:Date.now(),isEdge:r}}function sn(e){if(!W)return;let t=e.changedTouches[0],n=t.clientX-W.startX,r=Math.abs(t.clientY-W.startY),i=Date.now()-W.startTime,a=W;W=null,!(r>tn||i>nn||Math.abs(n)<$t)&&(n>0&&a.isEdge===`left`&&B(),n<0&&a.isEdge===`right`&&V())}var G=!1,K=null,q=[],J=null,Y=null,cn=0;function ln(){if(typeof MediaRecorder>`u`)return``;for(let e of[`audio/webm;codecs=opus`,`audio/mp4`,`audio/ogg;codecs=opus`])if(MediaRecorder.isTypeSupported(e))return e;return``}function un(e){let t=e;switch(t.name){case`NotAllowedError`:return u(`voice.micDenied`);case`NotFoundError`:return u(`voice.micNotFound`);case`NotReadableError`:case`AbortError`:return u(`voice.micBusy`);default:return t instanceof TypeError||!navigator.mediaDevices?u(`voice.httpsRequired`):u(`voice.micDenied`)}}async function dn(){if(n.isRecording)return;if(typeof MediaRecorder>`u`||!navigator.mediaDevices?.getUserMedia){m(u(`voice.unsupported`),``,`error`);return}try{J=await navigator.mediaDevices.getUserMedia({audio:!0})}catch(e){m(un(e),``,`error`);return}let e=ln();K=new MediaRecorder(J,e?{mimeType:e}:{}),q=[],K.ondataavailable=e=>{e.data.size>0&&q.push(e.data)},K.onerror=()=>{fn(),m(u(`voice.interrupted`),``,`error`)},K.onstop=async()=>{if(G){q=[],hn(),G=!1;return}let t=K?.mimeType||e||`audio/webm`,n=t.includes(`mp4`)?`.m4a`:t.includes(`ogg`)?`.ogg`:`.webm`,r=new Blob(q,{type:t});if(q=[],hn(),r.size>20*1024*1024){m(u(`voice.tooLarge`),``,`error`);return}if(r.size<1e3){m(u(`voice.tooShort`),``,`error`);return}await vt(r,n,t)},K.start(),n.isRecording=!0,cn=Date.now(),X(!0),gn()}function fn(){!n.isRecording||!K||(K.state===`recording`&&K.stop(),n.isRecording=!1,_n(),X(!1))}function pn(){!n.isRecording||!K||(G=!0,K.state===`recording`&&K.stop(),n.isRecording=!1,_n(),X(!1))}function mn(){n.isRecording?fn():dn()}function hn(){J?.getTracks().forEach(e=>e.stop()),J=null}function gn(){let e=document.getElementById(`voiceTimer`);e&&(e.style.display=`inline`,Y=setInterval(()=>{let t=Math.floor((Date.now()-cn)/1e3);e.textContent=`${String(Math.floor(t/60)).padStart(2,`0`)}:${String(t%60).padStart(2,`0`)}`},500))}function _n(){Y&&=(clearInterval(Y),null);let e=document.getElementById(`voiceTimer`);e&&(e.style.display=`none`,e.textContent=`00:00`)}function X(e){let t=document.getElementById(`btnVoice`),n=document.getElementById(`btnVoiceCancel`);t&&(t.classList.toggle(`recording`,e),t.innerHTML=e?p.stop:p.mic,t.title=u(e?`voice.stop`:`voice.start`)),n&&(n.style.display=e?`inline-block`:`none`)}window.addEventListener(`unhandledrejection`,e=>{console.error(`[unhandled]`,e.reason),e.preventDefault()}),window.addEventListener(`error`,e=>{console.error(`[error]`,e.message,e.filename,e.lineno)});var{loadEmployees:vn,addEmployee:yn,deleteEmployee:bn,updateEmployee:Z,onEmpCliChange:xn,onEmpRoleChange:Sn}=await s(async()=>{let{loadEmployees:e,addEmployee:t,deleteEmployee:n,updateEmployee:r,onEmpCliChange:i,onEmpRoleChange:a}=await import(`./employees-DZSCd0xw.js`);return{loadEmployees:e,addEmployee:t,deleteEmployee:n,updateEmployee:r,onEmpCliChange:i,onEmpRoleChange:a}},__vite__mapDeps([0]));document.getElementById(`btnSend`)?.addEventListener(`click`,C);var Q=document.getElementById(`chatInput`);Q?.addEventListener(`keydown`,e=>{ve(e)||ut(e)});var $=0;Q?.addEventListener(`input`,e=>{e.isComposing||($&&cancelAnimationFrame($),$=requestAnimationFrame(()=>{_e(e.target?.value||``),$=0}))}),Q?.addEventListener(`cmd-execute`,()=>{C()}),document.getElementById(`cmdDropdown`)?.addEventListener(`click`,ge),document.addEventListener(`click`,he),de(),document.getElementById(`filePreviewClear`)?.addEventListener(`click`,T),document.getElementById(`filePreviewList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-file-idx]`);t&&ft(+(t.dataset.fileIdx||`0`))}),document.querySelector(`.btn-attach`)?.addEventListener(`click`,()=>{document.getElementById(`fileInput`)?.click()}),document.getElementById(`btnVoice`)?.addEventListener(`click`,()=>mn()),document.getElementById(`btnVoiceCancel`)?.addEventListener(`click`,()=>pn()),document.getElementById(`memorySidebarBtn`)?.addEventListener(`click`,et),document.getElementById(`btnClearChat`)?.addEventListener(`click`,pt),document.getElementById(`hbSidebarBtn`)?.addEventListener(`click`,kt),document.getElementById(`langToggle`)?.addEventListener(`click`,async()=>{let e=l()===`ko`?`en`:`ko`;await d(e);let t=document.getElementById(`langToggle`);t&&(t.innerHTML=`${p.web} ${u(`lang.`+e)}`),n.ws&&n.ws.close()}),document.querySelector(`.tab-bar`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`.tab-btn`);if(!t)return;let n=[...t.parentElement?.children||[]].filter(e=>e.classList.contains(`tab-btn`)).indexOf(t),r=[`agents`,`skills`,`settings`];r[n]&&ae(r[n],t)}),document.querySelector(`.sidebar-save-bar .btn-save`)?.addEventListener(`click`,se),document.getElementById(`selCli`)?.addEventListener(`change`,()=>Re()),document.getElementById(`selModel`)?.addEventListener(`change`,()=>Ne()),document.getElementById(`selEffort`)?.addEventListener(`change`,()=>Ne()),document.getElementById(`flushCli`)?.addEventListener(`change`,()=>Le()),document.getElementById(`flushModel`)?.addEventListener(`change`,()=>Le()),document.querySelector(`[data-action="addEmployee"]`)?.addEventListener(`click`,yn),document.getElementById(`employeesList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-emp-delete]`);if(t){bn(t.dataset.empDelete||``);return}}),document.getElementById(`employeesList`)?.addEventListener(`change`,e=>{let t=e.target,n=t.closest(`[data-emp-name]`);if(n){Z(n.dataset.empName||``,{name:t.value});return}let r=t.closest(`[data-emp-cli]`);if(r){xn(r.dataset.empCli||``,t.value);return}let i=t.closest(`[data-emp-model]`);if(i){if(t.value===`__custom__`){let e=prompt(u(`model.promptInput`));if(e?.trim()){let n=document.createElement(`option`);n.value=e.trim(),n.textContent=e.trim();let r=t.querySelector(`option[value="__custom__"]`);r&&t.insertBefore(n,r),t.value=e.trim(),Z(i.dataset.empModel||``,{model:e.trim()})}else t.value=`default`}else Z(i.dataset.empModel||``,{model:t.value});return}let a=t.closest(`[data-emp-role]`);if(a){Sn(a.dataset.empRole||``,t.value);return}let o=t.closest(`[data-emp-custom]`);if(o){Z(o.dataset.empCustom||``,{role:t.value});return}}),document.getElementById(`skillsList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-skill-id]`);t&&be(t.dataset.skillId||``,t.dataset.skillEnabled===`true`)}),document.querySelector(`#tabSkills`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`.skill-filter`);t&&xe(t.dataset.filter||`all`,t)}),document.querySelector(`[data-action="openPrompt"]`)?.addEventListener(`click`,qe),document.getElementById(`tgOff`)?.addEventListener(`click`,()=>De(!1)),document.getElementById(`tgOn`)?.addEventListener(`click`,()=>De(!0)),document.getElementById(`tgForwardOff`)?.addEventListener(`click`,()=>je(!1)),document.getElementById(`tgForwardOn`)?.addEventListener(`click`,()=>je(!0)),document.getElementById(`tgMentionOff`)?.addEventListener(`click`,()=>Oe(!1)),document.getElementById(`tgMentionOn`)?.addEventListener(`click`,()=>Oe(!0)),document.getElementById(`tgToken`)?.addEventListener(`change`,Ae),document.getElementById(`tgChatIds`)?.addEventListener(`change`,Ae),document.getElementById(`chTelegram`)?.addEventListener(`click`,()=>Te(`telegram`)),document.getElementById(`chDiscord`)?.addEventListener(`click`,()=>Te(`discord`)),document.getElementById(`dcOff`)?.addEventListener(`click`,()=>Ve(!1)),document.getElementById(`dcOn`)?.addEventListener(`click`,()=>Ve(!0)),document.getElementById(`dcForwardOff`)?.addEventListener(`click`,()=>Be(!1)),document.getElementById(`dcForwardOn`)?.addEventListener(`click`,()=>Be(!0)),document.getElementById(`dcAllowBotsOff`)?.addEventListener(`click`,()=>we(!1)),document.getElementById(`dcAllowBotsOn`)?.addEventListener(`click`,()=>we(!0)),document.getElementById(`dcMentionOff`)?.addEventListener(`click`,()=>ke(!1)),document.getElementById(`dcMentionOn`)?.addEventListener(`click`,()=>ke(!0)),document.getElementById(`dcToken`)?.addEventListener(`change`,_),document.getElementById(`dcGuildId`)?.addEventListener(`change`,_),document.getElementById(`dcChannelIds`)?.addEventListener(`change`,_),document.getElementById(`fallbackOrderList`)?.addEventListener(`change`,Ee);function Cn(e){let t=document.getElementById(`codexFastOn`),n=document.getElementById(`codexFastOff`);t&&n&&(t.classList.toggle(`active`,e),n.classList.toggle(`active`,!e)),y()}document.getElementById(`codexFastOn`)?.addEventListener(`click`,()=>Cn(!0)),document.getElementById(`codexFastOff`)?.addEventListener(`click`,()=>Cn(!1));function wn(e){let t=document.getElementById(`codexCtxOn`),n=document.getElementById(`codexCtxOff`),r=document.getElementById(`codexCtxValues`);t&&n&&(t.classList.toggle(`active`,e),n.classList.toggle(`active`,!e)),r&&(r.style.display=e?``:`none`),y()}document.getElementById(`codexCtxOn`)?.addEventListener(`click`,()=>wn(!0)),document.getElementById(`codexCtxOff`)?.addEventListener(`click`,()=>wn(!1)),document.getElementById(`codexCtxWindow`)?.addEventListener(`change`,y),document.getElementById(`codexCtxCompact`)?.addEventListener(`change`,y);function Tn(e){let t=document.getElementById(`claude1mOn`),n=document.getElementById(`claude1mOff`),r=document.getElementById(`modelClaude`),i=e;if(r){let t=r.value||``;if(e&&!t.endsWith(`[1m]`)){let e=t+`[1m]`;Array.from(r.options).some(t=>t.value===e)?r.value=e:i=!1}else if(!e&&t.endsWith(`[1m]`)){let e=t.replace(/\[1m\]$/,``);Array.from(r.options).some(t=>t.value===e)?r.value=e:i=!0}else i=t.endsWith(`[1m]`)}t&&n&&(t.classList.toggle(`active`,i),n.classList.toggle(`active`,!i)),y()}document.getElementById(`claude1mOn`)?.addEventListener(`click`,()=>Tn(!0)),document.getElementById(`claude1mOff`)?.addEventListener(`click`,()=>Tn(!1));function En(){for(let e of Ce()){let t=e.charAt(0).toUpperCase()+e.slice(1),n=document.getElementById(`model`+t);n&&n.addEventListener(`change`,function(){Ie(e,this)});let r=document.getElementById(`customModel`+t);r&&r.addEventListener(`change`,function(){Ye(e,this)});let i=document.getElementById(`effort`+t);i&&i.addEventListener(`change`,y)}}document.querySelector(`[data-action="syncMcp"]`)?.addEventListener(`click`,Xe),document.querySelector(`[data-action="installMcp"]`)?.addEventListener(`click`,Me),document.querySelector(`[data-action="refreshCli"]`)?.addEventListener(`click`,()=>He(!0)),document.getElementById(`cliStatusInterval`)?.addEventListener(`change`,function(){localStorage.setItem(`cliStatusInterval`,this.value)}),document.getElementById(`promptModal`)?.addEventListener(`click`,e=>v(e)),document.querySelector(`#promptModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closePrompt"]`)?.addEventListener(`click`,()=>v()),document.querySelector(`[data-action="cancelPrompt"]`)?.addEventListener(`click`,()=>v()),document.querySelector(`[data-action="savePrompt"]`)?.addEventListener(`click`,Pe),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&!n.isRecording&&v()}),document.querySelector(`[data-action="openTemplates"]`)?.addEventListener(`click`,ze),document.querySelector(`[data-action="saveTemplate"]`)?.addEventListener(`click`,Ge),document.querySelector(`[data-action="closeTemplate"]`)?.addEventListener(`click`,()=>We()),document.getElementById(`templateModal`)?.addEventListener(`click`,e=>We(e)),document.querySelector(`#templateModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.getElementById(`templateBack`)?.addEventListener(`click`,Je),document.getElementById(`templateDevToggle`)?.addEventListener(`click`,Fe),document.getElementById(`heartbeatModal`)?.addEventListener(`click`,e=>At(e)),document.querySelector(`#heartbeatModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closeHeartbeat"]`)?.addEventListener(`click`,()=>At()),document.querySelector(`[data-action="addHeartbeat"]`)?.addEventListener(`click`,jt),document.getElementById(`hbJobsList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-hb-toggle]`);if(t){Nt(+(t.dataset.hbToggle||`0`));return}let n=e.target?.closest(`[data-hb-remove]`);if(n){Mt(+(n.dataset.hbRemove||`0`));return}}),document.getElementById(`hbJobsList`)?.addEventListener(`change`,e=>{let t=e.target,r=t.closest(`[data-hb-name]`);if(r){n.heartbeatJobs[+(r.dataset.hbName||`0`)].name=t.value,j();return}let i=t.closest(`[data-hb-kind]`);if(i){let e=+(i.dataset.hbKind||`0`),r=n.heartbeatJobs[e]?.schedule,a=typeof r?.timeZone==`string`?r.timeZone:void 0;n.heartbeatJobs[e].schedule=t.value===`cron`?{kind:`cron`,cron:typeof r?.cron==`string`&&r.cron.trim()?r.cron:`0 9 * * *`,...a?{timeZone:a}:{}}:{kind:`every`,minutes:typeof r?.minutes==`number`&&r.minutes>0?Math.floor(r.minutes):5,...a?{timeZone:a}:{}},A(),j();return}let a=t.closest(`[data-hb-minutes]`);if(a){let e=+(a.dataset.hbMinutes||`0`),r=n.heartbeatJobs[e]?.schedule,i=Math.max(1,Math.floor(Number(t.value)||5)),o=typeof r?.timeZone==`string`?r.timeZone:void 0;n.heartbeatJobs[e].schedule={kind:`every`,minutes:i,...o?{timeZone:o}:{}},A(),j();return}let o=t.closest(`[data-hb-cron]`);if(o){let e=+(o.dataset.hbCron||`0`),r=n.heartbeatJobs[e]?.schedule,i=typeof r?.timeZone==`string`?r.timeZone:void 0,a=t.value.trim().replace(/\s+/g,` `);n.heartbeatJobs[e].schedule={kind:`cron`,cron:a,...i?{timeZone:i}:{}},A(),j();return}let s=t.closest(`[data-hb-timezone]`);if(s){let e=+(s.dataset.hbTimezone||`0`),r=n.heartbeatJobs[e]?.schedule;r?.kind===`cron`?n.heartbeatJobs[e].schedule={kind:`cron`,cron:typeof r.cron==`string`&&r.cron.trim()?r.cron:`0 9 * * *`,...t.value.trim()?{timeZone:t.value.trim()}:{}}:n.heartbeatJobs[e].schedule={kind:`every`,minutes:typeof r?.minutes==`number`&&r.minutes>0?Math.floor(r.minutes):5,...t.value.trim()?{timeZone:t.value.trim()}:{}},A(),j();return}let c=t.closest(`[data-hb-prompt]`);if(c){n.heartbeatJobs[+(c.dataset.hbPrompt||`0`)].prompt=t.value,j();return}}),document.getElementById(`memoryModal`)?.addEventListener(`click`,e=>ct(e)),document.querySelector(`#memoryModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closeMemory"]`)?.addEventListener(`click`,()=>ct()),document.getElementById(`memTabBtnSettings`)?.addEventListener(`click`,()=>x(`settings`)),document.getElementById(`memTabBtnAdvOps`)?.addEventListener(`click`,()=>x(`status`)),document.getElementById(`memTabBtnFiles`)?.addEventListener(`click`,()=>x(`files`)),document.getElementById(`memOn`)?.addEventListener(`click`,()=>tt(!0)),document.getElementById(`memOff`)?.addEventListener(`click`,()=>tt(!1)),document.getElementById(`memFlushEvery`)?.addEventListener(`change`,b),document.getElementById(`memRetention`)?.addEventListener(`change`,b),document.getElementById(`memFlushLang`)?.addEventListener(`change`,b),document.getElementById(`memFlushNowBtn`)?.addEventListener(`click`,$e),document.getElementById(`advBootstrapBtn`)?.addEventListener(`click`,st),document.getElementById(`advReindexBtn`)?.addEventListener(`click`,it),document.getElementById(`advReimportBtn`)?.addEventListener(`click`,st),document.getElementById(`advOpenCorruptedBtn`)?.addEventListener(`click`,ot),document.getElementById(`advStatusBanner`)?.addEventListener(`click`,e=>{e.target?.id===`advUpgradeSoulBtn`&&at(),e.target?.id===`advSynthesizeSoulBtn`&&Qe()}),document.getElementById(`basicMemoryFiles`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-mem-delete]`);if(t){e.stopPropagation(),rt(t.dataset.memDelete||``);return}let n=e.target?.closest(`[data-mem-view]`);if(n){nt(n.dataset.memView||``);return}if(e.target?.closest(`[data-mem-back]`)){et();return}});async function Dn(){ne(),Ze(),Xt(),await ee();let e=document.getElementById(`langToggle`);e&&(e.innerHTML=`${p.web} ${u(`lang.`+l())}`),await Se(),En(),fe(),_t(),gt(),await me(),await Ue(),Ke(),He(),vn(),Pt(),ie(),await le(),Wt(),oe(),an(),`serviceWorker`in navigator&&navigator.serviceWorker.register(`/sw.js`).catch(()=>{})}Dn().catch(e=>{console.error(`[bootstrap]`,e)}),document.addEventListener(`keydown`,e=>{if(e.key===`Escape`){if(n.isRecording){e.preventDefault(),pn();return}document.querySelectorAll(`.modal-overlay.open`).forEach(e=>{e.classList.remove(`open`)})}(e.ctrlKey||e.metaKey)&&e.shiftKey&&e.code===`Space`&&(e.preventDefault(),mn())}),document.getElementById(`mobileMenuLeft`)?.addEventListener(`click`,B),document.getElementById(`mobileMenuRight`)?.addEventListener(`click`,V);
|