cli-jaw 2.0.2 → 2.0.4

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.
Files changed (99) hide show
  1. package/README.ja.md +6 -2
  2. package/README.ko.md +6 -2
  3. package/README.md +6 -2
  4. package/dist/src/agent/alert-escalation.js +12 -1
  5. package/dist/src/agent/alert-escalation.js.map +1 -1
  6. package/dist/src/agent/error-classifier.js +14 -8
  7. package/dist/src/agent/error-classifier.js.map +1 -1
  8. package/dist/src/agent/lifecycle-handler.js +81 -4
  9. package/dist/src/agent/lifecycle-handler.js.map +1 -1
  10. package/dist/src/agent/session-persistence.js +2 -0
  11. package/dist/src/agent/session-persistence.js.map +1 -1
  12. package/dist/src/agent/spawn.js +70 -9
  13. package/dist/src/agent/spawn.js.map +1 -1
  14. package/dist/src/browser/connection.js +69 -15
  15. package/dist/src/browser/connection.js.map +1 -1
  16. package/dist/src/browser/runtime-diagnostics.js +39 -0
  17. package/dist/src/browser/runtime-diagnostics.js.map +1 -1
  18. package/dist/src/cli/compact.js +5 -1
  19. package/dist/src/cli/compact.js.map +1 -1
  20. package/dist/src/core/compact.js +5 -1
  21. package/dist/src/core/compact.js.map +1 -1
  22. package/dist/src/manager/lifecycle.js +1 -1
  23. package/dist/src/manager/lifecycle.js.map +1 -1
  24. package/dist/src/manager/notes/routes.js +7 -0
  25. package/dist/src/manager/notes/routes.js.map +1 -1
  26. package/dist/src/manager/notes/search.js +282 -0
  27. package/dist/src/manager/notes/search.js.map +1 -0
  28. package/dist/src/manager/preview-origin-proxy.js +12 -2
  29. package/dist/src/manager/preview-origin-proxy.js.map +1 -1
  30. package/dist/src/memory/bootstrap.js +8 -1
  31. package/dist/src/memory/bootstrap.js.map +1 -1
  32. package/dist/src/memory/indexing.js +221 -134
  33. package/dist/src/memory/indexing.js.map +1 -1
  34. package/dist/src/memory/keyword-expand.js +26 -4
  35. package/dist/src/memory/keyword-expand.js.map +1 -1
  36. package/dist/src/memory/reflect.js +119 -8
  37. package/dist/src/memory/reflect.js.map +1 -1
  38. package/dist/src/memory/synonyms.js +60 -0
  39. package/dist/src/memory/synonyms.js.map +1 -0
  40. package/dist/src/orchestrator/gateway.js +1 -1
  41. package/dist/src/orchestrator/gateway.js.map +1 -1
  42. package/dist/src/orchestrator/pipeline.js +15 -18
  43. package/dist/src/orchestrator/pipeline.js.map +1 -1
  44. package/dist/src/orchestrator/state-machine.js +12 -2
  45. package/dist/src/orchestrator/state-machine.js.map +1 -1
  46. package/package.json +1 -1
  47. package/public/dist/assets/{MilkdownWysiwygEditor-Cm3uXfWf.js → MilkdownWysiwygEditor-DIebNZF7.js} +1 -1
  48. package/public/dist/assets/{app-Be58Cs3Y.js → app-DJ8ys0j5.js} +4 -4
  49. package/public/dist/assets/{employees-CxdghzoD.js → employees-RJ_wRL09.js} +1 -1
  50. package/public/dist/assets/insert-image-markdown-kk053MvN.js +22 -0
  51. package/public/dist/assets/manager-DAe38I94.js +25 -0
  52. package/public/dist/assets/{manager-DEiyrWDP.css → manager-fQR46YFa.css} +1 -1
  53. package/public/dist/assets/{memory-CsMNkYtv.js → memory-dJGp6QBv.js} +1 -1
  54. package/public/dist/assets/memory-w3yQettQ.js +1 -0
  55. package/public/dist/assets/{render-DGQX46ei.js → render-KVGsbWj1.js} +1 -1
  56. package/public/dist/assets/{settings-BH213Yv3.js → settings-C7QWaUHB.js} +1 -1
  57. package/public/dist/assets/settings-DmUCo6lz.js +1 -0
  58. package/public/dist/assets/{skills-CQtCtHPA.js → skills-CHkTgM7L.js} +1 -1
  59. package/public/dist/assets/skills-SxG_nfwn.js +1 -0
  60. package/public/dist/assets/{slash-commands-Dzk1xHWS.js → slash-commands-2ThyUGvX.js} +1 -1
  61. package/public/dist/assets/slash-commands-BxJkKdhB.js +1 -0
  62. package/public/dist/assets/{trace-drawer-SRKcfm2S.js → trace-drawer-Dis80M6X.js} +1 -1
  63. package/public/dist/assets/ui-LhD1VfQs.js +1 -0
  64. package/public/dist/assets/ui-kS1ZJfez.js +143 -0
  65. package/public/dist/assets/{ws-CTHQFzM1.js → ws-DVE3eWRj.js} +2 -2
  66. package/public/dist/index.html +1 -1
  67. package/public/dist/manager/index.html +2 -2
  68. package/public/js/features/chat.ts +6 -1
  69. package/public/js/features/process-block.ts +34 -6
  70. package/public/js/features/process-step-match.ts +2 -1
  71. package/public/js/ui.ts +100 -13
  72. package/public/js/virtual-scroll-bootstrap.ts +8 -1
  73. package/public/js/virtual-scroll.ts +83 -13
  74. package/public/js/ws.ts +3 -3
  75. package/public/locales/en.json +2 -1
  76. package/public/locales/ja.json +2 -1
  77. package/public/locales/ko.json +2 -1
  78. package/public/locales/zh.json +2 -1
  79. package/public/manager/src/App.tsx +10 -3
  80. package/public/manager/src/api.ts +17 -0
  81. package/public/manager/src/main.tsx +1 -0
  82. package/public/manager/src/notes/NotesFileTree.tsx +14 -22
  83. package/public/manager/src/notes/NotesSearchSidebar.tsx +118 -0
  84. package/public/manager/src/notes/NotesSidebar.tsx +65 -23
  85. package/public/manager/src/notes/NotesWorkspace.tsx +13 -0
  86. package/public/manager/src/notes/notes-api.ts +1 -0
  87. package/public/manager/src/notes/notes-search.css +90 -0
  88. package/public/manager/src/notes/notes-types.ts +2 -0
  89. package/public/manager/src/preview.ts +20 -1
  90. package/public/manager/src/types.ts +8 -0
  91. package/scripts/install-wsl.sh +48 -14
  92. package/public/dist/assets/insert-image-markdown-DIEa-zjk.js +0 -22
  93. package/public/dist/assets/manager-UEXd1_9T.js +0 -25
  94. package/public/dist/assets/memory-DXad_DPO.js +0 -1
  95. package/public/dist/assets/settings-DXT87G2U.js +0 -1
  96. package/public/dist/assets/skills-5o_1v0nz.js +0 -1
  97. package/public/dist/assets/slash-commands-D4-hrrmh.js +0 -1
  98. package/public/dist/assets/ui-CdRKN2S6.js +0 -141
  99. package/public/dist/assets/ui-n43jmg_f.js +0 -1
@@ -166,10 +166,15 @@ just write the audit task itself.
166
166
 
167
167
  Run this command now:
168
168
  \`\`\`bash
169
- cli-jaw dispatch --agent "Backend" --task " READ-ONLY: Do NOT create, modify, or delete ANY files. You are an auditor, not a builder.
169
+ cli-jaw dispatch --agent "Backend" --task "Project root: <absolute path to the current working repository from pwd -P>
170
+
171
+ ⛔ READ-ONLY: Do NOT create, modify, or delete ANY files. You are an auditor, not a builder.
170
172
 
171
173
  The approved plan is already injected above under \`## Approved Plan\` — read it there.
172
174
 
175
+ Resolve every repository-relative path against Project root.
176
+ Do NOT use ~/.cli-jaw*, JAW_HOME, process.cwd(), or the employee temp cwd as the repository root.
177
+
173
178
  Audit the PLAN (not code). Verify:
174
179
  1) All imports in the plan resolve to real files.
175
180
  2) Function signatures match actual code.
@@ -201,10 +206,15 @@ Steps:
201
206
  3. After YOU finish implementing, dispatch a verification employee:
202
207
 
203
208
  \`\`\`bash
204
- cli-jaw dispatch --agent "Backend" --task " READ-ONLY: Do NOT create, modify, or delete ANY files. You are a verifier, not a builder.
209
+ cli-jaw dispatch --agent "Backend" --task "Project root: <absolute path to the current working repository from pwd -P>
210
+
211
+ ⛔ READ-ONLY: Do NOT create, modify, or delete ANY files. You are a verifier, not a builder.
205
212
 
206
213
  The approved plan is already injected above under \`## Approved Plan\` — read it there.
207
214
 
215
+ Resolve every repository-relative path against Project root.
216
+ Do NOT use ~/.cli-jaw*, JAW_HOME, process.cwd(), or the employee temp cwd as the repository root.
217
+
208
218
  Verify:
209
219
  1) Files in plan exist with expected content.
210
220
  2) No syntax errors (run tsc --noEmit if TS).
@@ -1 +1 @@
1
- {"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../../../src/orchestrator/state-machine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../../../src/orchestrator/state-machine.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cli-jaw",
3
- "version": "2.0.2",
3
+ "version": "2.0.4",
4
4
  "description": "Personal AI assistant powered by 5 engines (Claude, Codex, Gemini, OpenCode, Copilot) — Web, Terminal, Telegram, and Discord interfaces with 107 built-in skills",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -1,4 +1,4 @@
1
- import{o as e}from"./rolldown-runtime-DE9SaGGd.js";import{f as t}from"./vendor-render-984tPmpy.js";import{n,t as r}from"./jsx-runtime-DOs-BiPY.js";import{C as i,E as a,S as o,T as s,c,d as l,f as u,g as d,h as f,i as p,l as m,m as h,p as g,r as ee,s as _,u as te,x as v,y as ne}from"./insert-image-markdown-DIEa-zjk.js";import{n as re,t as ie}from"./w3c-keyname-IiiZScED.js";import{T as ae}from"./vendor-utils-CWelFt6C.js";var oe={}.hasOwnProperty;function se(e,t){let n=t||{};function r(t,...n){let i=r.invalid,a=r.handlers;if(t&&oe.call(t,e)){let n=String(t[e]);i=oe.call(a,n)?a[n]:r.unknown}if(i)return i.call(this,t,...n)}return r.handlers=n.handlers||{},r.invalid=n.invalid,r.unknown=n.unknown,r}var ce={}.hasOwnProperty;function le(e,t){let n=-1,r;if(t.extensions)for(;++n<t.extensions.length;)le(e,t.extensions[n]);for(r in t)if(ce.call(t,r))switch(r){case`extensions`:break;case`unsafe`:ue(e[r],t[r]);break;case`join`:ue(e[r],t[r]);break;case`handlers`:de(e[r],t[r]);break;default:e.options[r]=t[r]}return e}function ue(e,t){t&&e.push(...t)}function de(e,t){t&&Object.assign(e,t)}var fe=[pe];function pe(e,t,n,r){if(t.type===`code`&&f(t,r)&&(e.type===`list`||e.type===t.type&&f(e,r)))return!1;if(`spread`in n&&typeof n.spread==`boolean`)return e.type===`paragraph`&&(e.type===t.type||t.type===`definition`||t.type===`heading`&&g(t,r))?void 0:+!!n.spread}var me=[`autolink`,`destinationLiteral`,`destinationRaw`,`reference`,`titleQuote`,`titleApostrophe`],he=[{character:` `,after:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,before:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`]},{character:`\r`,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`,`codeFencedMetaGraveAccent`,`codeFencedMetaTilde`,`destinationLiteral`,`headingAtx`]},{character:`
1
+ import{o as e}from"./rolldown-runtime-DE9SaGGd.js";import{f as t}from"./vendor-render-984tPmpy.js";import{n,t as r}from"./jsx-runtime-DOs-BiPY.js";import{C as i,E as a,S as o,T as s,c,d as l,f as u,g as d,h as f,i as p,l as m,m as h,p as g,r as ee,s as _,u as te,x as v,y as ne}from"./insert-image-markdown-kk053MvN.js";import{n as re,t as ie}from"./w3c-keyname-IiiZScED.js";import{T as ae}from"./vendor-utils-CWelFt6C.js";var oe={}.hasOwnProperty;function se(e,t){let n=t||{};function r(t,...n){let i=r.invalid,a=r.handlers;if(t&&oe.call(t,e)){let n=String(t[e]);i=oe.call(a,n)?a[n]:r.unknown}if(i)return i.call(this,t,...n)}return r.handlers=n.handlers||{},r.invalid=n.invalid,r.unknown=n.unknown,r}var ce={}.hasOwnProperty;function le(e,t){let n=-1,r;if(t.extensions)for(;++n<t.extensions.length;)le(e,t.extensions[n]);for(r in t)if(ce.call(t,r))switch(r){case`extensions`:break;case`unsafe`:ue(e[r],t[r]);break;case`join`:ue(e[r],t[r]);break;case`handlers`:de(e[r],t[r]);break;default:e.options[r]=t[r]}return e}function ue(e,t){t&&e.push(...t)}function de(e,t){t&&Object.assign(e,t)}var fe=[pe];function pe(e,t,n,r){if(t.type===`code`&&f(t,r)&&(e.type===`list`||e.type===t.type&&f(e,r)))return!1;if(`spread`in n&&typeof n.spread==`boolean`)return e.type===`paragraph`&&(e.type===t.type||t.type===`definition`||t.type===`heading`&&g(t,r))?void 0:+!!n.spread}var me=[`autolink`,`destinationLiteral`,`destinationRaw`,`reference`,`titleQuote`,`titleApostrophe`],he=[{character:` `,after:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,before:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`]},{character:`\r`,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`,`codeFencedMetaGraveAccent`,`codeFencedMetaTilde`,`destinationLiteral`,`headingAtx`]},{character:`
2
2
  `,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`,`codeFencedMetaGraveAccent`,`codeFencedMetaTilde`,`destinationLiteral`,`headingAtx`]},{character:` `,after:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,before:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`]},{character:`!`,after:`\\[`,inConstruct:`phrasing`,notInConstruct:me},{character:`"`,inConstruct:`titleQuote`},{atBreak:!0,character:`#`},{character:`#`,inConstruct:`headingAtx`,after:`(?:[\r
3
3
  ]|$)`},{character:`&`,after:`[#A-Za-z]`,inConstruct:`phrasing`},{character:`'`,inConstruct:`titleApostrophe`},{character:`(`,inConstruct:`destinationRaw`},{before:`\\]`,character:`(`,inConstruct:`phrasing`,notInConstruct:me},{atBreak:!0,before:`\\d+`,character:`)`},{character:`)`,inConstruct:`destinationRaw`},{atBreak:!0,character:`*`,after:`(?:[ \r
4
4
  *])`},{character:`*`,inConstruct:`phrasing`,notInConstruct:me},{atBreak:!0,character:`+`,after:`(?:[ \r
@@ -1,10 +1,10 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-Bjnw0wQ6.css"])))=>i.map(i=>d[i]);
2
- import{n as e,r as t}from"./vendor-render-984tPmpy.js";import{t as n}from"./state-xhhyIPlq.js";import{a as r,i,n as a,r as o,t as s}from"./api-tVoG39dL.js";import{_ as c,c as l,d as u,g as d,i as ee,m as te,n as f,t as ne,v as re,y as p}from"./render-DGQX46ei.js";import{t as ie}from"./preload-helper-CMqhPRCH.js";import{C as ae,S as oe,d as se,n as m,s as ce,t as h,w as le,x as ue,y as de}from"./ui-CdRKN2S6.js";import{a as g,n as fe}from"./idb-cache-CjnC_K0x.js";import{a as pe,i as me,o as he,r as ge,t as _e}from"./ws-CTHQFzM1.js";import{t as ve}from"./locale-f397XJgr.js";import{a as ye,i as be,n as xe,o as Se,r as Ce,t as we}from"./slash-commands-Dzk1xHWS.js";import{a as Te,r as Ee}from"./constants-CYjOMbjf.js";import{A as De,C as Oe,D as ke,F as Ae,I as je,L as Me,M as Ne,N as Pe,P as Fe,R as Ie,T as Le,_ as Re,a as ze,b as _,c as Be,d as Ve,f as He,g as Ue,h as We,i as Ge,j as Ke,k as qe,l as Je,m as Ye,n as Xe,o as Ze,r as Qe,s as $e,t as v,u as et,v as tt,w as nt,y as rt,z as it}from"./settings-BH213Yv3.js";import{a as at,i as ot,t as st}from"./skills-CQtCtHPA.js";import{a as ct,c as y,d as lt,f as ut,i as dt,l as ft,m as pt,n as mt,o as ht,p as gt,r as _t,s as vt,t as yt,u as bt}from"./memory-CsMNkYtv.js";var b=[];function xt(e){return/^\/compact(?:\s|$)/i.test(String(e||``).trim())?300*1e3:1e4}function St(e){return/^\/(?:orchestrate|pabcd)(?:\s|$)/i.test(String(e||``).trim())}var Ct=!1;async function x(e=`enter`){let t=document.getElementById(`chatInput`),a=document.getElementById(`btnSend`);if(!t||!a)return;let c=e===`button`;if(a.classList.contains(`stop-mode`)&&c){o(`/api/stop`,`POST`);return}if(Ct)return;let l=t.value.trim();if(!l&&!n.attachedFiles.length)return;me(),Ct=!0;let d=a,ee=d.disabled;d.disabled=!0;try{await Oe();let e=l.slice(1).trim().split(/\s+/)[0]||``,a=e.includes(`/`)||e.includes(`\\`);if(l.startsWith(`/`)&&!n.attachedFiles.length&&!a){let e=St(l);t.value=``,C(),we();try{let e,t,n=xt(l);if(typeof AbortSignal?.timeout==`function`)e=AbortSignal.timeout(n);else{let r=new AbortController;e=r.signal,t=setTimeout(()=>r.abort(),n)}let a=ve(),o=await r(),c=await fetch(`${s}/api/command`,{method:`POST`,headers:{"Content-Type":`application/json`,"Accept-Language":a,...o?{Authorization:`Bearer ${o}`}:{}},body:JSON.stringify({text:l,locale:a}),signal:e});t&&clearTimeout(t);let u=await c.json().catch(()=>({}));if(u?.code===`not_command`){h(`user`,l),g({role:`user`,content:l,timestamp:Date.now()}),await i(`/api/message`,`POST`,{prompt:l});return}if(!c.ok&&!u?.text)throw Error(`HTTP ${c.status}`);if(u?.code===`clear_screen`){ne(),oe().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``)}u?.text&&m(f(u.text),``,u.type)}catch(e){m(p(`chat.cmd.fail`,{msg:e.message}),``,`error`)}finally{e&&ge(`command`).catch(()=>{})}return}if(n.attachedFiles.length){let e=`📎 [${n.attachedFiles.map(e=>e.name).join(`, `)}] ${l}`;h(`user`,e),g({role:`user`,content:e,timestamp:Date.now()}),t.value=``,C();try{let e=(await Promise.all(n.attachedFiles.map(e=>Tt(e)))).map(e=>p(`chat.file.sent`,{path:e})).join(`
3
- `);l&&(e+=p(`chat.file.sentWithMsg`,{text:l})),S(),await i(`/api/message`,`POST`,{prompt:e})}catch(e){m(p(`chat.file.uploadFail`,{msg:e.message})),S()}}else{t.value=``,C();let e=await fetch(`${s}/api/message`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({prompt:l})}),n=await e.json().catch(()=>({}));if(e.status===409&&n.error===`duplicate`)return;if(!e.ok){m(`${u.error} ${f(n.error||p(`chat.requestFail`,{status:e.status}))}`,``,`error`);return}if(n.queued){let{updateQueueBadge:e}=await ie(async()=>{let{updateQueueBadge:e}=await import(`./ui-n43jmg_f.js`);return{updateQueueBadge:e}},__vite__mapDeps([0]));e(n.pending||1)}else n.continued?(h(`user`,l),g({role:`user`,content:l,timestamp:Date.now()}),m(p(`chat.continue`))):(h(`user`,l),g({role:`user`,content:l,timestamp:Date.now()}))}}finally{Ct=!1,d.disabled=ee}}function wt(e){e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),x(`enter`))}async function Tt(e){let t=await fetch(`${s}/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 Et(e){for(let t of e)n.attachedFiles.some(e=>e.name===t.name)||n.attachedFiles.push(t);Ot(),document.getElementById(`chatInput`)?.focus()}function Dt(e){n.attachedFiles.splice(e,1),Ot()}function S(){b.forEach(e=>URL.revokeObjectURL(e)),b=[],n.attachedFiles=[],Ot();let e=document.getElementById(`fileInput`);e&&(e.value=``)}function Ot(){let e=document.getElementById(`filePreview`),t=document.getElementById(`filePreviewList`);if(e){if(b.forEach(e=>URL.revokeObjectURL(e)),b=[],!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);b.push(t),i=`<img src="${t}" class="file-chip-thumb" alt="">`}return`<div class="file-chip">
2
+ import{n as e,r as t}from"./vendor-render-984tPmpy.js";import{t as n}from"./state-xhhyIPlq.js";import{a as r,i,n as a,r as o,t as s}from"./api-tVoG39dL.js";import{_ as c,c as l,d as u,g as d,i as ee,m as te,n as f,t as ne,v as re,y as p}from"./render-KVGsbWj1.js";import{t as ie}from"./preload-helper-CMqhPRCH.js";import{C as ae,S as oe,d as se,n as m,s as ce,t as h,w as le,x as ue,y as de}from"./ui-kS1ZJfez.js";import{a as g,n as fe}from"./idb-cache-CjnC_K0x.js";import{a as pe,i as me,o as he,r as ge,t as _e}from"./ws-DVE3eWRj.js";import{t as ve}from"./locale-f397XJgr.js";import{a as ye,i as be,n as xe,o as Se,r as Ce,t as we}from"./slash-commands-2ThyUGvX.js";import{a as Te,r as Ee}from"./constants-CYjOMbjf.js";import{A as De,C as Oe,D as ke,F as Ae,I as je,L as Me,M as Ne,N as Pe,P as Fe,R as Ie,T as Le,_ as Re,a as ze,b as _,c as Be,d as Ve,f as He,g as Ue,h as We,i as Ge,j as Ke,k as qe,l as Je,m as Ye,n as Xe,o as Ze,r as Qe,s as $e,t as v,u as et,v as tt,w as nt,y as rt,z as it}from"./settings-C7QWaUHB.js";import{a as at,i as ot,t as st}from"./skills-CHkTgM7L.js";import{a as ct,c as y,d as lt,f as ut,i as dt,l as ft,m as pt,n as mt,o as ht,p as gt,r as _t,s as vt,t as yt,u as bt}from"./memory-dJGp6QBv.js";var b=[];function xt(e){return/^\/compact(?:\s|$)/i.test(String(e||``).trim())?300*1e3:1e4}function St(e){return/^\/(?:orchestrate|pabcd)(?:\s|$)/i.test(String(e||``).trim())}var Ct=!1;async function x(e=`enter`){let t=document.getElementById(`chatInput`),a=document.getElementById(`btnSend`);if(!t||!a)return;let c=e===`button`;if(a.classList.contains(`stop-mode`)&&c){o(`/api/stop`,`POST`);return}if(Ct)return;let l=t.value.trim();if(!l&&!n.attachedFiles.length)return;me(),Ct=!0;let d=a,ee=d.disabled;d.disabled=!0;try{await Oe();let e=l.slice(1).trim().split(/\s+/)[0]||``,a=e.includes(`/`)||e.includes(`\\`);if(l.startsWith(`/`)&&!n.attachedFiles.length&&!a){let e=St(l);t.value=``,C(),we();try{let e,t,n=xt(l);if(typeof AbortSignal?.timeout==`function`)e=AbortSignal.timeout(n);else{let r=new AbortController;e=r.signal,t=setTimeout(()=>r.abort(),n)}let a=ve(),o=await r(),c=await fetch(`${s}/api/command`,{method:`POST`,headers:{"Content-Type":`application/json`,"Accept-Language":a,...o?{Authorization:`Bearer ${o}`}:{}},body:JSON.stringify({text:l,locale:a}),signal:e});t&&clearTimeout(t);let u=await c.json().catch(()=>({}));if(u?.code===`not_command`){h(`user`,l),g({role:`user`,content:l,timestamp:Date.now()}),await i(`/api/message`,`POST`,{prompt:l});return}if(!c.ok&&!u?.text)throw Error(`HTTP ${c.status}`);if(u?.code===`clear_screen`){ne(),oe().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``)}u?.text&&m(f(u.text),``,u.type)}catch(e){m(p(`chat.cmd.fail`,{msg:e.message}),``,`error`)}finally{e&&ge(`command`).catch(()=>{})}return}if(n.attachedFiles.length){let e=`📎 [${n.attachedFiles.map(e=>e.name).join(`, `)}] ${l}`;h(`user`,e),g({role:`user`,content:e,timestamp:Date.now()}),t.value=``,C();try{let e=(await Promise.all(n.attachedFiles.map(e=>Tt(e)))).map(e=>p(`chat.file.sent`,{path:e})).join(`
3
+ `);l&&(e+=p(`chat.file.sentWithMsg`,{text:l})),S(),await i(`/api/message`,`POST`,{prompt:e})}catch(e){m(p(`chat.file.uploadFail`,{msg:e.message})),S()}}else{t.value=``,C();let e=await fetch(`${s}/api/message`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({prompt:l})}),n=await e.json().catch(()=>({}));if(e.status===409&&n.error===`duplicate`)return;if(!e.ok){m(`${u.error} ${f(n.error||p(`chat.requestFail`,{status:e.status}))}`,``,`error`);return}if(n.queued){let{updateQueueBadge:e}=await ie(async()=>{let{updateQueueBadge:e}=await import(`./ui-LhD1VfQs.js`);return{updateQueueBadge:e}},__vite__mapDeps([0]));e(n.pending||1)}else n.noPendingContinue?(h(`user`,l),g({role:`user`,content:l,timestamp:Date.now()})):n.continued?(h(`user`,l),g({role:`user`,content:l,timestamp:Date.now()}),m(p(`chat.continue`))):(h(`user`,l),g({role:`user`,content:l,timestamp:Date.now()}))}}finally{Ct=!1,d.disabled=ee}}function wt(e){e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),x(`enter`))}async function Tt(e){let t=await fetch(`${s}/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 Et(e){for(let t of e)n.attachedFiles.some(e=>e.name===t.name)||n.attachedFiles.push(t);Ot(),document.getElementById(`chatInput`)?.focus()}function Dt(e){n.attachedFiles.splice(e,1),Ot()}function S(){b.forEach(e=>URL.revokeObjectURL(e)),b=[],n.attachedFiles=[],Ot();let e=document.getElementById(`fileInput`);e&&(e.value=``)}function Ot(){let e=document.getElementById(`filePreview`),t=document.getElementById(`filePreviewList`);if(e){if(b.forEach(e=>URL.revokeObjectURL(e)),b=[],!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);b.push(t),i=`<img src="${t}" class="file-chip-thumb" alt="">`}return`<div class="file-chip">
4
4
  ${i}
5
5
  <span class="file-chip-name">${u.paperclip} ${f(e.name)} (${n}KB)</span>
6
6
  <button class="file-chip-remove" data-file-idx="${t}" title="Remove">${u.close}</button>
7
- </div>`}).join(``))}}async function kt(){ne(),oe().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``);let{cleanupToolActivity:t}=await ie(async()=>{let{cleanupToolActivity:e}=await import(`./ui-n43jmg_f.js`);return{cleanupToolActivity:e}},__vite__mapDeps([0]));t(),fe().catch(()=>{}),me()}var At=0;function jt(e){At||=requestAnimationFrame(()=>{At=0,e.style.height=`auto`,e.style.height=e.scrollHeight+`px`})}function Mt(){let e=document.getElementById(`chatInput`);e&&e.addEventListener(`input`,()=>jt(e))}function C(){let e=document.getElementById(`chatInput`);e&&(e.style.height=`auto`)}function Nt(){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&&Et(r)}),document.getElementById(`fileInput`)?.addEventListener(`change`,e=>{let t=e.target,n=[...t.files||[]];n.length&&Et(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(),Et(n))})}async function Pt(e,t,r){let a=document.getElementById(`chatInput`),o=a?.value.trim()||``,c=[...n.attachedFiles],l=[p(`chat.voice.label`)];c.length&&l.push(`📎 [${c.map(e=>e.name).join(`, `)}]`),o&&l.push(o),h(`user`,l.join(` `)),g({role:`user`,content:l.join(` `),timestamp:Date.now()}),a&&o&&(a.value=``,C()),c.length&&S();try{let n=await fetch(`${s}/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 a=await n.json().catch(()=>null);if(!a?.text)throw Error(`Empty STT result`);m(`${u.mic} STT (${f(a.engine||``)}, ${a.elapsed?.toFixed(1)}s): "${f(a.text.slice(0,100))}"`,``,`info`);let l=[];c.length&&(l=await Promise.all(c.map(e=>Tt(e))));let d=[];for(let e of l)d.push(p(`chat.file.sent`,{path:e}));d.push(`🎤 ${a.text}`),o&&d.push(o),await i(`/api/message`,`POST`,{prompt:d.join(`
7
+ </div>`}).join(``))}}async function kt(){ne(),oe().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``);let{cleanupToolActivity:t}=await ie(async()=>{let{cleanupToolActivity:e}=await import(`./ui-LhD1VfQs.js`);return{cleanupToolActivity:e}},__vite__mapDeps([0]));t(),fe().catch(()=>{}),me()}var At=0;function jt(e){At||=requestAnimationFrame(()=>{At=0,e.style.height=`auto`,e.style.height=e.scrollHeight+`px`})}function Mt(){let e=document.getElementById(`chatInput`);e&&e.addEventListener(`input`,()=>jt(e))}function C(){let e=document.getElementById(`chatInput`);e&&(e.style.height=`auto`)}function Nt(){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&&Et(r)}),document.getElementById(`fileInput`)?.addEventListener(`change`,e=>{let t=e.target,n=[...t.files||[]];n.length&&Et(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(),Et(n))})}async function Pt(e,t,r){let a=document.getElementById(`chatInput`),o=a?.value.trim()||``,c=[...n.attachedFiles],l=[p(`chat.voice.label`)];c.length&&l.push(`📎 [${c.map(e=>e.name).join(`, `)}]`),o&&l.push(o),h(`user`,l.join(` `)),g({role:`user`,content:l.join(` `),timestamp:Date.now()}),a&&o&&(a.value=``,C()),c.length&&S();try{let n=await fetch(`${s}/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 a=await n.json().catch(()=>null);if(!a?.text)throw Error(`Empty STT result`);m(`${u.mic} STT (${f(a.engine||``)}, ${a.elapsed?.toFixed(1)}s): "${f(a.text.slice(0,100))}"`,``,`info`);let l=[];c.length&&(l=await Promise.all(c.map(e=>Tt(e))));let d=[];for(let e of l)d.push(p(`chat.file.sent`,{path:e}));d.push(`🎤 ${a.text}`),o&&d.push(o),await i(`/api/message`,`POST`,{prompt:d.join(`
8
8
  `)})}catch(e){m(p(`voice.sttFail`,{msg:e.message}),``,`error`)}}var Ft={sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6},It={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 Lt(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 Rt(e){let t=e&&typeof e==`object`?e:{},n=t.kind,r=typeof t.timeZone==`string`?t.timeZone.trim():``,i=Lt(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=zt(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 zt(e){try{let[t,n,r,i,a]=Bt(e);return w(t,{min:0,max:59}),w(n,{min:0,max:23}),w(r,{min:1,max:31}),w(i,{min:1,max:12,aliases:It}),w(a,{min:0,max:7,aliases:Ft,normalize:Wt}),null}catch(e){return e.message}}function Bt(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 w(e,t){for(let n of e.split(`,`))Vt(n.trim(),t)}function Vt(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,Ut(r,`invalid cron step "${r}"`)}if(n!==`*`){if(n.includes(`-`)){let[e,r,...i]=n.split(`-`);if(!e||!r||i.length>0||Ht(e,t)>Ht(r,t))throw Error(`invalid cron range "${n}"`);return}Ht(n,t)}}function Ht(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(!Gt(i,t.min,t.max))throw Error(`cron value "${e}" out of range ${t.min}-${t.max}`);return i}function Ut(e,t){let n=Number(e);if(!Number.isInteger(n)||n<=0)throw Error(t);return n}function Wt(e){return e===7?0:e}function Gt(e,t,n){return e>=t&&e<=n}async function Kt(){n.heartbeatJobs=((await a(`/api/heartbeat`))?.jobs||[]).map(D),n.heartbeatErrors=k(n.heartbeatJobs),T(),document.getElementById(`heartbeatModal`)?.classList.add(`open`)}function qt(e){e&&e.target!==e.currentTarget||document.getElementById(`heartbeatModal`)?.classList.remove(`open`)}function T(){let e=document.getElementById(`hbJobsList`);if(!e)return;let t=n.heartbeatJobs.map(D);n.heartbeatJobs=t,n.heartbeatErrors=k(t),t.length===0?e.innerHTML=`<p style="color:var(--text-dim);font-size:12px;text-align:center">${p(`hb.empty`)}</p>`:e.innerHTML=t.map((e,t)=>{let r=Qt(e.schedule),i=r.kind===`cron`,a=n.heartbeatErrors[e.id],o=a||an(r),s=a?`hb-schedule-meta hb-error`:`hb-schedule-meta hb-help`,c=i?`<input type="text" value="${f(r.cron)}" placeholder="${f(p(`hb.cronPlaceholder`))}"
9
9
  data-hb-cron="${t}">`:`<input type="number" value="${r.minutes}" min="1" data-hb-minutes="${t}">`,l=i?`<span class="hb-chip">${f(p(`hb.cronLabel`))}</span>`:`<span class="hb-chip">${f(p(`hb.minutesLabel`))}</span>`;return`
10
10
  <div class="hb-job-card">
@@ -29,4 +29,4 @@ import{n as e,r as t}from"./vendor-render-984tPmpy.js";import{t as n}from"./stat
29
29
  <textarea class="hb-prompt" rows="2" placeholder="${f(p(`hb.prompt`))}"
30
30
  data-hb-prompt="${t}">${f(String(e.prompt||``))}</textarea>
31
31
  </div>
32
- `}).join(``);let r=t.filter(e=>e.enabled).length,i=document.getElementById(`hbSidebarBtn`);i&&(i.innerHTML=`${u.heartPulse} Heartbeat (${r})`)}function Jt(){n.heartbeatJobs.push({id:`hb_`+Date.now(),name:``,enabled:!0,schedule:en({kind:`every`,minutes:5}),prompt:``}),T(),E()}function Yt(e){n.heartbeatJobs.splice(e,1),T(),E()}function Xt(e){let t=n.heartbeatJobs[e];t&&(t.enabled=!t.enabled,T(),E())}async function E(){let e=n.heartbeatJobs.map(D);if(n.heartbeatJobs=e,n.heartbeatErrors=k(e),Object.keys(n.heartbeatErrors).length>0){T();return}let t=await i(`/api/heartbeat`,`PUT`,{jobs:e});t?.jobs&&(n.heartbeatJobs=t.jobs.map(D),n.heartbeatErrors=k(n.heartbeatJobs),T())}async function Zt(){try{let e=((await a(`/api/heartbeat`))?.jobs||[]).map(D).filter(e=>e.enabled).length,t=document.getElementById(`hbSidebarBtn`);t&&(t.innerHTML=`${u.heartPulse} Heartbeat (${e})`)}catch{}}function D(e){return{id:String(e.id||`hb_${Date.now()}`),name:String(e.name||``),enabled:e.enabled!==!1,schedule:Qt(e.schedule),prompt:String(e.prompt||``)}}function Qt(e){let t=$t(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 $t(e){return(typeof e==`string`?e.trim():``)||void 0}function en(e){let t=O();return t?{...e,timeZone:t}:e}function O(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone||void 0}catch{return}}function tn(){let e=O();return e?`${p(`hb.timezoneAuto`)} ${e}`:p(`hb.timezoneAuto`)}function k(e){let t={};for(let n of e){let e=nn(n);e&&(t[n.id]=e)}return t}function nn(e){let t=Rt(e.schedule);return t.ok?null:rn(t.code,t.error)}function rn(e,t){switch(e){case`invalid_cron`:return p(`hb.invalidCron`);case`invalid_timezone`:return p(`hb.invalidTimeZone`);case`invalid_minutes`:return p(`hb.invalidMinutes`);default:return t||p(`hb.invalidSchedule`)}}function an(e){let t=e.timeZone||O()||`Asia/Seoul`;return e.kind===`cron`?p(`hb.scheduleHintCron`,{cron:`0 9 * * *`,timeZone:t}):p(`hb.scheduleHintEvery`,{minutes:e.minutes,timeZone:t})}var A=`sidebarState`,j=900,on=768;function M(){return window.innerWidth<=on}function N(){document.body.classList.remove(`left-expanded`,`right-expanded`)}function sn(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 cn(){let e={};try{e=JSON.parse(localStorage.getItem(A)||`{}`)}catch{}e.left&&document.body.classList.add(`left-collapsed`),e.right&&document.body.classList.add(`right-collapsed`);let t=M();document.getElementById(`toggleLeft`)?.addEventListener(`click`,F),document.getElementById(`toggleRight`)?.addEventListener(`click`,I),window.addEventListener(`resize`,()=>{let e=M();if(window.innerWidth>j){N();let e={};try{e=JSON.parse(localStorage.getItem(A)||`{}`)}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&&N();t=e,L()}),window.innerWidth<=j&&(document.body.classList.remove(`left-collapsed`,`right-collapsed`),M()&&N()),L()}function P(){return window.innerWidth<=j}function F(){P()?sn(`left`):document.body.classList.toggle(`left-collapsed`),dn(),L()}function I(){P()?sn(`right`):document.body.classList.toggle(`right-collapsed`),dn(),L()}function ln(){return P()?document.body.classList.contains(`left-expanded`):!document.body.classList.contains(`left-collapsed`)}function un(){return P()?document.body.classList.contains(`right-expanded`):!document.body.classList.contains(`right-collapsed`)}function L(){let e=document.getElementById(`toggleLeft`),t=document.getElementById(`toggleRight`);e&&(e.innerHTML=ln()?u.chevronLeft:u.chevronRight),t&&(t.innerHTML=un()?u.chevronRight:u.chevronLeft)}function dn(){localStorage.setItem(A,JSON.stringify({left:document.body.classList.contains(`left-collapsed`),right:document.body.classList.contains(`right-collapsed`)}))}var fn=`theme`,R=null;function pn(e){return e===`dark`||e===`light`}function mn(n){let r=n===`light`?e:t;R||(R=document.createElement(`style`),R.id=`hljsTheme`,document.head.appendChild(R)),R.textContent=r}function hn(){let e=vn(),t=localStorage.getItem(fn),n=window.matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`;_n(e||t||n),document.getElementById(`toggleTheme`)?.addEventListener(`click`,gn),window.addEventListener(`message`,bn)}function gn(){let e=(document.documentElement.getAttribute(`data-theme`)||`dark`)===`dark`?`light`:`dark`;_n(e),localStorage.setItem(fn,e)}function _n(e){document.documentElement.setAttribute(`data-theme`,e);let t=document.getElementById(`toggleTheme`);t&&t.classList.toggle(`is-light`,e===`light`),mn(e),ue(),l()}function vn(){let e=new URLSearchParams(window.location.search).get(`jawTheme`);return pn(e)?e:null}function yn(e){if(e===window.location.origin)return!0;try{let t=new URL(e).hostname;return t===`localhost`||t===`127.0.0.1`||t===`::1`||t===`[::1]`}catch{return!1}}function bn(e){if(window.parent===window||e.source!==window.parent||!yn(e.origin))return;let t=e.data;!t||t.type!==`jaw-preview-theme-sync`||!pn(t.theme)||_n(t.theme)}var xn=50,Sn=30,Cn=80,wn=500,z=null,Tn=!1;function En(){if(Tn||!(`ontouchstart`in window))return;Tn=!0;let e=document.querySelector(`.chat-area`);e&&(e.addEventListener(`touchstart`,Dn,{passive:!0}),e.addEventListener(`touchend`,On,{passive:!0}))}function Dn(e){let t=e.touches[0],n=window.innerWidth,r=null;t.clientX<Sn?r=`left`:t.clientX>n-Sn&&(r=`right`),z={startX:t.clientX,startY:t.clientY,startTime:Date.now(),isEdge:r}}function On(e){if(!z)return;let t=e.changedTouches[0],n=t.clientX-z.startX,r=Math.abs(t.clientY-z.startY),i=Date.now()-z.startTime,a=z;z=null,!(r>Cn||i>wn||Math.abs(n)<xn)&&(n>0&&a.isEdge===`left`&&F(),n<0&&a.isEdge===`right`&&I())}var kn=!1,B=null,V=[],H=null,An=null,jn=0;function Mn(){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 Nn(e){let t=e;switch(t.name){case`NotAllowedError`:return p(`voice.micDenied`);case`NotFoundError`:return p(`voice.micNotFound`);case`NotReadableError`:case`AbortError`:return p(`voice.micBusy`);default:return t instanceof TypeError||!navigator.mediaDevices?p(`voice.httpsRequired`):p(`voice.micDenied`)}}async function Pn(){if(n.isRecording)return;if(typeof MediaRecorder>`u`||!navigator.mediaDevices?.getUserMedia){m(p(`voice.unsupported`),``,`error`);return}try{H=await navigator.mediaDevices.getUserMedia({audio:!0})}catch(e){m(Nn(e),``,`error`);return}let e=Mn();B=new MediaRecorder(H,e?{mimeType:e}:{}),V=[],B.ondataavailable=e=>{e.data.size>0&&V.push(e.data)},B.onerror=()=>{Fn(),m(p(`voice.interrupted`),``,`error`)},B.onstop=async()=>{if(kn){V=[],Rn(),kn=!1;return}let t=B?.mimeType||e||`audio/webm`,n=t.includes(`mp4`)?`.m4a`:t.includes(`ogg`)?`.ogg`:`.webm`,r=new Blob(V,{type:t});if(V=[],Rn(),r.size>20*1024*1024){m(p(`voice.tooLarge`),``,`error`);return}if(r.size<1e3){m(p(`voice.tooShort`),``,`error`);return}await Pt(r,n,t)},B.start(),n.isRecording=!0,jn=Date.now(),Vn(!0),zn()}function Fn(){!n.isRecording||!B||(B.state===`recording`&&B.stop(),n.isRecording=!1,Bn(),Vn(!1))}function In(){!n.isRecording||!B||(kn=!0,B.state===`recording`&&B.stop(),n.isRecording=!1,Bn(),Vn(!1))}function Ln(){n.isRecording?Fn():Pn()}function Rn(){H?.getTracks().forEach(e=>e.stop()),H=null}function zn(){let e=document.getElementById(`voiceTimer`);e&&(e.style.display=`inline`,An=setInterval(()=>{let t=Math.floor((Date.now()-jn)/1e3);e.textContent=`${String(Math.floor(t/60)).padStart(2,`0`)}:${String(t%60).padStart(2,`0`)}`},500))}function Bn(){An&&=(clearInterval(An),null);let e=document.getElementById(`voiceTimer`);e&&(e.style.display=`none`,e.textContent=`00:00`)}function Vn(e){let t=document.getElementById(`btnVoice`),n=document.getElementById(`btnVoiceCancel`);t&&(t.classList.toggle(`recording`,e),t.innerHTML=e?u.stop:u.mic,t.title=p(e?`voice.stop`:`voice.start`)),n&&(n.style.display=e?`inline-block`:`none`)}var Hn={activeCli:U(`activeCli`,2,1,2),model:U(`model`,2,1,1),effort:U(`effort`,2,1,1),permissions:U(`permissions`,2,1,1),flushAgent:U(`flushAgent`,2,1,1),employees:U(`employees`,3,3,2),skills:U(`skills`,2,1,1),activeChannel:U(`activeChannel`,2,1,1),telegram:U(`telegram`,2,1,2),discord:U(`discord`,2,1,2),fallbackOrder:U(`fallbackOrder`,2,1,1),mcp:U(`mcp`,2,1,1),memory:U(`memory`,2,1,2),stt:U(`stt`,2,1,1),promptTemplates:U(`promptTemplates`,2,1,1)};function Un(e){return typeof e==`string`&&Object.prototype.hasOwnProperty.call(Hn,e)}function U(e,t,n,r,i=2,a=1){return{titleKey:`help.${e}.title`,introKey:`help.${e}.intro`,effectKey:`help.${e}.effect`,useWhenKeys:W(`help.${e}.use`,t),howToKeys:W(`help.${e}.howTo`,i),exampleKeys:W(`help.${e}.example`,a),avoidWhenKeys:W(`help.${e}.avoid`,n),relatedKeys:W(`help.${e}.related`,r)}}function W(e,t){return Array.from({length:t},(t,n)=>`${e}.${n+1}`)}var Wn=!1,G=null,K=null,q=null,J=null,Gn=null,Y=!1;function Kn(){Wn||(Wn=!0,document.addEventListener(`click`,Jn),document.addEventListener(`keydown`,Yn,!0))}function qn(e,t=null){let n=Hn[e];if(!n){console.warn(`[help-dialog] unknown topic:`,e);return}Xn(),Gn=t,Zn(n),G?.classList.add(`open`),G?.setAttribute(`aria-hidden`,`false`),Y=!0,requestAnimationFrame(()=>J?.focus())}function X(){if(!Y)return;G?.classList.remove(`open`),G?.setAttribute(`aria-hidden`,`true`),Y=!1;let e=Gn;Gn=null,e?.focus()}function Jn(e){let t=e.target?.closest(`[data-help-topic]`);if(!t)return;let n=t.getAttribute(`data-help-topic`);if(!Un(n)){console.warn(`[help-dialog] invalid topic:`,n);return}e.preventDefault(),qn(n,t)}function Yn(e){!Y||e.key!==`Escape`||(e.preventDefault(),e.stopImmediatePropagation(),X())}function Xn(){if(G&&K&&q&&J)return;G=document.createElement(`div`),G.id=`helpDialog`,G.className=`modal-overlay help-dialog-overlay`,G.setAttribute(`role`,`presentation`),G.setAttribute(`aria-hidden`,`true`),G.addEventListener(`click`,e=>{e.target===G&&X()});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`,K=document.createElement(`span`),K.id=`helpDialogTitle`,J=document.createElement(`button`),J.type=`button`,J.className=`btn-modal-close help-dialog-close`,J.setAttribute(`aria-label`,p(`help.close`)),J.textContent=`x`,J.addEventListener(`click`,()=>X()),q=document.createElement(`div`),q.className=`help-dialog-body`;let n=document.createElement(`div`);n.className=`modal-footer help-dialog-footer`;let r=document.createElement(`button`);r.type=`button`,r.className=`btn-save help-dialog-done`,r.textContent=p(`help.close`),r.addEventListener(`click`,()=>X()),t.append(K,J),n.append(r),e.append(t,q,n),G.append(e),document.body.append(G)}function Zn(e){!K||!q||!J||(K.textContent=p(e.titleKey),J.setAttribute(`aria-label`,p(`help.close`)),q.replaceChildren(),Qn(p(`help.section.what`),p(e.introKey)),Qn(p(`help.section.effect`),p(e.effectKey),`help-effect-text`),Z(p(`help.section.useWhen`),e.useWhenKeys),Z(p(`help.section.howTo`),e.howToKeys),Z(p(`help.section.example`),e.exampleKeys,!1,`help-example-list`),e.avoidWhenKeys?.length&&Z(p(`help.section.avoidWhen`),e.avoidWhenKeys),e.relatedKeys?.length&&Z(p(`help.section.related`),e.relatedKeys,!0))}function Qn(e,t,n){if(!q)return;let r=$n(e),i=document.createElement(`p`);n&&(i.className=n),i.textContent=t,r.append(i),q.append(r)}function Z(e,t,n=!1,r){if(!q)return;let i=$n(e),a=document.createElement(`ul`);a.className=r??(n?`help-related-list`:`help-dialog-list`);for(let e of t){let t=document.createElement(`li`);t.textContent=p(e),a.append(t)}i.append(a),q.append(i)}function $n(e){let t=document.createElement(`section`);t.className=`help-dialog-section`;let n=document.createElement(`h3`);return n.textContent=e,t.append(n),t}var er=`jaw:stale-bundle-reload-pending`;function tr(e){let t=typeof e==`string`?e:e instanceof Error||typeof e?.message==`string`?e.message:``;if(!/(failed to fetch dynamically imported module|error loading dynamically imported module|importing a module script failed|chunkloaderror)/i.test(t))return!1;console.warn(`[stale-bundle] detected dynamic import failure:`,t);try{if(sessionStorage.getItem(er)===`1`)return!0;sessionStorage.setItem(er,`1`)}catch{}let n=()=>window.location.reload();return`serviceWorker`in navigator?(navigator.serviceWorker.getRegistration().then(e=>e?.update()).catch(()=>{}).finally(n),!0):(n(),!0)}window.addEventListener(`unhandledrejection`,e=>{if(tr(e.reason)){e.preventDefault();return}console.error(`[unhandled]`,e.reason),e.preventDefault()}),window.addEventListener(`error`,e=>{if(tr(e.error||e.message)){e.preventDefault();return}console.error(`[error]`,e.message,e.filename,e.lineno)});var{loadEmployees:nr,addEmployee:rr,deleteEmployee:ir,updateEmployee:Q,onEmpCliChange:ar,onEmpRoleChange:or}=await ie(async()=>{let{loadEmployees:e,addEmployee:t,deleteEmployee:n,updateEmployee:r,onEmpCliChange:i,onEmpRoleChange:a}=await import(`./employees-CxdghzoD.js`);return{loadEmployees:e,addEmployee:t,deleteEmployee:n,updateEmployee:r,onEmpCliChange:i,onEmpRoleChange:a}},__vite__mapDeps([0]));document.getElementById(`btnSend`)?.addEventListener(`click`,()=>{x(`button`)});var sr=document.getElementById(`chatInput`);sr?.addEventListener(`keydown`,e=>{Ce(e)||wt(e)});var $=0;sr?.addEventListener(`input`,e=>{e.isComposing||($&&cancelAnimationFrame($),$=requestAnimationFrame(()=>{Se(e.target?.value||``),$=0}))}),sr?.addEventListener(`cmd-execute`,()=>{x(`cmd-execute`)}),document.getElementById(`cmdDropdown`)?.addEventListener(`click`,xe),document.addEventListener(`click`,be),he(),document.getElementById(`filePreviewClear`)?.addEventListener(`click`,S),document.getElementById(`filePreviewList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-file-idx]`);t&&Dt(+(t.dataset.fileIdx||`0`))}),document.querySelector(`.btn-attach`)?.addEventListener(`click`,()=>{document.getElementById(`fileInput`)?.click()}),document.getElementById(`btnVoice`)?.addEventListener(`click`,()=>Ln()),document.getElementById(`btnVoiceCancel`)?.addEventListener(`click`,()=>In()),document.getElementById(`memorySidebarBtn`)?.addEventListener(`click`,dt),document.getElementById(`btnClearChat`)?.addEventListener(`click`,kt),document.getElementById(`hbSidebarBtn`)?.addEventListener(`click`,Kt),document.getElementById(`langSelect`)?.addEventListener(`change`,async e=>{let t=e.target.value;[`ko`,`en`,`zh`,`ja`].includes(t)&&(await re(t),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]&&de(r[n],t)}),document.querySelector(`.sidebar-save-bar .btn-save`)?.addEventListener(`click`,ce),document.getElementById(`selCli`)?.addEventListener(`change`,()=>Re()),document.getElementById(`selModel`)?.addEventListener(`change`,()=>rt()),document.getElementById(`selEffort`)?.addEventListener(`change`,()=>rt()),document.getElementById(`flushCli`)?.addEventListener(`change`,()=>tt()),document.getElementById(`flushModel`)?.addEventListener(`change`,()=>tt()),document.querySelector(`[data-action="addEmployee"]`)?.addEventListener(`click`,rr),document.getElementById(`employeesList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-emp-delete]`);if(t){ir(t.dataset.empDelete||``);return}}),document.getElementById(`employeesList`)?.addEventListener(`change`,e=>{let t=e.target,n=t.closest(`[data-emp-name]`);if(n){Q(n.dataset.empName||``,{name:t.value});return}let r=t.closest(`[data-emp-cli]`);if(r){ar(r.dataset.empCli||``,t.value);return}let i=t.closest(`[data-emp-model]`);if(i){if(t.value===`__custom__`){let e=prompt(p(`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(),Q(i.dataset.empModel||``,{model:e.trim()})}else t.value=`default`}else Q(i.dataset.empModel||``,{model:t.value});return}let a=t.closest(`[data-emp-role]`);if(a){or(a.dataset.empRole||``,t.value);return}let o=t.closest(`[data-emp-custom]`);if(o){Q(o.dataset.empCustom||``,{role:t.value});return}}),document.getElementById(`skillsList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-skill-id]`);t&&at(t.dataset.skillId||``,t.dataset.skillEnabled===`true`)}),document.querySelector(`#tabSkills`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`.skill-filter`);t&&st(t.dataset.filter||`all`,t)}),document.getElementById(`skillSearchInput`)?.addEventListener(`input`,e=>{ot(e.target.value)}),document.querySelector(`[data-action="openPrompt"]`)?.addEventListener(`click`,Qe),document.getElementById(`tgOff`)?.addEventListener(`click`,()=>Ie(!1)),document.getElementById(`tgOn`)?.addEventListener(`click`,()=>Ie(!0)),document.getElementById(`tgForwardOff`)?.addEventListener(`click`,()=>Me(!1)),document.getElementById(`tgForwardOn`)?.addEventListener(`click`,()=>Me(!0)),document.getElementById(`tgMentionOff`)?.addEventListener(`click`,()=>it(!1)),document.getElementById(`tgMentionOn`)?.addEventListener(`click`,()=>it(!0)),document.getElementById(`tgToken`)?.addEventListener(`change`,je),document.getElementById(`tgChatIds`)?.addEventListener(`change`,je),document.getElementById(`chTelegram`)?.addEventListener(`click`,()=>De(`telegram`)),document.getElementById(`chDiscord`)?.addEventListener(`click`,()=>De(`discord`)),document.getElementById(`dcOff`)?.addEventListener(`click`,()=>Ne(!1)),document.getElementById(`dcOn`)?.addEventListener(`click`,()=>Ne(!0)),document.getElementById(`dcForwardOff`)?.addEventListener(`click`,()=>Fe(!1)),document.getElementById(`dcForwardOn`)?.addEventListener(`click`,()=>Fe(!0)),document.getElementById(`dcAllowBotsOff`)?.addEventListener(`click`,()=>Pe(!1)),document.getElementById(`dcAllowBotsOn`)?.addEventListener(`click`,()=>Pe(!0)),document.getElementById(`dcMentionOff`)?.addEventListener(`click`,()=>Ae(!1)),document.getElementById(`dcMentionOn`)?.addEventListener(`click`,()=>Ae(!0)),document.getElementById(`dcToken`)?.addEventListener(`change`,Ke),document.getElementById(`dcGuildId`)?.addEventListener(`change`,Ke),document.getElementById(`dcChannelIds`)?.addEventListener(`change`,Ke),document.getElementById(`fallbackOrderList`)?.addEventListener(`change`,qe);function cr(e){let t=document.getElementById(`codexFastOn`),n=document.getElementById(`codexFastOff`);t&&n&&(t.classList.toggle(`active`,e),n.classList.toggle(`active`,!e)),_()}document.getElementById(`codexFastOn`)?.addEventListener(`click`,()=>cr(!0)),document.getElementById(`codexFastOff`)?.addEventListener(`click`,()=>cr(!1));function lr(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`),_()}document.getElementById(`codexCtxOn`)?.addEventListener(`click`,()=>lr(!0)),document.getElementById(`codexCtxOff`)?.addEventListener(`click`,()=>lr(!1)),document.getElementById(`codexCtxWindow`)?.addEventListener(`change`,_),document.getElementById(`codexCtxCompact`)?.addEventListener(`change`,_);function ur(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)),_()}document.getElementById(`claude1mOn`)?.addEventListener(`click`,()=>ur(!0)),document.getElementById(`claude1mOff`)?.addEventListener(`click`,()=>ur(!1));function dr(){for(let e of Ee()){let t=e.charAt(0).toUpperCase()+e.slice(1),n=document.getElementById(`model`+t);n&&n.addEventListener(`change`,function(){Ye(e,this)});let r=document.getElementById(`customModel`+t);r&&r.addEventListener(`change`,function(){He(e,this)});let i=document.getElementById(`effort`+t);i&&i.addEventListener(`change`,_)}}document.querySelector(`[data-action="syncMcp"]`)?.addEventListener(`click`,ke),document.querySelector(`[data-action="installMcp"]`)?.addEventListener(`click`,Le),document.querySelector(`[data-action="refreshCli"]`)?.addEventListener(`click`,()=>Je(!0)),document.getElementById(`cliStatusInterval`)?.addEventListener(`change`,function(){Ve(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`,ze),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&!n.isRecording&&v()}),document.querySelector(`[data-action="openTemplates"]`)?.addEventListener(`click`,Ge),document.querySelector(`[data-action="saveTemplate"]`)?.addEventListener(`click`,Ze),document.querySelector(`[data-action="closeTemplate"]`)?.addEventListener(`click`,()=>Xe()),document.getElementById(`templateModal`)?.addEventListener(`click`,e=>Xe(e)),document.querySelector(`#templateModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.getElementById(`templateBack`)?.addEventListener(`click`,$e),document.getElementById(`templateDevToggle`)?.addEventListener(`click`,Be),document.getElementById(`heartbeatModal`)?.addEventListener(`click`,e=>qt(e)),document.querySelector(`#heartbeatModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closeHeartbeat"]`)?.addEventListener(`click`,()=>qt()),document.querySelector(`[data-action="addHeartbeat"]`)?.addEventListener(`click`,Jt),document.getElementById(`hbJobsList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-hb-toggle]`);if(t){Xt(+(t.dataset.hbToggle||`0`));return}let n=e.target?.closest(`[data-hb-remove]`);if(n){Yt(+(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,E();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}:{}},T(),E();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}:{}},T(),E();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}:{}},T(),E();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()}:{}},T(),E();return}let c=t.closest(`[data-hb-prompt]`);if(c){n.heartbeatJobs[+(c.dataset.hbPrompt||`0`)].prompt=t.value,E();return}}),document.getElementById(`memoryModal`)?.addEventListener(`click`,e=>yt(e)),document.querySelector(`#memoryModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closeMemory"]`)?.addEventListener(`click`,()=>yt()),document.getElementById(`memTabBtnSettings`)?.addEventListener(`click`,()=>bt(`settings`)),document.getElementById(`memTabBtnAdvOps`)?.addEventListener(`click`,()=>bt(`status`)),document.getElementById(`memTabBtnFiles`)?.addEventListener(`click`,()=>bt(`files`)),document.getElementById(`memOn`)?.addEventListener(`click`,()=>ft(!0)),document.getElementById(`memOff`)?.addEventListener(`click`,()=>ft(!1)),document.getElementById(`memFlushEvery`)?.addEventListener(`change`,y),document.getElementById(`memRetention`)?.addEventListener(`change`,y),document.getElementById(`memFlushLang`)?.addEventListener(`change`,y),document.getElementById(`memFlushNowBtn`)?.addEventListener(`click`,ut),document.getElementById(`advBootstrapBtn`)?.addEventListener(`click`,vt),document.getElementById(`advReindexBtn`)?.addEventListener(`click`,ht),document.getElementById(`advReimportBtn`)?.addEventListener(`click`,vt),document.getElementById(`advOpenCorruptedBtn`)?.addEventListener(`click`,_t),document.getElementById(`advStatusBanner`)?.addEventListener(`click`,e=>{e.target?.id===`advUpgradeSoulBtn`&&gt(),e.target?.id===`advSynthesizeSoulBtn`&&lt()}),document.getElementById(`basicMemoryFiles`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-mem-delete]`);if(t){e.stopPropagation(),mt(t.dataset.memDelete||``);return}let n=e.target?.closest(`[data-mem-view]`);if(n){pt(n.dataset.memView||``);return}if(e.target?.closest(`[data-mem-back]`)){dt();return}});async function fr(){te(),nt(),hn(),await c();let e=document.getElementById(`langSelect`);e&&(e.value=d()),await Te(),dr(),Kn(),pe(),_e(),Nt(),Mt(),await ye(),await Ue(),We(),Je(),et(),nr(),Zt(),ct(),le(),await ae(),cn(),se(),En();try{sessionStorage.removeItem(er)}catch{}ee(),`serviceWorker`in navigator&&navigator.serviceWorker.register(`/sw.js`).catch(()=>{})}fr().catch(e=>{console.error(`[bootstrap]`,e)}),document.addEventListener(`keydown`,e=>{if(e.key===`Escape`){if(n.isRecording){e.preventDefault(),In();return}document.querySelectorAll(`.modal-overlay.open`).forEach(e=>{e.classList.remove(`open`)})}(e.ctrlKey||e.metaKey)&&e.shiftKey&&e.code===`Space`&&(e.preventDefault(),Ln())}),document.getElementById(`mobileMenuLeft`)?.addEventListener(`click`,F),document.getElementById(`mobileMenuRight`)?.addEventListener(`click`,I);
32
+ `}).join(``);let r=t.filter(e=>e.enabled).length,i=document.getElementById(`hbSidebarBtn`);i&&(i.innerHTML=`${u.heartPulse} Heartbeat (${r})`)}function Jt(){n.heartbeatJobs.push({id:`hb_`+Date.now(),name:``,enabled:!0,schedule:en({kind:`every`,minutes:5}),prompt:``}),T(),E()}function Yt(e){n.heartbeatJobs.splice(e,1),T(),E()}function Xt(e){let t=n.heartbeatJobs[e];t&&(t.enabled=!t.enabled,T(),E())}async function E(){let e=n.heartbeatJobs.map(D);if(n.heartbeatJobs=e,n.heartbeatErrors=k(e),Object.keys(n.heartbeatErrors).length>0){T();return}let t=await i(`/api/heartbeat`,`PUT`,{jobs:e});t?.jobs&&(n.heartbeatJobs=t.jobs.map(D),n.heartbeatErrors=k(n.heartbeatJobs),T())}async function Zt(){try{let e=((await a(`/api/heartbeat`))?.jobs||[]).map(D).filter(e=>e.enabled).length,t=document.getElementById(`hbSidebarBtn`);t&&(t.innerHTML=`${u.heartPulse} Heartbeat (${e})`)}catch{}}function D(e){return{id:String(e.id||`hb_${Date.now()}`),name:String(e.name||``),enabled:e.enabled!==!1,schedule:Qt(e.schedule),prompt:String(e.prompt||``)}}function Qt(e){let t=$t(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 $t(e){return(typeof e==`string`?e.trim():``)||void 0}function en(e){let t=O();return t?{...e,timeZone:t}:e}function O(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone||void 0}catch{return}}function tn(){let e=O();return e?`${p(`hb.timezoneAuto`)} ${e}`:p(`hb.timezoneAuto`)}function k(e){let t={};for(let n of e){let e=nn(n);e&&(t[n.id]=e)}return t}function nn(e){let t=Rt(e.schedule);return t.ok?null:rn(t.code,t.error)}function rn(e,t){switch(e){case`invalid_cron`:return p(`hb.invalidCron`);case`invalid_timezone`:return p(`hb.invalidTimeZone`);case`invalid_minutes`:return p(`hb.invalidMinutes`);default:return t||p(`hb.invalidSchedule`)}}function an(e){let t=e.timeZone||O()||`Asia/Seoul`;return e.kind===`cron`?p(`hb.scheduleHintCron`,{cron:`0 9 * * *`,timeZone:t}):p(`hb.scheduleHintEvery`,{minutes:e.minutes,timeZone:t})}var A=`sidebarState`,j=900,on=768;function M(){return window.innerWidth<=on}function N(){document.body.classList.remove(`left-expanded`,`right-expanded`)}function sn(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 cn(){let e={};try{e=JSON.parse(localStorage.getItem(A)||`{}`)}catch{}e.left&&document.body.classList.add(`left-collapsed`),e.right&&document.body.classList.add(`right-collapsed`);let t=M();document.getElementById(`toggleLeft`)?.addEventListener(`click`,F),document.getElementById(`toggleRight`)?.addEventListener(`click`,I),window.addEventListener(`resize`,()=>{let e=M();if(window.innerWidth>j){N();let e={};try{e=JSON.parse(localStorage.getItem(A)||`{}`)}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&&N();t=e,L()}),window.innerWidth<=j&&(document.body.classList.remove(`left-collapsed`,`right-collapsed`),M()&&N()),L()}function P(){return window.innerWidth<=j}function F(){P()?sn(`left`):document.body.classList.toggle(`left-collapsed`),dn(),L()}function I(){P()?sn(`right`):document.body.classList.toggle(`right-collapsed`),dn(),L()}function ln(){return P()?document.body.classList.contains(`left-expanded`):!document.body.classList.contains(`left-collapsed`)}function un(){return P()?document.body.classList.contains(`right-expanded`):!document.body.classList.contains(`right-collapsed`)}function L(){let e=document.getElementById(`toggleLeft`),t=document.getElementById(`toggleRight`);e&&(e.innerHTML=ln()?u.chevronLeft:u.chevronRight),t&&(t.innerHTML=un()?u.chevronRight:u.chevronLeft)}function dn(){localStorage.setItem(A,JSON.stringify({left:document.body.classList.contains(`left-collapsed`),right:document.body.classList.contains(`right-collapsed`)}))}var fn=`theme`,R=null;function pn(e){return e===`dark`||e===`light`}function mn(n){let r=n===`light`?e:t;R||(R=document.createElement(`style`),R.id=`hljsTheme`,document.head.appendChild(R)),R.textContent=r}function hn(){let e=vn(),t=localStorage.getItem(fn),n=window.matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`;_n(e||t||n),document.getElementById(`toggleTheme`)?.addEventListener(`click`,gn),window.addEventListener(`message`,bn)}function gn(){let e=(document.documentElement.getAttribute(`data-theme`)||`dark`)===`dark`?`light`:`dark`;_n(e),localStorage.setItem(fn,e)}function _n(e){document.documentElement.setAttribute(`data-theme`,e);let t=document.getElementById(`toggleTheme`);t&&t.classList.toggle(`is-light`,e===`light`),mn(e),ue(),l()}function vn(){let e=new URLSearchParams(window.location.search).get(`jawTheme`);return pn(e)?e:null}function yn(e){if(e===window.location.origin)return!0;try{let t=new URL(e).hostname;return t===`localhost`||t===`127.0.0.1`||t===`::1`||t===`[::1]`}catch{return!1}}function bn(e){if(window.parent===window||e.source!==window.parent||!yn(e.origin))return;let t=e.data;!t||t.type!==`jaw-preview-theme-sync`||!pn(t.theme)||_n(t.theme)}var xn=50,Sn=30,Cn=80,wn=500,z=null,Tn=!1;function En(){if(Tn||!(`ontouchstart`in window))return;Tn=!0;let e=document.querySelector(`.chat-area`);e&&(e.addEventListener(`touchstart`,Dn,{passive:!0}),e.addEventListener(`touchend`,On,{passive:!0}))}function Dn(e){let t=e.touches[0],n=window.innerWidth,r=null;t.clientX<Sn?r=`left`:t.clientX>n-Sn&&(r=`right`),z={startX:t.clientX,startY:t.clientY,startTime:Date.now(),isEdge:r}}function On(e){if(!z)return;let t=e.changedTouches[0],n=t.clientX-z.startX,r=Math.abs(t.clientY-z.startY),i=Date.now()-z.startTime,a=z;z=null,!(r>Cn||i>wn||Math.abs(n)<xn)&&(n>0&&a.isEdge===`left`&&F(),n<0&&a.isEdge===`right`&&I())}var kn=!1,B=null,V=[],H=null,An=null,jn=0;function Mn(){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 Nn(e){let t=e;switch(t.name){case`NotAllowedError`:return p(`voice.micDenied`);case`NotFoundError`:return p(`voice.micNotFound`);case`NotReadableError`:case`AbortError`:return p(`voice.micBusy`);default:return t instanceof TypeError||!navigator.mediaDevices?p(`voice.httpsRequired`):p(`voice.micDenied`)}}async function Pn(){if(n.isRecording)return;if(typeof MediaRecorder>`u`||!navigator.mediaDevices?.getUserMedia){m(p(`voice.unsupported`),``,`error`);return}try{H=await navigator.mediaDevices.getUserMedia({audio:!0})}catch(e){m(Nn(e),``,`error`);return}let e=Mn();B=new MediaRecorder(H,e?{mimeType:e}:{}),V=[],B.ondataavailable=e=>{e.data.size>0&&V.push(e.data)},B.onerror=()=>{Fn(),m(p(`voice.interrupted`),``,`error`)},B.onstop=async()=>{if(kn){V=[],Rn(),kn=!1;return}let t=B?.mimeType||e||`audio/webm`,n=t.includes(`mp4`)?`.m4a`:t.includes(`ogg`)?`.ogg`:`.webm`,r=new Blob(V,{type:t});if(V=[],Rn(),r.size>20*1024*1024){m(p(`voice.tooLarge`),``,`error`);return}if(r.size<1e3){m(p(`voice.tooShort`),``,`error`);return}await Pt(r,n,t)},B.start(),n.isRecording=!0,jn=Date.now(),Vn(!0),zn()}function Fn(){!n.isRecording||!B||(B.state===`recording`&&B.stop(),n.isRecording=!1,Bn(),Vn(!1))}function In(){!n.isRecording||!B||(kn=!0,B.state===`recording`&&B.stop(),n.isRecording=!1,Bn(),Vn(!1))}function Ln(){n.isRecording?Fn():Pn()}function Rn(){H?.getTracks().forEach(e=>e.stop()),H=null}function zn(){let e=document.getElementById(`voiceTimer`);e&&(e.style.display=`inline`,An=setInterval(()=>{let t=Math.floor((Date.now()-jn)/1e3);e.textContent=`${String(Math.floor(t/60)).padStart(2,`0`)}:${String(t%60).padStart(2,`0`)}`},500))}function Bn(){An&&=(clearInterval(An),null);let e=document.getElementById(`voiceTimer`);e&&(e.style.display=`none`,e.textContent=`00:00`)}function Vn(e){let t=document.getElementById(`btnVoice`),n=document.getElementById(`btnVoiceCancel`);t&&(t.classList.toggle(`recording`,e),t.innerHTML=e?u.stop:u.mic,t.title=p(e?`voice.stop`:`voice.start`)),n&&(n.style.display=e?`inline-block`:`none`)}var Hn={activeCli:U(`activeCli`,2,1,2),model:U(`model`,2,1,1),effort:U(`effort`,2,1,1),permissions:U(`permissions`,2,1,1),flushAgent:U(`flushAgent`,2,1,1),employees:U(`employees`,3,3,2),skills:U(`skills`,2,1,1),activeChannel:U(`activeChannel`,2,1,1),telegram:U(`telegram`,2,1,2),discord:U(`discord`,2,1,2),fallbackOrder:U(`fallbackOrder`,2,1,1),mcp:U(`mcp`,2,1,1),memory:U(`memory`,2,1,2),stt:U(`stt`,2,1,1),promptTemplates:U(`promptTemplates`,2,1,1)};function Un(e){return typeof e==`string`&&Object.prototype.hasOwnProperty.call(Hn,e)}function U(e,t,n,r,i=2,a=1){return{titleKey:`help.${e}.title`,introKey:`help.${e}.intro`,effectKey:`help.${e}.effect`,useWhenKeys:W(`help.${e}.use`,t),howToKeys:W(`help.${e}.howTo`,i),exampleKeys:W(`help.${e}.example`,a),avoidWhenKeys:W(`help.${e}.avoid`,n),relatedKeys:W(`help.${e}.related`,r)}}function W(e,t){return Array.from({length:t},(t,n)=>`${e}.${n+1}`)}var Wn=!1,G=null,K=null,q=null,J=null,Gn=null,Y=!1;function Kn(){Wn||(Wn=!0,document.addEventListener(`click`,Jn),document.addEventListener(`keydown`,Yn,!0))}function qn(e,t=null){let n=Hn[e];if(!n){console.warn(`[help-dialog] unknown topic:`,e);return}Xn(),Gn=t,Zn(n),G?.classList.add(`open`),G?.setAttribute(`aria-hidden`,`false`),Y=!0,requestAnimationFrame(()=>J?.focus())}function X(){if(!Y)return;G?.classList.remove(`open`),G?.setAttribute(`aria-hidden`,`true`),Y=!1;let e=Gn;Gn=null,e?.focus()}function Jn(e){let t=e.target?.closest(`[data-help-topic]`);if(!t)return;let n=t.getAttribute(`data-help-topic`);if(!Un(n)){console.warn(`[help-dialog] invalid topic:`,n);return}e.preventDefault(),qn(n,t)}function Yn(e){!Y||e.key!==`Escape`||(e.preventDefault(),e.stopImmediatePropagation(),X())}function Xn(){if(G&&K&&q&&J)return;G=document.createElement(`div`),G.id=`helpDialog`,G.className=`modal-overlay help-dialog-overlay`,G.setAttribute(`role`,`presentation`),G.setAttribute(`aria-hidden`,`true`),G.addEventListener(`click`,e=>{e.target===G&&X()});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`,K=document.createElement(`span`),K.id=`helpDialogTitle`,J=document.createElement(`button`),J.type=`button`,J.className=`btn-modal-close help-dialog-close`,J.setAttribute(`aria-label`,p(`help.close`)),J.textContent=`x`,J.addEventListener(`click`,()=>X()),q=document.createElement(`div`),q.className=`help-dialog-body`;let n=document.createElement(`div`);n.className=`modal-footer help-dialog-footer`;let r=document.createElement(`button`);r.type=`button`,r.className=`btn-save help-dialog-done`,r.textContent=p(`help.close`),r.addEventListener(`click`,()=>X()),t.append(K,J),n.append(r),e.append(t,q,n),G.append(e),document.body.append(G)}function Zn(e){!K||!q||!J||(K.textContent=p(e.titleKey),J.setAttribute(`aria-label`,p(`help.close`)),q.replaceChildren(),Qn(p(`help.section.what`),p(e.introKey)),Qn(p(`help.section.effect`),p(e.effectKey),`help-effect-text`),Z(p(`help.section.useWhen`),e.useWhenKeys),Z(p(`help.section.howTo`),e.howToKeys),Z(p(`help.section.example`),e.exampleKeys,!1,`help-example-list`),e.avoidWhenKeys?.length&&Z(p(`help.section.avoidWhen`),e.avoidWhenKeys),e.relatedKeys?.length&&Z(p(`help.section.related`),e.relatedKeys,!0))}function Qn(e,t,n){if(!q)return;let r=$n(e),i=document.createElement(`p`);n&&(i.className=n),i.textContent=t,r.append(i),q.append(r)}function Z(e,t,n=!1,r){if(!q)return;let i=$n(e),a=document.createElement(`ul`);a.className=r??(n?`help-related-list`:`help-dialog-list`);for(let e of t){let t=document.createElement(`li`);t.textContent=p(e),a.append(t)}i.append(a),q.append(i)}function $n(e){let t=document.createElement(`section`);t.className=`help-dialog-section`;let n=document.createElement(`h3`);return n.textContent=e,t.append(n),t}var er=`jaw:stale-bundle-reload-pending`;function tr(e){let t=typeof e==`string`?e:e instanceof Error||typeof e?.message==`string`?e.message:``;if(!/(failed to fetch dynamically imported module|error loading dynamically imported module|importing a module script failed|chunkloaderror)/i.test(t))return!1;console.warn(`[stale-bundle] detected dynamic import failure:`,t);try{if(sessionStorage.getItem(er)===`1`)return!0;sessionStorage.setItem(er,`1`)}catch{}let n=()=>window.location.reload();return`serviceWorker`in navigator?(navigator.serviceWorker.getRegistration().then(e=>e?.update()).catch(()=>{}).finally(n),!0):(n(),!0)}window.addEventListener(`unhandledrejection`,e=>{if(tr(e.reason)){e.preventDefault();return}console.error(`[unhandled]`,e.reason),e.preventDefault()}),window.addEventListener(`error`,e=>{if(tr(e.error||e.message)){e.preventDefault();return}console.error(`[error]`,e.message,e.filename,e.lineno)});var{loadEmployees:nr,addEmployee:rr,deleteEmployee:ir,updateEmployee:Q,onEmpCliChange:ar,onEmpRoleChange:or}=await ie(async()=>{let{loadEmployees:e,addEmployee:t,deleteEmployee:n,updateEmployee:r,onEmpCliChange:i,onEmpRoleChange:a}=await import(`./employees-RJ_wRL09.js`);return{loadEmployees:e,addEmployee:t,deleteEmployee:n,updateEmployee:r,onEmpCliChange:i,onEmpRoleChange:a}},__vite__mapDeps([0]));document.getElementById(`btnSend`)?.addEventListener(`click`,()=>{x(`button`)});var sr=document.getElementById(`chatInput`);sr?.addEventListener(`keydown`,e=>{Ce(e)||wt(e)});var $=0;sr?.addEventListener(`input`,e=>{e.isComposing||($&&cancelAnimationFrame($),$=requestAnimationFrame(()=>{Se(e.target?.value||``),$=0}))}),sr?.addEventListener(`cmd-execute`,()=>{x(`cmd-execute`)}),document.getElementById(`cmdDropdown`)?.addEventListener(`click`,xe),document.addEventListener(`click`,be),he(),document.getElementById(`filePreviewClear`)?.addEventListener(`click`,S),document.getElementById(`filePreviewList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-file-idx]`);t&&Dt(+(t.dataset.fileIdx||`0`))}),document.querySelector(`.btn-attach`)?.addEventListener(`click`,()=>{document.getElementById(`fileInput`)?.click()}),document.getElementById(`btnVoice`)?.addEventListener(`click`,()=>Ln()),document.getElementById(`btnVoiceCancel`)?.addEventListener(`click`,()=>In()),document.getElementById(`memorySidebarBtn`)?.addEventListener(`click`,dt),document.getElementById(`btnClearChat`)?.addEventListener(`click`,kt),document.getElementById(`hbSidebarBtn`)?.addEventListener(`click`,Kt),document.getElementById(`langSelect`)?.addEventListener(`change`,async e=>{let t=e.target.value;[`ko`,`en`,`zh`,`ja`].includes(t)&&(await re(t),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]&&de(r[n],t)}),document.querySelector(`.sidebar-save-bar .btn-save`)?.addEventListener(`click`,ce),document.getElementById(`selCli`)?.addEventListener(`change`,()=>Re()),document.getElementById(`selModel`)?.addEventListener(`change`,()=>rt()),document.getElementById(`selEffort`)?.addEventListener(`change`,()=>rt()),document.getElementById(`flushCli`)?.addEventListener(`change`,()=>tt()),document.getElementById(`flushModel`)?.addEventListener(`change`,()=>tt()),document.querySelector(`[data-action="addEmployee"]`)?.addEventListener(`click`,rr),document.getElementById(`employeesList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-emp-delete]`);if(t){ir(t.dataset.empDelete||``);return}}),document.getElementById(`employeesList`)?.addEventListener(`change`,e=>{let t=e.target,n=t.closest(`[data-emp-name]`);if(n){Q(n.dataset.empName||``,{name:t.value});return}let r=t.closest(`[data-emp-cli]`);if(r){ar(r.dataset.empCli||``,t.value);return}let i=t.closest(`[data-emp-model]`);if(i){if(t.value===`__custom__`){let e=prompt(p(`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(),Q(i.dataset.empModel||``,{model:e.trim()})}else t.value=`default`}else Q(i.dataset.empModel||``,{model:t.value});return}let a=t.closest(`[data-emp-role]`);if(a){or(a.dataset.empRole||``,t.value);return}let o=t.closest(`[data-emp-custom]`);if(o){Q(o.dataset.empCustom||``,{role:t.value});return}}),document.getElementById(`skillsList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-skill-id]`);t&&at(t.dataset.skillId||``,t.dataset.skillEnabled===`true`)}),document.querySelector(`#tabSkills`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`.skill-filter`);t&&st(t.dataset.filter||`all`,t)}),document.getElementById(`skillSearchInput`)?.addEventListener(`input`,e=>{ot(e.target.value)}),document.querySelector(`[data-action="openPrompt"]`)?.addEventListener(`click`,Qe),document.getElementById(`tgOff`)?.addEventListener(`click`,()=>Ie(!1)),document.getElementById(`tgOn`)?.addEventListener(`click`,()=>Ie(!0)),document.getElementById(`tgForwardOff`)?.addEventListener(`click`,()=>Me(!1)),document.getElementById(`tgForwardOn`)?.addEventListener(`click`,()=>Me(!0)),document.getElementById(`tgMentionOff`)?.addEventListener(`click`,()=>it(!1)),document.getElementById(`tgMentionOn`)?.addEventListener(`click`,()=>it(!0)),document.getElementById(`tgToken`)?.addEventListener(`change`,je),document.getElementById(`tgChatIds`)?.addEventListener(`change`,je),document.getElementById(`chTelegram`)?.addEventListener(`click`,()=>De(`telegram`)),document.getElementById(`chDiscord`)?.addEventListener(`click`,()=>De(`discord`)),document.getElementById(`dcOff`)?.addEventListener(`click`,()=>Ne(!1)),document.getElementById(`dcOn`)?.addEventListener(`click`,()=>Ne(!0)),document.getElementById(`dcForwardOff`)?.addEventListener(`click`,()=>Fe(!1)),document.getElementById(`dcForwardOn`)?.addEventListener(`click`,()=>Fe(!0)),document.getElementById(`dcAllowBotsOff`)?.addEventListener(`click`,()=>Pe(!1)),document.getElementById(`dcAllowBotsOn`)?.addEventListener(`click`,()=>Pe(!0)),document.getElementById(`dcMentionOff`)?.addEventListener(`click`,()=>Ae(!1)),document.getElementById(`dcMentionOn`)?.addEventListener(`click`,()=>Ae(!0)),document.getElementById(`dcToken`)?.addEventListener(`change`,Ke),document.getElementById(`dcGuildId`)?.addEventListener(`change`,Ke),document.getElementById(`dcChannelIds`)?.addEventListener(`change`,Ke),document.getElementById(`fallbackOrderList`)?.addEventListener(`change`,qe);function cr(e){let t=document.getElementById(`codexFastOn`),n=document.getElementById(`codexFastOff`);t&&n&&(t.classList.toggle(`active`,e),n.classList.toggle(`active`,!e)),_()}document.getElementById(`codexFastOn`)?.addEventListener(`click`,()=>cr(!0)),document.getElementById(`codexFastOff`)?.addEventListener(`click`,()=>cr(!1));function lr(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`),_()}document.getElementById(`codexCtxOn`)?.addEventListener(`click`,()=>lr(!0)),document.getElementById(`codexCtxOff`)?.addEventListener(`click`,()=>lr(!1)),document.getElementById(`codexCtxWindow`)?.addEventListener(`change`,_),document.getElementById(`codexCtxCompact`)?.addEventListener(`change`,_);function ur(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)),_()}document.getElementById(`claude1mOn`)?.addEventListener(`click`,()=>ur(!0)),document.getElementById(`claude1mOff`)?.addEventListener(`click`,()=>ur(!1));function dr(){for(let e of Ee()){let t=e.charAt(0).toUpperCase()+e.slice(1),n=document.getElementById(`model`+t);n&&n.addEventListener(`change`,function(){Ye(e,this)});let r=document.getElementById(`customModel`+t);r&&r.addEventListener(`change`,function(){He(e,this)});let i=document.getElementById(`effort`+t);i&&i.addEventListener(`change`,_)}}document.querySelector(`[data-action="syncMcp"]`)?.addEventListener(`click`,ke),document.querySelector(`[data-action="installMcp"]`)?.addEventListener(`click`,Le),document.querySelector(`[data-action="refreshCli"]`)?.addEventListener(`click`,()=>Je(!0)),document.getElementById(`cliStatusInterval`)?.addEventListener(`change`,function(){Ve(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`,ze),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&!n.isRecording&&v()}),document.querySelector(`[data-action="openTemplates"]`)?.addEventListener(`click`,Ge),document.querySelector(`[data-action="saveTemplate"]`)?.addEventListener(`click`,Ze),document.querySelector(`[data-action="closeTemplate"]`)?.addEventListener(`click`,()=>Xe()),document.getElementById(`templateModal`)?.addEventListener(`click`,e=>Xe(e)),document.querySelector(`#templateModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.getElementById(`templateBack`)?.addEventListener(`click`,$e),document.getElementById(`templateDevToggle`)?.addEventListener(`click`,Be),document.getElementById(`heartbeatModal`)?.addEventListener(`click`,e=>qt(e)),document.querySelector(`#heartbeatModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closeHeartbeat"]`)?.addEventListener(`click`,()=>qt()),document.querySelector(`[data-action="addHeartbeat"]`)?.addEventListener(`click`,Jt),document.getElementById(`hbJobsList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-hb-toggle]`);if(t){Xt(+(t.dataset.hbToggle||`0`));return}let n=e.target?.closest(`[data-hb-remove]`);if(n){Yt(+(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,E();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}:{}},T(),E();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}:{}},T(),E();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}:{}},T(),E();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()}:{}},T(),E();return}let c=t.closest(`[data-hb-prompt]`);if(c){n.heartbeatJobs[+(c.dataset.hbPrompt||`0`)].prompt=t.value,E();return}}),document.getElementById(`memoryModal`)?.addEventListener(`click`,e=>yt(e)),document.querySelector(`#memoryModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closeMemory"]`)?.addEventListener(`click`,()=>yt()),document.getElementById(`memTabBtnSettings`)?.addEventListener(`click`,()=>bt(`settings`)),document.getElementById(`memTabBtnAdvOps`)?.addEventListener(`click`,()=>bt(`status`)),document.getElementById(`memTabBtnFiles`)?.addEventListener(`click`,()=>bt(`files`)),document.getElementById(`memOn`)?.addEventListener(`click`,()=>ft(!0)),document.getElementById(`memOff`)?.addEventListener(`click`,()=>ft(!1)),document.getElementById(`memFlushEvery`)?.addEventListener(`change`,y),document.getElementById(`memRetention`)?.addEventListener(`change`,y),document.getElementById(`memFlushLang`)?.addEventListener(`change`,y),document.getElementById(`memFlushNowBtn`)?.addEventListener(`click`,ut),document.getElementById(`advBootstrapBtn`)?.addEventListener(`click`,vt),document.getElementById(`advReindexBtn`)?.addEventListener(`click`,ht),document.getElementById(`advReimportBtn`)?.addEventListener(`click`,vt),document.getElementById(`advOpenCorruptedBtn`)?.addEventListener(`click`,_t),document.getElementById(`advStatusBanner`)?.addEventListener(`click`,e=>{e.target?.id===`advUpgradeSoulBtn`&&gt(),e.target?.id===`advSynthesizeSoulBtn`&&lt()}),document.getElementById(`basicMemoryFiles`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-mem-delete]`);if(t){e.stopPropagation(),mt(t.dataset.memDelete||``);return}let n=e.target?.closest(`[data-mem-view]`);if(n){pt(n.dataset.memView||``);return}if(e.target?.closest(`[data-mem-back]`)){dt();return}});async function fr(){te(),nt(),hn(),await c();let e=document.getElementById(`langSelect`);e&&(e.value=d()),await Te(),dr(),Kn(),pe(),_e(),Nt(),Mt(),await ye(),await Ue(),We(),Je(),et(),nr(),Zt(),ct(),le(),await ae(),cn(),se(),En();try{sessionStorage.removeItem(er)}catch{}ee(),`serviceWorker`in navigator&&navigator.serviceWorker.register(`/sw.js`).catch(()=>{})}fr().catch(e=>{console.error(`[bootstrap]`,e)}),document.addEventListener(`keydown`,e=>{if(e.key===`Escape`){if(n.isRecording){e.preventDefault(),In();return}document.querySelectorAll(`.modal-overlay.open`).forEach(e=>{e.classList.remove(`open`)})}(e.ctrlKey||e.metaKey)&&e.shiftKey&&e.code===`Space`&&(e.preventDefault(),Ln())}),document.getElementById(`mobileMenuLeft`)?.addEventListener(`click`,F),document.getElementById(`mobileMenuRight`)?.addEventListener(`click`,I);
@@ -1,4 +1,4 @@
1
- import{t as e}from"./state-xhhyIPlq.js";import{i as t,n,r}from"./api-tVoG39dL.js";import{d as i,n as a,y as o}from"./render-DGQX46ei.js";import{n as s}from"./ws-CTHQFzM1.js";import{n as c,r as l,t as u}from"./constants-CYjOMbjf.js";var d={"React/Vue 기반 UI 컴포넌트 개발, 스타일링":`frontend`,"API 서버, DB 스키마, 비즈니스 로직 구현":`backend`,"프론트엔드와 백엔드 모두 담당":`frontend`,"CI/CD, Docker, 인프라 자동화":`backend`,"테스트 작성, 버그 재현, 품질 관리":`custom`,"데이터 파이프라인, ETL, 분석 쿼리":`data`,"API 문서화, README, 가이드 작성":`docs`,"UI/UX 구현, CSS, 컴포넌트 개발":`frontend`,"API, DB, 서버 로직 구현":`backend`,"데이터 파이프라인, 분석, ML":`data`,"문서화, README, API docs":`docs`,"UI/UX, CSS, components":`frontend`,"API, DB, server logic":`backend`,"Data pipeline, analysis, ML":`data`,"Documentation, README, API docs":`docs`},f={1:`#60a5fa`,2:`#a78bfa`,3:`#34d399`,4:`#fbbf24`,5:`#f472b6`};function p(e,t){return(t||``).trim()||`default`}function m(e,t){return e===`claude`?t.includes(`sonnet`)?`sonnet`:t[0]||`default`:`default`}async function h(){e.employees=await n(`/api/employees`)||[],g()}function g(){let t=document.getElementById(`employeesList`);if(!t)return;let n=e.employees;if(n.length===0){t.innerHTML=`<div style="color:var(--text-dim);font-size:11px;padding:4px 0">${o(`emp.addPrompt`)}</div>`;return}let r=l();t.innerHTML=n.map(e=>{let t=e.source===`static`,n=u[e.cli]||[],l=p(e.cli,e.model),m=d[e.role||``],h=m?c.find(e=>e.value===m):c.find(t=>t.prompt===e.role),g=h?h.value:e.role?`custom`:`frontend`,_=g===`custom`,v=s(e.id),y=v?.phase||e.phase,b=v?.phaseLabel||e.phaseLabel,x=y?`<span style="background:${f[y]||`#888`};color:#000;padding:1px 6px;border-radius:9px;font-size:9px">${a(b||`P`+y)}</span>`:``,S=t?`<span style="background:#3b3b4f;color:#a78bfa;padding:1px 6px;border-radius:9px;font-size:9px;letter-spacing:0.3px">BUILT-IN</span>`:``,C=t?`border-left:2px solid #a78bfa;`:``,w=t?`<span style="flex:1;color:var(--text);font-size:12px;font-weight:600">${a(e.name||`Agent`)}</span>`:`<input style="flex:1;background:none;border:none;color:var(--text);font-size:12px;font-weight:600;font-family:inherit;outline:none" value="${a(e.name||`Agent`)}" data-emp-name="${a(e.id)}">`,T=t?``:`<button style="background:none;border:none;color:var(--text-dim);cursor:pointer;font-size:12px" data-emp-delete="${a(e.id)}" title="${o(`emp.delete`)}">${i.close}</button>`,E=t?`<select disabled title="CLI fixed for built-in employee"><option>${a(e.cli)}</option></select>`:`<select data-emp-cli="${a(e.id)}">${r.map(t=>`<option${e.cli===t?` selected`:``}>${a(t)}</option>`).join(``)}</select>`,D=t?`<div style="font-size:11px;color:var(--text-dim);padding:4px 0">${a(e.role||``)}</div>`:`<select data-emp-role="${a(e.id)}">${c.map(e=>`<option value="${e.value}"${g===e.value?` selected`:``}>${e.label}</option>`).join(``)}</select>
1
+ import{t as e}from"./state-xhhyIPlq.js";import{i as t,n,r}from"./api-tVoG39dL.js";import{d as i,n as a,y as o}from"./render-KVGsbWj1.js";import{n as s}from"./ws-DVE3eWRj.js";import{n as c,r as l,t as u}from"./constants-CYjOMbjf.js";var d={"React/Vue 기반 UI 컴포넌트 개발, 스타일링":`frontend`,"API 서버, DB 스키마, 비즈니스 로직 구현":`backend`,"프론트엔드와 백엔드 모두 담당":`frontend`,"CI/CD, Docker, 인프라 자동화":`backend`,"테스트 작성, 버그 재현, 품질 관리":`custom`,"데이터 파이프라인, ETL, 분석 쿼리":`data`,"API 문서화, README, 가이드 작성":`docs`,"UI/UX 구현, CSS, 컴포넌트 개발":`frontend`,"API, DB, 서버 로직 구현":`backend`,"데이터 파이프라인, 분석, ML":`data`,"문서화, README, API docs":`docs`,"UI/UX, CSS, components":`frontend`,"API, DB, server logic":`backend`,"Data pipeline, analysis, ML":`data`,"Documentation, README, API docs":`docs`},f={1:`#60a5fa`,2:`#a78bfa`,3:`#34d399`,4:`#fbbf24`,5:`#f472b6`};function p(e,t){return(t||``).trim()||`default`}function m(e,t){return e===`claude`?t.includes(`sonnet`)?`sonnet`:t[0]||`default`:`default`}async function h(){e.employees=await n(`/api/employees`)||[],g()}function g(){let t=document.getElementById(`employeesList`);if(!t)return;let n=e.employees;if(n.length===0){t.innerHTML=`<div style="color:var(--text-dim);font-size:11px;padding:4px 0">${o(`emp.addPrompt`)}</div>`;return}let r=l();t.innerHTML=n.map(e=>{let t=e.source===`static`,n=u[e.cli]||[],l=p(e.cli,e.model),m=d[e.role||``],h=m?c.find(e=>e.value===m):c.find(t=>t.prompt===e.role),g=h?h.value:e.role?`custom`:`frontend`,_=g===`custom`,v=s(e.id),y=v?.phase||e.phase,b=v?.phaseLabel||e.phaseLabel,x=y?`<span style="background:${f[y]||`#888`};color:#000;padding:1px 6px;border-radius:9px;font-size:9px">${a(b||`P`+y)}</span>`:``,S=t?`<span style="background:#3b3b4f;color:#a78bfa;padding:1px 6px;border-radius:9px;font-size:9px;letter-spacing:0.3px">BUILT-IN</span>`:``,C=t?`border-left:2px solid #a78bfa;`:``,w=t?`<span style="flex:1;color:var(--text);font-size:12px;font-weight:600">${a(e.name||`Agent`)}</span>`:`<input style="flex:1;background:none;border:none;color:var(--text);font-size:12px;font-weight:600;font-family:inherit;outline:none" value="${a(e.name||`Agent`)}" data-emp-name="${a(e.id)}">`,T=t?``:`<button style="background:none;border:none;color:var(--text-dim);cursor:pointer;font-size:12px" data-emp-delete="${a(e.id)}" title="${o(`emp.delete`)}">${i.close}</button>`,E=t?`<select disabled title="CLI fixed for built-in employee"><option>${a(e.cli)}</option></select>`:`<select data-emp-cli="${a(e.id)}">${r.map(t=>`<option${e.cli===t?` selected`:``}>${a(t)}</option>`).join(``)}</select>`,D=t?`<div style="font-size:11px;color:var(--text-dim);padding:4px 0">${a(e.role||``)}</div>`:`<select data-emp-role="${a(e.id)}">${c.map(e=>`<option value="${e.value}"${g===e.value?` selected`:``}>${e.label}</option>`).join(``)}</select>
2
2
  <textarea data-emp-custom="${a(e.id)}" style="display:${_?`block`:`none`};margin-top:4px;width:100%;height:40px;background:var(--bg);border:1px solid var(--border);color:var(--text);padding:4px 6px;border-radius:4px;font-size:10px;font-family:inherit;resize:vertical" placeholder="${o(`emp.customRole`)}">${_?a(e.role||``):``}</textarea>`;return`
3
3
  <div class="settings-group" style="margin-bottom:8px;padding:8px 10px;${C}">
4
4
  <div style="display:flex;align-items:center;gap:6px;margin-bottom:6px">