cli-jaw 1.5.0 → 1.6.0

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 (225) hide show
  1. package/README.ko.md +2 -2
  2. package/README.md +21 -2
  3. package/README.zh-CN.md +2 -2
  4. package/dist/bin/cli-jaw.js +5 -1
  5. package/dist/bin/cli-jaw.js.map +1 -1
  6. package/dist/bin/commands/dispatch.js +50 -0
  7. package/dist/bin/commands/dispatch.js.map +1 -0
  8. package/dist/lib/mcp-sync.js +1 -1
  9. package/dist/lib/mcp-sync.js.map +1 -1
  10. package/dist/lib/upload.js +14 -1
  11. package/dist/lib/upload.js.map +1 -1
  12. package/dist/server.js +53 -40
  13. package/dist/server.js.map +1 -1
  14. package/dist/src/agent/events.js +72 -13
  15. package/dist/src/agent/events.js.map +1 -1
  16. package/dist/src/agent/spawn.js +65 -24
  17. package/dist/src/agent/spawn.js.map +1 -1
  18. package/dist/src/cli/commands.js +6 -6
  19. package/dist/src/cli/commands.js.map +1 -1
  20. package/dist/src/cli/handlers.js +11 -9
  21. package/dist/src/cli/handlers.js.map +1 -1
  22. package/dist/src/cli/registry.js +7 -1
  23. package/dist/src/cli/registry.js.map +1 -1
  24. package/dist/src/core/config.js +15 -8
  25. package/dist/src/core/config.js.map +1 -1
  26. package/dist/src/core/db.js +18 -3
  27. package/dist/src/core/db.js.map +1 -1
  28. package/dist/src/core/employees.js +34 -0
  29. package/dist/src/core/employees.js.map +1 -0
  30. package/dist/src/discord/bot.js +72 -9
  31. package/dist/src/discord/bot.js.map +1 -1
  32. package/dist/src/discord/commands.js +12 -8
  33. package/dist/src/discord/commands.js.map +1 -1
  34. package/dist/src/orchestrator/distribute.js +41 -24
  35. package/dist/src/orchestrator/distribute.js.map +1 -1
  36. package/dist/src/orchestrator/gateway.js +3 -1
  37. package/dist/src/orchestrator/gateway.js.map +1 -1
  38. package/dist/src/orchestrator/pipeline.js +93 -27
  39. package/dist/src/orchestrator/pipeline.js.map +1 -1
  40. package/dist/src/orchestrator/research.js +5 -5
  41. package/dist/src/orchestrator/research.js.map +1 -1
  42. package/dist/src/orchestrator/scope.js +55 -0
  43. package/dist/src/orchestrator/scope.js.map +1 -0
  44. package/dist/src/orchestrator/state-machine.js +23 -21
  45. package/dist/src/orchestrator/state-machine.js.map +1 -1
  46. package/dist/src/orchestrator/worker-registry.js +9 -2
  47. package/dist/src/orchestrator/worker-registry.js.map +1 -1
  48. package/dist/src/prompt/builder.js +78 -37
  49. package/dist/src/prompt/builder.js.map +1 -1
  50. package/dist/src/prompt/templates/a1-system.md +40 -0
  51. package/dist/src/prompt/templates/employee.md +10 -1
  52. package/dist/src/prompt/templates/orchestration.md +17 -1
  53. package/dist/src/telegram/bot.js +7 -1
  54. package/dist/src/telegram/bot.js.map +1 -1
  55. package/package.json +4 -2
  56. package/public/assets/fonts/GeistVF.woff2 +0 -0
  57. package/public/assets/fonts/JetBrainsMono-Variable.woff2 +0 -0
  58. package/public/assets/providers/claude-color.svg +1 -0
  59. package/public/assets/providers/claude.svg +1 -0
  60. package/public/assets/providers/copilot-color.svg +1 -0
  61. package/public/assets/providers/copilot.svg +1 -0
  62. package/public/assets/providers/discord.svg +1 -0
  63. package/public/assets/providers/gemini-color.svg +1 -0
  64. package/public/assets/providers/gemini.svg +1 -0
  65. package/public/assets/providers/openai.svg +1 -0
  66. package/public/assets/providers/opencode.svg +1 -0
  67. package/public/assets/providers/telegram.svg +1 -0
  68. package/public/css/chat.css +79 -51
  69. package/public/css/diagram.css +348 -0
  70. package/public/css/layout.css +33 -10
  71. package/public/css/markdown.css +64 -18
  72. package/public/css/modals.css +3 -3
  73. package/public/css/orc-state.css +9 -9
  74. package/public/css/sidebar.css +37 -3
  75. package/public/css/tool-ui.css +46 -11
  76. package/public/css/variables.css +63 -63
  77. package/public/dist/assets/api-Bbmmo0o1.js +1 -0
  78. package/public/dist/assets/architecture-YZFGNWBL-BxiHqtOH.js +1 -0
  79. package/public/dist/assets/architectureDiagram-Q4EWVU46-CJTGDw5p.js +1 -0
  80. package/public/dist/assets/blockDiagram-DXYQGD6D-Btl5Y-Er.js +1 -0
  81. package/public/dist/assets/c4Diagram-AHTNJAMY-sDfjW4ZF.js +1 -0
  82. package/public/dist/assets/classDiagram-6PBFFD2Q-ByCgggL2.js +1 -0
  83. package/public/dist/assets/classDiagram-v2-HSJHXN6E-t1amaXkU.js +1 -0
  84. package/public/dist/assets/constants-C8_0OtK2.js +1 -0
  85. package/public/dist/assets/cose-bilkent-S5V4N54A-eOSFGdaE.js +1 -0
  86. package/public/dist/assets/dagre-KV5264BT-OCB5j8Q6.js +1 -0
  87. package/public/dist/assets/diagram-5BDNPKRD-C-4fgK5P.js +1 -0
  88. package/public/dist/assets/diagram-G4DWMVQ6-C6vmHKDV.js +1 -0
  89. package/public/dist/assets/diagram-MMDJMWI5-BMCo_wmt.js +1 -0
  90. package/public/dist/assets/diagram-TYMM5635-DaCLdttJ.js +1 -0
  91. package/public/dist/assets/employees-D5n7mX5v.js +39 -0
  92. package/public/dist/assets/erDiagram-SMLLAGMA-BiTRdm5s.js +1 -0
  93. package/public/dist/assets/flowDiagram-DWJPFMVM-sv6jVi0d.js +1 -0
  94. package/public/dist/assets/ganttDiagram-T4ZO3ILL-jCP3OW23.js +1 -0
  95. package/public/dist/assets/gitGraph-7Q5UKJZL-BIeKLxpm.js +1 -0
  96. package/public/dist/assets/gitGraphDiagram-UUTBAWPF-CokylnbW.js +1 -0
  97. package/public/dist/assets/index-Br2UdKlR.css +1 -0
  98. package/public/dist/assets/index-CmAU0d96.js +49 -0
  99. package/public/dist/assets/info-OMHHGYJF-CIEl5dWF.js +1 -0
  100. package/public/dist/assets/infoDiagram-42DDH7IO-BBnK1Bh2.js +1 -0
  101. package/public/dist/assets/ishikawaDiagram-UXIWVN3A-qXIz0VhS.js +1 -0
  102. package/public/dist/assets/journeyDiagram-VCZTEJTY-BdrOLof3.js +1 -0
  103. package/public/dist/assets/kanban-definition-6JOO6SKY-CcX7CE04.js +1 -0
  104. package/public/dist/assets/mermaid.core-BoxIvw7E.js +1 -0
  105. package/public/dist/assets/mindmap-definition-QFDTVHPH-CdXARskX.js +1 -0
  106. package/public/dist/assets/packet-4T2RLAQJ-Bz4ZwYZ3.js +1 -0
  107. package/public/dist/assets/pie-ZZUOXDRM-AtGL3wZ2.js +1 -0
  108. package/public/dist/assets/pieDiagram-DEJITSTG-B5SOq9Yr.js +1 -0
  109. package/public/dist/assets/quadrantDiagram-34T5L4WZ-D0uNWgpI.js +1 -0
  110. package/public/dist/assets/radar-PYXPWWZC-AbJSfeqB.js +1 -0
  111. package/public/dist/assets/render-C8N0rp4L.js +25 -0
  112. package/public/dist/assets/requirementDiagram-MS252O5E-62td6IQ-.js +1 -0
  113. package/public/dist/assets/sankeyDiagram-XADWPNL6-Crg_02iC.js +1 -0
  114. package/public/dist/assets/sequenceDiagram-FGHM5R23-fbCocZHj.js +1 -0
  115. package/public/dist/assets/settings-BJR-IGM5.js +41 -0
  116. package/public/dist/assets/settings-Dm6OnPmY.js +1 -0
  117. package/public/dist/assets/skills-D6jv9AIs.js +1 -0
  118. package/public/dist/assets/skills-uywskdFh.js +12 -0
  119. package/public/dist/assets/slash-commands-CCDonT40.js +1 -0
  120. package/public/dist/assets/{slash-commands-DMsE88bu.js → slash-commands-DWvL-VDU.js} +1 -1
  121. package/public/dist/assets/stateDiagram-FHFEXIEX-Gy3DhXxQ.js +1 -0
  122. package/public/dist/assets/stateDiagram-v2-QKLJ7IA2-DJc-FW9O.js +1 -0
  123. package/public/dist/assets/timeline-definition-GMOUNBTQ-B3cA9DgY.js +1 -0
  124. package/public/dist/assets/treeView-SZITEDCU-Cn58DIbB.js +1 -0
  125. package/public/dist/assets/treemap-W4RFUUIX-DPcYjDzH.js +1 -0
  126. package/public/dist/assets/ui-C1daR00l.js +1 -0
  127. package/public/dist/assets/ui-D-oFkXed.js +131 -0
  128. package/public/dist/assets/vendor-icons-1Ec7ZWcT.js +1 -0
  129. package/public/dist/assets/{vendor-mermaid-COidH9HB.js → vendor-mermaid-lvHqQdfg.js} +4 -4
  130. package/public/dist/assets/vennDiagram-DHZGUBPP-DkBfxilo.js +1 -0
  131. package/public/dist/assets/wardley-RL74JXVD-6Dg0PJ4H.js +1 -0
  132. package/public/dist/assets/wardleyDiagram-NUSXRM2D-Dsntl_vy.js +1 -0
  133. package/public/dist/assets/ws-Dnn8HG8B.js +2 -0
  134. package/public/dist/assets/xychartDiagram-5P7HB3ND-B_McB5GE.js +1 -0
  135. package/public/dist/index.html +63 -55
  136. package/public/index.html +62 -53
  137. package/public/js/constants.ts +8 -2
  138. package/public/js/diagram/iframe-renderer.ts +559 -0
  139. package/public/js/diagram/types.ts +129 -0
  140. package/public/js/diagram/widget-validator.ts +82 -0
  141. package/public/js/features/chat.ts +24 -12
  142. package/public/js/features/employees.ts +3 -2
  143. package/public/js/features/heartbeat.ts +4 -3
  144. package/public/js/features/memory.ts +4 -3
  145. package/public/js/features/process-block.ts +12 -11
  146. package/public/js/features/settings-cli-status.ts +10 -7
  147. package/public/js/features/settings-core.ts +13 -3
  148. package/public/js/features/settings-discord.ts +9 -0
  149. package/public/js/features/settings-mcp.ts +8 -7
  150. package/public/js/features/settings-stt.ts +4 -4
  151. package/public/js/features/settings-templates.ts +10 -8
  152. package/public/js/features/settings-types.ts +1 -1
  153. package/public/js/features/settings.ts +1 -1
  154. package/public/js/features/sidebar.ts +4 -2
  155. package/public/js/features/skills.ts +4 -3
  156. package/public/js/features/theme.ts +4 -0
  157. package/public/js/features/tool-ui.ts +6 -5
  158. package/public/js/features/voice-recorder.ts +2 -1
  159. package/public/js/icons.ts +257 -0
  160. package/public/js/main.ts +9 -3
  161. package/public/js/provider-icons.ts +88 -0
  162. package/public/js/render.ts +493 -30
  163. package/public/js/streaming-render.ts +3 -3
  164. package/public/js/ui.ts +38 -18
  165. package/public/js/ws.ts +17 -10
  166. package/public/locales/en.json +89 -88
  167. package/public/locales/ko.json +89 -88
  168. package/scripts/release-preview.sh +1 -1
  169. package/public/dist/assets/api-BlPw3bUI.js +0 -1
  170. package/public/dist/assets/architecture-YZFGNWBL-BkS7SZQi.js +0 -1
  171. package/public/dist/assets/architectureDiagram-Q4EWVU46-Dl3iBKeR.js +0 -1
  172. package/public/dist/assets/blockDiagram-DXYQGD6D-DPr4D17p.js +0 -1
  173. package/public/dist/assets/c4Diagram-AHTNJAMY-CfoxJtDk.js +0 -1
  174. package/public/dist/assets/classDiagram-6PBFFD2Q-BOAdHnnB.js +0 -1
  175. package/public/dist/assets/classDiagram-v2-HSJHXN6E-B2QCJXWC.js +0 -1
  176. package/public/dist/assets/constants-DshMUJbo.js +0 -1
  177. package/public/dist/assets/cose-bilkent-S5V4N54A-CA14jk7w.js +0 -1
  178. package/public/dist/assets/dagre-KV5264BT-BVwNaSwC.js +0 -1
  179. package/public/dist/assets/diagram-5BDNPKRD-CHqIAvdc.js +0 -1
  180. package/public/dist/assets/diagram-G4DWMVQ6-DxvsCvTP.js +0 -1
  181. package/public/dist/assets/diagram-MMDJMWI5-DqOPO7dl.js +0 -1
  182. package/public/dist/assets/diagram-TYMM5635-C9xMWPQn.js +0 -1
  183. package/public/dist/assets/employees-CFRlsbHm.js +0 -39
  184. package/public/dist/assets/erDiagram-SMLLAGMA-BTmpfRkm.js +0 -1
  185. package/public/dist/assets/flowDiagram-DWJPFMVM-DZBSQAKA.js +0 -1
  186. package/public/dist/assets/ganttDiagram-T4ZO3ILL-TAEMCRbT.js +0 -1
  187. package/public/dist/assets/gitGraph-7Q5UKJZL-bbxndRNA.js +0 -1
  188. package/public/dist/assets/gitGraphDiagram-UUTBAWPF-CBxtx0MB.js +0 -1
  189. package/public/dist/assets/index-1Gg-6jeC.css +0 -1
  190. package/public/dist/assets/index-CQHqXjrK.js +0 -49
  191. package/public/dist/assets/info-OMHHGYJF-DRXq_Ywr.js +0 -1
  192. package/public/dist/assets/infoDiagram-42DDH7IO-C7FFwX4m.js +0 -1
  193. package/public/dist/assets/ishikawaDiagram-UXIWVN3A-DEZJE79j.js +0 -1
  194. package/public/dist/assets/journeyDiagram-VCZTEJTY-ZHLiY6GV.js +0 -1
  195. package/public/dist/assets/kanban-definition-6JOO6SKY-NP7pY7ML.js +0 -1
  196. package/public/dist/assets/mermaid.core-CHuluSlD.js +0 -1
  197. package/public/dist/assets/mindmap-definition-QFDTVHPH-Bd1OgfN_.js +0 -1
  198. package/public/dist/assets/packet-4T2RLAQJ-CGu8ST97.js +0 -1
  199. package/public/dist/assets/pie-ZZUOXDRM-CDG65mhS.js +0 -1
  200. package/public/dist/assets/pieDiagram-DEJITSTG-BbMBHLDM.js +0 -1
  201. package/public/dist/assets/quadrantDiagram-34T5L4WZ-CDCDgI1e.js +0 -1
  202. package/public/dist/assets/radar-PYXPWWZC-1gS-6ylu.js +0 -1
  203. package/public/dist/assets/render-YHvL5VM_.js +0 -6
  204. package/public/dist/assets/requirementDiagram-MS252O5E-DkmvOtYz.js +0 -1
  205. package/public/dist/assets/sankeyDiagram-XADWPNL6-GNcXIYsL.js +0 -1
  206. package/public/dist/assets/sequenceDiagram-FGHM5R23-BFrw2n6x.js +0 -1
  207. package/public/dist/assets/settings-BQF_u5px.js +0 -37
  208. package/public/dist/assets/settings-C5Q9IPjJ.js +0 -1
  209. package/public/dist/assets/skills-9Pd2rOw-.js +0 -1
  210. package/public/dist/assets/skills-BI7sQAdk.js +0 -12
  211. package/public/dist/assets/slash-commands-FMpJzlDB.js +0 -1
  212. package/public/dist/assets/stateDiagram-FHFEXIEX-BLgKnllT.js +0 -1
  213. package/public/dist/assets/stateDiagram-v2-QKLJ7IA2-CbzuWsSa.js +0 -1
  214. package/public/dist/assets/timeline-definition-GMOUNBTQ-CcZTJ3gL.js +0 -1
  215. package/public/dist/assets/treeView-SZITEDCU-BDqBsaH1.js +0 -1
  216. package/public/dist/assets/treemap-W4RFUUIX-BaWHA3Di.js +0 -1
  217. package/public/dist/assets/ui-BukgLHuh.js +0 -29
  218. package/public/dist/assets/ui-Bvz1JfTE.js +0 -1
  219. package/public/dist/assets/vennDiagram-DHZGUBPP-BWV_j1bh.js +0 -1
  220. package/public/dist/assets/wardley-RL74JXVD-C7gKA3d7.js +0 -1
  221. package/public/dist/assets/wardleyDiagram-NUSXRM2D-BUoq_wug.js +0 -1
  222. package/public/dist/assets/ws-S_AZgx7L.js +0 -2
  223. package/public/dist/assets/xychartDiagram-5P7HB3ND-PvT5Ec82.js +0 -1
  224. /package/public/dist/assets/{api-B8XKQ4OT.js → api-Ci-lgwRp.js} +0 -0
  225. /package/public/dist/assets/{locale-BjoAcbis.js → locale-DIXc-_34.js} +0 -0
@@ -0,0 +1 @@
1
+ :root{--bg:oklch(7% .01 280);--surface:oklch(11% .01 280);--border:oklch(17% .01 270);--text:oklch(92% .01 270);--text-dim:oklch(53% .02 270);--accent:oklch(78% .14 200);--accent2:oklch(70% .13 200);--green:oklch(78% .16 150);--user-bg:oklch(15% .02 270);--agent-bg:oklch(9% .01 270);--status-idle-bg:oklch(15% .02 150);--status-running-bg:oklch(17% .02 75);--status-running-color:oklch(81% .14 85);--code-bg:oklch(9% .01 250);--link-color:oklch(72% .12 250);--table-border:oklch(70% .13 200);--stop-btn:var(--error);--stop-btn-hover:oklch(57% .21 25);--toggle-off:oklch(35% 0 0);--toggle-on:oklch(100% 0 0);--delete-color:var(--error);--code-label-color:oklch(66% .01 250);--modal-bg:oklch(0% 0 0/.6);--font-display:"Chakra Petch", "Outfit", "Pretendard", "Apple SD Gothic Neo", "Malgun Gothic", system-ui, sans-serif;--font-ui:"Outfit", "Pretendard", "Apple SD Gothic Neo", "Malgun Gothic", -apple-system, system-ui, sans-serif;--font-mono:"SF Mono", "JetBrains Mono", "Fira Code", monospace;--sidebar-left-w:220px;--sidebar-right-w:260px;--sidebar-collapsed-w:48px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--text-xs:11px;--text-sm:13px;--text-base:16px;--text-md:17px;--text-lg:19px;--text-xl:22px;--text-2xl:26px;--text-3xl:34px;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--radius-full:9999px;--ease-out-expo:cubic-bezier(.16, 1, .3, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1);--duration-fast:.15s;--duration-base:.25s;--duration-slow:.4s;--error:oklch(63% .21 25);--error-dim:oklch(63% .21 25/.15);--success:oklch(72% .17 150);--success-dim:oklch(72% .17 150/.15);--warning:oklch(78% .16 75);--warning-dim:oklch(78% .16 75/.15);--noise-opacity:.03;--scanline-pct:1.2%;--glow-strength:5%;--toggle-w:36px;--toggle-h:20px;--toggle-knob:16px;--orc-glow:transparent;--orc-glow-P:oklch(63% .17 260);--orc-glow-A:oklch(78% .16 75);--orc-glow-B:oklch(72% .17 150);--orc-glow-C:oklch(60% .2 300);--orc-glow-D:transparent}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-ui);background:var(--bg);color:var(--text);grid-template-columns:var(--sidebar-left-w) 1fr var(--sidebar-right-w);will-change:grid-template-columns;height:100vh;transition:grid-template-columns .2s cubic-bezier(.4,0,.2,1);display:grid}body.left-collapsed{--sidebar-left-w:var(--sidebar-collapsed-w)}body.right-collapsed{--sidebar-right-w:var(--sidebar-collapsed-w)}[data-theme=light]{--bg:oklch(97% 0 0);--surface:oklch(100% 0 0);--border:oklch(90% .01 270);--text:oklch(15% .02 270);--text-dim:oklch(53% .02 270);--accent:oklch(62% .11 200);--accent2:oklch(52% .1 200);--green:oklch(62% .16 150);--user-bg:oklch(95% .01 270);--agent-bg:oklch(98% .005 270);--status-idle-bg:oklch(96% .04 150);--status-running-bg:oklch(97% .06 90);--status-running-color:oklch(56% .12 70);--code-bg:oklch(96% .005 250);--link-color:oklch(56% .18 260);--table-border:oklch(56% .18 260);--stop-btn:var(--error);--stop-btn-hover:oklch(48% .19 25);--toggle-off:oklch(80% 0 0);--toggle-on:oklch(100% 0 0);--delete-color:var(--error);--code-label-color:oklch(53% .02 270);--modal-bg:oklch(0% 0 0/.3);--error:oklch(57% .21 25);--error-dim:oklch(57% .21 25/.15);--success:oklch(62% .16 150);--success-dim:oklch(62% .16 150/.15);--warning:oklch(63% .15 70);--warning-dim:oklch(63% .15 70/.15);--noise-opacity:.015;--scanline-pct:0.8%;--glow-strength:3%;--orc-glow-P:oklch(56% .18 260);--orc-glow-A:oklch(63% .15 70);--orc-glow-B:oklch(62% .16 150);--orc-glow-C:oklch(53% .22 300);--orc-glow-D:transparent}label{color:var(--text-dim);margin-bottom:4px;font-size:11px;display:block}select,input[type=text]{background:var(--bg);border:1px solid var(--border);width:100%;color:var(--text);border-radius:6px;padding:6px 10px;font-family:inherit;font-size:12px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:color-mix(in oklch, var(--accent) 30%, var(--text-dim))}*{scrollbar-width:thin;scrollbar-color:var(--border) transparent}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:1px}@keyframes revealUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes revealLeft{0%{opacity:0;transform:translate(-16px)}to{opacity:1;transform:translate(0)}}@keyframes revealRight{0%{opacity:0;transform:translate(16px)}to{opacity:1;transform:translate(0)}}@keyframes breathe{0%,to{opacity:.5}50%{opacity:.8}}@keyframes dotPing{0%,to{opacity:1}50%{opacity:.4}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.hidden{display:none}.gap-1{gap:var(--space-1)}.gap-2{gap:var(--space-2)}.gap-3{gap:var(--space-3)}.gap-4{gap:var(--space-4)}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.flex-1{flex:1}.flex-wrap{flex-wrap:wrap}.w-full{width:100%}.text-xs{font-size:var(--text-xs)}.text-sm{font-size:var(--text-sm)}.text-dim{color:var(--text-dim)}.mono{font-family:var(--font-mono)}.fallback-desc{margin:2px 0 6px}.mt-1{margin-top:var(--space-1)}.mt-2{margin-top:var(--space-2)}.ml-6{margin-left:var(--space-6)}.mr-auto{margin-right:auto}.p-1{padding:var(--space-1)}.p-2{padding:var(--space-2)}.py-1{padding-top:var(--space-1);padding-bottom:var(--space-1)}.px-4{padding-left:var(--space-4);padding-right:var(--space-4)}.w-auto{width:auto}.input-sm{width:100%;padding:var(--space-1) var(--space-2);font-size:11px}.input-compact{width:100px;padding:3px var(--space-2);background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:11px}.btn-action-sm{padding:var(--space-1) var(--space-3);margin:0;font-size:11px}.btn-action-block{width:100%;padding:var(--space-2);font-size:var(--text-sm);margin:0}.hr-divider{border:none;border-top:1px solid var(--border);margin:var(--space-1) 0}.btn-modal-close{color:var(--text-dim);cursor:pointer;background:0 0;border:none;font-size:16px}.btn-refresh{justify-content:center;align-items:center;gap:var(--space-1);flex:1;height:32px;margin:0;padding:6px;font-size:11px;display:flex}.select-sm{padding:var(--space-1);background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:11px}.select-status-interval{min-width:60px;height:32px;padding:6px 8px}.input-agent-name{font-family:var(--font-display);font-size:var(--text-base);padding:var(--space-1) var(--space-2);flex:1;font-weight:600}.perm-auto{cursor:default;width:100%;padding:6px 14px}.text-status{color:var(--text-dim);font-size:11px}.text-shortcut-hint{color:var(--text-dim);font-size:9px}.mono-path{font-family:var(--font-mono);word-break:break-all}.label-wide{min-width:120px;font-size:11px}.mem-tab-btn{color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;padding:6px 12px;font-size:12px}.mem-tab-btn.active,.mem-tab.active .mem-tab-btn{color:var(--text)}.info-box{margin-top:var(--space-2);background:var(--bg);border-radius:var(--radius-sm);color:var(--text-dim);padding:6px;font-size:11px}.adv-status-banner{border-bottom:1px solid var(--border);color:var(--text-dim);padding:10px 12px;font-size:11px}.tab-strip{border-bottom:1px solid var(--border);padding:0 12px;display:flex}.section-header{margin-bottom:6px;font-size:12px;font-weight:600}.px-3{padding-left:var(--space-3);padding-right:var(--space-3)}.pb-3{padding-bottom:var(--space-3)}.p-3{padding:var(--space-3)}.mt-3{margin-top:var(--space-3)}.modal-template{flex-direction:column;width:640px;max-width:90vw;max-height:85vh;display:flex}.modal-scrollable{max-height:80vh;overflow-y:auto}.template-tree-area{flex:1;padding:12px 16px;overflow-y:auto}.template-editor-view{flex-direction:column}.template-editor-bar{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);border-bottom:1px solid var(--border);display:flex}.btn-back{border:1px solid var(--border);color:var(--text-dim);padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);cursor:pointer;background:0 0;font-size:11px}.btn-dev-toggle{background:var(--bg);border:1px solid var(--border);color:var(--text-dim);padding:var(--space-1) var(--space-3);border-radius:var(--radius-sm);cursor:pointer;font-size:11px}.template-textarea{min-height:350px;font-family:var(--font-mono);flex:1;font-size:12px}.template-hint{padding:var(--space-2) 0;color:var(--text-dim);font-size:11px}.queue-badge{background:var(--warning);color:var(--bg);border-radius:var(--radius-full);font-size:var(--text-xs);justify-content:center;align-items:center;min-width:18px;height:18px;font-weight:700;display:flex;position:absolute;top:-6px;right:-6px}.sidebar-left{background:linear-gradient(180deg, var(--surface) 0%, color-mix(in oklch, var(--surface) 95%, #000) 100%);border-right:1px solid color-mix(in oklch, var(--border) 80%, var(--accent) 20%);box-shadow:inset -1px 0 0 var(--border);animation:revealLeft .4s var(--ease-out-expo) 50ms both;flex-direction:column;gap:16px;padding:48px 16px 16px;display:flex;overflow-y:auto}.sidebar-left:before,.sidebar-right:before{content:"";pointer-events:none;z-index:0;background:repeating-linear-gradient(0deg, transparent, transparent 2px, color-mix(in oklch, var(--accent) var(--scanline-pct), transparent) 2px, color-mix(in oklch, var(--accent) var(--scanline-pct), transparent) 4px), linear-gradient(180deg, color-mix(in oklch, var(--accent) var(--glow-strength), transparent) 0%, transparent 200px);position:absolute;inset:0}.logo{color:var(--accent);font-size:26px;font-weight:700;font-family:var(--font-display);letter-spacing:1px;text-shadow:0 0 20px color-mix(in oklch, var(--accent) 30%, transparent)}.section-title{color:var(--text-dim);text-transform:uppercase;letter-spacing:1.5px;font-size:11px;font-family:var(--font-display);margin-bottom:4px;font-weight:600}.memory-list{font-size:12px;list-style:none}.memory-list li{border-bottom:1px solid var(--border);padding:4px 0}.memory-key{color:var(--accent2)}.stat{color:var(--text-dim);margin:2px 0;font-size:12px}.status-badge{letter-spacing:.5px;font-size:10px;font-weight:600;font-family:var(--font-display);border-radius:10px;align-items:center;padding:2px 8px;transition:background .3s,color .3s;display:inline-flex}.status-idle{background:var(--status-idle-bg);color:var(--green);box-shadow:0 0 6px color-mix(in oklch, var(--success) 20%, transparent)}.status-running{background:var(--status-running-bg);color:var(--status-running-color);box-shadow:0 0 6px color-mix(in oklch, var(--warning) 30%, transparent)}.btn-clear{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;font-size:12px;font-family:var(--font-display);background:0 0;border-radius:6px;margin-top:auto;padding:8px;transition:border-color .15s,color .15s,transform .1s}.btn-clear:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-1px)}.btn-clear:active{transform:translateY(0)}.sidebar-right{background:linear-gradient(180deg, var(--surface) 0%, color-mix(in oklch, var(--surface) 95%, #000) 100%);border-left:1px solid color-mix(in oklch, var(--border) 80%, var(--accent) 20%);box-shadow:inset 1px 0 0 var(--border);animation:revealRight .4s var(--ease-out-expo) .1s both;flex-direction:column;padding-top:48px;display:flex;overflow-y:auto}.tab-bar{border-bottom:1px solid var(--border);flex-shrink:0;display:flex}.tab-btn{color:var(--text-dim);font-size:11px;font-family:var(--font-display);cursor:pointer;text-transform:uppercase;letter-spacing:1px;background:0 0;border:none;border-bottom:2px solid #0000;flex:1;padding:10px 8px;transition:color .15s,border-bottom-color .15s}.tab-btn.active{color:var(--accent);border-bottom-color:var(--accent)}.tab-content{flex-direction:column;gap:12px;padding:16px;display:none}.tab-content.active{display:flex}.sidebar-save-bar{border-bottom:1px solid var(--border);flex-shrink:0;padding:6px 16px}.btn-save{background:var(--accent);color:#fff;width:100%;font-size:11px;font-family:var(--font-display);cursor:pointer;border:none;border-radius:6px;padding:6px;font-weight:600}.btn-save:hover{opacity:.9}.sidebar-hb-btn{background:var(--surface);border:1px solid var(--border);width:100%;color:var(--text);cursor:pointer;text-align:left;font-size:12px;font-family:var(--font-display);border-radius:6px;align-items:center;gap:4px;padding:6px;transition:border-color .15s,box-shadow .15s;display:inline-flex}.sidebar-hb-btn.w-auto{flex-shrink:0;width:auto}.sidebar-hb-btn:hover{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.sidebar-toggle{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;background:0 0;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;font-size:12px;transition:border-color .15s,color .15s;display:flex}.sidebar-toggle:hover{border-color:var(--accent);color:var(--accent)}.sidebar-bottom{border-top:1px solid var(--border);flex-direction:column;gap:6px;margin-top:auto;padding-top:12px;display:flex}.sidebar-left,.sidebar-right{contain:layout style;position:relative}.sidebar-left>:not(.sidebar-toggle),.sidebar-right>:not(.sidebar-toggle){opacity:1;transition:opacity .15s ease-in 50ms}.sidebar-left .sidebar-toggle,.sidebar-right .sidebar-toggle{z-index:2;position:absolute;top:10px}.sidebar-left .sidebar-toggle{left:10px}.sidebar-right .sidebar-toggle{right:10px}body.left-collapsed .sidebar-left>:not(.sidebar-toggle){opacity:0;pointer-events:none;transition:opacity .1s ease-out}body.left-collapsed .sidebar-left{padding:16px 10px;overflow:hidden}body.right-collapsed .sidebar-right>:not(.sidebar-toggle){opacity:0;pointer-events:none;transition:opacity .1s ease-out}body.right-collapsed .sidebar-right{padding:16px 10px;overflow:hidden}@media (width<=900px){body:not(.left-expanded){--sidebar-left-w:var(--sidebar-collapsed-w)}body:not(.left-expanded) .sidebar-left>:not(.sidebar-toggle){opacity:0;pointer-events:none}body:not(.left-expanded) .sidebar-left{padding:16px 10px;overflow:hidden}body:not(.right-expanded){--sidebar-right-w:var(--sidebar-collapsed-w)}body:not(.right-expanded) .sidebar-right>:not(.sidebar-toggle){opacity:0;pointer-events:none}body:not(.right-expanded) .sidebar-right{padding:16px 10px;overflow:hidden}}@media (width<=768px){body{grid-template-columns:1fr;grid-template-areas:"main";height:100dvh}.sidebar-left,.sidebar-right{z-index:100;width:min(280px,80vw);transition:transform .25s var(--ease-out-expo);padding-top:calc(48px + env(safe-area-inset-top,0px));padding-bottom:env(safe-area-inset-bottom,0px);position:fixed;top:0;bottom:0;transform:translate(-100%);min-width:unset!important}.sidebar-right{left:auto;right:0;transform:translate(100%)}body.left-expanded .sidebar-left,body.right-expanded .sidebar-right{transform:translate(0)}body.left-expanded:after,body.right-expanded:after{content:"";background:var(--modal-bg);z-index:99;animation:.2s fadeIn;position:fixed;inset:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}body:not(.left-expanded) .sidebar-left>:not(.sidebar-toggle){display:block}.sidebar-toggle{display:none}.chat-input-area{padding-bottom:env(safe-area-inset-bottom,0px)}.message.agent-message,.message.user-message{max-width:95%!important}}.mobile-nav{display:none}.lucide,[data-icon] svg,.icon-hydrated svg,.cli-provider-icon svg,.skill-emoji svg{vertical-align:-.125em;flex-shrink:0;width:1em;height:1em;display:inline-block}[data-icon],.icon-hydrated{align-items:center;line-height:1;display:inline-flex}.chat-area{border-left:1px solid var(--border);border-right:1px solid var(--border);background:var(--bg);flex-direction:column;min-height:0;display:flex;position:relative;overflow:hidden}.chat-area:after{content:"";pointer-events:none;z-index:0;opacity:var(--noise-opacity);mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-repeat:repeat;position:absolute;inset:0}[data-theme=light] .chat-area:after{display:none}.theme-switch{border:1px solid var(--border);background:var(--surface);cursor:pointer;border-radius:12px;flex-shrink:0;width:44px;height:24px;padding:0;transition:background .3s,border-color .3s;position:relative}.theme-switch:hover{border-color:var(--accent)}.theme-switch-knob{background:var(--text);border-radius:50%;width:16px;height:16px;transition:left .3s cubic-bezier(.4,0,.2,1),background .3s;position:absolute;top:3px;left:3px}.theme-switch-knob:after{content:"";width:10px;height:10px;box-shadow:-3px 0 0 var(--surface);background:0 0;border-radius:50%;transition:all .3s;position:absolute;top:3px;left:5px}.theme-switch.is-light .theme-switch-knob{background:var(--warning);left:23px}.theme-switch.is-light .theme-switch-knob:after{box-shadow:none;background:color-mix(in oklch, var(--warning) 80%, #fff);width:4px;height:4px;top:6px;left:6px}.chat-header{padding:var(--space-3) var(--space-5);border-bottom:1px solid var(--border);font-size:var(--text-md);font-weight:600;font-family:var(--font-display);letter-spacing:.5px;z-index:1;animation:revealUp .35s var(--ease-out-expo) .15s both;justify-content:space-between;align-items:center;display:flex;position:relative;box-shadow:0 1px 3px #0003}#headerCli{align-items:center;gap:4px;display:inline-flex}#headerCli svg{flex-shrink:0;width:1.1em;height:1.1em}.chat-messages{padding:var(--space-4) var(--space-5);gap:var(--space-3);z-index:1;animation:revealUp .4s var(--ease-out-expo) .2s both;contain:content;will-change:scroll-position;flex-direction:column;flex:1;display:flex;position:relative;overflow-y:auto}.msg{padding:var(--space-3) var(--space-4);border-radius:var(--radius-lg);font-size:var(--text-base);word-wrap:break-word;overflow-wrap:break-word;max-width:85%;transition:box-shadow var(--duration-base);contain:layout style;line-height:1.75;position:relative}@keyframes msgEnterAgent{0%{opacity:0;transform:translate(-8px)translateY(4px)}to{opacity:1;transform:none}}@keyframes msgEnterUser{0%{opacity:0;transform:translate(8px)translateY(4px)}to{opacity:1;transform:none}}@keyframes msgEnterSystem{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.msg-user{background:color-mix(in oklch, var(--accent) 10%, var(--surface));border:1px solid color-mix(in oklch, var(--accent) 18%, var(--border));border-radius:var(--radius-lg) var(--radius-lg) var(--radius-sm) var(--radius-lg);white-space:pre-wrap;align-self:flex-end;max-width:75%;animation:.25s cubic-bezier(.16,1,.3,1) msgEnterUser}.msg-agent{align-self:flex-start;gap:var(--space-2);max-width:100%;padding:var(--space-2) 0;transition:padding var(--duration-base);background:0 0;border:none;border-radius:0;animation:.25s cubic-bezier(.16,1,.3,1) msgEnterAgent;display:flex}.agent-icon{text-align:center;width:24px;height:24px;transition:opacity var(--duration-fast);flex-shrink:0;margin-top:2px;font-size:18px;line-height:24px}.agent-body{flex:1;min-width:0;position:relative}.msg-system{border:1px dashed var(--border);text-align:center;font-size:var(--text-xs);color:var(--text-dim);padding:var(--space-1) var(--space-3);background:0 0;align-self:center;max-width:80%;animation:.2s ease-out msgEnterSystem}.msg-user:after{content:"";top:var(--space-2);bottom:var(--space-2);background:var(--accent);opacity:0;width:3px;transition:opacity var(--duration-fast);border-radius:2px;position:absolute}.msg-agent:after{content:"";top:var(--space-2);bottom:var(--space-2);background:var(--accent);opacity:0;width:2px;transition:opacity var(--duration-fast);border-radius:1px;position:absolute;left:-4px}.msg-user:after{right:calc(-1 * var(--space-2))}.msg-agent:hover:after,.msg-user:hover:after{opacity:.3}.msg-user:hover{box-shadow:0 2px 12px color-mix(in oklch, var(--bg) 85%, transparent)}.msg-agent:hover{box-shadow:none}.msg-label{font-size:var(--text-xs);letter-spacing:.5px;text-transform:uppercase;color:var(--text-dim);margin-bottom:var(--space-1);align-items:center;gap:var(--space-1);font-weight:600;display:flex}.msg-user .msg-label:before{content:"";background:var(--success);border-radius:50%;width:6px;height:6px}.msg-type-success{border-color:var(--success);color:var(--success)}.msg-type-error{border-color:var(--error);color:var(--error)}.msg-type-info{border-color:var(--link-color);color:var(--link-color)}.msg-error{border-left:3px solid var(--error);background:var(--error-dim);padding:var(--space-3) var(--space-4);border-radius:var(--radius-sm) var(--radius-md) var(--radius-md) var(--radius-sm)}.msg-error .msg-label,.msg-error .msg-content a{color:var(--error)}.msg-error .msg-content code{border-color:var(--error)}.msg-copy{bottom:var(--space-2);border:1.5px solid var(--text-dim);cursor:pointer;opacity:0;width:12px;height:12px;transition:opacity var(--duration-fast), transform .1s, background var(--duration-fast);background:0 0;border-radius:2px;padding:0;position:absolute}.msg:hover .msg-copy{opacity:.7}.msg-copy:hover{opacity:1;color:var(--text);transform:scale(1.5)}.msg-agent .msg-copy{right:0;bottom:var(--space-2);top:auto;left:auto}.msg-user .msg-copy{left:var(--space-2)}.msg-copy:active{background:var(--accent);border-color:var(--accent);transform:scale(.75)}.msg-copy.copied{background:var(--accent);border-color:var(--accent);color:var(--bg);text-align:center;width:auto;min-width:12px;font-size:10px;line-height:12px;opacity:1!important}.stream-cursor{background:color-mix(in oklch, var(--accent) 40%, transparent);vertical-align:text-bottom;border-radius:2px;width:3px;height:1.1em;margin-left:2px;animation:1s ease-in-out infinite cursorPulse;display:inline-block}@keyframes cursorPulse{0%,to{opacity:.3}50%{opacity:.8}}.empty-state{justify-content:center;align-items:center;gap:var(--space-3);opacity:.4;user-select:none;flex-direction:column;height:100%;display:none}.chat-messages:empty~.empty-state,.empty-state.visible{display:flex}.empty-icon{font-size:48px;font-family:var(--font-display);color:var(--accent);text-shadow:0 0 20px color-mix(in oklch, var(--accent) 30%, transparent)}.empty-title{font-family:var(--font-display);font-size:var(--text-2xl);letter-spacing:2px;color:var(--text);font-weight:700}.empty-subtitle{font-size:var(--text-sm);color:var(--text-dim)}.skeleton-msg{padding:var(--space-4);border-radius:var(--radius-lg) var(--radius-lg) var(--radius-lg) var(--radius-sm);background:var(--agent-bg);border:1px solid var(--border);max-width:65%}.skeleton-line{background:linear-gradient(90deg, var(--border) 0%, color-mix(in oklch, var(--accent) 15%, var(--border)) 40%, var(--border) 80%);height:10px;margin-bottom:var(--space-2);background-size:300% 100%;border-radius:5px;animation:2s ease-in-out infinite shimmer}.skeleton-line:last-child{width:55%;margin-bottom:0}.skeleton-line:nth-child(2){width:80%;animation-delay:.15s}@keyframes shimmer{0%{background-position:300% 0}to{background-position:-100% 0}}@media (prefers-reduced-motion:reduce){.msg-agent,.msg-user,.msg-system,.stream-cursor,.skeleton-line{animation:none}}.chat-input-area{padding:var(--space-3) var(--space-5);border-top:1px solid var(--border);gap:var(--space-2);z-index:1;animation:revealUp .35s var(--ease-out-expo) .3s both;display:flex;position:relative;box-shadow:0 -1px 3px #00000026}.chat-input{background:var(--surface);border:1px solid var(--border);color:var(--text);border-radius:var(--radius-md);font-size:var(--text-sm);font-family:var(--font-mono);resize:none;max-height:192px;transition:height .1s ease, border-color var(--duration-fast), box-shadow var(--duration-base);flex:1;padding:10px 14px;overflow-y:auto}.chat-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in oklch, var(--accent) 12%, transparent), 0 0 20px color-mix(in oklch, var(--accent) 8%, transparent);outline:none}.chat-input:disabled{opacity:.5}.btn-send{background:linear-gradient(135deg, var(--accent) 0%, var(--accent2) 100%);color:#fff;border-radius:var(--radius-md);cursor:pointer;font-size:var(--text-base);font-weight:700;font-family:var(--font-display);letter-spacing:.5px;transition:transform var(--duration-fast), box-shadow var(--duration-base), filter var(--duration-fast);border:none;padding:10px 18px;position:relative;overflow:hidden}.btn-send:hover{box-shadow:0 4px 20px color-mix(in oklch, var(--accent) 45%, transparent), 0 0 40px color-mix(in oklch, var(--accent) 15%, transparent);filter:brightness(1.15);transform:translateY(-2px)}.btn-send:active{box-shadow:0 0 30px color-mix(in oklch, var(--accent) 50%, transparent);filter:brightness(1.3);transform:scale(.95)}.btn-send.stop-mode{background:var(--stop-btn);font-size:16px;transition:background .2s}.btn-send.stop-mode:hover{background:var(--stop-btn-hover)}.btn-send:disabled{opacity:.4;cursor:not-allowed}.btn-attach{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;background:0 0;border-radius:8px;padding:10px 12px;font-size:16px;line-height:1;transition:border-color .2s,color .2s}.btn-attach:hover{border-color:var(--accent);color:var(--accent)}.drag-overlay{background:var(--error-dim);border:2px dashed var(--accent);z-index:100;color:var(--accent);pointer-events:none;border-radius:8px;justify-content:center;align-items:center;font-size:14px;display:none;position:absolute;inset:0}.drag-overlay.visible{display:flex}.file-preview{border-top:1px solid var(--border);background:var(--surface);color:var(--text-dim);flex-direction:column;gap:6px;padding:6px 20px;font-size:12px;display:none}.file-preview.visible{display:flex}.file-preview-header{justify-content:space-between;align-items:center;display:flex}.file-preview-title{text-transform:uppercase;letter-spacing:.5px;font-size:11px;font-weight:600}.file-preview-clear{color:var(--delete-color);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 6px;font-size:11px;transition:background .15s}.file-preview-clear:hover{background:var(--error-dim)}.file-preview-list{flex-wrap:wrap;gap:6px;display:flex}.file-chip{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;gap:6px;padding:4px 8px;font-size:11px;animation:.15s ease-out msgEnterSystem;display:inline-flex}.file-chip-thumb{border-radius:3px;height:24px}.file-chip-name{text-overflow:ellipsis;white-space:nowrap;max-width:180px;overflow:hidden}.file-chip-remove{color:var(--text-dim);cursor:pointer;background:0 0;border:none;padding:0 2px;font-size:12px;line-height:1;transition:color .15s}.file-chip-remove:hover{color:var(--delete-color)}.btn-voice{border:1px solid var(--border);cursor:pointer;min-width:44px;min-height:44px;color:var(--text);background:0 0;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;padding:6px 10px;font-size:1.1rem;transition:all .2s;display:inline-flex}.btn-voice svg{width:20px;height:20px}.btn-voice:hover{border-color:var(--accent);background:var(--surface)}.btn-voice.recording{background:var(--error-dim);border-color:var(--error);animation:1.5s ease-in-out infinite pulse-recording}@keyframes pulse-recording{0%,to{box-shadow:0 0 0 0 color-mix(in oklch, var(--error) 40%, transparent)}50%{box-shadow:0 0 0 6px color-mix(in oklch, var(--error) 0%, transparent)}}.voice-timer{font-family:var(--font-mono);color:var(--error);text-align:center;min-width:36px;font-size:11px;animation:1.5s ease-in-out infinite pulse-recording}.btn-voice-cancel{background:var(--error-dim);border:1px solid var(--error);cursor:pointer;min-width:44px;min-height:44px;color:var(--error);border-radius:8px;flex-shrink:0;padding:8px 12px;font-size:.9rem;transition:all .2s}.btn-voice-cancel:hover{background:color-mix(in oklch, var(--error) 30%, transparent)}.cmd-dropdown{background:var(--surface);border:1px solid var(--border);z-index:150;opacity:0;pointer-events:none;border-radius:10px 10px 0 0;max-height:280px;transition:opacity .15s ease-out,transform .15s ease-out;position:absolute;bottom:calc(100% + 2px);left:20px;right:20px;overflow-y:auto;transform:translateY(4px);box-shadow:0 -4px 14px #00000040}.cmd-dropdown.visible{opacity:1;pointer-events:auto;transform:translateY(0)}.cmd-item{cursor:pointer;border-left:3px solid #0000;align-items:center;gap:10px;padding:9px 12px;display:flex}.cmd-item:hover,.cmd-item.selected{background:color-mix(in oklch, var(--accent) 10%, transparent)}.cmd-item.selected{border-left-color:var(--accent);scroll-margin-block:4px}.cmd-name{min-width:96px;color:var(--accent);font-weight:700;font-family:var(--font-mono)}.cmd-desc{color:var(--text-dim);flex:1;font-size:12px}.cmd-args{color:var(--text-dim);opacity:.8;font-size:11px}.cmd-empty{color:var(--text-dim);cursor:default;font-style:italic}.cmd-dropdown::-webkit-scrollbar{width:4px}.cmd-dropdown::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}.typing-indicator{align-items:center;gap:4px;padding:8px 14px;display:none}.typing-indicator.active{display:flex}.typing-indicator .label{color:var(--text-dim);margin-right:6px;font-size:11px}.typing-dot{background:var(--accent);border-radius:50%;width:6px;height:6px;animation:1.2s ease-in-out infinite bounce}.typing-dot:nth-child(2){animation-delay:.15s}.typing-dot:nth-child(3){animation-delay:.3s}@keyframes bounce{0%,60%,to{opacity:.3;transform:translateY(0)}30%{opacity:.7;transform:translateY(-3px)}}.streaming-shimmer{background:linear-gradient(90deg, transparent, var(--accent), transparent);background-size:200% 100%;border-radius:2px;height:3px;animation:1.5s ease-in-out infinite streaming-shimmer}@keyframes streaming-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.status-badge{transition:background-color var(--duration-base) ease, scale .15s ease}.status-badge.status-running{animation:none}.status-badge.status-running:before{content:"";background:var(--status-running-color,var(--warning));border-radius:50%;width:6px;height:6px;margin-right:4px;animation:1.5s ease-in-out infinite dotPing;display:inline-block}.status-badge.status-idle{opacity:.7;animation:none}::view-transition-old(root),::view-transition-new(root){animation-duration:.2s}@supports (animation-timeline:view()){.msg{animation:linear both scroll-fade-in view();animation-range:entry entry 30%}@keyframes scroll-fade-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}}#chatMessages{transition:box-shadow .4s,border-color .4s}body[data-orc-state] #chatMessages{box-shadow:inset 0 0 30px -10px var(--orc-glow);border-color:var(--orc-glow)}body[data-orc-state] .chat-input-area{border-top:2px solid var(--orc-glow)}body:not([data-orc-state]) .chat-input-area{border-top:2px solid #0000;transition:border-color .4s}@keyframes orc-pulse{0%{box-shadow:inset 0 0 60px -10px var(--orc-glow)}50%{box-shadow:inset 0 0 20px -10px var(--orc-glow)}to{box-shadow:inset 0 0 30px -10px var(--orc-glow)}}body[data-orc-state].orc-pulse #chatMessages{animation:.6s ease-out orc-pulse}.orc-state-badge{font-size:10px;font-weight:700;font-family:var(--font-mono);letter-spacing:1px;background:color-mix(in oklch, var(--orc-glow) 20%, var(--surface));color:var(--orc-glow);border:1px solid var(--orc-glow);text-transform:uppercase;border-radius:4px;padding:2px 8px;display:inline-block}.pabc-roadmap{background:linear-gradient(135deg, var(--surface) 0%, color-mix(in oklch, var(--surface) 90%, #000) 100%);border:1px solid var(--border);border-radius:10px;align-items:center;padding:12px 22px;display:none;position:relative;overflow:visible;box-shadow:0 2px 16px #0000004d,inset 0 1px #ffffff08}.pabc-roadmap.visible{animation:.5s cubic-bezier(.22,1,.36,1) pabc-fadeSlideIn;display:flex}@keyframes pabc-fadeSlideIn{0%{opacity:0;transform:translateY(-12px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.pabc-dot{width:26px;height:26px;font-family:var(--font-display,var(--font-mono));z-index:2;letter-spacing:.5px;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:10px;font-weight:700;transition:all .5s cubic-bezier(.22,1,.36,1);display:flex}.pabc-dot.future{background:var(--surface);color:var(--text-dim);border:1px solid var(--border)}.pabc-dot.active{color:var(--bg);border:2px solid;transform:scale(1.1);box-shadow:0 0 14px -3px,0 0 4px -1px}.pabc-dot.done{color:color-mix(in oklch, var(--bg) 90%, transparent);border:1px solid color-mix(in oklch, var(--text) 10%, transparent);opacity:.65}.pabc-dot[data-phase=P].active,.pabc-dot[data-phase=P].done{background:var(--orc-glow-P)}.pabc-dot[data-phase=A].active,.pabc-dot[data-phase=A].done{background:var(--orc-glow-A)}.pabc-dot[data-phase=B].active,.pabc-dot[data-phase=B].done{background:var(--orc-glow-B)}.pabc-dot[data-phase=C].active,.pabc-dot[data-phase=C].done{background:var(--orc-glow-C)}.pabc-connector{background:linear-gradient(90deg, var(--border) 0%, color-mix(in oklch, var(--border) 60%, var(--surface)) 50%, var(--border) 100%);border-radius:1px;flex:1;min-width:44px;height:2px;transition:all .5s}.pabc-connector.done{background:linear-gradient(90deg, var(--text-dim) 0%, color-mix(in oklch, var(--text-dim) 70%, var(--surface)) 50%, var(--text-dim) 100%);box-shadow:0 0 6px -2px var(--text-dim)}.pabc-center{flex-direction:column;flex-shrink:0;align-items:center;padding:0 20px;display:flex}.pabc-brand{font-family:var(--font-display,var(--font-mono));letter-spacing:4px;background:linear-gradient(90deg, var(--orc-glow-P), var(--orc-glow-A), var(--orc-glow-B), var(--orc-glow-C));-webkit-text-fill-color:transparent;filter:brightness(1.1);background-clip:text;font-size:13px;font-weight:700}.pabc-tagline{font-family:var(--font-mono);color:var(--text-dim);letter-spacing:2px;text-transform:uppercase;opacity:.7;margin-top:2px;font-size:7px}.shark-runner{z-index:10;pointer-events:none;filter:drop-shadow(0 2px 4px #0006);background:url(/dist/assets/shark-sprite-B3AAuERd.png) 0 0/360px 24px no-repeat;width:36px;height:24px;transition:left 1.4s cubic-bezier(.25,.46,.45,.94);display:none;position:absolute;top:-13px;left:0}.shark-runner.running{animation:1s steps(10,end) infinite shark-run;display:block}@keyframes shark-run{to{background-position:-360px 0}}@keyframes pabc-shimmer{0%{opacity:1;filter:brightness()}25%{opacity:1;filter:brightness(1.4);box-shadow:0 0 24px #a855f733}to{opacity:0;transform:translateY(-8px)scale(.98)}}.pabc-roadmap.shimmer-out{animation:1s ease-out forwards pabc-shimmer}[data-theme=light] .pabc-roadmap{background:linear-gradient(135deg, var(--surface) 0%, color-mix(in oklch, var(--surface) 90%, #000) 100%);box-shadow:0 2px 12px #00000014,inset 0 1px #fff9}[data-theme=light] .pabc-dot.future{background:var(--surface);color:var(--text-dim)}[data-theme=light] .pabc-dot.active{color:var(--bg)}[data-theme=light] .pabc-dot.done{color:var(--bg);border-color:#0000000f}[data-theme=light] .pabc-connector{background:linear-gradient(90deg, var(--border) 0%, color-mix(in oklch, var(--border) 60%, var(--surface)) 50%, var(--border) 100%)}[data-theme=light] .pabc-connector.done{background:linear-gradient(90deg, var(--text-dim) 0%, color-mix(in oklch, var(--text-dim) 70%, var(--surface)) 50%, var(--text-dim) 100%);box-shadow:none}[data-theme=light] .shark-runner{filter:drop-shadow(0 1px 2px #00000026)}.cli-status-row{align-items:center;gap:8px;padding:4px 0;font-size:12px;display:flex}.cli-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.cli-dot.ok{background:var(--green)}.cli-dot.warn{background:var(--warning);animation:2s ease-in-out infinite pulse-warn}@keyframes pulse-warn{0%,to{opacity:1}50%{opacity:.5}}.cli-dot.missing{background:var(--error)}.cli-provider-icon{flex-shrink:0;align-items:center;width:16px;height:16px;display:inline-flex}.cli-provider-icon svg{width:100%;height:100%}.cli-name{flex:1}.cli-path{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;max-width:120px;font-size:10px;overflow:hidden}.settings-group{border:1px solid var(--border);border-radius:6px;padding:10px;transition:border-color .2s}.settings-group:hover{border-color:color-mix(in oklch, var(--border) 60%, var(--accent))}.settings-group h4{color:var(--text-dim);font-size:11px;font-family:var(--font-display);letter-spacing:.5px;align-items:center;gap:4px;margin-bottom:8px;display:flex}.settings-row{margin-bottom:6px}.settings-row:last-child{margin-bottom:0}.sub-row{border-left:2px solid var(--border);padding-left:8px}.perm-toggle{gap:8px;display:flex}.perm-btn{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;text-align:center;background:0 0;border-radius:6px;flex:1;padding:6px;font-family:inherit;font-size:11px}.perm-btn.active{border-color:var(--accent);color:var(--accent);background:color-mix(in oklch, var(--accent) 10%, var(--bg))}textarea.prompt-editor{background:var(--bg);border:1px solid var(--border);width:100%;height:120px;color:var(--text);resize:vertical;border-radius:6px;padding:8px;font-family:inherit;font-size:11px}.skill-filter{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;background:0 0;border-radius:12px;padding:4px 10px;font-family:inherit;font-size:10px}.skill-filter.active{border-color:var(--accent);color:var(--accent);background:color-mix(in oklch, var(--accent) 10%, var(--bg))}.skill-card{background:var(--bg);border:1px solid var(--border);border-radius:8px;margin-bottom:8px;padding:10px;transition:border-color .2s,transform .15s,box-shadow .15s}.skill-card:hover{border-color:var(--accent2);transform:translateY(-1px);box-shadow:0 2px 8px #0003}.skill-card.enabled{border-left:3px solid var(--green)}.skill-card-header{align-items:center;gap:8px;margin-bottom:4px;display:flex}.skill-emoji{flex-shrink:0;align-items:center;width:20px;height:20px;font-size:16px;display:inline-flex}.skill-name{flex:1;font-size:12px;font-weight:600}.skill-toggle{width:var(--toggle-w);height:var(--toggle-h);border-radius:calc(var(--toggle-h) / 2);cursor:pointer;border:none;transition:background .2s;position:relative}.skill-toggle.on{background:var(--green)}.skill-toggle.off{background:var(--toggle-off)}.skill-toggle:after{content:"";top:calc((var(--toggle-h) - var(--toggle-knob)) / 2);width:var(--toggle-knob);height:var(--toggle-knob);background:var(--toggle-on);border-radius:50%;transition:left .2s;position:absolute}.skill-toggle.on:after{left:calc(var(--toggle-w) - var(--toggle-knob) - (var(--toggle-h) - var(--toggle-knob)) / 2)}.skill-toggle.off:after{left:calc((var(--toggle-h) - var(--toggle-knob)) / 2)}.skill-desc{color:var(--text-dim);margin-bottom:4px;font-size:11px;line-height:1.4}.skill-req{color:var(--accent2);font-size:10px}.custom-model-input{background:var(--surface);width:100%;color:var(--text);border:1px solid var(--accent);font-size:11px;font-family:var(--font-mono);border-radius:4px;margin-top:4px;padding:4px 6px}.custom-model-input:focus{border-color:var(--accent2);outline:none}.cwd-display{font-family:var(--font-mono);color:var(--text-dim);background:var(--bg);border:1px solid var(--border);text-overflow:ellipsis;white-space:nowrap;border-radius:6px;padding:6px 8px;font-size:11px;display:block;overflow:hidden}.settings-fieldset{border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-3);margin-bottom:var(--space-3)}.settings-fieldset legend{font-weight:600;font-size:var(--text-sm);padding:0 var(--space-2);color:var(--text)}.modal-overlay{background:var(--modal-bg);-webkit-backdrop-filter:blur(10px)saturate(1.2);z-index:999;justify-content:center;align-items:center;display:none;position:fixed;inset:0}.modal-overlay.open{animation:.2s ease-out overlayIn;display:flex}@keyframes overlayIn{0%{opacity:0}to{opacity:1}}.modal-box{background:color-mix(in oklch, var(--surface) 85%, transparent);-webkit-backdrop-filter:blur(24px)saturate(1.5);border:1px solid color-mix(in oklch, var(--accent) 10%, var(--border));border-radius:var(--radius-xl);box-shadow:0 16px 48px #00000080, 0 0 0 1px #ffffff0a inset, 0 0 60px -20px color-mix(in oklch, var(--accent) 6%, transparent);width:500px;max-width:90vw;max-height:80vh;animation:modalBounce .35s var(--ease-spring);flex-direction:column;display:flex}@keyframes modalBounce{0%{opacity:0;transform:translateY(24px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:12px 16px;font-size:13px;font-weight:600;display:flex}.modal-textarea{background:var(--bg);min-height:250px;color:var(--text);resize:none;border:none;flex:1;padding:12px 16px;font-family:inherit;font-size:12px}.modal-footer{border-top:1px solid var(--border);justify-content:flex-end;gap:8px;padding:10px 16px;display:flex}.modal-footer .btn-save{width:auto;padding:6px 20px}.hb-job-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;margin-bottom:8px;padding:10px}.hb-job-header{align-items:center;gap:6px;margin-bottom:6px;display:flex}.hb-job-header input[type=text]{background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:4px;flex:1;padding:4px 6px;font-size:11px}.hb-job-header select,.hb-job-header input[type=number]{background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:4px;padding:4px;font-size:11px}.hb-job-header input[type=number]{width:50px}.hb-job-schedule{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:6px;display:flex}.hb-job-schedule select,.hb-job-schedule input[type=number],.hb-job-schedule input[type=text]{background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:4px;padding:4px 6px;font-size:11px}.hb-job-schedule input[type=number]{width:72px}.hb-job-schedule input[type=text]{flex:120px}.hb-chip{color:var(--text-dim);font-size:11px}.hb-schedule-meta{margin:-2px 0 6px;font-size:11px}.hb-help{color:var(--text-dim)}.hb-error{color:var(--error)}.hb-toggle{width:var(--toggle-w);height:var(--toggle-h);border-radius:calc(var(--toggle-h) / 2);cursor:pointer;border:none;transition:background .2s;position:relative}.hb-toggle.on{background:var(--accent)}.hb-toggle.off{background:var(--toggle-off)}.hb-toggle:after{content:"";top:calc((var(--toggle-h) - var(--toggle-knob)) / 2);width:var(--toggle-knob);height:var(--toggle-knob);background:var(--toggle-on);border-radius:50%;transition:left .2s;position:absolute}.hb-toggle.on:after{left:calc(var(--toggle-w) - var(--toggle-knob) - 2px)}.hb-toggle.off:after{left:2px}.hb-del{color:var(--delete-color);cursor:pointer;background:0 0;border:none;font-size:14px}.hb-prompt{background:var(--bg);border:1px solid var(--border);width:100%;color:var(--text);resize:vertical;border-radius:4px;padding:4px 6px;font-size:11px}.hb-add{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:6px;width:100%;margin-top:4px;padding:8px;font-size:12px}.hb-add:hover{opacity:.9}.table-wrapper{margin:var(--space-3) 0;border:1px solid var(--border);border-radius:var(--radius-md);overflow-x:auto}.table-wrapper table{border-collapse:collapse;width:100%;font-size:var(--text-sm);border:none;margin:0}.table-wrapper th,.table-wrapper td{padding:var(--space-2) var(--space-3);text-align:left;border-bottom:1px solid var(--border)}.table-wrapper th{background:color-mix(in oklch, var(--accent) 8%, var(--surface));white-space:nowrap;border-bottom:2px solid color-mix(in oklch, var(--accent) 25%, var(--border));font-weight:600}.table-wrapper tr:nth-child(2n) td{background:color-mix(in oklch, var(--text) 2%, transparent)}.msg-content table{border-collapse:collapse;width:auto;font-size:var(--text-sm);border:1px solid var(--border);margin:8px 0}.msg-content th,.msg-content td{border:1px solid var(--border);text-align:left;padding:5px 12px}.msg-content th{background:color-mix(in oklch, var(--accent) 8%, var(--surface));white-space:nowrap;border-bottom:2px solid var(--border);font-weight:600}.msg-content tr:nth-child(2n){background:color-mix(in oklch, var(--text) 2%, transparent)}.code-block{border:1px solid var(--border);border-radius:var(--radius-md);margin:var(--space-3) 0;overflow:hidden}.code-header{padding:var(--space-1) var(--space-3);background:color-mix(in oklch, var(--text) 8%, var(--surface));border-bottom:1px solid var(--border);font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-dim);letter-spacing:.5px;justify-content:space-between;align-items:center;display:flex}.code-copy-btn{align-items:center;gap:var(--space-1);color:var(--text-dim);cursor:pointer;padding:2px var(--space-2);border-radius:var(--radius-sm);font-size:var(--text-xs);font-family:var(--font-mono);transition:color var(--duration-fast), background var(--duration-fast);opacity:0;background:0 0;border:none;display:flex}.code-block:hover .code-copy-btn{opacity:1}.code-copy-btn:hover{color:var(--text);background:color-mix(in oklch, var(--text) 8%, transparent)}.code-copy-btn.copied{color:var(--success)}.code-block pre{padding:var(--space-3) var(--space-4);background:var(--code-bg);font-family:var(--font-mono);font-size:var(--text-sm);border-radius:0;margin:0;line-height:1.5;overflow-x:auto}.code-block pre code{font-family:var(--font-mono);background:0 0;border-radius:0;padding:0}.msg-content pre:not(.code-block pre){background:var(--code-bg);border-radius:var(--radius-md);font-size:var(--text-sm);margin:8px 0;padding:12px;line-height:1.45;overflow-x:auto}.msg-content pre:not(.code-block pre) code{font-family:var(--font-mono);background:0 0;border-radius:0;padding:0}.msg-content .code-block pre{padding:var(--space-3) var(--space-4);background:var(--code-bg);font-family:var(--font-mono);font-size:var(--text-sm);border-radius:0;margin:0;line-height:1.5;overflow-x:auto}.msg-content code:not(pre code){font-family:var(--font-mono);background:color-mix(in oklch, var(--accent) 6%, var(--surface));padding:1px var(--space-1);border-radius:var(--radius-sm);border:1px solid var(--border);color:var(--text);word-break:break-word;overflow-wrap:break-word;font-size:.875em}.msg-content blockquote{border-left:3px solid var(--accent);color:var(--text-dim);background:color-mix(in oklch, var(--text) 2%, transparent);border-radius:0 var(--radius-sm) var(--radius-sm) 0;margin:8px 0;padding:4px 12px}.msg-content ul,.msg-content ol{margin:4px 0;padding-left:20px}.msg-content li{margin:2px 0}.msg-content a{color:var(--link-color);text-decoration:none}.msg-content a:hover{text-decoration:underline}.msg-content hr{border:none;border-top:1px solid var(--border);margin:12px 0}.msg-content h1{font-size:var(--text-xl);margin:var(--space-5) 0 var(--space-2);letter-spacing:-.02em;color:var(--text);font-weight:700;line-height:1.3}.msg-content h2{font-size:var(--text-lg);margin:var(--space-4) 0 var(--space-2);letter-spacing:-.01em;color:var(--text);font-weight:600}.msg-content h3{font-size:var(--text-md);margin:var(--space-3) 0 var(--space-1);color:var(--text);font-weight:600}.msg-content h4,.msg-content h5,.msg-content h6{font-size:var(--text-base);margin:var(--space-2) 0 var(--space-1);color:var(--text-dim);font-weight:600}.msg-content p{margin:.75em 0}.msg-content p:first-child{margin-top:0}.msg-content p:last-child{margin-bottom:0}.msg-content .katex-display{margin:var(--space-3) 0;padding:var(--space-2) 0;overflow:auto hidden}.msg-content .katex{font-size:1em}.msg-content .katex-display>.katex{font-size:1.1em}.msg-content .mermaid-container{text-align:center;background:color-mix(in oklch, var(--surface) 60%, transparent);border:1px solid var(--border);border-radius:var(--radius-lg);margin:8px 0;padding:16px 12px;position:relative;overflow-x:auto}.msg-content .mermaid-container svg{max-width:100%}.mermaid-zoom-btn{background:color-mix(in oklch, var(--text) 10%, transparent);border:1px solid color-mix(in oklch, var(--text) 15%, transparent);color:var(--text-dim);border-radius:var(--radius-md);cursor:pointer;width:28px;height:28px;transition:background var(--duration-fast), color var(--duration-fast);z-index:2;justify-content:center;align-items:center;font-size:14px;display:flex;position:absolute;top:6px;right:6px}.mermaid-zoom-btn:hover{background:color-mix(in oklch, var(--text) 20%, transparent);color:var(--text)}.mermaid-copy-btn,.mermaid-save-btn{background:color-mix(in oklch, var(--text) 10%, transparent);border:1px solid color-mix(in oklch, var(--text) 15%, transparent);color:var(--text-dim);border-radius:var(--radius-md);cursor:pointer;opacity:0;pointer-events:none;width:28px;height:28px;transition:opacity var(--duration-fast), background var(--duration-fast), color var(--duration-fast);z-index:2;justify-content:center;align-items:center;display:flex;position:absolute;top:6px}.mermaid-copy-btn{right:38px}.mermaid-save-btn{right:70px}.mermaid-container:hover .mermaid-zoom-btn,.mermaid-container:hover .mermaid-copy-btn,.mermaid-container:hover .mermaid-save-btn{opacity:1;pointer-events:auto}.mermaid-copy-btn:hover,.mermaid-save-btn:hover{background:color-mix(in oklch, var(--text) 20%, transparent);color:var(--text)}.mermaid-copy-btn.copied,.mermaid-save-btn.copied{color:var(--success)}.mermaid-overlay{z-index:9999;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.mermaid-overlay-backdrop{backdrop-filter:blur(6px);background:#000000bf;position:absolute;inset:0}.mermaid-overlay-content{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);max-width:95vw;max-height:95vh;padding:20px;animation:.2s ease-out mermaid-pop;position:relative;overflow:auto;box-shadow:0 20px 60px #00000080}@keyframes mermaid-pop{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.mermaid-overlay-close{background:color-mix(in oklch, var(--text) 15%, transparent);color:var(--text);border-radius:var(--radius-lg);cursor:pointer;width:36px;height:36px;transition:background var(--duration-fast);z-index:10;pointer-events:auto;border:none;justify-content:center;align-items:center;font-size:18px;display:flex;position:absolute;top:8px;right:8px}.mermaid-overlay-close:hover{background:color-mix(in oklch, var(--text) 30%, transparent);color:var(--text)}.mermaid-overlay-svg{z-index:0;justify-content:center;align-items:center;min-width:min(400px,90vw);min-height:200px;display:flex;position:relative}.msg-content .code-block-wrapper{position:relative}.msg-content .code-lang-label{font-size:var(--text-xs);color:var(--code-label-color);background:color-mix(in oklch, var(--text) 5%, transparent);border-radius:0 var(--radius-md) 0 var(--radius-sm);font-family:var(--font-mono);cursor:pointer;user-select:none;transition:background var(--duration-fast), transform var(--duration-fast), color var(--duration-fast);padding:2px 8px;position:absolute;top:0;right:0}.msg-content .code-lang-label:hover{background:color-mix(in oklch, var(--text) 12%, transparent);transform:scale(1.05)}.msg-content .code-lang-label.copied{color:var(--success)}.mermaid-error{border:1px solid var(--error);border-radius:var(--radius-md);padding:var(--space-2);margin:var(--space-1) 0}.mermaid-error-title{color:var(--error);font-size:var(--text-xs);margin-bottom:var(--space-1)}.mermaid-error-msg{color:var(--warning);font-size:var(--text-xs);margin-bottom:var(--space-2)}.mermaid-error-code{font-size:var(--text-xs);margin:0;overflow-x:auto}.tool-group{margin:0 0 var(--space-3);font-size:var(--text-sm)}.tool-group-summary{align-items:center;gap:var(--space-2);border:1px dashed var(--border);border-radius:var(--radius-md);color:var(--text-dim);cursor:pointer;padding:var(--space-1) var(--space-3);font-family:var(--font-ui);font-size:var(--text-xs);transition:color var(--duration-fast), border-color var(--duration-fast);text-align:left;background:0 0;width:100%;display:flex}.tool-group-summary:hover{color:var(--text);border-color:color-mix(in oklch, var(--accent) 40%, var(--border))}.tool-group-summary-text{flex:1}.tool-group-duration{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-dim)}.tool-group-chevron{font-size:var(--text-xs);transition:transform var(--duration-fast);display:inline-block}.tool-group.expanded .tool-group-chevron{transform:rotate(180deg)}.tool-status-dot,.tool-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px;display:inline-block}.tool-status-dot.running,.tool-dot.running{background:var(--warning);animation:1.5s ease-in-out infinite toolDotPulse}.tool-status-dot.done,.tool-dot.done{background:var(--success)}.tool-dot.pending{background:var(--text-dim);opacity:.5}.tool-status-dot.error,.tool-dot.error{background:var(--error)}@keyframes toolDotPulse{0%,to{opacity:1}50%{opacity:.4}}.tool-details{max-height:2000px;transition:max-height var(--duration-slow) ease-out, opacity var(--duration-base);padding-left:var(--space-4);border-left:1px solid var(--border);margin-left:var(--space-1);margin-top:var(--space-1);overflow:hidden}.tool-details.collapsed{opacity:0;pointer-events:none;max-height:0;margin-top:0}.tool-item{padding:var(--space-1) 0}.tool-item+.tool-item{border-top:1px solid color-mix(in oklch, var(--border) 50%, transparent)}.tool-item-header{align-items:center;gap:var(--space-2);font-size:var(--text-xs);display:flex}.tool-item-icon{flex-shrink:0}.tool-item-label{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.tool-item-toggle{align-items:start;gap:var(--space-2);width:100%;color:inherit;text-align:left;cursor:pointer;font-size:var(--text-xs);background:0 0;border:0;grid-template-columns:auto minmax(0,1fr) auto;padding:0;display:grid}.tool-item-main{gap:2px;min-width:0;display:grid}.tool-item-expandable .tool-item-label{white-space:normal;word-break:break-word}.tool-item-snippet{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-dim);word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.tool-item-chevron{color:var(--text-dim);transition:transform var(--duration-fast);font-size:10px}.tool-item.expanded .tool-item-chevron{transform:rotate(90deg)}.tool-item-details{border-left:1px solid color-mix(in oklch, var(--border) 70%, transparent);background:color-mix(in oklch, var(--surface) 70%, transparent);border-radius:0 var(--radius-sm) var(--radius-sm) 0;margin-left:22px;padding:8px 10px}.tool-item-details.collapsed{display:none}.tool-item-full{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-dim);white-space:pre-wrap;word-break:break-word;max-height:260px;margin:0;overflow-x:auto}.tool-item-time{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-dim);flex-shrink:0}.tool-activity-live{align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-3);font-size:var(--text-xs);color:var(--text-dim);border:1px dashed var(--border);border-radius:var(--radius-md);margin-bottom:var(--space-2);animation:.2s ease-out msgEnterAgent;display:flex}.tool-activity-live .tool-status-dot{background:var(--warning);animation:1.5s ease-in-out infinite toolDotPulse}.tool-summary{font-size:var(--text-xs);color:var(--text-dim);margin-bottom:var(--space-2);border:1px dashed var(--border);border-radius:var(--radius-md);padding:var(--space-1) var(--space-3)}.tool-summary summary{cursor:pointer;user-select:none;align-items:center;gap:var(--space-1);display:flex}.tool-summary summary:before{content:"";background:var(--success);border-radius:50%;flex-shrink:0;width:8px;height:8px;display:inline-block}.tool-summary .tool-log{margin-top:var(--space-1);padding-top:var(--space-1);border-top:1px dashed var(--border);white-space:pre-wrap;line-height:1.6;font-family:var(--font-mono)}@media (prefers-reduced-motion:reduce){.tool-status-dot.running,.tool-dot.running,.tool-activity-live .tool-status-dot{animation:none}}.process-block{margin:0 0 var(--space-1);font-size:var(--text-sm);white-space:normal;line-height:1.3}.process-block+.msg-content .orchestrate-placeholder{display:none}.orchestrate-placeholder{font-size:var(--text-xs);opacity:.6}.process-summary{align-items:center;gap:var(--space-2);background:color-mix(in oklch, var(--surface) 50%, transparent);border:1px solid var(--border);border-radius:var(--radius-md);width:100%;color:var(--text-dim);cursor:pointer;padding:var(--space-1) var(--space-3);font-size:var(--text-xs);transition:border-color var(--duration-fast);display:flex}.process-summary:hover{border-color:color-mix(in oklch, var(--accent) 40%, var(--border))}.process-dot{border-radius:50%;flex-shrink:0;width:6px;height:6px}.process-dot.running{background:var(--warning);will-change:opacity;animation:1.5s ease-in-out infinite processDotPulse}.process-dot.done{background:var(--success)}@keyframes processDotPulse{0%,to{opacity:1}50%{opacity:.4}}.process-summary-text{text-align:left;flex:1}.process-duration{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-dim)}.process-chevron{color:var(--text-dim);transition:transform var(--duration-fast);font-size:10px}.process-details{padding-left:var(--space-3);border-left:1px solid var(--border);transition:grid-template-rows var(--duration-slow);grid-template-rows:1fr;margin-top:2px;margin-left:3px;display:grid}.process-block.collapsed .process-details{grid-template-rows:0fr}.process-details>.process-steps-inner{overflow:hidden}.process-step{font-size:var(--text-xs);gap:4px;padding:2px 0;display:grid}.process-step-toggle{align-items:start;gap:var(--space-2);width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;grid-template-columns:auto auto minmax(0,1fr) auto;padding:0;display:grid}.process-step-dot{border-radius:50%;flex-shrink:0;width:5px;height:5px}.process-step-dot.running{background:var(--warning);animation:1.5s ease-in-out infinite processDotPulse}.process-step-dot.done{background:var(--success)}.process-step-dot.error{background:var(--error)}.process-step-badge{letter-spacing:.5px;text-transform:uppercase;font-size:9px;font-weight:700;font-family:var(--font-mono);border-radius:3px;padding:1px 5px}.process-step-badge.thinking{background:color-mix(in oklch, var(--accent) 15%, transparent);color:var(--accent)}.process-step-badge.tool{background:color-mix(in oklch, var(--warning) 15%, transparent);color:var(--warning)}.process-step-badge.search{background:color-mix(in oklch, var(--success) 15%, transparent);color:var(--success)}.process-step-main{gap:2px;min-width:0;display:grid}.process-step-label{color:var(--text);word-break:break-word}.process-step-snippet{color:var(--text-dim);word-break:break-word;-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.process-step-chevron{color:var(--text-dim);transition:transform var(--duration-fast)}.process-step.expanded .process-step-chevron{transform:rotate(90deg)}.process-step-details{border-left:1px solid color-mix(in oklch, var(--border) 70%, transparent);background:color-mix(in oklch, var(--surface) 70%, transparent);border-radius:0 var(--radius-sm) var(--radius-sm) 0;margin-left:22px;padding:8px 10px}.process-step-details.collapsed{display:none}.process-step-full{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-dim);white-space:pre-wrap;word-break:break-word;max-height:600px;margin:0;overflow-x:auto}.process-step-label{word-break:break-word;overflow-wrap:break-word;white-space:normal}@media (prefers-reduced-motion:reduce){.process-dot.running,.process-step-dot.running{animation:none}}details.tool-block summary{cursor:pointer;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-2);font-size:var(--text-sm);color:var(--text-dim);border-radius:var(--radius-sm);transition:background var(--duration-fast);list-style:none;display:flex}details.tool-block summary:hover{background:color-mix(in oklch, var(--accent) 8%, transparent)}details.tool-block summary:before{content:"";width:.5em;height:.5em;transition:transform var(--duration-fast);border-bottom:2px solid;border-right:2px solid;flex-shrink:0;display:inline-block;transform:rotate(-45deg)}details.tool-block[open] summary:before{transform:rotate(45deg)}details.tool-block .tool-content{content-visibility:auto;contain-intrinsic-size:auto 200px}.diagram-container{border-radius:var(--radius-md);margin:1rem 0;position:relative;overflow:hidden}.diagram-svg{background:var(--surface);border:1px solid var(--border);padding:var(--space-4)}.diagram-svg svg{width:100%;max-width:680px;height:auto;display:block}.diagram-widget{border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden}.diagram-widget iframe{border:none;width:100%;min-height:60px;display:block}.diagram-loading{background:var(--surface);border:1px solid var(--border);justify-content:center;align-items:center;min-height:120px;display:flex}.diagram-spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:24px;height:24px;animation:.8s linear infinite diagram-spin}@keyframes diagram-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.diagram-spinner{animation:none}}.diagram-error{padding:var(--space-4);color:var(--text-dim);text-align:center;font-size:14px}.diagram-widget-pending{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);justify-content:center;align-items:center;min-height:120px;display:flex}.diagram-zoom-btn{top:var(--space-2);right:var(--space-2);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);width:32px;height:32px;color:var(--text-dim);cursor:pointer;opacity:0;pointer-events:none;transition:opacity var(--duration-fast);z-index:2;justify-content:center;align-items:center;font-size:16px;display:flex;position:absolute}.diagram-container:hover .diagram-zoom-btn,.diagram-container:focus-within .diagram-zoom-btn{opacity:1;pointer-events:auto}.diagram-zoom-btn:hover{background:var(--bg);color:var(--text)}.diagram-copy-btn,.diagram-save-btn{top:var(--space-2);right:var(--space-2);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);width:32px;height:32px;color:var(--text-dim);cursor:pointer;opacity:0;pointer-events:none;transition:opacity var(--duration-fast), color var(--duration-fast);z-index:2;justify-content:center;align-items:center;display:flex;position:absolute}.diagram-widget .diagram-save-btn,.diagram-svg .diagram-copy-btn{right:calc(var(--space-2) + 36px)}.diagram-svg .diagram-save-btn{right:calc(var(--space-2) + 72px)}.diagram-container:hover .diagram-copy-btn,.diagram-container:hover .diagram-save-btn,.diagram-container:focus-within .diagram-copy-btn,.diagram-container:focus-within .diagram-save-btn{opacity:1;pointer-events:auto}.diagram-copy-btn:hover,.diagram-save-btn:hover{background:var(--bg);color:var(--text)}.diagram-copy-btn.copied,.diagram-save-btn.copied{color:var(--success)}.diagram-overlay{z-index:9999;backdrop-filter:blur(4px);background:#000000b3;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.diagram-overlay-content{background:var(--surface);border-radius:var(--radius-lg);min-width:min(680px,90vw);max-width:95vw;max-height:90vh;padding:var(--space-6);overflow:auto;box-shadow:0 20px 60px #00000080}.diagram-overlay-content svg{width:100%;max-width:1200px;height:auto;display:block}.diagram-overlay-close{top:var(--space-4);right:var(--space-4);background:var(--surface);border:1px solid var(--border);width:40px;height:40px;color:var(--text);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;font-size:20px;display:flex;position:absolute}.diagram-overlay-close:hover{background:var(--bg)}.c-blue-fill{fill:#1e3a5f}.c-blue-stroke{stroke:#3b82f6;fill:none}.c-blue-text{fill:#93c5fd}.c-blue-bg{fill:#1e3a5f;stroke:#3b82f6;stroke-width:1px}.c-purple-fill{fill:#3b1f5e}.c-purple-stroke{stroke:#8b5cf6;fill:none}.c-purple-text{fill:#c4b5fd}.c-purple-bg{fill:#3b1f5e;stroke:#8b5cf6;stroke-width:1px}.c-green-fill{fill:#14532d}.c-green-stroke{stroke:#22c55e;fill:none}.c-green-text{fill:#86efac}.c-green-bg{fill:#14532d;stroke:#22c55e;stroke-width:1px}.c-amber-fill{fill:#451a03}.c-amber-stroke{stroke:#f59e0b;fill:none}.c-amber-text{fill:#fcd34d}.c-amber-bg{fill:#451a03;stroke:#f59e0b;stroke-width:1px}.c-red-fill{fill:#450a0a}.c-red-stroke{stroke:#ef4444;fill:none}.c-red-text{fill:#fca5a5}.c-red-bg{fill:#450a0a;stroke:#ef4444;stroke-width:1px}.c-cyan-fill{fill:#083344}.c-cyan-stroke{stroke:#06b6d4;fill:none}.c-cyan-text{fill:#67e8f9}.c-cyan-bg{fill:#083344;stroke:#06b6d4;stroke-width:1px}.c-pink-fill{fill:#500724}.c-pink-stroke{stroke:#ec4899;fill:none}.c-pink-text{fill:#f9a8d4}.c-pink-bg{fill:#500724;stroke:#ec4899;stroke-width:1px}.c-slate-fill{fill:#1e293b}.c-slate-stroke{stroke:#64748b;fill:none}.c-slate-text{fill:#94a3b8}.c-slate-bg{fill:#1e293b;stroke:#64748b;stroke-width:1px}.c-orange-fill{fill:#431407}.c-orange-stroke{stroke:#f97316;fill:none}.c-orange-text{fill:#fdba74}.c-orange-bg{fill:#431407;stroke:#f97316;stroke-width:1px}.diagram-svg .node{rx:8;ry:8}.diagram-svg .connector{stroke:var(--border);stroke-width:1.5px;fill:none}.diagram-svg .label{text-anchor:middle;dominant-baseline:central;font-size:14px}.diagram-svg .diagram-title{text-anchor:middle;font-size:16px;font-weight:600}[data-theme=light] .c-blue-fill{fill:#dbeafe}[data-theme=light] .c-blue-stroke{stroke:#2563eb}[data-theme=light] .c-blue-text{fill:#1e40af}[data-theme=light] .c-blue-bg{fill:#dbeafe;stroke:#2563eb}[data-theme=light] .c-purple-fill{fill:#ede9fe}[data-theme=light] .c-purple-stroke{stroke:#7c3aed}[data-theme=light] .c-purple-text{fill:#5b21b6}[data-theme=light] .c-purple-bg{fill:#ede9fe;stroke:#7c3aed}[data-theme=light] .c-green-fill{fill:#dcfce7}[data-theme=light] .c-green-stroke{stroke:#16a34a}[data-theme=light] .c-green-text{fill:#15803d}[data-theme=light] .c-green-bg{fill:#dcfce7;stroke:#16a34a}[data-theme=light] .c-amber-fill{fill:#fef3c7}[data-theme=light] .c-amber-stroke{stroke:#d97706}[data-theme=light] .c-amber-text{fill:#92400e}[data-theme=light] .c-amber-bg{fill:#fef3c7;stroke:#d97706}[data-theme=light] .c-red-fill{fill:#fee2e2}[data-theme=light] .c-red-stroke{stroke:#dc2626}[data-theme=light] .c-red-text{fill:#991b1b}[data-theme=light] .c-red-bg{fill:#fee2e2;stroke:#dc2626}[data-theme=light] .c-cyan-fill{fill:#cffafe}[data-theme=light] .c-cyan-stroke{stroke:#0891b2}[data-theme=light] .c-cyan-text{fill:#155e75}[data-theme=light] .c-cyan-bg{fill:#cffafe;stroke:#0891b2}[data-theme=light] .c-pink-fill{fill:#fce7f3}[data-theme=light] .c-pink-stroke{stroke:#db2777}[data-theme=light] .c-pink-text{fill:#9d174d}[data-theme=light] .c-pink-bg{fill:#fce7f3;stroke:#db2777}[data-theme=light] .c-slate-fill{fill:#f1f5f9}[data-theme=light] .c-slate-stroke{stroke:#475569}[data-theme=light] .c-slate-text{fill:#334155}[data-theme=light] .c-slate-bg{fill:#f1f5f9;stroke:#475569}[data-theme=light] .c-orange-fill{fill:#ffedd5}[data-theme=light] .c-orange-stroke{stroke:#ea580c}[data-theme=light] .c-orange-text{fill:#9a3412}[data-theme=light] .c-orange-bg{fill:#ffedd5;stroke:#ea580c}[data-theme=light] .diagram-svg .connector{stroke:var(--border)}
@@ -0,0 +1,49 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-Bjnw0wQ6.css"])))=>i.map(i=>d[i]);
2
+ import{n as e,t}from"./vendor-render-D2YP6GiF.js";import{t as n}from"./state-O6NVkWcL.js";import{Z as r}from"./vendor-mermaid-lvHqQdfg.js";import{a as i,c as a,d as o,f as s,p as c,r as l,t as u,u as d}from"./render-C8N0rp4L.js";import{_ as ee,g as te,h as ne,n as f,o as re,p as ie,s as ae,t as p,v as oe}from"./ui-D-oFkXed.js";import{n as se,r as m,t as h}from"./api-Ci-lgwRp.js";import{t as ce}from"./ws-Dnn8HG8B.js";import{t as le}from"./locale-DIXc-_34.js";import{a as ue,i as de,n as fe,o as pe,r as me,t as he}from"./slash-commands-DWvL-VDU.js";import{i as ge,t as _e}from"./skills-uywskdFh.js";import{a as ve,r as ye}from"./constants-C8_0OtK2.js";import{A as be,D as xe,E as g,M as Se,N as Ce,O as we,S as Te,T as Ee,a as De,b as Oe,c as ke,f as Ae,g as _,h as je,i as Me,j as Ne,k as Pe,l as Fe,m as Ie,n as Le,o as Re,p as ze,r as Be,s as Ve,t as v,u as He,w as Ue,y as We}from"./settings-BJR-IGM5.js";var y=[];function Ge(e){return/^\/compact(?:\s|$)/i.test(String(e||``).trim())?300*1e3:1e4}async function b(){let e=document.getElementById(`chatInput`),t=document.getElementById(`btnSend`);if(!e||!t)return;let a=document.activeElement===t;if(t.classList.contains(`stop-mode`)&&a&&!e.value.trim()&&!n.attachedFiles.length){se(`/api/stop`,`POST`);return}let o=e.value.trim();if(!o&&!n.attachedFiles.length)return;let s=o.slice(1).trim().split(/\s+/)[0]||``,l=s.includes(`/`)||s.includes(`\\`);if(o.startsWith(`/`)&&!n.attachedFiles.length&&!l){e.value=``,w(),he();try{let e,t,n=Ge(o);if(typeof AbortSignal?.timeout==`function`)e=AbortSignal.timeout(n);else{let r=new AbortController;e=r.signal,t=setTimeout(()=>r.abort(),n)}let r=le(),i=await fetch(`/api/command`,{method:`POST`,headers:{"Content-Type":`application/json`,"Accept-Language":r},body:JSON.stringify({text:o,locale:r}),signal:e});t&&clearTimeout(t);let a=await i.json().catch(()=>({}));if(a?.code===`not_command`){p(`user`,o),await m(`/api/message`,`POST`,{prompt:o});return}if(!i.ok&&!a?.text)throw Error(`HTTP ${i.status}`);if(a?.code===`clear_screen`){te().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``)}a?.text&&f(u(a.text),``,a.type)}catch(e){f(c(`chat.cmd.fail`,{msg:e.message}),``,`error`)}return}if(n.attachedFiles.length){p(`user`,`📎 [${n.attachedFiles.map(e=>e.name).join(`, `)}] ${o}`),e.value=``,w();try{let e=(await Promise.all(n.attachedFiles.map(e=>qe(e)))).map(e=>c(`chat.file.sent`,{path:e})).join(`
3
+ `);o&&(e+=c(`chat.file.sentWithMsg`,{text:o})),S(),await m(`/api/message`,`POST`,{prompt:e})}catch(e){f(c(`chat.file.uploadFail`,{msg:e.message})),S()}}else{p(`user`,o),e.value=``,w();let t=await fetch(`/api/message`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({prompt:o})}),n=await t.json().catch(()=>({}));if(!t.ok){f(`${i.error} ${u(n.error||c(`chat.requestFail`,{status:t.status}))}`,``,`error`);return}if(n.queued){let{updateQueueBadge:e}=await r(async()=>{let{updateQueueBadge:e}=await import(`./ui-C1daR00l.js`);return{updateQueueBadge:e}},__vite__mapDeps([0]));e(n.pending||1)}else n.continued&&f(c(`chat.continue`))}}function Ke(e){e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),b())}async function qe(e){let t=await fetch(`/api/upload`,{method:`POST`,headers:{"X-Filename":encodeURIComponent(e.name)},body:e});if(!t.ok)throw Error(`upload failed`);return(await t.json()).path}function x(e){for(let t of e)n.attachedFiles.some(e=>e.name===t.name)||n.attachedFiles.push(t);C(),document.getElementById(`chatInput`)?.focus()}function Je(e){n.attachedFiles.splice(e,1),C()}function S(){y.forEach(e=>URL.revokeObjectURL(e)),y=[],n.attachedFiles=[],C();let e=document.getElementById(`fileInput`);e&&(e.value=``)}function C(){let e=document.getElementById(`filePreview`),t=document.getElementById(`filePreviewList`);if(e){if(y.forEach(e=>URL.revokeObjectURL(e)),y=[],!n.attachedFiles.length){e.classList.remove(`visible`),t&&(t.innerHTML=``);return}e.classList.add(`visible`),t&&(t.innerHTML=n.attachedFiles.map((e,t)=>{let n=(e.size/1024).toFixed(1),r=e.type.startsWith(`image/`),a=``;if(r){let t=URL.createObjectURL(e);y.push(t),a=`<img src="${t}" class="file-chip-thumb" alt="">`}return`<div class="file-chip">
4
+ ${a}
5
+ <span class="file-chip-name">${i.paperclip} ${u(e.name)} (${n}KB)</span>
6
+ <button class="file-chip-remove" data-file-idx="${t}" title="Remove">${i.close}</button>
7
+ </div>`}).join(``))}}async function Ye(){se(`/api/clear`,`POST`),te().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``);let{cleanupToolActivity:t}=await r(async()=>{let{cleanupToolActivity:e}=await import(`./ui-C1daR00l.js`);return{cleanupToolActivity:e}},__vite__mapDeps([0]));t(),ee().catch(()=>{})}var Xe=0;function Ze(e){Xe||=requestAnimationFrame(()=>{Xe=0,e.style.height=`auto`,e.style.height=e.scrollHeight+`px`})}function Qe(){let e=document.getElementById(`chatInput`);e&&e.addEventListener(`input`,()=>Ze(e))}function w(){let e=document.getElementById(`chatInput`);e&&(e.style.height=`auto`)}function $e(){let e=document.querySelector(`.chat-area`),t=document.getElementById(`dragOverlay`);if(!e||!t)return;let n=0;e.addEventListener(`dragenter`,e=>{e.preventDefault(),n++,t.classList.add(`visible`)}),e.addEventListener(`dragleave`,e=>{e.preventDefault(),n--,n<=0&&(n=0,t.classList.remove(`visible`))}),e.addEventListener(`dragover`,e=>e.preventDefault()),e.addEventListener(`drop`,e=>{e.preventDefault(),n=0,t.classList.remove(`visible`);let r=[...e.dataTransfer?.files||[]];r.length&&x(r)}),document.getElementById(`fileInput`)?.addEventListener(`change`,e=>{let t=e.target,n=[...t.files||[]];n.length&&x(n),t.value=``}),document.addEventListener(`paste`,e=>{let t=e.clipboardData?.items;if(!t)return;let n=[];for(let e of t){if(e.kind!==`file`)continue;let t=e.getAsFile();if(t)if(!t.name||t.name===`image.png`){let e=new Date().toISOString().replace(/[:.]/g,`-`),r=t.type.split(`/`)[1]||`png`,i=new File([t],`pasted-${e}.${r}`,{type:t.type});n.push(i)}else n.push(t)}n.length&&(e.preventDefault(),x(n))})}async function et(e,t,r){let a=document.getElementById(`chatInput`),o=a?.value.trim()||``,s=[...n.attachedFiles],l=[`🎤 [음성 메시지]`];s.length&&l.push(`📎 [${s.map(e=>e.name).join(`, `)}]`),o&&l.push(o),p(`user`,l.join(` `)),a&&o&&(a.value=``,w()),s.length&&S();try{let n=await fetch(`/api/voice`,{method:`POST`,headers:{"Content-Type":r,"X-Voice-Ext":t,"X-STT-Only":`true`},body:e});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error||`HTTP ${n.status}`)}let a=await n.json().catch(()=>null);if(!a?.text)throw Error(`Empty STT result`);f(`${i.mic} STT (${u(a.engine||``)}, ${a.elapsed?.toFixed(1)}s): "${u(a.text.slice(0,100))}"`,``,`info`);let l=[];s.length&&(l=await Promise.all(s.map(e=>qe(e))));let d=[];for(let e of l)d.push(c(`chat.file.sent`,{path:e}));d.push(`🎤 ${a.text}`),o&&d.push(o),await m(`/api/message`,`POST`,{prompt:d.join(`
8
+ `)})}catch(e){f(c(`voice.sttFail`,{msg:e.message}),``,`error`)}}var tt={sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6},nt={jan:1,feb:2,mar:3,apr:4,may:5,jun:6,jul:7,aug:8,sep:9,oct:10,nov:11,dec:12};function rt(e){let t=typeof e==`string`?e.trim():``;if(t)try{return new Intl.DateTimeFormat(`en-US`,{timeZone:t}).format(new Date),t}catch{return}}function it(e){let t=e&&typeof e==`object`?e:{},n=t.kind,r=typeof t.timeZone==`string`?t.timeZone.trim():``,i=rt(t.timeZone);if(r&&!i)return{ok:!1,code:`invalid_timezone`,error:`invalid timeZone "${r}"`};if(n===`cron`){let e=typeof t.cron==`string`?t.cron.trim().replace(/\s+/g,` `):``;if(!e)return{ok:!1,code:`invalid_cron`,error:`cron expression required`};let n=at(e);return n?{ok:!1,code:`invalid_cron`,error:n}:{ok:!0,schedule:i?{kind:`cron`,cron:e,timeZone:i}:{kind:`cron`,cron:e}}}if(n==null||n===`every`){let e=typeof t.minutes==`number`?t.minutes:Number(t.minutes);if(!Number.isInteger(e)||e<1)return{ok:!1,code:`invalid_minutes`,error:`minutes must be an integer >= 1`};let n=Math.max(1,Math.floor(e));return{ok:!0,schedule:i?{kind:`every`,minutes:n,timeZone:i}:{kind:`every`,minutes:n}}}return{ok:!1,code:`invalid_kind`,error:`invalid heartbeat schedule kind "${String(n)}"`}}function at(e){try{let[t,n,r,i,a]=ot(e);return T(t,{min:0,max:59}),T(n,{min:0,max:23}),T(r,{min:1,max:31}),T(i,{min:1,max:12,aliases:nt}),T(a,{min:0,max:7,aliases:tt,normalize:lt}),null}catch(e){return e.message}}function ot(e){let t=String(e||``).trim().replace(/\s+/g,` `).split(` `);if(t.length!==5)throw Error(`cron must have 5 fields, got ${t.length}`);return t}function T(e,t){for(let n of e.split(`,`))st(n.trim(),t)}function st(e,t){if(!e)throw Error(`empty cron segment`);let n=e;if(e.includes(`/`)){let[t,r,...i]=e.split(`/`);if(!t||!r||i.length>0)throw Error(`invalid cron step segment "${e}"`);n=t,ct(r,`invalid cron step "${r}"`)}if(n!==`*`){if(n.includes(`-`)){let[e,r,...i]=n.split(`-`);if(!e||!r||i.length>0||E(e,t)>E(r,t))throw Error(`invalid cron range "${n}"`);return}E(n,t)}}function E(e,t){let n=e.trim().toLowerCase(),r=t.aliases?.[n]??Number(n);if(!Number.isInteger(r))throw Error(`invalid cron value "${e}"`);let i=t.normalize?t.normalize(r):r;if(!ut(i,t.min,t.max))throw Error(`cron value "${e}" out of range ${t.min}-${t.max}`);return i}function ct(e,t){let n=Number(e);if(!Number.isInteger(n)||n<=0)throw Error(t);return n}function lt(e){return e===7?0:e}function ut(e,t,n){return e>=t&&e<=n}async function dt(){n.heartbeatJobs=((await h(`/api/heartbeat`))?.jobs||[]).map(k),n.heartbeatErrors=j(n.heartbeatJobs),D(),document.getElementById(`heartbeatModal`)?.classList.add(`open`)}function ft(e){e&&e.target!==e.currentTarget||document.getElementById(`heartbeatModal`)?.classList.remove(`open`)}function D(){let e=document.getElementById(`hbJobsList`);if(!e)return;let t=n.heartbeatJobs.map(k);n.heartbeatJobs=t,n.heartbeatErrors=j(t),t.length===0?e.innerHTML=`<p style="color:var(--text-dim);font-size:12px;text-align:center">${c(`hb.empty`)}</p>`:e.innerHTML=t.map((e,t)=>{let r=_t(e.schedule),a=r.kind===`cron`,o=n.heartbeatErrors[e.id],s=o||Ct(r),l=o?`hb-schedule-meta hb-error`:`hb-schedule-meta hb-help`,d=a?`<input type="text" value="${u(r.cron)}" placeholder="${u(c(`hb.cronPlaceholder`))}"
9
+ data-hb-cron="${t}">`:`<input type="number" value="${r.minutes}" min="1" data-hb-minutes="${t}">`,ee=a?`<span class="hb-chip">${u(c(`hb.cronLabel`))}</span>`:`<span class="hb-chip">${u(c(`hb.minutesLabel`))}</span>`;return`
10
+ <div class="hb-job-card">
11
+ <div class="hb-job-header">
12
+ <input type="text" value="${u(String(e.name||``))}" placeholder="${u(c(`hb.name`))}"
13
+ data-hb-name="${t}">
14
+ <button class="hb-toggle ${e.enabled?`on`:`off`}"
15
+ data-hb-toggle="${t}" aria-label="${u(String(e.name||`job`)+` toggle`)}"></button>
16
+ <button class="hb-del" data-hb-remove="${t}">${i.close}</button>
17
+ </div>
18
+ <div class="hb-job-schedule">
19
+ <select data-hb-kind="${t}">
20
+ <option value="every"${a?``:` selected`}>${u(c(`hb.kindEvery`))}</option>
21
+ <option value="cron"${a?` selected`:``}>${u(c(`hb.kindCron`))}</option>
22
+ </select>
23
+ ${d}
24
+ ${ee}
25
+ <input type="text" value="${u(r.timeZone||``)}" placeholder="${u(bt())}"
26
+ data-hb-timezone="${t}">
27
+ </div>
28
+ <p class="${l}">${u(s)}</p>
29
+ <textarea class="hb-prompt" rows="2" placeholder="${u(c(`hb.prompt`))}"
30
+ data-hb-prompt="${t}">${u(String(e.prompt||``))}</textarea>
31
+ </div>
32
+ `}).join(``);let r=t.filter(e=>e.enabled).length,a=document.getElementById(`hbSidebarBtn`);a&&(a.innerHTML=`${i.heartPulse} Heartbeat (${r})`)}function pt(){n.heartbeatJobs.push({id:`hb_`+Date.now(),name:``,enabled:!0,schedule:yt({kind:`every`,minutes:5}),prompt:``}),D(),O()}function mt(e){n.heartbeatJobs.splice(e,1),D(),O()}function ht(e){let t=n.heartbeatJobs[e];t&&(t.enabled=!t.enabled,D(),O())}async function O(){let e=n.heartbeatJobs.map(k);if(n.heartbeatJobs=e,n.heartbeatErrors=j(e),Object.keys(n.heartbeatErrors).length>0){D();return}let t=await m(`/api/heartbeat`,`PUT`,{jobs:e});t?.jobs&&(n.heartbeatJobs=t.jobs.map(k),n.heartbeatErrors=j(n.heartbeatJobs),D())}async function gt(){try{let e=((await h(`/api/heartbeat`))?.jobs||[]).map(k).filter(e=>e.enabled).length,t=document.getElementById(`hbSidebarBtn`);t&&(t.innerHTML=`${i.heartPulse} Heartbeat (${e})`)}catch{}}function k(e){return{id:String(e.id||`hb_${Date.now()}`),name:String(e.name||``),enabled:e.enabled!==!1,schedule:_t(e.schedule),prompt:String(e.prompt||``)}}function _t(e){let t=vt(e?.timeZone);if(e?.kind===`cron`){let n=typeof e.cron==`string`?e.cron.trim().replace(/\s+/g,` `):`0 9 * * *`;return t?{kind:`cron`,cron:n,timeZone:t}:{kind:`cron`,cron:n}}let n=typeof e?.minutes==`number`&&Number.isFinite(e.minutes)&&e.minutes>0?Math.max(1,Math.floor(e.minutes)):5;return t?{kind:`every`,minutes:n,timeZone:t}:{kind:`every`,minutes:n}}function vt(e){return(typeof e==`string`?e.trim():``)||void 0}function yt(e){let t=A();return t?{...e,timeZone:t}:e}function A(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone||void 0}catch{return}}function bt(){let e=A();return e?`${c(`hb.timezoneAuto`)} ${e}`:c(`hb.timezoneAuto`)}function j(e){let t={};for(let n of e){let e=xt(n);e&&(t[n.id]=e)}return t}function xt(e){let t=it(e.schedule);return t.ok?null:St(t.code,t.error)}function St(e,t){switch(e){case`invalid_cron`:return c(`hb.invalidCron`);case`invalid_timezone`:return c(`hb.invalidTimeZone`);case`invalid_minutes`:return c(`hb.invalidMinutes`);default:return t||c(`hb.invalidSchedule`)}}function Ct(e){let t=e.timeZone||A()||`Asia/Seoul`;return e.kind===`cron`?c(`hb.scheduleHintCron`,{cron:`0 9 * * *`,timeZone:t}):c(`hb.scheduleHintEvery`,{minutes:e.minutes,timeZone:t})}function M(e){return document.getElementById(e)}function N(e,t){let n=M(e);n&&(n.textContent=t==null?``:String(t))}function P(e,t){let n=M(e);n&&(n.value=t==null?``:String(t))}function wt(e,t){let n=M(`memorySidebarBtn`);if(!n)return;let r=e?.indexState===`ready`?`Ready`:e?.state===`not_initialized`?`Indexing`:e?.state||`(${t})`;n.innerHTML=`${i.brain} Memory · ${u(r)}`}function Tt(e){let t=M(`advStatusBanner`);if(t){if(!e?.enabled){t.style.display=`none`,t.textContent=``;return}if(t.style.display=``,e.state===`not_initialized`){t.textContent=`Integrated memory is preparing its index. Temporary fallback memory context is active until initialization completes.`;return}if(e.indexState===`not_indexed`){t.textContent=`Integrated memory is configured. Indexed search/read will activate after indexing becomes available.`;return}t.textContent=`Memory active. search/read=${e.routing?.searchRead||`basic`} / save=${e.routing?.save||`basic`}`}}function Et(e,t=!0){let n=M(`advStatusBanner`);n&&(n.style.display=t?``:`none`,n.textContent=e)}function F(e){for(let t of[`advBootstrapBtn`,`advReindexBtn`,`advReimportBtn`,`advOpenCorruptedBtn`]){let n=M(t);n&&(n.disabled=e)}}function Dt(e){M(`memOn`)?.classList.toggle(`active`,e.enabled),M(`memOff`)?.classList.toggle(`active`,!e.enabled),P(`memFlushEvery`,e.flushEvery),P(`memCli`,e.cli||``),P(`memModel`,e.model||``),P(`memRetention`,e.retentionDays),N(`memPath`,e.path),N(`memCounter`,e.counter),N(`memThreshold`,e.flushEvery)}function Ot(e){let t=M(`memTabBtnSettings`),n=M(`memTabSettings`);!t||!n||(t.style.display=``,n.style.display||(n.style.display=``))}function kt(e){N(`advIndexState`,e?.indexState||e?.state||`-`),N(`advStorageRoot`,e?.storageRoot||`-`),N(`advIndexedFiles`,e?.indexedFiles||0),N(`advIndexedChunks`,e?.indexedChunks||0),N(`advLastIndexedAt`,e?.lastIndexedAt||`-`),N(`advImportStatus`,e?.importStatus||`-`),N(`advCorruptedCount`,e?.corruptedCount||0),N(`advLastExpansion`,(e?.lastExpansion||[]).join(`, `)||`-`),N(`advLastError`,e?.lastError||`-`);let t=e?.importedCounts||{};N(`advImportStatus`,`${e?.importStatus||`-`} (core:${t.core||0} md:${t.markdown||0} kv:${t.kv||0} claude:${t.claude||0})`)}function At(e){let t=M(`basicMemoryFiles`);if(t){if(!e?.length){t.innerHTML=`<p style="color:var(--text-dim);font-size:12px;text-align:center">No memory files yet</p>`;return}t.innerHTML=e.map(e=>`
33
+ <div style="display:flex;align-items:center;justify-content:space-between;padding:6px 8px;border:1px solid var(--border);border-radius:4px;margin-bottom:4px;cursor:pointer"
34
+ data-mem-view="${u(e.name)}">
35
+ <div>
36
+ <span style="font-size:12px;font-family:monospace">${u(e.name)}</span>
37
+ <span style="font-size:10px;color:var(--accent);margin-left:6px">${e.entries} entries</span>
38
+ </div>
39
+ <button data-mem-delete="${u(e.name)}" style="background:none;border:none;color:#f55;cursor:pointer;font-size:14px">${i.trash}</button>
40
+ </div>
41
+ `).join(``)}}function I(e,t){let n=M(e);if(n){if(!t?.length){n.innerHTML=`<p style="color:var(--text-dim);font-size:12px;text-align:center">No files</p>`;return}n.innerHTML=t.map(e=>`<div style="padding:6px 8px;border:1px solid var(--border);border-radius:4px;margin-bottom:4px">
42
+ <span style="font-size:12px;font-family:monospace">${u(e)}</span>
43
+ </div>`).join(``)}}function jt(e){I(`advancedMemoryFiles`,[...e?.sections?.profile||[],...e?.sections?.shared||[],...e?.sections?.episodes||[],...e?.sections?.semantic||[],...e?.sections?.procedures||[],...e?.sections?.sessions||[]]),I(`corruptedMemoryFiles`,e?.sections?.corrupted||[]),I(`legacyUnmappedFiles`,e?.sections?.legacyUnmapped||[])}function Mt(){return{importCore:M(`advImportCore`)?.checked!==!1,importMarkdown:M(`advImportMarkdown`)?.checked!==!1,importKv:M(`advImportKv`)?.checked!==!1,importClaudeSession:M(`advImportClaudeSession`)?.checked!==!1}}async function Nt(){let[e,t,n]=await Promise.all([h(`/api/memory-files`),h(`/api/memory/status`),h(`/api/memory/files`)]);return{basic:e,status:t,files:n}}async function L(){let{basic:e,status:t,files:n}=await Nt();e&&(Dt(e),Ot(t),Tt(t),kt(t),At(e.files),jt(n),wt(t,e.files.length),M(`memoryModal`)?.classList.add(`open`),R(`status`))}function Pt(e){e&&e.target!==e.currentTarget||M(`memoryModal`)?.classList.remove(`open`)}function R(e){let t={settings:`memTabSettings`,status:`memTabAdvOps`,files:`memTabFiles`};for(let n of Object.values(t)){let r=M(n);r&&(r.style.display=n===t[e]?``:`none`)}M(`memTabBtnSettings`)?.classList.toggle(`active`,e===`settings`),M(`memTabBtnAdvOps`)?.classList.toggle(`active`,e===`status`),M(`memTabBtnFiles`)?.classList.toggle(`active`,e===`files`),M(`memTabBtnSettings`)?.setAttribute(`aria-selected`,String(e===`settings`)),M(`memTabBtnAdvOps`)?.setAttribute(`aria-selected`,String(e===`status`)),M(`memTabBtnFiles`)?.setAttribute(`aria-selected`,String(e===`files`))}async function Ft(e){M(`memOn`)?.classList.toggle(`active`,e),M(`memOff`)?.classList.toggle(`active`,!e),await m(`/api/memory-files/settings`,`PUT`,{enabled:e})}async function z(){let e=M(`memFlushEvery`),t=M(`memCli`),n=M(`memModel`),r=M(`memRetention`);await m(`/api/memory-files/settings`,`PUT`,{flushEvery:+(e?.value||10),cli:t?.value||``,model:n?.value||``,retentionDays:+(r?.value||30)});let i=M(`memThreshold`);i&&e&&(i.textContent=e.value)}async function It(){F(!0),Et(`메모리 bootstrap을 다시 실행하는 중...`,!0);let e=await m(`/api/memory/bootstrap`,`POST`,Mt());F(!1),e?.message&&alert(e.message),await L(),R(`status`)}async function Lt(){F(!0),Et(`메모리 인덱스를 재생성하는 중...`,!0);let e=await m(`/api/memory/reindex`,`POST`,{});F(!1),e?.message&&alert(e.message),await L(),R(`status`)}function Rt(){let e=M(`advStorageRoot`)?.textContent||``,t=e?`${e}/corrupted`:`JAW_HOME/memory/structured/corrupted`;navigator.clipboard?.writeText&&navigator.clipboard.writeText(t).catch(()=>{}),alert(`Corrupted folder path copied/shown:\n${t}`)}async function zt(e){confirm(`Delete `+e+`?`)&&(await m(`/api/memory-file?path=`+encodeURIComponent(e),`DELETE`,{}),L())}async function Bt(e){let t=await h(`/api/memory-file?path=`+encodeURIComponent(e));if(!t)return;let n=M(`basicMemoryFiles`);n&&(n.innerHTML=`
44
+ <div style="margin-bottom:8px;display:flex;justify-content:space-between;align-items:center">
45
+ <span style="font-size:12px;font-weight:600">${u(t.name)}</span>
46
+ <button data-mem-back style="background:none;border:none;color:var(--accent);cursor:pointer;font-size:11px">${i.arrowLeft} back</button>
47
+ </div>
48
+ <pre style="background:var(--bg);padding:8px;border-radius:4px;font-size:11px;white-space:pre-wrap;max-height:50vh;overflow-y:auto;color:var(--text)">${u(t.content)}</pre>
49
+ `)}var B=`sidebarState`,V=900;function Vt(){let e={};try{e=JSON.parse(localStorage.getItem(B)||`{}`)}catch{}e.left&&document.body.classList.add(`left-collapsed`),e.right&&document.body.classList.add(`right-collapsed`),document.getElementById(`toggleLeft`)?.addEventListener(`click`,U),document.getElementById(`toggleRight`)?.addEventListener(`click`,W),window.addEventListener(`resize`,()=>{if(window.innerWidth>V){document.body.classList.remove(`left-expanded`,`right-expanded`);let e={};try{e=JSON.parse(localStorage.getItem(B)||`{}`)}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`);G()}),window.innerWidth<=V&&document.body.classList.remove(`left-collapsed`,`right-collapsed`),G()}function H(){return window.innerWidth<=V}function U(){H()?document.body.classList.toggle(`left-expanded`):document.body.classList.toggle(`left-collapsed`),Wt(),G()}function W(){H()?document.body.classList.toggle(`right-expanded`):document.body.classList.toggle(`right-collapsed`),Wt(),G()}function Ht(){return H()?document.body.classList.contains(`left-expanded`):!document.body.classList.contains(`left-collapsed`)}function Ut(){return H()?document.body.classList.contains(`right-expanded`):!document.body.classList.contains(`right-collapsed`)}function G(){let e=document.getElementById(`toggleLeft`),t=document.getElementById(`toggleRight`);e&&(e.innerHTML=Ht()?i.chevronLeft:i.chevronRight),t&&(t.innerHTML=Ut()?i.chevronRight:i.chevronLeft)}function Wt(){localStorage.setItem(B,JSON.stringify({left:document.body.classList.contains(`left-collapsed`),right:document.body.classList.contains(`right-collapsed`)}))}var Gt=`theme`,K=null;function Kt(n){let r=n===`light`?t:e;K||(K=document.createElement(`style`),K.id=`hljsTheme`,document.head.appendChild(K)),K.textContent=r}function qt(){let e=localStorage.getItem(Gt),t=window.matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`;Yt(e||t),document.getElementById(`toggleTheme`)?.addEventListener(`click`,Jt)}function Jt(){let e=(document.documentElement.getAttribute(`data-theme`)||`dark`)===`dark`?`light`:`dark`;Yt(e),localStorage.setItem(Gt,e)}function Yt(e){document.documentElement.setAttribute(`data-theme`,e);let t=document.getElementById(`toggleTheme`);t&&t.classList.toggle(`is-light`,e===`light`),Kt(e),ne(),l()}var Xt=50,Zt=30,Qt=80,$t=500,q=null,en=!1;function tn(){if(en||!(`ontouchstart`in window))return;en=!0;let e=document.querySelector(`.chat-area`);e&&(e.addEventListener(`touchstart`,nn,{passive:!0}),e.addEventListener(`touchend`,rn,{passive:!0}))}function nn(e){let t=e.touches[0],n=window.innerWidth,r=null;t.clientX<Zt?r=`left`:t.clientX>n-Zt&&(r=`right`),q={startX:t.clientX,startY:t.clientY,startTime:Date.now(),isEdge:r}}function rn(e){if(!q)return;let t=e.changedTouches[0],n=t.clientX-q.startX,r=Math.abs(t.clientY-q.startY),i=Date.now()-q.startTime,a=q;q=null,!(r>Qt||i>$t||Math.abs(n)<Xt)&&(n>0&&a.isEdge===`left`&&U(),n<0&&a.isEdge===`right`&&W())}var J=!1,Y=null,X=[],Z=null,an=null,on=0;function sn(){if(typeof MediaRecorder>`u`)return``;for(let e of[`audio/webm;codecs=opus`,`audio/mp4`,`audio/ogg;codecs=opus`])if(MediaRecorder.isTypeSupported(e))return e;return``}function cn(e){let t=e;switch(t.name){case`NotAllowedError`:return c(`voice.micDenied`);case`NotFoundError`:return c(`voice.micNotFound`);case`NotReadableError`:case`AbortError`:return c(`voice.micBusy`);default:return t instanceof TypeError||!navigator.mediaDevices?c(`voice.httpsRequired`):c(`voice.micDenied`)}}async function ln(){if(n.isRecording)return;if(typeof MediaRecorder>`u`||!navigator.mediaDevices?.getUserMedia){f(c(`voice.unsupported`),``,`error`);return}try{Z=await navigator.mediaDevices.getUserMedia({audio:!0})}catch(e){f(cn(e),``,`error`);return}let e=sn();Y=new MediaRecorder(Z,e?{mimeType:e}:{}),X=[],Y.ondataavailable=e=>{e.data.size>0&&X.push(e.data)},Y.onerror=()=>{un(),f(c(`voice.interrupted`),``,`error`)},Y.onstop=async()=>{if(J){X=[],pn(),J=!1;return}let t=Y?.mimeType||e||`audio/webm`,n=t.includes(`mp4`)?`.m4a`:t.includes(`ogg`)?`.ogg`:`.webm`,r=new Blob(X,{type:t});if(X=[],pn(),r.size>20*1024*1024){f(c(`voice.tooLarge`),``,`error`);return}if(r.size<1e3){f(c(`voice.tooShort`),``,`error`);return}await et(r,n,t)},Y.start(),n.isRecording=!0,on=Date.now(),gn(!0),mn()}function un(){!n.isRecording||!Y||(Y.state===`recording`&&Y.stop(),n.isRecording=!1,hn(),gn(!1))}function dn(){!n.isRecording||!Y||(J=!0,Y.state===`recording`&&Y.stop(),n.isRecording=!1,hn(),gn(!1))}function fn(){n.isRecording?un():ln()}function pn(){Z?.getTracks().forEach(e=>e.stop()),Z=null}function mn(){let e=document.getElementById(`voiceTimer`);e&&(e.style.display=`inline`,an=setInterval(()=>{let t=Math.floor((Date.now()-on)/1e3);e.textContent=`${String(Math.floor(t/60)).padStart(2,`0`)}:${String(t%60).padStart(2,`0`)}`},500))}function hn(){an&&=(clearInterval(an),null);let e=document.getElementById(`voiceTimer`);e&&(e.style.display=`none`,e.textContent=`00:00`)}function gn(e){let t=document.getElementById(`btnVoice`),n=document.getElementById(`btnVoiceCancel`);t&&(t.classList.toggle(`recording`,e),t.innerHTML=e?i.stop:i.mic,t.title=c(e?`voice.stop`:`voice.start`)),n&&(n.style.display=e?`inline-block`:`none`)}window.addEventListener(`unhandledrejection`,e=>{console.error(`[unhandled]`,e.reason),e.preventDefault()}),window.addEventListener(`error`,e=>{console.error(`[error]`,e.message,e.filename,e.lineno)});var{loadEmployees:_n,addEmployee:vn,deleteEmployee:yn,updateEmployee:Q,onEmpCliChange:bn,onEmpRoleChange:xn}=await r(async()=>{let{loadEmployees:e,addEmployee:t,deleteEmployee:n,updateEmployee:r,onEmpCliChange:i,onEmpRoleChange:a}=await import(`./employees-D5n7mX5v.js`);return{loadEmployees:e,addEmployee:t,deleteEmployee:n,updateEmployee:r,onEmpCliChange:i,onEmpRoleChange:a}},__vite__mapDeps([0]));document.getElementById(`btnSend`)?.addEventListener(`click`,b);var Sn=document.getElementById(`chatInput`);Sn?.addEventListener(`keydown`,e=>{me(e)||Ke(e)});var $=0;Sn?.addEventListener(`input`,e=>{e.isComposing||($&&cancelAnimationFrame($),$=requestAnimationFrame(()=>{pe(e.target?.value||``),$=0}))}),Sn?.addEventListener(`cmd-execute`,()=>{b()}),document.getElementById(`cmdDropdown`)?.addEventListener(`click`,fe),document.addEventListener(`click`,de),document.getElementById(`filePreviewClear`)?.addEventListener(`click`,S),document.getElementById(`filePreviewList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-file-idx]`);t&&Je(+(t.dataset.fileIdx||`0`))}),document.querySelector(`.btn-attach`)?.addEventListener(`click`,()=>{document.getElementById(`fileInput`)?.click()}),document.getElementById(`btnVoice`)?.addEventListener(`click`,()=>fn()),document.getElementById(`btnVoiceCancel`)?.addEventListener(`click`,()=>dn()),document.getElementById(`memorySidebarBtn`)?.addEventListener(`click`,L),document.getElementById(`btnClearChat`)?.addEventListener(`click`,Ye),document.getElementById(`hbSidebarBtn`)?.addEventListener(`click`,dt),document.getElementById(`langToggle`)?.addEventListener(`click`,async()=>{let e=d()===`ko`?`en`:`ko`;await s(e);let t=document.getElementById(`langToggle`);t&&(t.innerHTML=`${i.web} ${c(`lang.`+e)}`),n.ws&&n.ws.close()}),document.querySelector(`.tab-bar`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`.tab-btn`);if(!t)return;let n=[...t.parentElement?.children||[]].filter(e=>e.classList.contains(`tab-btn`)).indexOf(t),r=[`agents`,`skills`,`settings`];r[n]&&ie(r[n],t)}),document.querySelector(`.sidebar-save-bar .btn-save`)?.addEventListener(`click`,re),document.getElementById(`selCli`)?.addEventListener(`change`,()=>Ie()),document.getElementById(`selModel`)?.addEventListener(`change`,()=>je()),document.getElementById(`selEffort`)?.addEventListener(`change`,()=>je()),document.querySelector(`[data-action="addEmployee"]`)?.addEventListener(`click`,vn),document.getElementById(`employeesList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-emp-delete]`);if(t){yn(t.dataset.empDelete||``);return}}),document.getElementById(`employeesList`)?.addEventListener(`change`,e=>{let t=e.target,n=t.closest(`[data-emp-name]`);if(n){Q(n.dataset.empName||``,{name:t.value});return}let r=t.closest(`[data-emp-cli]`);if(r){bn(r.dataset.empCli||``,t.value);return}let i=t.closest(`[data-emp-model]`);if(i){if(t.value===`__custom__`){let e=prompt(c(`model.promptInput`));if(e?.trim()){let n=document.createElement(`option`);n.value=e.trim(),n.textContent=e.trim();let r=t.querySelector(`option[value="__custom__"]`);r&&t.insertBefore(n,r),t.value=e.trim(),Q(i.dataset.empModel||``,{model:e.trim()})}else t.value=`default`}else Q(i.dataset.empModel||``,{model:t.value});return}let a=t.closest(`[data-emp-role]`);if(a){xn(a.dataset.empRole||``,t.value);return}let o=t.closest(`[data-emp-custom]`);if(o){Q(o.dataset.empCustom||``,{role:t.value});return}}),document.getElementById(`skillsList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-skill-id]`);t&&ge(t.dataset.skillId||``,t.dataset.skillEnabled===`true`)}),document.querySelector(`#tabSkills`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`.skill-filter`);t&&_e(t.dataset.filter||`all`,t)}),document.querySelector(`[data-action="openPrompt"]`)?.addEventListener(`click`,Be),document.getElementById(`tgOff`)?.addEventListener(`click`,()=>Ce(!1)),document.getElementById(`tgOn`)?.addEventListener(`click`,()=>Ce(!0)),document.getElementById(`tgForwardOff`)?.addEventListener(`click`,()=>Se(!1)),document.getElementById(`tgForwardOn`)?.addEventListener(`click`,()=>Se(!0)),document.getElementById(`tgToken`)?.addEventListener(`change`,Ne),document.getElementById(`tgChatIds`)?.addEventListener(`change`,Ne),document.getElementById(`chTelegram`)?.addEventListener(`click`,()=>Ee(`telegram`)),document.getElementById(`chDiscord`)?.addEventListener(`click`,()=>Ee(`discord`)),document.getElementById(`dcOff`)?.addEventListener(`click`,()=>xe(!1)),document.getElementById(`dcOn`)?.addEventListener(`click`,()=>xe(!0)),document.getElementById(`dcForwardOff`)?.addEventListener(`click`,()=>Pe(!1)),document.getElementById(`dcForwardOn`)?.addEventListener(`click`,()=>Pe(!0)),document.getElementById(`dcAllowBotsOff`)?.addEventListener(`click`,()=>we(!1)),document.getElementById(`dcAllowBotsOn`)?.addEventListener(`click`,()=>we(!0)),document.getElementById(`dcMentionOff`)?.addEventListener(`click`,()=>be(!1)),document.getElementById(`dcMentionOn`)?.addEventListener(`click`,()=>be(!0)),document.getElementById(`dcToken`)?.addEventListener(`change`,g),document.getElementById(`dcGuildId`)?.addEventListener(`change`,g),document.getElementById(`dcChannelIds`)?.addEventListener(`change`,g),document.getElementById(`fallbackOrderList`)?.addEventListener(`change`,Ue);function Cn(e){let t=document.getElementById(`codexFastOn`),n=document.getElementById(`codexFastOff`);t&&n&&(t.classList.toggle(`active`,e),n.classList.toggle(`active`,!e)),_()}document.getElementById(`codexFastOn`)?.addEventListener(`click`,()=>Cn(!0)),document.getElementById(`codexFastOff`)?.addEventListener(`click`,()=>Cn(!1));function wn(e){let t=document.getElementById(`codexCtxOn`),n=document.getElementById(`codexCtxOff`),r=document.getElementById(`codexCtxValues`);t&&n&&(t.classList.toggle(`active`,e),n.classList.toggle(`active`,!e)),r&&(r.style.display=e?``:`none`),_()}document.getElementById(`codexCtxOn`)?.addEventListener(`click`,()=>wn(!0)),document.getElementById(`codexCtxOff`)?.addEventListener(`click`,()=>wn(!1)),document.getElementById(`codexCtxWindow`)?.addEventListener(`change`,_),document.getElementById(`codexCtxCompact`)?.addEventListener(`change`,_);function Tn(e){let t=document.getElementById(`claude1mOn`),n=document.getElementById(`claude1mOff`),r=document.getElementById(`modelClaude`),i=e;if(r){let t=r.value||``;if(e&&!t.endsWith(`[1m]`)){let e=t+`[1m]`;Array.from(r.options).some(t=>t.value===e)?r.value=e:i=!1}else if(!e&&t.endsWith(`[1m]`)){let e=t.replace(/\[1m\]$/,``);Array.from(r.options).some(t=>t.value===e)?r.value=e:i=!0}else i=t.endsWith(`[1m]`)}t&&n&&(t.classList.toggle(`active`,i),n.classList.toggle(`active`,!i)),_()}document.getElementById(`claude1mOn`)?.addEventListener(`click`,()=>Tn(!0)),document.getElementById(`claude1mOff`)?.addEventListener(`click`,()=>Tn(!1));function En(){for(let e of ye()){let t=e.charAt(0).toUpperCase()+e.slice(1),n=document.getElementById(`model`+t);n&&n.addEventListener(`change`,function(){Ae(e,this)});let r=document.getElementById(`customModel`+t);r&&r.addEventListener(`change`,function(){He(e,this)});let i=document.getElementById(`effort`+t);i&&i.addEventListener(`change`,_)}}document.querySelector(`[data-action="syncMcp"]`)?.addEventListener(`click`,Te),document.querySelector(`[data-action="installMcp"]`)?.addEventListener(`click`,Oe),document.querySelector(`[data-action="refreshCli"]`)?.addEventListener(`click`,()=>Fe(!0)),document.getElementById(`cliStatusInterval`)?.addEventListener(`change`,function(){localStorage.setItem(`cliStatusInterval`,this.value)}),document.getElementById(`promptModal`)?.addEventListener(`click`,e=>v(e)),document.querySelector(`#promptModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closePrompt"]`)?.addEventListener(`click`,()=>v()),document.querySelector(`[data-action="cancelPrompt"]`)?.addEventListener(`click`,()=>v()),document.querySelector(`[data-action="savePrompt"]`)?.addEventListener(`click`,De),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&!n.isRecording&&v()}),document.querySelector(`[data-action="openTemplates"]`)?.addEventListener(`click`,Me),document.querySelector(`[data-action="saveTemplate"]`)?.addEventListener(`click`,Re),document.querySelector(`[data-action="closeTemplate"]`)?.addEventListener(`click`,()=>Le()),document.getElementById(`templateModal`)?.addEventListener(`click`,e=>Le(e)),document.querySelector(`#templateModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.getElementById(`templateBack`)?.addEventListener(`click`,Ve),document.getElementById(`templateDevToggle`)?.addEventListener(`click`,ke),document.getElementById(`heartbeatModal`)?.addEventListener(`click`,e=>ft(e)),document.querySelector(`#heartbeatModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closeHeartbeat"]`)?.addEventListener(`click`,()=>ft()),document.querySelector(`[data-action="addHeartbeat"]`)?.addEventListener(`click`,pt),document.getElementById(`hbJobsList`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-hb-toggle]`);if(t){ht(+(t.dataset.hbToggle||`0`));return}let n=e.target?.closest(`[data-hb-remove]`);if(n){mt(+(n.dataset.hbRemove||`0`));return}}),document.getElementById(`hbJobsList`)?.addEventListener(`change`,e=>{let t=e.target,r=t.closest(`[data-hb-name]`);if(r){n.heartbeatJobs[+(r.dataset.hbName||`0`)].name=t.value,O();return}let i=t.closest(`[data-hb-kind]`);if(i){let e=+(i.dataset.hbKind||`0`),r=n.heartbeatJobs[e]?.schedule,a=typeof r?.timeZone==`string`?r.timeZone:void 0;n.heartbeatJobs[e].schedule=t.value===`cron`?{kind:`cron`,cron:typeof r?.cron==`string`&&r.cron.trim()?r.cron:`0 9 * * *`,...a?{timeZone:a}:{}}:{kind:`every`,minutes:typeof r?.minutes==`number`&&r.minutes>0?Math.floor(r.minutes):5,...a?{timeZone:a}:{}},D(),O();return}let a=t.closest(`[data-hb-minutes]`);if(a){let e=+(a.dataset.hbMinutes||`0`),r=n.heartbeatJobs[e]?.schedule,i=Math.max(1,Math.floor(Number(t.value)||5)),o=typeof r?.timeZone==`string`?r.timeZone:void 0;n.heartbeatJobs[e].schedule={kind:`every`,minutes:i,...o?{timeZone:o}:{}},D(),O();return}let o=t.closest(`[data-hb-cron]`);if(o){let e=+(o.dataset.hbCron||`0`),r=n.heartbeatJobs[e]?.schedule,i=typeof r?.timeZone==`string`?r.timeZone:void 0,a=t.value.trim().replace(/\s+/g,` `);n.heartbeatJobs[e].schedule={kind:`cron`,cron:a,...i?{timeZone:i}:{}},D(),O();return}let s=t.closest(`[data-hb-timezone]`);if(s){let e=+(s.dataset.hbTimezone||`0`),r=n.heartbeatJobs[e]?.schedule;r?.kind===`cron`?n.heartbeatJobs[e].schedule={kind:`cron`,cron:typeof r.cron==`string`&&r.cron.trim()?r.cron:`0 9 * * *`,...t.value.trim()?{timeZone:t.value.trim()}:{}}:n.heartbeatJobs[e].schedule={kind:`every`,minutes:typeof r?.minutes==`number`&&r.minutes>0?Math.floor(r.minutes):5,...t.value.trim()?{timeZone:t.value.trim()}:{}},D(),O();return}let c=t.closest(`[data-hb-prompt]`);if(c){n.heartbeatJobs[+(c.dataset.hbPrompt||`0`)].prompt=t.value,O();return}}),document.getElementById(`memoryModal`)?.addEventListener(`click`,e=>Pt(e)),document.querySelector(`#memoryModal .modal-box`)?.addEventListener(`click`,e=>e.stopPropagation()),document.querySelector(`[data-action="closeMemory"]`)?.addEventListener(`click`,()=>Pt()),document.getElementById(`memTabBtnSettings`)?.addEventListener(`click`,()=>R(`settings`)),document.getElementById(`memTabBtnAdvOps`)?.addEventListener(`click`,()=>R(`status`)),document.getElementById(`memTabBtnFiles`)?.addEventListener(`click`,()=>R(`files`)),document.getElementById(`memOn`)?.addEventListener(`click`,()=>Ft(!0)),document.getElementById(`memOff`)?.addEventListener(`click`,()=>Ft(!1)),document.getElementById(`memFlushEvery`)?.addEventListener(`change`,z),document.getElementById(`memCli`)?.addEventListener(`change`,z),document.getElementById(`memModel`)?.addEventListener(`change`,z),document.getElementById(`memRetention`)?.addEventListener(`change`,z),document.getElementById(`advBootstrapBtn`)?.addEventListener(`click`,It),document.getElementById(`advReindexBtn`)?.addEventListener(`click`,Lt),document.getElementById(`advReimportBtn`)?.addEventListener(`click`,It),document.getElementById(`advOpenCorruptedBtn`)?.addEventListener(`click`,Rt),document.getElementById(`basicMemoryFiles`)?.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-mem-delete]`);if(t){e.stopPropagation(),zt(t.dataset.memDelete||``);return}let n=e.target?.closest(`[data-mem-view]`);if(n){Bt(n.dataset.memView||``);return}if(e.target?.closest(`[data-mem-back]`)){L();return}});async function Dn(){a(),We(),await o();let e=document.getElementById(`langToggle`);e&&(e.innerHTML=`${i.web} ${c(`lang.`+d())}`),await ve(),En(),ce(),$e(),Qe(),await ue(),await ze(),Fe(),_n(),gt(),oe(),Vt(),qt(),ae(),tn(),`serviceWorker`in navigator&&navigator.serviceWorker.register(`/sw.js`).catch(()=>{})}Dn().catch(e=>{console.error(`[bootstrap]`,e)}),document.addEventListener(`keydown`,e=>{if(e.key===`Escape`){if(n.isRecording){e.preventDefault(),dn();return}document.querySelectorAll(`.modal-overlay.open`).forEach(e=>{e.classList.remove(`open`)})}(e.ctrlKey||e.metaKey)&&e.shiftKey&&e.code===`Space`&&(e.preventDefault(),fn())}),document.getElementById(`mobileMenuLeft`)?.addEventListener(`click`,U),document.getElementById(`mobileMenuRight`)?.addEventListener(`click`,W);
@@ -0,0 +1 @@
1
+ import{K as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as createInfoServices};
@@ -0,0 +1 @@
1
+ import{_ as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as diagram};
@@ -0,0 +1 @@
1
+ import{g as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as diagram};
@@ -0,0 +1 @@
1
+ import{h as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as diagram};
@@ -0,0 +1 @@
1
+ import{m as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as diagram};
@@ -0,0 +1 @@
1
+ import{t as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as default};
@@ -0,0 +1 @@
1
+ import{p as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as diagram};
@@ -0,0 +1 @@
1
+ import{W as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as createPacketServices};
@@ -0,0 +1 @@
1
+ import{H as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as createPieServices};
@@ -0,0 +1 @@
1
+ import{f as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as diagram};
@@ -0,0 +1 @@
1
+ import{d as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as diagram};
@@ -0,0 +1 @@
1
+ import{B as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as createRadarServices};
@@ -0,0 +1,25 @@
1
+ import{A as e,C as t,D as n,E as r,F as i,I as a,M as o,N as s,O as c,P as l,S as u,T as d,_ as f,b as ee,j as p,k as m,u as te,v as ne,w as h,x as re,y as g}from"./vendor-render-D2YP6GiF.js";import{Q as _,Z as v}from"./vendor-mermaid-lvHqQdfg.js";import{A as ie,B as ae,C as oe,D as se,E as ce,F as le,G as ue,H as de,I as fe,J as pe,K as me,L as he,M as ge,N as _e,O as ve,P as ye,R as be,S as xe,T as Se,U as Ce,V as we,W as Te,_ as Ee,a as y,b,c as x,d as S,f as C,g as w,h as T,i as E,j as D,k as De,l as Oe,m as ke,n as Ae,o as je,p as Me,q as Ne,r as Pe,s as Fe,t as Ie,u as Le,v as Re,w as ze,x as Be,y as Ve,z as He}from"./vendor-icons-1Ec7ZWcT.js";var O=`ko`,k={},A={};async function Ue(){let e=null;try{e=localStorage.getItem(`claw_locale`)}catch{}if(!e){let t=(navigator.language||`ko`).split(/[-_]/)[0].toLowerCase();e=[`en`,`ko`].includes(t)?t:`ko`}A=await j(`ko`),k=e===`ko`?A:await j(e),O=e,N()}async function j(e){try{let{api:t}=await v(async()=>{let{api:e}=await import(`./api-Bbmmo0o1.js`);return{api:e}},[]);return await t(`/api/i18n/${e}`)||{}}catch{return{}}}function M(e,t={}){let n=k[e]??A[e]??e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{${e}}`,String(r));return n}function N(){document.querySelectorAll(`[data-i18n]`).forEach(e=>{let t=e.getAttribute(`data-i18n`);t&&(e.textContent=M(t))}),document.querySelectorAll(`[data-i18n-placeholder]`).forEach(e=>{let t=e.getAttribute(`data-i18n-placeholder`);t&&(e.placeholder=M(t))}),document.querySelectorAll(`[data-i18n-title]`).forEach(e=>{let t=e.getAttribute(`data-i18n-title`);t&&(e.title=M(t))}),document.querySelectorAll(`[data-i18n-aria]`).forEach(e=>{let t=e.getAttribute(`data-i18n-aria`);t&&e.setAttribute(`aria-label`,M(t))})}async function We(e){if(e!==O){k=e===`ko`?A:await j(e),O=e;try{localStorage.setItem(`claw_locale`,e)}catch{}N();try{let{loadEmployees:e}=await v(async()=>{let{loadEmployees:e}=await import(`./employees-D5n7mX5v.js`);return{loadEmployees:e}},[]);e()}catch{}try{let{loadSkills:e}=await v(async()=>{let{loadSkills:e}=await import(`./skills-D6jv9AIs.js`);return{loadSkills:e}},[]);e()}catch{}try{let{loadCommands:e}=await v(async()=>{let{loadCommands:e}=await import(`./slash-commands-CCDonT40.js`);return{loadCommands:e}},[]);e()}catch{}try{let{loadSettings:e}=await v(async()=>{let{loadSettings:e}=await import(`./settings-Dm6OnPmY.js`);return{loadSettings:e}},[]);e()}catch{}}}function Ge(){return O}function Ke(e,t={}){let n=new URL(e,location.origin);return n.searchParams.has(`locale`)||n.searchParams.set(`locale`,O),fetch(n.toString(),t)}var P=14,qe=16;function F(e,t=qe){return pe(e,{size:t})}var I={check:F(be),error:F(he),warning:F(E),skip:F(Fe),tool:F(Pe),thinking:F(b),search:F(Le),web:F(ie),exec:F(Ie),compacting:F(Ee),plan:F(Re),brain:F(Te),heartPulse:F(ve),lock:F(Be),lockOpen:F(xe),key:F(Se),settings:F(x),file:F(_e),trash:F(y),lightbulb:F(ze),refresh:F(C),mic:F(Ve),clipboard:F(fe),robot:F(ue),palette:F(w),link:F(oe),salute:F(De),shark:`🦈`,paperclip:F(T),save:F(S),gamepad:F(D),house:F(ce),radio:F(Me),folder:F(ge),pencil:F(ke),chart:F(Ce),hourglass:F(se),stop:F(je),close:F(Ae,P),send:F(Oe),copy:F(le,P),download:F(ye,P),checkSimple:F(de,P),chevronLeft:F(ae,P),chevronRight:F(He,P),chevronDown:F(we,P),arrowLeft:F(Ne,P),arrowRight:F(me,P)},Je={"✅":`check`,"❌":`error`,"🔧":`tool`,"⏭":`skip`,"🧠":`brain`,"💓":`heartPulse`,"🔒":`lock`,"🔓":`lockOpen`,"🔑":`key`,"⚙":`settings`,"⚙️":`settings`,"📄":`file`,"🗑":`trash`,"🗑️":`trash`,"⚠":`warning`,"⚠️":`warning`,"💡":`lightbulb`,"🦈":`shark`,"💭":`thinking`,"🔍":`search`,"🌐":`web`,"⚡":`exec`,"🗜":`compacting`,"🗜️":`compacting`,"📝":`plan`,"📑":`clipboard`,"🤖":`robot`,"📋":`clipboard`,"🔄":`refresh`,"🎨":`palette`,"🎤":`mic`,"🔗":`link`,"🫡":`salute`,"📎":`paperclip`,"💾":`save`,"🎮":`gamepad`,"🏠":`house`,"📡":`radio`,"📂":`folder`,"✏️":`pencil`,"📊":`chart`,"🎙️":`mic`};function Ye(e){let t=Je[e];return t?I[t]:e}function Xe(e){return e===`✅`?`done`:e===`❌`?`error`:null}function Ze(e=document.body){let t=e.querySelectorAll(`[data-icon]`);for(let e of t){let t=e.dataset.icon;t&&I[t]&&(e.innerHTML=I[t],e.classList.add(`icon-hydrated`))}}function Qe(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 L=0;function $e(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-${L++}\x00`;return t.set(n,e),n}),fences:t}}function et(e,t){for(let[n,r]of t)e=e.replace(n,()=>r);return e}function tt(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=L++,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=L++;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}}l.registerLanguage(`javascript`,s),l.registerLanguage(`js`,s),l.registerLanguage(`typescript`,o),l.registerLanguage(`ts`,o),l.registerLanguage(`python`,p),l.registerLanguage(`py`,p),l.registerLanguage(`bash`,e),l.registerLanguage(`shell`,m),l.registerLanguage(`sh`,m),l.registerLanguage(`json`,c),l.registerLanguage(`css`,n),l.registerLanguage(`xml`,r),l.registerLanguage(`html`,r),l.registerLanguage(`markdown`,d),l.registerLanguage(`md`,d),l.registerLanguage(`yaml`,h),l.registerLanguage(`yml`,h),l.registerLanguage(`sql`,t),l.registerLanguage(`rust`,u),l.registerLanguage(`rs`,u),l.registerLanguage(`go`,re),l.registerLanguage(`java`,ee),l.registerLanguage(`cpp`,g),l.registerLanguage(`c`,g),l.registerLanguage(`diff`,ne),l.registerLanguage(`plaintext`,f),l.registerLanguage(`text`,f);var R=null,z=null;function nt(){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 B(){let e=document.documentElement.getAttribute(`data-theme`)||`dark`;return R||=await v(()=>import(`./mermaid.core-BoxIvw7E.js`),[]),z!==e&&(z=e,R.default.initialize({startOnLoad:!1,theme:`base`,themeVariables:nt(),securityLevel:`strict`})),R.default}function V(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function H(e){return _.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`]})}var rt=`http://www.w3.org/2000/svg`,it=new Set([`a`,`area`,`link`]);_.addHook(`afterSanitizeAttributes`,e=>{let t=e.tagName.toLowerCase();if(e.namespaceURI===rt||!it.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`)}let r=[`fill`,`stroke`,`filter`,`mask`,`clip-path`,`marker-start`,`marker-mid`,`marker-end`,`cursor`];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 r)if(e.hasAttribute(t)){let n=e.getAttribute(t)||``;if(/url\s*\(/i.test(n)){let r=n.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`);e.setAttribute(t,r)}}});var at=/["'](?:subtasks|employee_config|agent_phases|orchestration_plan)["']\s*:/;function U(e){let t=e.replace(/```json\n([\s\S]*?)\n```/g,(e,t)=>at.test(t)?``:e);return t=t.replace(/\{[^{}]*"subtasks"\s*:\s*\[[\s\S]*?\]\s*\}/g,``).trim(),t}function ot(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 st(e,t){return e.replace(/\x00MATH-(\d+)\x00/g,(e,n)=>{let r=t[Number(n)];if(!r)return`<code title="math placeholder error">[math error]</code>`;try{return te.renderToString(r.tex,{displayMode:r.displayMode,throwOnError:!1})}catch{return r.displayMode?`<pre><code>${V(r.tex)}</code></pre>`:`<code>${V(r.tex)}</code>`}})}var W=0;async function ct(){z=null;let e=document.querySelectorAll(`.mermaid-rendered`);if(!e.length)return;let t=await B();for(let n of e){let e=n.dataset.mermaidCode;if(!e)continue;let r=`mermaid-${++W}`;try{let{svg:i}=await t.render(r,e);n.innerHTML=i,K(n)}catch{}}}var G=null;function lt(){G||=new IntersectionObserver(e=>{for(let t of e){if(!t.isIntersecting)continue;let e=t.target;e.classList.contains(`mermaid-pending`)&&(G.unobserve(e),ut(e))}},{rootMargin:`200px`})}function K(e){e.querySelector(`.mermaid-copy-btn`)?.remove(),e.querySelector(`.mermaid-save-btn`)?.remove();let t=document.createElement(`button`);t.className=`mermaid-save-btn`,t.type=`button`,t.ariaLabel=`Save as image`,t.title=`Save`,t.innerHTML=I.download,e.appendChild(t);let n=document.createElement(`button`);n.className=`mermaid-copy-btn`,n.type=`button`,n.ariaLabel=`Copy source`,n.title=`Copy`,n.innerHTML=I.copy,e.appendChild(n)}async function ut(e){e.classList.remove(`mermaid-pending`);let t=e.textContent||``;e.dataset.mermaidCode=t;let n=`mermaid-${++W}`;try{let{svg:r}=await(await B()).render(n,t);e.innerHTML=r,e.classList.add(`mermaid-rendered`),K(e)}catch(n){let r=n?.message||n?.str||`Unknown error`;e.innerHTML=`
2
+ <div class="mermaid-error">
3
+ <div class="mermaid-error-title">${I.warning} ${V(M(`mermaid.renderFail`)||`Mermaid render failed`)}</div>
4
+ <div class="mermaid-error-msg">${V(r.slice(0,200))}</div>
5
+ <pre class="mermaid-error-code"><code>${V(t)}</code></pre>
6
+ </div>`}}async function dt(){let e=document.querySelectorAll(`.mermaid-pending`);if(e.length){lt();for(let t of e)G.observe(t)}}var q=!1;function ft(){if(q)return!0;let e=new a;return e.code=function({text:e,lang:t}){if(t===`mermaid`)return`<div class="mermaid-container mermaid-pending">${V(e)}</div>`;if(t?.trim().toLowerCase()===`diagram-html`)return`<div class="diagram-widget-pending" data-diagram-html="${btoa(unescape(encodeURIComponent(e)))}"
7
+ role="status" aria-label="Interactive widget loading">
8
+ <div class="diagram-spinner"></div>
9
+ </div>`;let n=V(e);if(t&&l.getLanguage(t))try{n=l.highlight(e,{language:t}).value}catch{}else try{n=l.highlightAuto(e).value}catch{}let r=t?V(t):``,i=M(`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="${V(i)}">${V(i)}</button></div><pre><code class="hljs${t?` language-${V(t)}`:``}">${n}</code></pre></div>`},i.setOptions({renderer:e,gfm:!0,breaks:!1}),q=!0,!0}function pt(){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&&l.getLanguage(t)?e.innerHTML=l.highlight(n,{language:t}).value:e.innerHTML=l.highlightAuto(n).value,e.dataset.highlighted=`yes`}catch{}})}var J=!1;function mt(){J||(J=!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;navigator.clipboard.writeText(t.textContent||``).then(()=>{let e=n.textContent||``;n.textContent=M(`code.copied`),n.classList.add(`copied`),setTimeout(()=>{n.textContent=e,n.classList.remove(`copied`)},1500)}).catch(()=>{});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&&navigator.clipboard.writeText(a.textContent||``).then(()=>{let e=r.textContent||``;r.textContent=M(`code.copied`),r.classList.add(`copied`),setTimeout(()=>{r.textContent=e,r.classList.remove(`copied`)},1500)}).catch(()=>{})}))}var Y=!1;function ht(){Y||(Y=!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&&X(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&&X(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`},`*`),X(i,``,`save`));return}let t=e.querySelector(`svg`);t&&Z(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&&Z(t,a);return}}))}function X(e,t,n){let r=()=>{let t=e.innerHTML;e.innerHTML=I.checkSimple,e.classList.add(`copied`),setTimeout(()=>{e.innerHTML=t,e.classList.remove(`copied`)},1500)};n===`copy`?navigator.clipboard.writeText(t).then(r).catch(()=>{}):r()}function Z(e,t){let n=e.cloneNode(!0),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&&(Q(e,`diagram-${Date.now()}.png`),X(t,``,`save`))},`image/png`)},o.onerror=()=>{Q(new Blob([i],{type:`image/svg+xml;charset=utf-8`}),`diagram-${Date.now()}.svg`),X(t,``,`save`)},o.src=a}function Q(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 gt(e){return e.kind===`partial`?`<div class="diagram-container diagram-loading" role="status"
10
+ aria-label="Diagram loading"><div class="diagram-spinner"></div></div>`:e.kind===`error`?`<div class="diagram-container diagram-error" role="alert">
11
+ Malformed SVG: unclosed element</div>`:`<div class="diagram-container diagram-svg" tabindex="0"
12
+ role="figure" aria-label="SVG diagram">
13
+ ${H(e.svg)}
14
+ <button class="diagram-save-btn" type="button"
15
+ aria-label="Save as image" title="Save">${I.download}</button>
16
+ <button class="diagram-copy-btn" type="button"
17
+ aria-label="Copy source" title="Copy">${I.copy}</button>
18
+ <button class="diagram-zoom-btn" type="button"
19
+ aria-label="Expand diagram" title="Expand">⤢</button>
20
+ </div>`}function _t(e,t){for(let n of t){let t=`<div\\b[^>]*?\\bdata-jaw-svg="${n.id}"[^>]*></div>`,r=new RegExp(t,`g`),i=gt(n);e=e.replace(r,()=>i)}return e}function vt(){document.querySelectorAll(`.diagram-zoom-btn`).forEach(e=>{e.dataset.bound||(e.dataset.bound=`1`,e.addEventListener(`click`,()=>{let t=e.closest(`.diagram-container`);if(!t)return;let n=t.cloneNode(!0);n.querySelectorAll(`.diagram-zoom-btn, .diagram-copy-btn, .diagram-save-btn`).forEach(e=>e.remove()),$(n.innerHTML)}))})}function $(e){let t=document.activeElement,n=document.createElement(`div`);n.className=`diagram-overlay`,n.setAttribute(`role`,`dialog`),n.setAttribute(`aria-modal`,`true`),n.setAttribute(`aria-label`,`Expanded diagram`),n.innerHTML=`
21
+ <div class="diagram-overlay-content">${H(e)}</div>
22
+ <button class="diagram-overlay-close" type="button" aria-label="Close">✕</button>
23
+ `,n.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 r=n.querySelector(`.diagram-overlay-close`),i=()=>{n.remove(),document.removeEventListener(`keydown`,a),t&&t.isConnected&&t.focus()},a=e=>{if(e.key===`Escape`){i();return}if(e.key===`Tab`){let t=n.querySelectorAll(`button, [href], [tabindex]:not([tabindex="-1"])`);if(t.length===0)return;let r=t[0],i=t[t.length-1];e.shiftKey&&document.activeElement===r?(e.preventDefault(),i.focus()):!e.shiftKey&&document.activeElement===i&&(e.preventDefault(),r.focus())}};r.addEventListener(`click`,i),document.addEventListener(`keydown`,a),document.body.appendChild(n),r.focus()}function yt(e,t=!1){let n=U(e);if(!n)return`<em class="text-dim orchestrate-placeholder">${V(M(`orchestrator.dispatching`))}</em>`;let{text:r,fences:a}=$e(n.replace(/\n{3,}/g,`
24
+
25
+ `)),{text:o,blocks:s}=tt(r,t),{text:c,blocks:l}=ot(et(o,a));ft();let u=Qe(c),d=i.parse(u);return d=d.replace(/<table/g,`<div class="table-wrapper"><table`).replace(/<\/table>/g,`</table></div>`),d=st(d,l),d=H(d),d=_t(d,s),requestAnimationFrame(()=>{dt(),pt(),vt()}),mt(),ht(),d}export{I as a,Ze as c,Ue as d,We as f,U as i,Ke as l,yt as n,Ye as o,M as p,ct as r,Xe as s,V as t,Ge as u};
@@ -0,0 +1 @@
1
+ import{u as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as diagram};
@@ -0,0 +1 @@
1
+ import{l as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as diagram};
@@ -0,0 +1 @@
1
+ import{c as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as diagram};
@@ -0,0 +1,41 @@
1
+ import{t as e}from"./state-O6NVkWcL.js";import{a as t,p as n,t as r}from"./render-C8N0rp4L.js";import{n as i,r as a,t as o}from"./api-Ci-lgwRp.js";import{n as s}from"./locale-DIXc-_34.js";import{a as c,i as l,r as u,t as d}from"./constants-C8_0OtK2.js";function f(e){let t=document.getElementById(`sttEngine`),n=document.getElementById(`sttGeminiKey`),r=document.getElementById(`sttGeminiModel`),i=document.getElementById(`sttGeminiModelCustom`),o=document.getElementById(`sttWhisperModel`),s=document.getElementById(`sttOpenaiBaseUrl`),c=document.getElementById(`sttOpenaiKey`),l=document.getElementById(`sttOpenaiModel`),u=document.getElementById(`sttVertexJson`);if(t&&(t.value=e.engine||`auto`),n&&(n.placeholder=e.geminiKeySet?`✓ 입력됨 ····${e.geminiKeyLast4||``}`:`AIza...`),r){let t=e.geminiModel||`gemini-2.5-flash-lite`;Array.from(r.options).some(e=>e.value===t)?r.value=t:(r.value=`__custom__`,i&&(i.value=t,i.style.display=``))}o&&(o.value=e.whisperModel||`mlx-community/whisper-large-v3-turbo`),s&&(s.value=e.openaiBaseUrl||``),c&&(c.placeholder=e.openaiKeySet?`✓ 입력됨 ····${e.openaiKeyLast4||``}`:`sk-...`),l&&(l.value=e.openaiModel||``),u&&(u.value=e.vertexConfig||``);function d(){let e=t?.value||`auto`,n=e===`auto`||e===`gemini`,r=e===`openai`,i=e===`vertex`,a=e===`auto`||e===`whisper`;document.querySelectorAll(`.stt-gemini`).forEach(e=>e.style.display=n?``:`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:t?.value||`auto`,geminiModel:(r?.value===`__custom__`?i?.value:r?.value)||`gemini-2.5-flash-lite`,whisperModel:o?.value||``,openaiBaseUrl:s?.value||``,openaiModel:l?.value||``,vertexConfig:u?.value||``}};n?.value&&(e.stt.geminiApiKey=n.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 a(`/api/settings`,`PUT`,e),n?.value){let e=n.value.slice(-4);n.value=``,n.placeholder=`✓ 입력됨 ····${e}`}if(c?.value){let e=c.value.slice(-4);c.value=``,c.placeholder=`✓ 입력됨 ····${e}`}}catch(e){console.error(`[stt] save failed:`,e)}}t?.addEventListener(`change`,()=>{d(),f()}),r?.addEventListener(`change`,()=>{i&&(i.style.display=r.value===`__custom__`?``:`none`),r.value!==`__custom__`&&f()}),i?.addEventListener(`blur`,f),n?.addEventListener(`blur`,()=>{n.value&&f()}),c?.addEventListener(`blur`,()=>{c.value&&f()}),s?.addEventListener(`blur`,f),l?.addEventListener(`blur`,f),o?.addEventListener(`blur`,f),u?.addEventListener(`blur`,f)}async function p(){let e=document.getElementById(`tgToken`)?.value.trim()||``,t=document.getElementById(`tgChatIds`)?.value.trim()||``;await a(`/api/settings`,`PUT`,{telegram:{token:e,allowedChatIds:t?t.split(`,`).map(e=>parseInt(e.trim(),10)).filter(e=>!isNaN(e)):[]}})}async function m(e){document.getElementById(`tgOn`)?.classList.toggle(`active`,e),document.getElementById(`tgOff`)?.classList.toggle(`active`,!e),await a(`/api/settings`,`PUT`,{telegram:{enabled:e}})}async function h(e){document.getElementById(`tgForwardOn`)?.classList.toggle(`active`,e),document.getElementById(`tgForwardOff`)?.classList.toggle(`active`,!e),await a(`/api/settings`,`PUT`,{telegram:{forwardAll:e}})}function ee(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)}async function te(){let e=document.getElementById(`dcToken`)?.value.trim()||``,t=document.getElementById(`dcGuildId`)?.value.trim()||``,n=document.getElementById(`dcChannelIds`)?.value.trim()||``;await a(`/api/settings`,`PUT`,{discord:{token:e,guildId:t,channelIds:n?n.split(`,`).map(e=>e.trim()).filter(Boolean):[]}})}async function ne(e){document.getElementById(`dcOn`)?.classList.toggle(`active`,e),document.getElementById(`dcOff`)?.classList.toggle(`active`,!e),await a(`/api/settings`,`PUT`,{discord:{enabled:e}})}async function re(e){document.getElementById(`dcForwardOn`)?.classList.toggle(`active`,e),document.getElementById(`dcForwardOff`)?.classList.toggle(`active`,!e),await a(`/api/settings`,`PUT`,{discord:{forwardAll:e}})}async function ie(e){document.getElementById(`dcAllowBotsOn`)?.classList.toggle(`active`,e),document.getElementById(`dcAllowBotsOff`)?.classList.toggle(`active`,!e),await a(`/api/settings`,`PUT`,{discord:{allowBots:e}})}async function g(e){document.getElementById(`dcMentionOn`)?.classList.toggle(`active`,e),document.getElementById(`dcMentionOff`)?.classList.toggle(`active`,!e),await a(`/api/settings`,`PUT`,{discord:{mentionOnly:e}})}function _(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)}async function v(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 a(`/api/settings`,`PUT`,{channel:e})}function y(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`)}function b(e){let t=document.getElementById(`fallbackOrderList`);if(!t)return;let i=Object.keys(e.perCli||{}),a=e.fallbackOrder||[],o=Math.min(i.length-1,3),s=``;for(let e=0;e<o;e++){let t=a[e]||``,o=i.map(e=>`<option value="${r(e)}" ${e===t?`selected`:``}>${r(e)}</option>`).join(``);s+=`
2
+ <div class="settings-row sub-row">
3
+ <label style="min-width:60px">Fallback ${e+1}</label>
4
+ <select id="fallback${e}"
5
+ style="font-size:11px;padding:4px;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:4px;flex:1">
6
+ <option value="">${n(`settings.none`)}</option>
7
+ ${o}
8
+ </select>
9
+ </div>`}t.innerHTML=s}async function x(){await a(`/api/settings`,`PUT`,{fallbackOrder:[...document.querySelectorAll(`#fallbackOrderList select`)].map(e=>e.value).filter(Boolean)})}async function S(){try{let e=await o(`/api/mcp`);if(!e)return;let t=document.getElementById(`mcpServerList`);if(!t)return;let i=Object.entries(e.servers||{});if(!i.length){t.textContent=n(`mcp.noServers`);return}t.innerHTML=i.map(([e,t])=>`<div style="padding:2px 0">• <b>${r(e)}</b> <span style="opacity:.6">${r(t.command)} ${(t.args||[]).slice(0,2).map(e=>r(e)).join(` `)}</span></div>`).join(``)}catch{}}async function C(){let e=document.getElementById(`mcpSyncResult`);if(e){e.style.display=`block`,e.textContent=n(`mcp.syncing`);try{let n=await a(`/api/mcp/sync`,`POST`,{});if(!n){e.innerHTML=`${t.error} sync failed`;return}let i=n.results||{};e.innerHTML=Object.entries(i).map(([e,n])=>`${n?t.check:t.skip} ${r(e)}`).join(` &nbsp; `)}catch(n){e.innerHTML=`${t.error} ${r(n.message)}`}}}async function w(){let e=document.getElementById(`mcpSyncResult`);if(e){e.style.display=`block`,e.textContent=n(`mcp.installing`);try{let n=await a(`/api/mcp/install`,`POST`,{});if(!n){e.innerHTML=`${t.error} install failed`;return}e.innerHTML=Object.entries(n.results||{}).map(([e,n])=>`${n.status===`installed`?t.check:n.status===`skip`?t.skip:t.error} <b>${r(e)}</b>: ${r(n.status)}${n.bin?` ${t.arrowRight} `+r(n.bin):``}`).join(`<br>`),S()}catch(n){e.innerHTML=`${t.error} ${r(n.message)}`}}}var ae=`<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Claude</title><path d="M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z" fill="#D97757" fill-rule="nonzero"></path></svg>`,T=`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>OpenAI</title><path d="M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z"></path></svg>`,oe=`<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Gemini</title><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z" fill="#3186FF"></path><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z" fill="url(#lobe-icons-gemini-0-_R_0_)"></path><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z" fill="url(#lobe-icons-gemini-1-_R_0_)"></path><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z" fill="url(#lobe-icons-gemini-2-_R_0_)"></path><defs><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-gemini-0-_R_0_" x1="7" x2="11" y1="15.5" y2="12"><stop stop-color="#08B962"></stop><stop offset="1" stop-color="#08B962" stop-opacity="0"></stop></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-gemini-1-_R_0_" x1="8" x2="11.5" y1="5.5" y2="11"><stop stop-color="#F94543"></stop><stop offset="1" stop-color="#F94543" stop-opacity="0"></stop></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-gemini-2-_R_0_" x1="3.5" x2="17.5" y1="13.5" y2="12"><stop stop-color="#FABC12"></stop><stop offset=".46" stop-color="#FABC12" stop-opacity="0"></stop></linearGradient></defs></svg>`,se=`<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>GitHub Copilot</title><path d="M23.922 16.997C23.061 18.492 18.063 22.02 12 22.02 5.937 22.02.939 18.492.078 16.997A.641.641 0 0 1 0 16.741v-2.869a.883.883 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.098 10.098 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952C7.255 2.937 9.248 1.98 11.978 1.98c2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.841.841 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256Zm-11.75-5.992h-.344a4.359 4.359 0 0 1-.355.508c-.77.947-1.918 1.492-3.508 1.492-1.725 0-2.989-.359-3.782-1.259a2.137 2.137 0 0 1-.085-.104L4 11.746v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.359 4.359 0 0 1-.355-.508Zm2.328 3.25c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm-5 0c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm3.313-6.185c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"/></svg>
10
+ `,ce=`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Claude</title><path d="M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z"></path></svg>`,le=`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Gemini</title><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z"></path></svg>`,ue=`<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>GitHub Copilot</title><path d="M23.922 16.997C23.061 18.492 18.063 22.02 12 22.02 5.937 22.02.939 18.492.078 16.997A.641.641 0 0 1 0 16.741v-2.869a.883.883 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.098 10.098 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952C7.255 2.937 9.248 1.98 11.978 1.98c2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.841.841 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256Zm-11.75-5.992h-.344a4.359 4.359 0 0 1-.355.508c-.77.947-1.918 1.492-3.508 1.492-1.725 0-2.989-.359-3.782-1.259a2.137 2.137 0 0 1-.085-.104L4 11.746v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.359 4.359 0 0 1-.355-.508Zm2.328 3.25c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm-5 0c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm3.313-6.185c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"/></svg>
11
+ `,E=`<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Discord</title><path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"/></svg>`,D=`<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Telegram</title><path d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"/></svg>`,O=`<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/></svg>
12
+ `,de={claude:{color:ae,mono:ce,label:`Claude`},openai:{color:T,mono:T,label:`OpenAI`},gemini:{color:oe,mono:le,label:`Gemini`},copilot:{color:se,mono:ue,label:`GitHub Copilot`},codex:{color:T,mono:T,label:`Codex (OpenAI)`},opencode:{color:O,mono:O,label:`OpenCode`},discord:{color:E,mono:E,label:`Discord`},telegram:{color:D,mono:D,label:`Telegram`}};function k(e,t=`color`){let n=e.toLowerCase().replace(/[-_\s]/g,``),r;if(n===`claude`||n.startsWith(`claude`))r=`claude`;else if(n===`gemini`||n.startsWith(`gemini`))r=`gemini`;else if(n.startsWith(`copilot`)||n===`githubcopilot`)r=`copilot`;else if(n===`codex`)r=`codex`;else if(n===`opencode`)r=`opencode`;else if(n===`openai`||n.startsWith(`gpt`)||n.startsWith(`o1`)||n.startsWith(`o3`)||n.startsWith(`o4`))r=`openai`;else if(n===`discord`)r=`discord`;else if(n===`telegram`)r=`telegram`;else return``;let i=de[r];return t===`mono`?i.mono:i.color}function fe(e=document.body){let t=e.querySelectorAll(`[data-provider]`);for(let e of t){let t=k(e.dataset.provider||``);t&&(e.innerHTML=t,e.classList.add(`cli-provider-icon`))}}function A(e){return e.charAt(0).toUpperCase()+e.slice(1)}function j(e){return document.getElementById(`model`+A(e))}function M(e){return document.getElementById(`customModel`+A(e))}function N(e){return document.getElementById(`effort`+A(e))}function P(e,t,{includeCustom:i=!1,includeDefault:a=!1,selected:o=``}={}){if(!e)return;let s=a?`<option value="default">default</option>`:``,c=i?`<option value="__custom__">${n(`model.customOption`)}</option>`:``;e.innerHTML=s+(t||[]).map(e=>`<option value="${r(e)}">${r(e)}</option>`).join(``)+c,o&&Array.from(e.options).some(e=>e.value===o)&&(e.value=o)}function F(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 I(e=null){let t=u(),n=document.getElementById(`selCli`);if(n){let i=e?.cli||n.value||t[0]||`claude`;n.innerHTML=t.map(e=>{let t=l(e)?.label||e;return`<option value="${r(e)}">${r(t)}</option>`}).join(``),Array.from(n.options).some(e=>e.value===i)&&(n.value=i)}let i=document.getElementById(`memCli`);if(i){let n=e?.memory?.cli||i.value||``;i.innerHTML=`<option value="">(active CLI)</option>`+t.map(e=>`<option value="${r(e)}">${r(e)}</option>`).join(``),Array.from(i.options).some(e=>e.value===n)&&(i.value=n)}}function L(e,t){if(e!==`claude`)return t;switch((t||``).trim()){case`claude-sonnet-4-6`:return`sonnet`;case`claude-opus-4-6`:return`opus`;case`claude-sonnet-4-6[1m]`:return`sonnet[1m]`;case`claude-opus-4-6[1m]`:return`opus[1m]`;default:return t}}function R(e=null){for(let t of u()){let n=j(t);if(n){let r=L(t,e?.perCli?.[t]?.model||n.value||``);P(n,d[t]||[],{includeCustom:!0,selected:r}),r&&!Array.from(n.options).some(e=>e.value===r)&&(F(n,r),n.value=r)}let i=N(t);if(i){let n=l(t),a=[``].concat(n?.efforts||[]),o=e?.perCli?.[t]?.effort||i.value||``,s=[...new Set(a)],c=n?.efforts?.length===0&&n?.effortNote?n.effortNote:`— none`;i.innerHTML=s.map(e=>e?`<option value="${r(e)}">${r(e)}</option>`:`<option value="">${r(c)}</option>`).join(``),n?.effortNote&&(i.title=n.effortNote),i.disabled=n?.efforts?.length===0&&!!n?.effortNote,Array.from(i.options).some(e=>e.value===o)&&(i.value=o)}}}function z(e,t=``){let n=document.getElementById(`selEffort`);if(!n)return;let i=l(e);if(i?.effortNote){n.innerHTML=`<option value="">${r(i.effortNote)}</option>`,n.title=i.effortNote,n.disabled=!0;return}let a=[``].concat(i?.efforts||[]);n.innerHTML=[...new Set(a)].map(e=>e?`<option value="${r(e)}">${r(e)}</option>`:`<option value="">— none</option>`).join(``),n.disabled=!1,n.title=``,Array.from(n.options).some(e=>e.value===t)&&(n.value=t)}async function B(){await c();let e=await o(`/api/settings`);if(!e)return;s(e.locale??``),I(e),R(e);let t=document.getElementById(`selCli`);t&&Array.from(t.options).some(t=>t.value===e.cli)&&(t.value=e.cli);let n=document.getElementById(`inpCwd`);n&&(n.textContent=e.workingDir);let i=document.getElementById(`headerCli`);if(i){let t=k(e.cli);i.innerHTML=t?`${t} ${r(e.cli)}`:r(e.cli)}if(H(e.permissions,!1),e.perCli)for(let[t,n]of Object.entries(e.perCli)){let e=j(t),r=N(t);if(e&&n.model){let r=L(t,n.model);F(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)}}K(!1);let a=e.activeOverrides?.[e.cli]||{},l=e.perCli?.[e.cli]||{},u=a.model||l.model,d=a.effort||l.effort||``,p=document.getElementById(`selModel`);if(u&&p){let t=L(e.cli,u);t&&!Array.from(p.options).some(e=>e.value===t)&&F(p,t),p.value=t}z(e.cli,d),ee(e),_(e),y(e),b(e),S(),f(e.stt||{})}async function V(){let e={cli:document.getElementById(`selCli`)?.value||`claude`},t=document.getElementById(`headerCli`);if(t){let n=k(e.cli);t.innerHTML=n?`${n} ${r(e.cli)}`:r(e.cli)}await a(`/api/settings`,`PUT`,e)}function H(e,t=!0){t&&i(`/api/settings`,`PUT`,{permissions:`auto`})}function U(e){let t=j(e);return t?t.value===`__custom__`?M(e)?.value?.trim()||t.options[0]?.value||`default`:t.value:`default`}function pe(e,t){let n=M(e);n&&(t.value===`__custom__`?(n.style.display=`block`,n.focus()):(n.style.display=`none`,e===`claude`&&W(t.value),G()))}function W(e){let t=!!(e&&e.endsWith(`[1m]`));document.getElementById(`claude1mOn`)?.classList.toggle(`active`,t),document.getElementById(`claude1mOff`)?.classList.toggle(`active`,!t)}function me(e,t){let n=t.value.trim();if(!n)return;let r=j(e);r&&(F(r,n),r.value=n,t.style.display=`none`,e===`claude`&&W(n),G())}async function G(){let e={};for(let t of u()){if(!j(t))continue;let n=N(t),r={model:U(t),effort:n?n.value:``};if(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 a(`/api/settings`,`PUT`,{perCli:e})}function K(e=!0){let t=document.getElementById(`selCli`)?.value||`claude`,i=d[t]||[],a=document.getElementById(`selModel`);P(a,i,{includeCustom:!0,includeDefault:!0});let s=document.getElementById(`headerCli`);if(s){let e=k(t);s.innerHTML=e?`${e} ${r(t)}`:r(t)}z(t);let c=document.getElementById(`selModelCustom`);c&&c.remove();let l=document.createElement(`input`);if(l.type=`text`,l.id=`selModelCustom`,l.className=`custom-model-input`,l.placeholder=n(`model.placeholder`),l.style.display=`none`,l.onchange=function(){let e=this.value.trim();!e||!a||(F(a,e),a.value=e,this.style.display=`none`,q())},!a){e&&V();return}a.parentElement?.appendChild(l),a.onchange=function(){this.value===`__custom__`?(l.style.display=`block`,l.focus()):(l.style.display=`none`,q())},o(`/api/settings`).then(e=>{if(!e)return;let n=e.activeOverrides?.[t]||{},r=e.perCli?.[t]||{},i=n.model||r.model,o=n.effort||r.effort||``;if(i&&a){let e=L(t,i);F(a,e),a.value=e}z(t,o)}),e&&V()}async function q(){let e=document.getElementById(`selCli`)?.value||`claude`,t=document.getElementById(`selModel`)?.value||`default`;t===`__custom__`&&(t=document.getElementById(`selModelCustom`)?.value?.trim()||`default`);let n=document.getElementById(`selEffort`),r={};r[e]={model:t},n&&!n.disabled&&(r[e].effort=n.value||``),await a(`/api/settings`,`PUT`,{activeOverrides:r})}async function J(t=!1){let n=Number(localStorage.getItem(`cliStatusInterval`)||300);if(!t&&e.cliStatusCache&&n>0&&Date.now()-e.cliStatusTs<n*1e3){Y({cliStatus:e.cliStatusCache?.cliStatus,quota:e.cliStatusCache?.quota});return}let r=document.getElementById(`cliStatusList`);r&&(r.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Loading...</div>`);let[i,a]=await Promise.all([o(`/api/cli-status`),o(`/api/quota`)]);e.cliStatusCache={cliStatus:i,quota:a},e.cliStatusTs=Date.now(),Y({cliStatus:i,quota:a})}function Y(e){let{cliStatus:i,quota:a}=e,s=document.getElementById(`cliStatusList`),c={claude:{install:`npm i -g @anthropic-ai/claude-code`,auth:`claude auth`},codex:{install:`npm i -g @openai/codex`,auth:`codex login`},gemini:{install:`npm i -g @google/gemini-cli`,auth:`gemini (${n(`cli.gemini.auth`)})`},opencode:{install:`npm i -g opencode-ai`,auth:`opencode auth`},copilot:{install:`npm i -g copilot`,auth:`copilot login 또는 gh auth login`}},l=``;if(!i||typeof i!=`object`){s&&(s.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Failed to load CLI status</div>`);return}for(let[e,o]of Object.entries(i)){let i=a?.[e],s;s=o.available?!i||i.error?`ok`:i.authenticated===!1?`warn`:`ok`:`missing`;let u=``;if(i?.account){let e=[];i.account.email&&e.push(i.account.email),i.account.type&&e.push(i.account.type),i.account.plan&&e.push(i.account.plan),i.account.tier&&e.push(i.account.tier),e.length&&(u=`<div style="font-size:10px;color:var(--text-dim);margin:2px 0 4px 16px">${r(e.join(` · `))}</div>`)}let d=``;if(!o.available||s===`warn`){let t=c[e];if(t){let e=!o.available,i=n(e?`cli.authRequired`:`cli.notAuthenticated`),a=e?`#ef4444`:`#fbbf24`;d=`
13
+ <div style="font-size:10px;margin:4px 0 2px 16px;padding:6px 8px;background:var(--bg-dim, #1e1e2e);border-radius:4px;border-left:2px solid ${a}">
14
+ <div style="color:${a};margin-bottom:3px">${i}</div>
15
+ ${e?`<div style="color:var(--text-dim)"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px">${r(t.install)}</code></div>`:``}
16
+ <div style="color:var(--text-dim)${e?`;margin-top:2px`:``}"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px">${r(t.auth)}</code></div>
17
+ </div>
18
+ `}}let f=``;if(i?.windows?.length)f=i.windows.map(e=>{let t=Math.round(e.percent),n=t>80?`#ef4444`:t>50?`#fbbf24`:`#38bdf8`,i=e.label.replace(`-hour`,`h`).replace(`-day`,`d`).replace(` Sonnet`,``).replace(` Opus`,``).replace(`plus monthly subscriber quota`,`plus`).replace(`Premium`,`Prem`),a=``;if(e.resetsAt){let t=new Date(typeof e.resetsAt==`number`?e.resetsAt*1e3:e.resetsAt),n=new Date;a=t.toDateString()===n.toDateString()?`${t.getHours()}:${String(t.getMinutes()).padStart(2,`0`)}`:`${t.getMonth()+1}/${t.getDate()}`}return`
19
+ <div style="display:flex;align-items:center;gap:4px;margin-left:16px;font-size:10px;color:var(--text-dim)">
20
+ <span style="min-width:18px;max-width:48px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">${r(i)}</span>
21
+ <div style="flex:1;height:4px;background:var(--border);border-radius:2px;overflow:hidden">
22
+ <div style="width:${t}%;height:100%;background:${n};border-radius:2px"></div>
23
+ </div>
24
+ <span style="width:24px;text-align:right">${t}%</span>
25
+ ${a?`<span style="width:30px;text-align:right;opacity:0.6">${a}</span>`:``}
26
+ </div>
27
+ `}).join(``);else if(i?.error&&o.available){let e=i.reason===`rate_limited`?`Rate limited — retry in a moment`:`Usage data unavailable`;f=`<div style="font-size:10px;color:var(--text-dim);margin:2px 0 0 16px;opacity:0.7">${t.warning} ${e}</div>`}l+=`
28
+ <div class="settings-group" style="margin-bottom:6px;padding:8px 10px">
29
+ <div class="cli-status-row">
30
+ <span class="cli-dot ${s}"></span>
31
+ <span class="cli-provider-icon" aria-hidden="true">${k(e)||``}</span>
32
+ <span class="cli-name" style="font-weight:600">${r(e)}</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="${n(`copilot.keychainHint`)}">${t.key}</button>`:``}
33
+ </div>
34
+ ${u}
35
+ ${d}
36
+ ${f}
37
+ </div>
38
+ `}s&&(s.innerHTML=l);let u=Object.entries(i);!u.some(([e,t])=>{if(!t.available)return!1;let n=a?.[e];return!n||n.authenticated!==!1})&&u.length>0&&s&&s.insertAdjacentHTML(`afterbegin`,`<div style="padding:8px 10px;margin-bottom:8px;background:#fbbf2422;border:1px solid #fbbf24;border-radius:6px;font-size:11px;color:#fbbf24">
39
+ ${t.warning} ${n(`cli.noReadyCli`)}
40
+ </div>`);let d=document.getElementById(`copilotKeychainBtn`);d&&d.addEventListener(`click`,async()=>{let e=d;e.disabled=!0,e.innerHTML=t.hourglass;try{let n=await o(`/api/copilot/refresh`,{method:`POST`});e.innerHTML=n?.ok?t.check:t.error,n?.ok&&await J(!0)}catch{e.innerHTML=t.error}setTimeout(()=>{e.innerHTML=t.key,e.disabled=!1},2e3)})}function he(){o(`/api/prompt`).then(e=>{if(!e)return;let t=document.getElementById(`modalPromptEditor`);t&&(t.value=e.content||``),document.getElementById(`promptModal`)?.classList.add(`open`)})}function ge(e){e&&e.target!==e.currentTarget||document.getElementById(`promptModal`)?.classList.remove(`open`)}async function _e(){await a(`/api/prompt`,`PUT`,{content:document.getElementById(`modalPromptEditor`)?.value||``}),document.getElementById(`promptModal`)?.classList.remove(`open`)}var X=[],Z=!1;async function Q(){let e=await o(`/api/prompt-templates`);e&&(X=e.templates,Z=!1,ve(e.tree),$(`tree`),document.getElementById(`templateModal`)?.classList.add(`open`))}function ve(e){let n=document.getElementById(`templateTree`);if(n){n.innerHTML=``;for(let i 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=`${i.emoji} ${i.label}`,n.appendChild(e);for(let e of i.children){let i=X.find(t=>t.id===e);if(!i)continue;let a=document.createElement(`div`);a.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`,a.innerHTML=`${t.file} ${r(i.filename)}`,a.addEventListener(`mouseenter`,()=>{a.style.borderColor=`var(--accent2)`}),a.addEventListener(`mouseleave`,()=>{a.style.borderColor=`var(--border)`}),a.addEventListener(`click`,()=>{ye(i)}),n.appendChild(a)}}}}function ye(e){let n=document.getElementById(`templateEditor`);n.value=e.content,n.dataset.templateId=e.id,n.readOnly=!0,Z=!1;let i=document.getElementById(`templateEditorLabel`);i&&(i.innerHTML=`${t.file} ${r(e.filename)}`);let a=e.content.match(/\{\{[A-Z_]+\}\}/g),o=document.getElementById(`templateVars`);o&&(o.textContent=a?`vars: ${[...new Set(a)].join(`, `)}`:`no variables`);let s=document.getElementById(`templateSaveBtn`);s&&(s.style.display=`none`);let c=document.getElementById(`templateDevToggle`);c&&(c.style.color=`var(--text-dim)`,c.style.borderColor=`var(--border)`,c.innerHTML=`${t.tool} 개발자 모드`);let l=document.getElementById(`templateModalTitle`);l&&(l.innerHTML=`${t.file} ${r(e.filename)}`),$(`editor`)}function be(){if(!Z&&!confirm(`⚠ 프롬프트를 직접 수정하면 예상치 못한 동작이 발생할 수 있습니다.
41
+ 계속하시겠습니까?`))return;Z=!Z;let e=document.getElementById(`templateEditor`);e.readOnly=!Z;let n=document.getElementById(`templateSaveBtn`);n&&(n.style.display=Z?``:`none`);let r=document.getElementById(`templateDevToggle`);r&&(r.style.color=Z?`var(--stop-btn)`:`var(--text-dim)`,r.style.borderColor=Z?`var(--stop-btn)`:`var(--border)`,r.innerHTML=Z?`${t.lockOpen} 개발자 모드 ON`:`${t.tool} 개발자 모드`)}async function xe(){let e=document.getElementById(`templateEditor`),n=e.dataset.templateId;if(!n)return;await a(`/api/prompt-templates/${n}`,`PUT`,{content:e.value});let i=document.getElementById(`templateEditorLabel`);i&&(i.innerHTML=`${t.check} 저장 + 핫리로드 완료!`,setTimeout(()=>{i.innerHTML=`${t.file} ${r(n)}.md`},2e3));let o=X.find(e=>e.id===n);o&&(o.content=e.value)}function $(e){let n=document.getElementById(`templateTreeView`),r=document.getElementById(`templateEditorView`);n&&(n.style.display=e===`tree`?``:`none`),r&&(r.style.display=e===`editor`?`flex`:`none`);let i=document.getElementById(`templateModalTitle`);i&&e===`tree`&&(i.innerHTML=`${t.plan} 프롬프트 구조`)}function Se(){$(`tree`)}function Ce(e){e&&e.target!==e.currentTarget||document.getElementById(`templateModal`)?.classList.remove(`open`)}export{g as A,b as C,ne as D,te as E,h as M,m as N,ie as O,f as P,C as S,v as T,H as _,_e as a,w as b,be as c,U as d,pe as f,G as g,q as h,Q as i,p as j,re as k,J as l,K as m,Ce as n,xe as o,B as p,he as r,Se as s,ge as t,me as u,V as v,x as w,S as x,fe as y};
@@ -0,0 +1 @@
1
+ import{g as e,p as t,v as n}from"./settings-BJR-IGM5.js";export{t as loadSettings,e as savePerCli,n as updateSettings};
@@ -0,0 +1 @@
1
+ import{n as e}from"./skills-uywskdFh.js";export{e as loadSkills};
@@ -0,0 +1,12 @@
1
+ import{t as e}from"./state-O6NVkWcL.js";import{a as t,l as n,o as r,p as i,t as a}from"./render-C8N0rp4L.js";import{r as o}from"./api-Ci-lgwRp.js";var s=[`productivity`,`communication`,`devtools`,`ai-media`,`utility`,`smarthome`,`automation`];async function c(){try{e.allSkills=await(await n(`/api/skills`)).json(),l()}catch{let e=document.getElementById(`skillsList`);e&&(e.innerHTML=`<div style="color:var(--text-dim);font-size:11px">${i(`skill.loadFail`)}</div>`)}}function l(){let n=document.getElementById(`skillsList`),o=document.getElementById(`skillsCount`);if(!n||!o)return;let c=e.allSkills,l=c;e.currentSkillFilter===`installed`?l=c.filter(e=>e.enabled):e.currentSkillFilter===`other`?l=c.filter(e=>!s.includes(e.category||``)):e.currentSkillFilter!==`all`&&(l=c.filter(t=>t.category===e.currentSkillFilter));let u=c.filter(e=>e.enabled).length;o.textContent=i(`skill.count`,{active:u,total:c.length}),n.innerHTML=l.map(e=>{let n=[];return e.requires?.env&&n.push(`${t.key} `+e.requires.env.map(e=>a(e)).join(`, `)),e.requires?.bins&&n.push(`${t.settings} `+e.requires.bins.map(e=>a(e)).join(`, `)),e.install&&n.push(a(e.install)),`
2
+ <div class="skill-card ${e.enabled?`enabled`:``}">
3
+ <div class="skill-card-header">
4
+ <span class="skill-emoji">${e.emoji?r(e.emoji):t.tool}</span>
5
+ <span class="skill-name">${a(e.name||e.id)}</span>
6
+ <button class="skill-toggle ${e.enabled?`on`:`off`}"
7
+ data-skill-id="${a(e.id)}" data-skill-enabled="${e.enabled}"
8
+ aria-label="${a((e.name||e.id)+` toggle`)}"></button>
9
+ </div>
10
+ <div class="skill-desc">${a(e.description||``)}</div>
11
+ ${n.length?`<div class="skill-req">${n.join(` · `)}</div>`:``}
12
+ </div>`}).join(``)}async function u(e,t){let n=t?`/api/skills/disable`:`/api/skills/enable`;try{await o(n,`POST`,{id:e}),await c()}catch(e){console.error(`toggleSkill error:`,e)}}function d(t,n){e.currentSkillFilter=t,document.querySelectorAll(`.skill-filter`).forEach(e=>e.classList.remove(`active`)),n&&n.classList.add(`active`),l()}export{u as i,c as n,l as r,d as t};
@@ -0,0 +1 @@
1
+ import{a as e}from"./slash-commands-DWvL-VDU.js";export{e as loadCommands};