cli-jaw 1.4.11 → 1.5.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 (559) hide show
  1. package/README.ko.md +56 -26
  2. package/README.md +30 -24
  3. package/README.zh-CN.md +56 -26
  4. package/dist/bin/commands/browser.js +3 -1
  5. package/dist/bin/commands/browser.js.map +1 -1
  6. package/dist/bin/commands/chat.js +358 -9
  7. package/dist/bin/commands/chat.js.map +1 -1
  8. package/dist/bin/commands/doctor.js +80 -2
  9. package/dist/bin/commands/doctor.js.map +1 -1
  10. package/dist/bin/commands/init.js +88 -6
  11. package/dist/bin/commands/init.js.map +1 -1
  12. package/dist/bin/commands/serve.js +1 -0
  13. package/dist/bin/commands/serve.js.map +1 -1
  14. package/dist/lib/mcp-sync.js +101 -51
  15. package/dist/lib/mcp-sync.js.map +1 -1
  16. package/dist/lib/quota-copilot.js +4 -0
  17. package/dist/lib/quota-copilot.js.map +1 -1
  18. package/dist/server.js +131 -35
  19. package/dist/server.js.map +1 -1
  20. package/dist/src/agent/events.js +198 -29
  21. package/dist/src/agent/events.js.map +1 -1
  22. package/dist/src/agent/smoke-detector.js +111 -0
  23. package/dist/src/agent/smoke-detector.js.map +1 -0
  24. package/dist/src/agent/spawn.js +157 -26
  25. package/dist/src/agent/spawn.js.map +1 -1
  26. package/dist/src/browser/connection.js +9 -1
  27. package/dist/src/browser/connection.js.map +1 -1
  28. package/dist/src/browser/launch-policy.js +32 -0
  29. package/dist/src/browser/launch-policy.js.map +1 -0
  30. package/dist/src/cli/claude-models.js +46 -0
  31. package/dist/src/cli/claude-models.js.map +1 -0
  32. package/dist/src/cli/command-context.js +19 -8
  33. package/dist/src/cli/command-context.js.map +1 -1
  34. package/dist/src/cli/commands.js +16 -13
  35. package/dist/src/cli/commands.js.map +1 -1
  36. package/dist/src/cli/compact.js +93 -0
  37. package/dist/src/cli/compact.js.map +1 -0
  38. package/dist/src/cli/handlers.js +94 -32
  39. package/dist/src/cli/handlers.js.map +1 -1
  40. package/dist/src/cli/readiness.js +69 -0
  41. package/dist/src/cli/readiness.js.map +1 -0
  42. package/dist/src/cli/registry.js +3 -2
  43. package/dist/src/cli/registry.js.map +1 -1
  44. package/dist/src/cli/tui/composer.js +6 -4
  45. package/dist/src/cli/tui/composer.js.map +1 -1
  46. package/dist/src/cli/tui/keymap.js +2 -0
  47. package/dist/src/cli/tui/keymap.js.map +1 -1
  48. package/dist/src/cli/tui/overlay.js +170 -0
  49. package/dist/src/cli/tui/overlay.js.map +1 -1
  50. package/dist/src/cli/tui/store.js +25 -0
  51. package/dist/src/cli/tui/store.js.map +1 -1
  52. package/dist/src/cli/tui/transcript.js +46 -0
  53. package/dist/src/cli/tui/transcript.js.map +1 -0
  54. package/dist/src/command-contract/catalog.js +8 -4
  55. package/dist/src/command-contract/catalog.js.map +1 -1
  56. package/dist/src/core/bus.js +1 -0
  57. package/dist/src/core/bus.js.map +1 -1
  58. package/dist/src/core/compact.js +70 -0
  59. package/dist/src/core/compact.js.map +1 -0
  60. package/dist/src/core/config.js +109 -3
  61. package/dist/src/core/config.js.map +1 -1
  62. package/dist/src/core/db.js +13 -4
  63. package/dist/src/core/db.js.map +1 -1
  64. package/dist/src/core/main-session.js +15 -0
  65. package/dist/src/core/main-session.js.map +1 -1
  66. package/dist/src/core/runtime-settings.js +19 -4
  67. package/dist/src/core/runtime-settings.js.map +1 -1
  68. package/dist/src/core/settings-merge.js +1 -1
  69. package/dist/src/core/settings-merge.js.map +1 -1
  70. package/dist/src/discord/bot.js +274 -0
  71. package/dist/src/discord/bot.js.map +1 -0
  72. package/dist/src/discord/commands.js +103 -0
  73. package/dist/src/discord/commands.js.map +1 -0
  74. package/dist/src/discord/discord-file.js +43 -0
  75. package/dist/src/discord/discord-file.js.map +1 -0
  76. package/dist/src/discord/forwarder.js +45 -0
  77. package/dist/src/discord/forwarder.js.map +1 -0
  78. package/dist/src/memory/bootstrap.js +341 -0
  79. package/dist/src/memory/bootstrap.js.map +1 -0
  80. package/dist/src/memory/heartbeat.js +11 -22
  81. package/dist/src/memory/heartbeat.js.map +1 -1
  82. package/dist/src/memory/indexing.js +329 -0
  83. package/dist/src/memory/indexing.js.map +1 -0
  84. package/dist/src/memory/keyword-expand.js +247 -0
  85. package/dist/src/memory/keyword-expand.js.map +1 -0
  86. package/dist/src/memory/runtime.js +56 -1090
  87. package/dist/src/memory/runtime.js.map +1 -1
  88. package/dist/src/memory/shared.js +167 -0
  89. package/dist/src/memory/shared.js.map +1 -0
  90. package/dist/src/messaging/runtime.js +122 -0
  91. package/dist/src/messaging/runtime.js.map +1 -0
  92. package/dist/src/messaging/send.js +120 -0
  93. package/dist/src/messaging/send.js.map +1 -0
  94. package/dist/src/messaging/session-key.js +25 -0
  95. package/dist/src/messaging/session-key.js.map +1 -0
  96. package/dist/src/messaging/types.js +6 -0
  97. package/dist/src/messaging/types.js.map +1 -0
  98. package/dist/src/orchestrator/collect.js +5 -0
  99. package/dist/src/orchestrator/collect.js.map +1 -1
  100. package/dist/src/orchestrator/distribute.js +34 -8
  101. package/dist/src/orchestrator/distribute.js.map +1 -1
  102. package/dist/src/orchestrator/gateway.js +18 -12
  103. package/dist/src/orchestrator/gateway.js.map +1 -1
  104. package/dist/src/orchestrator/parser.js +0 -28
  105. package/dist/src/orchestrator/parser.js.map +1 -1
  106. package/dist/src/orchestrator/pipeline.js +94 -75
  107. package/dist/src/orchestrator/pipeline.js.map +1 -1
  108. package/dist/src/orchestrator/state-machine.js +23 -20
  109. package/dist/src/orchestrator/state-machine.js.map +1 -1
  110. package/dist/src/orchestrator/worker-monitor.js +50 -0
  111. package/dist/src/orchestrator/worker-monitor.js.map +1 -0
  112. package/dist/src/orchestrator/worker-registry.js +107 -0
  113. package/dist/src/orchestrator/worker-registry.js.map +1 -0
  114. package/dist/src/prompt/builder.js +78 -6
  115. package/dist/src/prompt/builder.js.map +1 -1
  116. package/dist/src/prompt/templates/a1-system.md +52 -10
  117. package/dist/src/prompt/templates/employee.md +17 -5
  118. package/dist/src/prompt/templates/orchestration.md +11 -10
  119. package/dist/src/prompt/templates/research-worker.md +1 -1
  120. package/dist/src/prompt/templates/worker-context.md +4 -4
  121. package/dist/src/routes/browser.js +14 -3
  122. package/dist/src/routes/browser.js.map +1 -1
  123. package/dist/src/telegram/bot.js +92 -8
  124. package/dist/src/telegram/bot.js.map +1 -1
  125. package/dist/src/types/agent.js +4 -0
  126. package/dist/src/types/agent.js.map +1 -0
  127. package/package.json +27 -15
  128. package/public/css/chat.css +365 -127
  129. package/public/css/layout.css +67 -10
  130. package/public/css/markdown.css +219 -54
  131. package/public/css/modals.css +35 -15
  132. package/public/css/orc-state.css +16 -16
  133. package/public/css/sidebar.css +12 -12
  134. package/public/css/tool-ui.css +483 -0
  135. package/public/css/variables.css +334 -6
  136. package/public/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  137. package/public/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  138. package/public/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  139. package/public/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  140. package/public/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  141. package/public/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  142. package/public/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  143. package/public/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  144. package/public/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  145. package/public/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  146. package/public/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  147. package/public/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  148. package/public/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  149. package/public/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  150. package/public/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  151. package/public/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  152. package/public/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  153. package/public/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  154. package/public/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  155. package/public/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  156. package/public/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  157. package/public/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  158. package/public/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  159. package/public/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  160. package/public/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  161. package/public/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  162. package/public/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  163. package/public/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  164. package/public/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  165. package/public/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  166. package/public/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  167. package/public/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  168. package/public/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  169. package/public/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  170. package/public/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  171. package/public/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  172. package/public/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  173. package/public/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  174. package/public/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  175. package/public/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  176. package/public/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  177. package/public/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  178. package/public/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  179. package/public/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  180. package/public/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  181. package/public/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  182. package/public/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  183. package/public/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  184. package/public/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  185. package/public/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  186. package/public/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  187. package/public/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  188. package/public/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  189. package/public/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  190. package/public/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  191. package/public/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  192. package/public/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  193. package/public/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  194. package/public/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  195. package/public/dist/assets/api-B8XKQ4OT.js +1 -0
  196. package/public/dist/assets/api-BlPw3bUI.js +1 -0
  197. package/public/dist/assets/architecture-YZFGNWBL-BkS7SZQi.js +1 -0
  198. package/public/dist/assets/architectureDiagram-Q4EWVU46-Dl3iBKeR.js +1 -0
  199. package/public/dist/assets/blockDiagram-DXYQGD6D-DPr4D17p.js +1 -0
  200. package/public/dist/assets/c4Diagram-AHTNJAMY-CfoxJtDk.js +1 -0
  201. package/public/dist/assets/classDiagram-6PBFFD2Q-BOAdHnnB.js +1 -0
  202. package/public/dist/assets/classDiagram-v2-HSJHXN6E-B2QCJXWC.js +1 -0
  203. package/public/dist/assets/constants-DshMUJbo.js +1 -0
  204. package/public/dist/assets/cose-bilkent-S5V4N54A-CA14jk7w.js +1 -0
  205. package/public/dist/assets/dagre-KV5264BT-BVwNaSwC.js +1 -0
  206. package/public/dist/assets/diagram-5BDNPKRD-CHqIAvdc.js +1 -0
  207. package/public/dist/assets/diagram-G4DWMVQ6-DxvsCvTP.js +1 -0
  208. package/public/dist/assets/diagram-MMDJMWI5-DqOPO7dl.js +1 -0
  209. package/public/dist/assets/diagram-TYMM5635-C9xMWPQn.js +1 -0
  210. package/public/dist/assets/employees-CFRlsbHm.js +39 -0
  211. package/public/dist/assets/erDiagram-SMLLAGMA-BTmpfRkm.js +1 -0
  212. package/public/dist/assets/flowDiagram-DWJPFMVM-DZBSQAKA.js +1 -0
  213. package/public/dist/assets/ganttDiagram-T4ZO3ILL-TAEMCRbT.js +1 -0
  214. package/public/dist/assets/gitGraph-7Q5UKJZL-bbxndRNA.js +1 -0
  215. package/public/dist/assets/gitGraphDiagram-UUTBAWPF-CBxtx0MB.js +1 -0
  216. package/public/dist/assets/icon-192-CwXPIYF5.png +0 -0
  217. package/public/dist/assets/index-1Gg-6jeC.css +1 -0
  218. package/public/dist/assets/index-CQHqXjrK.js +49 -0
  219. package/public/dist/assets/info-OMHHGYJF-DRXq_Ywr.js +1 -0
  220. package/public/dist/assets/infoDiagram-42DDH7IO-C7FFwX4m.js +1 -0
  221. package/public/dist/assets/ishikawaDiagram-UXIWVN3A-DEZJE79j.js +1 -0
  222. package/public/dist/assets/journeyDiagram-VCZTEJTY-ZHLiY6GV.js +1 -0
  223. package/public/dist/assets/kanban-definition-6JOO6SKY-NP7pY7ML.js +1 -0
  224. package/public/dist/assets/katex-DZLS_HFU.js +1 -0
  225. package/public/dist/assets/locale-BjoAcbis.js +1 -0
  226. package/public/dist/assets/manifest-Bw-LRm-c.json +20 -0
  227. package/public/dist/assets/mermaid.core-CHuluSlD.js +1 -0
  228. package/public/dist/assets/mindmap-definition-QFDTVHPH-Bd1OgfN_.js +1 -0
  229. package/public/dist/assets/packet-4T2RLAQJ-CGu8ST97.js +1 -0
  230. package/public/dist/assets/pie-ZZUOXDRM-CDG65mhS.js +1 -0
  231. package/public/dist/assets/pieDiagram-DEJITSTG-BbMBHLDM.js +1 -0
  232. package/public/dist/assets/quadrantDiagram-34T5L4WZ-CDCDgI1e.js +1 -0
  233. package/public/dist/assets/radar-PYXPWWZC-1gS-6ylu.js +1 -0
  234. package/public/dist/assets/render-YHvL5VM_.js +6 -0
  235. package/public/dist/assets/requirementDiagram-MS252O5E-DkmvOtYz.js +1 -0
  236. package/public/dist/assets/rolldown-runtime-FhOqtrmT.js +1 -0
  237. package/public/dist/assets/sankeyDiagram-XADWPNL6-GNcXIYsL.js +1 -0
  238. package/public/dist/assets/sequenceDiagram-FGHM5R23-BFrw2n6x.js +1 -0
  239. package/public/dist/assets/settings-BQF_u5px.js +37 -0
  240. package/public/dist/assets/settings-C5Q9IPjJ.js +1 -0
  241. package/public/dist/assets/shark-sprite-B3AAuERd.png +0 -0
  242. package/public/dist/assets/skills-9Pd2rOw-.js +1 -0
  243. package/public/dist/assets/skills-BI7sQAdk.js +12 -0
  244. package/public/dist/assets/slash-commands-DMsE88bu.js +14 -0
  245. package/public/dist/assets/slash-commands-FMpJzlDB.js +1 -0
  246. package/public/dist/assets/state-O6NVkWcL.js +1 -0
  247. package/public/dist/assets/stateDiagram-FHFEXIEX-BLgKnllT.js +1 -0
  248. package/public/dist/assets/stateDiagram-v2-QKLJ7IA2-CbzuWsSa.js +1 -0
  249. package/public/dist/assets/timeline-definition-GMOUNBTQ-CcZTJ3gL.js +1 -0
  250. package/public/dist/assets/treeView-SZITEDCU-BDqBsaH1.js +1 -0
  251. package/public/dist/assets/treemap-W4RFUUIX-BaWHA3Di.js +1 -0
  252. package/public/dist/assets/ui-BukgLHuh.js +29 -0
  253. package/public/dist/assets/ui-Bvz1JfTE.js +1 -0
  254. package/public/dist/assets/vendor-mermaid-COidH9HB.js +2934 -0
  255. package/public/dist/assets/vendor-render-Bjnw0wQ6.css +1 -0
  256. package/public/dist/assets/vendor-render-D2YP6GiF.js +322 -0
  257. package/public/dist/assets/vennDiagram-DHZGUBPP-BWV_j1bh.js +1 -0
  258. package/public/dist/assets/wardley-RL74JXVD-C7gKA3d7.js +1 -0
  259. package/public/dist/assets/wardleyDiagram-NUSXRM2D-BUoq_wug.js +1 -0
  260. package/public/dist/assets/ws-S_AZgx7L.js +2 -0
  261. package/public/dist/assets/xychartDiagram-5P7HB3ND-PvT5Ec82.js +1 -0
  262. package/public/dist/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  263. package/public/dist/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  264. package/public/dist/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  265. package/public/dist/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  266. package/public/dist/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  267. package/public/dist/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  268. package/public/dist/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  269. package/public/dist/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  270. package/public/dist/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  271. package/public/dist/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  272. package/public/dist/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  273. package/public/dist/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  274. package/public/dist/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  275. package/public/dist/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  276. package/public/dist/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  277. package/public/dist/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  278. package/public/dist/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  279. package/public/dist/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  280. package/public/dist/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  281. package/public/dist/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  282. package/public/dist/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  283. package/public/dist/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  284. package/public/dist/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  285. package/public/dist/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  286. package/public/dist/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  287. package/public/dist/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  288. package/public/dist/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  289. package/public/dist/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  290. package/public/dist/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  291. package/public/dist/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  292. package/public/dist/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  293. package/public/dist/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  294. package/public/dist/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  295. package/public/dist/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  296. package/public/dist/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  297. package/public/dist/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  298. package/public/dist/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  299. package/public/dist/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  300. package/public/dist/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  301. package/public/dist/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  302. package/public/dist/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  303. package/public/dist/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  304. package/public/dist/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  305. package/public/dist/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  306. package/public/dist/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  307. package/public/dist/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  308. package/public/dist/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  309. package/public/dist/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  310. package/public/dist/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  311. package/public/dist/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  312. package/public/dist/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  313. package/public/dist/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  314. package/public/dist/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  315. package/public/dist/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  316. package/public/dist/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  317. package/public/dist/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  318. package/public/dist/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  319. package/public/dist/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  320. package/public/dist/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  321. package/public/dist/dist/assets/api-B8XKQ4OT.js +1 -0
  322. package/public/dist/dist/assets/api-BlPw3bUI.js +1 -0
  323. package/public/dist/dist/assets/architecture-YZFGNWBL-BkS7SZQi.js +1 -0
  324. package/public/dist/dist/assets/architectureDiagram-Q4EWVU46-Dl3iBKeR.js +1 -0
  325. package/public/dist/dist/assets/blockDiagram-DXYQGD6D-DPr4D17p.js +1 -0
  326. package/public/dist/dist/assets/c4Diagram-AHTNJAMY-CfoxJtDk.js +1 -0
  327. package/public/dist/dist/assets/classDiagram-6PBFFD2Q-BOAdHnnB.js +1 -0
  328. package/public/dist/dist/assets/classDiagram-v2-HSJHXN6E-B2QCJXWC.js +1 -0
  329. package/public/dist/dist/assets/constants-DshMUJbo.js +1 -0
  330. package/public/dist/dist/assets/cose-bilkent-S5V4N54A-CA14jk7w.js +1 -0
  331. package/public/dist/dist/assets/dagre-KV5264BT-BVwNaSwC.js +1 -0
  332. package/public/dist/dist/assets/diagram-5BDNPKRD-CHqIAvdc.js +1 -0
  333. package/public/dist/dist/assets/diagram-G4DWMVQ6-DxvsCvTP.js +1 -0
  334. package/public/dist/dist/assets/diagram-MMDJMWI5-DqOPO7dl.js +1 -0
  335. package/public/dist/dist/assets/diagram-TYMM5635-C9xMWPQn.js +1 -0
  336. package/public/dist/dist/assets/employees-CFRlsbHm.js +39 -0
  337. package/public/dist/dist/assets/erDiagram-SMLLAGMA-BTmpfRkm.js +1 -0
  338. package/public/dist/dist/assets/flowDiagram-DWJPFMVM-DZBSQAKA.js +1 -0
  339. package/public/dist/dist/assets/ganttDiagram-T4ZO3ILL-TAEMCRbT.js +1 -0
  340. package/public/dist/dist/assets/gitGraph-7Q5UKJZL-bbxndRNA.js +1 -0
  341. package/public/dist/dist/assets/gitGraphDiagram-UUTBAWPF-CBxtx0MB.js +1 -0
  342. package/public/dist/dist/assets/icon-192-CwXPIYF5.png +0 -0
  343. package/public/dist/dist/assets/index-1Gg-6jeC.css +1 -0
  344. package/public/dist/dist/assets/index-CQHqXjrK.js +49 -0
  345. package/public/dist/dist/assets/info-OMHHGYJF-DRXq_Ywr.js +1 -0
  346. package/public/dist/dist/assets/infoDiagram-42DDH7IO-C7FFwX4m.js +1 -0
  347. package/public/dist/dist/assets/ishikawaDiagram-UXIWVN3A-DEZJE79j.js +1 -0
  348. package/public/dist/dist/assets/journeyDiagram-VCZTEJTY-ZHLiY6GV.js +1 -0
  349. package/public/dist/dist/assets/kanban-definition-6JOO6SKY-NP7pY7ML.js +1 -0
  350. package/public/dist/dist/assets/katex-DZLS_HFU.js +1 -0
  351. package/public/dist/dist/assets/locale-BjoAcbis.js +1 -0
  352. package/public/dist/dist/assets/manifest-Bw-LRm-c.json +20 -0
  353. package/public/dist/dist/assets/mermaid.core-CHuluSlD.js +1 -0
  354. package/public/dist/dist/assets/mindmap-definition-QFDTVHPH-Bd1OgfN_.js +1 -0
  355. package/public/dist/dist/assets/packet-4T2RLAQJ-CGu8ST97.js +1 -0
  356. package/public/dist/dist/assets/pie-ZZUOXDRM-CDG65mhS.js +1 -0
  357. package/public/dist/dist/assets/pieDiagram-DEJITSTG-BbMBHLDM.js +1 -0
  358. package/public/dist/dist/assets/quadrantDiagram-34T5L4WZ-CDCDgI1e.js +1 -0
  359. package/public/dist/dist/assets/radar-PYXPWWZC-1gS-6ylu.js +1 -0
  360. package/public/dist/dist/assets/render-YHvL5VM_.js +6 -0
  361. package/public/dist/dist/assets/requirementDiagram-MS252O5E-DkmvOtYz.js +1 -0
  362. package/public/dist/dist/assets/rolldown-runtime-FhOqtrmT.js +1 -0
  363. package/public/dist/dist/assets/sankeyDiagram-XADWPNL6-GNcXIYsL.js +1 -0
  364. package/public/dist/dist/assets/sequenceDiagram-FGHM5R23-BFrw2n6x.js +1 -0
  365. package/public/dist/dist/assets/settings-BQF_u5px.js +37 -0
  366. package/public/dist/dist/assets/settings-C5Q9IPjJ.js +1 -0
  367. package/public/dist/dist/assets/shark-sprite-B3AAuERd.png +0 -0
  368. package/public/dist/dist/assets/skills-9Pd2rOw-.js +1 -0
  369. package/public/dist/dist/assets/skills-BI7sQAdk.js +12 -0
  370. package/public/dist/dist/assets/slash-commands-DMsE88bu.js +14 -0
  371. package/public/dist/dist/assets/slash-commands-FMpJzlDB.js +1 -0
  372. package/public/dist/dist/assets/state-O6NVkWcL.js +1 -0
  373. package/public/dist/dist/assets/stateDiagram-FHFEXIEX-BLgKnllT.js +1 -0
  374. package/public/dist/dist/assets/stateDiagram-v2-QKLJ7IA2-CbzuWsSa.js +1 -0
  375. package/public/dist/dist/assets/timeline-definition-GMOUNBTQ-CcZTJ3gL.js +1 -0
  376. package/public/dist/dist/assets/treeView-SZITEDCU-BDqBsaH1.js +1 -0
  377. package/public/dist/dist/assets/treemap-W4RFUUIX-BaWHA3Di.js +1 -0
  378. package/public/dist/dist/assets/ui-BukgLHuh.js +29 -0
  379. package/public/dist/dist/assets/ui-Bvz1JfTE.js +1 -0
  380. package/public/dist/dist/assets/vendor-mermaid-COidH9HB.js +2934 -0
  381. package/public/dist/dist/assets/vendor-render-Bjnw0wQ6.css +1 -0
  382. package/public/dist/dist/assets/vendor-render-D2YP6GiF.js +322 -0
  383. package/public/dist/dist/assets/vennDiagram-DHZGUBPP-BWV_j1bh.js +1 -0
  384. package/public/dist/dist/assets/wardley-RL74JXVD-C7gKA3d7.js +1 -0
  385. package/public/dist/dist/assets/wardleyDiagram-NUSXRM2D-BUoq_wug.js +1 -0
  386. package/public/dist/dist/assets/ws-S_AZgx7L.js +2 -0
  387. package/public/dist/dist/assets/xychartDiagram-5P7HB3ND-PvT5Ec82.js +1 -0
  388. package/public/dist/dist/index.html +708 -0
  389. package/public/dist/index.html +708 -0
  390. package/public/icons/icon-192.png +0 -0
  391. package/public/icons/icon-512-maskable.png +0 -0
  392. package/public/icons/icon-512.png +0 -0
  393. package/public/index.html +178 -125
  394. package/public/js/constants.ts +6 -6
  395. package/public/js/features/chat.ts +23 -3
  396. package/public/js/features/employees.ts +12 -12
  397. package/public/js/features/gesture.ts +61 -0
  398. package/public/js/features/heartbeat.ts +1 -1
  399. package/public/js/features/idb-cache.ts +89 -0
  400. package/public/js/features/memory.ts +4 -1
  401. package/public/js/features/process-block.ts +236 -0
  402. package/public/js/features/settings-channel.ts +53 -0
  403. package/public/js/features/settings-cli-status.ts +164 -0
  404. package/public/js/features/settings-core.ts +357 -0
  405. package/public/js/features/settings-discord.ts +52 -0
  406. package/public/js/features/settings-mcp.ts +54 -0
  407. package/public/js/features/settings-stt.ts +78 -0
  408. package/public/js/features/settings-telegram.ts +40 -0
  409. package/public/js/features/settings-templates.ts +129 -0
  410. package/public/js/features/settings-types.ts +24 -0
  411. package/public/js/features/settings.ts +9 -815
  412. package/public/js/features/sidebar.ts +4 -2
  413. package/public/js/features/skills.ts +5 -4
  414. package/public/js/features/slash-commands.ts +1 -8
  415. package/public/js/features/theme.ts +16 -10
  416. package/public/js/features/tool-ui.ts +113 -0
  417. package/public/js/main.ts +67 -8
  418. package/public/js/render.ts +128 -90
  419. package/public/js/state.ts +4 -0
  420. package/public/js/streaming-render.ts +55 -0
  421. package/public/js/ui.ts +289 -46
  422. package/public/js/virtual-scroll.ts +189 -0
  423. package/public/js/ws.ts +175 -112
  424. package/public/locales/en.json +6 -1
  425. package/public/locales/ko.json +6 -1
  426. package/public/manifest.json +20 -0
  427. package/public/public/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  428. package/public/public/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  429. package/public/public/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  430. package/public/public/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  431. package/public/public/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  432. package/public/public/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  433. package/public/public/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  434. package/public/public/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  435. package/public/public/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  436. package/public/public/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  437. package/public/public/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  438. package/public/public/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  439. package/public/public/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  440. package/public/public/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  441. package/public/public/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  442. package/public/public/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  443. package/public/public/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  444. package/public/public/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  445. package/public/public/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  446. package/public/public/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  447. package/public/public/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  448. package/public/public/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  449. package/public/public/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  450. package/public/public/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  451. package/public/public/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  452. package/public/public/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  453. package/public/public/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  454. package/public/public/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  455. package/public/public/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  456. package/public/public/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  457. package/public/public/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  458. package/public/public/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  459. package/public/public/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  460. package/public/public/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  461. package/public/public/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  462. package/public/public/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  463. package/public/public/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  464. package/public/public/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  465. package/public/public/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  466. package/public/public/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  467. package/public/public/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  468. package/public/public/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  469. package/public/public/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  470. package/public/public/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  471. package/public/public/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  472. package/public/public/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  473. package/public/public/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  474. package/public/public/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  475. package/public/public/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  476. package/public/public/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  477. package/public/public/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  478. package/public/public/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  479. package/public/public/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  480. package/public/public/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  481. package/public/public/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  482. package/public/public/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  483. package/public/public/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  484. package/public/public/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  485. package/public/public/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  486. package/public/public/dist/assets/api-B8XKQ4OT.js +1 -0
  487. package/public/public/dist/assets/api-BlPw3bUI.js +1 -0
  488. package/public/public/dist/assets/architecture-YZFGNWBL-BkS7SZQi.js +1 -0
  489. package/public/public/dist/assets/architectureDiagram-Q4EWVU46-Dl3iBKeR.js +1 -0
  490. package/public/public/dist/assets/blockDiagram-DXYQGD6D-DPr4D17p.js +1 -0
  491. package/public/public/dist/assets/c4Diagram-AHTNJAMY-CfoxJtDk.js +1 -0
  492. package/public/public/dist/assets/classDiagram-6PBFFD2Q-BOAdHnnB.js +1 -0
  493. package/public/public/dist/assets/classDiagram-v2-HSJHXN6E-B2QCJXWC.js +1 -0
  494. package/public/public/dist/assets/constants-DshMUJbo.js +1 -0
  495. package/public/public/dist/assets/cose-bilkent-S5V4N54A-CA14jk7w.js +1 -0
  496. package/public/public/dist/assets/dagre-KV5264BT-BVwNaSwC.js +1 -0
  497. package/public/public/dist/assets/diagram-5BDNPKRD-CHqIAvdc.js +1 -0
  498. package/public/public/dist/assets/diagram-G4DWMVQ6-DxvsCvTP.js +1 -0
  499. package/public/public/dist/assets/diagram-MMDJMWI5-DqOPO7dl.js +1 -0
  500. package/public/public/dist/assets/diagram-TYMM5635-C9xMWPQn.js +1 -0
  501. package/public/public/dist/assets/employees-CFRlsbHm.js +39 -0
  502. package/public/public/dist/assets/erDiagram-SMLLAGMA-BTmpfRkm.js +1 -0
  503. package/public/public/dist/assets/flowDiagram-DWJPFMVM-DZBSQAKA.js +1 -0
  504. package/public/public/dist/assets/ganttDiagram-T4ZO3ILL-TAEMCRbT.js +1 -0
  505. package/public/public/dist/assets/gitGraph-7Q5UKJZL-bbxndRNA.js +1 -0
  506. package/public/public/dist/assets/gitGraphDiagram-UUTBAWPF-CBxtx0MB.js +1 -0
  507. package/public/public/dist/assets/icon-192-CwXPIYF5.png +0 -0
  508. package/public/public/dist/assets/index-1Gg-6jeC.css +1 -0
  509. package/public/public/dist/assets/index-CQHqXjrK.js +49 -0
  510. package/public/public/dist/assets/info-OMHHGYJF-DRXq_Ywr.js +1 -0
  511. package/public/public/dist/assets/infoDiagram-42DDH7IO-C7FFwX4m.js +1 -0
  512. package/public/public/dist/assets/ishikawaDiagram-UXIWVN3A-DEZJE79j.js +1 -0
  513. package/public/public/dist/assets/journeyDiagram-VCZTEJTY-ZHLiY6GV.js +1 -0
  514. package/public/public/dist/assets/kanban-definition-6JOO6SKY-NP7pY7ML.js +1 -0
  515. package/public/public/dist/assets/katex-DZLS_HFU.js +1 -0
  516. package/public/public/dist/assets/locale-BjoAcbis.js +1 -0
  517. package/public/public/dist/assets/manifest-Bw-LRm-c.json +20 -0
  518. package/public/public/dist/assets/mermaid.core-CHuluSlD.js +1 -0
  519. package/public/public/dist/assets/mindmap-definition-QFDTVHPH-Bd1OgfN_.js +1 -0
  520. package/public/public/dist/assets/packet-4T2RLAQJ-CGu8ST97.js +1 -0
  521. package/public/public/dist/assets/pie-ZZUOXDRM-CDG65mhS.js +1 -0
  522. package/public/public/dist/assets/pieDiagram-DEJITSTG-BbMBHLDM.js +1 -0
  523. package/public/public/dist/assets/quadrantDiagram-34T5L4WZ-CDCDgI1e.js +1 -0
  524. package/public/public/dist/assets/radar-PYXPWWZC-1gS-6ylu.js +1 -0
  525. package/public/public/dist/assets/render-YHvL5VM_.js +6 -0
  526. package/public/public/dist/assets/requirementDiagram-MS252O5E-DkmvOtYz.js +1 -0
  527. package/public/public/dist/assets/rolldown-runtime-FhOqtrmT.js +1 -0
  528. package/public/public/dist/assets/sankeyDiagram-XADWPNL6-GNcXIYsL.js +1 -0
  529. package/public/public/dist/assets/sequenceDiagram-FGHM5R23-BFrw2n6x.js +1 -0
  530. package/public/public/dist/assets/settings-BQF_u5px.js +37 -0
  531. package/public/public/dist/assets/settings-C5Q9IPjJ.js +1 -0
  532. package/public/public/dist/assets/shark-sprite-B3AAuERd.png +0 -0
  533. package/public/public/dist/assets/skills-9Pd2rOw-.js +1 -0
  534. package/public/public/dist/assets/skills-BI7sQAdk.js +12 -0
  535. package/public/public/dist/assets/slash-commands-DMsE88bu.js +14 -0
  536. package/public/public/dist/assets/slash-commands-FMpJzlDB.js +1 -0
  537. package/public/public/dist/assets/state-O6NVkWcL.js +1 -0
  538. package/public/public/dist/assets/stateDiagram-FHFEXIEX-BLgKnllT.js +1 -0
  539. package/public/public/dist/assets/stateDiagram-v2-QKLJ7IA2-CbzuWsSa.js +1 -0
  540. package/public/public/dist/assets/timeline-definition-GMOUNBTQ-CcZTJ3gL.js +1 -0
  541. package/public/public/dist/assets/treeView-SZITEDCU-BDqBsaH1.js +1 -0
  542. package/public/public/dist/assets/treemap-W4RFUUIX-BaWHA3Di.js +1 -0
  543. package/public/public/dist/assets/ui-BukgLHuh.js +29 -0
  544. package/public/public/dist/assets/ui-Bvz1JfTE.js +1 -0
  545. package/public/public/dist/assets/vendor-mermaid-COidH9HB.js +2934 -0
  546. package/public/public/dist/assets/vendor-render-Bjnw0wQ6.css +1 -0
  547. package/public/public/dist/assets/vendor-render-D2YP6GiF.js +322 -0
  548. package/public/public/dist/assets/vennDiagram-DHZGUBPP-BWV_j1bh.js +1 -0
  549. package/public/public/dist/assets/wardley-RL74JXVD-C7gKA3d7.js +1 -0
  550. package/public/public/dist/assets/wardleyDiagram-NUSXRM2D-BUoq_wug.js +1 -0
  551. package/public/public/dist/assets/ws-S_AZgx7L.js +2 -0
  552. package/public/public/dist/assets/xychartDiagram-5P7HB3ND-PvT5Ec82.js +1 -0
  553. package/public/public/dist/index.html +708 -0
  554. package/public/sw.js +104 -0
  555. package/scripts/install-officecli.sh +145 -0
  556. package/scripts/release-preview.sh +18 -10
  557. package/scripts/release.sh +3 -3
  558. package/public/dist/bundle.js +0 -151
  559. package/public/dist/bundle.js.map +0 -7
@@ -1,151 +0,0 @@
1
- var To=Object.defineProperty;var M=(e,t)=>()=>(e&&(t=e(e=0)),t);var W=(e,t)=>{for(var n in t)To(e,n,{get:t[n],enumerable:!0})};var c,$=M(()=>{"use strict";c={ws:null,agentBusy:!1,employees:[],allSkills:[],currentSkillFilter:"all",currentAgentDiv:null,attachedFiles:[],heartbeatJobs:[],heartbeatErrors:{},cliStatusCache:null,cliStatusTs:0,orcState:"IDLE",isRecording:!1}});var mn={};W(mn,{api:()=>h,apiFire:()=>_,apiJson:()=>y});async function h(e,t={}){try{let n=await fetch(e,t);if(!n.ok)return console.warn(`[api] ${t.method||"GET"} ${e} \u2192 ${n.status}`),null;if(!(n.headers.get("content-type")||"").includes("json"))return null;let i=await n.json();return i&&typeof i=="object"&&"ok"in i&&"data"in i?i.ok?i.data:(console.warn(`[api] ${e} \u2192 ok:false`,i.error||""),null):i}catch(n){return console.warn(`[api] ${e} failed:`,n.message),null}}async function y(e,t,n){return h(e,{method:t,headers:{"Content-Type":"application/json"},body:JSON.stringify(n)})}function _(e,t="POST",n){let o={method:t};n&&(o.headers={"Content-Type":"application/json"},o.body=JSON.stringify(n)),fetch(e,o).catch(()=>{})}var C=M(()=>{"use strict"});function gn(e){let t={};for(let[n,o]of Object.entries(e))t[n]=Array.isArray(o?.models)?[...o.models]:[];return t}function fn(e){let t={};for(let[n,o]of Object.entries(e||{})){if(!o||typeof o!="object")continue;let i=o,r={label:i.label||n,efforts:Array.isArray(i.efforts)?[...i.efforts]:[],models:Array.isArray(i.models)?[...i.models]:[]};typeof i.effortNote=="string"&&i.effortNote.trim()&&(r.effortNote=i.effortNote),t[n]=r}return t}function un(e){let t=fn(e);return Object.keys(t).length?(re=t,yn=Object.keys(t),z=gn(t),!0):!1}async function Le(){try{let e=await h("/api/cli-registry");if(!e||!un(e))throw new Error("invalid registry")}catch(e){console.warn("[cli-registry] fallback:",e.message),un(pn)}return re}function j(){return yn}function Me(e){return re[e]||null}var pn,re,yn,z,ae,Se=M(()=>{"use strict";C();pn={claude:{label:"Claude",efforts:["low","medium","high"],models:["claude-sonnet-4-6","claude-opus-4-6","claude-sonnet-4-6[1m]","claude-opus-4-6[1m]","claude-haiku-4-5-20251001"]},codex:{label:"Codex",efforts:["low","medium","high","xhigh"],models:["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.2-codex","gpt-5.1-codex-max","gpt-5.1-codex-mini"]},gemini:{label:"Gemini",efforts:[],models:["gemini-3.0-pro-preview","gemini-3.1-pro-preview","gemini-2.5-pro","gemini-3-flash-preview","gemini-2.5-flash"]},opencode:{label:"OpenCode",efforts:["minimal","low","high","max"],models:["anthropic/claude-opus-4-6-thinking","anthropic/claude-sonnet-4-6-thinking","anthropic/claude-sonnet-4-6","openai/gpt-5.4-xhigh","openai/gpt-5.4-high","openai/gpt-5.3-codex-xhigh","openai/gpt-5.3-codex-high","opencode/big-pickle","opencode/GLM-5 Free","opencode/MiniMax M2.5 Free","opencode/Kimi K2.5 Free","opencode/GPT 5 Nano Free","opencode/Grok Code Fast 1 Free"]},copilot:{label:"Copilot",efforts:["low","medium","high"],effortNote:"\u2192 ~/.copilot/config.json",models:["claude-sonnet-4.6","claude-opus-4.6","claude-opus-4.6-fast","claude-haiku-4.5","gpt-5.4","gpt-5.3-codex","gpt-5.2-codex","gpt-5.1-codex","gpt-4.1","gpt-5-mini","gemini-3-pro-preview"]}};re=fn(pn),yn=Object.keys(re),z=gn(re);ae=[{value:"frontend",labelKey:"role.label.frontend",label:"Frontend",prompt:"UI/UX, CSS, components",skill:"dev-frontend"},{value:"backend",labelKey:"role.label.backend",label:"Backend",prompt:"API, DB, server logic",skill:"dev-backend"},{value:"research",labelKey:"role.label.research",label:"Research",prompt:"Search, codebase exploration, uncertainty reduction, read-only reports",skill:"research-worker"},{value:"data",labelKey:"role.label.data",label:"Data",prompt:"Data pipeline, analysis, ML",skill:"dev-data"},{value:"docs",labelKey:"role.label.docs",label:"Docs",prompt:"Documentation, README, API docs",skill:"documentation"},{value:"custom",labelKey:"role.label.custom",label:"Custom...",prompt:"",skill:null}]});var se={};W(se,{addEmployee:()=>Qe,deleteEmployee:()=>Xe,loadEmployees:()=>Ye,onEmpCliChange:()=>et,onEmpRoleChange:()=>tt,renderEmployees:()=>vn,updateEmployee:()=>N});async function Ye(){let e=await h("/api/employees");c.employees=e||[],vn()}function vn(){let e=document.getElementById("employeesList");if(!e)return;let t=c.employees;if(t.length===0){e.innerHTML=`<div style="color:var(--text-dim);font-size:11px;padding:4px 0">${m("emp.addPrompt")}</div>`;return}let n=j();e.innerHTML=t.map(o=>{let i=z[o.cli]||[],r=ko[o.role||""],a=r?ae.find(b=>b.value===r):ae.find(b=>b.prompt===o.role),l=a?a.value:o.role?"custom":"frontend",d=l==="custom",s=bn(o.id),u=s?.phase||o.phase,g=s?.phaseLabel||o.phaseLabel,f=u?`<span style="background:${wo[u]||"#888"};color:#000;padding:1px 6px;border-radius:9px;font-size:9px">${g||"P"+u}</span>`:"";return`
2
- <div class="settings-group" style="margin-bottom:8px;padding:8px 10px">
3
- <div style="display:flex;align-items:center;gap:6px;margin-bottom:6px">
4
- <span style="width:8px;height:8px;border-radius:50%;background:var(--accent);display:inline-block;flex-shrink:0"></span>
5
- <input style="flex:1;background:none;border:none;color:var(--text);font-size:12px;font-weight:600;font-family:inherit;outline:none"
6
- value="${p(o.name||"Agent")}"
7
- data-emp-name="${o.id}">
8
- <button style="background:none;border:none;color:var(--text-dim);cursor:pointer;font-size:12px" data-emp-delete="${o.id}" title="${m("emp.delete")}">\u2715</button>
9
- </div>
10
- <div style="display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-bottom:4px">
11
- <div>
12
- <label>CLI</label>
13
- <select data-emp-cli="${o.id}">
14
- ${n.map(b=>`<option${o.cli===b?" selected":""}>${b}</option>`).join("")}
15
- </select>
16
- </div>
17
- <div>
18
- <label>Model</label>
19
- <select data-emp-model="${o.id}">
20
- <option value="default"${!o.model||o.model==="default"?" selected":""}>default</option>
21
- ${i.map(b=>`<option${o.model===b?" selected":""}>${b}</option>`).join("")}
22
- ${o.model&&o.model!=="default"&&!i.includes(o.model)?`<option selected>${o.model}</option>`:""}
23
- <option value="__custom__">${m("emp.customModel")}</option>
24
- </select>
25
- </div>
26
- </div>
27
- <div>
28
- <label>Role</label>
29
- <select data-emp-role="${o.id}">
30
- ${ae.map(b=>`<option value="${b.value}"${l===b.value?" selected":""}>${b.label}</option>`).join("")}
31
- </select>
32
- <textarea data-emp-custom="${o.id}" style="display:${d?"block":"none"};margin-top:4px;width:100%;height:40px;background:var(--bg);border:1px solid var(--border);color:var(--text);padding:4px 6px;border-radius:4px;font-size:10px;font-family:inherit;resize:vertical"
33
- placeholder="${m("emp.customRole")}">${d?p(o.role||""):""}</textarea>
34
- </div>
35
- <div style="margin-top:4px;font-size:10px;display:flex;align-items:center;gap:6px">
36
- <span style="color:${o.status==="running"?"#fbbf24":"var(--green)"}">\u25CF ${o.status||"idle"}</span>
37
- ${f}
38
- </div>
39
- </div>`}).join("")}async function Qe(){await y("/api/employees","POST",{})}async function N(e,t){await y(`/api/employees/${e}`,"PUT",t)}async function Xe(e){_(`/api/employees/${e}`,"DELETE")}function et(e,t){let n=z[t]||[],o=document.querySelector(`[data-emp-model="${e}"]`);o&&(o.innerHTML='<option value="default" selected>default</option>'+n.map(i=>`<option>${p(i)}</option>`).join("")+`<option value="__custom__">${m("emp.customModel")}</option>`),N(e,{cli:t,model:"default"})}function tt(e,t){let n=ae.find(i=>i.value===t),o=document.querySelector(`[data-emp-custom="${e}"]`);o&&(t==="custom"?(o.style.display="block",o.focus()):(o.style.display="none",o.value="",N(e,{role:n?.prompt||""})))}var ko,wo,V=M(()=>{"use strict";$();Se();q();nt();k();C();ko={"React/Vue \uAE30\uBC18 UI \uCEF4\uD3EC\uB10C\uD2B8 \uAC1C\uBC1C, \uC2A4\uD0C0\uC77C\uB9C1":"frontend","API \uC11C\uBC84, DB \uC2A4\uD0A4\uB9C8, \uBE44\uC988\uB2C8\uC2A4 \uB85C\uC9C1 \uAD6C\uD604":"backend","\uD504\uB860\uD2B8\uC5D4\uB4DC\uC640 \uBC31\uC5D4\uB4DC \uBAA8\uB450 \uB2F4\uB2F9":"frontend","CI/CD, Docker, \uC778\uD504\uB77C \uC790\uB3D9\uD654":"backend","\uD14C\uC2A4\uD2B8 \uC791\uC131, \uBC84\uADF8 \uC7AC\uD604, \uD488\uC9C8 \uAD00\uB9AC":"custom","\uB370\uC774\uD130 \uD30C\uC774\uD504\uB77C\uC778, ETL, \uBD84\uC11D \uCFFC\uB9AC":"data","API \uBB38\uC11C\uD654, README, \uAC00\uC774\uB4DC \uC791\uC131":"docs","UI/UX \uAD6C\uD604, CSS, \uCEF4\uD3EC\uB10C\uD2B8 \uAC1C\uBC1C":"frontend","API, DB, \uC11C\uBC84 \uB85C\uC9C1 \uAD6C\uD604":"backend","\uB370\uC774\uD130 \uD30C\uC774\uD504\uB77C\uC778, \uBD84\uC11D, ML":"data","\uBB38\uC11C\uD654, README, API docs":"docs","UI/UX, CSS, components":"frontend","API, DB, server logic":"backend","Search, codebase exploration, uncertainty reduction, read-only reports":"research","Search, codebase exploration, uncertainty reduction, read-only":"research","Data pipeline, analysis, ML":"data","Documentation, README, API docs":"docs"},wo={1:"#60a5fa",2:"#a78bfa",3:"#34d399",4:"#fbbf24",5:"#f472b6"}});var at={};W(at,{filterSkills:()=>rt,loadSkills:()=>hn,renderSkills:()=>ot,toggleSkill:()=>it});async function hn(){try{let e=await En("/api/skills");c.allSkills=await e.json(),ot()}catch{let e=document.getElementById("skillsList");e&&(e.innerHTML=`<div style="color:var(--text-dim);font-size:11px">${m("skill.loadFail")}</div>`)}}function ot(){let e=document.getElementById("skillsList"),t=document.getElementById("skillsCount");if(!e||!t)return;let n=c.allSkills,o=n;c.currentSkillFilter==="installed"?o=n.filter(r=>r.enabled):c.currentSkillFilter==="other"?o=n.filter(r=>!Io.includes(r.category||"")):c.currentSkillFilter!=="all"&&(o=n.filter(r=>r.category===c.currentSkillFilter));let i=n.filter(r=>r.enabled).length;t.textContent=m("skill.count",{active:i,total:n.length}),e.innerHTML=o.map(r=>{let a=[];return r.requires?.env&&a.push("\u{1F511} "+r.requires.env.join(", ")),r.requires?.bins&&a.push("\u2699\uFE0F "+r.requires.bins.join(", ")),r.install&&a.push(r.install),`
40
- <div class="skill-card ${r.enabled?"enabled":""}">
41
- <div class="skill-card-header">
42
- <span class="skill-emoji">${p(r.emoji||"\u{1F527}")}</span>
43
- <span class="skill-name">${p(r.name||r.id)}</span>
44
- <button class="skill-toggle ${r.enabled?"on":"off"}"
45
- data-skill-id="${p(r.id)}" data-skill-enabled="${r.enabled}"></button>
46
- </div>
47
- <div class="skill-desc">${p(r.description||"")}</div>
48
- ${a.length?`<div class="skill-req">${a.join(" \xB7 ")}</div>`:""}
49
- </div>`}).join("")}async function it(e,t){let n=t?"/api/skills/disable":"/api/skills/enable";try{await y(n,"POST",{id:e}),await hn()}catch(o){console.error("toggleSkill error:",o)}}function rt(e,t){c.currentSkillFilter=e,document.querySelectorAll(".skill-filter").forEach(n=>n.classList.remove("active")),t&&t.classList.add("active"),ot()}var Io,Te=M(()=>{"use strict";$();k();C();q();Io=["productivity","communication","devtools","ai-media","utility","smarthome","automation"]});function ke(){try{for(let e of xn){let t=localStorage.getItem(e);if(t)return t}}catch{}return navigator.language||"ko"}function Ln(e){let t=String(e||"").trim();if(t)try{for(let n of xn)localStorage.setItem(n,t)}catch{}}var xn,we=M(()=>{"use strict";xn=["claw_locale","claw.locale"]});var gt={};W(gt,{close:()=>R,handleClick:()=>ut,handleKeydown:()=>mt,handleOutsideClick:()=>pt,isDropdownOpen:()=>Bo,loadCommands:()=>dt,update:()=>Be});function Sn(e){let n=String(e||"").slice(1).trim().split(/\s+/)[0]||"";return n.includes("/")||n.includes("\\")}function st(e){return String(e||"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Co(e){let t=String(e||"").toLowerCase();return lt.filter(n=>`/${n.name}`.startsWith(t))}function Mn(){let e=Ce(),t=Y();!e||!t||(J&&(clearTimeout(J),J=null),e.style.display="block",requestAnimationFrame(()=>e.classList.add("visible")),G=!0,t.setAttribute("aria-expanded","true"))}function Ie(){let e=Ce(),t=Y();if(!e||!t)return;if(!A.length){if(!t.value.startsWith("/")||Sn(t.value)){R();return}e.innerHTML=`
50
- <div class="cmd-item cmd-empty" role="option" aria-disabled="true">
51
- ${m("cmd.noMatch")}
52
- </div>
53
- `,Mn(),t.setAttribute("aria-activedescendant","");return}e.innerHTML=A.map((o,i)=>{let r=i===w;return`<div class="cmd-item${r?" selected":""}"
54
- role="option"
55
- id="cmd-item-${i}"
56
- aria-selected="${r}"
57
- data-index="${i}">
58
- <span class="cmd-name">/${st(o.name)}</span>
59
- <span class="cmd-desc">${st(o.desc)}</span>
60
- ${o.args?`<span class="cmd-args">${st(o.args)}</span>`:""}
61
- </div>`}).join(""),Mn(),t.setAttribute("aria-activedescendant",w>=0?`cmd-item-${w}`:"");let n=e.querySelector(".selected");n&&n.scrollIntoView({block:"nearest"})}function ct(e){let t=A[w],n=Y();if(!t||!n){R();return}if(R(),t.args||!e){n.value=`/${t.name} `,n.focus(),n.selectionStart=n.selectionEnd=n.value.length;return}n.value=`/${t.name}`,n.dispatchEvent(new Event("cmd-execute",{bubbles:!0}))}async function dt(){try{let e=ke(),t=`/api/commands?interface=web&locale=${encodeURIComponent(e)}`;lt=await h(t,{headers:{"Accept-Language":e}})||[]}catch(e){console.warn("[slash-commands] loadCommands failed:",e.message),lt=[]}}function R(){let e=Ce();J&&(clearTimeout(J),J=null),e&&(e.classList.remove("visible"),J=setTimeout(()=>{e.classList.contains("visible")||(e.style.display="none",e.innerHTML="")},150)),G=!1,w=-1,A=[];let t=Y();t&&(t.setAttribute("aria-expanded","false"),t.setAttribute("aria-activedescendant",""))}function Be(e){let t=String(e||"");if(!t.startsWith("/")||t.includes(" ")||t.includes(`
62
- `)||Sn(t)){R();return}A=Co(t),w=A.length?0:-1,Ie()}function mt(e){return G?A.length?e.key==="ArrowDown"?(e.preventDefault(),w=Math.min(A.length-1,w+1),Ie(),!0):e.key==="ArrowUp"?(e.preventDefault(),w=Math.max(0,w-1),Ie(),!0):e.key==="Tab"?(e.preventDefault(),ct(!1),!0):e.key==="Enter"&&!e.shiftKey&&!e.isComposing?(e.preventDefault(),ct(!0),!0):e.key==="Escape"?(e.preventDefault(),R(),!0):!1:e.key==="Escape"?(e.preventDefault(),R(),!0):!1:(e.key==="ArrowDown"||e.key==="ArrowUp")&&!e.isComposing?(Be(Y()?.value||""),G?(w=e.key==="ArrowUp"?A.length-1:0,Ie(),e.preventDefault(),!0):!1):!1}function ut(e){let n=e.target.closest(".cmd-item");if(!n)return;let o=parseInt(n.dataset.index||"-1",10);Number.isNaN(o)||o<0||(w=Math.min(o,A.length-1),ct(!0))}function pt(e){if(!G)return;let t=Ce(),n=Y();if(!t||!n)return;let o=e.target;!t.contains(o)&&o!==n&&R()}function Bo(){return G}var lt,A,w,G,J,Ce,Y,He=M(()=>{"use strict";we();k();C();lt=[],A=[],w=-1,G=!1,J=null;Ce=()=>document.getElementById("cmdDropdown"),Y=()=>document.getElementById("chatInput")});var me={};W(me,{applyCustomModel:()=>St,closePromptModal:()=>X,closeTemplateModal:()=>Oe,getModelValue:()=>Cn,handleModelSelect:()=>Mt,installMcpGlobal:()=>Lt,loadCliStatus:()=>de,loadFallbackOrder:()=>Bn,loadMcpServers:()=>Et,loadSettings:()=>ht,onCliChange:()=>$e,openPromptModal:()=>kt,openTemplateModal:()=>Ct,saveActiveCliSettings:()=>Q,saveFallbackOrder:()=>Tt,savePerCli:()=>D,savePromptFromModal:()=>wt,saveTelegramSettings:()=>Ae,saveTemplateFromModal:()=>Ht,setForwardAll:()=>Pe,setPerm:()=>In,setTelegram:()=>Re,syncMcpServers:()=>xt,templateGoBack:()=>At,toggleDevMode:()=>Bt,updateSettings:()=>yt});function vt(e){return e.charAt(0).toUpperCase()+e.slice(1)}function ce(e){return document.getElementById("model"+vt(e))}function kn(e){return document.getElementById("customModel"+vt(e))}function bt(e){return document.getElementById("effort"+vt(e))}function wn(e,t,{includeCustom:n=!1,includeDefault:o=!1,selected:i=""}={}){if(!e)return;let r=o?'<option value="default">default</option>':"",a=n?`<option value="__custom__">${m("model.customOption")}</option>`:"",l=(t||[]).map(d=>`<option value="${p(d)}">${p(d)}</option>`).join("");e.innerHTML=r+l+a,i&&Array.from(e.options).some(d=>d.value===i)&&(e.value=i)}function le(e,t){if(!e||!t||Array.from(e.options).some(i=>i.value===t))return;let n=document.createElement("option");n.value=t,n.textContent=t;let o=e.querySelector('option[value="__custom__"]');o?e.insertBefore(n,o):e.appendChild(n)}function Ho(e=null){let t=j(),n=document.getElementById("selCli");if(n){let i=e?.cli||n.value||t[0]||"claude";n.innerHTML=t.map(r=>{let a=Me(r)?.label||r;return`<option value="${p(r)}">${p(a)}</option>`}).join(""),Array.from(n.options).some(r=>r.value===i)&&(n.value=i)}let o=document.getElementById("memCli");if(o){let i=e?.memory?.cli||o.value||"";o.innerHTML='<option value="">(active CLI)</option>'+t.map(r=>`<option value="${p(r)}">${p(r)}</option>`).join(""),Array.from(o.options).some(r=>r.value===i)&&(o.value=i)}}function $o(e=null){for(let t of j()){let n=ce(t);if(n){let i=e?.perCli?.[t]?.model||n.value||"";wn(n,z[t]||[],{includeCustom:!0,selected:i}),i&&!Array.from(n.options).some(r=>r.value===i)&&(le(n,i),n.value=i)}let o=bt(t);if(o){let i=Me(t),r=[""].concat(i?.efforts||[]),a=e?.perCli?.[t]?.effort||o.value||"",l=[...new Set(r)],d=i?.efforts?.length===0&&i?.effortNote?i.effortNote:"\u2014 none";o.innerHTML=l.map(s=>s?`<option value="${p(s)}">${p(s)}</option>`:`<option value="">${p(d)}</option>`).join(""),i?.effortNote&&(o.title=i.effortNote),o.disabled=i?.efforts?.length===0&&!!i?.effortNote,Array.from(o.options).some(s=>s.value===a)&&(o.value=a)}}}function ft(e,t=""){let n=document.getElementById("selEffort");if(!n)return;let o=Me(e);if(o?.effortNote){n.innerHTML=`<option value="">${p(o.effortNote)}</option>`,n.title=o.effortNote,n.disabled=!0;return}let i=[""].concat(o?.efforts||[]),r=[...new Set(i)];n.innerHTML=r.map(a=>a?`<option value="${p(a)}">${p(a)}</option>`:'<option value="">\u2014 none</option>').join(""),n.disabled=!1,n.title="",Array.from(n.options).some(a=>a.value===t)&&(n.value=t)}async function ht(){await Le();let e=await h("/api/settings");if(!e)return;Ln(e.locale??""),Ho(e),$o(e);let t=document.getElementById("selCli");t&&Array.from(t.options).some(s=>s.value===e.cli)&&(t.value=e.cli);let n=document.getElementById("inpCwd");n&&(n.textContent=e.workingDir);let o=document.getElementById("headerCli");if(o&&(o.textContent=e.cli),In(e.permissions,!1),e.perCli)for(let[s,u]of Object.entries(e.perCli)){let g=ce(s),f=bt(s);if(g&&u.model&&(le(g,u.model),g.value=u.model),f&&(f.value=u.effort||""),s==="codex"&&u.fastMode!==void 0&&(document.getElementById("codexFastOn")?.classList.toggle("active",u.fastMode),document.getElementById("codexFastOff")?.classList.toggle("active",!u.fastMode)),s==="codex"){let b=!!u.contextWindow;document.getElementById("codexCtxOn")?.classList.toggle("active",b),document.getElementById("codexCtxOff")?.classList.toggle("active",!b);let E=document.getElementById("codexCtxValues");E&&(E.style.display=b?"":"none");let L=document.getElementById("codexCtxWindow"),F=document.getElementById("codexCtxCompact");L&&u.contextWindowSize&&(L.value=String(u.contextWindowSize)),F&&u.contextCompactLimit&&(F.value=String(u.contextCompactLimit))}}$e(!1);let i=e.activeOverrides?.[e.cli]||{},r=e.perCli?.[e.cli]||{},a=i.model||r.model,l=i.effort||r.effort||"",d=document.getElementById("selModel");a&&d&&(d.value=a),ft(e.cli,l),Ro(e),Bn(e),Et(),Ao(e.stt||{})}function Ao(e){let t=document.getElementById("sttEngine"),n=document.getElementById("sttGeminiKey"),o=document.getElementById("sttGeminiModel"),i=document.getElementById("sttGeminiModelCustom"),r=document.getElementById("sttWhisperModel"),a=document.getElementById("sttOpenaiBaseUrl"),l=document.getElementById("sttOpenaiKey"),d=document.getElementById("sttOpenaiModel"),s=document.getElementById("sttVertexJson");if(t&&(t.value=e.engine||"auto"),n&&(n.placeholder=e.geminiKeySet?`\u2705 \uC785\uB825\uB428 \xB7\xB7\xB7\xB7${e.geminiKeyLast4||""}`:"AIza..."),o){let f=e.geminiModel||"gemini-2.5-flash-lite";Array.from(o.options).some(E=>E.value===f)?o.value=f:(o.value="__custom__",i&&(i.value=f,i.style.display=""))}r&&(r.value=e.whisperModel||"mlx-community/whisper-large-v3-turbo"),a&&(a.value=e.openaiBaseUrl||""),l&&(l.placeholder=e.openaiKeySet?`\u2705 \uC785\uB825\uB428 \xB7\xB7\xB7\xB7${e.openaiKeyLast4||""}`:"sk-..."),d&&(d.value=e.openaiModel||""),s&&(s.value=e.vertexConfig||"");function u(){let f=t?.value||"auto",b=f==="auto"||f==="gemini",E=f==="openai",L=f==="vertex",F=f==="auto"||f==="whisper";document.querySelectorAll(".stt-gemini").forEach(T=>T.style.display=b?"":"none"),document.querySelectorAll(".stt-openai").forEach(T=>T.style.display=E?"":"none"),document.querySelectorAll(".stt-vertex").forEach(T=>T.style.display=L?"":"none"),document.querySelectorAll(".stt-whisper").forEach(T=>T.style.display=F?"":"none")}u();async function g(){let f={stt:{engine:t?.value||"auto",geminiModel:(o?.value==="__custom__"?i?.value:o?.value)||"gemini-2.5-flash-lite",whisperModel:r?.value||"",openaiBaseUrl:a?.value||"",openaiModel:d?.value||"",vertexConfig:s?.value||""}};n?.value&&(f.stt.geminiApiKey=n.value),l?.value&&(f.stt.openaiApiKey=l.value),console.log("[stt] saving:",{engine:f.stt.engine,hasGeminiKey:!!f.stt.geminiApiKey,hasOpenaiKey:!!f.stt.openaiApiKey});try{if(await y("/api/settings","PUT",f),n?.value){let b=n.value.slice(-4);n.value="",n.placeholder=`\u2705 \uC785\uB825\uB428 \xB7\xB7\xB7\xB7${b}`}if(l?.value){let b=l.value.slice(-4);l.value="",l.placeholder=`\u2705 \uC785\uB825\uB428 \xB7\xB7\xB7\xB7${b}`}}catch(b){console.error("[stt] save failed:",b)}}t?.addEventListener("change",()=>{u(),g()}),o?.addEventListener("change",()=>{i&&(i.style.display=o.value==="__custom__"?"":"none"),o.value!=="__custom__"&&g()}),i?.addEventListener("blur",g),n?.addEventListener("blur",()=>{n.value&&g()}),l?.addEventListener("blur",()=>{l.value&&g()}),a?.addEventListener("blur",g),d?.addEventListener("blur",g),r?.addEventListener("blur",g),s?.addEventListener("blur",g)}async function Et(){try{let e=await h("/api/mcp");if(!e)return;let t=document.getElementById("mcpServerList");if(!t)return;let n=Object.entries(e.servers||{});if(!n.length){t.textContent=m("mcp.noServers");return}t.innerHTML=n.map(([o,i])=>`<div style="padding:2px 0">\u2022 <b>${o}</b> <span style="opacity:.6">${i.command} ${(i.args||[]).slice(0,2).join(" ")}</span></div>`).join("")}catch{}}async function xt(){let e=document.getElementById("mcpSyncResult");if(e){e.style.display="block",e.textContent=m("mcp.syncing");try{let t=await y("/api/mcp/sync","POST",{});if(!t){e.textContent="\u274C sync failed";return}let n=t.results||{};e.innerHTML=Object.entries(n).map(([o,i])=>`${i?"\u2705":"\u23ED\uFE0F"} ${o}`).join(" &nbsp; ")}catch(t){e.textContent="\u274C "+t.message}}}async function Lt(){let e=document.getElementById("mcpSyncResult");if(e){e.style.display="block",e.textContent=m("mcp.installing");try{let t=await y("/api/mcp/install","POST",{});if(!t){e.textContent="\u274C install failed";return}e.innerHTML=Object.entries(t.results||{}).map(([n,o])=>`${o.status==="installed"?"\u2705":o.status==="skip"?"\u23ED\uFE0F":"\u274C"} <b>${n}</b>: ${o.status}${o.bin?" \u2192 "+o.bin:""}`).join("<br>"),Et()}catch(t){e.textContent="\u274C "+t.message}}}async function yt(){let e={cli:document.getElementById("selCli")?.value||"claude"},t=document.getElementById("headerCli");t&&(t.textContent=e.cli),await y("/api/settings","PUT",e)}function In(e,t=!0){t&&_("/api/settings","PUT",{permissions:"auto"})}function Cn(e){let t=ce(e);return t?t.value==="__custom__"?kn(e)?.value?.trim()||t.options[0]?.value||"default":t.value:"default"}function Mt(e,t){let n=kn(e);n&&(t.value==="__custom__"?(n.style.display="block",n.focus()):(n.style.display="none",D()))}function St(e,t){let n=t.value.trim();if(!n)return;let o=ce(e);o&&(le(o,n),o.value=n,t.style.display="none",D())}async function D(){let e={};for(let t of j()){if(!ce(t))continue;let o=bt(t),i={model:Cn(t),effort:o?o.value:""};if(t==="codex"){let r=document.getElementById("codexFastOn");i.fastMode=r?.classList.contains("active")??!1;let a=document.getElementById("codexCtxOn");i.contextWindow=a?.classList.contains("active")??!1;let l=document.getElementById("codexCtxWindow"),d=document.getElementById("codexCtxCompact");i.contextWindowSize=parseInt(l?.value||"1000000",10),i.contextCompactLimit=parseInt(d?.value||"900000",10)}e[t]=i}await y("/api/settings","PUT",{perCli:e})}function $e(e=!0){let t=document.getElementById("selCli")?.value||"claude",n=z[t]||[],o=document.getElementById("selModel");wn(o,n,{includeCustom:!0,includeDefault:!0});let i=document.getElementById("headerCli");i&&(i.textContent=t),ft(t);let r=document.getElementById("selModelCustom");r&&r.remove();let a=document.createElement("input");if(a.type="text",a.id="selModelCustom",a.className="custom-model-input",a.placeholder=m("model.placeholder"),a.style.display="none",a.onchange=function(){let l=this.value.trim();!l||!o||(le(o,l),o.value=l,this.style.display="none",Q())},!o){e&&yt();return}o.parentElement?.appendChild(a),o.onchange=function(){this.value==="__custom__"?(a.style.display="block",a.focus()):(a.style.display="none",Q())},h("/api/settings").then(l=>{if(!l)return;let d=l.activeOverrides?.[t]||{},s=l.perCli?.[t]||{},u=d.model||s.model,g=d.effort||s.effort||"";u&&o&&(le(o,u),o.value=u),ft(t,g)}),e&&yt()}async function Q(){let e=document.getElementById("selCli")?.value||"claude",n=document.getElementById("selModel")?.value||"default";n==="__custom__"&&(n=document.getElementById("selModelCustom")?.value?.trim()||"default");let o=document.getElementById("selEffort"),i={};i[e]={model:n},o&&!o.disabled&&(i[e].effort=o.value||""),await y("/api/settings","PUT",{activeOverrides:i})}async function Ae(){let e=document.getElementById("tgToken")?.value.trim()||"",t=document.getElementById("tgChatIds")?.value.trim()||"",n=t?t.split(",").map(o=>parseInt(o.trim(),10)).filter(o=>!isNaN(o)):[];await y("/api/settings","PUT",{telegram:{token:e,allowedChatIds:n}})}async function Re(e){document.getElementById("tgOn")?.classList.toggle("active",e),document.getElementById("tgOff")?.classList.toggle("active",!e),await y("/api/settings","PUT",{telegram:{enabled:e}})}async function Pe(e){document.getElementById("tgForwardOn")?.classList.toggle("active",e),document.getElementById("tgForwardOff")?.classList.toggle("active",!e),await y("/api/settings","PUT",{telegram:{forwardAll:e}})}function Ro(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 o=document.getElementById("tgChatIds");t.allowedChatIds?.length&&o&&(o.value=t.allowedChatIds.join(", "));let i=t.forwardAll!==!1;document.getElementById("tgForwardOn")?.classList.toggle("active",i),document.getElementById("tgForwardOff")?.classList.toggle("active",!i)}function Bn(e){let t=document.getElementById("fallbackOrderList");if(!t)return;let n=Object.keys(e.perCli||{}),o=e.fallbackOrder||[],i=Math.min(n.length-1,3),r="";for(let a=0;a<i;a++){let l=o[a]||"",d=n.map(s=>`<option value="${s}" ${s===l?"selected":""}>${s}</option>`).join("");r+=`
63
- <div class="settings-row sub-row">
64
- <label style="min-width:60px">Fallback ${a+1}</label>
65
- <select id="fallback${a}"
66
- style="font-size:11px;padding:4px;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:4px;flex:1">
67
- <option value="">${m("settings.none")}</option>
68
- ${d}
69
- </select>
70
- </div>`}t.innerHTML=r}async function Tt(){let t=[...document.querySelectorAll("#fallbackOrderList select")].map(n=>n.value).filter(Boolean);await y("/api/settings","PUT",{fallbackOrder:t})}async function de(e=!1){let t=Number(localStorage.getItem("cliStatusInterval")||300);if(!e&&c.cliStatusCache&&t>0&&Date.now()-c.cliStatusTs<t*1e3){Tn({cliStatus:c.cliStatusCache?.cliStatus,quota:c.cliStatusCache?.quota});return}let n=document.getElementById("cliStatusList");n&&(n.innerHTML='<div style="color:var(--text-dim);font-size:11px">Loading...</div>');let[o,i]=await Promise.all([h("/api/cli-status"),h("/api/quota")]);c.cliStatusCache={cliStatus:o,quota:i},c.cliStatusTs=Date.now(),Tn({cliStatus:o,quota:i})}function Tn(e){let{cliStatus:t,quota:n}=e,o=document.getElementById("cliStatusList"),i={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 (${m("cli.gemini.auth")})`},opencode:{install:"npm i -g opencode-ai",auth:"opencode auth"},copilot:{install:"npm i -g copilot",auth:"copilot login \uB610\uB294 gh auth login"}},r="";if(!t||typeof t!="object"){o&&(o.innerHTML='<div style="color:var(--text-dim);font-size:11px">Failed to load CLI status</div>');return}for(let[l,d]of Object.entries(t)){let s=n?.[l],u;d.available?!s||s.error?u="ok":s.authenticated===!1?u="warn":u="ok":u="missing";let g="";if(s?.account){let E=[];s.account.email&&E.push(s.account.email),s.account.type&&E.push(s.account.type),s.account.plan&&E.push(s.account.plan),s.account.tier&&E.push(s.account.tier),E.length&&(g=`<div style="font-size:10px;color:var(--text-dim);margin:2px 0 4px 16px">${p(E.join(" \xB7 "))}</div>`)}let f="";if(!d.available||u==="warn"){let E=i[l];if(E){let L=!d.available,F=L?m("cli.authRequired"):m("cli.notAuthenticated"),T=L?"#ef4444":"#fbbf24";f=`
71
- <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 ${T}">
72
- <div style="color:${T};margin-bottom:3px">${F}</div>
73
- ${L?`<div style="color:var(--text-dim)"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px">${p(E.install)}</code></div>`:""}
74
- <div style="color:var(--text-dim)${L?";margin-top:2px":""}"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px">${p(E.auth)}</code></div>
75
- </div>
76
- `}}let b="";s?.windows?.length?b=s.windows.map(E=>{let L=Math.round(E.percent),F=L>80?"#ef4444":L>50?"#fbbf24":"#38bdf8",T=E.label.replace("-hour","h").replace("-day","d").replace(" Sonnet","").replace(" Opus",""),xe="";if(E.resetsAt){let ie=new Date(typeof E.resetsAt=="number"?E.resetsAt*1e3:E.resetsAt),So=new Date;ie.toDateString()===So.toDateString()?xe=`${ie.getHours()}:${String(ie.getMinutes()).padStart(2,"0")}`:xe=`${ie.getMonth()+1}/${ie.getDate()}`}return`
77
- <div style="display:flex;align-items:center;gap:4px;margin-left:16px;font-size:10px;color:var(--text-dim)">
78
- <span style="width:18px">${T}</span>
79
- <div style="flex:1;height:4px;background:var(--border);border-radius:2px;overflow:hidden">
80
- <div style="width:${L}%;height:100%;background:${F};border-radius:2px"></div>
81
- </div>
82
- <span style="width:24px;text-align:right">${L}%</span>
83
- ${xe?`<span style="width:30px;text-align:right;opacity:0.6">${xe}</span>`:""}
84
- </div>
85
- `}).join(""):s?.error&&d.available&&(b=`<div style="font-size:10px;color:var(--text-dim);margin:2px 0 0 16px;opacity:0.7">\u26A0 ${s.reason==="rate_limited"?"Rate limited \u2014 retry in a moment":"Usage data unavailable"}</div>`),r+=`
86
- <div class="settings-group" style="margin-bottom:6px;padding:8px 10px">
87
- <div class="cli-status-row">
88
- <span class="cli-dot ${u}"></span>
89
- <span class="cli-name" style="font-weight:600">${l}</span>${l==="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="${m("copilot.keychainHint")}">\u{1F511}</button>`:""}
90
- </div>
91
- ${g}
92
- ${f}
93
- ${b}
94
- </div>
95
- `}o&&(o.innerHTML=r);let a=document.getElementById("copilotKeychainBtn");a&&a.addEventListener("click",async()=>{let l=a;l.disabled=!0,l.textContent="\u23F3";try{let d=await h("/api/copilot/refresh",{method:"POST"});l.textContent=d?.ok?"\u2705":"\u274C",d?.ok&&await de(!0)}catch{l.textContent="\u274C"}setTimeout(()=>{l.textContent="\u{1F511}",l.disabled=!1},2e3)})}function kt(){h("/api/prompt").then(e=>{if(!e)return;let t=document.getElementById("modalPromptEditor");t&&(t.value=e.content||""),document.getElementById("promptModal")?.classList.add("open")})}function X(e){e&&e.target!==e.currentTarget||document.getElementById("promptModal")?.classList.remove("open")}async function wt(){let t=document.getElementById("modalPromptEditor")?.value||"";await y("/api/prompt","PUT",{content:t}),document.getElementById("promptModal")?.classList.remove("open")}async function Ct(){let e=await h("/api/prompt-templates");e&&(It=e.templates,P=!1,Po(e.tree),$t("tree"),document.getElementById("templateModal")?.classList.add("open"))}function Po(e){let t=document.getElementById("templateTree");if(t){t.innerHTML="";for(let n of e){let o=document.createElement("div");o.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",o.textContent=`${n.emoji} ${n.label}`,t.appendChild(o);for(let i of n.children){let r=It.find(l=>l.id===i);if(!r)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.textContent=`\u{1F4C4} ${r.filename}`,a.addEventListener("mouseenter",()=>{a.style.borderColor="var(--accent2)"}),a.addEventListener("mouseleave",()=>{a.style.borderColor="var(--border)"}),a.addEventListener("click",()=>{Oo(r)}),t.appendChild(a)}}}}function Oo(e){let t=document.getElementById("templateEditor");t.value=e.content,t.dataset.templateId=e.id,t.readOnly=!0,P=!1;let n=document.getElementById("templateEditorLabel");n&&(n.textContent=`\u{1F4C4} ${e.filename}`);let o=e.content.match(/\{\{[A-Z_]+\}\}/g),i=document.getElementById("templateVars");i&&(i.textContent=o?`vars: ${[...new Set(o)].join(", ")}`:"no variables");let r=document.getElementById("templateSaveBtn");r&&(r.style.display="none");let a=document.getElementById("templateDevToggle");a&&(a.style.color="var(--text-dim)",a.style.borderColor="var(--border)",a.textContent="\u{1F527} \uAC1C\uBC1C\uC790 \uBAA8\uB4DC");let l=document.getElementById("templateModalTitle");l&&(l.textContent=`\u{1F4C4} ${e.filename}`),$t("editor")}function Bt(){if(!P&&!confirm(`\u26A0\uFE0F \uD504\uB86C\uD504\uD2B8\uB97C \uC9C1\uC811 \uC218\uC815\uD558\uBA74 \uC608\uC0C1\uCE58 \uBABB\uD55C \uB3D9\uC791\uC774 \uBC1C\uC0DD\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
96
- \uACC4\uC18D\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?`))return;P=!P;let e=document.getElementById("templateEditor");e.readOnly=!P;let t=document.getElementById("templateSaveBtn");t&&(t.style.display=P?"":"none");let n=document.getElementById("templateDevToggle");n&&(n.style.color=P?"var(--stop-btn)":"var(--text-dim)",n.style.borderColor=P?"var(--stop-btn)":"var(--border)",n.textContent=P?"\u{1F513} \uAC1C\uBC1C\uC790 \uBAA8\uB4DC ON":"\u{1F527} \uAC1C\uBC1C\uC790 \uBAA8\uB4DC")}async function Ht(){let e=document.getElementById("templateEditor"),t=e.dataset.templateId;if(!t)return;await y(`/api/prompt-templates/${t}`,"PUT",{content:e.value});let n=document.getElementById("templateEditorLabel");n&&(n.textContent="\u2705 \uC800\uC7A5 + \uD56B\uB9AC\uB85C\uB4DC \uC644\uB8CC!",setTimeout(()=>{n.textContent=`\u{1F4C4} ${t}.md`},2e3));let o=It.find(i=>i.id===t);o&&(o.content=e.value)}function $t(e){let t=document.getElementById("templateTreeView"),n=document.getElementById("templateEditorView");t&&(t.style.display=e==="tree"?"":"none"),n&&(n.style.display=e==="editor"?"flex":"none");let o=document.getElementById("templateModalTitle");o&&e==="tree"&&(o.textContent="\u{1F4DD} \uD504\uB86C\uD504\uD2B8 \uAD6C\uC870")}function At(){$t("tree")}function Oe(e){e&&e.target!==e.currentTarget||document.getElementById("templateModal")?.classList.remove("open")}var It,P,ee=M(()=>{"use strict";Se();q();we();k();C();$();It=[],P=!1});async function Hn(){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"}De=await Rt("ko"),e==="ko"?pe=De:pe=await Rt(e),ue=e,$n()}async function Rt(e){try{let{api:t}=await Promise.resolve().then(()=>(C(),mn));return await t(`/api/i18n/${e}`)||{}}catch{return{}}}function m(e,t={}){let n=pe[e]??De[e]??e;for(let[o,i]of Object.entries(t))n=n.replaceAll(`{${o}}`,String(i));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 An(e){if(e!==ue){e==="ko"?pe=De:pe=await Rt(e),ue=e;try{localStorage.setItem("claw_locale",e)}catch{}$n();try{let{loadEmployees:t}=await Promise.resolve().then(()=>(V(),se));t()}catch{}try{let{loadSkills:t}=await Promise.resolve().then(()=>(Te(),at));t()}catch{}try{let{loadCommands:t}=await Promise.resolve().then(()=>(He(),gt));t()}catch{}try{let{loadSettings:t}=await Promise.resolve().then(()=>(ee(),me));t()}catch{}}}function ge(){return ue}function En(e,t={}){let n=new URL(e,location.origin);return n.searchParams.has("locale")||n.searchParams.set("locale",ue),fetch(n.toString(),t)}var ue,pe,De,k=M(()=>{"use strict";ue="ko",pe={},De={}});function Rn(e){let t=[],n=e.replace(/```[\s\S]*?```/g,o=>(t.push(o),`\0P${t.length-1}\0`)).replace(/`[^`]+`/g,o=>(t.push(o),`\0P${t.length-1}\0`));return n=n.replace(/([\p{P}])\*\*(?=[^\s\p{P}])/gu,(o,i)=>i==="*"?o:i+"\u200B**"),n=n.replace(/\x00P(\d+)\x00/g,(o,i)=>t[Number(i)]),n}var Pn=M(()=>{"use strict"});function p(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Fn(e){return typeof DOMPurify<"u"?DOMPurify.sanitize(e,{USE_PROFILES:{html:!0,svg:!0,svgFilters:!0},FORBID_TAGS:["script","style","iframe","object","embed","form"],FORBID_ATTR:["onerror","onclick","onload","onmouseover","onfocus","onblur"],ADD_TAGS:["use"],ADD_ATTR:["aria-hidden","xmlns","viewBox"]}):e.replace(/<script[\s\S]*?>[\s\S]*?<\/script>/gi,"").replace(/\bon\w+\s*=/gi,"data-removed=").replace(/javascript\s*:/gi,"about:blank")}function Fe(e){let t=e.replace(/```json\n[\s\S]*?\n```/g,"");return t=t.replace(/\{[\s\S]*"subtasks"\s*:\s*\[[\s\S]*?\]\s*\}/g,"").trim(),t}function Do(e){let t=[],n=[],o=e.replace(/```[\s\S]*?```/g,i=>(n.push(i),`\0C${n.length-1}\0`)).replace(/`[^`]+`/g,i=>(n.push(i),`\0C${n.length-1}\0`));return o=o.replace(/\$\$([\s\S]+?)\$\$/g,(i,r)=>(t.push({tex:r.trim(),displayMode:!0}),`\0MATH-${t.length-1}\0`)),o=o.replace(/\\\[([\s\S]+?)\\\]/g,(i,r)=>(t.push({tex:r.trim(),displayMode:!0}),`\0MATH-${t.length-1}\0`)),o=o.replace(/(?<!\$)\$(?!\$)([^\n$]+?)\$(?!\$)/g,(i,r)=>(t.push({tex:r.trim(),displayMode:!1}),`\0MATH-${t.length-1}\0`)),o=o.replace(/\\\((.+?)\\\)/g,(i,r)=>(t.push({tex:r.trim(),displayMode:!1}),`\0MATH-${t.length-1}\0`)),o=o.replace(/\x00C(\d+)\x00/g,(i,r)=>n[Number(r)]),{text:o,blocks:t}}function Fo(e,t){return e.replace(/\x00MATH-(\d+)\x00/g,(n,o)=>{let i=t[Number(o)];if(!i)return'<code title="math placeholder error">[math error]</code>';if(typeof katex>"u")return i.displayMode?`<pre><code>${p(i.tex)}</code></pre>`:`<code>${p(i.tex)}</code>`;try{return katex.renderToString(i.tex,{displayMode:i.displayMode,throwOnError:!1})}catch{return i.displayMode?`<pre><code>${p(i.tex)}</code></pre>`:`<code>${p(i.tex)}</code>`}})}function jo(){typeof mermaid>"u"||document.querySelectorAll(".mermaid-pending").forEach(async e=>{e.classList.remove("mermaid-pending");let t=e.textContent||"",n=`mermaid-${++_o}`;try{let{svg:o}=await mermaid.render(n,t);e.innerHTML=Fn(o),e.classList.add("mermaid-rendered")}catch(o){let i=o?.message||o?.str||"Unknown error";e.innerHTML=`
97
- <div style="border:1px solid #ef4444;border-radius:6px;padding:8px;margin:4px 0">
98
- <div style="color:#ef4444;font-size:11px;margin-bottom:4px">\u26A0\uFE0F ${p(m("mermaid.renderFail")||"Mermaid render failed")}</div>
99
- <div style="color:#fbbf24;font-size:10px;margin-bottom:6px">${p(i.slice(0,200))}</div>
100
- <pre style="margin:0;font-size:11px;overflow-x:auto"><code>${p(t)}</code></pre>
101
- </div>`}})}function No(){if(On)return!0;if(typeof marked>"u")return!1;let e=new marked.Renderer;return e.code=function({text:t,lang:n}){if(n==="mermaid")return`<div class="mermaid-container mermaid-pending">${p(t)}</div>`;let o=p(t);if(typeof hljs<"u"&&n&&hljs.getLanguage(n))try{o=hljs.highlight(t,{language:n}).value}catch{}else if(typeof hljs<"u")try{o=hljs.highlightAuto(t).value}catch{}let i=n?p(n):m("code.copy");return`<div class="code-block-wrapper">${`<span class="code-lang-label" data-lang="${n?p(n):""}">${i}</span>`}<pre><code class="hljs${n?` language-${p(n)}`:""}">${o}</code></pre></div>`},marked.setOptions({renderer:e,gfm:!0,breaks:!0}),typeof window.mermaid<"u"&&window.mermaid.initialize({startOnLoad:!1,theme:"dark",securityLevel:"strict"}),On=!0,!0}function zo(e){return p(e).replace(/`{3,}(\w*)\n([\s\S]*?)`{3,}/g,"<pre><code>$2</code></pre>").replace(/`([^`]+)`/g,"<code>$1</code>").replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>").replace(/^### (.+)$/gm,'<div style="font-weight:700;margin:8px 0 4px">$1</div>').replace(/^## (.+)$/gm,'<div style="font-weight:700;font-size:14px;margin:10px 0 4px">$1</div>').replace(/^# (.+)$/gm,'<div style="font-weight:700;font-size:16px;margin:12px 0 4px">$1</div>').replace(/\n/g,"<br>")}function _n(){typeof hljs>"u"||document.querySelectorAll(".code-block-wrapper pre code").forEach(e=>{if(e.dataset.highlighted==="yes")return;let t=[...e.classList].find(o=>o.startsWith("language-"))?.replace("language-",""),n=e.textContent||"";try{t&&hljs.getLanguage(t)?e.innerHTML=hljs.highlight(n,{language:t}).value:e.innerHTML=hljs.highlightAuto(n).value,e.dataset.highlighted="yes"}catch{}})}function qo(){Dn||(Dn=!0,document.addEventListener("click",e=>{let t=e.target?.closest(".code-lang-label");if(!t)return;let n=t.closest(".code-block-wrapper");if(!n)return;let o=n.querySelector("pre code");o&&navigator.clipboard.writeText(o.textContent||"").then(()=>{let i=t.textContent||"";t.textContent=m("code.copied"),t.classList.add("copied"),setTimeout(()=>{t.textContent=i,t.classList.remove("copied")},1500)}).catch(()=>{})}))}function Pt(e){let t=Fe(e);if(!t)return`<em style="color:var(--text-dim)">${p(m("orchestrator.dispatching"))}</em>`;let{text:n,blocks:o}=Do(t),i;if(No()){let r=Rn(n);i=marked.parse(r),i=i.replace(/<table/g,'<div class="table-wrapper"><table').replace(/<\/table>/g,"</table></div>")}else i=zo(n);return i=Fo(i,o),i=Fn(i),requestAnimationFrame(()=>{jo(),_n()}),qo(),i}var _o,On,Dn,q=M(()=>{"use strict";k();Pn();_o=0;On=!1;(function e(){if(typeof hljs<"u"){_n();return}setTimeout(e,200)})();Dn=!1});function zn(){return te}function jn(e){te=(e||"").trim()||Ot,localStorage.setItem(Nn,te);let t=document.getElementById("appNameInput");t&&(t.value=te)}function qn(){te=localStorage.getItem(Nn)||Ot;let e=document.getElementById("appNameInput");e&&(e.value=te),document.getElementById("appNameSave")?.addEventListener("click",()=>{let t=document.getElementById("appNameInput");t&&jn(t.value)}),document.getElementById("appNameInput")?.addEventListener("keydown",t=>{let n=t;n.key==="Enter"&&(n.preventDefault(),jn(n.target.value),n.target.blur())})}var Nn,Ot,te,Dt=M(()=>{"use strict";Nn="agentName",Ot="CLI-JAW",te=Ot});var Jt={};W(Jt,{addMessage:()=>B,addSystemMsg:()=>x,appendAgentText:()=>Ft,finalizeAgent:()=>je,handleSave:()=>Nt,initMsgCopy:()=>qt,loadMemory:()=>zt,loadMessages:()=>Jo,loadStats:()=>Kn,scrollToBottom:()=>_t,setStatus:()=>ne,switchTab:()=>jt,updateQueueBadge:()=>_e});function ne(e){let t=document.getElementById("statusBadge"),n=document.getElementById("btnSend");c.agentBusy=e==="running",document.getElementById("typingIndicator")?.classList.toggle("active",c.agentBusy),e==="running"?(t&&(t.className="status-badge status-running",t.textContent="\u23F3 running"),n&&(n.textContent="\u25A0",n.title=m("btn.stop"),n.classList.add("stop-mode"))):(t&&(t.className="status-badge status-idle",t.textContent="\u26A1 idle"),n&&(n.textContent="\u27A4",n.title="Send",n.classList.remove("stop-mode")),_e(0))}function _e(e){let t=document.getElementById("queueBadge");if(!t){t=document.createElement("span"),t.id="queueBadge",t.style.cssText="position:absolute;top:-6px;right:-6px;background:#f80;color:#fff;border-radius:50%;font-size:11px;min-width:18px;height:18px;display:flex;align-items:center;justify-content:center;font-weight:bold";let n=document.getElementById("btnSend");n?.parentElement&&(n.parentElement.style.position="relative"),n&&(n.style.position="relative",n.appendChild(t))}t.textContent=e>0?String(e):"",t.style.display=e>0?"flex":"none"}function x(e,t,n){let o=document.getElementById("chatMessages");if(!o)return;let i=document.createElement("div"),r=n?` msg-type-${n}`:"";i.className="msg msg-system"+r+(t?" "+t:""),i.textContent=e,o.appendChild(i),o.scrollTop=o.scrollHeight}function Ft(e){if(!e)return;c.currentAgentDiv||(c.currentAgentDiv=B("agent",""));let t=c.currentAgentDiv?.querySelector(".msg-content");t&&(t.textContent+=e),_t()}function je(e,t){let n=Date.now();if(!(!c.currentAgentDiv&&n-Jn<500)){if(document.querySelectorAll(".msg-system.tool-activity").forEach(o=>o.remove()),e){c.currentAgentDiv||(c.currentAgentDiv=B("agent",""));let o=c.currentAgentDiv?.querySelector(".msg-content"),i="";if(t&&t.length>0){let r={};t.forEach(d=>{r[d.icon]=(r[d.icon]||0)+1});let a=Object.entries(r).map(([d,s])=>`${d}\xD7${s}`).join(" "),l=t.map(d=>`${d.icon} ${p(d.label)}`).join(`
102
- `);i=`<details class="tool-summary"><summary>${a}</summary><div class="tool-log">${l}</div></details>`}o&&(o.innerHTML=i+Pt(e)),o&&o.setAttribute("data-raw",Fe(e))}c.currentAgentDiv=null,Jn=Date.now(),ne("idle"),Kn()}}function B(e,t){let n=document.getElementById("chatMessages"),o=document.createElement("div");o.className=`msg msg-${e}`;let i=Pt(t);o.innerHTML=`<div class="msg-label">${e==="user"?m("msg.you"):zn()}</div><div class="msg-content">${i}</div><button class="msg-copy" title="Copy"></button>`;let r=o.querySelector(".msg-content");return r&&r.setAttribute("data-raw",Fe(t)),n?.appendChild(o),_t(),o}function _t(){let e=document.getElementById("chatMessages");e&&(e.scrollTop=e.scrollHeight)}function jt(e,t){document.querySelectorAll(".tab-btn").forEach(o=>o.classList.remove("active")),document.querySelectorAll(".tab-content").forEach(o=>o.classList.remove("active"));let n={agents:"tabAgents",settings:"tabSettings",skills:"tabSkills"};document.getElementById(n[e])?.classList.add("active"),t&&t.classList.add("active"),e==="settings"&&Promise.resolve().then(()=>(ee(),me)).then(o=>o.loadSettings()),e==="agents"&&Promise.resolve().then(()=>(V(),se)).then(o=>o.loadEmployees()),e==="skills"&&Promise.resolve().then(()=>(Te(),at)).then(o=>o.loadSkills())}function Nt(){document.getElementById("tabSettings")?.classList.contains("active")?Promise.resolve().then(()=>(ee(),me)).then(t=>t.savePerCli()):Promise.resolve().then(()=>(ee(),me)).then(t=>t.updateSettings())}async function Kn(){let e=await h("/api/messages");if(!e)return;let t=document.getElementById("statMsgs");t&&(t.textContent=m("stat.messages",{count:e.length}))}async function Jo(){let e=await h("/api/messages");e&&e.forEach(t=>B(t.role==="assistant"?"agent":t.role,t.content))}async function zt(){try{let e=await h("/api/memory"),t=document.getElementById("memoryList");if(!t||!e)return;if(e.length===0){t.innerHTML=`<li style="color:var(--text-dim)">${m("mem.empty")}</li>`;return}t.innerHTML=e.map(n=>`<li><span class="memory-key">${p(n.key)}</span>: ${p(n.value)}</li>`).join("")}catch{}}function qt(){document.getElementById("chatMessages")?.addEventListener("click",e=>{let t=e.target?.closest(".msg-copy");if(!t)return;let o=t.closest(".msg")?.querySelector(".msg-content");if(!o)return;let i=o.getAttribute("data-raw")||o.innerText||o.textContent||"";navigator.clipboard.writeText(i).then(()=>{t.classList.add("copied"),setTimeout(()=>t.classList.remove("copied"),600)}).catch(()=>{})})}var Jn,K=M(()=>{"use strict";$();q();Dt();k();C();Jn=0});function Kt(e,t,n){let o=fe.indexOf(n);if(o<0)return;let i=e.getBoundingClientRect(),r=t.offsetWidth||36,a=document.getElementById(`dot-${n}`);if(!a)return;let l=fe[o+1],d=l?document.getElementById(`dot-${l}`):null;if(d){let s=a.getBoundingClientRect(),u=d.getBoundingClientRect(),g=(s.right+u.left)/2;t.style.left=g-i.left-r/2+"px"}else{let s=a.getBoundingClientRect();t.style.left=s.left-i.left+s.width/2-r/2+"px"}}function Ut(){c.ws=new WebSocket(`ws://${location.host}?lang=${ge()}`),c.ws.onmessage=e=>{let t=JSON.parse(e.data);if(t.type==="agent_status")t.running!==void 0?ne(t.running?"running":"idle"):ne(t.status||"idle"),t.agentId&&t.phase&&(Un[t.agentId]={phase:t.phase,phaseLabel:t.phaseLabel||""},Promise.resolve().then(()=>(V(),se)).then(n=>n.loadEmployees()));else if(t.type==="queue_update")_e(t.pending||0);else if(t.type==="worklog_created")x(`\u{1F4CB} Worklog: ${t.path||""}`);else if(t.type==="round_start"){let n=t.agentPhases||t.subtasks||[],o=n.map(i=>i.agent||i.name||"").join(", ");x(m("ws.roundStart",{round:t.round||0,count:n.length,names:o}))}else if(t.type==="round_done")t.action==="complete"?x(m("ws.roundDone",{round:t.round||0})):t.action==="next"?x(m("ws.roundNext",{round:t.round||0})):x(m("ws.roundRetry",{round:t.round||0}));else if(t.type==="agent_tool")x(`${t.icon||""} ${t.label||""}`,"tool-activity");else if(t.type==="agent_output")Ft(t.text||"");else if(t.type==="agent_retry")x(m("ws.retry",{cli:t.cli||"",delay:t.delay||10}),"tool-activity");else if(t.type==="agent_fallback")x(m("ws.fallback",{from:t.from||"",to:t.to||""}),"tool-activity");else if(t.type==="agent_done")je(t.text||"",t.toolLog);else if(t.type==="orchestrate_done")je(t.text||"");else if(t.type==="clear"){let n=document.getElementById("chatMessages");n&&(n.innerHTML="")}else if(t.type==="agent_added"||t.type==="agent_updated"||t.type==="agent_deleted")Promise.resolve().then(()=>(V(),se)).then(n=>n.loadEmployees());else if(t.type==="orc_state"){let n=new Set(["IDLE","P","A","B","C","D"]),o=typeof t.state=="string"?t.state:"IDLE",i=n.has(o)?o:"IDLE";if(c.orcState=i,i==="IDLE"||i==="D")document.body.removeAttribute("data-orc-state"),document.body.style.removeProperty("--orc-glow");else{document.body.setAttribute("data-orc-state",i);let s=`--orc-glow-${i}`,u=getComputedStyle(document.documentElement).getPropertyValue(s).trim();document.body.style.setProperty("--orc-glow",u)}document.body.classList.add("orc-pulse"),setTimeout(()=>document.body.classList.remove("orc-pulse"),700);let r=document.getElementById("orcStateBadge");if(r){let s={IDLE:"",P:"PLAN",A:"AUDIT",B:"BUILD",C:"CHECK",D:"DONE"};r.textContent=s[i],r.style.display=i==="IDLE"?"none":"inline-block"}let a=document.getElementById("pabcRoadmap"),l=document.getElementById("sharkRunner"),d=document.getElementById("pabcBrand");if(a&&l){if(!a.dataset.resizeObserved){a.dataset.resizeObserved="1",new ResizeObserver(()=>{U&&l.classList.contains("running")&&Kt(a,l,U)}).observe(a);let s=0;window.addEventListener("resize",()=>{cancelAnimationFrame(s),s=requestAnimationFrame(()=>{U&&l.classList.contains("running")&&Kt(a,l,U)})})}if(i==="IDLE")a.classList.remove("visible","shimmer-out"),l.classList.remove("running"),U=null;else if(i==="D"){fe.forEach(s=>{let u=document.getElementById(`dot-${s}`);u&&(u.className="pabc-dot done",u.setAttribute("data-phase",s))});for(let s=0;s<4;s++){let u=document.getElementById(`pabc-conn-${s}`);u&&(u.className="pabc-connector done")}l.classList.remove("running"),U=null,a.classList.add("shimmer-out"),setTimeout(()=>a.classList.remove("visible","shimmer-out"),1e3)}else{a.classList.remove("shimmer-out"),a.classList.add("visible"),l.classList.add("running");let s=fe.indexOf(i);fe.forEach((u,g)=>{let f=document.getElementById(`dot-${u}`);f&&(f.className=`pabc-dot ${g<s?"done":g===s?"active":"future"}`,f.setAttribute("data-phase",u))});for(let u=0;u<4;u++){let g=document.getElementById(`pabc-conn-${u}`);g&&(g.className=`pabc-connector ${u<s?"done":""}`)}U=i,requestAnimationFrame(()=>Kt(a,l,i))}d&&t.title&&(d.textContent=t.title)}}else t.type==="new_message"&&t.source==="telegram"&&B(t.role==="assistant"?"agent":t.role||"user",t.content||"")},c.ws.onopen=()=>{console.log("[ws] connected"),Promise.resolve().then(()=>(K(),Jt)).then(e=>{let t=document.getElementById("chatMessages");t&&(t.innerHTML=""),e.loadMessages(),e.setStatus("idle")})},c.ws.onclose=()=>{console.log("[ws] disconnected, reconnecting in 2s..."),ne("idle"),setTimeout(Ut,2e3)}}function bn(e){return Un[e]||null}var fe,U,Un,nt=M(()=>{"use strict";$();K();k();fe=["P","A","B","C"],U=null;Un={}});nt();K();$();K();we();k();He();C();async function ze(){let e=document.getElementById("chatInput"),t=document.getElementById("btnSend");if(!e||!t)return;let n=document.activeElement===t;if(t.classList.contains("stop-mode")&&n&&!e.value.trim()&&!c.attachedFiles.length){_("/api/stop","POST");return}let o=e.value.trim();if(!o&&!c.attachedFiles.length)return;let r=o.slice(1).trim().split(/\s+/)[0]||"",a=r.includes("/")||r.includes("\\");if(o.startsWith("/")&&!c.attachedFiles.length&&!a){e.value="",Ne(),R();try{let l,d;if(typeof AbortSignal?.timeout=="function")l=AbortSignal.timeout(1e4);else{let f=new AbortController;l=f.signal,d=setTimeout(()=>f.abort(),1e4)}let s=ke(),u=await fetch("/api/command",{method:"POST",headers:{"Content-Type":"application/json","Accept-Language":s},body:JSON.stringify({text:o,locale:s}),signal:l});d&&clearTimeout(d);let g=await u.json().catch(()=>({}));if(g?.code==="not_command"){B("user",o),await y("/api/message","POST",{prompt:o});return}if(!u.ok&&!g?.text)throw new Error(`HTTP ${u.status}`);if(g?.code==="clear_screen"){let f=document.getElementById("chatMessages");f&&(f.innerHTML="")}g?.text&&x(g.text,"",g.type)}catch(l){x(m("chat.cmd.fail",{msg:l.message}),"","error")}return}if(c.attachedFiles.length){let d=`[\u{1F4CE} ${c.attachedFiles.map(s=>s.name).join(", ")}] ${o}`;B("user",d),e.value="",Ne();try{let u=(await Promise.all(c.attachedFiles.map(g=>Wn(g)))).map(g=>m("chat.file.sent",{path:g})).join(`
103
- `);o&&(u+=m("chat.file.sentWithMsg",{text:o})),ye(),await y("/api/message","POST",{prompt:u})}catch(s){x(m("chat.file.uploadFail",{msg:s.message})),ye()}}else{B("user",o),e.value="",Ne();let l=await fetch("/api/message",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:o})}),d=await l.json().catch(()=>({}));if(!l.ok){x(`\u274C ${d.error||m("chat.requestFail",{status:l.status})}`,"","error");return}if(d.queued){let{updateQueueBadge:s}=await Promise.resolve().then(()=>(K(),Jt));s(d.pending||1)}else d.continued&&x(m("chat.continue"))}}function Zn(e){e.key==="Enter"&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),ze())}async function Wn(e){let t=await fetch("/api/upload",{method:"POST",headers:{"X-Filename":encodeURIComponent(e.name)},body:e});if(!t.ok)throw new Error("upload failed");return(await t.json()).path}function Zt(e){for(let t of e)c.attachedFiles.some(n=>n.name===t.name)||c.attachedFiles.push(t);Wt(),document.getElementById("chatInput")?.focus()}function Vn(e){c.attachedFiles.splice(e,1),Wt()}function ye(){c.attachedFiles=[],Wt();let e=document.getElementById("fileInput");e&&(e.value="")}function Wt(){let e=document.getElementById("filePreview"),t=document.getElementById("filePreviewList");if(e){if(!c.attachedFiles.length){e.classList.remove("visible"),t&&(t.innerHTML="");return}e.classList.add("visible"),t&&(t.innerHTML=c.attachedFiles.map((n,o)=>{let i=(n.size/1024).toFixed(1);return`<div class="file-chip">
104
- ${n.type.startsWith("image/")?`<img src="${URL.createObjectURL(n)}" class="file-chip-thumb" alt="">`:""}
105
- <span class="file-chip-name">\u{1F4CE} ${n.name} (${i}KB)</span>
106
- <button class="file-chip-remove" data-file-idx="${o}" title="Remove">\u2715</button>
107
- </div>`}).join(""))}}async function Gn(){_("/api/clear","POST");let e=document.getElementById("chatMessages");e&&(e.innerHTML="")}function Ko(e){e.style.height="auto",e.style.height=e.scrollHeight+"px"}function Yn(){let e=document.getElementById("chatInput");e&&e.addEventListener("input",()=>Ko(e))}function Ne(){let e=document.getElementById("chatInput");e&&(e.style.height="auto")}function Qn(){let e=document.querySelector(".chat-area"),t=document.getElementById("dragOverlay");if(!e||!t)return;let n=0;e.addEventListener("dragenter",o=>{o.preventDefault(),n++,t.classList.add("visible")}),e.addEventListener("dragleave",o=>{o.preventDefault(),n--,n<=0&&(n=0,t.classList.remove("visible"))}),e.addEventListener("dragover",o=>o.preventDefault()),e.addEventListener("drop",o=>{o.preventDefault(),n=0,t.classList.remove("visible");let r=[...o.dataTransfer?.files||[]];r.length&&Zt(r)}),document.getElementById("fileInput")?.addEventListener("change",o=>{let i=o.target,r=[...i.files||[]];r.length&&Zt(r),i.value=""}),document.addEventListener("paste",o=>{let i=o.clipboardData?.items;if(!i)return;let r=[];for(let a of i){if(a.kind!=="file")continue;let l=a.getAsFile();if(l)if(!l.name||l.name==="image.png"){let d=new Date().toISOString().replace(/[:.]/g,"-"),s=l.type.split("/")[1]||"png",u=new File([l],`pasted-${d}.${s}`,{type:l.type});r.push(u)}else r.push(l)}r.length&&(o.preventDefault(),Zt(r))})}async function Xn(e,t,n){let o=document.getElementById("chatInput"),i=o?.value.trim()||"",r=[...c.attachedFiles],a=["\u{1F3A4} [\uC74C\uC131 \uBA54\uC2DC\uC9C0]"];r.length&&a.push(`[\u{1F4CE} ${r.map(l=>l.name).join(", ")}]`),i&&a.push(i),B("user",a.join(" ")),o&&i&&(o.value="",Ne()),r.length&&ye();try{let l=await fetch("/api/voice",{method:"POST",headers:{"Content-Type":n,"X-Voice-Ext":t,"X-STT-Only":"true"},body:e});if(!l.ok){let g=await l.json().catch(()=>({}));throw new Error(g.error||`HTTP ${l.status}`)}let d=await l.json().catch(()=>null);if(!d?.text)throw new Error("Empty STT result");x(`\u{1F3A4} STT (${d.engine}, ${d.elapsed?.toFixed(1)}s): "${d.text.slice(0,100)}"`,"","info");let s=[];r.length&&(s=await Promise.all(r.map(g=>Wn(g))));let u=[];for(let g of s)u.push(m("chat.file.sent",{path:g}));u.push(`\u{1F3A4} ${d.text}`),i&&u.push(i),await y("/api/message","POST",{prompt:u.join(`
108
- `)})}catch(l){x(m("voice.sttFail",{msg:l.message}),"","error")}}He();Te();ee();V();$();k();C();q();var Uo={sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6},Zo={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 Wo(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 eo(e){let t=e&&typeof e=="object"?e:{},n=t.kind,o=typeof t.timeZone=="string"?t.timeZone.trim():"",i=Wo(t.timeZone);if(o&&!i)return{ok:!1,code:"invalid_timezone",error:`invalid timeZone "${o}"`};if(n==="cron"){let r=typeof t.cron=="string"?t.cron.trim().replace(/\s+/g," "):"";if(!r)return{ok:!1,code:"invalid_cron",error:"cron expression required"};let a=Vo(r);return a?{ok:!1,code:"invalid_cron",error:a}:{ok:!0,schedule:i?{kind:"cron",cron:r,timeZone:i}:{kind:"cron",cron:r}}}if(n==null||n==="every"){let r=typeof t.minutes=="number"?t.minutes:Number(t.minutes);if(!Number.isInteger(r)||r<1)return{ok:!1,code:"invalid_minutes",error:"minutes must be an integer >= 1"};let a=Math.max(1,Math.floor(r));return{ok:!0,schedule:i?{kind:"every",minutes:a,timeZone:i}:{kind:"every",minutes:a}}}return{ok:!1,code:"invalid_kind",error:`invalid heartbeat schedule kind "${String(n)}"`}}function Vo(e){try{let[t,n,o,i,r]=Go(e);return ve(t,{min:0,max:59}),ve(n,{min:0,max:23}),ve(o,{min:1,max:31}),ve(i,{min:1,max:12,aliases:Zo}),ve(r,{min:0,max:7,aliases:Uo,normalize:Xo}),null}catch(t){return t.message}}function Go(e){let n=String(e||"").trim().replace(/\s+/g," ").split(" ");if(n.length!==5)throw new Error(`cron must have 5 fields, got ${n.length}`);return n}function ve(e,t){for(let n of e.split(","))Yo(n.trim(),t)}function Yo(e,t){if(!e)throw new Error("empty cron segment");let n=e;if(e.includes("/")){let[o,i,...r]=e.split("/");if(!o||!i||r.length>0)throw new Error(`invalid cron step segment "${e}"`);n=o,Qo(i,`invalid cron step "${i}"`)}if(n!=="*"){if(n.includes("-")){let[o,i,...r]=n.split("-");if(!o||!i||r.length>0)throw new Error(`invalid cron range "${n}"`);let a=Vt(o,t),l=Vt(i,t);if(a>l)throw new Error(`invalid cron range "${n}"`);return}Vt(n,t)}}function Vt(e,t){let n=e.trim().toLowerCase(),o=t.aliases?.[n],i=o??Number(n);if(!Number.isInteger(i))throw new Error(`invalid cron value "${e}"`);let r=t.normalize?t.normalize(i):i;if(!ei(r,t.min,t.max))throw new Error(`cron value "${e}" out of range ${t.min}-${t.max}`);return r}function Qo(e,t){let n=Number(e);if(!Number.isInteger(n)||n<=0)throw new Error(t);return n}function Xo(e){return e===7?0:e}function ei(e,t,n){return e>=t&&e<=n}async function to(){let e=await h("/api/heartbeat");c.heartbeatJobs=(e?.jobs||[]).map(be),c.heartbeatErrors=qe(c.heartbeatJobs),H(),document.getElementById("heartbeatModal")?.classList.add("open")}function Gt(e){e&&e.target!==e.currentTarget||document.getElementById("heartbeatModal")?.classList.remove("open")}function H(){let e=document.getElementById("hbJobsList");if(!e)return;let t=c.heartbeatJobs.map(be);c.heartbeatJobs=t,c.heartbeatErrors=qe(t),t.length===0?e.innerHTML=`<p style="color:var(--text-dim);font-size:12px;text-align:center">${m("hb.empty")}</p>`:e.innerHTML=t.map((i,r)=>{let a=ao(i.schedule),l=a.kind==="cron",d=c.heartbeatErrors[i.id],s=d||ai(a),u=d?"hb-schedule-meta hb-error":"hb-schedule-meta hb-help",g=l?`<input type="text" value="${p(a.cron)}" placeholder="${p(m("hb.cronPlaceholder"))}"
109
- data-hb-cron="${r}">`:`<input type="number" value="${a.minutes}" min="1" data-hb-minutes="${r}">`,f=l?`<span class="hb-chip">${p(m("hb.cronLabel"))}</span>`:`<span class="hb-chip">${p(m("hb.minutesLabel"))}</span>`;return`
110
- <div class="hb-job-card">
111
- <div class="hb-job-header">
112
- <input type="text" value="${p(String(i.name||""))}" placeholder="${p(m("hb.name"))}"
113
- data-hb-name="${r}">
114
- <button class="hb-toggle ${i.enabled?"on":"off"}"
115
- data-hb-toggle="${r}"></button>
116
- <button class="hb-del" data-hb-remove="${r}">\u2715</button>
117
- </div>
118
- <div class="hb-job-schedule">
119
- <select data-hb-kind="${r}">
120
- <option value="every"${l?"":" selected"}>${p(m("hb.kindEvery"))}</option>
121
- <option value="cron"${l?" selected":""}>${p(m("hb.kindCron"))}</option>
122
- </select>
123
- ${g}
124
- ${f}
125
- <input type="text" value="${p(a.timeZone||"")}" placeholder="${p(oi())}"
126
- data-hb-timezone="${r}">
127
- </div>
128
- <p class="${u}">${p(s)}</p>
129
- <textarea class="hb-prompt" rows="2" placeholder="${p(m("hb.prompt"))}"
130
- data-hb-prompt="${r}">${p(String(i.prompt||""))}</textarea>
131
- </div>
132
- `}).join("");let n=t.filter(i=>i.enabled).length,o=document.getElementById("hbSidebarBtn");o&&(o.textContent=`\u{1F493} Heartbeat (${n})`)}function no(){c.heartbeatJobs.push({id:"hb_"+Date.now(),name:"",enabled:!0,schedule:ni({kind:"every",minutes:5}),prompt:""}),H(),O()}function oo(e){c.heartbeatJobs.splice(e,1),H(),O()}function io(e){let n=c.heartbeatJobs[e];n&&(n.enabled=!n.enabled,H(),O())}async function O(){let e=c.heartbeatJobs.map(be);if(c.heartbeatJobs=e,c.heartbeatErrors=qe(e),Object.keys(c.heartbeatErrors).length>0){H();return}let t=await y("/api/heartbeat","PUT",{jobs:e});t?.jobs&&(c.heartbeatJobs=t.jobs.map(be),c.heartbeatErrors=qe(c.heartbeatJobs),H())}async function ro(){try{let t=((await h("/api/heartbeat"))?.jobs||[]).map(be).filter(o=>o.enabled).length,n=document.getElementById("hbSidebarBtn");n&&(n.textContent=`\u{1F493} Heartbeat (${t})`)}catch{}}function be(e){return{id:String(e.id||`hb_${Date.now()}`),name:String(e.name||""),enabled:e.enabled!==!1,schedule:ao(e.schedule),prompt:String(e.prompt||"")}}function ao(e){let t=ti(e?.timeZone);if(e?.kind==="cron"){let o=typeof e.cron=="string"?e.cron.trim().replace(/\s+/g," "):"0 9 * * *";return t?{kind:"cron",cron:o,timeZone:t}:{kind:"cron",cron:o}}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 ti(e){return(typeof e=="string"?e.trim():"")||void 0}function ni(e){let t=Yt();return t?{...e,timeZone:t}:e}function Yt(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone||void 0}catch{return}}function oi(){let e=Yt();return e?`${m("hb.timezoneAuto")} ${e}`:m("hb.timezoneAuto")}function qe(e){let t={};for(let n of e){let o=ii(n);o&&(t[n.id]=o)}return t}function ii(e){let t=eo(e.schedule);return t.ok?null:ri(t.code,t.error)}function ri(e,t){switch(e){case"invalid_cron":return m("hb.invalidCron");case"invalid_timezone":return m("hb.invalidTimeZone");case"invalid_minutes":return m("hb.invalidMinutes");default:return t||m("hb.invalidSchedule")}}function ai(e){let t=e.timeZone||Yt()||"Asia/Seoul";return e.kind==="cron"?m("hb.scheduleHintCron",{cron:"0 9 * * *",timeZone:t}):m("hb.scheduleHintEvery",{minutes:e.minutes,timeZone:t})}q();C();function v(e){return document.getElementById(e)}function S(e,t){let n=v(e);n&&(n.textContent=t==null?"":String(t))}function Je(e,t){let n=v(e);n&&(n.value=t==null?"":String(t))}function si(e,t){let n=v("memorySidebarBtn");if(!n)return;let o=e?.indexState==="ready"?"Ready":e?.state==="not_initialized"?"Indexing":e?.state||`(${t})`;n.textContent=`\u{1F9E0} Memory \xB7 ${o}`}function li(e){let t=v("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 so(e,t=!0){let n=v("advStatusBanner");n&&(n.style.display=t?"":"none",n.textContent=e)}function Ke(e){let t=["advBootstrapBtn","advReindexBtn","advReimportBtn","advOpenCorruptedBtn"];for(let n of t){let o=v(n);o&&(o.disabled=e)}}function ci(e){v("memOn")?.classList.toggle("active",e.enabled),v("memOff")?.classList.toggle("active",!e.enabled),Je("memFlushEvery",e.flushEvery),Je("memCli",e.cli||""),Je("memModel",e.model||""),Je("memRetention",e.retentionDays),S("memPath",e.path),S("memCounter",e.counter),S("memThreshold",e.flushEvery)}function di(e){let t=v("memTabBtnSettings"),n=v("memTabSettings");!t||!n||(t.style.display="",n.style.display||(n.style.display=""))}function mi(e){S("advIndexState",e?.indexState||e?.state||"-"),S("advStorageRoot",e?.storageRoot||"-"),S("advIndexedFiles",e?.indexedFiles||0),S("advIndexedChunks",e?.indexedChunks||0),S("advLastIndexedAt",e?.lastIndexedAt||"-"),S("advImportStatus",e?.importStatus||"-"),S("advCorruptedCount",e?.corruptedCount||0),S("advLastExpansion",(e?.lastExpansion||[]).join(", ")||"-"),S("advLastError",e?.lastError||"-");let t=e?.importedCounts||{};S("advImportStatus",`${e?.importStatus||"-"} (core:${t.core||0} md:${t.markdown||0} kv:${t.kv||0} claude:${t.claude||0})`)}function ui(e){let t=v("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(n=>`
133
- <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"
134
- data-mem-view="${p(n.name)}">
135
- <div>
136
- <span style="font-size:12px;font-family:monospace">${p(n.name)}</span>
137
- <span style="font-size:10px;color:var(--accent);margin-left:6px">${n.entries} entries</span>
138
- </div>
139
- <button data-mem-delete="${p(n.name)}" style="background:none;border:none;color:#f55;cursor:pointer;font-size:14px">\u{1F5D1}\uFE0F</button>
140
- </div>
141
- `).join("")}}function Qt(e,t){let n=v(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(o=>`<div style="padding:6px 8px;border:1px solid var(--border);border-radius:4px;margin-bottom:4px">
142
- <span style="font-size:12px;font-family:monospace">${p(o)}</span>
143
- </div>`).join("")}}function pi(e){Qt("advancedMemoryFiles",[...e?.sections?.profile||[],...e?.sections?.shared||[],...e?.sections?.episodes||[],...e?.sections?.semantic||[],...e?.sections?.procedures||[],...e?.sections?.sessions||[]]),Qt("corruptedMemoryFiles",e?.sections?.corrupted||[]),Qt("legacyUnmappedFiles",e?.sections?.legacyUnmapped||[])}function gi(){return{importCore:v("advImportCore")?.checked!==!1,importMarkdown:v("advImportMarkdown")?.checked!==!1,importKv:v("advImportKv")?.checked!==!1,importClaudeSession:v("advImportClaudeSession")?.checked!==!1}}async function fi(){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 oe(){let{basic:e,status:t,files:n}=await fi();e&&(ci(e),di(t),li(t),mi(t),ui(e.files),pi(n),si(t,e.files.length),v("memoryModal")?.classList.add("open"),Z("status"))}function Xt(e){e&&e.target!==e.currentTarget||v("memoryModal")?.classList.remove("open")}function Z(e){let t={settings:"memTabSettings",status:"memTabAdvOps",files:"memTabFiles"};for(let n of Object.values(t)){let o=v(n);o&&(o.style.display=n===t[e]?"":"none")}v("memTabBtnSettings")?.classList.toggle("active",e==="settings"),v("memTabBtnAdvOps")?.classList.toggle("active",e==="status"),v("memTabBtnFiles")?.classList.toggle("active",e==="files")}async function en(e){v("memOn")?.classList.toggle("active",e),v("memOff")?.classList.toggle("active",!e),await y("/api/memory-files/settings","PUT",{enabled:e})}async function he(){let e=v("memFlushEvery"),t=v("memCli"),n=v("memModel"),o=v("memRetention");await y("/api/memory-files/settings","PUT",{flushEvery:+(e?.value||10),cli:t?.value||"",model:n?.value||"",retentionDays:+(o?.value||30)});let i=v("memThreshold");i&&e&&(i.textContent=e.value)}async function tn(){Ke(!0),so("\uBA54\uBAA8\uB9AC bootstrap\uC744 \uB2E4\uC2DC \uC2E4\uD589\uD558\uB294 \uC911...",!0);let e=await y("/api/memory/bootstrap","POST",gi());Ke(!1),e?.message&&alert(e.message),await oe(),Z("status")}async function lo(){Ke(!0),so("\uBA54\uBAA8\uB9AC \uC778\uB371\uC2A4\uB97C \uC7AC\uC0DD\uC131\uD558\uB294 \uC911...",!0);let e=await y("/api/memory/reindex","POST",{});Ke(!1),e?.message&&alert(e.message),await oe(),Z("status")}function co(){let e=v("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:
144
- ${t}`)}async function mo(e){confirm("Delete "+e+"?")&&(await y("/api/memory-file?path="+encodeURIComponent(e),"DELETE",{}),oe())}async function uo(e){let t=await h("/api/memory-file?path="+encodeURIComponent(e));if(!t)return;let n=v("basicMemoryFiles");n&&(n.innerHTML=`
145
- <div style="margin-bottom:8px;display:flex;justify-content:space-between;align-items:center">
146
- <span style="font-size:12px;font-weight:600">${t.name}</span>
147
- <button data-mem-back style="background:none;border:none;color:var(--accent);cursor:pointer;font-size:11px">\u2190 back</button>
148
- </div>
149
- <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)">${p(t.content)}</pre>
150
- `)}$();Se();Dt();var nn="sidebarState";function po(){let e=JSON.parse(localStorage.getItem(nn)||"{}");e.left&&document.body.classList.add("left-collapsed"),e.right&&document.body.classList.add("right-collapsed"),document.getElementById("toggleLeft")?.addEventListener("click",on),document.getElementById("toggleRight")?.addEventListener("click",rn),window.addEventListener("resize",()=>{if(window.innerWidth>900){document.body.classList.remove("left-expanded","right-expanded");let t=JSON.parse(localStorage.getItem(nn)||"{}");document.body.classList.toggle("left-collapsed",!!t.left),document.body.classList.toggle("right-collapsed",!!t.right)}else document.body.classList.remove("left-collapsed","right-collapsed");Ue()}),window.innerWidth<=900&&document.body.classList.remove("left-collapsed","right-collapsed"),Ue()}function Ze(){return window.innerWidth<=900}function on(){Ze()?document.body.classList.toggle("left-expanded"):document.body.classList.toggle("left-collapsed"),go(),Ue()}function rn(){Ze()?document.body.classList.toggle("right-expanded"):document.body.classList.toggle("right-collapsed"),go(),Ue()}function yi(){return Ze()?document.body.classList.contains("left-expanded"):!document.body.classList.contains("left-collapsed")}function vi(){return Ze()?document.body.classList.contains("right-expanded"):!document.body.classList.contains("right-collapsed")}function Ue(){let e=document.getElementById("toggleLeft"),t=document.getElementById("toggleRight");e&&(e.textContent=yi()?"\u25C0":"\u25B6"),t&&(t.textContent=vi()?"\u25B6":"\u25C0")}function go(){localStorage.setItem(nn,JSON.stringify({left:document.body.classList.contains("left-collapsed"),right:document.body.classList.contains("right-collapsed")}))}var fo="theme",bi="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github-dark.min.css",hi="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github.min.css";function yo(){let e=localStorage.getItem(fo),t=window.matchMedia("(prefers-color-scheme: light)").matches?"light":"dark";vo(e||t),document.getElementById("toggleTheme")?.addEventListener("click",Ei)}function Ei(){let t=(document.documentElement.getAttribute("data-theme")||"dark")==="dark"?"light":"dark";vo(t),localStorage.setItem(fo,t)}function vo(e){document.documentElement.setAttribute("data-theme",e);let t=document.getElementById("toggleTheme");t&&t.classList.toggle("is-light",e==="light");let n=document.getElementById("hljsTheme");n&&(n.href=e==="dark"?bi:hi)}k();$();K();k();var an=!1,I=null,Ee=[],Ve=null,We=null,ho=0;function xi(){if(typeof MediaRecorder>"u")return"";let e=["audio/webm;codecs=opus","audio/mp4","audio/ogg;codecs=opus"];for(let t of e)if(MediaRecorder.isTypeSupported(t))return t;return""}function Li(e){let t=e;switch(t.name){case"NotAllowedError":return m("voice.micDenied");case"NotFoundError":return m("voice.micNotFound");case"NotReadableError":case"AbortError":return m("voice.micBusy");default:return t instanceof TypeError||!navigator.mediaDevices?m("voice.httpsRequired"):m("voice.micDenied")}}async function Mi(){if(c.isRecording)return;if(typeof MediaRecorder>"u"||!navigator.mediaDevices?.getUserMedia){x(m("voice.unsupported"),"","error");return}try{Ve=await navigator.mediaDevices.getUserMedia({audio:!0})}catch(n){x(Li(n),"","error");return}let e=xi(),t=e?{mimeType:e}:{};I=new MediaRecorder(Ve,t),Ee=[],I.ondataavailable=n=>{n.data.size>0&&Ee.push(n.data)},I.onerror=()=>{Eo(),x(m("voice.interrupted"),"","error")},I.onstop=async()=>{if(an){Ee=[],bo(),an=!1;return}let n=I?.mimeType||e||"audio/webm",o=n.includes("mp4")?".m4a":n.includes("ogg")?".ogg":".webm",i=new Blob(Ee,{type:n});if(Ee=[],bo(),i.size>20*1024*1024){x(m("voice.tooLarge"),"","error");return}if(i.size<1e3){x(m("voice.tooShort"),"","error");return}await Xn(i,o,n)},I.start(),c.isRecording=!0,ho=Date.now(),cn(!0),Si()}function Eo(){!c.isRecording||!I||(I.state==="recording"&&I.stop(),c.isRecording=!1,xo(),cn(!1))}function sn(){!c.isRecording||!I||(an=!0,I.state==="recording"&&I.stop(),c.isRecording=!1,xo(),cn(!1))}function ln(){c.isRecording?Eo():Mi()}function bo(){Ve?.getTracks().forEach(e=>e.stop()),Ve=null}function Si(){let e=document.getElementById("voiceTimer");e&&(e.style.display="inline",We=setInterval(()=>{let t=Math.floor((Date.now()-ho)/1e3),n=String(Math.floor(t/60)).padStart(2,"0"),o=String(t%60).padStart(2,"0");e.textContent=`${n}:${o}`},500))}function xo(){We&&(clearInterval(We),We=null);let e=document.getElementById("voiceTimer");e&&(e.style.display="none",e.textContent="00:00")}function cn(e){let t=document.getElementById("btnVoice"),n=document.getElementById("btnVoiceCancel");t&&(t.classList.toggle("recording",e),t.textContent=e?"\u23F9":"\u{1F3A4}",t.title=e?m("voice.stop"):m("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)});document.getElementById("btnSend")?.addEventListener("click",ze);var dn=document.getElementById("chatInput");dn?.addEventListener("keydown",e=>{mt(e)||Zn(e)});var Ge=0;dn?.addEventListener("input",e=>{e.isComposing||(Ge&&cancelAnimationFrame(Ge),Ge=requestAnimationFrame(()=>{Be(e.target?.value||""),Ge=0}))});dn?.addEventListener("cmd-execute",()=>{ze()});document.getElementById("cmdDropdown")?.addEventListener("click",ut);document.addEventListener("click",pt);document.getElementById("filePreviewClear")?.addEventListener("click",ye);document.getElementById("filePreviewList")?.addEventListener("click",e=>{let t=e.target?.closest("[data-file-idx]");t&&Vn(+(t.dataset.fileIdx||"0"))});document.querySelector(".btn-attach")?.addEventListener("click",()=>{document.getElementById("fileInput")?.click()});document.getElementById("btnVoice")?.addEventListener("click",()=>ln());document.getElementById("btnVoiceCancel")?.addEventListener("click",()=>sn());document.getElementById("memorySidebarBtn")?.addEventListener("click",oe);document.getElementById("btnClearChat")?.addEventListener("click",Gn);document.getElementById("hbSidebarBtn")?.addEventListener("click",to);document.getElementById("langToggle")?.addEventListener("click",async()=>{let e=ge()==="ko"?"en":"ko";await An(e);let t=document.getElementById("langToggle");t&&(t.textContent=`\u{1F310} ${m("lang."+e)}`),c.ws&&c.ws.close()});document.querySelector(".tab-bar")?.addEventListener("click",e=>{let t=e.target?.closest(".tab-btn");if(!t)return;let o=[...t.parentElement?.children||[]].filter(r=>r.classList.contains("tab-btn")).indexOf(t),i=["agents","skills","settings"];i[o]&&jt(i[o],t)});document.querySelector(".sidebar-save-bar .btn-save")?.addEventListener("click",Nt);document.getElementById("selCli")?.addEventListener("change",()=>$e());document.getElementById("selModel")?.addEventListener("change",()=>Q());document.getElementById("selEffort")?.addEventListener("change",()=>Q());document.querySelector('[data-action="addEmployee"]')?.addEventListener("click",Qe);document.getElementById("employeesList")?.addEventListener("click",e=>{let t=e.target?.closest("[data-emp-delete]");if(t){Xe(t.dataset.empDelete||"");return}});document.getElementById("employeesList")?.addEventListener("change",e=>{let t=e.target,n=t.closest("[data-emp-name]");if(n){N(n.dataset.empName||"",{name:t.value});return}let o=t.closest("[data-emp-cli]");if(o){et(o.dataset.empCli||"",t.value);return}let i=t.closest("[data-emp-model]");if(i){if(t.value==="__custom__"){let l=prompt(m("model.promptInput"));if(l?.trim()){let d=document.createElement("option");d.value=l.trim(),d.textContent=l.trim();let s=t.querySelector('option[value="__custom__"]');s&&t.insertBefore(d,s),t.value=l.trim(),N(i.dataset.empModel||"",{model:l.trim()})}else t.value="default"}else N(i.dataset.empModel||"",{model:t.value});return}let r=t.closest("[data-emp-role]");if(r){tt(r.dataset.empRole||"",t.value);return}let a=t.closest("[data-emp-custom]");if(a){N(a.dataset.empCustom||"",{role:t.value});return}});document.getElementById("skillsList")?.addEventListener("click",e=>{let t=e.target?.closest("[data-skill-id]");t&&it(t.dataset.skillId||"",t.dataset.skillEnabled==="true")});document.querySelector("#tabSkills")?.addEventListener("click",e=>{let t=e.target?.closest(".skill-filter");if(t){let n=t.dataset.filter||"all";rt(n,t)}});document.querySelector('[data-action="openPrompt"]')?.addEventListener("click",kt);document.getElementById("tgOff")?.addEventListener("click",()=>Re(!1));document.getElementById("tgOn")?.addEventListener("click",()=>Re(!0));document.getElementById("tgForwardOff")?.addEventListener("click",()=>Pe(!1));document.getElementById("tgForwardOn")?.addEventListener("click",()=>Pe(!0));document.getElementById("tgToken")?.addEventListener("change",Ae);document.getElementById("tgChatIds")?.addEventListener("change",Ae);document.getElementById("fallbackOrderList")?.addEventListener("change",Tt);function Lo(e){let t=document.getElementById("codexFastOn"),n=document.getElementById("codexFastOff");t&&n&&(t.classList.toggle("active",e),n.classList.toggle("active",!e)),D()}document.getElementById("codexFastOn")?.addEventListener("click",()=>Lo(!0));document.getElementById("codexFastOff")?.addEventListener("click",()=>Lo(!1));function Mo(e){let t=document.getElementById("codexCtxOn"),n=document.getElementById("codexCtxOff"),o=document.getElementById("codexCtxValues");t&&n&&(t.classList.toggle("active",e),n.classList.toggle("active",!e)),o&&(o.style.display=e?"":"none"),D()}document.getElementById("codexCtxOn")?.addEventListener("click",()=>Mo(!0));document.getElementById("codexCtxOff")?.addEventListener("click",()=>Mo(!1));document.getElementById("codexCtxWindow")?.addEventListener("change",D);document.getElementById("codexCtxCompact")?.addEventListener("change",D);function Ti(){for(let e of j()){let t=e.charAt(0).toUpperCase()+e.slice(1),n=document.getElementById("model"+t);n&&n.addEventListener("change",function(){Mt(e,this)});let o=document.getElementById("customModel"+t);o&&o.addEventListener("change",function(){St(e,this)});let i=document.getElementById("effort"+t);i&&i.addEventListener("change",D)}}document.querySelector('[data-action="syncMcp"]')?.addEventListener("click",xt);document.querySelector('[data-action="installMcp"]')?.addEventListener("click",Lt);document.querySelector('[data-action="refreshCli"]')?.addEventListener("click",()=>de(!0));document.getElementById("cliStatusInterval")?.addEventListener("change",function(){localStorage.setItem("cliStatusInterval",this.value)});document.getElementById("promptModal")?.addEventListener("click",e=>X(e));document.querySelector("#promptModal .modal-box")?.addEventListener("click",e=>e.stopPropagation());document.querySelector('[data-action="closePrompt"]')?.addEventListener("click",()=>X());document.querySelector('[data-action="cancelPrompt"]')?.addEventListener("click",()=>X());document.querySelector('[data-action="savePrompt"]')?.addEventListener("click",wt);document.addEventListener("keydown",e=>{e.key==="Escape"&&!c.isRecording&&X()});document.querySelector('[data-action="openTemplates"]')?.addEventListener("click",Ct);document.querySelector('[data-action="saveTemplate"]')?.addEventListener("click",Ht);document.querySelector('[data-action="closeTemplate"]')?.addEventListener("click",()=>Oe());document.getElementById("templateModal")?.addEventListener("click",e=>Oe(e));document.querySelector("#templateModal .modal-box")?.addEventListener("click",e=>e.stopPropagation());document.getElementById("templateBack")?.addEventListener("click",At);document.getElementById("templateDevToggle")?.addEventListener("click",Bt);document.getElementById("heartbeatModal")?.addEventListener("click",e=>Gt(e));document.querySelector("#heartbeatModal .modal-box")?.addEventListener("click",e=>e.stopPropagation());document.querySelector('[data-action="closeHeartbeat"]')?.addEventListener("click",()=>Gt());document.querySelector('[data-action="addHeartbeat"]')?.addEventListener("click",no);document.getElementById("hbJobsList")?.addEventListener("click",e=>{let t=e.target?.closest("[data-hb-toggle]");if(t){io(+(t.dataset.hbToggle||"0"));return}let n=e.target?.closest("[data-hb-remove]");if(n){oo(+(n.dataset.hbRemove||"0"));return}});document.getElementById("hbJobsList")?.addEventListener("change",e=>{let t=e.target,n=t.closest("[data-hb-name]");if(n){c.heartbeatJobs[+(n.dataset.hbName||"0")].name=t.value,O();return}let o=t.closest("[data-hb-kind]");if(o){let d=+(o.dataset.hbKind||"0"),s=c.heartbeatJobs[d]?.schedule,u=typeof s?.timeZone=="string"?s.timeZone:void 0;c.heartbeatJobs[d].schedule=t.value==="cron"?{kind:"cron",cron:typeof s?.cron=="string"&&s.cron.trim()?s.cron:"0 9 * * *",...u?{timeZone:u}:{}}:{kind:"every",minutes:typeof s?.minutes=="number"&&s.minutes>0?Math.floor(s.minutes):5,...u?{timeZone:u}:{}},H(),O();return}let i=t.closest("[data-hb-minutes]");if(i){let d=+(i.dataset.hbMinutes||"0"),s=c.heartbeatJobs[d]?.schedule,u=Math.max(1,Math.floor(Number(t.value)||5)),g=typeof s?.timeZone=="string"?s.timeZone:void 0;c.heartbeatJobs[d].schedule={kind:"every",minutes:u,...g?{timeZone:g}:{}},H(),O();return}let r=t.closest("[data-hb-cron]");if(r){let d=+(r.dataset.hbCron||"0"),s=c.heartbeatJobs[d]?.schedule,u=typeof s?.timeZone=="string"?s.timeZone:void 0,g=t.value.trim().replace(/\s+/g," ");c.heartbeatJobs[d].schedule={kind:"cron",cron:g,...u?{timeZone:u}:{}},H(),O();return}let a=t.closest("[data-hb-timezone]");if(a){let d=+(a.dataset.hbTimezone||"0"),s=c.heartbeatJobs[d]?.schedule;s?.kind==="cron"?c.heartbeatJobs[d].schedule={kind:"cron",cron:typeof s.cron=="string"&&s.cron.trim()?s.cron:"0 9 * * *",...t.value.trim()?{timeZone:t.value.trim()}:{}}:c.heartbeatJobs[d].schedule={kind:"every",minutes:typeof s?.minutes=="number"&&s.minutes>0?Math.floor(s.minutes):5,...t.value.trim()?{timeZone:t.value.trim()}:{}},H(),O();return}let l=t.closest("[data-hb-prompt]");if(l){c.heartbeatJobs[+(l.dataset.hbPrompt||"0")].prompt=t.value,O();return}});document.getElementById("memoryModal")?.addEventListener("click",e=>Xt(e));document.querySelector("#memoryModal .modal-box")?.addEventListener("click",e=>e.stopPropagation());document.querySelector('[data-action="closeMemory"]')?.addEventListener("click",()=>Xt());document.getElementById("memTabBtnSettings")?.addEventListener("click",()=>Z("settings"));document.getElementById("memTabBtnAdvOps")?.addEventListener("click",()=>Z("status"));document.getElementById("memTabBtnFiles")?.addEventListener("click",()=>Z("files"));document.getElementById("memOn")?.addEventListener("click",()=>en(!0));document.getElementById("memOff")?.addEventListener("click",()=>en(!1));document.getElementById("memFlushEvery")?.addEventListener("change",he);document.getElementById("memCli")?.addEventListener("change",he);document.getElementById("memModel")?.addEventListener("change",he);document.getElementById("memRetention")?.addEventListener("change",he);document.getElementById("advBootstrapBtn")?.addEventListener("click",tn);document.getElementById("advReindexBtn")?.addEventListener("click",lo);document.getElementById("advReimportBtn")?.addEventListener("click",tn);document.getElementById("advOpenCorruptedBtn")?.addEventListener("click",co);document.getElementById("basicMemoryFiles")?.addEventListener("click",e=>{let t=e.target?.closest("[data-mem-delete]");if(t){e.stopPropagation(),mo(t.dataset.memDelete||"");return}let n=e.target?.closest("[data-mem-view]");if(n){uo(n.dataset.memView||"");return}if(e.target?.closest("[data-mem-back]")){oe();return}});async function ki(){await Hn();let e=document.getElementById("langToggle");e&&(e.textContent=`\u{1F310} ${m("lang."+ge())}`),await Le(),Ti(),Ut(),Qn(),Yn(),await dt(),await ht(),de(),zt(),Ye(),ro(),qn(),po(),yo(),qt()}ki().catch(e=>{console.error("[bootstrap]",e)});document.addEventListener("keydown",e=>{if(e.key==="Escape"){if(c.isRecording){e.preventDefault(),sn();return}document.querySelectorAll(".modal-overlay.open").forEach(t=>{t.classList.remove("open")})}(e.ctrlKey||e.metaKey)&&e.shiftKey&&e.code==="Space"&&(e.preventDefault(),ln())});document.getElementById("mobileMenuLeft")?.addEventListener("click",on);document.getElementById("mobileMenuRight")?.addEventListener("click",rn);
151
- //# sourceMappingURL=bundle.js.map