cli-jaw 2.2.17 → 2.2.18

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 (135) hide show
  1. package/README.md +4 -0
  2. package/dist/bin/cli-jaw.js +9 -1
  3. package/dist/bin/cli-jaw.js.map +1 -1
  4. package/dist/bin/commands/ask.js +245 -0
  5. package/dist/bin/commands/ask.js.map +1 -0
  6. package/dist/bin/commands/chat.js +41 -3
  7. package/dist/bin/commands/chat.js.map +1 -1
  8. package/dist/bin/commands/dispatch.js +210 -167
  9. package/dist/bin/commands/dispatch.js.map +1 -1
  10. package/dist/bin/commands/init.js +33 -4
  11. package/dist/bin/commands/init.js.map +1 -1
  12. package/dist/bin/commands/slack.js +73 -3
  13. package/dist/bin/commands/slack.js.map +1 -1
  14. package/dist/bin/commands/tui/raw-pipe-mode.js +90 -0
  15. package/dist/bin/commands/tui/raw-pipe-mode.js.map +1 -0
  16. package/dist/bin/commands/tui/simple-mode.js +11 -2
  17. package/dist/bin/commands/tui/simple-mode.js.map +1 -1
  18. package/dist/bin/postinstall.js +54 -30
  19. package/dist/bin/postinstall.js.map +1 -1
  20. package/dist/server.js +10 -0
  21. package/dist/server.js.map +1 -1
  22. package/dist/src/agent/pi-runtime.js +10 -2
  23. package/dist/src/agent/pi-runtime.js.map +1 -1
  24. package/dist/src/agent/spawn/queue.js +21 -0
  25. package/dist/src/agent/spawn/queue.js.map +1 -1
  26. package/dist/src/agent/spawn.js +19 -6
  27. package/dist/src/agent/spawn.js.map +1 -1
  28. package/dist/src/cli/cli-status.js +65 -5
  29. package/dist/src/cli/cli-status.js.map +1 -1
  30. package/dist/src/cli/handlers.js +9 -1
  31. package/dist/src/cli/handlers.js.map +1 -1
  32. package/dist/src/cli/tui/jawcode-render.js +18 -5
  33. package/dist/src/cli/tui/jawcode-render.js.map +1 -1
  34. package/dist/src/core/config.js +85 -0
  35. package/dist/src/core/config.js.map +1 -1
  36. package/dist/src/core/exec-name.js +55 -0
  37. package/dist/src/core/exec-name.js.map +1 -0
  38. package/dist/src/core/runtime-settings.js +9 -1
  39. package/dist/src/core/runtime-settings.js.map +1 -1
  40. package/dist/src/core/settings-watch.js +10 -1
  41. package/dist/src/core/settings-watch.js.map +1 -1
  42. package/dist/src/lib/tui/bun-shim.mjs +75 -0
  43. package/dist/src/memory/bootstrap.js +8 -1
  44. package/dist/src/memory/bootstrap.js.map +1 -1
  45. package/dist/src/messaging/channel-validate.js +11 -1
  46. package/dist/src/messaging/channel-validate.js.map +1 -1
  47. package/dist/src/orchestrator/gateway.js +23 -2
  48. package/dist/src/orchestrator/gateway.js.map +1 -1
  49. package/dist/src/orchestrator/pipeline.js +6 -0
  50. package/dist/src/orchestrator/pipeline.js.map +1 -1
  51. package/dist/src/orchestrator/request-registry.js +116 -0
  52. package/dist/src/orchestrator/request-registry.js.map +1 -0
  53. package/dist/src/prompt/templates/a1-system.md +5 -5
  54. package/dist/src/routes/messaging.js +94 -1
  55. package/dist/src/routes/messaging.js.map +1 -1
  56. package/dist/src/routes/settings.js +61 -4
  57. package/dist/src/routes/settings.js.map +1 -1
  58. package/dist/src/routes/system.js +23 -3
  59. package/dist/src/routes/system.js.map +1 -1
  60. package/dist/src/slack/bot.js +36 -1
  61. package/dist/src/slack/bot.js.map +1 -1
  62. package/dist/src/slack/commands.js +29 -1
  63. package/dist/src/slack/commands.js.map +1 -1
  64. package/dist/src/slack/events.js +4 -1
  65. package/dist/src/slack/events.js.map +1 -1
  66. package/dist/src/slack/history.js +10 -3
  67. package/dist/src/slack/history.js.map +1 -1
  68. package/dist/src/slack/identity.js +553 -0
  69. package/dist/src/slack/identity.js.map +1 -0
  70. package/dist/src/slack/ingress.js +42 -0
  71. package/dist/src/slack/ingress.js.map +1 -1
  72. package/dist/src/slack/manifest.js +95 -71
  73. package/dist/src/slack/manifest.js.map +1 -1
  74. package/dist/src/slack/roster.js +180 -0
  75. package/dist/src/slack/roster.js.map +1 -0
  76. package/package.json +4 -3
  77. package/public/css/sidebar.css +29 -51
  78. package/public/dist/assets/AdvancedExport-c41zCkwB.js +1 -0
  79. package/public/dist/assets/{Agent-CNNQ7KkJ.js → Agent-nMPZsMfN.js} +1 -1
  80. package/public/dist/assets/ChannelsSlack-CVNKtoo4.js +1 -0
  81. package/public/dist/assets/{app-Dsgp4xpU.js → app-DqSJmDwP.js} +4 -4
  82. package/public/dist/assets/{app-DjgGeXhJ.css → app-DuyLYRC6.css} +1 -1
  83. package/public/dist/assets/bgtask-badge-CjWz0F6U.js +1 -0
  84. package/public/dist/assets/{bgtask-badge-CpavV0Jc.js → bgtask-badge-D6XYRFI5.js} +1 -1
  85. package/public/dist/assets/{employees-BJyEgim7.js → employees-B_wKPfTO.js} +1 -1
  86. package/public/dist/assets/{iframe-renderer-B8k3AvTv.js → iframe-renderer-D1-zDg8V.js} +2 -2
  87. package/public/dist/assets/iframe-renderer-qRVLHPnT.js +1 -0
  88. package/public/dist/assets/{manager-kXYQyMhR.js → manager-Bjuh1jpq.js} +1 -1
  89. package/public/dist/assets/{memory-D2RbBVO-.js → memory-CNUpXWEC.js} +1 -1
  90. package/public/dist/assets/memory-CcWGiPy_.js +1 -0
  91. package/public/dist/assets/message-history-BamMPUnL.js +1 -0
  92. package/public/dist/assets/{message-history-Bw2E_b8L.js → message-history-DB1rynP-.js} +1 -1
  93. package/public/dist/assets/{render-BkGcpH7z.js → render-DXwQzjsJ.js} +1 -1
  94. package/public/dist/assets/{settings-B1FPORO2.js → settings-CXndjCad.js} +14 -14
  95. package/public/dist/assets/settings-RGpifFHy.js +1 -0
  96. package/public/dist/assets/settings-core-X_5UHfr3.js +1 -0
  97. package/public/dist/assets/settings-core-t5yYVRrv.js +162 -0
  98. package/public/dist/assets/{sidebar-DW78DANx.js → sidebar-DgIj-LuT.js} +3 -3
  99. package/public/dist/assets/skills-CbwIimit.js +1 -0
  100. package/public/dist/assets/{skills-lWi0ZFiV.js → skills-QqxjqDHg.js} +1 -1
  101. package/public/dist/assets/{slash-commands-DYOI6nKj.js → slash-commands-B2V_jngP.js} +1 -1
  102. package/public/dist/assets/slash-commands-tCNRlNTC.js +1 -0
  103. package/public/dist/assets/{trace-drawer-DBX9xzmt.js → trace-drawer-CBe9nRjS.js} +1 -1
  104. package/public/dist/assets/{ui-Bx7eqnXt.js → ui-CDozpEQt.js} +1 -1
  105. package/public/dist/assets/ui-o-VpvrSv.js +1 -0
  106. package/public/dist/index.html +15 -34
  107. package/public/dist/manager/index.html +1 -1
  108. package/public/index.html +13 -32
  109. package/public/js/features/channel-onboarding-flow.ts +25 -2
  110. package/public/js/features/channel-onboarding.ts +111 -8
  111. package/public/js/features/settings-cli-status.ts +18 -4
  112. package/public/js/features/settings-slack.ts +127 -29
  113. package/public/js/features/settings-types.ts +11 -2
  114. package/public/locales/en.json +17 -8
  115. package/public/locales/ja.json +17 -8
  116. package/public/locales/ko.json +17 -8
  117. package/public/locales/zh.json +17 -8
  118. package/public/manager/src/settings/pages/AdvancedExport.tsx +1 -0
  119. package/public/manager/src/settings/pages/Agent.tsx +10 -1
  120. package/public/manager/src/settings/pages/ChannelsSlack.tsx +13 -1
  121. package/scripts/atomic-build.sh +10 -3
  122. package/scripts/release-preview.sh +16 -1
  123. package/scripts/verify-dist-assets.sh +53 -0
  124. package/public/dist/assets/AdvancedExport-DYGcCAUq.js +0 -1
  125. package/public/dist/assets/ChannelsSlack-ybvupgdK.js +0 -1
  126. package/public/dist/assets/bgtask-badge-C6h5C-o4.js +0 -1
  127. package/public/dist/assets/iframe-renderer-BO_GgCTR.js +0 -1
  128. package/public/dist/assets/memory-amsvg4Ey.js +0 -1
  129. package/public/dist/assets/message-history-BGHZxvgV.js +0 -1
  130. package/public/dist/assets/settings-CMN-zN4Q.js +0 -1
  131. package/public/dist/assets/settings-core-B_OjGYVN.js +0 -1
  132. package/public/dist/assets/settings-core-CxRwqx86.js +0 -144
  133. package/public/dist/assets/skills-Dz-9Yrxr.js +0 -1
  134. package/public/dist/assets/slash-commands-xJFCdTTM.js +0 -1
  135. package/public/dist/assets/ui-JOcrYeG-.js +0 -1
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";import{t as r}from"./settings-client-CjbBShxm.js";import{t as i}from"./error-normalize-BzeO0SXE.js";import{a,i as o,n as s,r as c,t as l}from"./page-shell-LF7vVVfG.js";import{i as u,s as d}from"./fields-zkeByFQW.js";import{a as f,n as p,o as m}from"./Permissions-CnKt44dN.js";import{a as ee,c as h,i as g,l as _,n as v,o as y,r as b,s as x,t as te}from"./agent-meta-Y3DE6sxh.js";import{t as S}from"./path-utils-LsJeDCKF.js";var C=e(t(),1),w=n();function ne({cli:e,cliOptions:t,provider:n=``,providerOptions:r=[],model:i,modelOptions:a,effort:s,effortOptions:c,workingDir:l,workingDirError:f,cliMeta:p,onCliChange:m,onProviderChange:ee,onModelChange:h,onEffortChange:_,onWorkingDirChange:v}){let y=x(t),b=y.filter(e=>te.includes(e)).length;return(0,w.jsx)(o,{title:`Agent runtime`,hint:`Active CLI, model, effort, and workspace used by this instance.`,children:(0,w.jsxs)(`div`,{className:`settings-agent-runtime-grid`,children:[(0,w.jsx)(u,{id:`agent-cli`,label:`Active CLI`,value:e,options:y.map(e=>({value:e,label:g(e,p).label||e})),collapsedAfter:b,onChange:m}),r.length>0?(0,w.jsx)(u,{id:`agent-${e}-provider`,label:`Provider`,value:n,options:r.map(e=>({value:e,label:e})),onChange:e=>ee?.(e)}):null,(0,w.jsx)(u,{id:`agent-model`,label:`Active model`,value:i,options:a.length>0?a:[{value:``,label:`(default)`}],onChange:h}),(0,w.jsx)(u,{id:`agent-effort`,label:`Effort`,value:s,options:[{value:``,label:`(default)`},...c.map(e=>({value:e,label:e}))],disabled:c.length===0,onChange:_}),(0,w.jsx)(d,{id:`agent-workingDir`,label:`Working directory`,value:l,error:f,placeholder:`/path/to/project`,onChange:v})]})})}var T=[{value:`auto`,label:`Auto`},{value:`custom`,label:`Custom allowlist`}];function re({value:e,onChange:t}){let n=f(e),r=n.mode===`custom`?`custom`:`auto`,i=n.mode===`custom`?n.tokens:[],a=n.mode===`custom`?`${i.length} explicit token${i.length===1?``:`s`}`:`Runtime resolves allowed capabilities`;return(0,w.jsxs)(o,{title:`Permissions`,hint:`Quick runtime mode. Open Permissions for detailed allowlist editing.`,children:[(0,w.jsx)(u,{id:`agent-permissions-mode`,label:`Mode`,value:r,options:T,onChange:e=>{t(e===`auto`?`auto`:i.length>0&&p(i)?i:m(null))}}),(0,w.jsx)(`p`,{className:`settings-agent-note`,children:a})]})}function ie({activeCli:e,flushCli:t,flushModel:n,cliOptions:r,modelOptions:i,cliMeta:a,loading:s,error:c,onFlushCliChange:l,onFlushModelChange:d}){let f=t||e,p=f?g(f,a).label||f:`active`;return(0,w.jsx)(o,{title:`Flush Agent`,hint:`Separate summary agent used for context flush and compact work.`,children:(0,w.jsxs)(`details`,{className:`settings-agent-flush`,children:[(0,w.jsxs)(`summary`,{children:[(0,w.jsx)(`span`,{children:`Flush runtime`}),(0,w.jsxs)(`code`,{children:[p,n&&n!==`default`?` / ${n}`:``]})]}),s?(0,w.jsx)(`p`,{className:`settings-agent-note`,children:`Loading flush settings...`}):null,c?(0,w.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:c}):null,(0,w.jsxs)(`div`,{className:`settings-agent-runtime-grid`,children:[(0,w.jsx)(u,{id:`agent-flush-cli`,label:`Flush CLI`,value:t,options:[{value:``,label:`(active CLI)`},...r.map(e=>({value:e,label:g(e,a).label||e}))],onChange:l}),(0,w.jsx)(u,{id:`agent-flush-model`,label:`Flush model`,value:n,options:[{value:``,label:`(default)`},...i],onChange:d})]})]})})}function E(e){return e.source===`static`||e.id.startsWith(`static:`)}function D(){return`new:${Date.now().toString(36)}:${Math.random().toString(36).slice(2,8)}`}function ae(e,t){let n=e[0]||`claude`,r=t?.[n]?.models?.[0]||`default`;return{id:D(),name:`New Agent`,cli:n,model:r,role:``,status:`idle`,source:`db`}}function oe(e){return Array.isArray(e)?e.map(O).filter(Boolean):e.data.map(O).filter(Boolean)}function O(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.id==`string`?t.id:``,r=typeof t.name==`string`?t.name:``;if(!n||!r)return null;let i=t.source===`static`||n.startsWith(`static:`)?`static`:`db`,a={id:n,name:r,cli:typeof t.cli==`string`&&t.cli?t.cli:`claude`,model:typeof t.model==`string`&&t.model?t.model:`default`,role:typeof t.role==`string`?t.role:``,source:i};return typeof t.status==`string`&&(a.status=t.status),a}function k(e){return e.name.trim()?e.cli.trim()?e.model.trim()?null:`Model is required`:`CLI is required`:`Name is required`}function A(e){return e.some(e=>k(e)!==null)}function se(e,t){return JSON.stringify(e.map(F))===JSON.stringify(t.map(F))}function j(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Set(t.map(e=>e.id)),i=[],a=[],o=[];for(let e of t){let t=n.get(e.id);if(!t||e.id.startsWith(`new:`)){i.push(e);continue}let r=ce(t,e);Object.keys(r).length>0&&a.push({before:t,after:e,patch:r})}for(let t of e)!r.has(t.id)&&!E(t)&&o.push(t);return{added:i,updated:a,removed:o}}function M(e,t){let n=j(e,t);return{added:n.added.length,updated:n.updated.length,removed:n.removed.length}}async function N(e,t,n){let r=j(t,n);for(let t of r.removed)await e.delete(`/api/employees/${encodeURIComponent(t.id)}`);for(let t of r.added)await e.post(`/api/employees`,P(t));for(let t of r.updated)await e.put(`/api/employees/${encodeURIComponent(t.after.id)}`,t.patch)}function ce(e,t){if(E(t))return e.model===t.model?{}:{model:t.model};let n={};for(let r of[`name`,`cli`,`model`,`role`,`status`])(e[r]||``)!==(t[r]||``)&&(n[r]=t[r]||``);return n}function P(e){return{name:e.name.trim()||`New Agent`,cli:e.cli.trim()||`claude`,model:e.model.trim()||`default`,role:e.role.trim()}}function F(e){let t={id:e.id,name:e.name,cli:e.cli,model:e.model,role:e.role,source:e.source};return e.status!==void 0&&(t.status=e.status),t}function I({employee:e,index:t,cliOptions:n,cliMeta:r,onChange:i,onRemove:a}){let o=E(e),s=y(g(e.cli,r).models,e.model),c=k(e),l=Array.from(new Set([...n,e.cli,`claude`])).filter(Boolean);return(0,w.jsxs)(`fieldset`,{className:`settings-runtime-employee-row`,children:[(0,w.jsxs)(`legend`,{children:[e.name||`Employee ${t+1}`,o?(0,w.jsx)(`span`,{children:`static`}):null]}),(0,w.jsxs)(`div`,{className:`settings-runtime-employee-grid`,children:[(0,w.jsx)(d,{id:`runtime-employee-${e.id}-name`,label:`Name`,value:e.name,disabled:o,error:c===`Name is required`?c:null,onChange:e=>i({name:e})}),(0,w.jsx)(u,{id:`runtime-employee-${e.id}-cli`,label:`CLI`,value:e.cli,disabled:o,options:l.map(e=>({value:e,label:g(e,r).label||e})),onChange:e=>{i({cli:e,model:g(e,r).models[0]||`default`})}}),(0,w.jsx)(u,{id:`runtime-employee-${e.id}-model`,label:`Model`,value:e.model,options:s.length>0?s:[{value:`default`,label:`default`}],onChange:e=>i({model:e})}),(0,w.jsx)(d,{id:`runtime-employee-${e.id}-role`,label:`Role`,value:e.role,disabled:o,onChange:e=>i({role:e})})]}),(0,w.jsxs)(`div`,{className:`settings-runtime-employee-footer`,children:[(0,w.jsxs)(`span`,{children:[e.source,e.status?` / ${e.status}`:``]}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,disabled:o,onClick:a,"aria-label":`Remove employee ${e.name||t+1}`,children:`Remove`})]})]})}function le({roster:e,original:t,cliOptions:n,cliMeta:r,loading:i,error:a,onRosterChange:s}){let c=M(t,e),l=A(e);function u(t,n){s(e.map((e,r)=>r===t?{...e,...n}:e))}function d(t){s(e.filter((e,n)=>n!==t))}return(0,w.jsxs)(o,{title:`Employees`,hint:`Runtime dispatch roster. Static employees keep their locked identity; database employees can be edited.`,children:[(0,w.jsxs)(`div`,{className:`settings-runtime-employee-summary`,children:[(0,w.jsxs)(`span`,{children:[`+`,c.added]}),(0,w.jsxs)(`span`,{children:[`~`,c.updated]}),(0,w.jsxs)(`span`,{children:[`-`,c.removed]}),l?(0,w.jsx)(`strong`,{children:`Fix invalid rows before saving.`}):null]}),i?(0,w.jsx)(`p`,{className:`settings-agent-note`,children:`Loading employees...`}):null,a?(0,w.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:a}):null,e.length===0?(0,w.jsx)(`p`,{className:`settings-empty`,children:`No runtime employees configured.`}):(0,w.jsx)(`div`,{className:`settings-runtime-employee-list`,children:e.map((e,t)=>(0,w.jsx)(I,{employee:e,index:t,cliOptions:n,cliMeta:r??null,onChange:e=>u(t,e),onRemove:()=>d(t)},e.id))}),(0,w.jsx)(`div`,{className:`settings-employee-footer-bar`,children:(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>s([...e,ae(n,r)]),children:`+ Add employee`})})]})}var L=new Set([`runtimeEmployees`,`flushCli`,`flushModel`]);function R(e){let t={},n=null,r=null;for(let[i,a]of Object.entries(e))i===`runtimeEmployees`?r=a:i===`flushCli`||i===`flushModel`?(n??={},n[i===`flushCli`?`cli`:`model`]=String(a??``)):L.has(i)||(t[i]=a);return{settingsBundle:t,flushPatch:n,runtimeEmployeesNext:r}}async function ue(e){let{client:t,bundle:n,employeeDraft:r,employeeOriginal:i}=e;if(A(r))throw Error(`runtime employees: fix invalid rows before saving`);let{settingsBundle:a,flushPatch:o,runtimeEmployeesNext:s}=R(n),c=null;try{if(Object.keys(a).length>0){let e=await t.put(`/api/settings`,S(a));c=e&&typeof e==`object`&&`data`in e?e.data:e}}catch(e){throw Error(`settings save failed: ${e instanceof Error?e.message:String(e)}`)}try{o&&await t.put(`/api/memory-files/settings`,o)}catch(e){throw Error(`flush settings save failed: ${e instanceof Error?e.message:String(e)}`)}try{s&&await N(t,i,s)}catch(e){throw Error(`runtime employees save failed: ${e instanceof Error?e.message:String(e)}`)}return c}function z(e){if(!(e instanceof r)||e.status!==409)return null;try{return JSON.parse(e.detail).settings??null}catch{return null}}function de({port:e,client:t,dirty:n,registerSave:r}){let{state:o,refresh:u,setData:d}=a(t,`/api/settings`),[p,m]=(0,C.useState)({cli:``,provider:``,model:``,effort:``,workingDir:``,permissions:`auto`}),[x,te]=(0,C.useState)({}),[S,T]=(0,C.useState)({}),[E,D]=(0,C.useState)(!0),[ae,O]=(0,C.useState)(null),[k,j]=(0,C.useState)([]),[M,N]=(0,C.useState)([]),[ce,P]=(0,C.useState)(!0),[F,I]=(0,C.useState)(null),[L,R]=(0,C.useState)(null),[de,fe]=(0,C.useState)({}),[pe,me]=(0,C.useState)(!1),[he,ge]=(0,C.useState)(null),[_e,ve]=(0,C.useState)(!1),[ye,be]=(0,C.useState)(null),B=(0,C.useCallback)(async()=>{try{let e=await t.get(`/api/cli-registry`);R(ee(e&&typeof e==`object`&&`data`in e?e.data:e))}catch{R(null)}},[t]),xe=(0,C.useCallback)(async()=>{try{fe(await t.get(`/api/cli-status`))}catch{fe({})}},[t]),V=(0,C.useCallback)(async()=>{D(!0),O(null);try{let e=await t.get(`/api/memory-files`),n={cli:e.cli||``,model:e.model||``};te(n),T(n)}catch(e){O(e instanceof Error?e.message:String(e))}finally{D(!1)}},[t]),H=(0,C.useCallback)(async()=>{P(!0),I(null);try{let e=oe(await t.get(`/api/employees`));j(e),N(e)}catch(e){I(e instanceof Error?e.message:String(e))}finally{P(!1)}},[t]);(0,C.useEffect)(()=>{B(),xe(),V(),H()},[B,xe,H,V]),(0,C.useEffect)(()=>{if(o.kind!==`ready`)return;let e=Object.keys(o.data.perCli||{}),t=o.data.cli||e[0]||``,n=f(o.data.permissions),r=g(t,L);m({cli:t,provider:o.data.perCli?.[t]?.provider||r.defaultProvider||``,model:_(t,o.data.perCli,o.data.activeOverrides),effort:h(t,o.data.perCli,o.data.activeOverrides),workingDir:o.data.workingDir||``,permissions:n.mode===`custom`?n.tokens:`auto`})},[L,o]),(0,C.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`cli`||e===`workingDir`||e===`permissions`||e===`runtimeEmployees`||e===`flushCli`||e===`flushModel`||e.startsWith(`activeOverrides.`))&&n.remove(e)},[n]);let U=(0,C.useCallback)((e,t)=>n.set(e,t),[n]),W=(0,C.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=await ue({client:t,bundle:e,employeeDraft:M,employeeOriginal:k});n.clear(),r&&d(r),await u(),await B(),await V(),await H()},[t,n,M,k,B,H,V,u,d]);(0,C.useEffect)(()=>{if(r)return r(W),()=>r(null)},[r,W]);let G=o.kind===`ready`?o.data:{},K=G.perCli||{},q=G.activeOverrides||{},J=(0,C.useMemo)(()=>Object.keys(K),[K]),Y=g(p.cli,L),X=p.provider||Y.defaultProvider||Y.providers?.[0]||``,Z=p.cli===`pi`,Q=!Z&&(Y.providers?.length??0)>0,Se=y(Q&&Y.modelsByProvider?.[X]||Y.models,p.model),Ce=Q?b(Y,p.model,Y.effortsByProvider?.[X]||Y.efforts,X):b(Y,p.model),we=p.workingDir.trim()?null:`Required`,Te=(0,C.useCallback)(async e=>{me(!0),ge(null);try{let n=await t.post(`/api/settings/runtime-default-migration`,{action:e}),r;r=`settings`in n&&n.settings?n.settings:`data`in n&&n.data?n.data:n,d(r)}catch(e){let t=z(e);if(t){d(t);return}ge(i(e))}finally{me(!1)}},[t,d]),Ee=(0,C.useCallback)(async e=>{ve(!0),be(null);try{let n=await t.post(`/api/settings/multi-session-default-migration`,{action:e}),r;r=`settings`in n&&n.settings?n.settings:`data`in n&&n.data?n.data:n,d(r)}catch(e){let t=z(e);if(t){d(t);return}be(i(e))}finally{ve(!1)}},[t,d]);if(o.kind===`loading`)return(0,w.jsx)(s,{});if(o.kind===`offline`)return(0,w.jsx)(c,{port:e});if(o.kind===`error`)return(0,w.jsx)(l,{message:o.message});function De(){for(let e of Array.from(n.pending.keys()))e.startsWith(`activeOverrides.`)&&n.remove(e)}function $(e){m(e)}return(0,w.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),W()},children:[G.runtimeDefaultMigration?.state===`pending`?(0,w.jsxs)(`div`,{className:`settings-inline-notice`,role:`status`,children:[(0,w.jsx)(`strong`,{children:`기본 런타임 변경 안내`}),(0,w.jsx)(`p`,{children:`기존 선택은 유지됩니다. Codex App으로 전환하거나 현재 런타임을 계속 사용할 수 있습니다.`}),(0,w.jsxs)(`div`,{className:`settings-inline-actions`,children:[(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:pe,onClick:()=>void Te(`accept`),children:`Codex App 사용`}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,disabled:pe,onClick:()=>void Te(`keep`),children:`현재 런타임 유지`})]}),he?(0,w.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:he}):null]}):null,G.multiSessionDefaultMigration?.state===`pending`?(0,w.jsxs)(`div`,{className:`settings-inline-notice`,role:`status`,children:[(0,w.jsx)(`strong`,{children:`다중 세션 안내`}),(0,w.jsx)(`p`,{children:`대화 세션을 여러 개 열 수 있습니다. 켜면 동시 실행도 2로 올라가서, 두 번째 세션이 첫 번째가 끝나기를 기다리지 않습니다. 지금 설정은 그대로 유지됩니다.`}),(0,w.jsxs)(`div`,{className:`settings-inline-actions`,children:[(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:_e,onClick:()=>void Ee(`accept`),children:`다중 세션 켜기`}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,disabled:_e,onClick:()=>void Ee(`keep`),children:`지금 설정 유지`})]}),ye?(0,w.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:ye}):null]}):null,de[p.cli]?.probeState===`checking`?(0,w.jsx)(`div`,{className:`settings-inline-notice`,role:`status`,"aria-live":`polite`,children:`상태 확인 중`}):null,(0,w.jsx)(ne,{cli:p.cli,cliOptions:J.length>0?J:[p.cli||`claude`],provider:X,providerOptions:Z?[]:Y.providers||[],model:p.model,modelOptions:Se,effort:p.effort,effortOptions:Ce,workingDir:p.workingDir,workingDirError:we,cliMeta:L,onCliChange:e=>{let t=g(e,L),n={...p,cli:e,provider:K[e]?.provider||t.defaultProvider||``,model:_(e,K,q),effort:h(e,K,q)};De(),$(n),U(`cli`,{value:e,original:G.cli||``,valid:!0})},onProviderChange:e=>{let t=Y.modelsByProvider?.[e]||[],n=Y.effortsByProvider?.[e]||[],r=t.includes(p.model)?p.model:t[0]||``,i=v(Y,r,p.effort,n,e);$({...p,provider:e,model:r,effort:i}),U(`perCli.${p.cli}.provider`,{value:e,original:K[p.cli]?.provider||Y.defaultProvider||``,valid:!0}),U(`activeOverrides.${p.cli}.model`,{value:r,original:_(p.cli,K,q),valid:r.trim().length>0}),U(`activeOverrides.${p.cli}.effort`,{value:i,original:h(p.cli,K,q),valid:!0})},onModelChange:e=>{let t=v(Y,e,p.effort,Q?Y.effortsByProvider?.[X]||Y.efforts:void 0,Q?X:void 0);$({...p,model:e,effort:t}),U(`activeOverrides.${p.cli}.model`,{value:e,original:_(p.cli,K,q),valid:e.trim().length>0}),t!==p.effort&&U(`activeOverrides.${p.cli}.effort`,{value:t,original:h(p.cli,K,q),valid:!0})},onEffortChange:e=>{$({...p,effort:e}),U(`activeOverrides.${p.cli}.effort`,{value:e,original:h(p.cli,K,q),valid:!0})},onWorkingDirChange:e=>{$({...p,workingDir:e}),U(`workingDir`,{value:e,original:G.workingDir||``,valid:e.trim().length>0})}}),(0,w.jsx)(re,{value:p.permissions,onChange:e=>{$({...p,permissions:e}),U(`permissions`,{value:e,original:G.permissions??`auto`,valid:e===`auto`||e.length>0})}}),(0,w.jsx)(ie,{activeCli:p.cli,flushCli:S.cli||``,flushModel:S.model||``,cliOptions:J,cliMeta:L,modelOptions:y(g(S.cli||p.cli,L).models,S.model||``),loading:E,error:ae,onFlushCliChange:e=>{let t=e&&g(e,L).models[0]||``;T({cli:e,model:t}),U(`flushCli`,{value:e,original:x.cli||``,valid:!0}),U(`flushModel`,{value:t,original:x.model||``,valid:!0})},onFlushModelChange:e=>{T({...S,model:e}),U(`flushModel`,{value:e,original:x.model||``,valid:!0})}}),(0,w.jsx)(le,{roster:M,original:k,cliOptions:J,cliMeta:L,loading:ce,error:F,onRosterChange:e=>{if(N(e),se(e,k)){n.remove(`runtimeEmployees`);return}n.set(`runtimeEmployees`,{value:e,original:k,valid:!A(e)})}})]})}export{z as conflictSettingsFromError,de as default,R as splitAgentSaveBundle};
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";import{t as r}from"./settings-client-CjbBShxm.js";import{t as i}from"./error-normalize-BzeO0SXE.js";import{a,i as o,n as s,r as c,t as l}from"./page-shell-LF7vVVfG.js";import{i as u,s as d}from"./fields-zkeByFQW.js";import{a as f,n as p,o as m}from"./Permissions-CnKt44dN.js";import{a as ee,c as h,i as g,l as _,n as v,o as y,r as b,s as x,t as te}from"./agent-meta-Y3DE6sxh.js";import{t as S}from"./path-utils-LsJeDCKF.js";var C=e(t(),1),w=n();function ne({cli:e,cliOptions:t,provider:n=``,providerOptions:r=[],model:i,modelOptions:a,effort:s,effortOptions:c,workingDir:l,workingDirError:f,cliMeta:p,onCliChange:m,onProviderChange:ee,onModelChange:h,onEffortChange:_,onWorkingDirChange:v}){let y=x(t),b=y.filter(e=>te.includes(e)).length;return(0,w.jsx)(o,{title:`Agent runtime`,hint:`Active CLI, model, effort, and workspace used by this instance.`,children:(0,w.jsxs)(`div`,{className:`settings-agent-runtime-grid`,children:[(0,w.jsx)(u,{id:`agent-cli`,label:`Active CLI`,value:e,options:y.map(e=>({value:e,label:g(e,p).label||e})),collapsedAfter:b,onChange:m}),r.length>0?(0,w.jsx)(u,{id:`agent-${e}-provider`,label:`Provider`,value:n,options:r.map(e=>({value:e,label:e})),onChange:e=>ee?.(e)}):null,(0,w.jsx)(u,{id:`agent-model`,label:`Active model`,value:i,options:a.length>0?a:[{value:``,label:`(default)`}],onChange:h}),(0,w.jsx)(u,{id:`agent-effort`,label:`Effort`,value:s,options:[{value:``,label:`(default)`},...c.map(e=>({value:e,label:e}))],disabled:c.length===0,onChange:_}),(0,w.jsx)(d,{id:`agent-workingDir`,label:`Working directory`,value:l,error:f,placeholder:`/path/to/project`,onChange:v})]})})}var T=[{value:`auto`,label:`Auto`},{value:`custom`,label:`Custom allowlist`}];function re({value:e,onChange:t}){let n=f(e),r=n.mode===`custom`?`custom`:`auto`,i=n.mode===`custom`?n.tokens:[],a=n.mode===`custom`?`${i.length} explicit token${i.length===1?``:`s`}`:`Runtime resolves allowed capabilities`;return(0,w.jsxs)(o,{title:`Permissions`,hint:`Quick runtime mode. Open Permissions for detailed allowlist editing.`,children:[(0,w.jsx)(u,{id:`agent-permissions-mode`,label:`Mode`,value:r,options:T,onChange:e=>{t(e===`auto`?`auto`:i.length>0&&p(i)?i:m(null))}}),(0,w.jsx)(`p`,{className:`settings-agent-note`,children:a})]})}function ie({activeCli:e,flushCli:t,flushModel:n,cliOptions:r,modelOptions:i,cliMeta:a,loading:s,error:c,onFlushCliChange:l,onFlushModelChange:d}){let f=t||e,p=f?g(f,a).label||f:`active`;return(0,w.jsx)(o,{title:`Flush Agent`,hint:`Separate summary agent used for context flush and compact work.`,children:(0,w.jsxs)(`details`,{className:`settings-agent-flush`,children:[(0,w.jsxs)(`summary`,{children:[(0,w.jsx)(`span`,{children:`Flush runtime`}),(0,w.jsxs)(`code`,{children:[p,n&&n!==`default`?` / ${n}`:``]})]}),s?(0,w.jsx)(`p`,{className:`settings-agent-note`,children:`Loading flush settings...`}):null,c?(0,w.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:c}):null,(0,w.jsxs)(`div`,{className:`settings-agent-runtime-grid`,children:[(0,w.jsx)(u,{id:`agent-flush-cli`,label:`Flush CLI`,value:t,options:[{value:``,label:`(active CLI)`},...r.map(e=>({value:e,label:g(e,a).label||e}))],onChange:l}),(0,w.jsx)(u,{id:`agent-flush-model`,label:`Flush model`,value:n,options:[{value:``,label:`(default)`},...i],onChange:d})]})]})})}function E(e){return e.source===`static`||e.id.startsWith(`static:`)}function D(){return`new:${Date.now().toString(36)}:${Math.random().toString(36).slice(2,8)}`}function ae(e,t){let n=e[0]||`claude`,r=t?.[n]?.models?.[0]||`default`;return{id:D(),name:`New Agent`,cli:n,model:r,role:``,status:`idle`,source:`db`}}function oe(e){return Array.isArray(e)?e.map(O).filter(Boolean):e.data.map(O).filter(Boolean)}function O(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.id==`string`?t.id:``,r=typeof t.name==`string`?t.name:``;if(!n||!r)return null;let i=t.source===`static`||n.startsWith(`static:`)?`static`:`db`,a={id:n,name:r,cli:typeof t.cli==`string`&&t.cli?t.cli:`claude`,model:typeof t.model==`string`&&t.model?t.model:`default`,role:typeof t.role==`string`?t.role:``,source:i};return typeof t.status==`string`&&(a.status=t.status),a}function k(e){return e.name.trim()?e.cli.trim()?e.model.trim()?null:`Model is required`:`CLI is required`:`Name is required`}function A(e){return e.some(e=>k(e)!==null)}function se(e,t){return JSON.stringify(e.map(F))===JSON.stringify(t.map(F))}function j(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Set(t.map(e=>e.id)),i=[],a=[],o=[];for(let e of t){let t=n.get(e.id);if(!t||e.id.startsWith(`new:`)){i.push(e);continue}let r=ce(t,e);Object.keys(r).length>0&&a.push({before:t,after:e,patch:r})}for(let t of e)!r.has(t.id)&&!E(t)&&o.push(t);return{added:i,updated:a,removed:o}}function M(e,t){let n=j(e,t);return{added:n.added.length,updated:n.updated.length,removed:n.removed.length}}async function N(e,t,n){let r=j(t,n);for(let t of r.removed)await e.delete(`/api/employees/${encodeURIComponent(t.id)}`);for(let t of r.added)await e.post(`/api/employees`,P(t));for(let t of r.updated)await e.put(`/api/employees/${encodeURIComponent(t.after.id)}`,t.patch)}function ce(e,t){if(E(t))return e.model===t.model?{}:{model:t.model};let n={};for(let r of[`name`,`cli`,`model`,`role`,`status`])(e[r]||``)!==(t[r]||``)&&(n[r]=t[r]||``);return n}function P(e){return{name:e.name.trim()||`New Agent`,cli:e.cli.trim()||`claude`,model:e.model.trim()||`default`,role:e.role.trim()}}function F(e){let t={id:e.id,name:e.name,cli:e.cli,model:e.model,role:e.role,source:e.source};return e.status!==void 0&&(t.status=e.status),t}function I({employee:e,index:t,cliOptions:n,cliMeta:r,onChange:i,onRemove:a}){let o=E(e),s=y(g(e.cli,r).models,e.model),c=k(e),l=Array.from(new Set([...n,e.cli,`claude`])).filter(Boolean);return(0,w.jsxs)(`fieldset`,{className:`settings-runtime-employee-row`,children:[(0,w.jsxs)(`legend`,{children:[e.name||`Employee ${t+1}`,o?(0,w.jsx)(`span`,{children:`static`}):null]}),(0,w.jsxs)(`div`,{className:`settings-runtime-employee-grid`,children:[(0,w.jsx)(d,{id:`runtime-employee-${e.id}-name`,label:`Name`,value:e.name,disabled:o,error:c===`Name is required`?c:null,onChange:e=>i({name:e})}),(0,w.jsx)(u,{id:`runtime-employee-${e.id}-cli`,label:`CLI`,value:e.cli,disabled:o,options:l.map(e=>({value:e,label:g(e,r).label||e})),onChange:e=>{i({cli:e,model:g(e,r).models[0]||`default`})}}),(0,w.jsx)(u,{id:`runtime-employee-${e.id}-model`,label:`Model`,value:e.model,options:s.length>0?s:[{value:`default`,label:`default`}],onChange:e=>i({model:e})}),(0,w.jsx)(d,{id:`runtime-employee-${e.id}-role`,label:`Role`,value:e.role,disabled:o,onChange:e=>i({role:e})})]}),(0,w.jsxs)(`div`,{className:`settings-runtime-employee-footer`,children:[(0,w.jsxs)(`span`,{children:[e.source,e.status?` / ${e.status}`:``]}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,disabled:o,onClick:a,"aria-label":`Remove employee ${e.name||t+1}`,children:`Remove`})]})]})}function le({roster:e,original:t,cliOptions:n,cliMeta:r,loading:i,error:a,onRosterChange:s}){let c=M(t,e),l=A(e);function u(t,n){s(e.map((e,r)=>r===t?{...e,...n}:e))}function d(t){s(e.filter((e,n)=>n!==t))}return(0,w.jsxs)(o,{title:`Employees`,hint:`Runtime dispatch roster. Static employees keep their locked identity; database employees can be edited.`,children:[(0,w.jsxs)(`div`,{className:`settings-runtime-employee-summary`,children:[(0,w.jsxs)(`span`,{children:[`+`,c.added]}),(0,w.jsxs)(`span`,{children:[`~`,c.updated]}),(0,w.jsxs)(`span`,{children:[`-`,c.removed]}),l?(0,w.jsx)(`strong`,{children:`Fix invalid rows before saving.`}):null]}),i?(0,w.jsx)(`p`,{className:`settings-agent-note`,children:`Loading employees...`}):null,a?(0,w.jsx)(`p`,{className:`settings-field-error`,role:`alert`,children:a}):null,e.length===0?(0,w.jsx)(`p`,{className:`settings-empty`,children:`No runtime employees configured.`}):(0,w.jsx)(`div`,{className:`settings-runtime-employee-list`,children:e.map((e,t)=>(0,w.jsx)(I,{employee:e,index:t,cliOptions:n,cliMeta:r??null,onChange:e=>u(t,e),onRemove:()=>d(t)},e.id))}),(0,w.jsx)(`div`,{className:`settings-employee-footer-bar`,children:(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-discard`,onClick:()=>s([...e,ae(n,r)]),children:`+ Add employee`})})]})}var L=new Set([`runtimeEmployees`,`flushCli`,`flushModel`]);function R(e){let t={},n=null,r=null;for(let[i,a]of Object.entries(e))i===`runtimeEmployees`?r=a:i===`flushCli`||i===`flushModel`?(n??={},n[i===`flushCli`?`cli`:`model`]=String(a??``)):L.has(i)||(t[i]=a);return{settingsBundle:t,flushPatch:n,runtimeEmployeesNext:r}}async function ue(e){let{client:t,bundle:n,employeeDraft:r,employeeOriginal:i}=e;if(A(r))throw Error(`runtime employees: fix invalid rows before saving`);let{settingsBundle:a,flushPatch:o,runtimeEmployeesNext:s}=R(n),c=null;try{if(Object.keys(a).length>0){let e=await t.put(`/api/settings`,S(a));c=e&&typeof e==`object`&&`data`in e?e.data:e}}catch(e){throw Error(`settings save failed: ${e instanceof Error?e.message:String(e)}`)}try{o&&await t.put(`/api/memory-files/settings`,o)}catch(e){throw Error(`flush settings save failed: ${e instanceof Error?e.message:String(e)}`)}try{s&&await N(t,i,s)}catch(e){throw Error(`runtime employees save failed: ${e instanceof Error?e.message:String(e)}`)}return c}function z(e){if(!(e instanceof r)||e.status!==409)return null;try{return JSON.parse(e.detail).settings??null}catch{return null}}function B({port:e,client:t,dirty:n,registerSave:r}){let{state:o,refresh:u,setData:d}=a(t,`/api/settings`),[p,m]=(0,C.useState)({cli:``,provider:``,model:``,effort:``,workingDir:``,permissions:`auto`}),[x,te]=(0,C.useState)({}),[S,T]=(0,C.useState)({}),[E,D]=(0,C.useState)(!0),[ae,O]=(0,C.useState)(null),[k,j]=(0,C.useState)([]),[M,N]=(0,C.useState)([]),[ce,P]=(0,C.useState)(!0),[F,I]=(0,C.useState)(null),[L,R]=(0,C.useState)(null),[B,de]=(0,C.useState)({}),[fe,pe]=(0,C.useState)(!1),[me,he]=(0,C.useState)(null),[ge,_e]=(0,C.useState)(!1),[ve,ye]=(0,C.useState)(null),V=(0,C.useCallback)(async()=>{try{let e=await t.get(`/api/cli-registry`);R(ee(e&&typeof e==`object`&&`data`in e?e.data:e))}catch{R(null)}},[t]),be=(0,C.useCallback)(async()=>{try{de(await t.get(`/api/cli-status`))}catch{de({})}},[t]),H=(0,C.useCallback)(async()=>{D(!0),O(null);try{let e=await t.get(`/api/memory-files`),n={cli:e.cli||``,model:e.model||``};te(n),T(n)}catch(e){O(e instanceof Error?e.message:String(e))}finally{D(!1)}},[t]),U=(0,C.useCallback)(async()=>{P(!0),I(null);try{let e=oe(await t.get(`/api/employees`));j(e),N(e)}catch(e){I(e instanceof Error?e.message:String(e))}finally{P(!1)}},[t]);(0,C.useEffect)(()=>{V(),be(),H(),U()},[V,be,U,H]),(0,C.useEffect)(()=>{if(o.kind!==`ready`)return;let e=Object.keys(o.data.perCli||{}),t=o.data.cli||e[0]||``,n=f(o.data.permissions),r=g(t,L);m({cli:t,provider:o.data.perCli?.[t]?.provider||r.defaultProvider||``,model:_(t,o.data.perCli,o.data.activeOverrides),effort:h(t,o.data.perCli,o.data.activeOverrides),workingDir:o.data.workingDir||``,permissions:n.mode===`custom`?n.tokens:`auto`})},[L,o]),(0,C.useEffect)(()=>()=>{for(let e of Array.from(n.pending.keys()))(e===`cli`||e===`workingDir`||e===`permissions`||e===`runtimeEmployees`||e===`flushCli`||e===`flushModel`||e.startsWith(`activeOverrides.`))&&n.remove(e)},[n]);let W=(0,C.useCallback)((e,t)=>n.set(e,t),[n]),G=(0,C.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=await ue({client:t,bundle:e,employeeDraft:M,employeeOriginal:k});n.clear(),r&&d(r),await u(),await V(),await H(),await U()},[t,n,M,k,V,U,H,u,d]);(0,C.useEffect)(()=>{if(r)return r(G),()=>r(null)},[r,G]);let K=o.kind===`ready`?o.data:{},q=K.perCli||{},J=K.activeOverrides||{},Y=(0,C.useMemo)(()=>Object.keys(q),[q]),X=g(p.cli,L),Z=p.provider||X.defaultProvider||X.providers?.[0]||``,xe=p.cli===`pi`,Q=!xe&&(X.providers?.length??0)>0,Se=y(Q&&X.modelsByProvider?.[Z]||X.models,p.model),Ce=Q?b(X,p.model,X.effortsByProvider?.[Z]||X.efforts,Z):b(X,p.model),we=p.workingDir.trim()?null:`Required`,Te=(0,C.useCallback)(async e=>{pe(!0),he(null);try{let n=await t.post(`/api/settings/runtime-default-migration`,{action:e}),r;r=`settings`in n&&n.settings?n.settings:`data`in n&&n.data?n.data:n,d(r)}catch(e){let t=z(e);if(t){d(t);return}he(i(e))}finally{pe(!1)}},[t,d]),Ee=(0,C.useCallback)(async e=>{_e(!0),ye(null);try{let n=await t.post(`/api/settings/multi-session-default-migration`,{action:e}),r;r=`settings`in n&&n.settings?n.settings:`data`in n&&n.data?n.data:n,d(r)}catch(e){let t=z(e);if(t){d(t);return}ye(i(e))}finally{_e(!1)}},[t,d]);if(o.kind===`loading`)return(0,w.jsx)(s,{});if(o.kind===`offline`)return(0,w.jsx)(c,{port:e});if(o.kind===`error`)return(0,w.jsx)(l,{message:o.message});function De(){for(let e of Array.from(n.pending.keys()))e.startsWith(`activeOverrides.`)&&n.remove(e)}function $(e){m(e)}return(0,w.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),G()},children:[K.runtimeDefaultMigration?.state===`pending`?(0,w.jsxs)(`div`,{className:`settings-inline-notice`,role:`status`,children:[(0,w.jsx)(`strong`,{children:`기본 런타임 변경 안내`}),(0,w.jsx)(`p`,{children:`기존 선택은 유지됩니다. Codex App으로 전환하거나 현재 런타임을 계속 사용할 수 있습니다.`}),(0,w.jsxs)(`div`,{className:`settings-inline-actions`,children:[(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:fe,onClick:()=>void Te(`accept`),children:`Codex App 사용`}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,disabled:fe,onClick:()=>void Te(`keep`),children:`현재 런타임 유지`})]}),me?(0,w.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:me}):null]}):null,K.multiSessionDefaultMigration?.state===`pending`?(0,w.jsxs)(`div`,{className:`settings-inline-notice`,role:`status`,children:[(0,w.jsx)(`strong`,{children:`다중 세션 안내`}),(0,w.jsx)(`p`,{children:`대화 세션을 여러 개 열 수 있습니다. 켜면 동시 실행도 2로 올라가서, 두 번째 세션이 첫 번째가 끝나기를 기다리지 않습니다. 지금 설정은 그대로 유지됩니다.`}),(0,w.jsxs)(`div`,{className:`settings-inline-actions`,children:[(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,disabled:ge,onClick:()=>void Ee(`accept`),children:`다중 세션 켜기`}),(0,w.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,disabled:ge,onClick:()=>void Ee(`keep`),children:`지금 설정 유지`})]}),ve?(0,w.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:ve}):null]}):null,B[p.cli]?.probeState===`checking`?(0,w.jsx)(`div`,{className:`settings-inline-notice`,role:`status`,"aria-live":`polite`,children:`상태 확인 중`}):null,B[p.cli]?.probeState===`failing`?(0,w.jsxs)(`div`,{className:`settings-inline-notice`,role:`alert`,children:[`상태 확인 실패 (재시도 중)`,B[p.cli]?.probeError?`: ${B[p.cli].probeError}`:``]}):null,(0,w.jsx)(ne,{cli:p.cli,cliOptions:Y.length>0?Y:[p.cli||`claude`],provider:Z,providerOptions:xe?[]:X.providers||[],model:p.model,modelOptions:Se,effort:p.effort,effortOptions:Ce,workingDir:p.workingDir,workingDirError:we,cliMeta:L,onCliChange:e=>{let t=g(e,L),n={...p,cli:e,provider:q[e]?.provider||t.defaultProvider||``,model:_(e,q,J),effort:h(e,q,J)};De(),$(n),W(`cli`,{value:e,original:K.cli||``,valid:!0})},onProviderChange:e=>{let t=X.modelsByProvider?.[e]||[],n=X.effortsByProvider?.[e]||[],r=t.includes(p.model)?p.model:t[0]||``,i=v(X,r,p.effort,n,e);$({...p,provider:e,model:r,effort:i}),W(`perCli.${p.cli}.provider`,{value:e,original:q[p.cli]?.provider||X.defaultProvider||``,valid:!0}),W(`activeOverrides.${p.cli}.model`,{value:r,original:_(p.cli,q,J),valid:r.trim().length>0}),W(`activeOverrides.${p.cli}.effort`,{value:i,original:h(p.cli,q,J),valid:!0})},onModelChange:e=>{let t=v(X,e,p.effort,Q?X.effortsByProvider?.[Z]||X.efforts:void 0,Q?Z:void 0);$({...p,model:e,effort:t}),W(`activeOverrides.${p.cli}.model`,{value:e,original:_(p.cli,q,J),valid:e.trim().length>0}),t!==p.effort&&W(`activeOverrides.${p.cli}.effort`,{value:t,original:h(p.cli,q,J),valid:!0})},onEffortChange:e=>{$({...p,effort:e}),W(`activeOverrides.${p.cli}.effort`,{value:e,original:h(p.cli,q,J),valid:!0})},onWorkingDirChange:e=>{$({...p,workingDir:e}),W(`workingDir`,{value:e,original:K.workingDir||``,valid:e.trim().length>0})}}),(0,w.jsx)(re,{value:p.permissions,onChange:e=>{$({...p,permissions:e}),W(`permissions`,{value:e,original:K.permissions??`auto`,valid:e===`auto`||e.length>0})}}),(0,w.jsx)(ie,{activeCli:p.cli,flushCli:S.cli||``,flushModel:S.model||``,cliOptions:Y,cliMeta:L,modelOptions:y(g(S.cli||p.cli,L).models,S.model||``),loading:E,error:ae,onFlushCliChange:e=>{let t=e&&g(e,L).models[0]||``;T({cli:e,model:t}),W(`flushCli`,{value:e,original:x.cli||``,valid:!0}),W(`flushModel`,{value:t,original:x.model||``,valid:!0})},onFlushModelChange:e=>{T({...S,model:e}),W(`flushModel`,{value:e,original:x.model||``,valid:!0})}}),(0,w.jsx)(le,{roster:M,original:k,cliOptions:Y,cliMeta:L,loading:ce,error:F,onRosterChange:e=>{if(N(e),se(e,k)){n.remove(`runtimeEmployees`);return}n.set(`runtimeEmployees`,{value:e,original:k,valid:!A(e)})}})]})}export{z as conflictSettingsFromError,B as default,R as splitAgentSaveBundle};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";import{a as r,i,n as a,r as o,t as s}from"./page-shell-LF7vVVfG.js";import{a as c,n as l,o as u,s as d}from"./fields-zkeByFQW.js";import{t as f}from"./path-utils-LsJeDCKF.js";import{n as p,t as m}from"./TransportStatusChips-CjEySMis.js";var h=e(t(),1),g=n(),_=[`channel`,`slack.enabled`,`slack.botToken`,`slack.appToken`,`slack.teamId`,`slack.channelIds`,`slack.forwardAll`,`slack.allowBots`,`slack.mentionOnly`,`slack.replyInThread`];function v(e){return e?/^[CGD][A-Z0-9]{6,20}$/.test(e.trim().toUpperCase()):!1}function y({port:e,client:t,dirty:n,registerSave:y}){let{state:b,refresh:x,setData:S}=r(t,`/api/settings`),[C,w]=(0,h.useState)(!1),[T,E]=(0,h.useState)(``),[D,O]=(0,h.useState)(``),[k,A]=(0,h.useState)(``),[j,M]=(0,h.useState)([]),[N,P]=(0,h.useState)(!0),[F,I]=(0,h.useState)(!1),[L,R]=(0,h.useState)(!0),[z,B]=(0,h.useState)(!0),V=(0,h.useCallback)(e=>{w(!!e.enabled),E(``),O(``),A(e.teamId??``),M(Array.isArray(e.channelIds)?[...e.channelIds]:[]),P(e.forwardAll!==!1),I(!!e.allowBots),R(e.mentionOnly!==!1),B(e.replyInThread!==!1)},[]);(0,h.useEffect)(()=>{b.kind===`ready`&&V(b.data.slack||{})},[b,V]),(0,h.useEffect)(()=>()=>{for(let e of _)n.remove(e)},[n]);let H=(0,h.useCallback)((e,t)=>n.set(e,t),[n]),U=(0,h.useMemo)(()=>b.kind===`ready`&&b.data.slack||{},[b]),W=b.kind===`ready`?b.data.channel:void 0,G=b.kind===`ready`&&Array.isArray(b.data.slackEnvironmentVariables)?b.data.slackEnvironmentVariables:[],K=G.length>0,q=(0,h.useCallback)(async()=>{let e=n.saveBundle();if(Object.keys(e).length===0)return;let r=f(e),i=await t.put(`/api/settings`,r),a=i&&typeof i==`object`&&`data`in i?i.data:i;n.clear(),S(a),V(a.slack||{}),await x()},[t,n,x,S,V]);if((0,h.useEffect)(()=>{if(y)return y(q),()=>y(null)},[y,q]),b.kind===`loading`)return(0,g.jsx)(a,{});if(b.kind===`offline`)return(0,g.jsx)(o,{port:e});if(b.kind===`error`)return(0,g.jsx)(s,{message:b.message});let J=e=>e?`••••••••${e.slice(-4)}`:`(empty)`,Y=j.filter(e=>!v(e)),X=Y.length>0?`Slack conversation IDs only (C…/G…/D…) — invalid: ${Y.join(`, `)}`:null,Z=T&&!T.startsWith(`xoxb-`)?`Bot tokens start with xoxb-.`:null,Q=D&&!D.startsWith(`xapp-`)?`App-level tokens start with xapp-.`:null,$=!!U.enabled&&!!U.botToken&&!U.appToken,ee=K?`Connection settings are read-only because they are managed by environment variables: ${G.join(`, `)}.`:$?`Currently OUTBOUND-ONLY: the app-level token (xapp-) is missing, so no inbound Slack events can arrive.`:`Slack needs TWO tokens: a bot token (xoxb-) for the Web API and an app-level token (xapp-) for Socket Mode.`;return(0,g.jsxs)(`form`,{className:`settings-page-form`,onSubmit:e=>{e.preventDefault(),q()},children:[(0,g.jsxs)(i,{title:`Channels`,hint:`Choose which channel receives inbound chat. Outbound send can still work on the other channels when configured.`,children:[(0,g.jsx)(p,{original:W,dirty:n,idPrefix:`sl-channel`}),(0,g.jsx)(m,{client:t,channel:`slack`})]}),(0,g.jsxs)(i,{title:`Slack`,hint:ee,children:[(0,g.jsx)(c,{id:`sl-enabled`,label:`Slack enabled`,value:C,disabled:K,onChange:e=>{w(e),H(`slack.enabled`,{value:e,original:!!U.enabled,valid:!0})}}),(0,g.jsx)(u,{id:`sl-botToken`,label:`Bot token`,value:T,placeholder:J(U.botToken),error:Z,disabled:K,onChange:e=>{if(E(e),e.length===0){n.remove(`slack.botToken`);return}H(`slack.botToken`,{value:e,original:U.botToken??``,valid:e.startsWith(`xoxb-`)})}}),(0,g.jsx)(u,{id:`sl-appToken`,label:`App-level token`,value:D,placeholder:J(U.appToken),error:Q,disabled:K,onChange:e=>{if(O(e),e.length===0){n.remove(`slack.appToken`);return}H(`slack.appToken`,{value:e,original:U.appToken??``,valid:e.startsWith(`xapp-`)})}}),(0,g.jsx)(d,{id:`sl-teamId`,label:`Team ID`,value:k,placeholder:`T01234567 (optional)`,disabled:K,onChange:e=>{A(e),H(`slack.teamId`,{value:e,original:U.teamId??``,valid:!0})}}),(0,g.jsx)(l,{id:`sl-channelIds`,label:`Channel IDs`,value:j,placeholder:`C01234567`,error:X,disabled:K,onChange:e=>{M(e),H(`slack.channelIds`,{value:e,original:U.channelIds??[],valid:e.every(v)})}}),(0,g.jsx)(c,{id:`sl-mentionOnly`,label:`Mention only`,value:L,onChange:e=>{R(e),H(`slack.mentionOnly`,{value:e,original:U.mentionOnly!==!1,valid:!0})}}),(0,g.jsx)(c,{id:`sl-replyInThread`,label:`Reply in thread`,value:z,onChange:e=>{B(e),H(`slack.replyInThread`,{value:e,original:U.replyInThread!==!1,valid:!0})}}),(0,g.jsx)(c,{id:`sl-forwardAll`,label:`Forward all`,value:N,onChange:e=>{P(e),H(`slack.forwardAll`,{value:e,original:U.forwardAll!==!1,valid:!0})}}),(0,g.jsx)(c,{id:`sl-allowBots`,label:`Allow bots`,value:F,onChange:e=>{I(e),H(`slack.allowBots`,{value:e,original:!!U.allowBots,valid:!0})}})]})]})}export{y as default,v as isValidSlackConversationId};
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-Bjnw0wQ6.css"])))=>i.map(i=>d[i]);
2
- import{n as e,r as t}from"./vendor-render-DCb9B75Q.js";import{t as n}from"./state-DxpgDKMO.js";import{a as r,i,n as a,r as o,t as s}from"./api-tVoG39dL.js";import{a as c,c as l,d as u,f as ee,i as te,l as ne,r as re,s as ie,t as ae,u as oe}from"./sidebar-DW78DANx.js";import{t as d}from"./preload-helper-DFYRRz9w.js";import{A as se,C as ce,D as le,E as ue,F as de,I as fe,L as pe,M as f,O as p,R as m,S as me,b as he,f as ge,h as _e,l as ve,m as h,n as ye,p as be,u as xe,v as Se,y as Ce}from"./render-BkGcpH7z.js";import{_ as g,d as we,f as _,n as Te,u as Ee}from"./iframe-renderer-B8k3AvTv.js";import{O as De,T as Oe,_ as v,t as ke,v as y}from"./message-history-Bw2E_b8L.js";import{n as Ae,s as b}from"./idb-cache-lOntwU3S.js";import{c as je,f as Me,o as Ne}from"./ui-Bx7eqnXt.js";import{t as Pe}from"./locale-DC-ZsWOf.js";import{a as Fe,c as Ie,i as Le,n as Re,o as ze,r as Be,s as Ve,t as He}from"./slash-commands-DYOI6nKj.js";import{i as Ue,o as We}from"./constants-Df7-7Rky.js";import{A as Ge,C as Ke,D as qe,E as Je,F as Ye,I as Xe,L as Ze,M as Qe,N as $e,O as et,P as tt,R as nt,S as x,T as rt,a as it,c as at,d as S,g as ot,h as st,i as ct,j as lt,k as ut,m as dt,o as ft,r as pt,s as mt,t as ht,u as C,v as gt,w,x as _t,y as vt,z as yt}from"./settings-core-CxRwqx86.js";import{t as bt}from"./provider-icons-VDfahiUp.js";import{a as xt,i as St,t as Ct}from"./skills-lWi0ZFiV.js";import{a as wt,c as Tt,d as Et,f as Dt,g as Ot,h as kt,i as At,l as jt,m as Mt,n as Nt,o as Pt,p as Ft,r as It,s as Lt,t as T,u as Rt}from"./settings-B1FPORO2.js";import{a as zt,c as Bt,d as Vt,f as Ht,i as Ut,l as Wt,m as Gt,n as Kt,o as qt,p as Jt,r as Yt,s as Xt,t as Zt,u as Qt}from"./memory-D2RbBVO-.js";import{n as $t}from"./bgtask-badge-CpavV0Jc.js";var en=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.webp`,`.svg`]),tn=new Set([`.mp4`,`.webm`,`.mov`,`.ogg`]);function nn(e){let t=String(e||``).split(/[\\/]/).pop()||``,n=t.lastIndexOf(`.`),r=n>0?t.slice(n).toLowerCase():``;return en.has(r)?`image`:tn.has(r)?`video`:`file`}var E=[],rn=8e3;function an(e){return/^\/compact(?:\s|$)/i.test(String(e||``).trim())?300*1e3:1e4}var on={image:`chat.file.sentImage`,video:`chat.file.sentVideo`,file:`chat.file.sent`};function sn(e){return m(on[nn(e)],{path:e})}function cn(e,t=``){let n=e.map(sn).join(`
2
+ import{n as e,r as t}from"./vendor-render-DCb9B75Q.js";import{t as n}from"./state-DxpgDKMO.js";import{a as r,i,n as a,r as o,t as s}from"./api-tVoG39dL.js";import{a as c,c as l,d as u,f as ee,i as te,l as ne,r as re,s as ie,t as ae,u as oe}from"./sidebar-DgIj-LuT.js";import{t as d}from"./preload-helper-DFYRRz9w.js";import{A as se,C as ce,D as le,E as ue,F as de,I as fe,L as pe,M as f,O as p,R as m,S as me,b as he,f as ge,h as _e,l as ve,m as h,n as ye,p as be,u as xe,v as Se,y as Ce}from"./render-DXwQzjsJ.js";import{_ as g,d as we,f as _,n as Te,u as Ee}from"./iframe-renderer-D1-zDg8V.js";import{O as De,T as Oe,_ as v,t as ke,v as y}from"./message-history-DB1rynP-.js";import{n as Ae,s as b}from"./idb-cache-lOntwU3S.js";import{c as je,f as Me,o as Ne}from"./ui-CDozpEQt.js";import{t as Pe}from"./locale-DC-ZsWOf.js";import{a as Fe,c as Ie,i as Le,n as Re,o as ze,r as Be,s as Ve,t as He}from"./slash-commands-B2V_jngP.js";import{i as Ue,o as We}from"./constants-Df7-7Rky.js";import{A as Ge,C as Ke,D as qe,E as Je,F as Ye,I as Xe,L as Ze,M as Qe,N as $e,O as et,P as tt,R as nt,S as x,T as rt,a as it,c as at,d as S,g as ot,h as st,i as ct,j as lt,k as ut,m as dt,o as ft,r as pt,s as mt,t as ht,u as C,v as gt,w,x as _t,y as vt,z as yt}from"./settings-core-t5yYVRrv.js";import{t as bt}from"./provider-icons-VDfahiUp.js";import{a as xt,i as St,t as Ct}from"./skills-QqxjqDHg.js";import{a as wt,c as Tt,d as Et,f as Dt,g as Ot,h as kt,i as At,l as jt,m as Mt,n as Nt,o as Pt,p as Ft,r as It,s as Lt,t as T,u as Rt}from"./settings-CXndjCad.js";import{a as zt,c as Bt,d as Vt,f as Ht,i as Ut,l as Wt,m as Gt,n as Kt,o as qt,p as Jt,r as Yt,s as Xt,t as Zt,u as Qt}from"./memory-CNUpXWEC.js";import{n as $t}from"./bgtask-badge-D6XYRFI5.js";var en=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.webp`,`.svg`]),tn=new Set([`.mp4`,`.webm`,`.mov`,`.ogg`]);function nn(e){let t=String(e||``).split(/[\\/]/).pop()||``,n=t.lastIndexOf(`.`),r=n>0?t.slice(n).toLowerCase():``;return en.has(r)?`image`:tn.has(r)?`video`:`file`}var E=[],rn=8e3;function an(e){return/^\/compact(?:\s|$)/i.test(String(e||``).trim())?300*1e3:1e4}var on={image:`chat.file.sentImage`,video:`chat.file.sentVideo`,file:`chat.file.sent`};function sn(e){return m(on[nn(e)],{path:e})}function cn(e,t=``){let n=e.map(sn).join(`
3
3
  `);return t?`${n}${m(`chat.file.sentWithMsg`,{text:t})}`:n}function ln(e,t){let n=t.map(sn).join(`
4
4
  `);return n?`${e}\n\n${n}`:e}function un(e){let t=me();return t?new Promise(n=>{let r=`preview-send-${Date.now()}-${Math.random().toString(36).slice(2)}`,i=!1,a=()=>{window.removeEventListener(`message`,s),window.clearTimeout(c)},o=e=>{i||(i=!0,a(),n(e))},s=e=>{if(e.source!==window.parent||!he(e.origin))return;let t=e.data;!t||t.type!==`jaw-preview-send-result`||t.requestId!==r||o({ok:!!t.ok,status:Number.isInteger(t.status)?t.status:t.ok?200:502,data:t.data||(t.error?{error:t.error}:{}),viaRelay:!0})},c=window.setTimeout(()=>o(null),rn);window.addEventListener(`message`,s);try{window.parent.postMessage(h({type:`jaw-preview-send-message`,requestId:r,prompt:e}),t)}catch{o(null)}}):Promise.resolve(null)}async function dn(e){let t=await un(e);if(t?.ok)return t;try{let t=await fetch(`${s}/api/message`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(h({prompt:e}))}),n=await t.json().catch(()=>({}));return{ok:t.ok,status:t.status,data:n}}catch(e){return{ok:!1,status:0,data:{error:e.message}}}}async function fn(e){let t,n,i=an(e);if(typeof AbortSignal?.timeout==`function`)t=AbortSignal.timeout(i);else{let e=new AbortController;t=e.signal,n=setTimeout(()=>e.abort(),i)}let a=Pe(),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(h({text:e,locale:a})),signal:t});n&&clearTimeout(n);let l=await c.json().catch(()=>({}));return{ok:c.ok,status:c.status,result:l}}async function pn(e,t,n){let r=t.result;if(r?.code===`not_command`){if(n){await n();return}v(`user`,e),b({role:`user`,content:e,timestamp:Date.now()}),await i(`/api/message`,`POST`,h({prompt:e}));return}if(!t.ok&&!r?.text)throw Error(`HTTP ${t.status}`);if(r?.code===`clear_screen`){ye(),g().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``)}(r?.text||r?.recovery)&&y(mn(r),``,r.type),r?.steerPrompt&&await i(`/api/message`,`POST`,h({prompt:r.steerPrompt}))}function mn(e){let t=e.recovery;if(!t?.originalText)return e.text?f(e.text):``;let n=(t.suggestedCommands||[]).slice(0,5),r=n.length?`<div class="cmd-recovery-suggestions">${n.map(e=>`<code>${f(e)}</code>`).join(` `)}</div>`:``,i=f(t.originalText);return`${e.text?`<div>${f(e.text)}</div>`:``}
5
5
  <div class="cmd-recovery" data-cmd-recovery>
@@ -10,11 +10,11 @@ import{n as e,r as t}from"./vendor-render-DCb9B75Q.js";import{t as n}from"./stat
10
10
  <button type="button" class="cmd-recovery-btn" data-cmd-recovery-action="reinsert" data-cmd-text="${i}">${f(m(`cmd.artifact.action.reinsert`))}</button>
11
11
  <button type="button" class="cmd-recovery-btn" data-cmd-recovery-action="copy" data-cmd-text="${i}">${f(m(`cmd.artifact.action.copy`))}</button>
12
12
  </div>
13
- </div>`}document.addEventListener(`click`,async e=>{let t=e.target?.closest(`[data-cmd-recovery-action]`);if(!t)return;let n=t.dataset.cmdRecoveryAction||``,r=t.dataset.cmdText||``;if(r){if(n===`reinsert`){let e=document.getElementById(`chatInput`);if(!e)return;e.value=r,e.focus(),e.selectionStart=e.selectionEnd=e.value.length,e.dispatchEvent(new Event(`input`,{bubbles:!0}));return}n===`copy`&&await le(r)}});var hn=!1;async function gn(e=`enter`){let t=document.getElementById(`chatInput`),r=document.getElementById(`btnSend`);if(!t||!r)return;let a=t.value.trim();if(!ve(e===`button`&&r.classList.contains(`stop-mode`)?``:a)){be();return}let s=e===`button`;if(r.classList.contains(`stop-mode`)&&s){o(`/api/stop`,`POST`,h({}));return}if(hn||!a&&!n.attachedFiles.length)return;ne(),hn=!0;let c=r,u=c.disabled;c.disabled=!0;try{await dt();let e=a.slice(1).trim().split(/\s+/)[0]||``,r=e.includes(`/`)||e.includes(`\\`),o=a.startsWith(`/`)&&!r;if(o&&!n.attachedFiles.length){if(t.value=``,k(),He(),Ve(a))return;try{await pn(a,await fn(a))}catch(e){y(m(`chat.cmd.fail`,{msg:e.message}),``,`error`)}finally{l(`command`).catch(()=>{})}return}if(n.attachedFiles.length){let e=`📎 [${n.attachedFiles.map(e=>e.name).join(`, `)}] ${a}`;v(`user`,e),b({role:`user`,content:e,timestamp:Date.now()}),t.value=``,k();try{let e=await Promise.all(n.attachedFiles.map(e=>vn(e))),t=cn(e,a);if(D(),o){He();try{let n=ln(a,e);await pn(n,await fn(n),async()=>{await i(`/api/message`,`POST`,h({prompt:t}))})}catch(e){y(m(`chat.cmd.fail`,{msg:e.message}),``,`error`)}finally{l(`command`).catch(()=>{})}return}await i(`/api/message`,`POST`,h({prompt:t}))}catch(e){y(m(`chat.file.uploadFail`,{msg:e.message})),D()}}else{t.value=``,k();let e=await dn(a),n=e.data;if(e.status===409&&n.error===`duplicate`)return;if(!e.ok){y(`${p.error} ${f(n.error||m(`chat.requestFail`,{status:e.status}))}`,``,`error`);return}if(n.queued){let{updateQueueBadge:e}=await d(async()=>{let{updateQueueBadge:e}=await import(`./ui-JOcrYeG-.js`);return{updateQueueBadge:e}},__vite__mapDeps([0]));e(n.pending||1)}else e.viaRelay?(b({role:`user`,content:a,timestamp:Date.now()}),n.continued&&y(m(`chat.continue`)),_(!0)):n.noPendingContinue?(v(`user`,a),b({role:`user`,content:a,timestamp:Date.now()}),_(!0)):n.continued?(v(`user`,a),b({role:`user`,content:a,timestamp:Date.now()}),y(m(`chat.continue`)),_(!0)):(v(`user`,a),b({role:`user`,content:a,timestamp:Date.now()}),_(!0))}}finally{hn=!1,c.disabled=u}}function _n(e){e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),gn(`enter`))}async function vn(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 yn(e){for(let t of e)n.attachedFiles.some(e=>e.name===t.name)||n.attachedFiles.push(t);O(),document.getElementById(`chatInput`)?.focus()}function bn(e){n.attachedFiles.splice(e,1),O()}function D(){E.forEach(e=>URL.revokeObjectURL(e)),E=[],n.attachedFiles=[],O();let e=document.getElementById(`fileInput`);e&&(e.value=``)}function O(){let e=document.getElementById(`filePreview`),t=document.getElementById(`filePreviewList`);if(e){if(E.forEach(e=>URL.revokeObjectURL(e)),E=[],!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);E.push(t),i=`<img src="${t}" class="file-chip-thumb" alt="">`}return`<div class="file-chip">
13
+ </div>`}document.addEventListener(`click`,async e=>{let t=e.target?.closest(`[data-cmd-recovery-action]`);if(!t)return;let n=t.dataset.cmdRecoveryAction||``,r=t.dataset.cmdText||``;if(r){if(n===`reinsert`){let e=document.getElementById(`chatInput`);if(!e)return;e.value=r,e.focus(),e.selectionStart=e.selectionEnd=e.value.length,e.dispatchEvent(new Event(`input`,{bubbles:!0}));return}n===`copy`&&await le(r)}});var hn=!1;async function gn(e=`enter`){let t=document.getElementById(`chatInput`),r=document.getElementById(`btnSend`);if(!t||!r)return;let a=t.value.trim();if(!ve(e===`button`&&r.classList.contains(`stop-mode`)?``:a)){be();return}let s=e===`button`;if(r.classList.contains(`stop-mode`)&&s){o(`/api/stop`,`POST`,h({}));return}if(hn||!a&&!n.attachedFiles.length)return;ne(),hn=!0;let c=r,u=c.disabled;c.disabled=!0;try{await dt();let e=a.slice(1).trim().split(/\s+/)[0]||``,r=e.includes(`/`)||e.includes(`\\`),o=a.startsWith(`/`)&&!r;if(o&&!n.attachedFiles.length){if(t.value=``,k(),He(),Ve(a))return;try{await pn(a,await fn(a))}catch(e){y(m(`chat.cmd.fail`,{msg:e.message}),``,`error`)}finally{l(`command`).catch(()=>{})}return}if(n.attachedFiles.length){let e=`📎 [${n.attachedFiles.map(e=>e.name).join(`, `)}] ${a}`;v(`user`,e),b({role:`user`,content:e,timestamp:Date.now()}),t.value=``,k();try{let e=await Promise.all(n.attachedFiles.map(e=>vn(e))),t=cn(e,a);if(D(),o){He();try{let n=ln(a,e);await pn(n,await fn(n),async()=>{await i(`/api/message`,`POST`,h({prompt:t}))})}catch(e){y(m(`chat.cmd.fail`,{msg:e.message}),``,`error`)}finally{l(`command`).catch(()=>{})}return}await i(`/api/message`,`POST`,h({prompt:t}))}catch(e){y(m(`chat.file.uploadFail`,{msg:e.message})),D()}}else{t.value=``,k();let e=await dn(a),n=e.data;if(e.status===409&&n.error===`duplicate`)return;if(!e.ok){y(`${p.error} ${f(n.error||m(`chat.requestFail`,{status:e.status}))}`,``,`error`);return}if(n.queued){let{updateQueueBadge:e}=await d(async()=>{let{updateQueueBadge:e}=await import(`./ui-o-VpvrSv.js`);return{updateQueueBadge:e}},__vite__mapDeps([0]));e(n.pending||1)}else e.viaRelay?(b({role:`user`,content:a,timestamp:Date.now()}),n.continued&&y(m(`chat.continue`)),_(!0)):n.noPendingContinue?(v(`user`,a),b({role:`user`,content:a,timestamp:Date.now()}),_(!0)):n.continued?(v(`user`,a),b({role:`user`,content:a,timestamp:Date.now()}),y(m(`chat.continue`)),_(!0)):(v(`user`,a),b({role:`user`,content:a,timestamp:Date.now()}),_(!0))}}finally{hn=!1,c.disabled=u}}function _n(e){e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),gn(`enter`))}async function vn(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 yn(e){for(let t of e)n.attachedFiles.some(e=>e.name===t.name)||n.attachedFiles.push(t);O(),document.getElementById(`chatInput`)?.focus()}function bn(e){n.attachedFiles.splice(e,1),O()}function D(){E.forEach(e=>URL.revokeObjectURL(e)),E=[],n.attachedFiles=[],O();let e=document.getElementById(`fileInput`);e&&(e.value=``)}function O(){let e=document.getElementById(`filePreview`),t=document.getElementById(`filePreviewList`);if(e){if(E.forEach(e=>URL.revokeObjectURL(e)),E=[],!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);E.push(t),i=`<img src="${t}" class="file-chip-thumb" alt="">`}return`<div class="file-chip">
14
14
  ${i}
15
15
  <span class="file-chip-name">${p.paperclip} ${f(e.name)} (${n}KB)</span>
16
16
  <button class="file-chip-remove" data-file-idx="${t}" title="Remove">${p.close}</button>
17
- </div>`}).join(``))}}async function xn(){ye(),g().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``);let{cleanupToolActivity:t}=await d(async()=>{let{cleanupToolActivity:e}=await import(`./ui-JOcrYeG-.js`);return{cleanupToolActivity:e}},__vite__mapDeps([0]));t(),Ae().catch(()=>{}),ne()}var Sn=0;function Cn(e){if(Sn)return;let t=Ee();Sn=requestAnimationFrame(()=>{if(Sn=0,e.style.height=`auto`,e.style.height=e.scrollHeight+`px`,t){let e=document.getElementById(`chatMessages`);e&&(e.scrollTop=e.scrollHeight,we())}})}function wn(){let e=document.getElementById(`chatInput`);e&&e.addEventListener(`input`,()=>Cn(e))}function k(){let e=document.getElementById(`chatInput`),t=Ee();if(e&&(e.style.height=`auto`),t){let e=document.getElementById(`chatMessages`);e&&(e.scrollTop=e.scrollHeight,we())}}function Tn(){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&&yn(r)}),document.getElementById(`fileInput`)?.addEventListener(`change`,e=>{let t=e.target,n=[...t.files||[]];n.length&&yn(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(),yn(n))})}async function En(e,t,r){if(!ve()){be();return}let a=document.getElementById(`chatInput`),o=a?.value.trim()||``,c=[...n.attachedFiles],l=[m(`chat.voice.label`)];c.length&&l.push(`📎 [${c.map(e=>e.name).join(`, `)}]`),o&&l.push(o),v(`user`,l.join(` `)),b({role:`user`,content:l.join(` `),timestamp:Date.now()}),a&&o&&(a.value=``,k()),c.length&&D();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`);y(`${p.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=>vn(e))));let u=[];for(let e of l)u.push(sn(e));u.push(`🎤 ${a.text}`),o&&u.push(o),await i(`/api/message`,`POST`,h({prompt:u.join(`
17
+ </div>`}).join(``))}}async function xn(){ye(),g().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``);let{cleanupToolActivity:t}=await d(async()=>{let{cleanupToolActivity:e}=await import(`./ui-o-VpvrSv.js`);return{cleanupToolActivity:e}},__vite__mapDeps([0]));t(),Ae().catch(()=>{}),ne()}var Sn=0;function Cn(e){if(Sn)return;let t=Ee();Sn=requestAnimationFrame(()=>{if(Sn=0,e.style.height=`auto`,e.style.height=e.scrollHeight+`px`,t){let e=document.getElementById(`chatMessages`);e&&(e.scrollTop=e.scrollHeight,we())}})}function wn(){let e=document.getElementById(`chatInput`);e&&e.addEventListener(`input`,()=>Cn(e))}function k(){let e=document.getElementById(`chatInput`),t=Ee();if(e&&(e.style.height=`auto`),t){let e=document.getElementById(`chatMessages`);e&&(e.scrollTop=e.scrollHeight,we())}}function Tn(){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&&yn(r)}),document.getElementById(`fileInput`)?.addEventListener(`change`,e=>{let t=e.target,n=[...t.files||[]];n.length&&yn(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(),yn(n))})}async function En(e,t,r){if(!ve()){be();return}let a=document.getElementById(`chatInput`),o=a?.value.trim()||``,c=[...n.attachedFiles],l=[m(`chat.voice.label`)];c.length&&l.push(`📎 [${c.map(e=>e.name).join(`, `)}]`),o&&l.push(o),v(`user`,l.join(` `)),b({role:`user`,content:l.join(` `),timestamp:Date.now()}),a&&o&&(a.value=``,k()),c.length&&D();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`);y(`${p.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=>vn(e))));let u=[];for(let e of l)u.push(sn(e));u.push(`🎤 ${a.text}`),o&&u.push(o),await i(`/api/message`,`POST`,h({prompt:u.join(`
18
18
  `)}))}catch(e){y(m(`voice.sttFail`,{msg:e.message}),``,`error`)}}var Dn={sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6},On={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 kn(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 An(e){let t=e&&typeof e==`object`?e:{},n=t.kind,r=typeof t.timeZone==`string`?t.timeZone.trim():``,i=kn(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=jn(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 jn(e){try{let[t,n,r,i,a]=Mn(e);return A(t,{min:0,max:59}),A(n,{min:0,max:23}),A(r,{min:1,max:31}),A(i,{min:1,max:12,aliases:On}),A(a,{min:0,max:7,aliases:Dn,normalize:Fn}),null}catch(e){return e.message}}function Mn(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 A(e,t){for(let n of e.split(`,`))Nn(n.trim(),t)}function Nn(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,Pn(r,`invalid cron step "${r}"`)}if(n!==`*`){if(n.includes(`-`)){let[e,r,...i]=n.split(`-`);if(!e||!r||i.length>0||j(e,t)>j(r,t))throw Error(`invalid cron range "${n}"`);return}j(n,t)}}function j(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(!In(i,t.min,t.max))throw Error(`cron value "${e}" out of range ${t.min}-${t.max}`);return i}function Pn(e,t){let n=Number(e);if(!Number.isInteger(n)||n<=0)throw Error(t);return n}function Fn(e){return e===7?0:e}function In(e,t,n){return e>=t&&e<=n}async function Ln(){n.heartbeatJobs=((await a(`/api/heartbeat`))?.jobs||[]).map(P),n.heartbeatErrors=I(n.heartbeatJobs),M(),document.getElementById(`heartbeatModal`)?.classList.add(`open`)}function Rn(e){e&&e.target!==e.currentTarget||document.getElementById(`heartbeatModal`)?.classList.remove(`open`)}function M(){let e=document.getElementById(`hbJobsList`);if(!e)return;let t=n.heartbeatJobs.map(P);n.heartbeatJobs=t,n.heartbeatErrors=I(t),t.length===0?e.innerHTML=`<p style="color:var(--text-dim);font-size:12px;text-align:center">${m(`hb.empty`)}</p>`:e.innerHTML=t.map((e,t)=>{let r=Un(e.schedule),i=r.kind===`cron`,a=n.heartbeatErrors[e.id],o=a||Yn(r),s=a?`hb-schedule-meta hb-error`:`hb-schedule-meta hb-help`,c=i?`<input type="text" value="${f(r.cron)}" placeholder="${f(m(`hb.cronPlaceholder`))}"
19
19
  data-hb-cron="${t}">`:`<input type="number" value="${r.minutes}" min="1" data-hb-minutes="${t}">`,l=i?`<span class="hb-chip">${f(m(`hb.cronLabel`))}</span>`:`<span class="hb-chip">${f(m(`hb.minutesLabel`))}</span>`;return`
20
20
  <div class="hb-job-card">
@@ -52,4 +52,4 @@ import{n as e,r as t}from"./vendor-render-DCb9B75Q.js";import{t as n}from"./stat
52
52
  <div class="media-lightbox-controls">
53
53
  <button class="media-lightbox-open" aria-label="Open in browser">↗ Open</button>
54
54
  <button class="media-lightbox-close" aria-label="Close">✕</button>
55
- </div></div>`,document.body.appendChild(e);let t=``,n=()=>e.classList.add(`hidden`),r=()=>{t&&window.open(t,`_blank`)};e.querySelector(`.media-lightbox-backdrop`).addEventListener(`click`,n),e.querySelector(`.media-lightbox-close`).addEventListener(`click`,n),e.querySelector(`.media-lightbox-open`).addEventListener(`click`,r),e.querySelector(`.media-lightbox-img`).addEventListener(`dblclick`,r),document.addEventListener(`keydown`,t=>{t.key===`Escape`&&!e.classList.contains(`hidden`)&&n()}),document.addEventListener(`click`,n=>{let r=n.target;(r.classList.contains(`chat-inline-img`)||r.closest(`.file-preview-list`)&&r.tagName===`IMG`)&&(t=r.src,e.querySelector(`.media-lightbox-img`).src=t,e.classList.remove(`hidden`))})}var Xr=`jaw:stale-bundle-reload-pending`;function Zr(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(Xr)===`1`)return!0;sessionStorage.setItem(Xr,`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(Zr(e.reason)){e.preventDefault();return}console.error(`[unhandled]`,e.reason),e.preventDefault()}),window.addEventListener(`error`,e=>{if(Zr(e.error||e.message)){e.preventDefault();return}console.error(`[error]`,e.message,e.filename,e.lineno)});var{loadEmployees:Qr,addEmployee:$r,deleteEmployee:ei,updateEmployee:Q,onEmpCliChange:ti,onEmpRoleChange:ni}=await d(async()=>{let{loadEmployees:e,addEmployee:t,deleteEmployee:n,updateEmployee:r,onEmpCliChange:i,onEmpRoleChange:a}=await import(`./employees-BJyEgim7.js`);return{loadEmployees:e,addEmployee:t,deleteEmployee:n,updateEmployee:r,onEmpCliChange:i,onEmpRoleChange:a}},__vite__mapDeps([0]));function ri(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 ii(e){let t=(e.ctrlKey||e.metaKey)&&e.shiftKey&&e.code===`Space`,n=e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey&&e.code===`KeyM`;return t||n}document.getElementById(`btnSend`)?.addEventListener(`click`,()=>{gn(`button`)});var ai=document.getElementById(`chatInput`);ai?.addEventListener(`keydown`,e=>{Be(e)||_n(e)});var $=0;ai?.addEventListener(`input`,e=>{e.isComposing||($&&cancelAnimationFrame($),$=requestAnimationFrame(()=>{ze(e.target?.value||``),$=0}))}),ai?.addEventListener(`cmd-execute`,()=>{gn(`cmd-execute`)}),document.getElementById(`cmdDropdown`)?.addEventListener(`click`,Re),document.addEventListener(`click`,Le),u(),$t(),document.getElementById(`filePreviewClear`)?.addEventListener(`click`,D),document.getElementById(`filePreviewList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-file-idx]`);t&&bn(+(t.dataset.fileIdx||`0`))}),document.querySelector(`.btn-attach`)?.addEventListener(`click`,()=>{document.getElementById(`fileInput`)?.click()}),document.getElementById(`btnVoice`)?.addEventListener(`click`,()=>jr()),document.getElementById(`btnVoiceCancel`)?.addEventListener(`click`,()=>Ar()),window.addEventListener(`message`,e=>{if(window.parent===window||e.source!==window.parent||!ri(e.origin))return;let t=e.data;!t||t.type!==`jaw-preview-stt-toggle`||jr()}),document.getElementById(`memorySidebarBtn`)?.addEventListener(`click`,Ut),document.getElementById(`btnClearChat`)?.addEventListener(`click`,xn),document.getElementById(`hbSidebarBtn`)?.addEventListener(`click`,Ln),document.getElementById(`langSelect`)?.addEventListener(`change`,async e=>{let t=e.target.value;[`ko`,`en`,`zh`,`ja`].includes(t)&&(await pe(t),ie())}),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]&&Me(r[n],t)}),document.querySelector(`.sidebar-save-bar .btn-save`)?.addEventListener(`click`,Ne);function oi(e){let t=(e instanceof HTMLSelectElement?e:document.getElementById(`selCliProvider`))?.value||``,n=document.getElementById(`providerAiE`);!t||!n||Array.from(n.options).some(e=>e.value===t)&&(n.value=t)}document.getElementById(`selCli`)?.addEventListener(`change`,()=>ft()),document.getElementById(`selCliProvider`)?.addEventListener(`change`,e=>{oi(e.target),ft(),C()}),document.getElementById(`selModel`)?.addEventListener(`change`,()=>C()),document.getElementById(`selEffort`)?.addEventListener(`change`,()=>C()),document.getElementById(`flushCli`)?.addEventListener(`change`,()=>mt()),document.getElementById(`flushModel`)?.addEventListener(`change`,()=>mt()),document.querySelector(`[data-action="addEmployee"]`)?.addEventListener(`click`,$r),document.getElementById(`employeesList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-emp-delete]`);if(t){ei(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){ti(r.dataset.empCli||``,t.value);return}let i=t.closest(`[data-emp-model]`);if(i){if(t.value===`__custom__`){let e=prompt(m(`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){ni(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&&xt(t.dataset.skillId||``,t.dataset.skillEnabled===`true`)}),document.querySelector(`#tabSkills`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`.skill-filter`);t&&Ct(t.dataset.filter||`all`,t)}),document.getElementById(`skillSearchInput`)?.addEventListener(`input`,e=>{St(e.target.value)}),document.querySelector(`[data-action="openPrompt"]`)?.addEventListener(`click`,It),document.getElementById(`tgOff`)?.addEventListener(`click`,()=>Ze(!1)),document.getElementById(`tgOn`)?.addEventListener(`click`,()=>Ze(!0)),document.getElementById(`tgForwardOff`)?.addEventListener(`click`,()=>Xe(!1)),document.getElementById(`tgForwardOn`)?.addEventListener(`click`,()=>Xe(!0)),document.getElementById(`tgMentionOff`)?.addEventListener(`click`,()=>nt(!1)),document.getElementById(`tgMentionOn`)?.addEventListener(`click`,()=>nt(!0)),document.getElementById(`tgToken`)?.addEventListener(`change`,Ye),document.getElementById(`tgChatIds`)?.addEventListener(`change`,Ye),document.getElementById(`chTelegram`)?.addEventListener(`click`,()=>x(`telegram`)),document.getElementById(`chDiscord`)?.addEventListener(`click`,()=>x(`discord`)),document.getElementById(`dcOff`)?.addEventListener(`click`,()=>lt(!1)),document.getElementById(`dcOn`)?.addEventListener(`click`,()=>lt(!0)),document.getElementById(`dcForwardOff`)?.addEventListener(`click`,()=>$e(!1)),document.getElementById(`dcForwardOn`)?.addEventListener(`click`,()=>$e(!0)),document.getElementById(`dcAllowBotsOff`)?.addEventListener(`click`,()=>Qe(!1)),document.getElementById(`dcAllowBotsOn`)?.addEventListener(`click`,()=>Qe(!0)),document.getElementById(`dcMentionOff`)?.addEventListener(`click`,()=>tt(!1)),document.getElementById(`dcMentionOn`)?.addEventListener(`click`,()=>tt(!0)),document.getElementById(`dcToken`)?.addEventListener(`change`,Ge),document.getElementById(`dcGuildId`)?.addEventListener(`change`,Ge),document.getElementById(`dcChannelIds`)?.addEventListener(`change`,Ge),document.getElementById(`chSlack`)?.addEventListener(`click`,()=>x(`slack`)),document.getElementById(`slOff`)?.addEventListener(`click`,()=>rt(!1)),document.getElementById(`slOn`)?.addEventListener(`click`,()=>rt(!0)),document.getElementById(`slForwardOff`)?.addEventListener(`click`,()=>qe(!1)),document.getElementById(`slForwardOn`)?.addEventListener(`click`,()=>qe(!0)),document.getElementById(`slAllowBotsOff`)?.addEventListener(`click`,()=>Je(!1)),document.getElementById(`slAllowBotsOn`)?.addEventListener(`click`,()=>Je(!0)),document.getElementById(`slMentionOff`)?.addEventListener(`click`,()=>et(!1)),document.getElementById(`slMentionOn`)?.addEventListener(`click`,()=>et(!0)),document.getElementById(`slThreadOff`)?.addEventListener(`click`,()=>ut(!1)),document.getElementById(`slThreadOn`)?.addEventListener(`click`,()=>ut(!0)),document.getElementById(`slBotToken`)?.addEventListener(`change`,w),document.getElementById(`slAppToken`)?.addEventListener(`change`,w),document.getElementById(`slTeamId`)?.addEventListener(`change`,w),document.getElementById(`slChannelIds`)?.addEventListener(`change`,w),document.getElementById(`slAttachPort`)?.addEventListener(`change`,w),yt(),Ke(),document.getElementById(`fallbackOrderList`)?.addEventListener(`change`,_t);function si(e){let t=document.getElementById(`codexFastOn`),n=document.getElementById(`codexFastOff`);t&&n&&(t.classList.toggle(`active`,e),n.classList.toggle(`active`,!e)),S()}document.getElementById(`codexFastOn`)?.addEventListener(`click`,()=>si(!0)),document.getElementById(`codexFastOff`)?.addEventListener(`click`,()=>si(!1));function ci(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`),S()}document.getElementById(`codexCtxOn`)?.addEventListener(`click`,()=>ci(!0)),document.getElementById(`codexCtxOff`)?.addEventListener(`click`,()=>ci(!1)),document.getElementById(`codexCtxWindow`)?.addEventListener(`change`,S),document.getElementById(`codexCtxCompact`)?.addEventListener(`change`,S);function li(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)),S()}document.getElementById(`claude1mOn`)?.addEventListener(`click`,()=>li(!0)),document.getElementById(`claude1mOff`)?.addEventListener(`click`,()=>li(!1));function ui(e){return e.split(/[^a-zA-Z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function di(){for(let e of Ue()){let t=ui(e),n=document.getElementById(`model`+t);n&&n.addEventListener(`change`,function(){pt(e,this)});let r=document.getElementById(`customModel`+t);r&&r.addEventListener(`change`,function(){ht(e,this)});let i=document.getElementById(`effort`+t);i&&i.addEventListener(`change`,S)}document.getElementById(`providerAiE`)?.addEventListener(`change`,at)}document.querySelector(`[data-action="openMcpModal"]`)?.addEventListener(`click`,gt),document.querySelector(`[data-action="syncMcp"]`)?.addEventListener(`click`,vt),document.querySelector(`[data-action="installMcp"]`)?.addEventListener(`click`,ot),st(),document.querySelector(`[data-action="refreshCli"]`)?.addEventListener(`click`,()=>{Dt()?Mt(!0):jt()}),document.getElementById(`cliStatusInterval`)?.addEventListener(`change`,function(){Ot(this.value)}),document.getElementById(`promptModal`)?.addEventListener(`click`,e=>T(e)),document.querySelector(`#promptModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closePrompt"]`)?.addEventListener(`click`,()=>T()),document.querySelector(`[data-action="cancelPrompt"]`)?.addEventListener(`click`,()=>T()),document.querySelector(`[data-action="savePrompt"]`)?.addEventListener(`click`,wt),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&!n.isRecording&&T()}),document.querySelector(`[data-action="openTemplates"]`)?.addEventListener(`click`,At),document.querySelector(`[data-action="saveTemplate"]`)?.addEventListener(`click`,Pt),document.querySelector(`[data-action="closeTemplate"]`)?.addEventListener(`click`,()=>Nt()),document.getElementById(`templateModal`)?.addEventListener(`click`,e=>Nt(e)),document.querySelector(`#templateModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.getElementById(`templateBack`)?.addEventListener(`click`,Lt),document.getElementById(`templateDevToggle`)?.addEventListener(`click`,Tt);var{openPiSettingsModal:fi,closePiSettingsModal:pi,registerPiProfile:mi,onPiModeChange:hi,syncPiModelDropdown:gi,getCachedPi:_i}=await d(async()=>{let{openPiSettingsModal:e,closePiSettingsModal:t,registerPiProfile:n,onPiModeChange:r,syncPiModelDropdown:i,getCachedPi:a}=await import(`./pi-settings-5HVg1sXJ.js`);return{openPiSettingsModal:e,closePiSettingsModal:t,registerPiProfile:n,onPiModeChange:r,syncPiModelDropdown:i,getCachedPi:a}},[]);document.getElementById(`btnPiSettings`)?.addEventListener(`click`,fi),document.getElementById(`piSettingsModal`)?.addEventListener(`click`,e=>{e.target===e.currentTarget&&pi()}),document.querySelector(`#piSettingsModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closePiSettings"]`)?.addEventListener(`click`,pi),document.getElementById(`btnPiRegister`)?.addEventListener(`click`,()=>void mi()),document.getElementById(`piMode`)?.addEventListener(`change`,hi),document.getElementById(`providerPi`)?.addEventListener(`change`,async()=>{let e=document.getElementById(`providerPi`);if(e?.value){gi(e.value,_i());let{savePerCli:t}=await d(async()=>{let{savePerCli:e}=await import(`./settings-core-B_OjGYVN.js`);return{savePerCli:e}},__vite__mapDeps([0]));await t()}}),document.getElementById(`heartbeatModal`)?.addEventListener(`click`,e=>Rn(e)),document.querySelector(`#heartbeatModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closeHeartbeat"]`)?.addEventListener(`click`,()=>Rn()),document.querySelector(`[data-action="addHeartbeat"]`)?.addEventListener(`click`,zn),document.getElementById(`hbJobsList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-hb-toggle]`);if(t){Vn(+(t.dataset.hbToggle||`0`));return}let n=e.target?.closest(`[data-hb-remove]`);if(n){Bn(+(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,N();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}:{}},M(),N();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}:{}},M(),N();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}:{}},M(),N();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()}:{}},M(),N();return}let c=t.closest(`[data-hb-prompt]`);if(c){n.heartbeatJobs[+(c.dataset.hbPrompt||`0`)].prompt=t.value,N();return}}),document.getElementById(`memoryModal`)?.addEventListener(`click`,e=>Zt(e)),document.querySelector(`#memoryModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closeMemory"]`)?.addEventListener(`click`,()=>Zt()),document.getElementById(`memTabBtnSettings`)?.addEventListener(`click`,()=>Qt(`settings`)),document.getElementById(`memTabBtnAdvOps`)?.addEventListener(`click`,()=>Qt(`status`)),document.getElementById(`memTabBtnFiles`)?.addEventListener(`click`,()=>Qt(`files`)),document.getElementById(`memOn`)?.addEventListener(`click`,()=>Wt(!0)),document.getElementById(`memOff`)?.addEventListener(`click`,()=>Wt(!1)),document.getElementById(`memFlushEvery`)?.addEventListener(`change`,Bt),document.getElementById(`memRetention`)?.addEventListener(`change`,Bt),document.getElementById(`memFlushLang`)?.addEventListener(`change`,Bt),document.getElementById(`memFlushNowBtn`)?.addEventListener(`click`,Ht),document.getElementById(`advBootstrapBtn`)?.addEventListener(`click`,Xt),document.getElementById(`advReindexBtn`)?.addEventListener(`click`,qt),document.getElementById(`advReimportBtn`)?.addEventListener(`click`,Xt),document.getElementById(`advOpenCorruptedBtn`)?.addEventListener(`click`,Yt),document.getElementById(`advStatusBanner`)?.addEventListener(`click`,e=>{e.target?.id===`advUpgradeSoulBtn`&&Jt(),e.target?.id===`advSynthesizeSoulBtn`&&Vt()}),document.getElementById(`basicMemoryFiles`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-mem-delete]`);if(t){e.stopPropagation(),Kt(t.dataset.memDelete||``);return}let n=e.target?.closest(`[data-mem-view]`);if(n){Gt(n.dataset.memView||``);return}if(e.target?.closest(`[data-mem-back]`)){Ut();return}});async function vi(){se(),bt(),$n(),or(),Se(),Ce(),await fe();let e=await ge({cancelRecording:Ar});if(e===`redirect`)return;ee(xe);let t=document.getElementById(`langSelect`);if(t&&(t.value=de()),Ie(),e===`hub`){oe(),c();return}if(Lr(),Yr(),document.getElementById(`chatSearchTrigger`)?.addEventListener(`click`,Rr),oe(),c(),await We(),di(),Tn(),wn(),await Fe(),await it(),ct(),kt(),Et(),Rt(),Dt()&&Mt(),ae(),Qr(),Hn(),zt(),Oe(),await De(),je(),fr(),window.location.hash===`#settings`){let e=document.getElementById(`tabBtnSettings`);e&&Me(`settings`,e)}try{sessionStorage.removeItem(Xr)}catch{}setTimeout(()=>{document.querySelector(`.mermaid-pending, [data-mermaid-code-raw], .diagram-widget-pending`)&&ce()},3e3),`serviceWorker`in navigator&&!Ft()&&navigator.serviceWorker.register(`/sw.js`).catch(()=>{})}vi().catch(e=>{console.error(`[bootstrap]`,e)}),document.addEventListener(`keydown`,e=>{(e.ctrlKey||e.metaKey)&&e.key===`f`&&(e.preventDefault(),e.stopPropagation(),Rr())},!0),document.addEventListener(`keydown`,e=>{if(e.key===`Escape`){if(document.getElementById(`chatSearch`)?.classList.contains(`open`)){e.preventDefault(),Z();return}if(n.isRecording){e.preventDefault(),Ar();return}document.querySelectorAll(`.modal-overlay.open`).forEach(e=>{e.classList.remove(`open`)})}ii(e)&&(e.preventDefault(),jr())}),document.getElementById(`mobileMenuLeft`)?.addEventListener(`click`,re),document.getElementById(`mobileMenuRight`)?.addEventListener(`click`,te);
55
+ </div></div>`,document.body.appendChild(e);let t=``,n=()=>e.classList.add(`hidden`),r=()=>{t&&window.open(t,`_blank`)};e.querySelector(`.media-lightbox-backdrop`).addEventListener(`click`,n),e.querySelector(`.media-lightbox-close`).addEventListener(`click`,n),e.querySelector(`.media-lightbox-open`).addEventListener(`click`,r),e.querySelector(`.media-lightbox-img`).addEventListener(`dblclick`,r),document.addEventListener(`keydown`,t=>{t.key===`Escape`&&!e.classList.contains(`hidden`)&&n()}),document.addEventListener(`click`,n=>{let r=n.target;(r.classList.contains(`chat-inline-img`)||r.closest(`.file-preview-list`)&&r.tagName===`IMG`)&&(t=r.src,e.querySelector(`.media-lightbox-img`).src=t,e.classList.remove(`hidden`))})}var Xr=`jaw:stale-bundle-reload-pending`;function Zr(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(Xr)===`1`)return!0;sessionStorage.setItem(Xr,`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(Zr(e.reason)){e.preventDefault();return}console.error(`[unhandled]`,e.reason),e.preventDefault()}),window.addEventListener(`error`,e=>{if(Zr(e.error||e.message)){e.preventDefault();return}console.error(`[error]`,e.message,e.filename,e.lineno)});var{loadEmployees:Qr,addEmployee:$r,deleteEmployee:ei,updateEmployee:Q,onEmpCliChange:ti,onEmpRoleChange:ni}=await d(async()=>{let{loadEmployees:e,addEmployee:t,deleteEmployee:n,updateEmployee:r,onEmpCliChange:i,onEmpRoleChange:a}=await import(`./employees-B_wKPfTO.js`);return{loadEmployees:e,addEmployee:t,deleteEmployee:n,updateEmployee:r,onEmpCliChange:i,onEmpRoleChange:a}},__vite__mapDeps([0]));function ri(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 ii(e){let t=(e.ctrlKey||e.metaKey)&&e.shiftKey&&e.code===`Space`,n=e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey&&e.code===`KeyM`;return t||n}document.getElementById(`btnSend`)?.addEventListener(`click`,()=>{gn(`button`)});var ai=document.getElementById(`chatInput`);ai?.addEventListener(`keydown`,e=>{Be(e)||_n(e)});var $=0;ai?.addEventListener(`input`,e=>{e.isComposing||($&&cancelAnimationFrame($),$=requestAnimationFrame(()=>{ze(e.target?.value||``),$=0}))}),ai?.addEventListener(`cmd-execute`,()=>{gn(`cmd-execute`)}),document.getElementById(`cmdDropdown`)?.addEventListener(`click`,Re),document.addEventListener(`click`,Le),u(),$t(),document.getElementById(`filePreviewClear`)?.addEventListener(`click`,D),document.getElementById(`filePreviewList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-file-idx]`);t&&bn(+(t.dataset.fileIdx||`0`))}),document.querySelector(`.btn-attach`)?.addEventListener(`click`,()=>{document.getElementById(`fileInput`)?.click()}),document.getElementById(`btnVoice`)?.addEventListener(`click`,()=>jr()),document.getElementById(`btnVoiceCancel`)?.addEventListener(`click`,()=>Ar()),window.addEventListener(`message`,e=>{if(window.parent===window||e.source!==window.parent||!ri(e.origin))return;let t=e.data;!t||t.type!==`jaw-preview-stt-toggle`||jr()}),document.getElementById(`memorySidebarBtn`)?.addEventListener(`click`,Ut),document.getElementById(`btnClearChat`)?.addEventListener(`click`,xn),document.getElementById(`hbSidebarBtn`)?.addEventListener(`click`,Ln),document.getElementById(`langSelect`)?.addEventListener(`change`,async e=>{let t=e.target.value;[`ko`,`en`,`zh`,`ja`].includes(t)&&(await pe(t),ie())}),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]&&Me(r[n],t)}),document.querySelector(`.sidebar-save-bar .btn-save`)?.addEventListener(`click`,Ne);function oi(e){let t=(e instanceof HTMLSelectElement?e:document.getElementById(`selCliProvider`))?.value||``,n=document.getElementById(`providerAiE`);!t||!n||Array.from(n.options).some(e=>e.value===t)&&(n.value=t)}document.getElementById(`selCli`)?.addEventListener(`change`,()=>ft()),document.getElementById(`selCliProvider`)?.addEventListener(`change`,e=>{oi(e.target),ft(),C()}),document.getElementById(`selModel`)?.addEventListener(`change`,()=>C()),document.getElementById(`selEffort`)?.addEventListener(`change`,()=>C()),document.getElementById(`flushCli`)?.addEventListener(`change`,()=>mt()),document.getElementById(`flushModel`)?.addEventListener(`change`,()=>mt()),document.querySelector(`[data-action="addEmployee"]`)?.addEventListener(`click`,$r),document.getElementById(`employeesList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-emp-delete]`);if(t){ei(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){ti(r.dataset.empCli||``,t.value);return}let i=t.closest(`[data-emp-model]`);if(i){if(t.value===`__custom__`){let e=prompt(m(`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){ni(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&&xt(t.dataset.skillId||``,t.dataset.skillEnabled===`true`)}),document.querySelector(`#tabSkills`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`.skill-filter`);t&&Ct(t.dataset.filter||`all`,t)}),document.getElementById(`skillSearchInput`)?.addEventListener(`input`,e=>{St(e.target.value)}),document.querySelector(`[data-action="openPrompt"]`)?.addEventListener(`click`,It),document.getElementById(`tgOff`)?.addEventListener(`click`,()=>Ze(!1)),document.getElementById(`tgOn`)?.addEventListener(`click`,()=>Ze(!0)),document.getElementById(`tgForwardOff`)?.addEventListener(`click`,()=>Xe(!1)),document.getElementById(`tgForwardOn`)?.addEventListener(`click`,()=>Xe(!0)),document.getElementById(`tgMentionOff`)?.addEventListener(`click`,()=>nt(!1)),document.getElementById(`tgMentionOn`)?.addEventListener(`click`,()=>nt(!0)),document.getElementById(`tgToken`)?.addEventListener(`change`,Ye),document.getElementById(`tgChatIds`)?.addEventListener(`change`,Ye),document.getElementById(`chTelegram`)?.addEventListener(`click`,()=>x(`telegram`)),document.getElementById(`chDiscord`)?.addEventListener(`click`,()=>x(`discord`)),document.getElementById(`dcOff`)?.addEventListener(`click`,()=>lt(!1)),document.getElementById(`dcOn`)?.addEventListener(`click`,()=>lt(!0)),document.getElementById(`dcForwardOff`)?.addEventListener(`click`,()=>$e(!1)),document.getElementById(`dcForwardOn`)?.addEventListener(`click`,()=>$e(!0)),document.getElementById(`dcAllowBotsOff`)?.addEventListener(`click`,()=>Qe(!1)),document.getElementById(`dcAllowBotsOn`)?.addEventListener(`click`,()=>Qe(!0)),document.getElementById(`dcMentionOff`)?.addEventListener(`click`,()=>tt(!1)),document.getElementById(`dcMentionOn`)?.addEventListener(`click`,()=>tt(!0)),document.getElementById(`dcToken`)?.addEventListener(`change`,Ge),document.getElementById(`dcGuildId`)?.addEventListener(`change`,Ge),document.getElementById(`dcChannelIds`)?.addEventListener(`change`,Ge),document.getElementById(`chSlack`)?.addEventListener(`click`,()=>x(`slack`)),document.getElementById(`slOff`)?.addEventListener(`click`,()=>rt(!1)),document.getElementById(`slOn`)?.addEventListener(`click`,()=>rt(!0)),document.getElementById(`slForwardOff`)?.addEventListener(`click`,()=>qe(!1)),document.getElementById(`slForwardOn`)?.addEventListener(`click`,()=>qe(!0)),document.getElementById(`slAllowBotsOff`)?.addEventListener(`click`,()=>Je(!1)),document.getElementById(`slAllowBotsOn`)?.addEventListener(`click`,()=>Je(!0)),document.getElementById(`slMentionOff`)?.addEventListener(`click`,()=>et(!1)),document.getElementById(`slMentionOn`)?.addEventListener(`click`,()=>et(!0)),document.getElementById(`slThreadOff`)?.addEventListener(`click`,()=>ut(!1)),document.getElementById(`slThreadOn`)?.addEventListener(`click`,()=>ut(!0)),document.getElementById(`slBotToken`)?.addEventListener(`change`,w),document.getElementById(`slAppToken`)?.addEventListener(`change`,w),document.getElementById(`slTeamId`)?.addEventListener(`change`,w),document.getElementById(`slChannelIds`)?.addEventListener(`change`,w),document.getElementById(`slAttachPort`)?.addEventListener(`change`,w),yt(),Ke(),document.getElementById(`fallbackOrderList`)?.addEventListener(`change`,_t);function si(e){let t=document.getElementById(`codexFastOn`),n=document.getElementById(`codexFastOff`);t&&n&&(t.classList.toggle(`active`,e),n.classList.toggle(`active`,!e)),S()}document.getElementById(`codexFastOn`)?.addEventListener(`click`,()=>si(!0)),document.getElementById(`codexFastOff`)?.addEventListener(`click`,()=>si(!1));function ci(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`),S()}document.getElementById(`codexCtxOn`)?.addEventListener(`click`,()=>ci(!0)),document.getElementById(`codexCtxOff`)?.addEventListener(`click`,()=>ci(!1)),document.getElementById(`codexCtxWindow`)?.addEventListener(`change`,S),document.getElementById(`codexCtxCompact`)?.addEventListener(`change`,S);function li(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)),S()}document.getElementById(`claude1mOn`)?.addEventListener(`click`,()=>li(!0)),document.getElementById(`claude1mOff`)?.addEventListener(`click`,()=>li(!1));function ui(e){return e.split(/[^a-zA-Z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function di(){for(let e of Ue()){let t=ui(e),n=document.getElementById(`model`+t);n&&n.addEventListener(`change`,function(){pt(e,this)});let r=document.getElementById(`customModel`+t);r&&r.addEventListener(`change`,function(){ht(e,this)});let i=document.getElementById(`effort`+t);i&&i.addEventListener(`change`,S)}document.getElementById(`providerAiE`)?.addEventListener(`change`,at)}document.querySelector(`[data-action="openMcpModal"]`)?.addEventListener(`click`,gt),document.querySelector(`[data-action="syncMcp"]`)?.addEventListener(`click`,vt),document.querySelector(`[data-action="installMcp"]`)?.addEventListener(`click`,ot),st(),document.querySelector(`[data-action="refreshCli"]`)?.addEventListener(`click`,()=>{Dt()?Mt(!0):jt()}),document.getElementById(`cliStatusInterval`)?.addEventListener(`change`,function(){Ot(this.value)}),document.getElementById(`promptModal`)?.addEventListener(`click`,e=>T(e)),document.querySelector(`#promptModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closePrompt"]`)?.addEventListener(`click`,()=>T()),document.querySelector(`[data-action="cancelPrompt"]`)?.addEventListener(`click`,()=>T()),document.querySelector(`[data-action="savePrompt"]`)?.addEventListener(`click`,wt),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&!n.isRecording&&T()}),document.querySelector(`[data-action="openTemplates"]`)?.addEventListener(`click`,At),document.querySelector(`[data-action="saveTemplate"]`)?.addEventListener(`click`,Pt),document.querySelector(`[data-action="closeTemplate"]`)?.addEventListener(`click`,()=>Nt()),document.getElementById(`templateModal`)?.addEventListener(`click`,e=>Nt(e)),document.querySelector(`#templateModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.getElementById(`templateBack`)?.addEventListener(`click`,Lt),document.getElementById(`templateDevToggle`)?.addEventListener(`click`,Tt);var{openPiSettingsModal:fi,closePiSettingsModal:pi,registerPiProfile:mi,onPiModeChange:hi,syncPiModelDropdown:gi,getCachedPi:_i}=await d(async()=>{let{openPiSettingsModal:e,closePiSettingsModal:t,registerPiProfile:n,onPiModeChange:r,syncPiModelDropdown:i,getCachedPi:a}=await import(`./pi-settings-5HVg1sXJ.js`);return{openPiSettingsModal:e,closePiSettingsModal:t,registerPiProfile:n,onPiModeChange:r,syncPiModelDropdown:i,getCachedPi:a}},[]);document.getElementById(`btnPiSettings`)?.addEventListener(`click`,fi),document.getElementById(`piSettingsModal`)?.addEventListener(`click`,e=>{e.target===e.currentTarget&&pi()}),document.querySelector(`#piSettingsModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closePiSettings"]`)?.addEventListener(`click`,pi),document.getElementById(`btnPiRegister`)?.addEventListener(`click`,()=>void mi()),document.getElementById(`piMode`)?.addEventListener(`change`,hi),document.getElementById(`providerPi`)?.addEventListener(`change`,async()=>{let e=document.getElementById(`providerPi`);if(e?.value){gi(e.value,_i());let{savePerCli:t}=await d(async()=>{let{savePerCli:e}=await import(`./settings-core-X_5UHfr3.js`);return{savePerCli:e}},__vite__mapDeps([0]));await t()}}),document.getElementById(`heartbeatModal`)?.addEventListener(`click`,e=>Rn(e)),document.querySelector(`#heartbeatModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closeHeartbeat"]`)?.addEventListener(`click`,()=>Rn()),document.querySelector(`[data-action="addHeartbeat"]`)?.addEventListener(`click`,zn),document.getElementById(`hbJobsList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-hb-toggle]`);if(t){Vn(+(t.dataset.hbToggle||`0`));return}let n=e.target?.closest(`[data-hb-remove]`);if(n){Bn(+(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,N();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}:{}},M(),N();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}:{}},M(),N();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}:{}},M(),N();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()}:{}},M(),N();return}let c=t.closest(`[data-hb-prompt]`);if(c){n.heartbeatJobs[+(c.dataset.hbPrompt||`0`)].prompt=t.value,N();return}}),document.getElementById(`memoryModal`)?.addEventListener(`click`,e=>Zt(e)),document.querySelector(`#memoryModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closeMemory"]`)?.addEventListener(`click`,()=>Zt()),document.getElementById(`memTabBtnSettings`)?.addEventListener(`click`,()=>Qt(`settings`)),document.getElementById(`memTabBtnAdvOps`)?.addEventListener(`click`,()=>Qt(`status`)),document.getElementById(`memTabBtnFiles`)?.addEventListener(`click`,()=>Qt(`files`)),document.getElementById(`memOn`)?.addEventListener(`click`,()=>Wt(!0)),document.getElementById(`memOff`)?.addEventListener(`click`,()=>Wt(!1)),document.getElementById(`memFlushEvery`)?.addEventListener(`change`,Bt),document.getElementById(`memRetention`)?.addEventListener(`change`,Bt),document.getElementById(`memFlushLang`)?.addEventListener(`change`,Bt),document.getElementById(`memFlushNowBtn`)?.addEventListener(`click`,Ht),document.getElementById(`advBootstrapBtn`)?.addEventListener(`click`,Xt),document.getElementById(`advReindexBtn`)?.addEventListener(`click`,qt),document.getElementById(`advReimportBtn`)?.addEventListener(`click`,Xt),document.getElementById(`advOpenCorruptedBtn`)?.addEventListener(`click`,Yt),document.getElementById(`advStatusBanner`)?.addEventListener(`click`,e=>{e.target?.id===`advUpgradeSoulBtn`&&Jt(),e.target?.id===`advSynthesizeSoulBtn`&&Vt()}),document.getElementById(`basicMemoryFiles`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-mem-delete]`);if(t){e.stopPropagation(),Kt(t.dataset.memDelete||``);return}let n=e.target?.closest(`[data-mem-view]`);if(n){Gt(n.dataset.memView||``);return}if(e.target?.closest(`[data-mem-back]`)){Ut();return}});async function vi(){se(),bt(),$n(),or(),Se(),Ce(),await fe();let e=await ge({cancelRecording:Ar});if(e===`redirect`)return;ee(xe);let t=document.getElementById(`langSelect`);if(t&&(t.value=de()),Ie(),e===`hub`){oe(),c();return}if(Lr(),Yr(),document.getElementById(`chatSearchTrigger`)?.addEventListener(`click`,Rr),oe(),c(),await We(),di(),Tn(),wn(),await Fe(),await it(),ct(),kt(),Et(),Rt(),Dt()&&Mt(),ae(),Qr(),Hn(),zt(),Oe(),await De(),je(),fr(),window.location.hash===`#settings`){let e=document.getElementById(`tabBtnSettings`);e&&Me(`settings`,e)}try{sessionStorage.removeItem(Xr)}catch{}setTimeout(()=>{document.querySelector(`.mermaid-pending, [data-mermaid-code-raw], .diagram-widget-pending`)&&ce()},3e3),`serviceWorker`in navigator&&!Ft()&&navigator.serviceWorker.register(`/sw.js`).catch(()=>{})}vi().catch(e=>{console.error(`[bootstrap]`,e)}),document.addEventListener(`keydown`,e=>{(e.ctrlKey||e.metaKey)&&e.key===`f`&&(e.preventDefault(),e.stopPropagation(),Rr())},!0),document.addEventListener(`keydown`,e=>{if(e.key===`Escape`){if(document.getElementById(`chatSearch`)?.classList.contains(`open`)){e.preventDefault(),Z();return}if(n.isRecording){e.preventDefault(),Ar();return}document.querySelectorAll(`.modal-overlay.open`).forEach(e=>{e.classList.remove(`open`)})}ii(e)&&(e.preventDefault(),jr())}),document.getElementById(`mobileMenuLeft`)?.addEventListener(`click`,re),document.getElementById(`mobileMenuRight`)?.addEventListener(`click`,te);