cli-jaw 2.1.2 → 2.1.3

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 (251) hide show
  1. package/README.md +6 -5
  2. package/dist/bin/cli-jaw.js +14 -2
  3. package/dist/bin/cli-jaw.js.map +1 -1
  4. package/dist/bin/commands/chat-search.js +71 -0
  5. package/dist/bin/commands/chat-search.js.map +1 -0
  6. package/dist/bin/commands/goal.js +48 -3
  7. package/dist/bin/commands/goal.js.map +1 -1
  8. package/dist/bin/commands/history.js +61 -0
  9. package/dist/bin/commands/history.js.map +1 -0
  10. package/dist/bin/commands/lock.js +104 -0
  11. package/dist/bin/commands/lock.js.map +1 -0
  12. package/dist/bin/commands/memory.js +23 -2
  13. package/dist/bin/commands/memory.js.map +1 -1
  14. package/dist/bin/commands/project.js +4 -1
  15. package/dist/bin/commands/project.js.map +1 -1
  16. package/dist/bin/commands/tui/simple-mode.js +0 -1
  17. package/dist/bin/commands/tui/simple-mode.js.map +1 -1
  18. package/dist/lib/upload.js +7 -0
  19. package/dist/lib/upload.js.map +1 -1
  20. package/dist/server.js +127 -19
  21. package/dist/server.js.map +1 -1
  22. package/dist/src/agent/agy-runtime.js +1 -0
  23. package/dist/src/agent/agy-runtime.js.map +1 -1
  24. package/dist/src/agent/agy-transcript-watcher.js +78 -0
  25. package/dist/src/agent/agy-transcript-watcher.js.map +1 -0
  26. package/dist/src/agent/agy-transcript.js +158 -0
  27. package/dist/src/agent/agy-transcript.js.map +1 -0
  28. package/dist/src/agent/args.js +18 -4
  29. package/dist/src/agent/args.js.map +1 -1
  30. package/dist/src/agent/codex-app-client.js +1 -1
  31. package/dist/src/agent/codex-app-client.js.map +1 -1
  32. package/dist/src/agent/cursor-runtime.js +1 -0
  33. package/dist/src/agent/cursor-runtime.js.map +1 -1
  34. package/dist/src/agent/kiro-runtime.js +11 -3
  35. package/dist/src/agent/kiro-runtime.js.map +1 -1
  36. package/dist/src/agent/lifecycle-handler.js +18 -11
  37. package/dist/src/agent/lifecycle-handler.js.map +1 -1
  38. package/dist/src/agent/memory-flush-controller.js +2 -1
  39. package/dist/src/agent/memory-flush-controller.js.map +1 -1
  40. package/dist/src/agent/session-persistence.js +2 -2
  41. package/dist/src/agent/session-persistence.js.map +1 -1
  42. package/dist/src/agent/spawn/queue.js +1 -1
  43. package/dist/src/agent/spawn/queue.js.map +1 -1
  44. package/dist/src/agent/spawn-env.js +1 -1
  45. package/dist/src/agent/spawn-env.js.map +1 -1
  46. package/dist/src/agent/spawn.js +76 -48
  47. package/dist/src/agent/spawn.js.map +1 -1
  48. package/dist/src/agent/watchdog.js +1 -1
  49. package/dist/src/agent/watchdog.js.map +1 -1
  50. package/dist/src/browser/actions.js +0 -8
  51. package/dist/src/browser/actions.js.map +1 -1
  52. package/dist/src/browser/adaptive-fetch/browser-escalation.js +5 -29
  53. package/dist/src/browser/adaptive-fetch/browser-escalation.js.map +1 -1
  54. package/dist/src/browser/adaptive-fetch/browser-runtime.js +5 -14
  55. package/dist/src/browser/adaptive-fetch/browser-runtime.js.map +1 -1
  56. package/dist/src/browser/adaptive-fetch/browser-session.js +14 -28
  57. package/dist/src/browser/adaptive-fetch/browser-session.js.map +1 -1
  58. package/dist/src/browser/adaptive-fetch/challenge-detector.js +4 -26
  59. package/dist/src/browser/adaptive-fetch/challenge-detector.js.map +1 -1
  60. package/dist/src/browser/adaptive-fetch/content-scorer.js +5 -29
  61. package/dist/src/browser/adaptive-fetch/content-scorer.js.map +1 -1
  62. package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js +0 -64
  63. package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js.map +1 -1
  64. package/dist/src/browser/adaptive-fetch/fetcher.js +4 -19
  65. package/dist/src/browser/adaptive-fetch/fetcher.js.map +1 -1
  66. package/dist/src/browser/adaptive-fetch/human-loop.js +0 -26
  67. package/dist/src/browser/adaptive-fetch/human-loop.js.map +1 -1
  68. package/dist/src/browser/adaptive-fetch/index.js +74 -145
  69. package/dist/src/browser/adaptive-fetch/index.js.map +1 -1
  70. package/dist/src/browser/adaptive-fetch/metadata.js +1 -41
  71. package/dist/src/browser/adaptive-fetch/metadata.js.map +1 -1
  72. package/dist/src/browser/adaptive-fetch/output.js +1 -18
  73. package/dist/src/browser/adaptive-fetch/output.js.map +1 -1
  74. package/dist/src/browser/adaptive-fetch/reader-adapters.js +43 -75
  75. package/dist/src/browser/adaptive-fetch/reader-adapters.js.map +1 -1
  76. package/dist/src/browser/adaptive-fetch/safety.js +5 -48
  77. package/dist/src/browser/adaptive-fetch/safety.js.map +1 -1
  78. package/dist/src/browser/adaptive-fetch/third-party-readers.js +0 -11
  79. package/dist/src/browser/adaptive-fetch/third-party-readers.js.map +1 -1
  80. package/dist/src/browser/adaptive-fetch/trace.js +3 -18
  81. package/dist/src/browser/adaptive-fetch/trace.js.map +1 -1
  82. package/dist/src/browser/adaptive-fetch/transforms.js +0 -23
  83. package/dist/src/browser/adaptive-fetch/transforms.js.map +1 -1
  84. package/dist/src/browser/adaptive-fetch/types.js +3 -0
  85. package/dist/src/browser/adaptive-fetch/types.js.map +1 -0
  86. package/dist/src/browser/adaptive-fetch/validators.js +0 -17
  87. package/dist/src/browser/adaptive-fetch/validators.js.map +1 -1
  88. package/dist/src/browser/adaptive-fetch/waf-profiles.js +0 -10
  89. package/dist/src/browser/adaptive-fetch/waf-profiles.js.map +1 -1
  90. package/dist/src/browser/connection.js +1 -1
  91. package/dist/src/browser/connection.js.map +1 -1
  92. package/dist/src/browser/web-ai/chatgpt-response.js +0 -1
  93. package/dist/src/browser/web-ai/chatgpt-response.js.map +1 -1
  94. package/dist/src/browser/web-ai/chatgpt.js +0 -33
  95. package/dist/src/browser/web-ai/chatgpt.js.map +1 -1
  96. package/dist/src/browser/web-ai/diagnostics.js +0 -16
  97. package/dist/src/browser/web-ai/diagnostics.js.map +1 -1
  98. package/dist/src/browser/web-ai/doctor.js.map +1 -1
  99. package/dist/src/browser/web-ai/errors.js +1 -1
  100. package/dist/src/browser/web-ai/errors.js.map +1 -1
  101. package/dist/src/cli/command-context.js.map +1 -1
  102. package/dist/src/cli/commands.js +13 -2
  103. package/dist/src/cli/commands.js.map +1 -1
  104. package/dist/src/cli/compact.js +2 -1
  105. package/dist/src/cli/compact.js.map +1 -1
  106. package/dist/src/cli/handlers/session-handlers.js +34 -0
  107. package/dist/src/cli/handlers/session-handlers.js.map +1 -0
  108. package/dist/src/cli/handlers-project.js.map +1 -1
  109. package/dist/src/cli/handlers-workflows.js +76 -13
  110. package/dist/src/cli/handlers-workflows.js.map +1 -1
  111. package/dist/src/cli/handlers.js +37 -36
  112. package/dist/src/cli/handlers.js.map +1 -1
  113. package/dist/src/cli/registry.js +7 -7
  114. package/dist/src/cli/registry.js.map +1 -1
  115. package/dist/src/core/chat-sessions.js +63 -0
  116. package/dist/src/core/chat-sessions.js.map +1 -0
  117. package/dist/src/core/compact.js +43 -11
  118. package/dist/src/core/compact.js.map +1 -1
  119. package/dist/src/core/config.js +9 -1
  120. package/dist/src/core/config.js.map +1 -1
  121. package/dist/src/core/db.js +48 -15
  122. package/dist/src/core/db.js.map +1 -1
  123. package/dist/src/core/main-session.js +3 -2
  124. package/dist/src/core/main-session.js.map +1 -1
  125. package/dist/src/goal/heartbeat.js +88 -5
  126. package/dist/src/goal/heartbeat.js.map +1 -1
  127. package/dist/src/goal/store.js +38 -3
  128. package/dist/src/goal/store.js.map +1 -1
  129. package/dist/src/manager/lifecycle-store.js.map +1 -1
  130. package/dist/src/manager/lifecycle.js +45 -1
  131. package/dist/src/manager/lifecycle.js.map +1 -1
  132. package/dist/src/manager/preview-link-policy.js +11 -4
  133. package/dist/src/manager/preview-link-policy.js.map +1 -1
  134. package/dist/src/manager/server.js +25 -9
  135. package/dist/src/manager/server.js.map +1 -1
  136. package/dist/src/manager/shutdown.js +8 -3
  137. package/dist/src/manager/shutdown.js.map +1 -1
  138. package/dist/src/memory/indexing.js +49 -1
  139. package/dist/src/memory/indexing.js.map +1 -1
  140. package/dist/src/memory/runtime.js +2 -1
  141. package/dist/src/memory/runtime.js.map +1 -1
  142. package/dist/src/messaging/send.js +66 -7
  143. package/dist/src/messaging/send.js.map +1 -1
  144. package/dist/src/orchestrator/distribute.js +2 -2
  145. package/dist/src/orchestrator/gateway.js +4 -4
  146. package/dist/src/orchestrator/gateway.js.map +1 -1
  147. package/dist/src/orchestrator/pipeline.js +2 -1
  148. package/dist/src/orchestrator/pipeline.js.map +1 -1
  149. package/dist/src/orchestrator/sanitize.js +57 -7
  150. package/dist/src/orchestrator/sanitize.js.map +1 -1
  151. package/dist/src/orchestrator/state-machine.js +15 -8
  152. package/dist/src/orchestrator/state-machine.js.map +1 -1
  153. package/dist/src/prompt/builder.js +171 -86
  154. package/dist/src/prompt/builder.js.map +1 -1
  155. package/dist/src/prompt/templates/a1-system.md +94 -66
  156. package/dist/src/prompt/templates/employee.md +41 -59
  157. package/dist/src/prompt/templates/skills.md +6 -0
  158. package/dist/src/routes/browser.js +3 -3
  159. package/dist/src/routes/browser.js.map +1 -1
  160. package/dist/src/routes/goal.js +38 -2
  161. package/dist/src/routes/goal.js.map +1 -1
  162. package/dist/src/routes/messaging.js +8 -3
  163. package/dist/src/routes/messaging.js.map +1 -1
  164. package/dist/src/routes/orchestrate.js +3 -2
  165. package/dist/src/routes/orchestrate.js.map +1 -1
  166. package/dist/src/routes/quota-agy-reverse.js +6 -0
  167. package/dist/src/routes/quota-agy-reverse.js.map +1 -1
  168. package/dist/src/routes/quota.js +68 -6
  169. package/dist/src/routes/quota.js.map +1 -1
  170. package/dist/src/routes/settings.js +6 -6
  171. package/dist/src/routes/settings.js.map +1 -1
  172. package/dist/src/security/path-guards.js +0 -3
  173. package/dist/src/security/path-guards.js.map +1 -1
  174. package/dist/src/workflows/scope-sandbox.js +17 -5
  175. package/dist/src/workflows/scope-sandbox.js.map +1 -1
  176. package/package.json +1 -1
  177. package/public/css/chat.css +27 -0
  178. package/public/css/orc-state.css +10 -6
  179. package/public/css/variables.css +4 -0
  180. package/public/dist/assets/{Agent-DkH7eoHd.js → Agent-DBKNQ6tp.js} +1 -1
  181. package/public/dist/assets/{FolderPanel-DSkanaGN.js → FolderPanel-DT0fU8f2.js} +1 -1
  182. package/public/dist/assets/{Heartbeat-C3JS6gkF.js → Heartbeat-fsuLzY9c.js} +1 -1
  183. package/public/dist/assets/{Memory-C-EQubN2.js → Memory-CRR8kotI.js} +1 -1
  184. package/public/dist/assets/{ModelProvider-BD2KrypI.js → ModelProvider-DQgISbKw.js} +1 -1
  185. package/public/dist/assets/agent-meta-C4mauPL5.js +1 -0
  186. package/public/dist/assets/app-0OQhPpTG.css +1 -0
  187. package/public/dist/assets/app-CSqIyg9A.js +55 -0
  188. package/public/dist/assets/constants-BHMkzpN_.js +1 -0
  189. package/public/dist/assets/{employees-_A-p_bZg.js → employees-CZdWHH-r.js} +1 -1
  190. package/public/dist/assets/manager-CGTQ5EIm.js +12 -0
  191. package/public/dist/assets/manager-UBunDqMH.css +1 -0
  192. package/public/dist/assets/{memory-D9AUn8fG.js → memory-B3QSmj_e.js} +1 -1
  193. package/public/dist/assets/memory-DOBqiuPc.js +1 -0
  194. package/public/dist/assets/render-J11oxfnl.js +28 -0
  195. package/public/dist/assets/settings-BV_2Bh0_.js +1 -0
  196. package/public/dist/assets/settings-m_cim0ov.js +151 -0
  197. package/public/dist/assets/sidebar-ZBXdBgF7.js +49 -0
  198. package/public/dist/assets/{skills-BDVLIrVT.js → skills-CjaBmIPV.js} +1 -1
  199. package/public/dist/assets/skills-Xm3fl1zr.js +1 -0
  200. package/public/dist/assets/{slash-commands-C5da3q1p.js → slash-commands-71jc07Wf.js} +1 -1
  201. package/public/dist/assets/slash-commands-BO6ssnAz.js +1 -0
  202. package/public/dist/assets/{trace-drawer-5kqBzFMk.js → trace-drawer-Czvf2P2o.js} +1 -1
  203. package/public/dist/assets/ui-CverZJnd.js +1 -0
  204. package/public/dist/assets/ui-qKxy-4p9.js +142 -0
  205. package/public/dist/index.html +2 -2
  206. package/public/dist/manager/index.html +2 -2
  207. package/public/js/constants.ts +4 -4
  208. package/public/js/features/chat-messages.ts +13 -2
  209. package/public/js/features/chat.ts +86 -44
  210. package/public/js/features/media-lightbox.ts +40 -0
  211. package/public/js/features/pending-queue.ts +20 -2
  212. package/public/js/features/settings-cli-status-render.ts +2 -4
  213. package/public/js/features/settings-cli-status.ts +6 -2
  214. package/public/js/features/settings-types.ts +1 -0
  215. package/public/js/features/ui-status.ts +5 -1
  216. package/public/js/main.ts +2 -0
  217. package/public/js/render/markdown.ts +16 -0
  218. package/public/js/ui.ts +8 -4
  219. package/public/js/ws.ts +27 -16
  220. package/public/locales/en.json +1 -0
  221. package/public/locales/ja.json +1 -0
  222. package/public/locales/ko.json +1 -0
  223. package/public/locales/zh.json +1 -0
  224. package/public/manager/src/InstancePreview.tsx +21 -1
  225. package/public/manager/src/SidebarRailRouter.tsx +32 -4
  226. package/public/manager/src/components/InstanceRow.tsx +0 -1
  227. package/public/manager/src/components/WorkbenchHeader.tsx +17 -7
  228. package/public/manager/src/folder-panel/FolderPanel.tsx +13 -2
  229. package/public/manager/src/hooks/useElectronDroppedPaths.ts +89 -0
  230. package/public/manager/src/manager-components.css +34 -0
  231. package/public/manager/src/manager-polish.css +10 -0
  232. package/public/manager/src/panels/desktop-bridge.ts +11 -0
  233. package/public/manager/src/settings/pages/components/agent/agent-meta.ts +4 -4
  234. package/scripts/smoke/agy-transcript-tail-smoke.mjs +89 -0
  235. package/public/dist/assets/agent-meta-B1098B_a.js +0 -1
  236. package/public/dist/assets/app-ByHYOMZE.js +0 -48
  237. package/public/dist/assets/app-CYdhP6Vh.css +0 -1
  238. package/public/dist/assets/constants-s2UJodER.js +0 -1
  239. package/public/dist/assets/manager-B2qEQRxN.css +0 -1
  240. package/public/dist/assets/manager-CR9BA-wO.js +0 -12
  241. package/public/dist/assets/memory-D1RKYvyu.js +0 -1
  242. package/public/dist/assets/render-DFBujF8n.js +0 -28
  243. package/public/dist/assets/settings-B4ZkeaU-.js +0 -1
  244. package/public/dist/assets/settings-D9jTceN0.js +0 -151
  245. package/public/dist/assets/sidebar-DPPRNiTc.js +0 -48
  246. package/public/dist/assets/skills-8nHJkv-r.js +0 -1
  247. package/public/dist/assets/slash-commands-RJWO8wJZ.js +0 -1
  248. package/public/dist/assets/ui-Crnp79bG.js +0 -142
  249. package/public/dist/assets/ui-HtSKByR3.js +0 -1
  250. /package/public/dist/assets/{locale-DT1WRaeJ.js → locale-BHMJIzyw.js} +0 -0
  251. /package/public/dist/assets/{provider-icons-CVVK5xUP.js → provider-icons-Crv6yvlG.js} +0 -0
@@ -1 +0,0 @@
1
- import{a as e}from"./memory-D9AUn8fG.js";export{e as refreshMemorySidebar};
@@ -1,28 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-Bjnw0wQ6.css"])))=>i.map(i=>d[i]);
2
- import{A as e,L as t,R as n,S as r,_ as i,a,b as o,c as s,d as c,f as l,g as u,h as d,i as ee,l as f,m as te,o as ne,p as re,s as ie,u as ae,v as oe,x as p,y as m}from"./vendor-render-DCb9B75Q.js";import{i as h}from"./api-tVoG39dL.js";import{t as g}from"./preload-helper-DuH3-WbD.js";import{A as se,B as ce,C as le,D as ue,E as de,F as fe,G as pe,H as me,I as he,J as ge,K as _e,L as ve,M as ye,N as be,O as xe,P as Se,Q as Ce,R as we,S as Te,T as Ee,U as De,V as Oe,W as ke,X as Ae,Y as je,Z as Me,_ as Ne,a as Pe,b as Fe,c as Ie,d as Le,f as Re,g as ze,h as Be,i as Ve,j as He,k as Ue,l as We,m as Ge,n as Ke,o as qe,p as Je,q as Ye,r as Xe,s as Ze,t as Qe,u as $e,v as et,w as tt,x as nt,y as rt,z as it}from"./vendor-icons-D2l6ddC0.js";import{n as _,t as at}from"./mermaid-preprocess-p7OIpOon.js";var ot=[`en`,`ko`,`zh`,`ja`],v=`ko`,y={},b={};async function st(){let e=null;try{e=localStorage.getItem(`claw_locale`)}catch{}if(!e){let t=(navigator.language||`ko`).split(/[-_]/)[0].toLowerCase();e=ot.includes(t)?t:`ko`}b=await x(`ko`),y=e===`ko`?b:await x(e),v=e,document.documentElement.lang=v,C()}async function x(e){try{let{api:t}=await g(async()=>{let{api:e}=await import(`./api-DNnX8m0u.js`);return{api:e}},[]);return await t(`/api/i18n/${e}`)||{}}catch{return{}}}function S(e,t={}){let n=y[e]??b[e]??e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{${e}}`,String(r));return n}function C(){document.querySelectorAll(`[data-i18n]`).forEach(e=>{let t=e.getAttribute(`data-i18n`);t&&(e.textContent=S(t))}),document.querySelectorAll(`[data-i18n-placeholder]`).forEach(e=>{let t=e.getAttribute(`data-i18n-placeholder`);t&&(e.placeholder=S(t))}),document.querySelectorAll(`[data-i18n-title]`).forEach(e=>{let t=e.getAttribute(`data-i18n-title`);t&&(e.title=S(t))}),document.querySelectorAll(`[data-i18n-aria]`).forEach(e=>{let t=e.getAttribute(`data-i18n-aria`);t&&e.setAttribute(`aria-label`,S(t))})}async function ct(e){if(e!==v){ot.includes(e)||(e=`ko`),y=e===`ko`?b:await x(e),v=e,document.documentElement.lang=v;try{localStorage.setItem(`claw_locale`,e)}catch{}C();try{let{loadEmployees:e}=await g(async()=>{let{loadEmployees:e}=await import(`./employees-_A-p_bZg.js`);return{loadEmployees:e}},[]);e()}catch{}try{let{loadSkills:e}=await g(async()=>{let{loadSkills:e}=await import(`./skills-8nHJkv-r.js`);return{loadSkills:e}},[]);e()}catch{}try{let{loadCommands:e}=await g(async()=>{let{loadCommands:e}=await import(`./slash-commands-RJWO8wJZ.js`);return{loadCommands:e}},[]);e()}catch{}try{let{loadSettings:e}=await g(async()=>{let{loadSettings:e}=await import(`./settings-B4ZkeaU-.js`);return{loadSettings:e}},[]);e()}catch{}}}function lt(){return v}function ut(e,t={}){let n=new URL(e,location.origin);return n.searchParams.has(`locale`)||n.searchParams.set(`locale`,v),fetch(n.toString(),t)}function dt(e){let t=[],n=e.replace(/```[\s\S]*?```/g,e=>(t.push(e),`\x00P${t.length-1}\x00`)).replace(/`[^`]+`/g,e=>(t.push(e),`\x00P${t.length-1}\x00`));return n=n.replace(/([\p{P}])\*\*(?=[^\s\p{P}])/gu,(e,t)=>t===`*`?e:t+`​**`),n=n.replace(/\x00P(\d+)\x00/g,(e,n)=>t[Number(n)]),n}var w=0;function ft(e){let t=new Map;return{text:e.replace(/^ {0,3}(`{3,}|~{3,})[^\n]*\n[\s\S]*?\n {0,3}\1[ \t]*$/gm,e=>{let n=`\x00FENCE-${w++}\x00`;return t.set(n,e),n}),fences:t}}function pt(e,t){for(let[n,r]of t)e=e.replace(n,()=>r);return e}function mt(e,t=!1){let n=[],r=``,i=0;for(;i<e.length;){let a=e.indexOf(`<svg`,i);if(a===-1){r+=e.slice(i);break}let o=e[a+4];if(o&&!/[\s\/>]/.test(o)){r+=e.slice(i,a+4),i=a+4;continue}r+=e.slice(i,a);let s=0,c=a,l=!1;for(;c<e.length;){let t=e.indexOf(`<svg`,c+1),o=e.indexOf(`</svg>`,c+(c===a?0:1));if(o===-1)break;if(t!==-1&&t<o){let n=e[t+4];n&&/[\s\/>]/.test(n)&&s++,c=t+4}else if(s===0){let t=o+6,s=e.slice(a,t),c=w++,u=`\n\n<div data-jaw-svg="${c}"></div>\n\n`;n.push({id:c,index:a,length:s.length,svg:s,kind:`complete`,placeholder:u}),r+=u,i=t,l=!0;break}else s--,c=o+6}if(!l){let o=w++;if(t){let t=e.slice(a),s=`\n\n<div data-jaw-svg="${o}" data-jaw-kind="partial"></div>\n\n`;n.push({id:o,index:a,length:t.length,svg:``,kind:`partial`,placeholder:s}),r+=s,i=e.length}else{let t=`\n\n<div data-jaw-svg="${o}" data-jaw-kind="error"></div>\n\n`,s=e.slice(a),c=s.search(/\n\s*\n/),l=c===-1?s.length:c;n.push({id:o,index:a,length:l,svg:``,kind:`error`,placeholder:t}),r+=t,i=a+l}}}return{text:r,blocks:n}}function T(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}var ht=/["'](?:subtasks|employee_config|agent_phases|orchestration_plan)["']\s*:/,gt=/(^|\n)(?:## Approved Plan \((?:authoritative|auto-injected by orchestrator)[^\n]*\)|\[PABCD — [A-Z]:[^\n]*\]|\[PLANNING MODE[^\n]*\]|\[PLAN AUDIT[^\n]*\]|The approved plan is already injected above)/m;function _t(e){let t=gt.exec(e);return!t||t.index<0?e:e.slice(0,t.index).trim()}function E(e){let t=e.replace(/```json\n([\s\S]*?)\n```/g,(e,t)=>ht.test(t)?``:e);return t=t.replace(/\{[^{}]*"subtasks"\s*:\s*\[[\s\S]*?\]\s*\}/g,``).trim(),_t(t)}function vt(e){let t=[],n=[],r=e.replace(/```[\s\S]*?```/g,e=>(n.push(e),`\x00C${n.length-1}\x00`)).replace(/`[^`]+`/g,e=>(n.push(e),`\x00C${n.length-1}\x00`));return r=r.replace(/\$\$([\s\S]+?)\$\$/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!0}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\\\[([\s\S]+?)\\\]/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!0}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/(?<!\$)\$(?!\$)([^\n$]+?)\$(?!\$)/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!1}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\\\((.+?)\\\)/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!1}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\x00C(\d+)\x00/g,(e,t)=>n[Number(t)]),{text:r,blocks:t}}function yt(t,n,r=!1){return t.replace(/\x00MATH-(\d+)\x00/g,(t,i)=>{let a=n[Number(i)];if(!a)return`<code title="math placeholder error">[math error]</code>`;if(r)return a.displayMode?`<div class="math-placeholder">${T(a.tex)}</div>`:`<code class="math-placeholder">${T(a.tex)}</code>`;try{return e.renderToString(a.tex,{displayMode:a.displayMode,throwOnError:!1})}catch{return a.displayMode?`<pre><code>${T(a.tex)}</code></pre>`:`<code>${T(a.tex)}</code>`}})}var bt=`http://www.w3.org/2000/svg`,xt=new Set([`a`,`area`,`link`]),St=[`fill`,`stroke`,`filter`,`mask`,`clip-path`,`marker-start`,`marker-mid`,`marker-end`,`cursor`],D=null;function Ct(){let e=r;return typeof e.sanitize==`function`&&typeof e.addHook==`function`?e:typeof window<`u`?e(window):{sanitize:e=>e,addHook:()=>void 0}}function wt(e){e.addHook(`afterSanitizeAttributes`,e=>{let t=e.tagName.toLowerCase();if(e.namespaceURI===bt||!xt.has(t)){let t=e.getAttribute(`href`)||``;t&&!t.startsWith(`#`)&&e.removeAttribute(`href`)}let n=e.getAttributeNS(`http://www.w3.org/1999/xlink`,`href`)||e.getAttribute(`xlink:href`)||``;if(n&&!n.startsWith(`#`)&&(e.removeAttributeNS(`http://www.w3.org/1999/xlink`,`href`),e.removeAttribute(`xlink:href`)),t===`image`||t===`feimage`){let t=e.getAttribute(`src`)||``;t&&!t.startsWith(`#`)&&e.removeAttribute(`src`)}if(e.hasAttribute(`style`)){let t=e.style?.cssText||``;if(/url\s*\(/i.test(t)){let n=t.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`);e.style.cssText=n}}for(let t of St){if(!e.hasAttribute(t))continue;let n=e.getAttribute(t)||``;if(/url\s*\(/i.test(n)){let r=n.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`);e.setAttribute(t,r)}}})}function Tt(){return D||(D=Ct(),wt(D),D)}function O(){return Tt()}function Et(e){let t=O().sanitize(e,{USE_PROFILES:{svg:!0,svgFilters:!0},FORBID_TAGS:[`script`,`iframe`,`object`,`embed`,`form`,`input`,`foreignObject`,`animate`,`set`,`animateTransform`,`animateMotion`],FORBID_ATTR:[`onerror`,`onclick`,`onload`,`onmouseover`,`onfocus`,`onblur`,`background`]}),n=document.createElement(`div`);n.innerHTML=t;for(let e of n.querySelectorAll(`style`)){let t=e.textContent||``;t=t.replace(/@import\b[^;]*;?/gi,`/* stripped */`),t=t.replace(/@font-face\s*\{[^}]*\}/gi,`/* stripped */`),t=t.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`),e.textContent=t}return n.innerHTML}function k(e){return O().sanitize(e,{USE_PROFILES:{html:!0,svg:!0,svgFilters:!0},FORBID_TAGS:[`script`,`style`,`iframe`,`object`,`embed`,`form`,`input`,`foreignObject`,`animate`,`set`,`animateTransform`,`animateMotion`],FORBID_ATTR:[`onerror`,`onclick`,`onload`,`onmouseover`,`onfocus`,`onblur`,`background`],ADD_TAGS:[`use`],ADD_ATTR:[`aria-hidden`,`xmlns`,`viewBox`,`role`,`aria-label`,`data-jaw-svg`,`data-jaw-kind`,`data-mermaid-code-raw`,`href`,`xlink:href`]})}var Dt=`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12c0 0 2-4 6-4 1 0 2 .5 3 1l3-6c0 0 1 5 3 7 1.5 1.5 5 2 5 2s-1 4-5 4c-1 0-2-.3-3-.8L12 18c0 0-2-1-4-1-4 0-6-5-6-5z"/><circle cx="17" cy="11" r="0.5" fill="currentColor" stroke="none"/><path d="M7 12l1 2"/><path d="M9.5 12l1 2"/></svg>`,A=14,Ot=16;function j(e,t=Ot){return Ce(e,{size:t})}var M={check:j(Oe),error:j(it),warning:j(Ve),skip:j(Ie),tool:j(Xe),thinking:j(Te),search:j(Le),web:j(ye),exec:j(Qe),compacting:j(rt),plan:j(Fe),brain:j(Ye),heartPulse:j(se),lock:j(le),lockOpen:j(tt),key:j(ue),settings:j(We),file:j(fe),trash:j(Pe),lightbulb:j(de),refresh:j(Je),mic:j(nt),clipboard:j(we),robot:j(ge),palette:j(et),link:j(Ee),salute:j(He),shark:Dt,user:j(ce),paperclip:j(Ne),save:j(Re),gamepad:j(be),house:j(xe),radio:j(Ge),folder:j(Se),pencil:j(ze),chart:j(_e),hourglass:j(Ue),target:j(qe),ban:j(je),play:j(Be),stop:j(Ze),close:j(Ke,A),send:j($e),copy:j(ve,A),download:j(he,A),checkSimple:j(pe,A),chevronLeft:j(De,A),chevronRight:j(me,A),chevronDown:j(ke,A),arrowLeft:j(Me,A),arrowRight:j(Ae,A)},kt={"✅":`check`,"❌":`error`,"🔧":`tool`,"⏭":`skip`,"🧠":`brain`,"💓":`heartPulse`,"🔒":`lock`,"🔓":`lockOpen`,"🔑":`key`,"⚙":`settings`,"⚙️":`settings`,"📄":`file`,"🗑":`trash`,"🗑️":`trash`,"⚠":`warning`,"⚠️":`warning`,"💡":`lightbulb`,"🦈":`shark`,"👤":`user`,"💭":`thinking`,"🔍":`search`,"🌐":`web`,"⚡":`exec`,"🗜":`compacting`,"🗜️":`compacting`,"📝":`plan`,"📑":`clipboard`,"🤖":`robot`,"📋":`clipboard`,"🔄":`refresh`,"🎨":`palette`,"🎤":`mic`,"🔗":`link`,"🫡":`salute`,"📎":`paperclip`,"💾":`save`,"🎮":`gamepad`,"🏠":`house`,"📡":`radio`,"📂":`folder`,"✏️":`pencil`,"📊":`chart`,"🎙️":`mic`,"⏳":`hourglass`,"🎯":`target`,"📨":`send`,"🚫":`ban`,"▶":`play`};function At(e){let t=kt[e];return t?M[t]:e}function jt(e){return e===`✅`?`done`:e===`❌`?`error`:null}function Mt(e=document.body){let t=e.querySelectorAll(`[data-icon]`);for(let e of t){let t=e.dataset.icon;t&&M[t]&&(e.innerHTML=M[t],e.classList.add(`icon-hydrated`))}}function Nt(e){return e instanceof Error?e.message:String(e)}function Pt(){return window.cliJawDesktop?.clipboard??null}async function N(e){try{let t=Pt();if(t){let n=await t.writeText(e);return n.ok?{ok:!0}:{ok:!1,error:n.error??`Clipboard bridge rejected the copy request.`}}return navigator.clipboard?.writeText?(await navigator.clipboard.writeText(e),{ok:!0}):{ok:!1,error:`Clipboard API is unavailable.`}}catch(e){return{ok:!1,error:Nt(e)}}}function Ft(e){e.querySelector(`.mermaid-zoom-btn`)?.remove(),e.querySelector(`.mermaid-copy-btn`)?.remove(),e.querySelector(`.mermaid-save-btn`)?.remove();let t=document.createElement(`button`);t.className=`mermaid-zoom-btn`,t.type=`button`,t.ariaLabel=`Expand diagram`,t.title=`Expand`,t.textContent=`⤢`,e.appendChild(t);let n=document.createElement(`button`);n.className=`mermaid-save-btn`,n.type=`button`,n.ariaLabel=`Save as image`,n.title=`Save`,n.innerHTML=M.download,e.appendChild(n);let r=document.createElement(`button`);r.className=`mermaid-copy-btn`,r.type=`button`,r.ariaLabel=`Copy source`,r.title=`Copy`,r.innerHTML=M.copy,e.appendChild(r)}var It=!1;function Lt(){It||(It=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`.diagram-copy-btn`);if(n){let e=n.closest(`.diagram-container`);if(!e)return;let t=``;if(e.dataset.widgetHtml)try{t=decodeURIComponent(escape(atob(e.dataset.widgetHtml)))}catch{return}else{let n=e.querySelector(`svg`);n&&(t=n.outerHTML)}t&&P(n,t,`copy`);return}let r=t?.closest(`.mermaid-copy-btn`);if(r){let e=r.closest(`.mermaid-container`);if(!e)return;let t=e.dataset.mermaidCode||``;t&&P(r,t,`copy`);return}let i=t?.closest(`.diagram-save-btn`);if(i){let e=i.closest(`.diagram-container`);if(!e)return;if(e.dataset.widgetHtml){let t=e.querySelector(`iframe`);t?.contentWindow&&(t.contentWindow.postMessage({type:`jaw-request-screenshot`},`*`),P(i,``,`save`));return}let t=e.querySelector(`svg`);t&&I(t,i);return}let a=t?.closest(`.mermaid-save-btn`);if(a){let e=a.closest(`.mermaid-container`);if(!e)return;let t=e.querySelector(`svg`);t&&I(t,a);return}}))}function P(e,t,n){let r=()=>{let t=e.innerHTML;e.innerHTML=M.checkSimple,e.classList.add(`copied`),setTimeout(()=>{e.innerHTML=t,e.classList.remove(`copied`)},1500)};n===`copy`?N(t).then(e=>{e.ok&&r()}):r()}function F(e,t){let n=e.children,r=t.children,i=[`fill`,`stroke`,`stroke-width`,`color`,`opacity`,`rx`,`ry`,`font-size`,`font-weight`,`font-family`,`text-anchor`,`dominant-baseline`];for(let e=0;e<n.length;e++){let t=n[e],a=r[e];if(!t||!a)continue;let o=getComputedStyle(t);for(let e of i){let t=o.getPropertyValue(e);t&&a.style.setProperty(e,t)}t.children.length&&F(t,a)}}function I(e,t){let n=e.cloneNode(!0);F(e,n);let r=e.getBoundingClientRect();n.getAttribute(`width`)||n.setAttribute(`width`,String(r.width)),n.getAttribute(`height`)||n.setAttribute(`height`,String(r.height));let i=new XMLSerializer().serializeToString(n),a=`data:image/svg+xml;charset=utf-8,`+encodeURIComponent(i),o=new Image;o.onload=()=>{let e=document.createElement(`canvas`);e.width=o.naturalWidth*2,e.height=o.naturalHeight*2;let n=e.getContext(`2d`);n.scale(2,2),n.drawImage(o,0,0),e.toBlob(e=>{e&&(L(e,`diagram-${Date.now()}.png`),P(t,``,`save`))},`image/png`)},o.onerror=()=>{L(new Blob([i],{type:`image/svg+xml;charset=utf-8`}),`diagram-${Date.now()}.svg`),P(t,``,`save`)},o.src=a}function L(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function Rt(e){return e.kind===`partial`?`<div class="diagram-container diagram-loading" role="status"
3
- aria-label="Diagram loading"><div class="diagram-spinner"></div></div>`:e.kind===`error`?`<div class="diagram-container diagram-error" role="alert">
4
- Malformed SVG: unclosed element</div>`:`<div class="diagram-container diagram-svg" tabindex="0"
5
- role="figure" aria-label="SVG diagram">
6
- ${k(e.svg)}
7
- <button class="diagram-save-btn" type="button"
8
- aria-label="Save as image" title="Save">${M.download}</button>
9
- <button class="diagram-copy-btn" type="button"
10
- aria-label="Copy source" title="Copy">${M.copy}</button>
11
- <button class="diagram-zoom-btn" type="button"
12
- aria-label="Expand diagram" title="Expand">⤢</button>
13
- </div>`}function zt(e,t){for(let n of t){let t=`<div\\b[^>]*?\\bdata-jaw-svg="${n.id}"[^>]*></div>`,r=new RegExp(t,`g`),i=Rt(n);e=e.replace(r,()=>i)}return e}function R(e){(e||document).querySelectorAll(`.diagram-zoom-btn, .mermaid-zoom-btn`).forEach(e=>{e.dataset.bound||(e.dataset.bound=`1`,e.addEventListener(`click`,()=>{if(e.closest(`.diagram-widget`))return;let t=e.closest(`.diagram-container`),n=e.closest(`.mermaid-container`),r=t||n;if(!r)return;let i=r.cloneNode(!0);i.querySelectorAll(`.diagram-zoom-btn, .mermaid-zoom-btn, .diagram-copy-btn, .diagram-save-btn, .mermaid-copy-btn, .mermaid-save-btn`).forEach(e=>e.remove());let a=n&&!t?`mermaid`:`inline-svg`;Bt(i.innerHTML,a)}))})}function Bt(e,t=`inline-svg`){let n=document.activeElement,r=document.createElement(`div`);r.className=`diagram-overlay`,r.setAttribute(`role`,`dialog`),r.setAttribute(`aria-modal`,`true`),r.setAttribute(`aria-label`,`Expanded diagram`);let i=k(e);r.innerHTML=[`<div class="`,t===`inline-svg`?`diagram-overlay-content diagram-svg-overlay`:`diagram-overlay-content`,`">`,i,`</div>`,`<button class="diagram-overlay-close" type="button" aria-label="Close">✕</button>`].join(``),r.querySelectorAll(`.diagram-overlay-content svg`).forEach(e=>{if(!e.getAttribute(`viewBox`)){let t=e.getAttribute(`width`)||e.getBBox?.()?.width,n=e.getAttribute(`height`)||e.getBBox?.()?.height;t&&n&&e.setAttribute(`viewBox`,`0 0 `+parseFloat(String(t))+` `+parseFloat(String(n)))}e.removeAttribute(`width`),e.removeAttribute(`height`)});let a=r.querySelector(`.diagram-overlay-close`),o=()=>{r.remove(),document.removeEventListener(`keydown`,s),n&&n.isConnected&&n.focus()},s=e=>{if(e.key===`Escape`){o();return}if(e.key===`Tab`){let t=r.querySelectorAll(`button, [href], [tabindex]:not([tabindex="-1"])`);if(t.length===0)return;let n=t[0],i=t[t.length-1];e.shiftKey&&document.activeElement===n?(e.preventDefault(),i.focus()):!e.shiftKey&&document.activeElement===i&&(e.preventDefault(),n.focus())}};a.addEventListener(`click`,o),document.addEventListener(`keydown`,s),document.body.appendChild(r),a.focus()}var z=!1;function B(){z||(z=!0,p.registerLanguage(`javascript`,o),p.registerLanguage(`js`,o),p.registerLanguage(`typescript`,m),p.registerLanguage(`ts`,m),p.registerLanguage(`python`,oe),p.registerLanguage(`py`,oe),p.registerLanguage(`bash`,i),p.registerLanguage(`shell`,u),p.registerLanguage(`sh`,u),p.registerLanguage(`json`,d),p.registerLanguage(`css`,te),p.registerLanguage(`xml`,re),p.registerLanguage(`html`,re),p.registerLanguage(`markdown`,l),p.registerLanguage(`md`,l),p.registerLanguage(`yaml`,c),p.registerLanguage(`yml`,c),p.registerLanguage(`sql`,ae),p.registerLanguage(`rust`,f),p.registerLanguage(`rs`,f),p.registerLanguage(`go`,s),p.registerLanguage(`java`,ie),p.registerLanguage(`cpp`,ne),p.registerLanguage(`c`,ne),p.registerLanguage(`diff`,a),p.registerLanguage(`plaintext`,ee),p.registerLanguage(`text`,ee))}function Vt(e,t){if(B(),t&&p.getLanguage(t))try{return p.highlight(e,{language:t}).value}catch{return T(e)}try{return p.highlightAuto(e).value}catch{return T(e)}}function Ht(e){B(),(e||document).querySelectorAll(`.code-block pre code, .code-block-wrapper pre code`).forEach(e=>{if(e.dataset.highlighted===`yes`)return;let t=[...e.classList].find(e=>e.startsWith(`language-`))?.replace(`language-`,``),n=e.textContent||``;try{t&&p.getLanguage(t)?e.innerHTML=p.highlight(n,{language:t}).value:e.innerHTML=p.highlightAuto(n).value,e.dataset.highlighted=`yes`}catch{}})}var V=null,H=Promise.resolve();function Ut(){return document.documentElement.getAttribute(`data-theme`)===`light`?{primaryColor:`#e2e8f0`,primaryTextColor:`#1a202c`,primaryBorderColor:`#a0aec0`,lineColor:`#718096`,secondaryColor:`#ebf8ff`,tertiaryColor:`#f7fafc`,background:`transparent`,mainBkg:`#e2e8f0`,nodeBorder:`#a0aec0`,clusterBkg:`#f7fafc`,clusterBorder:`#cbd5e0`,titleColor:`#1a202c`,edgeLabelBackground:`#f7fafc`}:{primaryColor:`#2d3748`,primaryTextColor:`#e2e8f0`,primaryBorderColor:`#4a5568`,lineColor:`#718096`,secondaryColor:`#1a365d`,tertiaryColor:`#1a202c`,background:`transparent`,mainBkg:`#2d3748`,nodeBorder:`#4a5568`,clusterBkg:`#1a202c`,clusterBorder:`#2d3748`,titleColor:`#e2e8f0`,edgeLabelBackground:`#1a202c`}}async function U(){return V||=(await g(()=>import(`./mermaid-loader-BPeAxEES.js`),__vite__mapDeps([0]))).loadMermaid(),V}function W(){V.initialize({startOnLoad:!1,theme:`base`,htmlLabels:!1,themeVariables:Ut(),securityLevel:`strict`,suppressErrorRendering:!0})}var G=0;async function Wt(){let e=document.querySelectorAll(`.mermaid-rendered`);e.length&&(H=H.then(async()=>{let t=await U();for(let n of e){let e=n,r=e.dataset.mermaidCode;if(!r||!e.isConnected)continue;let i=at(r),a=`mermaid-${++G}`;try{W();let n;try{({svg:n}=await t.render(a,i))}catch{let e=_(i);if(!e)continue;W(),{svg:n}=await t.render(`${a}-retry`,e)}if(!e.isConnected)continue;e.innerHTML=Et(n),Ft(e),R(e)}catch{}}}).catch(e=>{console.error(`[mermaid:queue] rerender failed, keeping queue alive:`,e)}),await H)}var K=null;function Gt(){K||=new IntersectionObserver(e=>{for(let t of e){if(!t.isIntersecting)continue;let e=t.target;e.classList.contains(`mermaid-pending`)&&(K.unobserve(e),Jt(e))}},{rootMargin:`200px`})}function Kt(e,t,n){e.classList.remove(`mermaid-rendered`),e.innerHTML=`
14
- <div class="mermaid-error">
15
- <div class="mermaid-error-title">${M.warning} ${T(S(`mermaid.renderFail`)||`Mermaid render failed`)}</div>
16
- <div class="mermaid-error-msg">${T(n.slice(0,200))}</div>
17
- <pre class="mermaid-error-code"><code>${T(t)}</code></pre>
18
- </div>`}async function qt(e){if(!e.isConnected){delete e.dataset.mermaidQueued,delete e.dataset.mermaidInflight;return}e.classList.remove(`mermaid-pending`);let t=e.dataset.mermaidCodeRaw||``,n=at(t?decodeURIComponent(t):e.textContent||``);e.dataset.mermaidCode=n;let r=`mermaid-${++G}`;e.dataset.mermaidInflight=`1`;try{let t=await U();W();let i;try{({svg:i}=await t.render(r,n))}catch(e){let a=_(n);if(!a)throw e;W(),{svg:i}=await t.render(`${r}-retry`,a)}if(!e.isConnected)return;e.innerHTML=Et(i),e.classList.add(`mermaid-rendered`),delete e.dataset.mermaidCodeRaw,Ft(e),R(e)}catch(t){Kt(e,n,t?.message||t?.str||`Unknown error`)}finally{delete e.dataset.mermaidQueued,delete e.dataset.mermaidInflight}}function Jt(e){e.dataset.mermaidQueued!==`1`&&(e.dataset.mermaidQueued=`1`,H=H.then(()=>qt(e)).catch(e=>{console.error(`[mermaid:queue] render failed, keeping queue alive:`,e)}))}async function Yt(e,t={}){let n=(e||document).querySelectorAll(`.mermaid-pending`);if(n.length){Gt();for(let e of n)if(e.dataset.mermaidQueued!==`1`){if(t.immediate){let t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight;if(t.bottom>=-200&&t.top<=n+200){K.unobserve(e),Jt(e);continue}}K.observe(e)}}}function Xt(e){if(!K)return;let t=[`.mermaid-pending`,`[data-mermaid-queued="1"]`,`[data-mermaid-inflight="1"]`].join(`,`),n=[];e.matches(t)&&n.push(e),e.querySelectorAll(t).forEach(e=>n.push(e));for(let e of n)K.unobserve(e),delete e.dataset.mermaidQueued,delete e.dataset.mermaidQueuedAt,delete e.dataset.mermaidInflight,!e.classList.contains(`mermaid-rendered`)&&(e.dataset.mermaidCodeRaw||e.dataset.mermaidCode)&&e.classList.add(`mermaid-pending`)}function Zt(){if(V)return;let e=()=>{U().catch(()=>{})};typeof window.requestIdleCallback==`function`?window.requestIdleCallback(e,{timeout:2e3}):setTimeout(e,500)}function q(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 J(){if(window.parent===window)return null;try{let e=window.parent.location.origin;if(e&&e!==`null`&&q(e))return e}catch{}try{if(document.referrer){let e=new URL(document.referrer).origin;if(q(e))return e}}catch{}return null}function Qt(e){let t=J();return!t||!e.trim()?!1:(window.parent.postMessage({type:`jaw-preview-open-notes`,path:e},t),!0)}function $t(e){let t=J();return!t||!e.trim()?!1:(window.parent.postMessage({type:`jaw-preview-open-doc`,path:e},t),!0)}function en(e,t){let n=J();return!n||e.length===0?!1:(window.parent.postMessage({type:`dashboard.invalidate`,topics:e,reason:t},n),!0)}var tn=new Set([`.git`,`.assets`,`_templates`,`_snippets`,`_plugins`]),nn=`.md`;function Y(e){return e.replace(/\\/g,`/`).trim()}function rn(e){let t=e.split(`/`)[0]??``;return tn.has(t)}function an(e){return!(!e||e.startsWith(`/`)||e.includes(`..`)||!e.endsWith(nn)||rn(e))}function on(e,t){let n=Y(e),r=Y(t).replace(/\/+$/,``);if(!r||n===r)return null;let i=`${r}/`;if(!n.startsWith(i))return null;let a=n.slice(i.length);return an(a)?a:null}function sn(e){let t=Y(e),n=t.match(/^(\/Users\/[^/]+)/);if(n)return n[1];let r=t.match(/^(\/home\/[^/]+)/);return r?r[1]:null}function cn(e,t){if(!e.startsWith(`~/`))return e;let n=sn(t);return n?`${n}/${e.slice(2)}`:e}function ln(e,t){let n=Y(e);return n?!n.startsWith(`~/`)&&an(n)?n:t&&on(cn(n,t),t)||null:null}var un=/(?:~\/[^\s)`\]"'<>]+|\/(?:Users|home|tmp|var|opt|private)\/[^\s)`\]"'<>]+)/g,dn=/(?:^|[\s([{"'`])([A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*\.md)\b/g,fn=/[.,!?:;]+$/,pn=/^(?:~\/|\/(?:Users|home|tmp|var|opt|private)\/)/,X,mn=null;function hn(e){return pn.test(e)}function gn(e){try{let t=new URL(e,window.location.href);return t.protocol!==`http:`&&t.protocol!==`https:`||t.username||t.password?!1:t.origin!==window.location.origin}catch{return!1}}function _n(e){e.target=`_blank`;let t=new Set(e.rel.split(/\s+/).filter(Boolean));t.add(`noopener`),t.add(`noreferrer`),e.rel=[...t].join(` `)}async function vn(){return X===void 0?J()?(mn||=h(`/api/dashboard/notes/info`,`GET`,null).then(e=>typeof e?.root==`string`?e.root:null).catch(()=>null).then(e=>(X=e,e)),mn):(X=null,null):X}function yn(e,t){t&&t.classList.add(`opening`),h(`/api/file/open`,`POST`,{path:e}).then(e=>{t?.classList.remove(`opening`),e?.ok===!1?(t?.classList.add(`open-failed`),t&&(t.title=e?.error||`Failed to open`),setTimeout(()=>{t?.classList.remove(`open-failed`),t&&(t.title=``)},2e3)):(t?.classList.add(`opened`),setTimeout(()=>t?.classList.remove(`opened`),1500))}).catch(()=>{t?.classList.remove(`opening`),t?.classList.add(`open-failed`),setTimeout(()=>t?.classList.remove(`open-failed`),2e3)})}function bn(e,t,n){let r=document.createElement(`span`);r.className=`file-path-link`,r.setAttribute(`data-file-path`,t),n&&r.setAttribute(`data-vault-rel`,n),r.setAttribute(`role`,`button`),r.setAttribute(`tabindex`,`0`);let i=t.split(`/`).pop()||t,a=/\.\w{1,10}$/.test(i);r.textContent=a?i:t,a&&(r.title=t),e.appendChild(r)}function xn(e){un.lastIndex=0;let t=[],n;for(;n=un.exec(e);){let e=n[0],r=e.replace(fn,``);r.length<4||t.push({index:n.index,raw:e,clean:r})}return t}function Sn(e){dn.lastIndex=0;let t=[],n;for(;n=dn.exec(e);){let e=n[0].slice(0,n[0].length-n[1].length),r=n[1],i=n.index+e.length;t.push({index:i,raw:r,clean:r})}return t}function Cn(e,t){let n=[...e,...t].sort((e,t)=>e.index-t.index),r=[],i=-1;for(let e of n)e.index<i||(r.push(e),i=e.index+e.raw.length);return r}function wn(e,t=null){let n=new Set([`PRE`,`A`,`BUTTON`,`TEXTAREA`,`INPUT`,`SCRIPT`,`STYLE`]),r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(t){let r=t.parentElement;for(;r&&r!==e;){if(n.has(r.tagName)||r.classList.contains(`file-path-link`)||r.tagName===`CODE`&&r.parentElement?.tagName===`PRE`)return NodeFilter.FILTER_REJECT;r=r.parentElement}return NodeFilter.FILTER_ACCEPT}}),i=new Map,a;for(;a=r.nextNode();){let e=a.textContent||``,t=Cn(xn(e),Sn(e));t.length&&i.set(a,t)}for(let[e,n]of i){let r=e.textContent||``,i=e.parentNode;if(!i)continue;let a=document.createDocumentFragment(),o=0;for(let{index:e,raw:i,clean:s}of n){e>o&&a.appendChild(document.createTextNode(r.slice(o,e))),bn(a,s,ln(s,t));let n=i.slice(s.length);n&&a.appendChild(document.createTextNode(n)),o=e+i.length}o<r.length&&a.appendChild(document.createTextNode(r.slice(o))),i.replaceChild(a,e)}}async function Z(e){wn(e,await vn())}async function Tn(e,t){let n=await vn(),r=t.getAttribute(`data-vault-rel`)||ln(e,n);if(r&&J()&&Qt(r)){t.classList.add(`opened`),setTimeout(()=>t.classList.remove(`opened`),1500);return}if(/\.(md|mdx)$/i.test(e)&&J()&&$t(e)){t.classList.add(`opened`),setTimeout(()=>t.classList.remove(`opened`),1500);return}yn(e,t)}var En=!1;function Dn(){En||(En=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`a`),r=n?.getAttribute(`href`)||``;if(n&&gn(r)){_n(n);return}if(n&&hn(r)){e.preventDefault(),n.classList.add(`file-path-link`),Tn(r,n);return}let i=t?.closest(`.file-path-link`);if(!i)return;let a=i.getAttribute(`data-file-path`);a&&(e.preventDefault(),Tn(a,i))}),document.addEventListener(`keydown`,e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target;t?.classList.contains(`file-path-link`)&&(e.preventDefault(),t.click())}))}var Q=null,$=null;function On(){$&&clearTimeout($),Q&&=(cancelAnimationFrame(Q),null),$=setTimeout(()=>{$=null,Q=requestAnimationFrame(()=>{Q=null,Yt(),Ht(),R();let e=document.getElementById(`chatMessages`);e&&Z(e)})},100)}function kn(){$&&=(clearTimeout($),null),Q&&=(cancelAnimationFrame(Q),null)}var An=!1;function jn(e,t){N(t).then(t=>{if(!t.ok)return;let n=e.textContent||``;e.textContent=S(`code.copied`),e.classList.add(`copied`),setTimeout(()=>{e.textContent=n,e.classList.remove(`copied`)},1500)})}function Mn(){An||(An=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`.code-copy-btn`);if(n){let e=n.closest(`.code-block`);if(!e)return;let t=e.querySelector(`pre code`);if(!t)return;jn(n,t.textContent||``);return}let r=t?.closest(`.code-lang-label`);if(!r)return;let i=r.closest(`.code-block-wrapper`);if(!i)return;let a=i.querySelector(`pre code`);a&&jn(r,a.textContent||``)}))}function Nn(){Mn(),Lt(),Dn()}var Pn=!1;function Fn(){if(Pn)return!0;let e=new n;return e.code=function({text:e,lang:t}){if(t===`mermaid`)return`<div class="mermaid-container mermaid-pending" data-mermaid-code-raw="${encodeURIComponent(e)}" role="status" aria-label="Diagram loading">
19
- <div class="mermaid-skeleton">
20
- <div class="mermaid-skeleton-spinner"></div>
21
- <div class="mermaid-skeleton-text">Rendering diagram…</div>
22
- </div>
23
- </div>`;if(t?.trim().toLowerCase()===`diagram-html`)return`<div class="diagram-widget-pending" data-diagram-html="${btoa(unescape(encodeURIComponent(e)))}"
24
- role="status" aria-label="Interactive widget loading">
25
- <div class="diagram-spinner"></div>
26
- </div>`;let n=Vt(e,t),r=t?T(t):``,i=S(`code.copy`)||`Copy`;return`<div class="code-block"><div class="code-header"><span class="code-lang">${r}</span><button class="code-copy-btn" type="button" aria-label="${T(i)}">${T(i)}</button></div><pre><code class="hljs${t?` language-${T(t)}`:``}">${n}</code></pre></div>`},e.link=function({href:e,title:t,text:n}){return`<a href="${T(e||``)}" target="_blank" rel="noopener noreferrer"${t?` title="${T(t)}"`:``}>${n}</a>`},t.setOptions({renderer:e,gfm:!0,breaks:!1}),Pn=!0,!0}function In(e,n=!1){let r=E(e);if(!r)return`<em class="text-dim orchestrate-placeholder">`+T(S(`orchestrator.dispatching`))+`</em>`;let{text:i,fences:a}=ft(r.replace(/\n{3,}/g,`
27
-
28
- `)),{text:o,blocks:s}=mt(i,n),{text:c,blocks:l}=vt(pt(o,a));B(),Fn();let u=dt(c),d=t.parse(u);return d=d.replace(/<table/g,`<div class="table-wrapper"><table`).replace(/<\/table>/g,`</table></div>`),d=yt(d,l,n),d=k(d),d=zt(d,s),n||On(),Nn(),d}export{S as C,ct as S,T as _,en as a,lt as b,Xt as c,N as d,M as f,k as g,Mt as h,q as i,Yt as l,jt as m,kn as n,J as o,At as p,Z as r,Zt as s,In as t,Wt as u,E as v,st as x,ut as y};
@@ -1 +0,0 @@
1
- import{E as e,O as t,x as n}from"./settings-D9jTceN0.js";export{n as loadSettings,e as savePerCli,t as updateSettings};
@@ -1,151 +0,0 @@
1
- import{t as e}from"./state-D04-chBy.js";import{i as t,n,r}from"./api-tVoG39dL.js";import{C as i,_ as a,a as o,f as s}from"./render-DFBujF8n.js";import{n as c,r as l}from"./provider-icons-CVVK5xUP.js";import{n as u,r as d}from"./locale-DT1WRaeJ.js";import{a as f,i as p,n as ee,o as m,t as h}from"./constants-s2UJodER.js";function te(e){let n=document.getElementById(`sttEngine`),r=document.getElementById(`sttGeminiKey`),i=document.getElementById(`sttGeminiModel`),a=document.getElementById(`sttGeminiModelCustom`),o=document.getElementById(`sttWhisperModel`),s=document.getElementById(`sttOpenaiBaseUrl`),c=document.getElementById(`sttOpenaiKey`),l=document.getElementById(`sttOpenaiModel`),u=document.getElementById(`sttVertexJson`);if(n&&(n.value=e.engine||`auto`),r&&(r.placeholder=e.geminiKeySet?g(e.geminiKeyLast4):`AIza...`),i){let t=e.geminiModel||`gemini-2.5-flash-lite`;Array.from(i.options).some(e=>e.value===t)?i.value=t:(i.value=`__custom__`,a&&(a.value=t,a.style.display=``))}o&&(o.value=e.whisperModel||`mlx-community/whisper-large-v3-turbo`),s&&(s.value=e.openaiBaseUrl||``),c&&(c.placeholder=e.openaiKeySet?g(e.openaiKeyLast4):`sk-...`),l&&(l.value=e.openaiModel||``),u&&(u.value=e.vertexConfig||``);function d(){let e=n?.value||`auto`,t=e===`auto`||e===`gemini`,r=e===`openai`,i=e===`vertex`,a=e===`auto`||e===`whisper`;document.querySelectorAll(`.stt-gemini`).forEach(e=>e.style.display=t?``:`none`),document.querySelectorAll(`.stt-openai`).forEach(e=>e.style.display=r?``:`none`),document.querySelectorAll(`.stt-vertex`).forEach(e=>e.style.display=i?``:`none`),document.querySelectorAll(`.stt-whisper`).forEach(e=>e.style.display=a?``:`none`)}d();async function f(){let e={stt:{engine:n?.value||`auto`,geminiModel:(i?.value===`__custom__`?a?.value:i?.value)||`gemini-2.5-flash-lite`,whisperModel:o?.value||``,openaiBaseUrl:s?.value||``,openaiModel:l?.value||``,vertexConfig:u?.value||``}};r?.value&&(e.stt.geminiApiKey=r.value),c?.value&&(e.stt.openaiApiKey=c.value),console.log(`[stt] saving:`,{engine:e.stt.engine,hasGeminiKey:!!e.stt.geminiApiKey,hasOpenaiKey:!!e.stt.openaiApiKey});try{if(await t(`/api/settings`,`PUT`,e),r?.value){let e=r.value.slice(-4);r.value=``,r.placeholder=g(e)}if(c?.value){let e=c.value.slice(-4);c.value=``,c.placeholder=g(e)}}catch(e){console.error(`[stt] save failed:`,e)}}n?.addEventListener(`change`,()=>{d(),f()}),i?.addEventListener(`change`,()=>{a&&(a.style.display=i.value===`__custom__`?``:`none`),i.value!==`__custom__`&&f()}),a?.addEventListener(`blur`,f),r?.addEventListener(`blur`,()=>{r.value&&f()}),c?.addEventListener(`blur`,()=>{c.value&&f()}),s?.addEventListener(`blur`,f),l?.addEventListener(`blur`,f),o?.addEventListener(`blur`,f),u?.addEventListener(`blur`,f)}function g(e){return i(`stt.key.savedPlaceholder`,{last4:e||``})}async function ne(){let e=document.getElementById(`tgToken`)?.value.trim()||``,n=document.getElementById(`tgChatIds`)?.value.trim()||``;await t(`/api/settings`,`PUT`,{telegram:{token:e,allowedChatIds:n?n.split(`,`).map(e=>parseInt(e.trim(),10)).filter(e=>!isNaN(e)):[]}})}async function re(e){document.getElementById(`tgOn`)?.classList.toggle(`active`,e),document.getElementById(`tgOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{telegram:{enabled:e}})}async function ie(e){document.getElementById(`tgForwardOn`)?.classList.toggle(`active`,e),document.getElementById(`tgForwardOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{telegram:{forwardAll:e}})}async function ae(e){document.getElementById(`tgMentionOn`)?.classList.toggle(`active`,e),document.getElementById(`tgMentionOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{telegram:{mentionOnly:e}})}function oe(e){if(!e.telegram)return;let t=e.telegram;document.getElementById(`tgOn`)?.classList.toggle(`active`,!!t.enabled),document.getElementById(`tgOff`)?.classList.toggle(`active`,!t.enabled);let n=document.getElementById(`tgToken`);t.token&&n&&(n.value=t.token);let r=document.getElementById(`tgChatIds`);t.allowedChatIds?.length&&r&&(r.value=t.allowedChatIds.join(`, `));let i=t.forwardAll!==!1;document.getElementById(`tgForwardOn`)?.classList.toggle(`active`,i),document.getElementById(`tgForwardOff`)?.classList.toggle(`active`,!i);let a=t.mentionOnly!==!1;document.getElementById(`tgMentionOn`)?.classList.toggle(`active`,a),document.getElementById(`tgMentionOff`)?.classList.toggle(`active`,!a)}async function se(){let e=document.getElementById(`dcToken`)?.value.trim()||``,n=document.getElementById(`dcGuildId`)?.value.trim()||``,r=document.getElementById(`dcChannelIds`)?.value.trim()||``;await t(`/api/settings`,`PUT`,{discord:{token:e,guildId:n,channelIds:r?r.split(`,`).map(e=>e.trim()).filter(Boolean):[]}})}async function ce(e){document.getElementById(`dcOn`)?.classList.toggle(`active`,e),document.getElementById(`dcOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{discord:{enabled:e}})}async function le(e){document.getElementById(`dcForwardOn`)?.classList.toggle(`active`,e),document.getElementById(`dcForwardOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{discord:{forwardAll:e}})}async function ue(e){document.getElementById(`dcAllowBotsOn`)?.classList.toggle(`active`,e),document.getElementById(`dcAllowBotsOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{discord:{allowBots:e}})}async function de(e){document.getElementById(`dcMentionOn`)?.classList.toggle(`active`,e),document.getElementById(`dcMentionOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{discord:{mentionOnly:e}})}function fe(e){if(!e.discord)return;let t=e.discord;document.getElementById(`dcOn`)?.classList.toggle(`active`,!!t.enabled),document.getElementById(`dcOff`)?.classList.toggle(`active`,!t.enabled);let n=document.getElementById(`dcToken`);t.token&&n&&(n.value=t.token);let r=document.getElementById(`dcGuildId`);t.guildId&&r&&(r.value=t.guildId);let i=document.getElementById(`dcChannelIds`);t.channelIds?.length&&i&&(i.value=t.channelIds.join(`, `));let a=t.forwardAll!==!1;document.getElementById(`dcForwardOn`)?.classList.toggle(`active`,a),document.getElementById(`dcForwardOff`)?.classList.toggle(`active`,!a);let o=!!t.allowBots;document.getElementById(`dcAllowBotsOn`)?.classList.toggle(`active`,o),document.getElementById(`dcAllowBotsOff`)?.classList.toggle(`active`,!o);let s=!!t.mentionOnly;document.getElementById(`dcMentionOn`)?.classList.toggle(`active`,s),document.getElementById(`dcMentionOff`)?.classList.toggle(`active`,!s)}function pe(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.configured==`boolean`&&typeof t.activeInbound==`boolean`&&typeof t.sendCapable==`boolean`}function me(e){if(!e||typeof e!=`object`)return null;let t=e.channels;if(!t||typeof t!=`object`)return null;let n=t;return n.activeInbound!==`telegram`&&n.activeInbound!==`discord`||!pe(n.telegram)||!pe(n.discord)?null:{activeInbound:n.activeInbound,telegram:n.telegram,discord:n.discord}}function he(e){let t=[];return t.push(e.configured?i(`settings.channel.configured`):i(`settings.channel.notConfigured`)),e.sendCapable&&t.push(i(`settings.channel.sendCapable`)),e.activeInbound&&t.push(i(`settings.channel.activeInbound`)),t}function ge(e,t,n){let r=he(t).map(e=>`<span class="transport-status-chip">${a(e)}</span>`).join(``),o=n&&t.configured&&t.sendCapable&&!t.activeInbound?`<p class="transport-status-hint">${a(i(`settings.channel.sendOnlyHint`))}</p>`:``;return`
2
- <div class="transport-status-block">
3
- <div class="transport-status-label">${a(e)}</div>
4
- <div class="transport-status-chips">${r}</div>
5
- ${o}
6
- </div>`}function _e(e,t){e.innerHTML=`
7
- <h4 class="section-title-row">
8
- <span><span data-icon="radio"></span> ${a(i(`settings.channel.statusTitle`))}</span>
9
- </h4>
10
- ${ge(`Telegram`,t.telegram,!0)}
11
- ${ge(`Discord`,t.discord,!0)}
12
- `}async function ve(){let e=document.getElementById(`channelTransportStatus`);if(e)try{let n=me(await t(`/api/health`,`GET`,null));if(!n){e.innerHTML=``,e.style.display=`none`;return}_e(e,n),e.style.display=``}catch{e.innerHTML=``,e.style.display=`none`}}async function ye(e){document.getElementById(`chTelegram`)?.classList.toggle(`active`,e===`telegram`),document.getElementById(`chDiscord`)?.classList.toggle(`active`,e===`discord`),document.getElementById(`channelTelegramSettings`)?.style.setProperty(`display`,e===`telegram`?``:`none`),document.getElementById(`channelDiscordSettings`)?.style.setProperty(`display`,e===`discord`?``:`none`),await t(`/api/settings`,`PUT`,{channel:e}),await ve()}function be(e){let t=e.channel||`telegram`;document.getElementById(`chTelegram`)?.classList.toggle(`active`,t===`telegram`),document.getElementById(`chDiscord`)?.classList.toggle(`active`,t===`discord`),document.getElementById(`channelTelegramSettings`)?.style.setProperty(`display`,t===`telegram`?``:`none`),document.getElementById(`channelDiscordSettings`)?.style.setProperty(`display`,t===`discord`?``:`none`),ve()}function xe(e){let t=document.getElementById(`fallbackOrderList`);if(!t)return;let n=Object.keys(e.perCli||{}),r=e.fallbackOrder||[],o=Math.min(n.length-1,3),s=``;for(let e=0;e<o;e++){let t=r[e]||``,o=n.map(e=>`<option value="${a(e)}" ${e===t?`selected`:``}>${a(f(e)?.label||l(e))}</option>`).join(``);s+=`
13
- <div class="settings-row sub-row">
14
- <label style="min-width:60px">Fallback ${e+1}</label>
15
- <select id="fallback${e}"
16
- style="font-size:11px;padding:4px;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:4px;flex:1">
17
- <option value="">${i(`settings.none`)}</option>
18
- ${o}
19
- </select>
20
- </div>`}t.innerHTML=s}async function Se(){await t(`/api/settings`,`PUT`,{fallbackOrder:[...document.querySelectorAll(`#fallbackOrderList select`)].map(e=>e.value).filter(Boolean)})}function Ce(e){if(e.url)return`remote`;if(!e.command)return null;let t=e.command;return t===`npx`||t.endsWith(`/npx`)?`npx`:t===`uvx`||t===`uv`||t.endsWith(`/uvx`)?`uvx`:t===`docker`||t.endsWith(`/docker`)?`docker`:null}function we(e){return Object.values(e).filter(e=>e.command===`npx`||e.command===`uv`||e.command===`uvx`).length}var _=null;async function v(){try{let e=await n(`/api/mcp`);if(!e)return;_=e;let t=document.getElementById(`mcpServerList`);if(!t)return;let r=Object.entries(e.servers||{});if(!r.length){t.textContent=i(`mcp.noServers`),Te(0);return}t.innerHTML=r.map(([e,t])=>{let n=Ce(t),r=t.url||[t.command,...(t.args||[]).slice(0,2)].filter(Boolean).map(e=>a(e)).join(` `),i=n?` <span style="opacity:.5;font-size:0.85em">[${a(n)}]</span>`:``;return`<div style="padding:2px 0">• <b>${a(e)}</b> <span style="opacity:.6">${r}</span>${i}</div>`}).join(``),Te(we(e.servers))}catch{}}function Te(e){let t=document.getElementById(`installBundleLabel`);t&&(t.textContent=`Install bundle (${e})`);let n=t?.closest(`button`);n&&(n.disabled=e===0)}async function Ee(){let e=document.getElementById(`mcpSyncResult`);if(e){e.style.display=`block`,e.textContent=i(`mcp.syncing`);try{let n=await t(`/api/mcp/sync`,`POST`,{});if(!n){e.innerHTML=`${s.error} sync failed`;return}let r=n.results||{};e.innerHTML=Object.entries(r).map(([e,t])=>`${t?s.check:s.skip} ${a(e)}`).join(` &nbsp; `)}catch(t){e.innerHTML=`${s.error} ${a(t.message)}`}}}async function De(){let e=document.getElementById(`mcpSyncResult`);if(e){e.style.display=`block`,e.textContent=i(`mcp.installing`);try{let n=await t(`/api/mcp/install`,`POST`,{});if(!n){e.innerHTML=`${s.error} install failed`;return}e.innerHTML=Object.entries(n.results||{}).map(([e,t])=>`${t.status===`installed`?s.check:t.status===`skip`?s.skip:s.error} <b>${a(e)}</b>: ${a(t.status)}${t.bin?` ${s.arrowRight} `+a(t.bin):``}`).join(`<br>`),v()}catch(t){e.innerHTML=`${s.error} ${a(t.message)}`}}}var y=null,b=null,x=null,S=null,C=null,w=null,T=`local`,E=!1,Oe=[];function ke(){if(y)return;y=document.createElement(`div`),y.id=`mcpModal`,y.className=`modal-overlay mcp-modal-overlay`,y.setAttribute(`role`,`presentation`),y.setAttribute(`aria-hidden`,`true`),y.addEventListener(`click`,e=>{e.target===y&&j()});let e=document.createElement(`div`);e.className=`modal-box mcp-modal-box`,e.setAttribute(`role`,`dialog`),e.setAttribute(`aria-modal`,`true`),e.setAttribute(`aria-label`,`MCP Server Management`),e.addEventListener(`click`,e=>e.stopPropagation());let t=document.createElement(`div`);t.className=`modal-header`;let n=document.createElement(`span`);n.textContent=`MCP Server Management`;let r=document.createElement(`button`);r.type=`button`,r.className=`help-trigger`,r.textContent=`?`,r.setAttribute(`aria-label`,`MCP help`),r.addEventListener(`click`,()=>Re());let i=document.createElement(`button`);i.type=`button`,i.className=`btn-modal-close`,i.setAttribute(`aria-label`,`Close`),i.textContent=`x`,i.addEventListener(`click`,()=>j());let a=document.createElement(`div`);a.style.cssText=`display:flex;align-items:center;gap:6px`,a.append(n,r),t.append(a,i),b=document.createElement(`div`),b.style.cssText=`padding:16px;overflow-y:auto;flex:1`;let o=document.createElement(`div`);o.style.cssText=`display:flex;gap:4px;margin-bottom:12px`;let s=D(`Active Servers`,!0),c=D(`Add New`,!1),l=D(`Browse`,!1);Oe=[s,c,l],s.addEventListener(`click`,()=>O(`active`)),c.addEventListener(`click`,()=>O(`add`)),l.addEventListener(`click`,()=>O(`browse`)),o.append(s,c,l),x=document.createElement(`div`),w=document.createElement(`div`),w.style.display=`none`,w.innerHTML=`<p style="opacity:.5">Loading registry...</p>`,S=document.createElement(`div`),S.style.display=`none`,S.innerHTML=Ae(),S.querySelectorAll(`[data-mcp-subtab]`).forEach(e=>{e.addEventListener(`click`,()=>{T=e.dataset.mcpSubtab,je()})}),C=S.querySelector(`#mcpAddError`);let u=S.querySelector(`[data-action="mcpAddAndSync"]`);u&&u.addEventListener(`click`,()=>void Le());let d=S.querySelector(`[data-action="closeMcpModal"]`);d&&d.addEventListener(`click`,()=>j()),b.append(o,x,w,S);let f=document.createElement(`div`);f.className=`modal-footer`;let p=document.createElement(`button`);p.type=`button`,p.className=`btn-save`,p.textContent=`Close`,p.addEventListener(`click`,()=>j()),f.append(p),e.append(t,b,f),y.append(e),document.body.append(y)}function D(e,t){let n=document.createElement(`button`);return n.type=`button`,n.className=`btn-clear btn-tab${t?` is-active`:``}`,n.textContent=e,n}function Ae(){return`
21
- <div style="display:flex;gap:4px;margin-bottom:8px">
22
- <button type="button" class="btn-clear btn-tab is-active" data-mcp-subtab="local">Local</button>
23
- <button type="button" class="btn-clear btn-tab" data-mcp-subtab="remote">Remote</button>
24
- </div>
25
- <div id="mcpAddLocal">
26
- <div class="settings-row"><label>Name</label><input type="text" id="mcpAddName" placeholder="my-server"></div>
27
- <div class="settings-row"><label>Command</label><input type="text" id="mcpAddCommand" placeholder="npx"></div>
28
- <div class="settings-row"><label>Args (comma separated)</label><input type="text" id="mcpAddArgs" placeholder="-y, @upstash/context7-mcp"></div>
29
- <div class="settings-row"><label>Env (KEY=value per line)</label><textarea id="mcpAddEnv" rows="2" placeholder="API_KEY=xxx"></textarea></div>
30
- </div>
31
- <div id="mcpAddRemote" style="display:none">
32
- <div class="settings-row"><label>Name</label><input type="text" id="mcpAddRemoteName" placeholder="my-api"></div>
33
- <div class="settings-row"><label>URL</label><input type="text" id="mcpAddUrl" placeholder="https://mcp.example.com/sse"></div>
34
- <div class="settings-row"><label>Headers (KEY=value per line)</label><textarea id="mcpAddHeaders" rows="2"></textarea></div>
35
- </div>
36
- <div id="mcpAddError" class="text-error text-xs py-1" style="display:none"></div>
37
- <div style="display:flex;gap:8px;margin-top:12px;justify-content:flex-end">
38
- <button type="button" class="btn-clear" data-action="closeMcpModal">Cancel</button>
39
- <button type="button" class="btn-clear btn-save" data-action="mcpAddAndSync">Add & Sync</button>
40
- </div>`}function O(e){x&&(x.style.display=e===`active`?``:`none`),S&&(S.style.display=e===`add`?``:`none`),w&&(w.style.display=e===`browse`?``:`none`),Oe.forEach((t,n)=>{let r=[`active`,`add`,`browse`][n];t.classList.toggle(`is-active`,r===e)}),e===`active`&&Me(),e===`add`&&Pe(),e===`browse`&&ze()}function je(){let e=S?.querySelector(`#mcpAddLocal`),t=S?.querySelector(`#mcpAddRemote`);e&&(e.style.display=T===`local`?``:`none`),t&&(t.style.display=T===`remote`?``:`none`),S?.querySelectorAll(`[data-mcp-subtab]`).forEach(e=>{e.classList.toggle(`is-active`,e.dataset.mcpSubtab===T)})}function Me(){if(!x||!_)return;let e=Object.entries(_.servers||{});if(!e.length){x.innerHTML=`<p style="opacity:.5">No active MCP servers.</p>`;return}x.innerHTML=e.map(([e,t])=>{let n=Ce(t),r=n?`<span class="mcp-active-tag">[${a(n)}]</span>`:``,i=t.command?a(t.command)+(t.args?.length?` `+t.args.map(e=>a(e)).join(` `):``):``,o=t.url?a(t.url):``,s=t.env?Object.keys(t.env):[],c=t.headers?Object.keys(t.headers):[],l=``;return o&&(l+=`<div class="mcp-active-detail">URL: ${o}</div>`),i&&(l+=`<div class="mcp-active-detail">Command: ${i}</div>`),s.length&&(l+=`<div class="mcp-active-detail">Env: ${s.map(e=>a(e)).join(`, `)}</div>`),c.length&&(l+=`<div class="mcp-active-detail">Headers: ${c.map(e=>a(e)).join(`, `)}</div>`),`<div class="mcp-active-row">
41
- <div style="flex:1">
42
- <div style="display:flex;align-items:center;gap:6px">
43
- <span class="mcp-active-name">${a(e)}</span>
44
- ${r}
45
- </div>
46
- ${l}
47
- </div>
48
- <button type="button" class="btn-clear mcp-active-remove" data-mcp-remove="${a(e)}">Remove</button>
49
- </div>`}).join(``),x.querySelectorAll(`[data-mcp-remove]`).forEach(e=>{e.addEventListener(`click`,()=>{let t=e.dataset.mcpRemove;t&&Ne(t)})})}async function Ne(e){if(!_)return;let n={..._.servers};delete n[e];try{await t(`/api/mcp`,`PUT`,{..._,servers:n}),await t(`/api/mcp/sync`,`POST`,{}),await v(),Me()}catch(e){k(e.message)}}function Pe(){for(let e of[`mcpAddName`,`mcpAddCommand`,`mcpAddArgs`,`mcpAddEnv`,`mcpAddRemoteName`,`mcpAddUrl`,`mcpAddHeaders`]){let t=(S??document).querySelector(`#${e}`);t&&(t.value=``)}Fe()}function k(e){C&&(C.style.display=`block`,C.textContent=e)}function Fe(){C&&(C.style.display=`none`)}function Ie(e){let t={};for(let n of e.split(/\r?\n/)){let e=n.trim();if(!e||e.startsWith(`#`))continue;let r=e.indexOf(`=`);r!==-1&&(t[e.slice(0,r).trim()]=e.slice(r+1))}return t}function A(e){return(S??document).querySelector(`#${e}`)?.value?.trim()??``}async function Le(){if(!_)return;let e=T===`remote`,n,r;if(e){n=A(`mcpAddRemoteName`);let e=A(`mcpAddUrl`),t=A(`mcpAddHeaders`);if(!n){k(`Name is required.`);return}if(!e){k(`URL is required.`);return}r={url:e};let i=Ie(t);Object.keys(i).length>0&&(r.headers=i)}else{n=A(`mcpAddName`);let e=A(`mcpAddCommand`),t=A(`mcpAddArgs`),i=A(`mcpAddEnv`);if(!n){k(`Name is required.`);return}if(!e){k(`Command is required.`);return}r={command:e};let a=t.split(/,|\n/).map(e=>e.trim()).filter(Boolean);a.length>0&&(r.args=a);let o=Ie(i);Object.keys(o).length>0&&(r.env=o)}if(_.servers[n]){k(`Server "${n}" already exists.`);return}try{await t(`/api/mcp`,`PUT`,{..._,servers:{..._.servers,[n]:r}}),await t(`/api/mcp/sync`,`POST`,{}),await v(),j()}catch(e){k(e.message)}}function Re(){let e=document.getElementById(`mcpHelpOverlay`);if(e){e.remove();return}let t=document.createElement(`div`);t.id=`mcpHelpOverlay`,t.className=`mcp-help-overlay`,t.addEventListener(`click`,e=>{e.target===t&&t.remove()});let n=document.createElement(`div`);n.className=`mcp-help-inner`,n.innerHTML=`
50
- <h4>MCP Server</h4>
51
- <p>MCP (Model Context Protocol) adds capabilities to AI agents — like installing apps on a phone.</p>
52
-
53
- <h4>Local Server</h4>
54
- <p>Runs on your machine. Provide a command and args.</p>
55
- <pre>Name: context7
56
- Command: npx
57
- Args: -y, @upstash/context7-mcp</pre>
58
-
59
- <h4>Remote Server</h4>
60
- <p>Connects to an external URL (SSE or Streamable HTTP).</p>
61
- <pre>Name: my-api
62
- URL: https://mcp.example.com/sse</pre>
63
-
64
- <h4>Server Types</h4>
65
- <p><code>[npx]</code> Node.js package (npx -y ...)<br>
66
- <code>[uvx]</code> Python package (uvx ...)<br>
67
- <code>[docker]</code> Docker container<br>
68
- <code>[remote]</code> External URL</p>
69
-
70
- <h4>After Adding</h4>
71
- <p>The server is automatically synced to all installed CLIs (Claude, Codex, Gemini, Cursor, Copilot, OpenCode).</p>
72
- <p><code>Install bundle</code> converts npx/uvx servers to global binaries for faster startup.</p>
73
-
74
- <div style="text-align:right;margin-top:12px">
75
- <button type="button" class="btn-save" id="mcpHelpClose">OK</button>
76
- </div>
77
- `,t.append(n),document.body.append(t),n.querySelector(`#mcpHelpClose`)?.addEventListener(`click`,()=>t.remove())}async function ze(){if(w){w.innerHTML=`<p style="opacity:.5">Loading registry...</p>`,_||await v();try{let e=await n(`/api/mcp/registry`);if(!e?.entries?.length&&!e?.builtins?.length){w.innerHTML=`<p style="opacity:.5">No MCP servers in registry.</p>`;return}let t=_?Object.keys(_.servers):[],r=``;r+=e.entries.map(e=>{let n=t.includes(e.id),r=e.tags?.slice(0,3).map(e=>`<span style="background:var(--border);padding:1px 4px;border-radius:3px;font-size:10px">${a(e)}</span>`).join(` `)||``;return`<div style="padding:10px 0;border-bottom:1px solid var(--border)">
78
- <div style="display:flex;align-items:center;gap:8px">
79
- <b>${a(e.name)}</b>
80
- <span style="opacity:.5;font-size:0.85em">[${a(e.type)}]</span>
81
- <span style="opacity:.4;font-size:0.85em">${a(e.category)}</span>
82
- ${n?`<span style="color:var(--success);font-size:11px">Installed</span>`:`<button type="button" class="btn-clear text-xs" style="color:var(--accent)" data-registry-install="${a(e.id)}">+ Install</button>`}
83
- </div>
84
- <p style="margin:4px 0 4px 0;font-size:12px;opacity:.75">${a(e.description)}</p>
85
- <div style="display:flex;gap:4px;align-items:center">
86
- ${r}
87
- ${e.url?`<a href="${a(e.url)}" target="_blank" rel="noopener noreferrer" style="font-size:10px;opacity:.5;margin-left:auto">source</a>`:``}
88
- </div>
89
- </div>`}).join(``),e.builtins?.length&&(r+=`<div style="margin-top:16px;padding-top:12px;border-top:2px solid var(--border)">
90
- <h4 style="font-size:12px;opacity:.6;margin:0 0 8px">Harness Built-ins (omo / omx)</h4>
91
- <p style="font-size:11px;opacity:.4;margin:0 0 8px">Not installable via registry — built into harness runtimes. Listed for reference.</p>`,r+=e.builtins.map(e=>{let t=e.standalone_config&&Object.keys(e.standalone_config).length>0;return`<div style="padding:6px 0;border-bottom:1px solid var(--border)">
92
- <div style="display:flex;align-items:center;gap:6px">
93
- <b style="font-size:12px">${a(e.name)}</b>
94
- <span style="opacity:.4;font-size:0.8em">${a(e.harness)}</span>
95
- ${t?`<button type="button" class="btn-clear text-xs" style="color:var(--accent)" data-builtin-install="${a(e.id)}">+ Install standalone</button>`:``}
96
- </div>
97
- <p style="margin:2px 0;font-size:11px;opacity:.65">${a(e.description)}</p>
98
- </div>`}).join(``),r+=`</div>`),w.innerHTML=r,w.querySelectorAll(`[data-registry-install]`).forEach(t=>{t.addEventListener(`click`,()=>{let n=t.dataset.registryInstall,r=e.entries.find(e=>e.id===n);r&&Be(r,t)})}),w.querySelectorAll(`[data-builtin-install]`).forEach(t=>{t.addEventListener(`click`,()=>{let n=t.dataset.builtinInstall,r=e.builtins?.find(e=>e.id===n);r?.standalone_config&&Be({id:r.id,name:r.name,description:r.description,category:`harness`,type:`remote`,config:r.standalone_config,tags:[],url:r.source},t)})})}catch(e){w.innerHTML=`<p style="color:var(--color-error)">${a(e.message)}</p>`}}}async function Be(e,n){if(_){n.disabled=!0,n.textContent=`Installing...`;try{let r=e.config;await t(`/api/mcp`,`PUT`,{..._,servers:{..._.servers,[e.id]:r}}),await t(`/api/mcp/sync`,`POST`,{}),await v(),n.textContent=`Installed`,n.style.color=`var(--success)`}catch(e){n.textContent=`Error`,n.disabled=!1,console.error(`[mcp-registry] install failed:`,e.message)}}}function Ve(){ke(),y?.classList.add(`open`),y?.setAttribute(`aria-hidden`,`false`),E=!0,O(`active`)}function j(){E&&(y?.classList.remove(`open`),y?.setAttribute(`aria-hidden`,`true`),E=!1,Pe(),document.getElementById(`mcpHelpOverlay`)?.remove())}function He(){document.addEventListener(`keydown`,e=>{if(document.getElementById(`mcpHelpOverlay`)&&e.key===`Escape`){e.preventDefault(),document.getElementById(`mcpHelpOverlay`)?.remove();return}E&&e.key===`Escape`&&(e.preventDefault(),e.stopImmediatePropagation(),j())},!0)}var M=null;function Ue(e){let t=document.getElementById(`headerCli`);if(!t)return;let n=c(e),r=N(e);t.innerHTML=n?`${n} ${a(r)}`:a(r)}function N(e){return f(e)?.label||l(e)||e}function We(e){let t=e.finally(()=>{M===t&&(M=null)});return M=t,t}async function Ge(){let e=M;e&&await e}function Ke(e){return e.split(/[^a-zA-Z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function P(e){return document.getElementById(`model`+Ke(e))}function qe(e){return document.getElementById(`customModel`+Ke(e))}function Je(e){return document.getElementById(`effort`+Ke(e))}function F(e,t,{includeCustom:n=!1,includeDefault:r=!1,selected:o=``}={}){if(!e)return;let s=r?`<option value="default">default</option>`:``,c=n?`<option value="__custom__">${i(`model.customOption`)}</option>`:``;e.innerHTML=s+(t||[]).map(e=>`<option value="${a(e)}">${a(e)}</option>`).join(``)+c,o&&Array.from(e.options).some(e=>e.value===o)&&(e.value=o)}function I(e,t){if(!e||!t||Array.from(e.options).some(e=>e.value===t))return;let n=document.createElement(`option`);n.value=t,n.textContent=t;let r=e.querySelector(`option[value="__custom__"]`);r?e.insertBefore(n,r):e.appendChild(n)}function Ye(e=null){let t=p(),n=document.getElementById(`selCli`);if(n){let r=e?.cli||n.value||t[0]||`claude`,o=e=>ee.includes(e),s=!o(r)&&t.includes(r),c=n.dataset.expanded===`1`,l=t.filter(o),u=t.filter(e=>!o(e)),d=l.length===0||s||c,p=l.map(e=>{let t=f(e)?.label||e;return`<option value="${a(e)}">${a(t)}</option>`}).join(``);u.length>0&&(d?(p+=`<option disabled>──────</option>`,p+=u.map(e=>{let t=f(e)?.label||e;return`<option value="${a(e)}">${a(t)}</option>`}).join(``)):p+=`<option value="__show_more__">${i(`cli.showMore`)}</option>`),n.innerHTML=p,Array.from(n.options).some(e=>e.value===r)&&(n.value=r)}let r=document.getElementById(`flushCli`);if(r){let n=e?.memory?.cli||r.value||``;r.innerHTML=`<option value="">(active CLI)</option>`+t.map(e=>`<option value="${a(e)}">${a(N(e))}</option>`).join(``),Array.from(r.options).some(e=>e.value===n)&&(r.value=n)}}function L(e,t){return(t||``).trim()}function Xe(e=null){for(let t of p()){let n=f(t),r=t===`ai-e`?z():``,i=P(t);if(i)if(n?.modelNote)i.innerHTML=`<option value="">${a(n.modelNote)}</option>`,i.title=n.modelNote,i.disabled=!0;else{let a=L(t,e?.perCli?.[t]?.model||i.value||``);F(i,t===`ai-e`?n?.modelsByProvider?.[r]||h[t]||[]:h[t]||[],{includeCustom:!0,selected:a}),a&&!Array.from(i.options).some(e=>e.value===a)&&(I(i,a),i.value=a),i.disabled=!1}let o=Je(t);if(o){let i=t===`ai-e`&&r?n?.effortsByProvider?.[r]||[]:null,s=[``].concat(i||n?.efforts||[]),c=e?.perCli?.[t]?.effort||o.value||``,l=[...new Set(s)],u=l.length===1&&!l[0]&&n?.effortNote?n.effortNote:`— none`;o.innerHTML=l.map(e=>e?`<option value="${a(e)}">${a(e)}</option>`:`<option value="">${a(u)}</option>`).join(``),n?.effortNote&&(o.title=n.effortNote),o.disabled=l.length===1&&!l[0]&&!!n?.effortNote,Array.from(o.options).some(e=>e.value===c)&&(o.value=c)}}}function R(e,t=``){let n=document.getElementById(`selEffort`);if(!n)return;let r=f(e),i=z(),o=e===`ai-e`&&i?r?.effortsByProvider?.[i]||[]:null;if(r?.effortNote){n.innerHTML=`<option value="">${a(r.effortNote)}</option>`,n.title=r.effortNote,n.disabled=!0;return}let s=[``].concat(o||r?.efforts||[]);n.innerHTML=[...new Set(s)].map(e=>e?`<option value="${a(e)}">${a(e)}</option>`:`<option value="">— none</option>`).join(``),n.disabled=!1,n.title=``,Array.from(n.options).some(e=>e.value===t)&&(n.value=t)}function Ze(e,t,n){return e?(e.innerHTML=n.map(e=>`<option value="${a(e)}">${a(l(e)||e)}</option>`).join(``),Array.from(e.options).some(e=>e.value===t)?e.value=t:e.options.length>0&&(e.value=e.options[0]?.value||t),e.value||t):t}function z(){let e=document.getElementById(`selAiEProvider`),t=document.getElementById(`providerAiE`);return e?.value||t?.value||f(`ai-e`)?.defaultProvider||`claude`}function Qe(){return document.getElementById(`providerAiE`)?.value||z()}function $e(e,t){let n=document.getElementById(`aiEProviderWrap`),r=document.getElementById(`selAiEProvider`),i=document.getElementById(`providerAiE`),a=f(`ai-e`);if(!a?.providers?.length)return`claude`;let o=Ze(r,e?.perCli?.[`ai-e`]?.provider||i?.value||r?.value||a.defaultProvider||`claude`,a.providers);return Ze(i,o,a.providers),n&&(n.style.display=t===`ai-e`?``:`none`),o}async function et(){await m();let e=await n(`/api/settings`);if(!e)return;u(e.locale??``),Ye(e),$e(e,e.cli||``),Xe(e);let t=document.getElementById(`selCli`);t&&Array.from(t.options).some(t=>t.value===e.cli)&&(t.value=e.cli,t.dataset.prev=e.cli);let r=document.getElementById(`inpCwd`);r&&(r.textContent=e.workingDir);let i=document.getElementById(`headerCli`);if(i){let t=c(e.cli),n=N(e.cli);i.innerHTML=t?`${t} ${a(n)}`:a(n)}if(tt(e.permissions,!1),e.perCli)for(let[t,n]of Object.entries(e.perCli)){let e=P(t),r=Je(t);if(e&&n.model){let r=L(t,n.model);I(e,r),e.value=r}if(r&&(r.value=n.effort||``),t===`codex`&&n.fastMode!==void 0&&(document.getElementById(`codexFastOn`)?.classList.toggle(`active`,n.fastMode),document.getElementById(`codexFastOff`)?.classList.toggle(`active`,!n.fastMode)),t===`codex`){let e=!!n.contextWindow;document.getElementById(`codexCtxOn`)?.classList.toggle(`active`,e),document.getElementById(`codexCtxOff`)?.classList.toggle(`active`,!e);let t=document.getElementById(`codexCtxValues`);t&&(t.style.display=e?``:`none`);let r=document.getElementById(`codexCtxWindow`),i=document.getElementById(`codexCtxCompact`);r&&n.contextWindowSize&&(r.value=String(n.contextWindowSize)),i&&n.contextCompactLimit&&(i.value=String(n.contextCompactLimit))}if(t===`claude`){let e=!!(n.model&&String(n.model).endsWith(`[1m]`));document.getElementById(`claude1mOn`)?.classList.toggle(`active`,e),document.getElementById(`claude1mOff`)?.classList.toggle(`active`,!e)}}H(!1);let o=e.activeOverrides?.[e.cli]||{},s=e.perCli?.[e.cli]||{},l=o.model||s.model,d=o.effort||s.effort||``,f=document.getElementById(`selModel`);if(l&&f){let t=L(e.cli,l);t&&!Array.from(f.options).some(e=>e.value===t)&&I(f,t),f.value=t}R(e.cli,d),oe(e),fe(e),be(e),xe(e),v(),te(e.stt||{})}async function B(){let e=document.getElementById(`selCli`)?.value||`claude`,n={cli:e};return e===`ai-e`&&(n.perCli={"ai-e":{provider:z()}}),We((async()=>{let r=await t(`/api/settings`,`PUT`,n);if(!r){await et();return}let i=r.cli||e,a=document.getElementById(`selCli`);a&&Array.from(a.options).some(e=>e.value===i)&&(a.value=i,a.dataset.prev=i),Ue(i),o([`instances`],`active-cli-changed`)})())}function tt(e,t=!0){t&&r(`/api/settings`,`PUT`,{permissions:`auto`})}function nt(e){let t=P(e);return t?t.value===`__custom__`?qe(e)?.value?.trim()||t.options[0]?.value||`default`:t.value:`default`}function rt(e,t){let n=qe(e);n&&(t.value===`__custom__`?(n.style.display=`block`,n.focus()):(n.style.display=`none`,e===`claude`&&it(t.value),V()))}function it(e){let t=!!(e&&e.endsWith(`[1m]`));document.getElementById(`claude1mOn`)?.classList.toggle(`active`,t),document.getElementById(`claude1mOff`)?.classList.toggle(`active`,!t)}function at(e,t){let n=t.value.trim();if(!n)return;let r=P(e);r&&(I(r,n),r.value=n,t.style.display=`none`,e===`claude`&&it(n),V())}function ot(){let e=Qe(),t=document.getElementById(`selAiEProvider`);t&&Array.from(t.options).some(t=>t.value===e)&&(t.value=e),Xe(null),(document.getElementById(`selCli`)?.value||``)===`ai-e`&&H(!1),V()}async function V(){let e={};for(let t of p()){if(!P(t))continue;let n=Je(t),r={model:nt(t),effort:n?n.value:``};if(t===`ai-e`&&(r.provider=Qe()),t===`codex`){r.fastMode=document.getElementById(`codexFastOn`)?.classList.contains(`active`)??!1,r.contextWindow=document.getElementById(`codexCtxOn`)?.classList.contains(`active`)??!1;let e=document.getElementById(`codexCtxWindow`),t=document.getElementById(`codexCtxCompact`);r.contextWindowSize=parseInt(e?.value||`1000000`,10),r.contextCompactLimit=parseInt(t?.value||`900000`,10)}e[t]=r}await t(`/api/settings`,`PUT`,{perCli:e})}function H(e=!0){let t=document.getElementById(`selCli`);if(!t)return;if(t.value===`__show_more__`){let e=t.dataset.prev||p()[0]||`claude`;t.dataset.expanded=`1`,Ye(null),Array.from(t.options).some(t=>t.value===e)&&(t.value=e);try{t.showPicker()}catch{}return}t.dataset.prev=t.value;let r=t.value||`claude`,o=$e(null,r),s=f(r),c=r===`ai-e`?s?.modelsByProvider?.[o]||h[r]||[]:h[r]||[],l=document.getElementById(`selModel`);s?.modelNote&&l?(l.innerHTML=`<option value="">${a(s.modelNote)}</option>`,l.title=s.modelNote,l.disabled=!0):(F(l,c,{includeCustom:!0,includeDefault:!0}),l&&(l.disabled=!1,l.title=``)),Ue(r),R(r);let u=document.getElementById(`selModelCustom`);u&&u.remove();let d=document.createElement(`input`);if(d.type=`text`,d.id=`selModelCustom`,d.className=`custom-model-input`,d.placeholder=i(`model.placeholder`),d.style.display=`none`,d.onchange=function(){let e=this.value.trim();!e||!l||(I(l,e),l.value=e,this.style.display=`none`,U())},!l){e&&B();return}l.parentElement?.appendChild(d),l.onchange=function(){this.value===`__custom__`?(d.style.display=`block`,d.focus()):(d.style.display=`none`,U())},n(`/api/settings`).then(e=>{if(!e)return;let t=e.activeOverrides?.[r]||{},n=e.perCli?.[r]||{},i=t.model||n.model,a=t.effort||n.effort||``;if(i&&l){if(r===`ai-e`&&(e.perCli?.[`ai-e`]?.provider||`claude`)!==z()){R(r,a);return}let t=L(r,i);I(l,t),l.value=t}R(r,a)}),e&&B()}async function U(){let e=document.getElementById(`selCli`)?.value||`claude`,n=document.getElementById(`selModel`)?.value||`default`;n===`__custom__`&&(n=document.getElementById(`selModelCustom`)?.value?.trim()||`default`);let r=document.getElementById(`selEffort`),i={};i[e]={model:n},r&&!r.disabled&&(i[e].effort=r.value||``);let a={activeOverrides:i};e===`ai-e`&&(a.perCli={"ai-e":{provider:z()}}),await t(`/api/settings`,`PUT`,a)&&o([`instances`],`active-cli-changed`)}function st(){let e=h[document.getElementById(`flushCli`)?.value||document.getElementById(`selCli`)?.value||`claude`]||[];F(document.getElementById(`flushModel`),e,{includeDefault:!0}),ut(),lt()}async function ct(){let e=await n(`/api/memory-files`);if(!e)return;let t=document.getElementById(`flushCli`),r=document.getElementById(`flushModel`);t&&e.cli&&(t.value=e.cli),F(r,h[e.cli||document.getElementById(`selCli`)?.value||`claude`]||[],{includeDefault:!0}),r&&e.model&&(I(r,e.model),r.value=e.model),ut()}async function lt(){await t(`/api/memory-files/settings`,`PUT`,{cli:document.getElementById(`flushCli`)?.value||``,model:document.getElementById(`flushModel`)?.value||``})}function ut(){let e=document.getElementById(`flushAgentBadge`);if(!e)return;let t=document.getElementById(`flushCli`)?.value||``,n=document.getElementById(`flushModel`)?.value||``,r=t||document.getElementById(`selCli`)?.value||``,i=[];r&&i.push(t?N(r):`${N(r)}*`),n&&n!==`default`&&i.push(n),e.textContent=i.length?`(${i.join(` / `)})`:``}var dt=new Set([`ai-e`,`codex-app`]),ft={claude:`Currently subscribed, by June with credit`},pt={cursor:{title:`Enable quota bars (dashboard session)`,commands:[`cursor-agent login`,`export CURSOR_SESSION_TOKEN="<WorkosCursorSessionToken from cursor.com DevTools>"`,`echo "$CURSOR_SESSION_TOKEN" > ~/.cli-jaw/quota/cursor-session-token && chmod 600 ~/.cli-jaw/quota/cursor-session-token`]},agy:{title:`Enable Gem / Cla quota bars`,commands:[`npx antigravity-usage login`,`npx antigravity-usage --json`]},grok:{title:`Grok Build auth (plan quota not in grok CLI)`,commands:[`grok login --oauth`,`grok models # verify auth`],note:`Subscription remaining quota: xAI console only. No official grok quota subcommand.`},opencode:{title:`OpenCode auth + optional plan quota plugin`,commands:[`opencode auth login`,`opencode plugin add @slkiser/opencode-quota`,`npx @slkiser/opencode-quota show`],note:`Built-in opencode stats shows session tokens/cost, not subscription limits. opencode-go/* models use the same CLI.`}};function mt(e,t){return e===`gemini`?t===`Pro`||t===`P`?`P`:t===`Flash`||t===`F`?`F`:t:e===`copilot`&&(t===`Premium`||t===`Prem`||t.includes(`plus monthly subscriber quota`))?`30d`:t.replace(`-hour`,`h`).replace(`-day`,`d`).replace(` Sonnet`,``).replace(` Opus`,``)}function ht(e,t){if(t.delegatedProvider)return`Delegates quota/status to ${t.delegatedProvider}`;let n=t.quotaSource?.match(/^not-exposed-by-(.*?)-cli$/);return n?`Quota not exposed by ${n[1].toUpperCase()} CLI`:t.quotaSource?t.quotaSource:e===`opencode`?`Auth/status only`:`Usage data not exposed by this CLI`}function gt(e){return e.toLowerCase().replace(/^cursor\s+/i,``).trim()}var _t=new Set([`auth/status only`,`google cloud code`,`runtime-checked`]),vt=new Set([`cursor`,`antigravity.google`,`antigravity`,`max`,`copilot`,`gemini`]);function yt(e,t){let n=t.account;if(!n)return[];let r=[];n.email&&r.push(n.email);let i=new Set(r.map(gt));for(let e of[n.plan,n.tier]){if(!e)continue;let t=gt(e);if(!(!t||_t.has(t))&&!vt.has(t)&&!i.has(t)){i.add(t),r.push(e);break}}return r}function bt(e,t,n=[]){let r=pt[e],i=[...n,...r?r.commands:[],...r?.note?[r.note]:[]].filter(Boolean);return i.length?`<button type="button" class="help-trigger" style="margin-left:4px" data-cli-help="${a(i.join(`
99
- `))}" aria-label="Setup help">?</button>`:``}function xt(e,t){let n=pt[e],r=t.sessionUsage,i=[];r?.primaryModelId&&i.push(`Model: ${r.primaryModelId}`),r?.contextTokensUsed&&r?.contextWindowTokens?i.push(`Session context: ${Math.round(r.contextTokensUsed).toLocaleString()} / ${Math.round(r.contextWindowTokens).toLocaleString()} tokens`):r?.turnCount&&i.push(`Session turns: ${Math.round(r.turnCount).toLocaleString()}`);let o=bt(e,t,i);if(n){let e=n.commands.map(e=>`
100
- <div style="margin-top:3px"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px;word-break:break-all">${a(e)}</code></div>
101
- `).join(``);return`
102
- <div style="font-size:10px;color:var(--text-dim);margin:4px 0 0 16px;padding:5px 7px;background:var(--surface);border:1px solid var(--border);border-radius:5px">
103
- <div style="color:var(--text);font-weight:600">${a(n.title)}${o}</div>
104
- ${e}
105
- ${n.note?`<div style="margin-top:4px;opacity:0.75">${a(n.note)}</div>`:``}
106
- </div>
107
- `}return`
108
- <div style="font-size:10px;color:var(--text-dim);margin:4px 0 0 16px;padding:5px 7px;background:var(--surface);border:1px solid var(--border);border-radius:5px">
109
- <div style="color:var(--text);font-weight:600">${a(t.displayTier||l(e))}${o}</div>
110
- <div style="margin-top:2px">${a(ht(e,t))}</div>
111
- </div>
112
- `}var St=new Set([0,600,1800]),W=0,Ct=2e3,wt=4e3,G=null,Tt=!1,K=0,q=null,J=null,Et=`cliStatusCollapsed`;function Y(){try{return window.parent!==window}catch{return!0}}function Dt(){try{return localStorage.getItem(Et)===`true`}catch{return!1}}function Ot(e){try{localStorage.setItem(Et,e?`true`:`false`)}catch{}}function kt(e){return`${String(e.getHours()).padStart(2,`0`)}:${String(e.getMinutes()).padStart(2,`0`)}:${String(e.getSeconds()).padStart(2,`0`)}`}function At(){J!=null&&(window.clearTimeout(J),J=null)}function jt(e,t=``){At();let n=document.getElementById(`cliStatusRefreshBtn`),r=document.getElementById(`cliStatusRefreshState`),i=n?.querySelector(`.cli-refresh-label`);n&&(n.classList.remove(`is-refreshing`,`is-success`,`is-error`),n.disabled=e===`refreshing`,e===`idle`?n.removeAttribute(`aria-busy`):n.setAttribute(`aria-busy`,e===`refreshing`?`true`:`false`),e===`refreshing`&&n.classList.add(`is-refreshing`),e===`success`&&n.classList.add(`is-success`),e===`error`&&n.classList.add(`is-error`)),i&&(i.textContent=e===`refreshing`?`Refreshing...`:`Refresh`),r&&(r.textContent=t,r.dataset.state=e)}function Mt(e,t){jt(e,t),J=window.setTimeout(()=>{jt(`idle`)},wt)}var X=!Dt();function Nt(){return X}function Pt(){X=!0;let e=document.getElementById(`cliStatusList`),t=document.getElementById(`cliStatusHeader`);e&&(e.style.display=`block`),t&&t.classList.add(`expanded`),Ot(!1),Z(!0)}function Ft(){let e=document.getElementById(`cliStatusHeader`),t=document.getElementById(`cliStatusList`);!e||!t||(X?(t.style.display=`block`,e.classList.add(`expanded`)):t.style.display=`none`,e.addEventListener(`click`,()=>{X=!X,t.style.display=X?`block`:`none`,e.classList.toggle(`expanded`,X),Ot(!X),X&&Z(!0)}))}function It(){let e=Number(localStorage.getItem(`cliStatusInterval`)||W);return St.has(e)?e:W}function Lt(e=It()){let t=document.getElementById(`cliStatusInterval`);if(!t)return;let n=String(e);t.value=Array.from(t.options).some(e=>e.value===n)?n:String(W)}function Rt(){G!=null&&(window.clearInterval(G),G=null);let e=It();Lt(e),!(e<=0)&&(G=window.setInterval(()=>{document.hidden||!X||!Y()&&!document.hasFocus()||Z(!0)},e*1e3))}function zt(){Tt||!Y()||(Tt=!0,window.addEventListener(`message`,e=>{let t=e.data;t?.type!==`jaw-preview-visibility`||t.visible!==!0||X&&Z(!1)}))}function Bt(e){let t=Number(e),n=St.has(t)?t:W;localStorage.setItem(`cliStatusInterval`,String(n)),Lt(n),Rt()}function Vt(t,r,i){Y()&&(async()=>{if(await new Promise(e=>window.setTimeout(e,600)),t!==K)return;let i=await n(`/api/quota`);t!==K||!i||(e.cliStatusCache={cliStatus:r,quota:i},e.cliStatusTs=Date.now(),Q({cliStatus:r,quota:i}))})()}async function Ht(t,r,i){let a=await n(`/api/quota`);if(t!==K)return!1;let o=a??i??null;return e.cliStatusCache={cliStatus:r,quota:o},a&&(e.cliStatusTs=Date.now()),Q({cliStatus:r,quota:o}),a||Vt(t,r,i),!!a}function Ut(e,t,n,r){let i=()=>{Ht(t,n,r).catch(()=>{})};if(e)return Ht(t,n,r);window.setTimeout(i,Ct)}async function Z(t=!1){if(X){if(t&&jt(`refreshing`,`Refreshing quota...`),q)if(t)await q.catch(()=>{});else return;q=(async()=>{let r=++K,i=document.getElementById(`cliStatusList`);try{let a=It();if(!t&&e.cliStatusCache&&a>0&&Date.now()-e.cliStatusTs<a*1e3){Q({cliStatus:e.cliStatusCache?.cliStatus,quota:e.cliStatusCache?.quota});return}let o=e.cliStatusCache?.quota;i&&!o&&(i.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Loading...</div>`);let s=await n(`/api/cli-status`);if(r!==K)return;if(!s||typeof s!=`object`){i&&(i.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Failed to load CLI status</div>`),t&&Mt(`error`,`Refresh failed`);return}Q({cliStatus:s,quota:o??null});let c=await Ut(t,r,s,o);t&&r===K&&Mt(`success`,`${c?`Updated`:`Checked`} ${kt(new Date)}`)}catch{i&&(i.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Failed to load CLI status</div>`),t&&Mt(`error`,`Refresh failed`)}})().finally(()=>{q=null}),await q}}function Q(e){let{cliStatus:t,quota:r}=e,o=document.getElementById(`cliStatusList`),u={agy:{install:`curl -fsSL https://antigravity.google/cli/install.sh | bash`,auth:`agy runtime auth, antigravity-usage login, or ~/.gemini oauth for quota`},"ai-e":{install:`Install AI-E helper`,auth:`delegates to selected AI-E provider`},claude:{install:`npm i -g @anthropic-ai/claude-code`,auth:`claude auth`},"claude-e":{install:`Install claude-e helper`,auth:`claude auth`},codex:{install:`npm i -g @openai/codex`,auth:`codex login`},"codex-app":{install:`npm i -g @openai/codex`,auth:`codex login`},cursor:{install:`curl https://cursor.com/install -fsS | bash`,auth:`cursor-agent login, CURSOR_API_KEY, or CURSOR_SESSION_TOKEN for quota`},"kiro-code":{install:`Install Kiro CLI from https://kiro.dev/docs/cli`,auth:`kiro-cli login`},gemini:{install:`npm i -g @google/gemini-cli`,auth:`gemini (${i(`cli.gemini.auth`)})`},grok:{install:`curl -fsSL https://x.ai/cli/install.sh | bash`,auth:`grok login --oauth`},opencode:{install:`npm i -g opencode-ai`,auth:`opencode auth`},copilot:{install:`npm i -g copilot`,auth:i(`cli.copilot.authHint`)}},d=``;if(!t||typeof t!=`object`){o&&(o.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Failed to load CLI status</div>`);return}for(let[e,n]of Object.entries(t)){let t=r?.[e],o;o=n.available?!t||t.error?`ok`:t.authenticated===!1?`warn`:`ok`:`missing`;let f=``,p=t?.quotaCapable===!1&&t.authenticated!==!1&&n.available&&!ft[e]&&!dt.has(e);if(t?.account&&!p){let n=yt(e,t);n.length&&(f=`<div style="font-size:10px;color:var(--text-dim);margin:2px 0 4px 16px">${a(n.join(` · `))}</div>`)}let ee=``;if(!n.available||o===`warn`){let t=u[e];if(t){let e=!n.available,r=i(e?`cli.authRequired`:`cli.notAuthenticated`),o=e?`var(--error)`:`var(--warning)`;ee=`
113
- <div style="font-size:10px;margin:4px 0 2px 16px;padding:6px 8px;background:var(--surface);border-radius:4px;border-left:2px solid ${o}">
114
- <div style="color:${o};margin-bottom:3px">${r}</div>
115
- ${e?`<div style="color:var(--text-dim)"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px">${a(t.install)}</code></div>`:``}
116
- <div style="color:var(--text-dim)${e?`;margin-top:2px`:``}"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px">${a(t.auth)}</code></div>
117
- </div>
118
- `}}let m=``,h=ft[e];if(!dt.has(e)){if(h&&n.available)m=`
119
- <div style="font-size:10px;color:var(--text-dim);margin:4px 0 0 16px;padding:5px 7px;background:var(--surface);border:1px solid var(--border);border-radius:5px">
120
- ${a(h)}
121
- </div>
122
- `;else if(p)m=xt(e,t);else if(t?.windows?.length)m=t.windows.map(t=>{let n=Math.round(t.percent),r=n>80?`var(--error)`:n>50?`var(--warning)`:`var(--info)`,i=mt(e,t.label),o=``;if(t.resetsAt){let e=new Date(typeof t.resetsAt==`number`?t.resetsAt*1e3:t.resetsAt),n=new Date;o=e.toDateString()===n.toDateString()?`${e.getHours()}:${String(e.getMinutes()).padStart(2,`0`)}`:`${e.getMonth()+1}/${e.getDate()}`}return`
123
- <div style="display:flex;align-items:center;gap:4px;margin-left:16px;font-size:10px;color:var(--text-dim)">
124
- <span style="min-width:18px;max-width:48px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">${a(i)}</span>
125
- <div style="flex:1;height:4px;background:var(--border);border-radius:2px;overflow:hidden">
126
- <div style="width:${n}%;height:100%;background:${r};border-radius:2px"></div>
127
- </div>
128
- <span style="width:24px;text-align:right">${n}%</span>
129
- ${o?`<span style="width:30px;text-align:right;opacity:0.6">${o}</span>`:``}
130
- </div>
131
- `}).join(``);else if(t?.error&&n.available){let e=t.reason===`rate_limited`?`Rate limited — retry in a moment`:`Usage data unavailable`;m=`<div style="font-size:10px;color:var(--text-dim);margin:2px 0 0 16px;opacity:0.7">${s.warning} ${e}</div>`}}let te=t?.quotaCapable&&pt[e]?bt(e,t):``;d+=`
132
- <div class="settings-group" style="margin-bottom:6px;padding:8px 10px">
133
- <div class="cli-status-row">
134
- <span class="cli-dot ${o}"></span>
135
- <span class="cli-provider-icon" aria-hidden="true">${c(e)||``}</span>
136
- <span class="cli-name" style="font-weight:600">${a(l(e))}${te}</span>${e===`copilot`?`<button id="copilotKeychainBtn" style="font-size:9px;margin-left:6px;padding:1px 5px;background:var(--border);color:var(--text-dim);border:1px solid var(--text-dim);border-radius:3px;cursor:pointer;vertical-align:middle;line-height:1" title="${i(`copilot.keychainHint`)}">${s.key}</button>`:``}
137
- </div>
138
- ${f}
139
- ${ee}
140
- ${m}
141
- </div>
142
- `}o&&(o.innerHTML=d);let f=Object.entries(t);!f.some(([e,t])=>{if(!t.available)return!1;let n=r?.[e];return!n||n.authenticated!==!1})&&f.length>0&&o&&o.insertAdjacentHTML(`afterbegin`,`<div style="padding:8px 10px;margin-bottom:8px;background:var(--warning-dim);border:1px solid var(--warning);border-radius:6px;font-size:11px;color:var(--warning)">
143
- ${s.warning} ${i(`cli.noReadyCli`)}
144
- </div>`);let p=document.getElementById(`copilotKeychainBtn`);p&&p.addEventListener(`click`,async()=>{let e=p;e.disabled=!0,e.innerHTML=s.hourglass;try{let t=await n(`/api/copilot/refresh`,{method:`POST`});e.innerHTML=t?.ok?s.check:s.error,t?.ok&&await Z(!0)}catch{e.innerHTML=s.error}setTimeout(()=>{e.innerHTML=s.key,e.disabled=!1},2e3)}),o&&o.querySelectorAll(`[data-cli-help]`).forEach(e=>{e.addEventListener(`click`,t=>{t.stopPropagation(),Wt(e.getAttribute(`data-cli-help`)||``)})})}function Wt(e){let t=document.getElementById(`cliHelpOverlay`);t&&t.remove();let n=document.createElement(`div`);n.id=`cliHelpOverlay`,n.className=`mcp-help-overlay`,n.addEventListener(`click`,e=>{e.target===n&&n.remove()});let r=document.createElement(`div`);r.className=`mcp-help-inner`,r.innerHTML=`
145
- <h4>CLI Setup</h4>
146
- ${e.split(`
147
- `).filter(Boolean).map(e=>`<p><code>${e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`)}</code></p>`).join(``)}
148
- <div style="text-align:right;margin-top:12px">
149
- <button type="button" class="btn-save" id="cliHelpClose">OK</button>
150
- </div>
151
- `,n.append(r),document.body.append(n),r.querySelector(`#cliHelpClose`)?.addEventListener(`click`,()=>n.remove()),document.addEventListener(`keydown`,function e(t){t.key===`Escape`&&(n.remove(),document.removeEventListener(`keydown`,e,!0))},!0)}function Gt(){n(`/api/prompt`).then(e=>{if(!e)return;let t=document.getElementById(`modalPromptEditor`);t&&(t.value=e.content||``),document.getElementById(`promptModal`)?.classList.add(`open`)})}function Kt(e){e&&e.target!==e.currentTarget||document.getElementById(`promptModal`)?.classList.remove(`open`)}async function qt(){await t(`/api/prompt`,`PUT`,{content:document.getElementById(`modalPromptEditor`)?.value||``}),document.getElementById(`promptModal`)?.classList.remove(`open`)}var Jt=[],$=!1;async function Yt(){let e=await n(`/api/prompt-templates`);e&&(Jt=e.templates,$=!1,Xt(e.tree),en(`tree`),document.getElementById(`templateModal`)?.classList.add(`open`))}function Xt(e){let t=document.getElementById(`templateTree`);if(t){t.innerHTML=``;for(let n of e){let e=document.createElement(`div`);e.style.cssText=`background:var(--bg);border:1px solid var(--accent);border-radius:6px;padding:8px 10px;margin:8px 0 4px;font-size:12px;color:var(--accent);font-weight:600`,e.textContent=`${n.emoji} ${n.label}`,t.appendChild(e);for(let e of n.children){let n=Jt.find(t=>t.id===e);if(!n)continue;let r=document.createElement(`div`);r.style.cssText=`background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:6px 10px;margin:2px 0 2px 24px;font-size:12px;cursor:pointer;transition:border-color .15s`,r.innerHTML=`${s.file} ${a(n.filename)}`,r.addEventListener(`mouseenter`,()=>{r.style.borderColor=`var(--accent2)`}),r.addEventListener(`mouseleave`,()=>{r.style.borderColor=`var(--border)`}),r.addEventListener(`click`,()=>{Zt(n)}),t.appendChild(r)}}}}function Zt(e){let t=document.getElementById(`templateEditor`);t.value=e.content,t.dataset.templateId=e.id,t.readOnly=!0,$=!1;let n=document.getElementById(`templateEditorLabel`);n&&(n.innerHTML=`${s.file} ${a(e.filename)}`);let r=e.content.match(/\{\{[A-Z_]+\}\}/g),i=document.getElementById(`templateVars`);i&&(i.textContent=r?`vars: ${[...new Set(r)].join(`, `)}`:`no variables`);let o=document.getElementById(`templateSaveBtn`);o&&(o.style.display=`none`);let c=document.getElementById(`templateDevToggle`);c&&(c.style.color=`var(--text-dim)`,c.style.borderColor=`var(--border)`,c.innerHTML=`${s.tool} ${d(`devMode`)}`);let l=document.getElementById(`templateModalTitle`);l&&(l.innerHTML=`${s.file} ${a(e.filename)}`),en(`editor`)}function Qt(){if(!$&&!confirm(d(`promptEditWarning`)))return;$=!$;let e=document.getElementById(`templateEditor`);e.readOnly=!$;let t=document.getElementById(`templateSaveBtn`);t&&(t.style.display=$?``:`none`);let n=document.getElementById(`templateDevToggle`);n&&(n.style.color=$?`var(--stop-btn)`:`var(--text-dim)`,n.style.borderColor=$?`var(--stop-btn)`:`var(--border)`,n.innerHTML=$?`${s.lockOpen} ${d(`devModeOn`)}`:`${s.tool} ${d(`devMode`)}`)}async function $t(){let e=document.getElementById(`templateEditor`),n=e.dataset.templateId;if(!n)return;await t(`/api/prompt-templates/${n}`,`PUT`,{content:e.value});let r=document.getElementById(`templateEditorLabel`);r&&(r.innerHTML=`${s.check} ${d(`savedAndReloaded`)}`,setTimeout(()=>{r.innerHTML=`${s.file} ${a(n)}.md`},2e3));let i=Jt.find(e=>e.id===n);i&&(i.content=e.value)}function en(e){let t=document.getElementById(`templateTreeView`),n=document.getElementById(`templateEditorView`);t&&(t.style.display=e===`tree`?``:`none`),n&&(n.style.display=e===`editor`?`flex`:`none`);let r=document.getElementById(`templateModalTitle`);r&&e===`tree`&&(r.innerHTML=`${s.plan} ${d(`promptStructure`)}`)}function tn(){en(`tree`)}function nn(e){e&&e.target!==e.currentTarget||document.getElementById(`templateModal`)?.classList.remove(`open`)}export{He as A,ue as B,st as C,tt as D,V as E,xe as F,re as G,de as H,Se as I,ae as K,ye as L,v as M,Ve as N,B as O,Ee as P,se as R,H as S,U as T,ne as U,le as V,ie as W,at as _,qt as a,ct as b,Qt as c,Ft as d,Nt as f,Bt as g,Rt as h,Yt as i,De as j,Ge as k,Pt as l,Z as m,nn as n,$t as o,Y as p,te as q,Gt as r,tn as s,Kt as t,zt as u,nt as v,ot as w,et as x,rt as y,ce as z};
@@ -1,48 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-Bjnw0wQ6.css"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./state-D04-chBy.js";import{i as t,t as n}from"./api-tVoG39dL.js";import{t as r}from"./preload-helper-DuH3-WbD.js";import{C as i,_ as a,b as o,f as s,n as c}from"./render-DFBujF8n.js";import{D as ee,O as te,T as ne,_ as l,c as u,g as re,h as d,i as f,l as ie,m as p,n as ae,o as oe,r as se,t as ce}from"./ui-Crnp79bG.js";import{r as m}from"./provider-icons-CVVK5xUP.js";var le=3e3,h=new Map,g=[],_=(e,t)=>`${e}:${t}`;function v(e=[]){let t=document.getElementById(`pendingQueue`);if(t){if(g=e.slice(),!e.length){me(new Set),t.classList.remove(`visible`),t.innerHTML=``;return}t.classList.add(`visible`),t.innerHTML=`
3
- <div class="pending-queue-header">
4
- <span class="pending-queue-title">${s.hourglass} <span data-i18n="queue.pendingTitle">${a(i(`queue.pendingTitle`))}</span> <span class="pending-queue-count">${e.length}</span></span>
5
- </div>
6
- <div class="pending-queue-list">
7
- ${e.map(ue).join(``)}
8
- </div>
9
- `,me(new Set(e.map(e=>e.id))),pe()}}function ue(e){let t=(e.prompt||``).replace(/\s+/g,` `).trim(),n=t.length>140?t.slice(0,140)+`…`:t,r=e.source?`<span class="pending-row-source">${a(e.source)}</span>`:``,o=a(i(`queue.steer`)),c=a(i(`queue.delete`));return`<div class="pending-row" data-pending-id="${a(e.id)}" title="${a(t)}">
10
- <span class="pending-row-text">${a(n)}</span>
11
- ${r}
12
- <button class="pending-row-btn pending-row-steer" data-pending-action="steer" data-i18n-title="queue.steer" title="${o}" aria-label="${o}"><span class="pending-arm-fill" aria-hidden="true"></span><span class="pending-btn-content"><span class="pending-steer-arrow" aria-hidden="true">↳</span><span class="pending-steer-label">${o}</span></span></button>
13
- <button class="pending-row-btn pending-row-delete" data-pending-action="delete" data-i18n-title="queue.delete" title="${c}" aria-label="${c}"><span class="pending-arm-fill" aria-hidden="true"></span><span class="pending-btn-content">${s.trash}</span></button>
14
- </div>`}function y(e,t){let n=document.querySelector(`.pending-row[data-pending-id="${CSS.escape(e)}"]`);return n?n.querySelector(`[data-pending-action="${t}"]`):null}function de(e,t){let n=y(e,t);if(!n)return;n.classList.add(`armed`),n.setAttribute(`title`,i(`queue.cancelArm`));let r=n.querySelector(`.pending-arm-fill`);r&&(r.style.animation=`none`,r.offsetWidth,r.style.animation=``)}function fe(e,t){let n=y(e,t);n&&(n.classList.remove(`armed`),n.setAttribute(`title`,i(t===`steer`?`queue.steer`:`queue.delete`)))}function pe(){for(let e of h.values()){let t=y(e.id,e.action);t&&(t.classList.add(`armed`),t.setAttribute(`title`,i(`queue.cancelArm`)))}}function me(e){for(let[t,n]of h)e.has(n.id)||(clearTimeout(n.timerId),h.delete(t))}function he(e,n){let r=_(e,n),i=setTimeout(()=>_e(e,n),le);h.set(r,{id:e,action:n,timerId:i}),de(e,n),n===`steer`&&t(`/api/orchestrate/queue/${encodeURIComponent(e)}/hold`,`POST`,{}).catch(()=>{})}function ge(e,n){let r=_(e,n),i=h.get(r);i&&(clearTimeout(i.timerId),h.delete(r),fe(e,n),n===`steer`&&t(`/api/orchestrate/queue/${encodeURIComponent(e)}/hold`,`DELETE`,{}).catch(()=>{}))}async function _e(e,n){h.delete(_(e,n));let r=n===`steer`?`/api/orchestrate/queue/${encodeURIComponent(e)}/steer`:`/api/orchestrate/queue/${encodeURIComponent(e)}`,i=n===`steer`?`POST`:`DELETE`;if(n===`steer`&&p(`running`),await t(r,i,{})==null){g=g.filter(t=>t.id!==e),v(g),n===`steer`&&V(`steer-fire-miss`).catch(()=>{});return}g=g.filter(t=>t.id!==e),v(g)}function ve(e,t){if(h.has(_(e,t))){ge(e,t);return}he(e,t)}function ye(){let e=document.getElementById(`pendingQueue`);e&&e.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-pending-action]`);if(!t)return;let n=t.closest(`.pending-row`)?.dataset.pendingId;n&&ve(n,t.dataset.pendingAction===`steer`?`steer`:`delete`)})}var be=800,b=64,xe=`CLI-JAW`,x=!1,S=0,C=xe,w=null,T=``,E=!1,D=0;function O(){return navigator}function Se(){return document.visibilityState!==`visible`||!document.hasFocus()}function Ce(e){return e-D<be}function k(){if(w)return w;let e=document.querySelector(`link[rel~="icon"]`);if(e)return w=e,T=e.href||e.getAttribute(`href`)||``,e;let t=document.createElement(`link`);return t.rel=`icon`,document.head.appendChild(t),w=t,E=!0,t}function we(e){let t=document.createElement(`canvas`);t.width=b,t.height=b;let n=t.getContext(`2d`);return n?(n.clearRect(0,0,b,b),n.font=`44px "Apple Color Emoji", "Segoe UI Emoji", sans-serif`,n.textAlign=`center`,n.textBaseline=`middle`,n.fillText(`🦈`,28,36),n.beginPath(),n.arc(50,15,e>1?12:9,0,Math.PI*2),n.fillStyle=`#ff335f`,n.fill(),n.lineWidth=4,n.strokeStyle=`#ffffff`,n.stroke(),e>1&&(n.fillStyle=`#ffffff`,n.font=`bold 15px sans-serif`,n.textAlign=`center`,n.textBaseline=`middle`,n.fillText(String(Math.min(e,9)),50,16)),t.toDataURL(`image/png`)):T}async function Te(e){let t=O();if(typeof t.setAppBadge==`function`)try{await t.setAppBadge(e)}catch{}}async function Ee(){let e=O();if(typeof e.clearAppBadge==`function`)try{await e.clearAppBadge()}catch{}}function De(){document.title=`(${S}) ${C}`;let e=k();e&&(e.href=we(S)),Te(S)}function Oe(){document.title=C}function ke(){if(w){if(E){w.remove(),w=null,E=!1;return}w.href=T}}function Ae(){x||(x=!0,C=document.title||xe,k(),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`&&j()}),window.addEventListener(`focus`,()=>j()))}function A(){if(!x||!Se())return;let e=Date.now();Ce(e)||(D=e,S+=1,De())}function j(){!x||S===0||(S=0,D=0,Oe(),ke(),Ee())}function je(e,t){return!e||!t?!0:e===`all`||e===t}var M=new Map;function Me(e){let t=M.get(e.workflowId)??-1;return e.sequenceId>t}function Ne(e){M.set(e.workflowId,e.sequenceId)}function Pe(e){let t=M.get(e.workflowId)??-1;return t===-1?!1:e.sequenceId>t+1}function Fe(e){if(!Me(e))return{applied:!1,gapDetected:!1};let t=Pe(e);return Ne(e),e.kind===`goal`&&Ie(e),{applied:!0,gapDetected:t}}function Ie(t){e.activeGoal&&t.status===`done`&&t.kind===`goal`&&(e.activeGoal=null)}var N=[`I`,`P`,`A`,`B`,`C`],P=null;function F(e,t,n){let r=N.indexOf(n);if(r<0)return;let i=e.getBoundingClientRect(),a=t.offsetWidth||36,o=document.getElementById(`dot-${n}`);if(!o)return;let s=N[r+1],c=s?document.getElementById(`dot-${s}`):null;if(c){let e=o.getBoundingClientRect(),n=c.getBoundingClientRect(),r=(e.right+n.left)/2;t.style.left=r-i.left-a/2+`px`}else{let e=o.getBoundingClientRect();t.style.left=e.left-i.left+e.width/2-a/2+`px`}}var I={},L=``,R=0,z=null,B=0,Le=!1,Re=0,ze=750,Be=750;async function Ve(e={}){let t=await(await fetch(`${n}/api/orchestrate/snapshot`)).json();L=String(t.orc.scope||``),Qe(t.orc.state),Ke(t.orc.ctx||null),Ge(t.heartbeat||{pending:0,deferredPending:0}),We(t.workers),d(t.runtime.queuePending),ae(t.queued||[]),v(t.queued||[]),e.hydrateRun&&oe(t.activeRun),Ze(),p(t.runtime.busy?`running`:`idle`),t.runtime.busy&&(t.activeRun?.cli===`agy`||t.activeRun?.cli===`kiro-code`)&&u(`${m(t.activeRun.cli)} working...`),r(()=>import(`./employees-_A-p_bZg.js`).then(e=>{typeof e.renderEmployees==`function`&&e.renderEmployees()}),__vite__mapDeps([0]))}function V(e=`manual`,t={}){let n=Date.now();return t.hydrateRun?Ve(t):z||(n-B<ze?Promise.resolve():(B=n,z=Ve(t).catch(t=>{throw console.warn(`[ws] orchestrate snapshot sync failed (${e})`,t),t}).finally(()=>{z=null}),z))}function He(e){ee(e),V(e,{hydrateRun:!0}).finally(()=>{ne(e)}).catch(()=>{})}function H(e){let t=Date.now();e!==`discard`&&t-Re<Be||(Re=t,He(e))}function Ue(){Le||(Le=!0,window.addEventListener(`focus`,()=>{H(`focus`)}),window.addEventListener(`pageshow`,e=>{e.persisted&&H(`pageshow`)}),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`&&H(`visibilitychange`)}),document.addEventListener(`resume`,()=>{H(`resume`)}),`wasDiscarded`in document&&document.wasDiscarded&&H(`discard`),window.addEventListener(`message`,e=>{e.data?.type===`jaw-preview-visibility`&&e.data.visible&&H(`iframe-visible`)}))}function We(e){for(let e of Object.keys(I))delete I[e];for(let t of e)t.state===`running`&&t.phase&&(I[t.agentId]={phase:t.phase,phaseLabel:t.phaseLabel||``})}function Ge(t){let n={pending:Number(t?.pending||0),deferredPending:Number(t?.deferredPending||0),...t?.reason?{reason:t.reason}:{},...t?.policy?{policy:t.policy}:{},...t?.jobId?{jobId:t.jobId}:{},...t?.jobName?{jobName:t.jobName}:{}};e.heartbeatRuntime=n;let r=document.getElementById(`pabcHeartbeatStatus`);if(r)if(n.reason===`pabcd_active`&&n.deferredPending>0){let e=n.jobName?`: ${n.jobName}`:``;r.textContent=`heartbeat deferred (${n.deferredPending})${e}`,r.hidden=!1}else r.textContent=``,r.hidden=!0}function Ke(t){e.orcTaskAnchor=String(t?.taskAnchor||``).trim(),e.orcResolvedSelection=t?.resolvedSelection||null;let n=document.getElementById(`pabcTaskAnchor`);n&&(e.orcTaskAnchor?(n.textContent=`anchor: ${e.orcResolvedSelection?.index?`${e.orcResolvedSelection.index}. `:``}${e.orcTaskAnchor}`,n.hidden=!1):(n.textContent=``,n.hidden=!0),Ye(t?.interview||null))}var U=(()=>{try{return localStorage.getItem(`jaw:interviewCollapsed`)===`1`}catch{return!1}})();function qe(e){U=e;try{localStorage.setItem(`jaw:interviewCollapsed`,e?`1`:`0`)}catch{}let t=document.getElementById(`interviewPanel`);if(!t)return;t.classList.toggle(`collapsed`,e);let n=t.querySelector(`.iv-toggle`);n&&n.setAttribute(`aria-expanded`,String(!e))}function Je(e){let t=e=>{switch(e){case`max`:return 1;case`xhigh`:return .8;case`high`:return .6;case`medium`:return .4;default:return .2}},n=e=>{switch(e){case`max`:return`#2196f3`;case`xhigh`:return`#4caf50`;case`high`:return`#8bc34a`;case`medium`:return`#ff9800`;default:return`#f44336`}},r=[t(e.goal),t(e.constraint),t(e.success),t(e.ontology)],i=1-r.reduce((e,t)=>e+t,0)/r.length,a=Object.values(e).every(e=>e===`max`)||i<=.2?`🟢 Ready`:i<=.4?`🟡 Almost`:`🔴 Needs work`,o=(e,r)=>{let i=t(r);return`<div style="display:flex;align-items:center;gap:6px;font-size:12px">
15
- <span style="width:70px;color:var(--text-secondary)">${e}</span>
16
- <div style="flex:1;height:5px;background:var(--bg-tertiary);border-radius:3px">
17
- <div style="width:${i*100}%;height:100%;background:${n(r)};border-radius:3px;transition:width .3s"></div>
18
- </div>
19
- <span style="width:60px;text-align:right;font-weight:600;font-size:11px">${i.toFixed(1)} ${r.toUpperCase()}</span>
20
- </div>`};return`<div style="display:flex;flex-direction:column;gap:3px;margin:6px 0">
21
- <div style="display:flex;justify-content:space-between;font-size:11px;margin-bottom:2px">
22
- <span style="color:var(--text-secondary)">Ambiguity: ${i.toFixed(2)}</span>
23
- <span>${a}</span>
24
- </div>
25
- ${o(`Goal`,e.goal)}
26
- ${o(`Constraint`,e.constraint)}
27
- ${o(`Success`,e.success)}
28
- ${o(`Ontology`,e.ontology)}
29
- </div>`}function Ye(e){let t=document.getElementById(`interviewPanel`);if(!t)return;if(!e||!e.known.length&&!e.unknown.length){t.hidden=!0;return}t.hidden=!1,t.classList.toggle(`collapsed`,U);let n=e=>{switch(e){case`user_statement`:return`🟢`;case`repo_fact`:return`🔵`;case`inference`:return`🟡`;case`assumption`:return`🟠`;case`default`:return`⚪`;default:return`·`}},r=e.known.map(e=>{if(typeof e==`string`)return`<li class="iv-known">· ${a(e)}</li>`;let t=e,r=n(t.source),i=t.dimension?` <span class="iv-dim">[${t.dimension}]</span>`:``;return`<li class="iv-known">${r} ${a(t.fact)}${i}</li>`}).join(``),i=e.unknown.map(e=>`<li class="iv-unknown">❓ ${a(typeof e==`string`?e:JSON.stringify(e))}</li>`).join(``);t.innerHTML=`
30
- <button type="button" class="iv-toggle" aria-expanded="${!U}" aria-controls="interviewBody" title="인터뷰 트래커 접기/펼치기">
31
- <span class="iv-chevron" aria-hidden="true">▸</span>
32
- <span class="iv-summary">Interview · <span class="iv-known-count">Known ${e.known.length}</span> · <span class="iv-unknown-count">Unknown ${e.unknown.length}</span>${e.known.filter(e=>typeof e==`object`&&e&&`source`in e&&e.source===`assumption`).length>0?` · <span class="iv-assumption-count">⚠️ ${e.known.filter(e=>typeof e==`object`&&e&&`source`in e&&e.source===`assumption`).length} assumptions</span>`:``} · Round ${e.round}</span>
33
- </button>
34
- <div class="iv-body" id="interviewBody">
35
- ${e.assessment?Je(e.assessment):``}
36
- <div class="iv-section"><strong>Known (${e.known.length})</strong><ul>${r}</ul></div>
37
- <div class="iv-section"><strong>Unknown (${e.unknown.length})</strong><ul>${i}</ul></div>
38
- </div>
39
- `,t.dataset.toggleBound||(t.dataset.toggleBound=`1`,t.addEventListener(`click`,e=>{e.target.closest(`.iv-toggle`)&&qe(!U)}))}function Xe(e,t){let n=document.getElementById(`budgetPanel`);if(!n)return;if(!e||t!==`B`){n.hidden=!0;return}n.hidden=!1;let r=(e,t,n)=>{let r=n>0?Math.min(t/n*100,100):0;return`<div style="display:flex;align-items:center;gap:6px;font-size:12px">
40
- <span style="width:70px;color:var(--text-secondary)">${e}</span>
41
- <div style="flex:1;height:5px;background:var(--bg-tertiary);border-radius:3px">
42
- <div style="width:${r}%;height:100%;background:${r>=100?`#f44336`:r>=66?`#ff9800`:`#4caf50`};border-radius:3px"></div>
43
- </div>
44
- <span style="width:30px;text-align:right;font-size:11px">${t}/${n}</span>
45
- </div>`};n.innerHTML=`<div style="font-size:11px;font-weight:600;margin-bottom:4px;color:var(--text-secondary)">Build Budget</div>
46
- ${r(`Workers`,e.spent.workerDispatches,e.maxWorkerDispatches)}
47
- ${r(`Self-heal`,e.spent.selfHealRetries,e.maxSelfHealRetries)}
48
- ${r(`Verify`,e.spent.verificationRounds,e.maxVerificationRounds)}`}async function Ze(){try{let t=await fetch(`${n}/api/goal`);if(!t.ok)return;let r=await t.json();r.goal?e.activeGoal={id:r.goal.id,objective:r.goal.objective,status:r.goal.status,createdAt:r.goal.createdAt,updatedAt:r.goal.updatedAt,lastCheckpointSummary:r.goal.lastCheckpoint?.summary,nextAction:r.goal.lastCheckpoint?.nextAction}:e.activeGoal=null,W()}catch{}}function W(){let t=document.getElementById(`goalCockpit`);if(!t)return;let n=e.activeGoal;if(!n||n.status===`complete`||n.status===`cancelled`){t.hidden=!0,t.innerHTML=``;return}t.hidden=!1,t.replaceChildren();let r=n.status===`paused`?`paused`:n.status===`blocked`?`blocked`:`active`,i=document.createElement(`span`);i.className=`goal-objective`,i.title=n.objective,i.textContent=n.objective;let a=document.createElement(`span`);if(a.className=`goal-status goal-status--${r}`,a.textContent=n.status,t.append(i,a),n.nextAction){let e=document.createElement(`span`);e.className=`goal-next`,e.textContent=n.nextAction,t.append(e)}}function Qe(t,n){let r=new Set([`IDLE`,`I`,`P`,`A`,`B`,`C`,`D`]).has(t)?t:`IDLE`;if(e.orcState=r,r===`IDLE`||r===`D`)document.body.removeAttribute(`data-orc-state`),document.body.style.removeProperty(`--orc-glow`);else{document.body.setAttribute(`data-orc-state`,r);let e=`--orc-glow-${r}`,t=getComputedStyle(document.documentElement).getPropertyValue(e).trim();document.body.style.setProperty(`--orc-glow`,t)}document.body.classList.add(`orc-pulse`),setTimeout(()=>document.body.classList.remove(`orc-pulse`),700);let i=document.getElementById(`orcStateBadge`);i&&(i.textContent={IDLE:``,I:`INTERVIEW`,P:`PLAN`,A:`AUDIT`,B:`BUILD`,C:`CHECK`,D:`DONE`}[r],i.style.display=r===`IDLE`?`none`:`inline-block`);let a=document.getElementById(`pabcRoadmap`),o=document.getElementById(`sharkRunner`),s=document.getElementById(`pabcBrand`);if(a&&o){if(!a.dataset.resizeObserved){a.dataset.resizeObserved=`1`,new ResizeObserver(()=>{P&&o.classList.contains(`running`)&&F(a,o,P)}).observe(a);let e=0;window.addEventListener(`resize`,()=>{cancelAnimationFrame(e),e=requestAnimationFrame(()=>{P&&o.classList.contains(`running`)&&F(a,o,P)})})}if(r===`IDLE`)a.classList.remove(`visible`,`shimmer-out`),o.classList.remove(`running`),P=null;else if(r===`D`){N.forEach(e=>{let t=document.getElementById(`dot-${e}`);t&&(t.className=`pabc-dot done`,t.setAttribute(`data-phase`,e))});for(let e=0;e<N.length;e++){let t=document.getElementById(`pabc-conn-${e}`);t&&(t.className=`pabc-connector done`)}o.classList.remove(`running`),P=null,a.classList.add(`shimmer-out`),setTimeout(()=>a.classList.remove(`visible`,`shimmer-out`),1e3)}else{a.classList.remove(`shimmer-out`),a.classList.add(`visible`),o.classList.add(`running`);let e=N.indexOf(r);N.forEach((t,n)=>{let r=document.getElementById(`dot-${t}`);r&&(r.className=`pabc-dot ${n<e?`done`:n===e?`active`:`future`}`,r.setAttribute(`data-phase`,t))});for(let t=0;t<N.length;t++){let n=document.getElementById(`pabc-conn-${t}`);n&&(n.className=`pabc-connector ${t<e?`done`:``}`)}P=r,requestAnimationFrame(()=>F(a,o,r))}s&&n&&(s.textContent=n)}}function G(){Ue();let t=`ws://${location.host}`;e.ws=new WebSocket(`${t}${n}/?lang=${o()}`),e.ws.onmessage=t=>{let n;try{n=JSON.parse(t.data)}catch{console.warn(`[ws] malformed message:`,t.data);return}if(!n||typeof n!=`object`||typeof n.type!=`string`){console.warn(`[ws] invalid message shape:`,n);return}if(n.type===`agent_status`)n.running===void 0?(p(n.status||`idle`),n.status===`running`&&(n.cli===`agy`||n.cli===`kiro-code`)&&u(`${m(n.cli)} working...`)):(p(n.running?`running`:`idle`),n.running&&(n.cli===`agy`||n.cli===`kiro-code`)&&u(`${m(n.cli)} working...`)),n.agentId&&n.phase&&(I[n.agentId]={phase:n.phase,phaseLabel:n.phaseLabel||``},r(()=>import(`./employees-_A-p_bZg.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0])));else if(n.type===`queue_update`)d(n.pending||0),Array.isArray(n.queued)&&v(n.queued),V(`queue_update`).catch(()=>{});else if(n.type===`worklog_created`)l(`${s.clipboard} Worklog: ${a(n.path||``)}`);else if(n.type===`round_start`){let e=n.agentPhases||n.subtasks||[],t=e.map(e=>a(e.agent||e.name||``)).join(`, `);l(i(`ws.roundStart`,{round:n.round||0,count:e.length,names:t}))}else if(n.type===`round_done`)n.action===`complete`?l(i(`ws.roundDone`,{round:n.round||0})):n.action===`next`?l(i(`ws.roundNext`,{round:n.round||0})):l(i(`ws.roundRetry`,{round:n.round||0}));else if(n.type===`agent_tool`){let e=n.toolType===`thinking`?`thinking`:n.toolType===`search`?`search`:n.toolType===`subagent`?`subagent`:`tool`;ie({id:`step-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,type:e,icon:n.icon||s.tool,rawIcon:n.rawIcon||n.icon||``,label:n.label||``,isEmployee:n.isEmployee===!0,detail:n.detail||``,stepRef:n.stepRef||``,traceRunId:n.traceRunId||``,traceSeq:n.traceSeq,detailAvailable:n.detailAvailable,detailBytes:n.detailBytes,rawRetentionStatus:n.rawRetentionStatus,status:n.status||`running`,startTime:Date.now()})}else if(n.type===`agent_output`||n.type===`agent_chunk`)ce(n.text||``);else if(n.type===`agent_retry`){let e=Number(n.delay??0),t=n.reason,r=a(String(t||`429`));l(i(e>0?`ws.retry`:`ws.retryNow`,{cli:a(n.cli||``),reason:r,delay:e}),`tool-activity`)}else if(n.type===`agent_fallback`)l(i(`ws.fallback`,{from:a(n.from||``),to:a(n.to||``)}),`tool-activity`);else if(n.type===`agent_smoke`)l(`${s.warning} ${a(n.cli||`agent`)}: smoke response detected — auto-continuing`,`tool-activity`);else if(n.type===`goal_done`)e.activeGoal=null,W(),l(`🎯 Goal completed${n.source===`ai_output`?` (detected from AI output)`:``}`,`tool-activity`);else if(n.type===`goal_cancel`)e.activeGoal=null,W(),l(`🎯 Goal cancelled`,`tool-activity`);else if(n.type===`schedule_wakeup`)l(`⏰ Wakeup scheduled in ${n.delaySeconds}s — ${a(String(n.reason||``))}`,`tool-activity`);else if(n.type===`goal_continuation_limit`)l(`⚠️ Goal continuation limit reached (${n.attempts} attempts)`,`tool-activity`);else if(n.type===`goal_continuation`)l(`🎯 Active goal — auto-continuing`,`tool-activity`);else if(n.type===`workflow_event`){let e=n.event;e&&Fe(e)}else if(n.type===`agent_done`)f(n.text||``,n.toolLog),A();else if(n.type===`orchestrate_done`)f(n.text||``),A();else if(n.type===`clear`){c(),se(),te().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``),r(()=>import(`./idb-cache-5H89a4l8.js`).then(e=>e.clearCache()),[]).catch(()=>{})}else if(n.type===`session_reset`)l(`${s.refresh} Session reset — history preserved`,`tool-activity`);else if(n.type===`agent_added`||n.type===`agent_updated`||n.type===`agent_deleted`)r(()=>import(`./employees-_A-p_bZg.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0]));else if(n.type===`heartbeat_pending`){let e={pending:n.pending||0,deferredPending:n.deferredPending||0};n.reason!==void 0&&(e.reason=n.reason),n.policy!==void 0&&(e.policy=n.policy),n.jobId!==void 0&&(e.jobId=n.jobId),n.jobName!==void 0&&(e.jobName=n.jobName),Ge(e)}else if(n.type===`orc_state`){if(!je(n.scope,L))return;Qe(typeof n.state==`string`?n.state:`IDLE`,n.title),Ke({taskAnchor:n.taskAnchor||null,resolvedSelection:n.resolvedSelection||null,interview:n.interview||null}),Xe(n.buildBudget||null,typeof n.state==`string`?n.state:`IDLE`)}else n.type===`memory_status`?r(()=>import(`./memory-D1RKYvyu.js`).then(e=>e.refreshMemorySidebar()),__vite__mapDeps([0])):n.type===`steer_started`?p(`running`):n.type===`new_message`&&(n.source===`telegram`||n.source===`discord`||n.fromQueue===!0)?re(n.role===`assistant`?`agent`:n.role||`user`,n.content||``,n.cli):n.type===`system_notice`?l(`ℹ️ ${a(n.text||``)}`,`tool-activity`):n.type===`worker_stalled`?l(`⚠️ Worker stalled: ${a(n.employeeName||n.agentId||``)}`,`tool-activity`):n.type===`worker_disconnected`?l(`🔌 Worker disconnected: ${a(n.agentId||``)} (exit ${a(String(n.exitCode??`?`))})`,`tool-activity`):n.type===`worker_timeout`?l(`⏱️ Worker timed out: ${a(n.employeeName||n.agentId||``)}`,`tool-activity`):n.type===`alert_escalation`?l(a(n.message||``),`tool-activity`):n.type===`schedule_wakeup_failed`?l(`⚠️ Wakeup failed — ${a(String(n.reason||``))}: ${a(n.error||``)}`,`tool-activity`):n.type===`goal_continuation_failed`?l(`⚠️ Goal continuation failed: ${a(n.error||``)}`,`tool-activity`):n.type===`settings_change`&&V(`settings_change`).catch(()=>{})},e.ws.onopen=()=>{console.log(`[ws] connected`);let e=Date.now()-R<1e4;r(()=>import(`./ui-HtSKByR3.js`).then(async t=>{if(t.cleanupToolActivity(),!e)try{await t.loadMessages(),R=Date.now()}catch(e){console.error(`[ws] loadMessages failed`,e)}V(`reconnect`,{hydrateRun:!0}).catch(()=>{}).finally(()=>t.reconcileChatBottomAfterRestore(`reconnect`))}),__vite__mapDeps([0]))},e.ws.onclose=()=>{console.log(`[ws] disconnected, reconnecting in 2s...`),r(()=>import(`./ui-HtSKByR3.js`).then(e=>e.cleanupToolActivity()),__vite__mapDeps([0])),p(`idle`),l(`${s.exec} ${i(`ws.disconnected`)}`,`tool-activity`),setTimeout(G,2e3)}}function $e(e){return I[e]||null}var K=`sidebarState`,q=900,et=768;function J(){return window.innerWidth<=et}function Y(){document.body.classList.remove(`left-expanded`,`right-expanded`)}function tt(e){let t=`${e}-expanded`,n=e===`left`?`right-expanded`:`left-expanded`,r=!document.body.classList.contains(t);document.body.classList.remove(n),document.body.classList.toggle(t,r)}function nt(){let e={};try{e=JSON.parse(localStorage.getItem(K)||`{}`)}catch{}e.left&&document.body.classList.add(`left-collapsed`),e.right&&document.body.classList.add(`right-collapsed`);let t=J();document.getElementById(`toggleLeft`)?.addEventListener(`click`,rt),document.getElementById(`toggleRight`)?.addEventListener(`click`,it),window.addEventListener(`resize`,()=>{let e=J();if(window.innerWidth>q){Y();let e={};try{e=JSON.parse(localStorage.getItem(K)||`{}`)}catch{}document.body.classList.toggle(`left-collapsed`,!!e.left),document.body.classList.toggle(`right-collapsed`,!!e.right)}else document.body.classList.remove(`left-collapsed`,`right-collapsed`),e!==t&&Y();t=e,Q()}),window.innerWidth<=q&&(document.body.classList.remove(`left-collapsed`,`right-collapsed`),J()&&Y()),Q()}function X(){return window.innerWidth<=q}function rt(){X()?tt(`left`):document.body.classList.toggle(`left-collapsed`),$(),Q()}function it(){X()?tt(`right`):document.body.classList.toggle(`right-collapsed`),Z()&&document.getElementById(`tabAgents`)?.classList.contains(`active`)&&r(()=>import(`./employees-_A-p_bZg.js`).then(e=>e.loadEmployees(!0)),__vite__mapDeps([0])),$(),Q()}function at(){return X()?document.body.classList.contains(`left-expanded`):!document.body.classList.contains(`left-collapsed`)}function Z(){return X()?document.body.classList.contains(`right-expanded`):!document.body.classList.contains(`right-collapsed`)}function Q(){let e=document.getElementById(`toggleLeft`),t=document.getElementById(`toggleRight`);e&&(e.innerHTML=at()?s.chevronLeft:s.chevronRight),t&&(t.innerHTML=Z()?s.chevronRight:s.chevronLeft)}function $(){localStorage.setItem(K,JSON.stringify({left:document.body.classList.contains(`left-collapsed`),right:document.body.classList.contains(`right-collapsed`)}))}export{G as a,j as c,it as i,Ae as l,Z as n,$e as o,rt as r,V as s,nt as t,ye as u};
@@ -1 +0,0 @@
1
- import{n as e}from"./skills-BDVLIrVT.js";export{e as loadSkills};
@@ -1 +0,0 @@
1
- import{a as e}from"./slash-commands-C5da3q1p.js";export{e as loadCommands};