cli-jaw 2.1.1 → 2.1.2

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 (355) hide show
  1. package/README.ja.md +8 -6
  2. package/README.ko.md +8 -6
  3. package/README.md +12 -6
  4. package/README.zh-CN.md +8 -6
  5. package/dist/bin/cli-jaw.js +5 -1
  6. package/dist/bin/cli-jaw.js.map +1 -1
  7. package/dist/bin/commands/browser.js +1 -1
  8. package/dist/bin/commands/browser.js.map +1 -1
  9. package/dist/bin/commands/chat.js +98 -58
  10. package/dist/bin/commands/chat.js.map +1 -1
  11. package/dist/bin/commands/dispatch.js +130 -5
  12. package/dist/bin/commands/dispatch.js.map +1 -1
  13. package/dist/bin/commands/goal.js +18 -6
  14. package/dist/bin/commands/goal.js.map +1 -1
  15. package/dist/bin/commands/orchestrate.js.map +1 -1
  16. package/dist/bin/commands/tui/fullscreen-mode.js +237 -0
  17. package/dist/bin/commands/tui/fullscreen-mode.js.map +1 -0
  18. package/dist/bin/commands/tui/input-handler.js +139 -52
  19. package/dist/bin/commands/tui/input-handler.js.map +1 -1
  20. package/dist/bin/commands/tui/overlays.js +177 -70
  21. package/dist/bin/commands/tui/overlays.js.map +1 -1
  22. package/dist/bin/commands/tui/renderer.js +70 -20
  23. package/dist/bin/commands/tui/renderer.js.map +1 -1
  24. package/dist/bin/commands/tui/simple-mode.js +1 -1
  25. package/dist/bin/commands/tui/simple-mode.js.map +1 -1
  26. package/dist/bin/commands/tui/tui-io.js +8 -0
  27. package/dist/bin/commands/tui/tui-io.js.map +1 -0
  28. package/dist/bin/commands/tui/types.js +9 -0
  29. package/dist/bin/commands/tui/types.js.map +1 -1
  30. package/dist/bin/commands/tui/ws-handler.js +115 -23
  31. package/dist/bin/commands/tui/ws-handler.js.map +1 -1
  32. package/dist/bin/commands/worker.js +159 -0
  33. package/dist/bin/commands/worker.js.map +1 -0
  34. package/dist/bin/postinstall.js +0 -76
  35. package/dist/bin/postinstall.js.map +1 -1
  36. package/dist/lib/mcp/format-converters.js +21 -2
  37. package/dist/lib/mcp/format-converters.js.map +1 -1
  38. package/dist/lib/mcp/mcp-registry.js +75 -0
  39. package/dist/lib/mcp/mcp-registry.js.map +1 -0
  40. package/dist/lib/stt.js +1 -1
  41. package/dist/lib/stt.js.map +1 -1
  42. package/dist/scripts/fresh-install-smoke.js +1 -1
  43. package/dist/scripts/fresh-install-smoke.js.map +1 -1
  44. package/dist/server.js +27 -6
  45. package/dist/server.js.map +1 -1
  46. package/dist/src/agent/args.js +33 -1
  47. package/dist/src/agent/args.js.map +1 -1
  48. package/dist/src/agent/claude-e-runtime.js +1 -1
  49. package/dist/src/agent/claude-e-runtime.js.map +1 -1
  50. package/dist/src/agent/codex-app-client.js +1 -1
  51. package/dist/src/agent/error-classifier.js +6 -1
  52. package/dist/src/agent/error-classifier.js.map +1 -1
  53. package/dist/src/agent/events/claude.js +1 -0
  54. package/dist/src/agent/events/claude.js.map +1 -1
  55. package/dist/src/agent/events/codex.js +0 -44
  56. package/dist/src/agent/events/codex.js.map +1 -1
  57. package/dist/src/agent/events/helpers.js +52 -5
  58. package/dist/src/agent/events/helpers.js.map +1 -1
  59. package/dist/src/agent/events/opencode.js +6 -2
  60. package/dist/src/agent/events/opencode.js.map +1 -1
  61. package/dist/src/agent/events/summary.js +3 -2
  62. package/dist/src/agent/events/summary.js.map +1 -1
  63. package/dist/src/agent/events/tool-labels.js +8 -5
  64. package/dist/src/agent/events/tool-labels.js.map +1 -1
  65. package/dist/src/agent/kiro-auth.js +213 -0
  66. package/dist/src/agent/kiro-auth.js.map +1 -0
  67. package/dist/src/agent/kiro-models.js +79 -0
  68. package/dist/src/agent/kiro-models.js.map +1 -0
  69. package/dist/src/agent/kiro-runtime.js +306 -0
  70. package/dist/src/agent/kiro-runtime.js.map +1 -0
  71. package/dist/src/agent/lifecycle-handler.js +190 -12
  72. package/dist/src/agent/lifecycle-handler.js.map +1 -1
  73. package/dist/src/agent/memory-flush-controller.js +1 -3
  74. package/dist/src/agent/memory-flush-controller.js.map +1 -1
  75. package/dist/src/agent/resume-classifier.js +18 -1
  76. package/dist/src/agent/resume-classifier.js.map +1 -1
  77. package/dist/src/agent/session-persistence.js +1 -1
  78. package/dist/src/agent/session-persistence.js.map +1 -1
  79. package/dist/src/agent/smoke-detector.js +3 -0
  80. package/dist/src/agent/smoke-detector.js.map +1 -1
  81. package/dist/src/agent/spawn/queue.js +10 -4
  82. package/dist/src/agent/spawn/queue.js.map +1 -1
  83. package/dist/src/agent/spawn/resume.js +6 -1
  84. package/dist/src/agent/spawn/resume.js.map +1 -1
  85. package/dist/src/agent/spawn-env.js +1 -1
  86. package/dist/src/agent/spawn-env.js.map +1 -1
  87. package/dist/src/agent/spawn.js +188 -28
  88. package/dist/src/agent/spawn.js.map +1 -1
  89. package/dist/src/browser/web-ai/grok-live.js +2 -0
  90. package/dist/src/browser/web-ai/grok-live.js.map +1 -1
  91. package/dist/src/cli/claude-models.js +2 -2
  92. package/dist/src/cli/claude-models.js.map +1 -1
  93. package/dist/src/cli/commands.js +3 -2
  94. package/dist/src/cli/commands.js.map +1 -1
  95. package/dist/src/cli/handlers-runtime.js +2 -0
  96. package/dist/src/cli/handlers-runtime.js.map +1 -1
  97. package/dist/src/cli/handlers-workflows.js +9 -4
  98. package/dist/src/cli/handlers-workflows.js.map +1 -1
  99. package/dist/src/cli/handlers.js +47 -7
  100. package/dist/src/cli/handlers.js.map +1 -1
  101. package/dist/src/cli/readiness.js +17 -1
  102. package/dist/src/cli/readiness.js.map +1 -1
  103. package/dist/src/cli/registry-live.js +17 -0
  104. package/dist/src/cli/registry-live.js.map +1 -0
  105. package/dist/src/cli/registry.js +44 -3
  106. package/dist/src/cli/registry.js.map +1 -1
  107. package/dist/src/cli/tui/composer.js +135 -5
  108. package/dist/src/cli/tui/composer.js.map +1 -1
  109. package/dist/src/cli/tui/diffview.js +41 -0
  110. package/dist/src/cli/tui/diffview.js.map +1 -0
  111. package/dist/src/cli/tui/editor.js +45 -0
  112. package/dist/src/cli/tui/editor.js.map +1 -0
  113. package/dist/src/cli/tui/file-mention.js +78 -0
  114. package/dist/src/cli/tui/file-mention.js.map +1 -0
  115. package/dist/src/cli/tui/highlight.js +82 -0
  116. package/dist/src/cli/tui/highlight.js.map +1 -0
  117. package/dist/src/cli/tui/keymap.js +21 -0
  118. package/dist/src/cli/tui/keymap.js.map +1 -1
  119. package/dist/src/cli/tui/markdown.js +124 -0
  120. package/dist/src/cli/tui/markdown.js.map +1 -0
  121. package/dist/src/cli/tui/mode.js +26 -0
  122. package/dist/src/cli/tui/mode.js.map +1 -0
  123. package/dist/src/cli/tui/overlay.js +121 -98
  124. package/dist/src/cli/tui/overlay.js.map +1 -1
  125. package/dist/src/cli/tui/render/frame.js +72 -0
  126. package/dist/src/cli/tui/render/frame.js.map +1 -0
  127. package/dist/src/cli/tui/render/layout.js +22 -0
  128. package/dist/src/cli/tui/render/layout.js.map +1 -0
  129. package/dist/src/cli/tui/render/mouse.js +25 -0
  130. package/dist/src/cli/tui/render/mouse.js.map +1 -0
  131. package/dist/src/cli/tui/render/scheduler.js +37 -0
  132. package/dist/src/cli/tui/render/scheduler.js.map +1 -0
  133. package/dist/src/cli/tui/render/viewport.js +82 -0
  134. package/dist/src/cli/tui/render/viewport.js.map +1 -0
  135. package/dist/src/cli/tui/renderers.js +37 -0
  136. package/dist/src/cli/tui/renderers.js.map +1 -1
  137. package/dist/src/cli/tui/stream.js +48 -0
  138. package/dist/src/cli/tui/stream.js.map +1 -0
  139. package/dist/src/cli/tui/text-buffer.js +143 -0
  140. package/dist/src/cli/tui/text-buffer.js.map +1 -0
  141. package/dist/src/cli/tui/theme.js +128 -0
  142. package/dist/src/cli/tui/theme.js.map +1 -0
  143. package/dist/src/cli/tui/transcript.js +4 -0
  144. package/dist/src/cli/tui/transcript.js.map +1 -1
  145. package/dist/src/command-contract/help-renderer.js +1 -1
  146. package/dist/src/command-contract/help-renderer.js.map +1 -1
  147. package/dist/src/core/cli-detection.js +14 -0
  148. package/dist/src/core/cli-detection.js.map +1 -1
  149. package/dist/src/core/config.js +5 -0
  150. package/dist/src/core/config.js.map +1 -1
  151. package/dist/src/core/db.js +7 -0
  152. package/dist/src/core/db.js.map +1 -1
  153. package/dist/src/core/employees.js +2 -2
  154. package/dist/src/core/employees.js.map +1 -1
  155. package/dist/src/discord/bot.js.map +1 -1
  156. package/dist/src/discord/discord-file.js +1 -1
  157. package/dist/src/discord/discord-file.js.map +1 -1
  158. package/dist/src/discord/send-only-client.js +1 -3
  159. package/dist/src/discord/send-only-client.js.map +1 -1
  160. package/dist/src/goal/heartbeat.js +30 -7
  161. package/dist/src/goal/heartbeat.js.map +1 -1
  162. package/dist/src/goal/store.js +6 -2
  163. package/dist/src/goal/store.js.map +1 -1
  164. package/dist/src/ide/diff.js +37 -0
  165. package/dist/src/ide/diff.js.map +1 -1
  166. package/dist/src/manager/launchd-service.js +1 -1
  167. package/dist/src/manager/launchd-service.js.map +1 -1
  168. package/dist/src/manager/lifecycle-helpers.js +14 -0
  169. package/dist/src/manager/lifecycle-helpers.js.map +1 -1
  170. package/dist/src/manager/lifecycle.js +49 -4
  171. package/dist/src/manager/lifecycle.js.map +1 -1
  172. package/dist/src/manager/notes/routes.js +0 -31
  173. package/dist/src/manager/notes/routes.js.map +1 -1
  174. package/dist/src/manager/notes/ws.js.map +1 -1
  175. package/dist/src/manager/registry.js.map +1 -1
  176. package/dist/src/manager/routes/dashboard-memory.js.map +1 -1
  177. package/dist/src/manager/scan.js +36 -1
  178. package/dist/src/manager/scan.js.map +1 -1
  179. package/dist/src/manager/server.js +21 -2
  180. package/dist/src/manager/server.js.map +1 -1
  181. package/dist/src/manager/systemd-service.js +1 -1
  182. package/dist/src/manager/systemd-service.js.map +1 -1
  183. package/dist/src/memory/keyword-expand.js +0 -187
  184. package/dist/src/memory/keyword-expand.js.map +1 -1
  185. package/dist/src/memory/runtime.js +2 -2
  186. package/dist/src/memory/runtime.js.map +1 -1
  187. package/dist/src/memory/shared.js.map +1 -1
  188. package/dist/src/orchestrator/collect.js +3 -2
  189. package/dist/src/orchestrator/collect.js.map +1 -1
  190. package/dist/src/orchestrator/distribute.js +7 -1
  191. package/dist/src/orchestrator/distribute.js.map +1 -1
  192. package/dist/src/orchestrator/friction.js +59 -0
  193. package/dist/src/orchestrator/friction.js.map +1 -0
  194. package/dist/src/orchestrator/pipeline.js +88 -45
  195. package/dist/src/orchestrator/pipeline.js.map +1 -1
  196. package/dist/src/orchestrator/sanitize.js +19 -0
  197. package/dist/src/orchestrator/sanitize.js.map +1 -0
  198. package/dist/src/orchestrator/seed.js +50 -0
  199. package/dist/src/orchestrator/seed.js.map +1 -0
  200. package/dist/src/orchestrator/state-machine.js +206 -74
  201. package/dist/src/orchestrator/state-machine.js.map +1 -1
  202. package/dist/src/orchestrator/worker-monitor.js +1 -1
  203. package/dist/src/orchestrator/worker-monitor.js.map +1 -1
  204. package/dist/src/orchestrator/worker-progress.js +29 -0
  205. package/dist/src/orchestrator/worker-progress.js.map +1 -0
  206. package/dist/src/orchestrator/worker-registry.js +63 -2
  207. package/dist/src/orchestrator/worker-registry.js.map +1 -1
  208. package/dist/src/prompt/builder.js +19 -29
  209. package/dist/src/prompt/builder.js.map +1 -1
  210. package/dist/src/prompt/templates/a1-system.md +40 -5
  211. package/dist/src/prompt/templates/control-system.md +2 -2
  212. package/dist/src/prompt/templates/employee.md +4 -1
  213. package/dist/src/prompt/templates/orchestration.md +23 -8
  214. package/dist/src/routes/employees.js +4 -4
  215. package/dist/src/routes/employees.js.map +1 -1
  216. package/dist/src/routes/goal.js +11 -3
  217. package/dist/src/routes/goal.js.map +1 -1
  218. package/dist/src/routes/heartbeat.js +1 -1
  219. package/dist/src/routes/heartbeat.js.map +1 -1
  220. package/dist/src/routes/i18n.js +1 -1
  221. package/dist/src/routes/i18n.js.map +1 -1
  222. package/dist/src/routes/jaw-memory.js +1 -1
  223. package/dist/src/routes/jaw-memory.js.map +1 -1
  224. package/dist/src/routes/memory.js.map +1 -1
  225. package/dist/src/routes/messaging.js.map +1 -1
  226. package/dist/src/routes/orchestrate.js +265 -116
  227. package/dist/src/routes/orchestrate.js.map +1 -1
  228. package/dist/src/routes/quota-agy-reverse.js +0 -5
  229. package/dist/src/routes/quota-agy-reverse.js.map +1 -1
  230. package/dist/src/routes/quota-kiro-reverse.js +187 -0
  231. package/dist/src/routes/quota-kiro-reverse.js.map +1 -0
  232. package/dist/src/routes/settings.js +31 -2
  233. package/dist/src/routes/settings.js.map +1 -1
  234. package/dist/src/routes/skills.js.map +1 -1
  235. package/dist/src/security/security-audit-log.js.map +1 -1
  236. package/dist/src/shared/shell-command-display.js +51 -0
  237. package/dist/src/shared/shell-command-display.js.map +1 -0
  238. package/dist/src/telegram/bot.js.map +1 -1
  239. package/dist/src/trace/store.js +32 -0
  240. package/dist/src/trace/store.js.map +1 -1
  241. package/dist/src/types/cli-engine.js +1 -0
  242. package/dist/src/types/cli-engine.js.map +1 -1
  243. package/dist/src/workflows/employee-boundary.js +7 -7
  244. package/dist/src/workflows/employee-boundary.js.map +1 -1
  245. package/dist/src/workflows/handoff.js +16 -16
  246. package/dist/src/workflows/handoff.js.map +1 -1
  247. package/dist/src/workflows/scope-sandbox.js +46 -0
  248. package/dist/src/workflows/scope-sandbox.js.map +1 -0
  249. package/package.json +1 -1
  250. package/public/assets/providers/kiro-color.svg +15 -0
  251. package/public/assets/providers/kiro.svg +14 -0
  252. package/public/css/modals.css +79 -0
  253. package/public/css/sidebar.css +85 -0
  254. package/public/css/variables.css +2 -2
  255. package/public/dist/assets/{Agent-CIUGaUVn.js → Agent-DkH7eoHd.js} +1 -1
  256. package/public/dist/assets/{DocPanel-C1pGgE-S.js → DocPanel-BU16GUlB.js} +1 -1
  257. package/public/dist/assets/DocPanel-gU-WkgyA.css +1 -0
  258. package/public/dist/assets/Employees-F0ssNuO-.js +1 -0
  259. package/public/dist/assets/Heartbeat-C3JS6gkF.js +1 -0
  260. package/public/dist/assets/Mcp-_Yq4N3Sk.js +4 -0
  261. package/public/dist/assets/{Memory-BgN8djV4.js → Memory-C-EQubN2.js} +1 -1
  262. package/public/dist/assets/{ModelProvider-DHQ1Zvw0.js → ModelProvider-BD2KrypI.js} +1 -1
  263. package/public/dist/assets/agent-meta-B1098B_a.js +1 -0
  264. package/public/dist/assets/app-ByHYOMZE.js +48 -0
  265. package/public/dist/assets/app-CYdhP6Vh.css +1 -0
  266. package/public/dist/assets/constants-s2UJodER.js +1 -0
  267. package/public/dist/assets/{employees-DiNLzEXS.js → employees-_A-p_bZg.js} +7 -7
  268. package/public/dist/assets/idb-cache-0LNMskFB.js +1 -0
  269. package/public/dist/assets/idb-cache-5H89a4l8.js +1 -0
  270. package/public/dist/assets/{manager-DyrwJLZr.css → manager-B2qEQRxN.css} +1 -1
  271. package/public/dist/assets/manager-CR9BA-wO.js +12 -0
  272. package/public/dist/assets/memory-D1RKYvyu.js +1 -0
  273. package/public/dist/assets/{memory-B_nn0A4v.js → memory-D9AUn8fG.js} +9 -9
  274. package/public/dist/assets/{provider-icons-XEfJPGTe.js → provider-icons-CVVK5xUP.js} +35 -6
  275. package/public/dist/assets/{render-CgDEBoCX.js → render-DFBujF8n.js} +4 -4
  276. package/public/dist/assets/settings-B4ZkeaU-.js +1 -0
  277. package/public/dist/assets/settings-D9jTceN0.js +151 -0
  278. package/public/dist/assets/sidebar-DPPRNiTc.js +48 -0
  279. package/public/dist/assets/skills-8nHJkv-r.js +1 -0
  280. package/public/dist/assets/{skills-COa4iSwL.js → skills-BDVLIrVT.js} +6 -6
  281. package/public/dist/assets/{slash-commands-C_ePvrPi.js → slash-commands-C5da3q1p.js} +1 -1
  282. package/public/dist/assets/slash-commands-RJWO8wJZ.js +1 -0
  283. package/public/dist/assets/{trace-drawer-CY4z_Ie8.js → trace-drawer-5kqBzFMk.js} +1 -1
  284. package/public/dist/assets/ui-Crnp79bG.js +142 -0
  285. package/public/dist/assets/ui-HtSKByR3.js +1 -0
  286. package/public/dist/index.html +113 -86
  287. package/public/dist/manager/index.html +2 -2
  288. package/public/index.html +111 -84
  289. package/public/js/constants.ts +30 -7
  290. package/public/js/features/chat-search.ts +5 -1
  291. package/public/js/features/employees.ts +7 -2
  292. package/public/js/features/idb-cache.ts +4 -0
  293. package/public/js/features/message-history.ts +55 -7
  294. package/public/js/features/pending-queue.ts +8 -2
  295. package/public/js/features/process-block.ts +32 -17
  296. package/public/js/features/process-log-adapter.ts +11 -2
  297. package/public/js/features/settings-cli-status-render.ts +163 -0
  298. package/public/js/features/settings-cli-status.ts +130 -185
  299. package/public/js/features/settings-core.ts +5 -1
  300. package/public/js/features/settings-mcp.ts +513 -7
  301. package/public/js/features/settings.ts +1 -1
  302. package/public/js/features/tool-ui.ts +18 -4
  303. package/public/js/features/transport-status-row.ts +3 -0
  304. package/public/js/main.ts +3 -0
  305. package/public/js/preview-parent-origin.ts +14 -0
  306. package/public/js/provider-icons.ts +6 -1
  307. package/public/js/render/file-links.ts +10 -2
  308. package/public/js/ui.ts +5 -2
  309. package/public/js/virtual-scroll.ts +19 -0
  310. package/public/js/ws.ts +133 -8
  311. package/public/locales/en.json +8 -2
  312. package/public/locales/ja.json +8 -2
  313. package/public/locales/ko.json +8 -2
  314. package/public/locales/zh.json +8 -2
  315. package/public/manager/src/App.tsx +13 -70
  316. package/public/manager/src/InstancePreview.tsx +36 -11
  317. package/public/manager/src/SidebarRailRouter.tsx +1 -1
  318. package/public/manager/src/doc-panel/DocPanel.tsx +14 -1
  319. package/public/manager/src/doc-panel/doc-panel.css +16 -0
  320. package/public/manager/src/hooks/useInstanceMessageEvents.ts +4 -15
  321. package/public/manager/src/manager-components.css +1 -1
  322. package/public/manager/src/manager-polish.css +1 -1
  323. package/public/manager/src/manager-shortcut-runner.ts +107 -0
  324. package/public/manager/src/manager-shortcuts.ts +15 -0
  325. package/public/manager/src/panels/desktop-bridge.ts +2 -0
  326. package/public/manager/src/settings/SettingsSidebar.tsx +1 -1
  327. package/public/manager/src/settings/components/sidebar-filter.ts +2 -0
  328. package/public/manager/src/settings/pages/Mcp.tsx +311 -43
  329. package/public/manager/src/settings/pages/components/McpServerCard.tsx +89 -55
  330. package/public/manager/src/settings/pages/components/agent/agent-meta.ts +29 -6
  331. package/public/manager/src/settings/pages/components/employees-helpers.ts +1 -0
  332. package/public/manager/src/settings/pages/components/heartbeat-helpers.ts +1 -0
  333. package/public/manager/src/settings/pages/mcp-helpers.ts +54 -12
  334. package/public/manager/src/settings/types.ts +1 -0
  335. package/public/manager/src/types.ts +2 -1
  336. package/scripts/fresh-install-smoke.ts +1 -1
  337. package/public/dist/assets/DocPanel-CL1scIfq.css +0 -1
  338. package/public/dist/assets/Employees-BL9MAzzx.js +0 -1
  339. package/public/dist/assets/Heartbeat-D64JCg4t.js +0 -1
  340. package/public/dist/assets/Mcp-wYwJA_61.js +0 -3
  341. package/public/dist/assets/agent-meta-BhEbjy4P.js +0 -1
  342. package/public/dist/assets/app-2Rz848bQ.js +0 -48
  343. package/public/dist/assets/app-BW-Xz2p6.css +0 -1
  344. package/public/dist/assets/constants-ahKI_aEG.js +0 -1
  345. package/public/dist/assets/idb-cache-BnZfG5FD.js +0 -1
  346. package/public/dist/assets/idb-cache-CZ3JdK8r.js +0 -1
  347. package/public/dist/assets/manager-CfyZloIP.js +0 -12
  348. package/public/dist/assets/memory-CCjNFWmO.js +0 -1
  349. package/public/dist/assets/settings-CY_6tGuS.js +0 -1
  350. package/public/dist/assets/settings-DWW4GzNc.js +0 -66
  351. package/public/dist/assets/sidebar-DQKE5IA1.js +0 -23
  352. package/public/dist/assets/skills-DYTlqoke.js +0 -1
  353. package/public/dist/assets/slash-commands-D7CU5oso.js +0 -1
  354. package/public/dist/assets/ui-Car1OUvV.js +0 -1
  355. package/public/dist/assets/ui-DK_9ndj0.js +0 -140
@@ -0,0 +1 @@
1
+ import{a as e}from"./memory-D9AUn8fG.js";export{e as refreshMemorySidebar};
@@ -1,20 +1,20 @@
1
- import{i as e,n as t}from"./api-tVoG39dL.js";import{S as n,d as r,g as i,u as a}from"./render-CgDEBoCX.js";import{r as o}from"./locale-DT1WRaeJ.js";function s(e){return document.getElementById(e)}function c(e,t){let n=s(e);n&&(n.textContent=t==null?``:String(t))}function l(e,t){let n=s(e);n&&(n.value=t==null?``:String(t))}function u(e,t){let a=s(`memorySidebarBtn`);if(!a)return;if(e?.enabled&&e?.hasSoul===!1){a.innerHTML=`${r.brain} Memory · <span style="color:var(--accent)">${o(`updateNeeded`)}</span>`;return}if(e?.enabled&&e?.hasSoul&&!e?.soulSynthesized){a.innerHTML=`${r.brain} Memory · <span style="color:var(--accent)">${n(`memory.banner.soulOptimize`)}</span>`;return}let c=e?.indexState===`ready`?`Ready`:e?.state===`not_initialized`?`Indexing`:e?.state||`(${t})`;a.innerHTML=`${r.brain} Memory · ${i(c)}`}function d(e){let t=s(`advStatusBanner`);if(t){if(!e?.enabled){t.style.display=`none`,t.textContent=``;return}if(t.style.display=``,e.hasSoul===!1){t.innerHTML=`<span>Memory structure upgrade available.</span>
1
+ import{i as e,n as t}from"./api-tVoG39dL.js";import{C as n,_ as r,d as i,f as a}from"./render-DFBujF8n.js";import{r as o}from"./locale-DT1WRaeJ.js";function s(e){return document.getElementById(e)}function c(e,t){let n=s(e);n&&(n.textContent=t==null?``:String(t))}function l(e,t){let n=s(e);n&&(n.value=t==null?``:String(t))}function u(e,t){let i=s(`memorySidebarBtn`);if(!i)return;if(e?.enabled&&e?.hasSoul===!1){i.innerHTML=`${a.brain} Memory · <span style="color:var(--accent)">${o(`updateNeeded`)}</span>`;return}if(e?.enabled&&e?.hasSoul&&!e?.soulSynthesized){i.innerHTML=`${a.brain} Memory · <span style="color:var(--accent)">${n(`memory.banner.soulOptimize`)}</span>`;return}let c=e?.indexState===`ready`?`Ready`:e?.state===`not_initialized`?`Indexing`:e?.state||`(${t})`;i.innerHTML=`${a.brain} Memory · ${r(c)}`}function d(e){let t=s(`advStatusBanner`);if(t){if(!e?.enabled){t.style.display=`none`,t.textContent=``;return}if(t.style.display=``,e.hasSoul===!1){t.innerHTML=`<span>Memory structure upgrade available.</span>
2
2
  <button id="advUpgradeSoulBtn" class="btn-sm" style="margin-left:8px">${o(`memoryUpdateBtn`)}</button>`;return}if(e.hasSoul&&!e.soulSynthesized){t.innerHTML=`<span>Soul identity can be personalized with your active CLI.</span>
3
3
  <button id="advSynthesizeSoulBtn" class="btn-sm" style="margin-left:8px">${n(`memory.banner.soulOptimize`)}</button>`;return}if(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 f(e,t=!0){let n=s(`advStatusBanner`);n&&(n.style.display=t?``:`none`,n.textContent=e)}function p(e){for(let t of[`advBootstrapBtn`,`advReindexBtn`,`advReimportBtn`,`advOpenCorruptedBtn`]){let n=s(t);n&&(n.disabled=e)}}function m(e){s(`memOn`)?.classList.toggle(`active`,e.enabled),s(`memOff`)?.classList.toggle(`active`,!e.enabled),l(`memFlushEvery`,e.flushEvery),l(`memRetention`,e.retentionDays),l(`memFlushLang`,e.flushLanguage||`en`),c(`memPath`,e.path),c(`memCounter`,e.counter),c(`memThreshold`,e.flushEvery)}function h(e){let t=s(`memTabBtnSettings`),n=s(`memTabSettings`);!t||!n||(t.style.display=``,n.style.display||(n.style.display=``))}function g(e){c(`advIndexState`,e?.indexState||e?.state||`-`),c(`advStorageRoot`,e?.storageRoot||`-`),c(`advIndexedFiles`,e?.indexedFiles||0),c(`advIndexedChunks`,e?.indexedChunks||0),c(`advLastIndexedAt`,e?.lastIndexedAt||`-`),c(`advImportStatus`,e?.importStatus||`-`),c(`advCorruptedCount`,e?.corruptedCount||0),c(`advLastExpansion`,(e?.lastExpansion||[]).join(`, `)||`-`),c(`advLastError`,e?.lastError||`-`);let t=e?.importedCounts||{};c(`advImportStatus`,`${e?.importStatus||`-`} (core:${t.core||0} md:${t.markdown||0} kv:${t.kv||0} claude:${t.claude||0})`),c(`advProfileFresh`,e?.profileFresh===!1?`⚠ stale`:`✓ fresh`),c(`advLastReflectedAt`,e?.lastReflectedAt||`never`),c(`advFlushRunning`,e?.flushRunning?`running`:`idle`),c(`advMigrationLock`,e?.migrationLocked?`⚠ locked`:`none`);let n=e?.staleWarnings||[];c(`advWarnings`,n.length?n.join(`, `):`none`),c(`advSoulStatus`,e?.hasSoul?`✓ active`:`⚠ not created`)}function _(e){let t=s(`basicMemoryFiles`);if(t){if(!e?.length){t.innerHTML=`<p style="color:var(--text-dim);font-size:12px;text-align:center">No memory files yet</p>`;return}t.innerHTML=e.map(e=>`
4
4
  <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"
5
- data-mem-view="${i(e.name)}">
5
+ data-mem-view="${r(e.name)}">
6
6
  <div>
7
- <span style="font-size:12px;font-family:monospace">${i(e.name)}</span>
7
+ <span style="font-size:12px;font-family:monospace">${r(e.name)}</span>
8
8
  <span style="font-size:10px;color:var(--accent);margin-left:6px">${e.entries} entries</span>
9
9
  </div>
10
- <button data-mem-delete="${i(e.name)}" style="background:none;border:none;color:var(--error);cursor:pointer;font-size:14px">${r.trash}</button>
10
+ <button data-mem-delete="${r(e.name)}" style="background:none;border:none;color:var(--error);cursor:pointer;font-size:14px">${a.trash}</button>
11
11
  </div>
12
12
  `).join(``)}}function v(e,t){let n=s(e);if(n){if(!t?.length){n.innerHTML=`<p style="color:var(--text-dim);font-size:12px;text-align:center">No files</p>`;return}n.innerHTML=t.map(e=>`<div style="padding:6px 8px;border:1px solid var(--border);border-radius:4px;margin-bottom:4px">
13
- <span style="font-size:12px;font-family:monospace">${i(e)}</span>
14
- </div>`).join(``)}}function y(e){v(`advancedMemoryFiles`,[...e?.sections?.profile||[],...e?.sections?.shared||[],...e?.sections?.episodes||[],...e?.sections?.semantic||[],...e?.sections?.procedures||[],...e?.sections?.sessions||[]]),v(`corruptedMemoryFiles`,e?.sections?.corrupted||[]),v(`legacyUnmappedFiles`,e?.sections?.legacyUnmapped||[])}function b(){return{importCore:s(`advImportCore`)?.checked!==!1,importMarkdown:s(`advImportMarkdown`)?.checked!==!1,importKv:s(`advImportKv`)?.checked!==!1,importClaudeSession:s(`advImportClaudeSession`)?.checked!==!1}}async function x(){let[e,n,r]=await Promise.all([t(`/api/memory-files`),t(`/api/memory/status`),t(`/api/memory/files`)]);return{basic:e,status:n,files:r}}async function S(){let{basic:e,status:t,files:n}=await x();e&&(m(e),h(t),d(t),g(t),_(e.files),y(n),u(t,e.files.length),s(`memoryModal`)?.classList.add(`open`),w(`status`))}function C(e){e&&e.target!==e.currentTarget||s(`memoryModal`)?.classList.remove(`open`)}function w(e){let t={settings:`memTabSettings`,status:`memTabAdvOps`,files:`memTabFiles`};for(let n of Object.values(t)){let r=s(n);r&&(r.style.display=n===t[e]?``:`none`)}s(`memTabBtnSettings`)?.classList.toggle(`active`,e===`settings`),s(`memTabBtnAdvOps`)?.classList.toggle(`active`,e===`status`),s(`memTabBtnFiles`)?.classList.toggle(`active`,e===`files`),s(`memTabBtnSettings`)?.setAttribute(`aria-selected`,String(e===`settings`)),s(`memTabBtnAdvOps`)?.setAttribute(`aria-selected`,String(e===`status`)),s(`memTabBtnFiles`)?.setAttribute(`aria-selected`,String(e===`files`))}async function T(t){s(`memOn`)?.classList.toggle(`active`,t),s(`memOff`)?.classList.toggle(`active`,!t),await e(`/api/memory-files/settings`,`PUT`,{enabled:t})}async function E(){let t=s(`memFlushEvery`),n=s(`memRetention`),r=s(`memFlushLang`);await e(`/api/memory-files/settings`,`PUT`,{flushEvery:+(t?.value||10),retentionDays:+(n?.value||30),flushLanguage:r?.value||`en`});let i=s(`memThreshold`);i&&t&&(i.textContent=t.value)}async function D(){p(!0),f(n(`memory.banner.bootstrapRerun`),!0);let t=await e(`/api/memory/bootstrap`,`POST`,b());p(!1),t?.message&&alert(t.message),await S(),w(`status`)}async function O(){p(!0),f(o(`memoryUpdating`),!0);let n=await e(`/api/jaw-memory/soul/activate`,`POST`,{});p(!1),n?.created?f(`✓ Soul identity created.`):f(`✓ Soul already active.`),await S(),w(`status`);let r=await t(`/api/memory/status`);u(r,0),d(r)}async function k(){p(!0),f(n(`memory.banner.soulOptimizing`),!0);let r=await e(`/api/soul/bootstrap`,`POST`,{});if(p(!1),!r?.ok){f(r?.reason===`already_synthesized`?`✓ Soul already optimized.`:r?.reason===`no_active_agent`?`No active CLI agent. Please start an agent first.`:`Soul optimization failed: ${r?.reason||`unknown`}`);return}f(n(`memory.banner.soulPromptSent`)),await S(),w(`status`);let i=await t(`/api/memory/status`);u(i,0),d(i)}async function A(){p(!0),f(n(`memory.banner.reindexing`),!0);let t=await e(`/api/memory/reindex`,`POST`,{});p(!1),t?.message&&alert(t.message),await S(),w(`status`)}function j(){let e=s(`advStorageRoot`)?.textContent||``,t=e?`${e}/corrupted`:`JAW_HOME/memory/structured/corrupted`;a(t),alert(`Corrupted folder path copied/shown:\n${t}`)}async function M(t){confirm(`Delete `+t+`?`)&&(await e(`/api/memory-file?path=`+encodeURIComponent(t),`DELETE`,{}),S())}async function N(e){let n=await t(`/api/memory-file?path=`+encodeURIComponent(e));if(!n)return;let a=s(`basicMemoryFiles`);a&&(a.innerHTML=`
13
+ <span style="font-size:12px;font-family:monospace">${r(e)}</span>
14
+ </div>`).join(``)}}function y(e){v(`advancedMemoryFiles`,[...e?.sections?.profile||[],...e?.sections?.shared||[],...e?.sections?.episodes||[],...e?.sections?.semantic||[],...e?.sections?.procedures||[],...e?.sections?.sessions||[]]),v(`corruptedMemoryFiles`,e?.sections?.corrupted||[]),v(`legacyUnmappedFiles`,e?.sections?.legacyUnmapped||[])}function b(){return{importCore:s(`advImportCore`)?.checked!==!1,importMarkdown:s(`advImportMarkdown`)?.checked!==!1,importKv:s(`advImportKv`)?.checked!==!1,importClaudeSession:s(`advImportClaudeSession`)?.checked!==!1}}async function x(){let[e,n,r]=await Promise.all([t(`/api/memory-files`),t(`/api/memory/status`),t(`/api/memory/files`)]);return{basic:e,status:n,files:r}}async function S(){let{basic:e,status:t,files:n}=await x();e&&(m(e),h(t),d(t),g(t),_(e.files),y(n),u(t,e.files.length),s(`memoryModal`)?.classList.add(`open`),w(`status`))}function C(e){e&&e.target!==e.currentTarget||s(`memoryModal`)?.classList.remove(`open`)}function w(e){let t={settings:`memTabSettings`,status:`memTabAdvOps`,files:`memTabFiles`};for(let n of Object.values(t)){let r=s(n);r&&(r.style.display=n===t[e]?``:`none`)}s(`memTabBtnSettings`)?.classList.toggle(`active`,e===`settings`),s(`memTabBtnAdvOps`)?.classList.toggle(`active`,e===`status`),s(`memTabBtnFiles`)?.classList.toggle(`active`,e===`files`),s(`memTabBtnSettings`)?.setAttribute(`aria-selected`,String(e===`settings`)),s(`memTabBtnAdvOps`)?.setAttribute(`aria-selected`,String(e===`status`)),s(`memTabBtnFiles`)?.setAttribute(`aria-selected`,String(e===`files`))}async function T(t){s(`memOn`)?.classList.toggle(`active`,t),s(`memOff`)?.classList.toggle(`active`,!t),await e(`/api/memory-files/settings`,`PUT`,{enabled:t})}async function E(){let t=s(`memFlushEvery`),n=s(`memRetention`),r=s(`memFlushLang`);await e(`/api/memory-files/settings`,`PUT`,{flushEvery:+(t?.value||10),retentionDays:+(n?.value||30),flushLanguage:r?.value||`en`});let i=s(`memThreshold`);i&&t&&(i.textContent=t.value)}async function D(){p(!0),f(n(`memory.banner.bootstrapRerun`),!0);let t=await e(`/api/memory/bootstrap`,`POST`,b());p(!1),t?.message&&alert(t.message),await S(),w(`status`)}async function O(){p(!0),f(o(`memoryUpdating`),!0);let n=await e(`/api/jaw-memory/soul/activate`,`POST`,{});p(!1),n?.created?f(`✓ Soul identity created.`):f(`✓ Soul already active.`),await S(),w(`status`);let r=await t(`/api/memory/status`);u(r,0),d(r)}async function k(){p(!0),f(n(`memory.banner.soulOptimizing`),!0);let r=await e(`/api/soul/bootstrap`,`POST`,{});if(p(!1),!r?.ok){f(r?.reason===`already_synthesized`?`✓ Soul already optimized.`:r?.reason===`no_active_agent`?`No active CLI agent. Please start an agent first.`:`Soul optimization failed: ${r?.reason||`unknown`}`);return}f(n(`memory.banner.soulPromptSent`)),await S(),w(`status`);let i=await t(`/api/memory/status`);u(i,0),d(i)}async function A(){p(!0),f(n(`memory.banner.reindexing`),!0);let t=await e(`/api/memory/reindex`,`POST`,{});p(!1),t?.message&&alert(t.message),await S(),w(`status`)}function j(){let e=s(`advStorageRoot`)?.textContent||``,t=e?`${e}/corrupted`:`JAW_HOME/memory/structured/corrupted`;i(t),alert(`Corrupted folder path copied/shown:\n${t}`)}async function M(t){confirm(`Delete `+t+`?`)&&(await e(`/api/memory-file?path=`+encodeURIComponent(t),`DELETE`,{}),S())}async function N(e){let n=await t(`/api/memory-file?path=`+encodeURIComponent(e));if(!n)return;let i=s(`basicMemoryFiles`);i&&(i.innerHTML=`
15
15
  <div style="margin-bottom:8px;display:flex;justify-content:space-between;align-items:center">
16
- <span style="font-size:12px;font-weight:600">${i(n.name)}</span>
17
- <button data-mem-back style="background:none;border:none;color:var(--accent);cursor:pointer;font-size:11px">${r.arrowLeft} back</button>
16
+ <span style="font-size:12px;font-weight:600">${r(n.name)}</span>
17
+ <button data-mem-back style="background:none;border:none;color:var(--accent);cursor:pointer;font-size:11px">${a.arrowLeft} back</button>
18
18
  </div>
19
- <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)">${i(n.content)}</pre>
19
+ <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)">${r(n.content)}</pre>
20
20
  `)}async function P(){try{let[e,n]=await Promise.all([t(`/api/memory-files`),t(`/api/memory/status`)]);u(n,e?.files?.length||0),d(n)}catch{}}async function F(){let t=s(`memFlushNowBtn`);t&&(t.disabled=!0),await e(`/api/jaw-memory/flush`,`POST`,{})?(t&&(t.textContent=`✅ Triggered`),setTimeout(()=>{t&&(t.textContent=`🧠 Flush Now`,t.disabled=!1)},2e3)):t&&(t.textContent=`❌ Failed`,t.disabled=!1)}export{P as a,E as c,k as d,F as f,S as i,T as l,N as m,M as n,A as o,O as p,j as r,D as s,C as t,w as u};
@@ -3,10 +3,39 @@ var e=`<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" wid
3
3
  `,a=`<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Copilot</title><path d="M23.922 16.997C23.061 18.492 18.063 22.02 12 22.02 5.937 22.02.939 18.492.078 16.997A.641.641 0 0 1 0 16.741v-2.869a.883.883 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.098 10.098 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952C7.255 2.937 9.248 1.98 11.978 1.98c2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.841.841 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256Zm-11.75-5.992h-.344a4.359 4.359 0 0 1-.355.508c-.77.947-1.918 1.492-3.508 1.492-1.725 0-2.989-.359-3.782-1.259a2.137 2.137 0 0 1-.085-.104L4 11.746v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.359 4.359 0 0 1-.355-.508Zm2.328 3.25c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm-5 0c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm3.313-6.185c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"/></svg>
4
4
  `,o=`<!-- Source: https://cursor.com/en-US/brand (brand-logo-7.svg), cropped to app icon. -->
5
5
  <svg width="1em" height="1em" viewBox="600 300 400 400" fill="none" xmlns="http://www.w3.org/2000/svg"><title>Cursor</title><path fill="#14120B" d="M999.994 554.294C999.994 559.859 999.994 565.419 999.962 570.984C999.935 575.67 999.882 580.357 999.753 585.038C999.475 595.247 998.875 605.542 997.059 615.639C995.217 625.88 992.212 635.409 987.477 644.718C982.822 653.861 976.738 662.233 969.485 669.491C962.227 676.748 953.861 682.828 944.712 687.482C935.409 692.217 925.875 695.222 915.633 697.065C905.537 698.88 895.242 699.48 885.033 699.759C880.346 699.887 875.665 699.941 870.978 699.968C865.413 700.005 859.853 700 854.288 700H745.695C740.13 700 734.571 700 729.005 699.968C724.319 699.941 719.632 699.887 714.951 699.759C704.742 699.48 694.447 698.88 684.35 697.065C674.109 695.222 664.58 692.217 655.271 687.482C646.128 682.828 637.756 676.743 630.499 669.491C623.241 662.233 617.161 653.866 612.507 644.718C607.772 635.414 604.767 625.88 602.925 615.639C601.109 605.542 600.509 595.247 600.23 585.038C600.102 580.352 600.048 575.67 600.021 570.984C600 565.419 600 559.859 600 554.294V445.701C600 440.136 600 434.576 600.032 429.011C600.059 424.324 600.112 419.637 600.241 414.956C600.52 404.747 601.119 394.452 602.935 384.356C604.778 374.115 607.783 364.586 612.518 355.277C617.172 346.133 623.257 337.762 630.509 330.504C637.767 323.246 646.133 317.167 655.282 312.512C664.586 307.777 674.12 304.772 684.361 302.93C694.458 301.114 704.752 300.514 714.961 300.236C719.648 300.107 724.329 300.054 729.016 300.027C734.576 300 740.136 300 745.701 300H854.294C859.859 300 865.419 300 870.984 300.032C875.67 300.059 880.357 300.112 885.038 300.241C895.247 300.52 905.542 301.119 915.639 302.935C925.88 304.778 935.409 307.783 944.718 312.518C953.861 317.172 962.233 323.257 969.491 330.509C976.748 337.767 982.828 346.133 987.482 355.282C992.217 364.586 995.222 374.12 997.065 384.361C998.88 394.458 999.48 404.752 999.759 414.961C999.887 419.648 999.941 424.329 999.968 429.016C1000.01 434.581 1000 440.141 1000 445.706V554.299L999.994 554.294Z"/><path fill="#EDECEC" d="M920.015 424.958L805.919 359.086C802.256 356.97 797.735 356.97 794.071 359.086L679.981 424.958C676.901 426.736 675 430.025 675 433.587V566.419C675 569.981 676.901 573.269 679.981 575.048L794.077 640.92C797.74 643.036 802.261 643.036 805.925 640.92L920.02 575.048C923.1 573.269 925.001 569.981 925.001 566.419V433.587C925.001 430.025 923.1 426.736 920.02 424.958H920.015ZM912.848 438.911L802.706 629.682C801.961 630.968 799.995 630.443 799.995 628.954V504.039C799.995 501.543 798.662 499.234 796.498 497.981L688.321 435.526C687.036 434.781 687.561 432.816 689.05 432.816H909.334C912.462 432.816 914.417 436.206 912.853 438.917H912.848V438.911Z"/></svg>
6
- `,s=`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Claude</title><path d="M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z"></path></svg>`,c=`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Gemini</title><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z"></path></svg>`,l=`<svg width="1em" height="1em" viewBox="0 0 434 400" fill="currentColor" xmlns="http://www.w3.org/2000/svg" style="flex:none;line-height:1"><title>Antigravity</title><path d="M392.709 390.137c24.168 18.13 60.419 6.044 27.188-27.195C320.208 266.248 341.354.339 217.497.339S114.786 266.248 15.096 362.942c-36.251 36.26 3.021 45.325 27.188 27.195 93.648-63.455 87.606-175.258 175.213-175.258s81.564 111.803 175.212 175.258Z"/></svg>
7
- `,u=`<svg fill="currentColor" fill-rule="evenodd" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Grok</title><path d="M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815"/></svg>
8
- `,d=`<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Copilot</title><path d="M23.922 16.997C23.061 18.492 18.063 22.02 12 22.02 5.937 22.02.939 18.492.078 16.997A.641.641 0 0 1 0 16.741v-2.869a.883.883 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.098 10.098 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952C7.255 2.937 9.248 1.98 11.978 1.98c2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.841.841 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256Zm-11.75-5.992h-.344a4.359 4.359 0 0 1-.355.508c-.77.947-1.918 1.492-3.508 1.492-1.725 0-2.989-.359-3.782-1.259a2.137 2.137 0 0 1-.085-.104L4 11.746v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.359 4.359 0 0 1-.355-.508Zm2.328 3.25c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm-5 0c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm3.313-6.185c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"/></svg>
9
- `,f=`<!-- Source: https://cursor.com/en-US/brand (brand-logo-7.svg), cropped to mono symbol. -->
6
+ `,s=`<!-- Source: https://kiro.dev/icon.svg (official Kiro app icon, fetched 2026-05-31) -->
7
+ <svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
8
+ <title>Kiro</title>
9
+ <g transform="scale(0.02)">
10
+ <rect width="1200" height="1200" rx="260" fill="#9046FF"/>
11
+ <mask id="kiroColorMask" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="272" y="202" width="655" height="796">
12
+ <path d="M926.578 202.793H272.637V997.857H926.578V202.793Z" fill="white"/>
13
+ </mask>
14
+ <g mask="url(#kiroColorMask)">
15
+ <path d="M398.554 818.914C316.315 1001.03 491.477 1046.74 620.672 940.156C658.687 1059.66 801.052 970.473 852.234 877.795C964.787 673.567 919.318 465.357 907.64 422.374C827.637 129.443 427.623 128.946 358.8 423.865C342.651 475.544 342.402 534.18 333.458 595.051C328.986 625.86 325.507 645.488 313.83 677.785C306.873 696.424 297.68 712.819 282.773 740.645C259.915 783.881 269.604 867.113 387.87 823.883L399.051 818.914H398.554Z" fill="white"/>
16
+ <path d="M636.123 549.353C603.328 549.353 598.359 510.097 598.359 486.742C598.359 465.623 602.086 448.977 609.293 438.293C615.504 428.852 624.697 424.131 636.123 424.131C647.555 424.131 657.492 428.852 664.447 438.541C672.398 449.474 676.623 466.12 676.623 486.742C676.623 525.998 661.471 549.353 636.375 549.353H636.123Z" fill="black"/>
17
+ <path d="M771.24 549.353C738.445 549.353 733.477 510.097 733.477 486.742C733.477 465.623 737.203 448.977 744.41 438.293C750.621 428.852 759.814 424.131 771.24 424.131C782.672 424.131 792.609 428.852 799.564 438.541C807.516 449.474 811.74 466.12 811.74 486.742C811.74 525.998 796.588 549.353 771.492 549.353H771.24Z" fill="black"/>
18
+ </g>
19
+ </g>
20
+ </svg>
21
+ `,c=`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Claude</title><path d="M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z"></path></svg>`,l=`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Gemini</title><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z"></path></svg>`,u=`<svg width="1em" height="1em" viewBox="0 0 434 400" fill="currentColor" xmlns="http://www.w3.org/2000/svg" style="flex:none;line-height:1"><title>Antigravity</title><path d="M392.709 390.137c24.168 18.13 60.419 6.044 27.188-27.195C320.208 266.248 341.354.339 217.497.339S114.786 266.248 15.096 362.942c-36.251 36.26 3.021 45.325 27.188 27.195 93.648-63.455 87.606-175.258 175.213-175.258s81.564 111.803 175.212 175.258Z"/></svg>
22
+ `,d=`<svg fill="currentColor" fill-rule="evenodd" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Grok</title><path d="M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815"/></svg>
23
+ `,f=`<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Copilot</title><path d="M23.922 16.997C23.061 18.492 18.063 22.02 12 22.02 5.937 22.02.939 18.492.078 16.997A.641.641 0 0 1 0 16.741v-2.869a.883.883 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.098 10.098 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952C7.255 2.937 9.248 1.98 11.978 1.98c2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.841.841 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256Zm-11.75-5.992h-.344a4.359 4.359 0 0 1-.355.508c-.77.947-1.918 1.492-3.508 1.492-1.725 0-2.989-.359-3.782-1.259a2.137 2.137 0 0 1-.085-.104L4 11.746v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.359 4.359 0 0 1-.355-.508Zm2.328 3.25c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm-5 0c.549 0 1 .451 1 1v2c0 .549-.451 1-1 1-.549 0-1-.451-1-1v-2c0-.549.451-1 1-1Zm3.313-6.185c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"/></svg>
24
+ `,p=`<!-- Source: https://cursor.com/en-US/brand (brand-logo-7.svg), cropped to mono symbol. -->
10
25
  <svg width="1em" height="1em" viewBox="675 357 250 286" fill="none" xmlns="http://www.w3.org/2000/svg"><title>Cursor</title><path fill="currentColor" d="M920.015 424.958L805.919 359.086C802.256 356.97 797.735 356.97 794.071 359.086L679.981 424.958C676.901 426.736 675 430.025 675 433.587V566.419C675 569.981 676.901 573.269 679.981 575.048L794.077 640.92C797.74 643.036 802.261 643.036 805.925 640.92L920.02 575.048C923.1 573.269 925.001 569.981 925.001 566.419V433.587C925.001 430.025 923.1 426.736 920.02 424.958H920.015ZM912.848 438.911L802.706 629.682C801.961 630.968 799.995 630.443 799.995 628.954V504.039C799.995 501.543 798.662 499.234 796.498 497.981L688.321 435.526C687.036 434.781 687.561 432.816 689.05 432.816H909.334C912.462 432.816 914.417 436.206 912.853 438.917H912.848V438.911Z"/></svg>
11
- `,p=`<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Discord</title><path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"/></svg>`,m=`<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Telegram</title><path d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"/></svg>`,h=`<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/></svg>
12
- `,g=t.replace(`fill="currentColor"`,`fill="#10A37F"`),_={"ai-e":{color:g,mono:t,label:`AI-E`},claude:{color:e,mono:s,label:`Claude`},openai:{color:g,mono:t,label:`OpenAI`},gemini:{color:n,mono:c,label:`Gemini`},antigravity:{color:r,mono:l,label:`Antigravity`},grok:{color:i,mono:u,label:`Grok`},copilot:{color:a,mono:d,label:`Copilot`},cursor:{color:o,mono:f,label:`Cursor`},codex:{color:t,mono:t,label:`Codex`},"codex-app":{color:g,mono:t,label:`Codex App`},opencode:{color:h,mono:h,label:`OpenCode`},discord:{color:p,mono:p,label:`Discord`},telegram:{color:m,mono:m,label:`Telegram`}},v={"claude-e":`Claude E`,"ai-e":`AI-E`,"claude-exec":`Claude E`,"jaw-claude-i":`Claude E`,"claude-i":`Claude E`,agy:`Antigravity`,cursor:`Cursor`};function y(e){let t=e.toLowerCase().replace(/[-_\s]/g,``);return t===`aie`?`ai-e`:t===`claude`||t.startsWith(`claude`)?`claude`:t===`gemini`||t.startsWith(`gemini`)?`gemini`:t===`antigravity`||t===`agy`||t===`googleantigravity`?`antigravity`:t===`grok`||t.startsWith(`grok`)?`grok`:t.startsWith(`copilot`)||t===`githubcopilot`?`copilot`:t===`cursor`||t.startsWith(`cursor`)?`cursor`:t===`codexapp`||t===`codexappserver`?`codex-app`:t===`codex`?`codex`:t===`opencode`?`opencode`:t===`openai`||t.startsWith(`gpt`)||t.startsWith(`o1`)||t.startsWith(`o3`)||t.startsWith(`o4`)?`openai`:t===`discord`?`discord`:t===`telegram`?`telegram`:null}function b(e,t=`color`){let n=y(e);if(!n)return``;let r=_[n];return t===`mono`?r.mono:r.color}function x(e=document.body){let t=e.querySelectorAll(`[data-provider]`);for(let e of t){let t=b(e.dataset.provider||``);t&&(e.innerHTML=t,e.classList.add(`cli-provider-icon`))}}function S(e){let t=v[e.toLowerCase()];if(t)return t;let n=y(e);return n?_[n].label:e}export{b as n,S as r,x as t};
26
+ `,m=`<!-- Source: https://kiro.dev/icon.svg (official Kiro mascot mark, fetched 2026-05-31) -->
27
+ <svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
28
+ <title>Kiro</title>
29
+ <g transform="scale(0.02)">
30
+ <mask id="kiroMonoMask" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="272" y="202" width="655" height="796">
31
+ <path d="M926.578 202.793H272.637V997.857H926.578V202.793Z" fill="white"/>
32
+ </mask>
33
+ <g mask="url(#kiroMonoMask)">
34
+ <path d="M398.554 818.914C316.315 1001.03 491.477 1046.74 620.672 940.156C658.687 1059.66 801.052 970.473 852.234 877.795C964.787 673.567 919.318 465.357 907.64 422.374C827.637 129.443 427.623 128.946 358.8 423.865C342.651 475.544 342.402 534.18 333.458 595.051C328.986 625.86 325.507 645.488 313.83 677.785C306.873 696.424 297.68 712.819 282.773 740.645C259.915 783.881 269.604 867.113 387.87 823.883L399.051 818.914H398.554Z" fill="currentColor"/>
35
+ <path d="M636.123 549.353C603.328 549.353 598.359 510.097 598.359 486.742C598.359 465.623 602.086 448.977 609.293 438.293C615.504 428.852 624.697 424.131 636.123 424.131C647.555 424.131 657.492 428.852 664.447 438.541C672.398 449.474 676.623 466.12 676.623 486.742C676.623 525.998 661.471 549.353 636.375 549.353H636.123Z" fill="black"/>
36
+ <path d="M771.24 549.353C738.445 549.353 733.477 510.097 733.477 486.742C733.477 465.623 737.203 448.977 744.41 438.293C750.621 428.852 759.814 424.131 771.24 424.131C782.672 424.131 792.609 428.852 799.564 438.541C807.516 449.474 811.74 466.12 811.74 486.742C811.74 525.998 796.588 549.353 771.492 549.353H771.24Z" fill="black"/>
37
+ </g>
38
+ </g>
39
+ </svg>
40
+ `,h=`<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Discord</title><path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"/></svg>`,g=`<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Telegram</title><path d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"/></svg>`,_=`<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/></svg>
41
+ `,v=t.replace(`fill="currentColor"`,`fill="#10A37F"`),y={"ai-e":{color:v,mono:t,label:`AI-E`},claude:{color:e,mono:c,label:`Claude`},openai:{color:v,mono:t,label:`OpenAI`},gemini:{color:n,mono:l,label:`Gemini`},antigravity:{color:r,mono:u,label:`Antigravity`},grok:{color:i,mono:d,label:`Grok`},copilot:{color:a,mono:f,label:`Copilot`},cursor:{color:o,mono:p,label:`Cursor`},"kiro-code":{color:s,mono:m,label:`Kiro`},codex:{color:t,mono:t,label:`Codex`},"codex-app":{color:v,mono:t,label:`Codex App`},opencode:{color:_,mono:_,label:`OpenCode`},discord:{color:h,mono:h,label:`Discord`},telegram:{color:g,mono:g,label:`Telegram`}},b={"claude-e":`Claude E`,"ai-e":`AI-E`,"claude-exec":`Claude E`,"jaw-claude-i":`Claude E`,"claude-i":`Claude E`,agy:`Antigravity`,cursor:`Cursor`,"kiro-code":`Kiro`};function x(e){let t=e.toLowerCase().replace(/[-_\s]/g,``);return t===`aie`?`ai-e`:t===`claude`||t.startsWith(`claude`)?`claude`:t===`gemini`||t.startsWith(`gemini`)?`gemini`:t===`antigravity`||t===`agy`||t===`googleantigravity`?`antigravity`:t===`grok`||t.startsWith(`grok`)?`grok`:t.startsWith(`copilot`)||t===`githubcopilot`?`copilot`:t===`cursor`||t.startsWith(`cursor`)?`cursor`:t===`kirocode`||t===`kiro`?`kiro-code`:t===`codexapp`||t===`codexappserver`?`codex-app`:t===`codex`?`codex`:t===`opencode`?`opencode`:t===`openai`||t.startsWith(`gpt`)||t.startsWith(`o1`)||t.startsWith(`o3`)||t.startsWith(`o4`)?`openai`:t===`discord`?`discord`:t===`telegram`?`telegram`:null}function S(e,t=`color`){let n=x(e);if(!n)return``;let r=y[n];return t===`mono`?r.mono:r.color}function C(e=document.body){let t=e.querySelectorAll(`[data-provider]`);for(let e of t){let t=S(e.dataset.provider||``);t&&(e.innerHTML=t,e.classList.add(`cli-provider-icon`))}}function w(e){let t=b[e.toLowerCase()];if(t)return t;let n=x(e);return n?y[n].label:e}export{S as n,w as r,C as t};
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-Bjnw0wQ6.css"])))=>i.map(i=>d[i]);
2
- import{A as e,L as t,R as n,S as r,_ as i,a,b as o,c as s,d as c,f as l,g as u,h as d,i as ee,l as f,m as te,o as ne,p as re,s as ie,u as ae,v as oe,x as p,y as m}from"./vendor-render-DCb9B75Q.js";import{i as h}from"./api-tVoG39dL.js";import{t as g}from"./preload-helper-DuH3-WbD.js";import{A as se,B as ce,C as le,D as ue,E as de,F as fe,G as pe,H as me,I as he,J as ge,K as _e,L as ve,M as ye,N as be,O as xe,P as Se,Q as Ce,R as we,S as Te,T as Ee,U as De,V as Oe,W as ke,X as Ae,Y as je,Z as Me,_ as Ne,a as Pe,b as Fe,c as Ie,d as Le,f as Re,g as ze,h as Be,i as Ve,j as He,k as Ue,l as We,m as Ge,n as Ke,o as qe,p as Je,q as Ye,r as Xe,s as Ze,t as Qe,u as $e,v as et,w as tt,x as nt,y as rt,z as it}from"./vendor-icons-D2l6ddC0.js";import{n as _,t as at}from"./mermaid-preprocess-p7OIpOon.js";var ot=[`en`,`ko`,`zh`,`ja`],v=`ko`,y={},b={};async function st(){let e=null;try{e=localStorage.getItem(`claw_locale`)}catch{}if(!e){let t=(navigator.language||`ko`).split(/[-_]/)[0].toLowerCase();e=ot.includes(t)?t:`ko`}b=await x(`ko`),y=e===`ko`?b:await x(e),v=e,document.documentElement.lang=v,C()}async function x(e){try{let{api:t}=await g(async()=>{let{api:e}=await import(`./api-DNnX8m0u.js`);return{api:e}},[]);return await t(`/api/i18n/${e}`)||{}}catch{return{}}}function S(e,t={}){let n=y[e]??b[e]??e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{${e}}`,String(r));return n}function C(){document.querySelectorAll(`[data-i18n]`).forEach(e=>{let t=e.getAttribute(`data-i18n`);t&&(e.textContent=S(t))}),document.querySelectorAll(`[data-i18n-placeholder]`).forEach(e=>{let t=e.getAttribute(`data-i18n-placeholder`);t&&(e.placeholder=S(t))}),document.querySelectorAll(`[data-i18n-title]`).forEach(e=>{let t=e.getAttribute(`data-i18n-title`);t&&(e.title=S(t))}),document.querySelectorAll(`[data-i18n-aria]`).forEach(e=>{let t=e.getAttribute(`data-i18n-aria`);t&&e.setAttribute(`aria-label`,S(t))})}async function ct(e){if(e!==v){ot.includes(e)||(e=`ko`),y=e===`ko`?b:await x(e),v=e,document.documentElement.lang=v;try{localStorage.setItem(`claw_locale`,e)}catch{}C();try{let{loadEmployees:e}=await g(async()=>{let{loadEmployees:e}=await import(`./employees-DiNLzEXS.js`);return{loadEmployees:e}},[]);e()}catch{}try{let{loadSkills:e}=await g(async()=>{let{loadSkills:e}=await import(`./skills-DYTlqoke.js`);return{loadSkills:e}},[]);e()}catch{}try{let{loadCommands:e}=await g(async()=>{let{loadCommands:e}=await import(`./slash-commands-D7CU5oso.js`);return{loadCommands:e}},[]);e()}catch{}try{let{loadSettings:e}=await g(async()=>{let{loadSettings:e}=await import(`./settings-CY_6tGuS.js`);return{loadSettings:e}},[]);e()}catch{}}}function lt(){return v}function ut(e,t={}){let n=new URL(e,location.origin);return n.searchParams.has(`locale`)||n.searchParams.set(`locale`,v),fetch(n.toString(),t)}function dt(e){let t=[],n=e.replace(/```[\s\S]*?```/g,e=>(t.push(e),`\x00P${t.length-1}\x00`)).replace(/`[^`]+`/g,e=>(t.push(e),`\x00P${t.length-1}\x00`));return n=n.replace(/([\p{P}])\*\*(?=[^\s\p{P}])/gu,(e,t)=>t===`*`?e:t+`​**`),n=n.replace(/\x00P(\d+)\x00/g,(e,n)=>t[Number(n)]),n}var w=0;function ft(e){let t=new Map;return{text:e.replace(/^ {0,3}(`{3,}|~{3,})[^\n]*\n[\s\S]*?\n {0,3}\1[ \t]*$/gm,e=>{let n=`\x00FENCE-${w++}\x00`;return t.set(n,e),n}),fences:t}}function pt(e,t){for(let[n,r]of t)e=e.replace(n,()=>r);return e}function mt(e,t=!1){let n=[],r=``,i=0;for(;i<e.length;){let a=e.indexOf(`<svg`,i);if(a===-1){r+=e.slice(i);break}let o=e[a+4];if(o&&!/[\s\/>]/.test(o)){r+=e.slice(i,a+4),i=a+4;continue}r+=e.slice(i,a);let s=0,c=a,l=!1;for(;c<e.length;){let t=e.indexOf(`<svg`,c+1),o=e.indexOf(`</svg>`,c+(c===a?0:1));if(o===-1)break;if(t!==-1&&t<o){let n=e[t+4];n&&/[\s\/>]/.test(n)&&s++,c=t+4}else if(s===0){let t=o+6,s=e.slice(a,t),c=w++,u=`\n\n<div data-jaw-svg="${c}"></div>\n\n`;n.push({id:c,index:a,length:s.length,svg:s,kind:`complete`,placeholder:u}),r+=u,i=t,l=!0;break}else s--,c=o+6}if(!l){let o=w++;if(t){let t=e.slice(a),s=`\n\n<div data-jaw-svg="${o}" data-jaw-kind="partial"></div>\n\n`;n.push({id:o,index:a,length:t.length,svg:``,kind:`partial`,placeholder:s}),r+=s,i=e.length}else{let t=`\n\n<div data-jaw-svg="${o}" data-jaw-kind="error"></div>\n\n`,s=e.slice(a),c=s.search(/\n\s*\n/),l=c===-1?s.length:c;n.push({id:o,index:a,length:l,svg:``,kind:`error`,placeholder:t}),r+=t,i=a+l}}}return{text:r,blocks:n}}function T(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}var ht=/["'](?:subtasks|employee_config|agent_phases|orchestration_plan)["']\s*:/,gt=/(^|\n)(?:## Approved Plan \((?:authoritative|auto-injected by orchestrator)[^\n]*\)|\[PABCD — [A-Z]:[^\n]*\]|\[PLANNING MODE[^\n]*\]|\[PLAN AUDIT[^\n]*\]|The approved plan is already injected above)/m;function _t(e){let t=gt.exec(e);return!t||t.index<0?e:e.slice(0,t.index).trim()}function E(e){let t=e.replace(/```json\n([\s\S]*?)\n```/g,(e,t)=>ht.test(t)?``:e);return t=t.replace(/\{[^{}]*"subtasks"\s*:\s*\[[\s\S]*?\]\s*\}/g,``).trim(),_t(t)}function vt(e){let t=[],n=[],r=e.replace(/```[\s\S]*?```/g,e=>(n.push(e),`\x00C${n.length-1}\x00`)).replace(/`[^`]+`/g,e=>(n.push(e),`\x00C${n.length-1}\x00`));return r=r.replace(/\$\$([\s\S]+?)\$\$/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!0}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\\\[([\s\S]+?)\\\]/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!0}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/(?<!\$)\$(?!\$)([^\n$]+?)\$(?!\$)/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!1}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\\\((.+?)\\\)/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!1}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\x00C(\d+)\x00/g,(e,t)=>n[Number(t)]),{text:r,blocks:t}}function yt(t,n,r=!1){return t.replace(/\x00MATH-(\d+)\x00/g,(t,i)=>{let a=n[Number(i)];if(!a)return`<code title="math placeholder error">[math error]</code>`;if(r)return a.displayMode?`<div class="math-placeholder">${T(a.tex)}</div>`:`<code class="math-placeholder">${T(a.tex)}</code>`;try{return e.renderToString(a.tex,{displayMode:a.displayMode,throwOnError:!1})}catch{return a.displayMode?`<pre><code>${T(a.tex)}</code></pre>`:`<code>${T(a.tex)}</code>`}})}var bt=`http://www.w3.org/2000/svg`,xt=new Set([`a`,`area`,`link`]),St=[`fill`,`stroke`,`filter`,`mask`,`clip-path`,`marker-start`,`marker-mid`,`marker-end`,`cursor`],D=null;function Ct(){let e=r;return typeof e.sanitize==`function`&&typeof e.addHook==`function`?e:typeof window<`u`?e(window):{sanitize:e=>e,addHook:()=>void 0}}function wt(e){e.addHook(`afterSanitizeAttributes`,e=>{let t=e.tagName.toLowerCase();if(e.namespaceURI===bt||!xt.has(t)){let t=e.getAttribute(`href`)||``;t&&!t.startsWith(`#`)&&e.removeAttribute(`href`)}let n=e.getAttributeNS(`http://www.w3.org/1999/xlink`,`href`)||e.getAttribute(`xlink:href`)||``;if(n&&!n.startsWith(`#`)&&(e.removeAttributeNS(`http://www.w3.org/1999/xlink`,`href`),e.removeAttribute(`xlink:href`)),t===`image`||t===`feimage`){let t=e.getAttribute(`src`)||``;t&&!t.startsWith(`#`)&&e.removeAttribute(`src`)}if(e.hasAttribute(`style`)){let t=e.style?.cssText||``;if(/url\s*\(/i.test(t)){let n=t.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`);e.style.cssText=n}}for(let t of St){if(!e.hasAttribute(t))continue;let n=e.getAttribute(t)||``;if(/url\s*\(/i.test(n)){let r=n.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`);e.setAttribute(t,r)}}})}function Tt(){return D||(D=Ct(),wt(D),D)}function O(){return Tt()}function Et(e){let t=O().sanitize(e,{USE_PROFILES:{svg:!0,svgFilters:!0},FORBID_TAGS:[`script`,`iframe`,`object`,`embed`,`form`,`input`,`foreignObject`,`animate`,`set`,`animateTransform`,`animateMotion`],FORBID_ATTR:[`onerror`,`onclick`,`onload`,`onmouseover`,`onfocus`,`onblur`,`background`]}),n=document.createElement(`div`);n.innerHTML=t;for(let e of n.querySelectorAll(`style`)){let t=e.textContent||``;t=t.replace(/@import\b[^;]*;?/gi,`/* stripped */`),t=t.replace(/@font-face\s*\{[^}]*\}/gi,`/* stripped */`),t=t.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`),e.textContent=t}return n.innerHTML}function k(e){return O().sanitize(e,{USE_PROFILES:{html:!0,svg:!0,svgFilters:!0},FORBID_TAGS:[`script`,`style`,`iframe`,`object`,`embed`,`form`,`input`,`foreignObject`,`animate`,`set`,`animateTransform`,`animateMotion`],FORBID_ATTR:[`onerror`,`onclick`,`onload`,`onmouseover`,`onfocus`,`onblur`,`background`],ADD_TAGS:[`use`],ADD_ATTR:[`aria-hidden`,`xmlns`,`viewBox`,`role`,`aria-label`,`data-jaw-svg`,`data-jaw-kind`,`data-mermaid-code-raw`,`href`,`xlink:href`]})}var Dt=`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12c0 0 2-4 6-4 1 0 2 .5 3 1l3-6c0 0 1 5 3 7 1.5 1.5 5 2 5 2s-1 4-5 4c-1 0-2-.3-3-.8L12 18c0 0-2-1-4-1-4 0-6-5-6-5z"/><circle cx="17" cy="11" r="0.5" fill="currentColor" stroke="none"/><path d="M7 12l1 2"/><path d="M9.5 12l1 2"/></svg>`,A=14,Ot=16;function j(e,t=Ot){return Ce(e,{size:t})}var M={check:j(Oe),error:j(it),warning:j(Ve),skip:j(Ie),tool:j(Xe),thinking:j(Te),search:j(Le),web:j(ye),exec:j(Qe),compacting:j(rt),plan:j(Fe),brain:j(Ye),heartPulse:j(se),lock:j(le),lockOpen:j(tt),key:j(ue),settings:j(We),file:j(fe),trash:j(Pe),lightbulb:j(de),refresh:j(Je),mic:j(nt),clipboard:j(we),robot:j(ge),palette:j(et),link:j(Ee),salute:j(He),shark:Dt,user:j(ce),paperclip:j(Ne),save:j(Re),gamepad:j(be),house:j(xe),radio:j(Ge),folder:j(Se),pencil:j(ze),chart:j(_e),hourglass:j(Ue),target:j(qe),ban:j(je),play:j(Be),stop:j(Ze),close:j(Ke,A),send:j($e),copy:j(ve,A),download:j(he,A),checkSimple:j(pe,A),chevronLeft:j(De,A),chevronRight:j(me,A),chevronDown:j(ke,A),arrowLeft:j(Me,A),arrowRight:j(Ae,A)},kt={"✅":`check`,"❌":`error`,"🔧":`tool`,"⏭":`skip`,"🧠":`brain`,"💓":`heartPulse`,"🔒":`lock`,"🔓":`lockOpen`,"🔑":`key`,"⚙":`settings`,"⚙️":`settings`,"📄":`file`,"🗑":`trash`,"🗑️":`trash`,"⚠":`warning`,"⚠️":`warning`,"💡":`lightbulb`,"🦈":`shark`,"👤":`user`,"💭":`thinking`,"🔍":`search`,"🌐":`web`,"⚡":`exec`,"🗜":`compacting`,"🗜️":`compacting`,"📝":`plan`,"📑":`clipboard`,"🤖":`robot`,"📋":`clipboard`,"🔄":`refresh`,"🎨":`palette`,"🎤":`mic`,"🔗":`link`,"🫡":`salute`,"📎":`paperclip`,"💾":`save`,"🎮":`gamepad`,"🏠":`house`,"📡":`radio`,"📂":`folder`,"✏️":`pencil`,"📊":`chart`,"🎙️":`mic`,"⏳":`hourglass`,"🎯":`target`,"📨":`send`,"🚫":`ban`,"▶":`play`};function At(e){let t=kt[e];return t?M[t]:e}function jt(e){return e===`✅`?`done`:e===`❌`?`error`:null}function Mt(e=document.body){let t=e.querySelectorAll(`[data-icon]`);for(let e of t){let t=e.dataset.icon;t&&M[t]&&(e.innerHTML=M[t],e.classList.add(`icon-hydrated`))}}function Nt(e){return e instanceof Error?e.message:String(e)}function Pt(){return window.cliJawDesktop?.clipboard??null}async function N(e){try{let t=Pt();if(t){let n=await t.writeText(e);return n.ok?{ok:!0}:{ok:!1,error:n.error??`Clipboard bridge rejected the copy request.`}}return navigator.clipboard?.writeText?(await navigator.clipboard.writeText(e),{ok:!0}):{ok:!1,error:`Clipboard API is unavailable.`}}catch(e){return{ok:!1,error:Nt(e)}}}function Ft(e){e.querySelector(`.mermaid-zoom-btn`)?.remove(),e.querySelector(`.mermaid-copy-btn`)?.remove(),e.querySelector(`.mermaid-save-btn`)?.remove();let t=document.createElement(`button`);t.className=`mermaid-zoom-btn`,t.type=`button`,t.ariaLabel=`Expand diagram`,t.title=`Expand`,t.textContent=`⤢`,e.appendChild(t);let n=document.createElement(`button`);n.className=`mermaid-save-btn`,n.type=`button`,n.ariaLabel=`Save as image`,n.title=`Save`,n.innerHTML=M.download,e.appendChild(n);let r=document.createElement(`button`);r.className=`mermaid-copy-btn`,r.type=`button`,r.ariaLabel=`Copy source`,r.title=`Copy`,r.innerHTML=M.copy,e.appendChild(r)}var It=!1;function Lt(){It||(It=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`.diagram-copy-btn`);if(n){let e=n.closest(`.diagram-container`);if(!e)return;let t=``;if(e.dataset.widgetHtml)try{t=decodeURIComponent(escape(atob(e.dataset.widgetHtml)))}catch{return}else{let n=e.querySelector(`svg`);n&&(t=n.outerHTML)}t&&P(n,t,`copy`);return}let r=t?.closest(`.mermaid-copy-btn`);if(r){let e=r.closest(`.mermaid-container`);if(!e)return;let t=e.dataset.mermaidCode||``;t&&P(r,t,`copy`);return}let i=t?.closest(`.diagram-save-btn`);if(i){let e=i.closest(`.diagram-container`);if(!e)return;if(e.dataset.widgetHtml){let t=e.querySelector(`iframe`);t?.contentWindow&&(t.contentWindow.postMessage({type:`jaw-request-screenshot`},`*`),P(i,``,`save`));return}let t=e.querySelector(`svg`);t&&I(t,i);return}let a=t?.closest(`.mermaid-save-btn`);if(a){let e=a.closest(`.mermaid-container`);if(!e)return;let t=e.querySelector(`svg`);t&&I(t,a);return}}))}function P(e,t,n){let r=()=>{let t=e.innerHTML;e.innerHTML=M.checkSimple,e.classList.add(`copied`),setTimeout(()=>{e.innerHTML=t,e.classList.remove(`copied`)},1500)};n===`copy`?N(t).then(e=>{e.ok&&r()}):r()}function F(e,t){let n=e.children,r=t.children,i=[`fill`,`stroke`,`stroke-width`,`color`,`opacity`,`rx`,`ry`,`font-size`,`font-weight`,`font-family`,`text-anchor`,`dominant-baseline`];for(let e=0;e<n.length;e++){let t=n[e],a=r[e];if(!t||!a)continue;let o=getComputedStyle(t);for(let e of i){let t=o.getPropertyValue(e);t&&a.style.setProperty(e,t)}t.children.length&&F(t,a)}}function I(e,t){let n=e.cloneNode(!0);F(e,n);let r=e.getBoundingClientRect();n.getAttribute(`width`)||n.setAttribute(`width`,String(r.width)),n.getAttribute(`height`)||n.setAttribute(`height`,String(r.height));let i=new XMLSerializer().serializeToString(n),a=`data:image/svg+xml;charset=utf-8,`+encodeURIComponent(i),o=new Image;o.onload=()=>{let e=document.createElement(`canvas`);e.width=o.naturalWidth*2,e.height=o.naturalHeight*2;let n=e.getContext(`2d`);n.scale(2,2),n.drawImage(o,0,0),e.toBlob(e=>{e&&(L(e,`diagram-${Date.now()}.png`),P(t,``,`save`))},`image/png`)},o.onerror=()=>{L(new Blob([i],{type:`image/svg+xml;charset=utf-8`}),`diagram-${Date.now()}.svg`),P(t,``,`save`)},o.src=a}function L(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function Rt(e){return e.kind===`partial`?`<div class="diagram-container diagram-loading" role="status"
2
+ import{A as e,L as t,R as n,S as r,_ as i,a,b as o,c as s,d as c,f as l,g as u,h as d,i as ee,l as f,m as te,o as ne,p as re,s as ie,u as ae,v as oe,x as p,y as m}from"./vendor-render-DCb9B75Q.js";import{i as h}from"./api-tVoG39dL.js";import{t as g}from"./preload-helper-DuH3-WbD.js";import{A as se,B as ce,C as le,D as ue,E as de,F as fe,G as pe,H as me,I as he,J as ge,K as _e,L as ve,M as ye,N as be,O as xe,P as Se,Q as Ce,R as we,S as Te,T as Ee,U as De,V as Oe,W as ke,X as Ae,Y as je,Z as Me,_ as Ne,a as Pe,b as Fe,c as Ie,d as Le,f as Re,g as ze,h as Be,i as Ve,j as He,k as Ue,l as We,m as Ge,n as Ke,o as qe,p as Je,q as Ye,r as Xe,s as Ze,t as Qe,u as $e,v as et,w as tt,x as nt,y as rt,z as it}from"./vendor-icons-D2l6ddC0.js";import{n as _,t as at}from"./mermaid-preprocess-p7OIpOon.js";var ot=[`en`,`ko`,`zh`,`ja`],v=`ko`,y={},b={};async function st(){let e=null;try{e=localStorage.getItem(`claw_locale`)}catch{}if(!e){let t=(navigator.language||`ko`).split(/[-_]/)[0].toLowerCase();e=ot.includes(t)?t:`ko`}b=await x(`ko`),y=e===`ko`?b:await x(e),v=e,document.documentElement.lang=v,C()}async function x(e){try{let{api:t}=await g(async()=>{let{api:e}=await import(`./api-DNnX8m0u.js`);return{api:e}},[]);return await t(`/api/i18n/${e}`)||{}}catch{return{}}}function S(e,t={}){let n=y[e]??b[e]??e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{${e}}`,String(r));return n}function C(){document.querySelectorAll(`[data-i18n]`).forEach(e=>{let t=e.getAttribute(`data-i18n`);t&&(e.textContent=S(t))}),document.querySelectorAll(`[data-i18n-placeholder]`).forEach(e=>{let t=e.getAttribute(`data-i18n-placeholder`);t&&(e.placeholder=S(t))}),document.querySelectorAll(`[data-i18n-title]`).forEach(e=>{let t=e.getAttribute(`data-i18n-title`);t&&(e.title=S(t))}),document.querySelectorAll(`[data-i18n-aria]`).forEach(e=>{let t=e.getAttribute(`data-i18n-aria`);t&&e.setAttribute(`aria-label`,S(t))})}async function ct(e){if(e!==v){ot.includes(e)||(e=`ko`),y=e===`ko`?b:await x(e),v=e,document.documentElement.lang=v;try{localStorage.setItem(`claw_locale`,e)}catch{}C();try{let{loadEmployees:e}=await g(async()=>{let{loadEmployees:e}=await import(`./employees-_A-p_bZg.js`);return{loadEmployees:e}},[]);e()}catch{}try{let{loadSkills:e}=await g(async()=>{let{loadSkills:e}=await import(`./skills-8nHJkv-r.js`);return{loadSkills:e}},[]);e()}catch{}try{let{loadCommands:e}=await g(async()=>{let{loadCommands:e}=await import(`./slash-commands-RJWO8wJZ.js`);return{loadCommands:e}},[]);e()}catch{}try{let{loadSettings:e}=await g(async()=>{let{loadSettings:e}=await import(`./settings-B4ZkeaU-.js`);return{loadSettings:e}},[]);e()}catch{}}}function lt(){return v}function ut(e,t={}){let n=new URL(e,location.origin);return n.searchParams.has(`locale`)||n.searchParams.set(`locale`,v),fetch(n.toString(),t)}function dt(e){let t=[],n=e.replace(/```[\s\S]*?```/g,e=>(t.push(e),`\x00P${t.length-1}\x00`)).replace(/`[^`]+`/g,e=>(t.push(e),`\x00P${t.length-1}\x00`));return n=n.replace(/([\p{P}])\*\*(?=[^\s\p{P}])/gu,(e,t)=>t===`*`?e:t+`​**`),n=n.replace(/\x00P(\d+)\x00/g,(e,n)=>t[Number(n)]),n}var w=0;function ft(e){let t=new Map;return{text:e.replace(/^ {0,3}(`{3,}|~{3,})[^\n]*\n[\s\S]*?\n {0,3}\1[ \t]*$/gm,e=>{let n=`\x00FENCE-${w++}\x00`;return t.set(n,e),n}),fences:t}}function pt(e,t){for(let[n,r]of t)e=e.replace(n,()=>r);return e}function mt(e,t=!1){let n=[],r=``,i=0;for(;i<e.length;){let a=e.indexOf(`<svg`,i);if(a===-1){r+=e.slice(i);break}let o=e[a+4];if(o&&!/[\s\/>]/.test(o)){r+=e.slice(i,a+4),i=a+4;continue}r+=e.slice(i,a);let s=0,c=a,l=!1;for(;c<e.length;){let t=e.indexOf(`<svg`,c+1),o=e.indexOf(`</svg>`,c+(c===a?0:1));if(o===-1)break;if(t!==-1&&t<o){let n=e[t+4];n&&/[\s\/>]/.test(n)&&s++,c=t+4}else if(s===0){let t=o+6,s=e.slice(a,t),c=w++,u=`\n\n<div data-jaw-svg="${c}"></div>\n\n`;n.push({id:c,index:a,length:s.length,svg:s,kind:`complete`,placeholder:u}),r+=u,i=t,l=!0;break}else s--,c=o+6}if(!l){let o=w++;if(t){let t=e.slice(a),s=`\n\n<div data-jaw-svg="${o}" data-jaw-kind="partial"></div>\n\n`;n.push({id:o,index:a,length:t.length,svg:``,kind:`partial`,placeholder:s}),r+=s,i=e.length}else{let t=`\n\n<div data-jaw-svg="${o}" data-jaw-kind="error"></div>\n\n`,s=e.slice(a),c=s.search(/\n\s*\n/),l=c===-1?s.length:c;n.push({id:o,index:a,length:l,svg:``,kind:`error`,placeholder:t}),r+=t,i=a+l}}}return{text:r,blocks:n}}function T(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}var ht=/["'](?:subtasks|employee_config|agent_phases|orchestration_plan)["']\s*:/,gt=/(^|\n)(?:## Approved Plan \((?:authoritative|auto-injected by orchestrator)[^\n]*\)|\[PABCD — [A-Z]:[^\n]*\]|\[PLANNING MODE[^\n]*\]|\[PLAN AUDIT[^\n]*\]|The approved plan is already injected above)/m;function _t(e){let t=gt.exec(e);return!t||t.index<0?e:e.slice(0,t.index).trim()}function E(e){let t=e.replace(/```json\n([\s\S]*?)\n```/g,(e,t)=>ht.test(t)?``:e);return t=t.replace(/\{[^{}]*"subtasks"\s*:\s*\[[\s\S]*?\]\s*\}/g,``).trim(),_t(t)}function vt(e){let t=[],n=[],r=e.replace(/```[\s\S]*?```/g,e=>(n.push(e),`\x00C${n.length-1}\x00`)).replace(/`[^`]+`/g,e=>(n.push(e),`\x00C${n.length-1}\x00`));return r=r.replace(/\$\$([\s\S]+?)\$\$/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!0}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\\\[([\s\S]+?)\\\]/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!0}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/(?<!\$)\$(?!\$)([^\n$]+?)\$(?!\$)/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!1}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\\\((.+?)\\\)/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!1}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\x00C(\d+)\x00/g,(e,t)=>n[Number(t)]),{text:r,blocks:t}}function yt(t,n,r=!1){return t.replace(/\x00MATH-(\d+)\x00/g,(t,i)=>{let a=n[Number(i)];if(!a)return`<code title="math placeholder error">[math error]</code>`;if(r)return a.displayMode?`<div class="math-placeholder">${T(a.tex)}</div>`:`<code class="math-placeholder">${T(a.tex)}</code>`;try{return e.renderToString(a.tex,{displayMode:a.displayMode,throwOnError:!1})}catch{return a.displayMode?`<pre><code>${T(a.tex)}</code></pre>`:`<code>${T(a.tex)}</code>`}})}var bt=`http://www.w3.org/2000/svg`,xt=new Set([`a`,`area`,`link`]),St=[`fill`,`stroke`,`filter`,`mask`,`clip-path`,`marker-start`,`marker-mid`,`marker-end`,`cursor`],D=null;function Ct(){let e=r;return typeof e.sanitize==`function`&&typeof e.addHook==`function`?e:typeof window<`u`?e(window):{sanitize:e=>e,addHook:()=>void 0}}function wt(e){e.addHook(`afterSanitizeAttributes`,e=>{let t=e.tagName.toLowerCase();if(e.namespaceURI===bt||!xt.has(t)){let t=e.getAttribute(`href`)||``;t&&!t.startsWith(`#`)&&e.removeAttribute(`href`)}let n=e.getAttributeNS(`http://www.w3.org/1999/xlink`,`href`)||e.getAttribute(`xlink:href`)||``;if(n&&!n.startsWith(`#`)&&(e.removeAttributeNS(`http://www.w3.org/1999/xlink`,`href`),e.removeAttribute(`xlink:href`)),t===`image`||t===`feimage`){let t=e.getAttribute(`src`)||``;t&&!t.startsWith(`#`)&&e.removeAttribute(`src`)}if(e.hasAttribute(`style`)){let t=e.style?.cssText||``;if(/url\s*\(/i.test(t)){let n=t.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`);e.style.cssText=n}}for(let t of St){if(!e.hasAttribute(t))continue;let n=e.getAttribute(t)||``;if(/url\s*\(/i.test(n)){let r=n.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`);e.setAttribute(t,r)}}})}function Tt(){return D||(D=Ct(),wt(D),D)}function O(){return Tt()}function Et(e){let t=O().sanitize(e,{USE_PROFILES:{svg:!0,svgFilters:!0},FORBID_TAGS:[`script`,`iframe`,`object`,`embed`,`form`,`input`,`foreignObject`,`animate`,`set`,`animateTransform`,`animateMotion`],FORBID_ATTR:[`onerror`,`onclick`,`onload`,`onmouseover`,`onfocus`,`onblur`,`background`]}),n=document.createElement(`div`);n.innerHTML=t;for(let e of n.querySelectorAll(`style`)){let t=e.textContent||``;t=t.replace(/@import\b[^;]*;?/gi,`/* stripped */`),t=t.replace(/@font-face\s*\{[^}]*\}/gi,`/* stripped */`),t=t.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`),e.textContent=t}return n.innerHTML}function k(e){return O().sanitize(e,{USE_PROFILES:{html:!0,svg:!0,svgFilters:!0},FORBID_TAGS:[`script`,`style`,`iframe`,`object`,`embed`,`form`,`input`,`foreignObject`,`animate`,`set`,`animateTransform`,`animateMotion`],FORBID_ATTR:[`onerror`,`onclick`,`onload`,`onmouseover`,`onfocus`,`onblur`,`background`],ADD_TAGS:[`use`],ADD_ATTR:[`aria-hidden`,`xmlns`,`viewBox`,`role`,`aria-label`,`data-jaw-svg`,`data-jaw-kind`,`data-mermaid-code-raw`,`href`,`xlink:href`]})}var Dt=`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12c0 0 2-4 6-4 1 0 2 .5 3 1l3-6c0 0 1 5 3 7 1.5 1.5 5 2 5 2s-1 4-5 4c-1 0-2-.3-3-.8L12 18c0 0-2-1-4-1-4 0-6-5-6-5z"/><circle cx="17" cy="11" r="0.5" fill="currentColor" stroke="none"/><path d="M7 12l1 2"/><path d="M9.5 12l1 2"/></svg>`,A=14,Ot=16;function j(e,t=Ot){return Ce(e,{size:t})}var M={check:j(Oe),error:j(it),warning:j(Ve),skip:j(Ie),tool:j(Xe),thinking:j(Te),search:j(Le),web:j(ye),exec:j(Qe),compacting:j(rt),plan:j(Fe),brain:j(Ye),heartPulse:j(se),lock:j(le),lockOpen:j(tt),key:j(ue),settings:j(We),file:j(fe),trash:j(Pe),lightbulb:j(de),refresh:j(Je),mic:j(nt),clipboard:j(we),robot:j(ge),palette:j(et),link:j(Ee),salute:j(He),shark:Dt,user:j(ce),paperclip:j(Ne),save:j(Re),gamepad:j(be),house:j(xe),radio:j(Ge),folder:j(Se),pencil:j(ze),chart:j(_e),hourglass:j(Ue),target:j(qe),ban:j(je),play:j(Be),stop:j(Ze),close:j(Ke,A),send:j($e),copy:j(ve,A),download:j(he,A),checkSimple:j(pe,A),chevronLeft:j(De,A),chevronRight:j(me,A),chevronDown:j(ke,A),arrowLeft:j(Me,A),arrowRight:j(Ae,A)},kt={"✅":`check`,"❌":`error`,"🔧":`tool`,"⏭":`skip`,"🧠":`brain`,"💓":`heartPulse`,"🔒":`lock`,"🔓":`lockOpen`,"🔑":`key`,"⚙":`settings`,"⚙️":`settings`,"📄":`file`,"🗑":`trash`,"🗑️":`trash`,"⚠":`warning`,"⚠️":`warning`,"💡":`lightbulb`,"🦈":`shark`,"👤":`user`,"💭":`thinking`,"🔍":`search`,"🌐":`web`,"⚡":`exec`,"🗜":`compacting`,"🗜️":`compacting`,"📝":`plan`,"📑":`clipboard`,"🤖":`robot`,"📋":`clipboard`,"🔄":`refresh`,"🎨":`palette`,"🎤":`mic`,"🔗":`link`,"🫡":`salute`,"📎":`paperclip`,"💾":`save`,"🎮":`gamepad`,"🏠":`house`,"📡":`radio`,"📂":`folder`,"✏️":`pencil`,"📊":`chart`,"🎙️":`mic`,"⏳":`hourglass`,"🎯":`target`,"📨":`send`,"🚫":`ban`,"▶":`play`};function At(e){let t=kt[e];return t?M[t]:e}function jt(e){return e===`✅`?`done`:e===`❌`?`error`:null}function Mt(e=document.body){let t=e.querySelectorAll(`[data-icon]`);for(let e of t){let t=e.dataset.icon;t&&M[t]&&(e.innerHTML=M[t],e.classList.add(`icon-hydrated`))}}function Nt(e){return e instanceof Error?e.message:String(e)}function Pt(){return window.cliJawDesktop?.clipboard??null}async function N(e){try{let t=Pt();if(t){let n=await t.writeText(e);return n.ok?{ok:!0}:{ok:!1,error:n.error??`Clipboard bridge rejected the copy request.`}}return navigator.clipboard?.writeText?(await navigator.clipboard.writeText(e),{ok:!0}):{ok:!1,error:`Clipboard API is unavailable.`}}catch(e){return{ok:!1,error:Nt(e)}}}function Ft(e){e.querySelector(`.mermaid-zoom-btn`)?.remove(),e.querySelector(`.mermaid-copy-btn`)?.remove(),e.querySelector(`.mermaid-save-btn`)?.remove();let t=document.createElement(`button`);t.className=`mermaid-zoom-btn`,t.type=`button`,t.ariaLabel=`Expand diagram`,t.title=`Expand`,t.textContent=`⤢`,e.appendChild(t);let n=document.createElement(`button`);n.className=`mermaid-save-btn`,n.type=`button`,n.ariaLabel=`Save as image`,n.title=`Save`,n.innerHTML=M.download,e.appendChild(n);let r=document.createElement(`button`);r.className=`mermaid-copy-btn`,r.type=`button`,r.ariaLabel=`Copy source`,r.title=`Copy`,r.innerHTML=M.copy,e.appendChild(r)}var It=!1;function Lt(){It||(It=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`.diagram-copy-btn`);if(n){let e=n.closest(`.diagram-container`);if(!e)return;let t=``;if(e.dataset.widgetHtml)try{t=decodeURIComponent(escape(atob(e.dataset.widgetHtml)))}catch{return}else{let n=e.querySelector(`svg`);n&&(t=n.outerHTML)}t&&P(n,t,`copy`);return}let r=t?.closest(`.mermaid-copy-btn`);if(r){let e=r.closest(`.mermaid-container`);if(!e)return;let t=e.dataset.mermaidCode||``;t&&P(r,t,`copy`);return}let i=t?.closest(`.diagram-save-btn`);if(i){let e=i.closest(`.diagram-container`);if(!e)return;if(e.dataset.widgetHtml){let t=e.querySelector(`iframe`);t?.contentWindow&&(t.contentWindow.postMessage({type:`jaw-request-screenshot`},`*`),P(i,``,`save`));return}let t=e.querySelector(`svg`);t&&I(t,i);return}let a=t?.closest(`.mermaid-save-btn`);if(a){let e=a.closest(`.mermaid-container`);if(!e)return;let t=e.querySelector(`svg`);t&&I(t,a);return}}))}function P(e,t,n){let r=()=>{let t=e.innerHTML;e.innerHTML=M.checkSimple,e.classList.add(`copied`),setTimeout(()=>{e.innerHTML=t,e.classList.remove(`copied`)},1500)};n===`copy`?N(t).then(e=>{e.ok&&r()}):r()}function F(e,t){let n=e.children,r=t.children,i=[`fill`,`stroke`,`stroke-width`,`color`,`opacity`,`rx`,`ry`,`font-size`,`font-weight`,`font-family`,`text-anchor`,`dominant-baseline`];for(let e=0;e<n.length;e++){let t=n[e],a=r[e];if(!t||!a)continue;let o=getComputedStyle(t);for(let e of i){let t=o.getPropertyValue(e);t&&a.style.setProperty(e,t)}t.children.length&&F(t,a)}}function I(e,t){let n=e.cloneNode(!0);F(e,n);let r=e.getBoundingClientRect();n.getAttribute(`width`)||n.setAttribute(`width`,String(r.width)),n.getAttribute(`height`)||n.setAttribute(`height`,String(r.height));let i=new XMLSerializer().serializeToString(n),a=`data:image/svg+xml;charset=utf-8,`+encodeURIComponent(i),o=new Image;o.onload=()=>{let e=document.createElement(`canvas`);e.width=o.naturalWidth*2,e.height=o.naturalHeight*2;let n=e.getContext(`2d`);n.scale(2,2),n.drawImage(o,0,0),e.toBlob(e=>{e&&(L(e,`diagram-${Date.now()}.png`),P(t,``,`save`))},`image/png`)},o.onerror=()=>{L(new Blob([i],{type:`image/svg+xml;charset=utf-8`}),`diagram-${Date.now()}.svg`),P(t,``,`save`)},o.src=a}function L(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function Rt(e){return e.kind===`partial`?`<div class="diagram-container diagram-loading" role="status"
3
3
  aria-label="Diagram loading"><div class="diagram-spinner"></div></div>`:e.kind===`error`?`<div class="diagram-container diagram-error" role="alert">
4
4
  Malformed SVG: unclosed element</div>`:`<div class="diagram-container diagram-svg" tabindex="0"
5
5
  role="figure" aria-label="SVG diagram">
@@ -15,7 +15,7 @@ import{A as e,L as t,R as n,S as r,_ as i,a,b as o,c as s,d as c,f as l,g as u,h
15
15
  <div class="mermaid-error-title">${M.warning} ${T(S(`mermaid.renderFail`)||`Mermaid render failed`)}</div>
16
16
  <div class="mermaid-error-msg">${T(n.slice(0,200))}</div>
17
17
  <pre class="mermaid-error-code"><code>${T(t)}</code></pre>
18
- </div>`}async function qt(e){if(!e.isConnected){delete e.dataset.mermaidQueued,delete e.dataset.mermaidInflight;return}e.classList.remove(`mermaid-pending`);let t=e.dataset.mermaidCodeRaw||``,n=at(t?decodeURIComponent(t):e.textContent||``);e.dataset.mermaidCode=n;let r=`mermaid-${++G}`;e.dataset.mermaidInflight=`1`;try{let t=await U();W();let i;try{({svg:i}=await t.render(r,n))}catch(e){let a=_(n);if(!a)throw e;W(),{svg:i}=await t.render(`${r}-retry`,a)}if(!e.isConnected)return;e.innerHTML=Et(i),e.classList.add(`mermaid-rendered`),delete e.dataset.mermaidCodeRaw,Ft(e),R(e)}catch(t){Kt(e,n,t?.message||t?.str||`Unknown error`)}finally{delete e.dataset.mermaidQueued,delete e.dataset.mermaidInflight}}function Jt(e){e.dataset.mermaidQueued!==`1`&&(e.dataset.mermaidQueued=`1`,H=H.then(()=>qt(e)).catch(e=>{console.error(`[mermaid:queue] render failed, keeping queue alive:`,e)}))}async function Yt(e,t={}){let n=(e||document).querySelectorAll(`.mermaid-pending`);if(n.length){Gt();for(let e of n)if(e.dataset.mermaidQueued!==`1`){if(t.immediate){let t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight;if(t.bottom>=-200&&t.top<=n+200){K.unobserve(e),Jt(e);continue}}K.observe(e)}}}function Xt(e){if(!K)return;let t=[`.mermaid-pending`,`[data-mermaid-queued="1"]`,`[data-mermaid-inflight="1"]`].join(`,`),n=[];e.matches(t)&&n.push(e),e.querySelectorAll(t).forEach(e=>n.push(e));for(let e of n)K.unobserve(e),delete e.dataset.mermaidQueued,delete e.dataset.mermaidQueuedAt,delete e.dataset.mermaidInflight,!e.classList.contains(`mermaid-rendered`)&&(e.dataset.mermaidCodeRaw||e.dataset.mermaidCode)&&e.classList.add(`mermaid-pending`)}function Zt(){if(V)return;let e=()=>{U().catch(()=>{})};typeof window.requestIdleCallback==`function`?window.requestIdleCallback(e,{timeout:2e3}):setTimeout(e,500)}function q(e){if(e===window.location.origin)return!0;try{let t=new URL(e).hostname;return t===`localhost`||t===`127.0.0.1`||t===`::1`||t===`[::1]`}catch{return!1}}function J(){if(window.parent===window)return null;try{let e=window.parent.location.origin;if(e&&e!==`null`&&q(e))return e}catch{}try{if(document.referrer){let e=new URL(document.referrer).origin;if(q(e))return e}}catch{}return null}function Qt(e){let t=J();return!t||!e.trim()?!1:(window.parent.postMessage({type:`jaw-preview-open-notes`,path:e},t),!0)}var $t=new Set([`.git`,`.assets`,`_templates`,`_snippets`,`_plugins`]),en=`.md`;function Y(e){return e.replace(/\\/g,`/`).trim()}function tn(e){let t=e.split(`/`)[0]??``;return $t.has(t)}function nn(e){return!(!e||e.startsWith(`/`)||e.includes(`..`)||!e.endsWith(en)||tn(e))}function rn(e,t){let n=Y(e),r=Y(t).replace(/\/+$/,``);if(!r||n===r)return null;let i=`${r}/`;if(!n.startsWith(i))return null;let a=n.slice(i.length);return nn(a)?a:null}function an(e){let t=Y(e),n=t.match(/^(\/Users\/[^/]+)/);if(n)return n[1];let r=t.match(/^(\/home\/[^/]+)/);return r?r[1]:null}function on(e,t){if(!e.startsWith(`~/`))return e;let n=an(t);return n?`${n}/${e.slice(2)}`:e}function sn(e,t){let n=Y(e);return n?!n.startsWith(`~/`)&&nn(n)?n:t&&rn(on(n,t),t)||null:null}var cn=/(?:~\/[^\s)`\]"'<>]+|\/(?:Users|home|tmp|var|opt|private)\/[^\s)`\]"'<>]+)/g,ln=/(?:^|[\s([{"'`])([A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*\.md)\b/g,un=/[.,!?:;]+$/,dn=/^(?:~\/|\/(?:Users|home|tmp|var|opt|private)\/)/,X,fn=null;function pn(e){return dn.test(e)}function mn(e){try{let t=new URL(e,window.location.href);return t.protocol!==`http:`&&t.protocol!==`https:`||t.username||t.password?!1:t.origin!==window.location.origin}catch{return!1}}function hn(e){e.target=`_blank`;let t=new Set(e.rel.split(/\s+/).filter(Boolean));t.add(`noopener`),t.add(`noreferrer`),e.rel=[...t].join(` `)}async function gn(){return X===void 0?J()?(fn||=h(`/api/dashboard/notes/info`,`GET`,null).then(e=>typeof e?.root==`string`?e.root:null).catch(()=>null).then(e=>(X=e,e)),fn):(X=null,null):X}function _n(e,t){t&&t.classList.add(`opening`),h(`/api/file/open`,`POST`,{path:e}).then(e=>{t?.classList.remove(`opening`),e?.ok===!1?(t?.classList.add(`open-failed`),t&&(t.title=e?.error||`Failed to open`),setTimeout(()=>{t?.classList.remove(`open-failed`),t&&(t.title=``)},2e3)):(t?.classList.add(`opened`),setTimeout(()=>t?.classList.remove(`opened`),1500))}).catch(()=>{t?.classList.remove(`opening`),t?.classList.add(`open-failed`),setTimeout(()=>t?.classList.remove(`open-failed`),2e3)})}function vn(e,t,n){let r=document.createElement(`span`);r.className=`file-path-link`,r.setAttribute(`data-file-path`,t),n&&r.setAttribute(`data-vault-rel`,n),r.setAttribute(`role`,`button`),r.setAttribute(`tabindex`,`0`),r.textContent=t,e.appendChild(r)}function yn(e){cn.lastIndex=0;let t=[],n;for(;n=cn.exec(e);){let e=n[0],r=e.replace(un,``);r.length<4||t.push({index:n.index,raw:e,clean:r})}return t}function bn(e){ln.lastIndex=0;let t=[],n;for(;n=ln.exec(e);){let e=n[0].slice(0,n[0].length-n[1].length),r=n[1],i=n.index+e.length;t.push({index:i,raw:r,clean:r})}return t}function xn(e,t){let n=[...e,...t].sort((e,t)=>e.index-t.index),r=[],i=-1;for(let e of n)e.index<i||(r.push(e),i=e.index+e.raw.length);return r}function Sn(e,t=null){let n=new Set([`PRE`,`A`,`BUTTON`,`TEXTAREA`,`INPUT`,`SCRIPT`,`STYLE`]),r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(t){let r=t.parentElement;for(;r&&r!==e;){if(n.has(r.tagName)||r.classList.contains(`file-path-link`)||r.tagName===`CODE`&&r.parentElement?.tagName===`PRE`)return NodeFilter.FILTER_REJECT;r=r.parentElement}return NodeFilter.FILTER_ACCEPT}}),i=new Map,a;for(;a=r.nextNode();){let e=a.textContent||``,t=xn(yn(e),bn(e));t.length&&i.set(a,t)}for(let[e,n]of i){let r=e.textContent||``,i=e.parentNode;if(!i)continue;let a=document.createDocumentFragment(),o=0;for(let{index:e,raw:i,clean:s}of n){e>o&&a.appendChild(document.createTextNode(r.slice(o,e))),vn(a,s,sn(s,t));let n=i.slice(s.length);n&&a.appendChild(document.createTextNode(n)),o=e+i.length}o<r.length&&a.appendChild(document.createTextNode(r.slice(o))),i.replaceChild(a,e)}}async function Cn(e){Sn(e,await gn())}async function wn(e,t){let n=await gn(),r=t.getAttribute(`data-vault-rel`)||sn(e,n);if(r&&J()&&Qt(r)){t.classList.add(`opened`),setTimeout(()=>t.classList.remove(`opened`),1500);return}_n(e,t)}var Z=!1;function Tn(){Z||(Z=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`a`),r=n?.getAttribute(`href`)||``;if(n&&mn(r)){hn(n);return}if(n&&pn(r)){e.preventDefault(),n.classList.add(`file-path-link`),wn(r,n);return}let i=t?.closest(`.file-path-link`);if(!i)return;let a=i.getAttribute(`data-file-path`);a&&(e.preventDefault(),wn(a,i))}),document.addEventListener(`keydown`,e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target;t?.classList.contains(`file-path-link`)&&(e.preventDefault(),t.click())}))}var Q=null,$=null;function En(){$&&clearTimeout($),Q&&=(cancelAnimationFrame(Q),null),$=setTimeout(()=>{$=null,Q=requestAnimationFrame(()=>{Q=null,Yt(),Ht(),R();let e=document.getElementById(`chatMessages`);e&&Cn(e)})},100)}function Dn(){$&&=(clearTimeout($),null),Q&&=(cancelAnimationFrame(Q),null)}var On=!1;function kn(e,t){N(t).then(t=>{if(!t.ok)return;let n=e.textContent||``;e.textContent=S(`code.copied`),e.classList.add(`copied`),setTimeout(()=>{e.textContent=n,e.classList.remove(`copied`)},1500)})}function An(){On||(On=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`.code-copy-btn`);if(n){let e=n.closest(`.code-block`);if(!e)return;let t=e.querySelector(`pre code`);if(!t)return;kn(n,t.textContent||``);return}let r=t?.closest(`.code-lang-label`);if(!r)return;let i=r.closest(`.code-block-wrapper`);if(!i)return;let a=i.querySelector(`pre code`);a&&kn(r,a.textContent||``)}))}function jn(){An(),Lt(),Tn()}var Mn=!1;function Nn(){if(Mn)return!0;let e=new n;return e.code=function({text:e,lang:t}){if(t===`mermaid`)return`<div class="mermaid-container mermaid-pending" data-mermaid-code-raw="${encodeURIComponent(e)}" role="status" aria-label="Diagram loading">
18
+ </div>`}async function qt(e){if(!e.isConnected){delete e.dataset.mermaidQueued,delete e.dataset.mermaidInflight;return}e.classList.remove(`mermaid-pending`);let t=e.dataset.mermaidCodeRaw||``,n=at(t?decodeURIComponent(t):e.textContent||``);e.dataset.mermaidCode=n;let r=`mermaid-${++G}`;e.dataset.mermaidInflight=`1`;try{let t=await U();W();let i;try{({svg:i}=await t.render(r,n))}catch(e){let a=_(n);if(!a)throw e;W(),{svg:i}=await t.render(`${r}-retry`,a)}if(!e.isConnected)return;e.innerHTML=Et(i),e.classList.add(`mermaid-rendered`),delete e.dataset.mermaidCodeRaw,Ft(e),R(e)}catch(t){Kt(e,n,t?.message||t?.str||`Unknown error`)}finally{delete e.dataset.mermaidQueued,delete e.dataset.mermaidInflight}}function Jt(e){e.dataset.mermaidQueued!==`1`&&(e.dataset.mermaidQueued=`1`,H=H.then(()=>qt(e)).catch(e=>{console.error(`[mermaid:queue] render failed, keeping queue alive:`,e)}))}async function Yt(e,t={}){let n=(e||document).querySelectorAll(`.mermaid-pending`);if(n.length){Gt();for(let e of n)if(e.dataset.mermaidQueued!==`1`){if(t.immediate){let t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight;if(t.bottom>=-200&&t.top<=n+200){K.unobserve(e),Jt(e);continue}}K.observe(e)}}}function Xt(e){if(!K)return;let t=[`.mermaid-pending`,`[data-mermaid-queued="1"]`,`[data-mermaid-inflight="1"]`].join(`,`),n=[];e.matches(t)&&n.push(e),e.querySelectorAll(t).forEach(e=>n.push(e));for(let e of n)K.unobserve(e),delete e.dataset.mermaidQueued,delete e.dataset.mermaidQueuedAt,delete e.dataset.mermaidInflight,!e.classList.contains(`mermaid-rendered`)&&(e.dataset.mermaidCodeRaw||e.dataset.mermaidCode)&&e.classList.add(`mermaid-pending`)}function Zt(){if(V)return;let e=()=>{U().catch(()=>{})};typeof window.requestIdleCallback==`function`?window.requestIdleCallback(e,{timeout:2e3}):setTimeout(e,500)}function q(e){if(e===window.location.origin)return!0;try{let t=new URL(e).hostname;return t===`localhost`||t===`127.0.0.1`||t===`::1`||t===`[::1]`}catch{return!1}}function J(){if(window.parent===window)return null;try{let e=window.parent.location.origin;if(e&&e!==`null`&&q(e))return e}catch{}try{if(document.referrer){let e=new URL(document.referrer).origin;if(q(e))return e}}catch{}return null}function Qt(e){let t=J();return!t||!e.trim()?!1:(window.parent.postMessage({type:`jaw-preview-open-notes`,path:e},t),!0)}function $t(e){let t=J();return!t||!e.trim()?!1:(window.parent.postMessage({type:`jaw-preview-open-doc`,path:e},t),!0)}function en(e,t){let n=J();return!n||e.length===0?!1:(window.parent.postMessage({type:`dashboard.invalidate`,topics:e,reason:t},n),!0)}var tn=new Set([`.git`,`.assets`,`_templates`,`_snippets`,`_plugins`]),nn=`.md`;function Y(e){return e.replace(/\\/g,`/`).trim()}function rn(e){let t=e.split(`/`)[0]??``;return tn.has(t)}function an(e){return!(!e||e.startsWith(`/`)||e.includes(`..`)||!e.endsWith(nn)||rn(e))}function on(e,t){let n=Y(e),r=Y(t).replace(/\/+$/,``);if(!r||n===r)return null;let i=`${r}/`;if(!n.startsWith(i))return null;let a=n.slice(i.length);return an(a)?a:null}function sn(e){let t=Y(e),n=t.match(/^(\/Users\/[^/]+)/);if(n)return n[1];let r=t.match(/^(\/home\/[^/]+)/);return r?r[1]:null}function cn(e,t){if(!e.startsWith(`~/`))return e;let n=sn(t);return n?`${n}/${e.slice(2)}`:e}function ln(e,t){let n=Y(e);return n?!n.startsWith(`~/`)&&an(n)?n:t&&on(cn(n,t),t)||null:null}var un=/(?:~\/[^\s)`\]"'<>]+|\/(?:Users|home|tmp|var|opt|private)\/[^\s)`\]"'<>]+)/g,dn=/(?:^|[\s([{"'`])([A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*\.md)\b/g,fn=/[.,!?:;]+$/,pn=/^(?:~\/|\/(?:Users|home|tmp|var|opt|private)\/)/,X,mn=null;function hn(e){return pn.test(e)}function gn(e){try{let t=new URL(e,window.location.href);return t.protocol!==`http:`&&t.protocol!==`https:`||t.username||t.password?!1:t.origin!==window.location.origin}catch{return!1}}function _n(e){e.target=`_blank`;let t=new Set(e.rel.split(/\s+/).filter(Boolean));t.add(`noopener`),t.add(`noreferrer`),e.rel=[...t].join(` `)}async function vn(){return X===void 0?J()?(mn||=h(`/api/dashboard/notes/info`,`GET`,null).then(e=>typeof e?.root==`string`?e.root:null).catch(()=>null).then(e=>(X=e,e)),mn):(X=null,null):X}function yn(e,t){t&&t.classList.add(`opening`),h(`/api/file/open`,`POST`,{path:e}).then(e=>{t?.classList.remove(`opening`),e?.ok===!1?(t?.classList.add(`open-failed`),t&&(t.title=e?.error||`Failed to open`),setTimeout(()=>{t?.classList.remove(`open-failed`),t&&(t.title=``)},2e3)):(t?.classList.add(`opened`),setTimeout(()=>t?.classList.remove(`opened`),1500))}).catch(()=>{t?.classList.remove(`opening`),t?.classList.add(`open-failed`),setTimeout(()=>t?.classList.remove(`open-failed`),2e3)})}function bn(e,t,n){let r=document.createElement(`span`);r.className=`file-path-link`,r.setAttribute(`data-file-path`,t),n&&r.setAttribute(`data-vault-rel`,n),r.setAttribute(`role`,`button`),r.setAttribute(`tabindex`,`0`);let i=t.split(`/`).pop()||t,a=/\.\w{1,10}$/.test(i);r.textContent=a?i:t,a&&(r.title=t),e.appendChild(r)}function xn(e){un.lastIndex=0;let t=[],n;for(;n=un.exec(e);){let e=n[0],r=e.replace(fn,``);r.length<4||t.push({index:n.index,raw:e,clean:r})}return t}function Sn(e){dn.lastIndex=0;let t=[],n;for(;n=dn.exec(e);){let e=n[0].slice(0,n[0].length-n[1].length),r=n[1],i=n.index+e.length;t.push({index:i,raw:r,clean:r})}return t}function Cn(e,t){let n=[...e,...t].sort((e,t)=>e.index-t.index),r=[],i=-1;for(let e of n)e.index<i||(r.push(e),i=e.index+e.raw.length);return r}function wn(e,t=null){let n=new Set([`PRE`,`A`,`BUTTON`,`TEXTAREA`,`INPUT`,`SCRIPT`,`STYLE`]),r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(t){let r=t.parentElement;for(;r&&r!==e;){if(n.has(r.tagName)||r.classList.contains(`file-path-link`)||r.tagName===`CODE`&&r.parentElement?.tagName===`PRE`)return NodeFilter.FILTER_REJECT;r=r.parentElement}return NodeFilter.FILTER_ACCEPT}}),i=new Map,a;for(;a=r.nextNode();){let e=a.textContent||``,t=Cn(xn(e),Sn(e));t.length&&i.set(a,t)}for(let[e,n]of i){let r=e.textContent||``,i=e.parentNode;if(!i)continue;let a=document.createDocumentFragment(),o=0;for(let{index:e,raw:i,clean:s}of n){e>o&&a.appendChild(document.createTextNode(r.slice(o,e))),bn(a,s,ln(s,t));let n=i.slice(s.length);n&&a.appendChild(document.createTextNode(n)),o=e+i.length}o<r.length&&a.appendChild(document.createTextNode(r.slice(o))),i.replaceChild(a,e)}}async function Z(e){wn(e,await vn())}async function Tn(e,t){let n=await vn(),r=t.getAttribute(`data-vault-rel`)||ln(e,n);if(r&&J()&&Qt(r)){t.classList.add(`opened`),setTimeout(()=>t.classList.remove(`opened`),1500);return}if(/\.(md|mdx)$/i.test(e)&&J()&&$t(e)){t.classList.add(`opened`),setTimeout(()=>t.classList.remove(`opened`),1500);return}yn(e,t)}var En=!1;function Dn(){En||(En=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`a`),r=n?.getAttribute(`href`)||``;if(n&&gn(r)){_n(n);return}if(n&&hn(r)){e.preventDefault(),n.classList.add(`file-path-link`),Tn(r,n);return}let i=t?.closest(`.file-path-link`);if(!i)return;let a=i.getAttribute(`data-file-path`);a&&(e.preventDefault(),Tn(a,i))}),document.addEventListener(`keydown`,e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target;t?.classList.contains(`file-path-link`)&&(e.preventDefault(),t.click())}))}var Q=null,$=null;function On(){$&&clearTimeout($),Q&&=(cancelAnimationFrame(Q),null),$=setTimeout(()=>{$=null,Q=requestAnimationFrame(()=>{Q=null,Yt(),Ht(),R();let e=document.getElementById(`chatMessages`);e&&Z(e)})},100)}function kn(){$&&=(clearTimeout($),null),Q&&=(cancelAnimationFrame(Q),null)}var An=!1;function jn(e,t){N(t).then(t=>{if(!t.ok)return;let n=e.textContent||``;e.textContent=S(`code.copied`),e.classList.add(`copied`),setTimeout(()=>{e.textContent=n,e.classList.remove(`copied`)},1500)})}function Mn(){An||(An=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`.code-copy-btn`);if(n){let e=n.closest(`.code-block`);if(!e)return;let t=e.querySelector(`pre code`);if(!t)return;jn(n,t.textContent||``);return}let r=t?.closest(`.code-lang-label`);if(!r)return;let i=r.closest(`.code-block-wrapper`);if(!i)return;let a=i.querySelector(`pre code`);a&&jn(r,a.textContent||``)}))}function Nn(){Mn(),Lt(),Dn()}var Pn=!1;function Fn(){if(Pn)return!0;let e=new n;return e.code=function({text:e,lang:t}){if(t===`mermaid`)return`<div class="mermaid-container mermaid-pending" data-mermaid-code-raw="${encodeURIComponent(e)}" role="status" aria-label="Diagram loading">
19
19
  <div class="mermaid-skeleton">
20
20
  <div class="mermaid-skeleton-spinner"></div>
21
21
  <div class="mermaid-skeleton-text">Rendering diagram…</div>
@@ -23,6 +23,6 @@ import{A as e,L as t,R as n,S as r,_ as i,a,b as o,c as s,d as c,f as l,g as u,h
23
23
  </div>`;if(t?.trim().toLowerCase()===`diagram-html`)return`<div class="diagram-widget-pending" data-diagram-html="${btoa(unescape(encodeURIComponent(e)))}"
24
24
  role="status" aria-label="Interactive widget loading">
25
25
  <div class="diagram-spinner"></div>
26
- </div>`;let n=Vt(e,t),r=t?T(t):``,i=S(`code.copy`)||`Copy`;return`<div class="code-block"><div class="code-header"><span class="code-lang">${r}</span><button class="code-copy-btn" type="button" aria-label="${T(i)}">${T(i)}</button></div><pre><code class="hljs${t?` language-${T(t)}`:``}">${n}</code></pre></div>`},e.link=function({href:e,title:t,text:n}){return`<a href="${T(e||``)}" target="_blank" rel="noopener noreferrer"${t?` title="${T(t)}"`:``}>${n}</a>`},t.setOptions({renderer:e,gfm:!0,breaks:!1}),Mn=!0,!0}function Pn(e,n=!1){let r=E(e);if(!r)return`<em class="text-dim orchestrate-placeholder">`+T(S(`orchestrator.dispatching`))+`</em>`;let{text:i,fences:a}=ft(r.replace(/\n{3,}/g,`
26
+ </div>`;let n=Vt(e,t),r=t?T(t):``,i=S(`code.copy`)||`Copy`;return`<div class="code-block"><div class="code-header"><span class="code-lang">${r}</span><button class="code-copy-btn" type="button" aria-label="${T(i)}">${T(i)}</button></div><pre><code class="hljs${t?` language-${T(t)}`:``}">${n}</code></pre></div>`},e.link=function({href:e,title:t,text:n}){return`<a href="${T(e||``)}" target="_blank" rel="noopener noreferrer"${t?` title="${T(t)}"`:``}>${n}</a>`},t.setOptions({renderer:e,gfm:!0,breaks:!1}),Pn=!0,!0}function In(e,n=!1){let r=E(e);if(!r)return`<em class="text-dim orchestrate-placeholder">`+T(S(`orchestrator.dispatching`))+`</em>`;let{text:i,fences:a}=ft(r.replace(/\n{3,}/g,`
27
27
 
28
- `)),{text:o,blocks:s}=mt(i,n),{text:c,blocks:l}=vt(pt(o,a));B(),Nn();let u=dt(c),d=t.parse(u);return d=d.replace(/<table/g,`<div class="table-wrapper"><table`).replace(/<\/table>/g,`</table></div>`),d=yt(d,l,n),d=k(d),d=zt(d,s),n||En(),jn(),d}export{S,E as _,J as a,st as b,Yt as c,M as d,At as f,T as g,k as h,q as i,Wt as l,Mt as m,Dn as n,Zt as o,jt as p,Cn as r,Xt as s,Pn as t,N as u,ut as v,ct as x,lt as y};
28
+ `)),{text:o,blocks:s}=mt(i,n),{text:c,blocks:l}=vt(pt(o,a));B(),Fn();let u=dt(c),d=t.parse(u);return d=d.replace(/<table/g,`<div class="table-wrapper"><table`).replace(/<\/table>/g,`</table></div>`),d=yt(d,l,n),d=k(d),d=zt(d,s),n||On(),Nn(),d}export{S as C,ct as S,T as _,en as a,lt as b,Xt as c,N as d,M as f,k as g,Mt as h,q as i,Yt as l,jt as m,kn as n,J as o,At as p,Z as r,Zt as s,In as t,Wt as u,E as v,st as x,ut as y};
@@ -0,0 +1 @@
1
+ import{E as e,O as t,x as n}from"./settings-D9jTceN0.js";export{n as loadSettings,e as savePerCli,t as updateSettings};
@@ -0,0 +1,151 @@
1
+ import{t as e}from"./state-D04-chBy.js";import{i as t,n,r}from"./api-tVoG39dL.js";import{C as i,_ as a,a as o,f as s}from"./render-DFBujF8n.js";import{n as c,r as l}from"./provider-icons-CVVK5xUP.js";import{n as u,r as d}from"./locale-DT1WRaeJ.js";import{a as f,i as p,n as ee,o as m,t as h}from"./constants-s2UJodER.js";function te(e){let n=document.getElementById(`sttEngine`),r=document.getElementById(`sttGeminiKey`),i=document.getElementById(`sttGeminiModel`),a=document.getElementById(`sttGeminiModelCustom`),o=document.getElementById(`sttWhisperModel`),s=document.getElementById(`sttOpenaiBaseUrl`),c=document.getElementById(`sttOpenaiKey`),l=document.getElementById(`sttOpenaiModel`),u=document.getElementById(`sttVertexJson`);if(n&&(n.value=e.engine||`auto`),r&&(r.placeholder=e.geminiKeySet?g(e.geminiKeyLast4):`AIza...`),i){let t=e.geminiModel||`gemini-2.5-flash-lite`;Array.from(i.options).some(e=>e.value===t)?i.value=t:(i.value=`__custom__`,a&&(a.value=t,a.style.display=``))}o&&(o.value=e.whisperModel||`mlx-community/whisper-large-v3-turbo`),s&&(s.value=e.openaiBaseUrl||``),c&&(c.placeholder=e.openaiKeySet?g(e.openaiKeyLast4):`sk-...`),l&&(l.value=e.openaiModel||``),u&&(u.value=e.vertexConfig||``);function d(){let e=n?.value||`auto`,t=e===`auto`||e===`gemini`,r=e===`openai`,i=e===`vertex`,a=e===`auto`||e===`whisper`;document.querySelectorAll(`.stt-gemini`).forEach(e=>e.style.display=t?``:`none`),document.querySelectorAll(`.stt-openai`).forEach(e=>e.style.display=r?``:`none`),document.querySelectorAll(`.stt-vertex`).forEach(e=>e.style.display=i?``:`none`),document.querySelectorAll(`.stt-whisper`).forEach(e=>e.style.display=a?``:`none`)}d();async function f(){let e={stt:{engine:n?.value||`auto`,geminiModel:(i?.value===`__custom__`?a?.value:i?.value)||`gemini-2.5-flash-lite`,whisperModel:o?.value||``,openaiBaseUrl:s?.value||``,openaiModel:l?.value||``,vertexConfig:u?.value||``}};r?.value&&(e.stt.geminiApiKey=r.value),c?.value&&(e.stt.openaiApiKey=c.value),console.log(`[stt] saving:`,{engine:e.stt.engine,hasGeminiKey:!!e.stt.geminiApiKey,hasOpenaiKey:!!e.stt.openaiApiKey});try{if(await t(`/api/settings`,`PUT`,e),r?.value){let e=r.value.slice(-4);r.value=``,r.placeholder=g(e)}if(c?.value){let e=c.value.slice(-4);c.value=``,c.placeholder=g(e)}}catch(e){console.error(`[stt] save failed:`,e)}}n?.addEventListener(`change`,()=>{d(),f()}),i?.addEventListener(`change`,()=>{a&&(a.style.display=i.value===`__custom__`?``:`none`),i.value!==`__custom__`&&f()}),a?.addEventListener(`blur`,f),r?.addEventListener(`blur`,()=>{r.value&&f()}),c?.addEventListener(`blur`,()=>{c.value&&f()}),s?.addEventListener(`blur`,f),l?.addEventListener(`blur`,f),o?.addEventListener(`blur`,f),u?.addEventListener(`blur`,f)}function g(e){return i(`stt.key.savedPlaceholder`,{last4:e||``})}async function ne(){let e=document.getElementById(`tgToken`)?.value.trim()||``,n=document.getElementById(`tgChatIds`)?.value.trim()||``;await t(`/api/settings`,`PUT`,{telegram:{token:e,allowedChatIds:n?n.split(`,`).map(e=>parseInt(e.trim(),10)).filter(e=>!isNaN(e)):[]}})}async function re(e){document.getElementById(`tgOn`)?.classList.toggle(`active`,e),document.getElementById(`tgOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{telegram:{enabled:e}})}async function ie(e){document.getElementById(`tgForwardOn`)?.classList.toggle(`active`,e),document.getElementById(`tgForwardOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{telegram:{forwardAll:e}})}async function ae(e){document.getElementById(`tgMentionOn`)?.classList.toggle(`active`,e),document.getElementById(`tgMentionOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{telegram:{mentionOnly:e}})}function oe(e){if(!e.telegram)return;let t=e.telegram;document.getElementById(`tgOn`)?.classList.toggle(`active`,!!t.enabled),document.getElementById(`tgOff`)?.classList.toggle(`active`,!t.enabled);let n=document.getElementById(`tgToken`);t.token&&n&&(n.value=t.token);let r=document.getElementById(`tgChatIds`);t.allowedChatIds?.length&&r&&(r.value=t.allowedChatIds.join(`, `));let i=t.forwardAll!==!1;document.getElementById(`tgForwardOn`)?.classList.toggle(`active`,i),document.getElementById(`tgForwardOff`)?.classList.toggle(`active`,!i);let a=t.mentionOnly!==!1;document.getElementById(`tgMentionOn`)?.classList.toggle(`active`,a),document.getElementById(`tgMentionOff`)?.classList.toggle(`active`,!a)}async function se(){let e=document.getElementById(`dcToken`)?.value.trim()||``,n=document.getElementById(`dcGuildId`)?.value.trim()||``,r=document.getElementById(`dcChannelIds`)?.value.trim()||``;await t(`/api/settings`,`PUT`,{discord:{token:e,guildId:n,channelIds:r?r.split(`,`).map(e=>e.trim()).filter(Boolean):[]}})}async function ce(e){document.getElementById(`dcOn`)?.classList.toggle(`active`,e),document.getElementById(`dcOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{discord:{enabled:e}})}async function le(e){document.getElementById(`dcForwardOn`)?.classList.toggle(`active`,e),document.getElementById(`dcForwardOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{discord:{forwardAll:e}})}async function ue(e){document.getElementById(`dcAllowBotsOn`)?.classList.toggle(`active`,e),document.getElementById(`dcAllowBotsOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{discord:{allowBots:e}})}async function de(e){document.getElementById(`dcMentionOn`)?.classList.toggle(`active`,e),document.getElementById(`dcMentionOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{discord:{mentionOnly:e}})}function fe(e){if(!e.discord)return;let t=e.discord;document.getElementById(`dcOn`)?.classList.toggle(`active`,!!t.enabled),document.getElementById(`dcOff`)?.classList.toggle(`active`,!t.enabled);let n=document.getElementById(`dcToken`);t.token&&n&&(n.value=t.token);let r=document.getElementById(`dcGuildId`);t.guildId&&r&&(r.value=t.guildId);let i=document.getElementById(`dcChannelIds`);t.channelIds?.length&&i&&(i.value=t.channelIds.join(`, `));let a=t.forwardAll!==!1;document.getElementById(`dcForwardOn`)?.classList.toggle(`active`,a),document.getElementById(`dcForwardOff`)?.classList.toggle(`active`,!a);let o=!!t.allowBots;document.getElementById(`dcAllowBotsOn`)?.classList.toggle(`active`,o),document.getElementById(`dcAllowBotsOff`)?.classList.toggle(`active`,!o);let s=!!t.mentionOnly;document.getElementById(`dcMentionOn`)?.classList.toggle(`active`,s),document.getElementById(`dcMentionOff`)?.classList.toggle(`active`,!s)}function pe(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.configured==`boolean`&&typeof t.activeInbound==`boolean`&&typeof t.sendCapable==`boolean`}function me(e){if(!e||typeof e!=`object`)return null;let t=e.channels;if(!t||typeof t!=`object`)return null;let n=t;return n.activeInbound!==`telegram`&&n.activeInbound!==`discord`||!pe(n.telegram)||!pe(n.discord)?null:{activeInbound:n.activeInbound,telegram:n.telegram,discord:n.discord}}function he(e){let t=[];return t.push(e.configured?i(`settings.channel.configured`):i(`settings.channel.notConfigured`)),e.sendCapable&&t.push(i(`settings.channel.sendCapable`)),e.activeInbound&&t.push(i(`settings.channel.activeInbound`)),t}function ge(e,t,n){let r=he(t).map(e=>`<span class="transport-status-chip">${a(e)}</span>`).join(``),o=n&&t.configured&&t.sendCapable&&!t.activeInbound?`<p class="transport-status-hint">${a(i(`settings.channel.sendOnlyHint`))}</p>`:``;return`
2
+ <div class="transport-status-block">
3
+ <div class="transport-status-label">${a(e)}</div>
4
+ <div class="transport-status-chips">${r}</div>
5
+ ${o}
6
+ </div>`}function _e(e,t){e.innerHTML=`
7
+ <h4 class="section-title-row">
8
+ <span><span data-icon="radio"></span> ${a(i(`settings.channel.statusTitle`))}</span>
9
+ </h4>
10
+ ${ge(`Telegram`,t.telegram,!0)}
11
+ ${ge(`Discord`,t.discord,!0)}
12
+ `}async function ve(){let e=document.getElementById(`channelTransportStatus`);if(e)try{let n=me(await t(`/api/health`,`GET`,null));if(!n){e.innerHTML=``,e.style.display=`none`;return}_e(e,n),e.style.display=``}catch{e.innerHTML=``,e.style.display=`none`}}async function ye(e){document.getElementById(`chTelegram`)?.classList.toggle(`active`,e===`telegram`),document.getElementById(`chDiscord`)?.classList.toggle(`active`,e===`discord`),document.getElementById(`channelTelegramSettings`)?.style.setProperty(`display`,e===`telegram`?``:`none`),document.getElementById(`channelDiscordSettings`)?.style.setProperty(`display`,e===`discord`?``:`none`),await t(`/api/settings`,`PUT`,{channel:e}),await ve()}function be(e){let t=e.channel||`telegram`;document.getElementById(`chTelegram`)?.classList.toggle(`active`,t===`telegram`),document.getElementById(`chDiscord`)?.classList.toggle(`active`,t===`discord`),document.getElementById(`channelTelegramSettings`)?.style.setProperty(`display`,t===`telegram`?``:`none`),document.getElementById(`channelDiscordSettings`)?.style.setProperty(`display`,t===`discord`?``:`none`),ve()}function xe(e){let t=document.getElementById(`fallbackOrderList`);if(!t)return;let n=Object.keys(e.perCli||{}),r=e.fallbackOrder||[],o=Math.min(n.length-1,3),s=``;for(let e=0;e<o;e++){let t=r[e]||``,o=n.map(e=>`<option value="${a(e)}" ${e===t?`selected`:``}>${a(f(e)?.label||l(e))}</option>`).join(``);s+=`
13
+ <div class="settings-row sub-row">
14
+ <label style="min-width:60px">Fallback ${e+1}</label>
15
+ <select id="fallback${e}"
16
+ style="font-size:11px;padding:4px;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:4px;flex:1">
17
+ <option value="">${i(`settings.none`)}</option>
18
+ ${o}
19
+ </select>
20
+ </div>`}t.innerHTML=s}async function Se(){await t(`/api/settings`,`PUT`,{fallbackOrder:[...document.querySelectorAll(`#fallbackOrderList select`)].map(e=>e.value).filter(Boolean)})}function Ce(e){if(e.url)return`remote`;if(!e.command)return null;let t=e.command;return t===`npx`||t.endsWith(`/npx`)?`npx`:t===`uvx`||t===`uv`||t.endsWith(`/uvx`)?`uvx`:t===`docker`||t.endsWith(`/docker`)?`docker`:null}function we(e){return Object.values(e).filter(e=>e.command===`npx`||e.command===`uv`||e.command===`uvx`).length}var _=null;async function v(){try{let e=await n(`/api/mcp`);if(!e)return;_=e;let t=document.getElementById(`mcpServerList`);if(!t)return;let r=Object.entries(e.servers||{});if(!r.length){t.textContent=i(`mcp.noServers`),Te(0);return}t.innerHTML=r.map(([e,t])=>{let n=Ce(t),r=t.url||[t.command,...(t.args||[]).slice(0,2)].filter(Boolean).map(e=>a(e)).join(` `),i=n?` <span style="opacity:.5;font-size:0.85em">[${a(n)}]</span>`:``;return`<div style="padding:2px 0">• <b>${a(e)}</b> <span style="opacity:.6">${r}</span>${i}</div>`}).join(``),Te(we(e.servers))}catch{}}function Te(e){let t=document.getElementById(`installBundleLabel`);t&&(t.textContent=`Install bundle (${e})`);let n=t?.closest(`button`);n&&(n.disabled=e===0)}async function Ee(){let e=document.getElementById(`mcpSyncResult`);if(e){e.style.display=`block`,e.textContent=i(`mcp.syncing`);try{let n=await t(`/api/mcp/sync`,`POST`,{});if(!n){e.innerHTML=`${s.error} sync failed`;return}let r=n.results||{};e.innerHTML=Object.entries(r).map(([e,t])=>`${t?s.check:s.skip} ${a(e)}`).join(` &nbsp; `)}catch(t){e.innerHTML=`${s.error} ${a(t.message)}`}}}async function De(){let e=document.getElementById(`mcpSyncResult`);if(e){e.style.display=`block`,e.textContent=i(`mcp.installing`);try{let n=await t(`/api/mcp/install`,`POST`,{});if(!n){e.innerHTML=`${s.error} install failed`;return}e.innerHTML=Object.entries(n.results||{}).map(([e,t])=>`${t.status===`installed`?s.check:t.status===`skip`?s.skip:s.error} <b>${a(e)}</b>: ${a(t.status)}${t.bin?` ${s.arrowRight} `+a(t.bin):``}`).join(`<br>`),v()}catch(t){e.innerHTML=`${s.error} ${a(t.message)}`}}}var y=null,b=null,x=null,S=null,C=null,w=null,T=`local`,E=!1,Oe=[];function ke(){if(y)return;y=document.createElement(`div`),y.id=`mcpModal`,y.className=`modal-overlay mcp-modal-overlay`,y.setAttribute(`role`,`presentation`),y.setAttribute(`aria-hidden`,`true`),y.addEventListener(`click`,e=>{e.target===y&&j()});let e=document.createElement(`div`);e.className=`modal-box mcp-modal-box`,e.setAttribute(`role`,`dialog`),e.setAttribute(`aria-modal`,`true`),e.setAttribute(`aria-label`,`MCP Server Management`),e.addEventListener(`click`,e=>e.stopPropagation());let t=document.createElement(`div`);t.className=`modal-header`;let n=document.createElement(`span`);n.textContent=`MCP Server Management`;let r=document.createElement(`button`);r.type=`button`,r.className=`help-trigger`,r.textContent=`?`,r.setAttribute(`aria-label`,`MCP help`),r.addEventListener(`click`,()=>Re());let i=document.createElement(`button`);i.type=`button`,i.className=`btn-modal-close`,i.setAttribute(`aria-label`,`Close`),i.textContent=`x`,i.addEventListener(`click`,()=>j());let a=document.createElement(`div`);a.style.cssText=`display:flex;align-items:center;gap:6px`,a.append(n,r),t.append(a,i),b=document.createElement(`div`),b.style.cssText=`padding:16px;overflow-y:auto;flex:1`;let o=document.createElement(`div`);o.style.cssText=`display:flex;gap:4px;margin-bottom:12px`;let s=D(`Active Servers`,!0),c=D(`Add New`,!1),l=D(`Browse`,!1);Oe=[s,c,l],s.addEventListener(`click`,()=>O(`active`)),c.addEventListener(`click`,()=>O(`add`)),l.addEventListener(`click`,()=>O(`browse`)),o.append(s,c,l),x=document.createElement(`div`),w=document.createElement(`div`),w.style.display=`none`,w.innerHTML=`<p style="opacity:.5">Loading registry...</p>`,S=document.createElement(`div`),S.style.display=`none`,S.innerHTML=Ae(),S.querySelectorAll(`[data-mcp-subtab]`).forEach(e=>{e.addEventListener(`click`,()=>{T=e.dataset.mcpSubtab,je()})}),C=S.querySelector(`#mcpAddError`);let u=S.querySelector(`[data-action="mcpAddAndSync"]`);u&&u.addEventListener(`click`,()=>void Le());let d=S.querySelector(`[data-action="closeMcpModal"]`);d&&d.addEventListener(`click`,()=>j()),b.append(o,x,w,S);let f=document.createElement(`div`);f.className=`modal-footer`;let p=document.createElement(`button`);p.type=`button`,p.className=`btn-save`,p.textContent=`Close`,p.addEventListener(`click`,()=>j()),f.append(p),e.append(t,b,f),y.append(e),document.body.append(y)}function D(e,t){let n=document.createElement(`button`);return n.type=`button`,n.className=`btn-clear btn-tab${t?` is-active`:``}`,n.textContent=e,n}function Ae(){return`
21
+ <div style="display:flex;gap:4px;margin-bottom:8px">
22
+ <button type="button" class="btn-clear btn-tab is-active" data-mcp-subtab="local">Local</button>
23
+ <button type="button" class="btn-clear btn-tab" data-mcp-subtab="remote">Remote</button>
24
+ </div>
25
+ <div id="mcpAddLocal">
26
+ <div class="settings-row"><label>Name</label><input type="text" id="mcpAddName" placeholder="my-server"></div>
27
+ <div class="settings-row"><label>Command</label><input type="text" id="mcpAddCommand" placeholder="npx"></div>
28
+ <div class="settings-row"><label>Args (comma separated)</label><input type="text" id="mcpAddArgs" placeholder="-y, @upstash/context7-mcp"></div>
29
+ <div class="settings-row"><label>Env (KEY=value per line)</label><textarea id="mcpAddEnv" rows="2" placeholder="API_KEY=xxx"></textarea></div>
30
+ </div>
31
+ <div id="mcpAddRemote" style="display:none">
32
+ <div class="settings-row"><label>Name</label><input type="text" id="mcpAddRemoteName" placeholder="my-api"></div>
33
+ <div class="settings-row"><label>URL</label><input type="text" id="mcpAddUrl" placeholder="https://mcp.example.com/sse"></div>
34
+ <div class="settings-row"><label>Headers (KEY=value per line)</label><textarea id="mcpAddHeaders" rows="2"></textarea></div>
35
+ </div>
36
+ <div id="mcpAddError" class="text-error text-xs py-1" style="display:none"></div>
37
+ <div style="display:flex;gap:8px;margin-top:12px;justify-content:flex-end">
38
+ <button type="button" class="btn-clear" data-action="closeMcpModal">Cancel</button>
39
+ <button type="button" class="btn-clear btn-save" data-action="mcpAddAndSync">Add & Sync</button>
40
+ </div>`}function O(e){x&&(x.style.display=e===`active`?``:`none`),S&&(S.style.display=e===`add`?``:`none`),w&&(w.style.display=e===`browse`?``:`none`),Oe.forEach((t,n)=>{let r=[`active`,`add`,`browse`][n];t.classList.toggle(`is-active`,r===e)}),e===`active`&&Me(),e===`add`&&Pe(),e===`browse`&&ze()}function je(){let e=S?.querySelector(`#mcpAddLocal`),t=S?.querySelector(`#mcpAddRemote`);e&&(e.style.display=T===`local`?``:`none`),t&&(t.style.display=T===`remote`?``:`none`),S?.querySelectorAll(`[data-mcp-subtab]`).forEach(e=>{e.classList.toggle(`is-active`,e.dataset.mcpSubtab===T)})}function Me(){if(!x||!_)return;let e=Object.entries(_.servers||{});if(!e.length){x.innerHTML=`<p style="opacity:.5">No active MCP servers.</p>`;return}x.innerHTML=e.map(([e,t])=>{let n=Ce(t),r=n?`<span class="mcp-active-tag">[${a(n)}]</span>`:``,i=t.command?a(t.command)+(t.args?.length?` `+t.args.map(e=>a(e)).join(` `):``):``,o=t.url?a(t.url):``,s=t.env?Object.keys(t.env):[],c=t.headers?Object.keys(t.headers):[],l=``;return o&&(l+=`<div class="mcp-active-detail">URL: ${o}</div>`),i&&(l+=`<div class="mcp-active-detail">Command: ${i}</div>`),s.length&&(l+=`<div class="mcp-active-detail">Env: ${s.map(e=>a(e)).join(`, `)}</div>`),c.length&&(l+=`<div class="mcp-active-detail">Headers: ${c.map(e=>a(e)).join(`, `)}</div>`),`<div class="mcp-active-row">
41
+ <div style="flex:1">
42
+ <div style="display:flex;align-items:center;gap:6px">
43
+ <span class="mcp-active-name">${a(e)}</span>
44
+ ${r}
45
+ </div>
46
+ ${l}
47
+ </div>
48
+ <button type="button" class="btn-clear mcp-active-remove" data-mcp-remove="${a(e)}">Remove</button>
49
+ </div>`}).join(``),x.querySelectorAll(`[data-mcp-remove]`).forEach(e=>{e.addEventListener(`click`,()=>{let t=e.dataset.mcpRemove;t&&Ne(t)})})}async function Ne(e){if(!_)return;let n={..._.servers};delete n[e];try{await t(`/api/mcp`,`PUT`,{..._,servers:n}),await t(`/api/mcp/sync`,`POST`,{}),await v(),Me()}catch(e){k(e.message)}}function Pe(){for(let e of[`mcpAddName`,`mcpAddCommand`,`mcpAddArgs`,`mcpAddEnv`,`mcpAddRemoteName`,`mcpAddUrl`,`mcpAddHeaders`]){let t=(S??document).querySelector(`#${e}`);t&&(t.value=``)}Fe()}function k(e){C&&(C.style.display=`block`,C.textContent=e)}function Fe(){C&&(C.style.display=`none`)}function Ie(e){let t={};for(let n of e.split(/\r?\n/)){let e=n.trim();if(!e||e.startsWith(`#`))continue;let r=e.indexOf(`=`);r!==-1&&(t[e.slice(0,r).trim()]=e.slice(r+1))}return t}function A(e){return(S??document).querySelector(`#${e}`)?.value?.trim()??``}async function Le(){if(!_)return;let e=T===`remote`,n,r;if(e){n=A(`mcpAddRemoteName`);let e=A(`mcpAddUrl`),t=A(`mcpAddHeaders`);if(!n){k(`Name is required.`);return}if(!e){k(`URL is required.`);return}r={url:e};let i=Ie(t);Object.keys(i).length>0&&(r.headers=i)}else{n=A(`mcpAddName`);let e=A(`mcpAddCommand`),t=A(`mcpAddArgs`),i=A(`mcpAddEnv`);if(!n){k(`Name is required.`);return}if(!e){k(`Command is required.`);return}r={command:e};let a=t.split(/,|\n/).map(e=>e.trim()).filter(Boolean);a.length>0&&(r.args=a);let o=Ie(i);Object.keys(o).length>0&&(r.env=o)}if(_.servers[n]){k(`Server "${n}" already exists.`);return}try{await t(`/api/mcp`,`PUT`,{..._,servers:{..._.servers,[n]:r}}),await t(`/api/mcp/sync`,`POST`,{}),await v(),j()}catch(e){k(e.message)}}function Re(){let e=document.getElementById(`mcpHelpOverlay`);if(e){e.remove();return}let t=document.createElement(`div`);t.id=`mcpHelpOverlay`,t.className=`mcp-help-overlay`,t.addEventListener(`click`,e=>{e.target===t&&t.remove()});let n=document.createElement(`div`);n.className=`mcp-help-inner`,n.innerHTML=`
50
+ <h4>MCP Server</h4>
51
+ <p>MCP (Model Context Protocol) adds capabilities to AI agents — like installing apps on a phone.</p>
52
+
53
+ <h4>Local Server</h4>
54
+ <p>Runs on your machine. Provide a command and args.</p>
55
+ <pre>Name: context7
56
+ Command: npx
57
+ Args: -y, @upstash/context7-mcp</pre>
58
+
59
+ <h4>Remote Server</h4>
60
+ <p>Connects to an external URL (SSE or Streamable HTTP).</p>
61
+ <pre>Name: my-api
62
+ URL: https://mcp.example.com/sse</pre>
63
+
64
+ <h4>Server Types</h4>
65
+ <p><code>[npx]</code> Node.js package (npx -y ...)<br>
66
+ <code>[uvx]</code> Python package (uvx ...)<br>
67
+ <code>[docker]</code> Docker container<br>
68
+ <code>[remote]</code> External URL</p>
69
+
70
+ <h4>After Adding</h4>
71
+ <p>The server is automatically synced to all installed CLIs (Claude, Codex, Gemini, Cursor, Copilot, OpenCode).</p>
72
+ <p><code>Install bundle</code> converts npx/uvx servers to global binaries for faster startup.</p>
73
+
74
+ <div style="text-align:right;margin-top:12px">
75
+ <button type="button" class="btn-save" id="mcpHelpClose">OK</button>
76
+ </div>
77
+ `,t.append(n),document.body.append(t),n.querySelector(`#mcpHelpClose`)?.addEventListener(`click`,()=>t.remove())}async function ze(){if(w){w.innerHTML=`<p style="opacity:.5">Loading registry...</p>`,_||await v();try{let e=await n(`/api/mcp/registry`);if(!e?.entries?.length&&!e?.builtins?.length){w.innerHTML=`<p style="opacity:.5">No MCP servers in registry.</p>`;return}let t=_?Object.keys(_.servers):[],r=``;r+=e.entries.map(e=>{let n=t.includes(e.id),r=e.tags?.slice(0,3).map(e=>`<span style="background:var(--border);padding:1px 4px;border-radius:3px;font-size:10px">${a(e)}</span>`).join(` `)||``;return`<div style="padding:10px 0;border-bottom:1px solid var(--border)">
78
+ <div style="display:flex;align-items:center;gap:8px">
79
+ <b>${a(e.name)}</b>
80
+ <span style="opacity:.5;font-size:0.85em">[${a(e.type)}]</span>
81
+ <span style="opacity:.4;font-size:0.85em">${a(e.category)}</span>
82
+ ${n?`<span style="color:var(--success);font-size:11px">Installed</span>`:`<button type="button" class="btn-clear text-xs" style="color:var(--accent)" data-registry-install="${a(e.id)}">+ Install</button>`}
83
+ </div>
84
+ <p style="margin:4px 0 4px 0;font-size:12px;opacity:.75">${a(e.description)}</p>
85
+ <div style="display:flex;gap:4px;align-items:center">
86
+ ${r}
87
+ ${e.url?`<a href="${a(e.url)}" target="_blank" rel="noopener noreferrer" style="font-size:10px;opacity:.5;margin-left:auto">source</a>`:``}
88
+ </div>
89
+ </div>`}).join(``),e.builtins?.length&&(r+=`<div style="margin-top:16px;padding-top:12px;border-top:2px solid var(--border)">
90
+ <h4 style="font-size:12px;opacity:.6;margin:0 0 8px">Harness Built-ins (omo / omx)</h4>
91
+ <p style="font-size:11px;opacity:.4;margin:0 0 8px">Not installable via registry — built into harness runtimes. Listed for reference.</p>`,r+=e.builtins.map(e=>{let t=e.standalone_config&&Object.keys(e.standalone_config).length>0;return`<div style="padding:6px 0;border-bottom:1px solid var(--border)">
92
+ <div style="display:flex;align-items:center;gap:6px">
93
+ <b style="font-size:12px">${a(e.name)}</b>
94
+ <span style="opacity:.4;font-size:0.8em">${a(e.harness)}</span>
95
+ ${t?`<button type="button" class="btn-clear text-xs" style="color:var(--accent)" data-builtin-install="${a(e.id)}">+ Install standalone</button>`:``}
96
+ </div>
97
+ <p style="margin:2px 0;font-size:11px;opacity:.65">${a(e.description)}</p>
98
+ </div>`}).join(``),r+=`</div>`),w.innerHTML=r,w.querySelectorAll(`[data-registry-install]`).forEach(t=>{t.addEventListener(`click`,()=>{let n=t.dataset.registryInstall,r=e.entries.find(e=>e.id===n);r&&Be(r,t)})}),w.querySelectorAll(`[data-builtin-install]`).forEach(t=>{t.addEventListener(`click`,()=>{let n=t.dataset.builtinInstall,r=e.builtins?.find(e=>e.id===n);r?.standalone_config&&Be({id:r.id,name:r.name,description:r.description,category:`harness`,type:`remote`,config:r.standalone_config,tags:[],url:r.source},t)})})}catch(e){w.innerHTML=`<p style="color:var(--color-error)">${a(e.message)}</p>`}}}async function Be(e,n){if(_){n.disabled=!0,n.textContent=`Installing...`;try{let r=e.config;await t(`/api/mcp`,`PUT`,{..._,servers:{..._.servers,[e.id]:r}}),await t(`/api/mcp/sync`,`POST`,{}),await v(),n.textContent=`Installed`,n.style.color=`var(--success)`}catch(e){n.textContent=`Error`,n.disabled=!1,console.error(`[mcp-registry] install failed:`,e.message)}}}function Ve(){ke(),y?.classList.add(`open`),y?.setAttribute(`aria-hidden`,`false`),E=!0,O(`active`)}function j(){E&&(y?.classList.remove(`open`),y?.setAttribute(`aria-hidden`,`true`),E=!1,Pe(),document.getElementById(`mcpHelpOverlay`)?.remove())}function He(){document.addEventListener(`keydown`,e=>{if(document.getElementById(`mcpHelpOverlay`)&&e.key===`Escape`){e.preventDefault(),document.getElementById(`mcpHelpOverlay`)?.remove();return}E&&e.key===`Escape`&&(e.preventDefault(),e.stopImmediatePropagation(),j())},!0)}var M=null;function Ue(e){let t=document.getElementById(`headerCli`);if(!t)return;let n=c(e),r=N(e);t.innerHTML=n?`${n} ${a(r)}`:a(r)}function N(e){return f(e)?.label||l(e)||e}function We(e){let t=e.finally(()=>{M===t&&(M=null)});return M=t,t}async function Ge(){let e=M;e&&await e}function Ke(e){return e.split(/[^a-zA-Z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function P(e){return document.getElementById(`model`+Ke(e))}function qe(e){return document.getElementById(`customModel`+Ke(e))}function Je(e){return document.getElementById(`effort`+Ke(e))}function F(e,t,{includeCustom:n=!1,includeDefault:r=!1,selected:o=``}={}){if(!e)return;let s=r?`<option value="default">default</option>`:``,c=n?`<option value="__custom__">${i(`model.customOption`)}</option>`:``;e.innerHTML=s+(t||[]).map(e=>`<option value="${a(e)}">${a(e)}</option>`).join(``)+c,o&&Array.from(e.options).some(e=>e.value===o)&&(e.value=o)}function I(e,t){if(!e||!t||Array.from(e.options).some(e=>e.value===t))return;let n=document.createElement(`option`);n.value=t,n.textContent=t;let r=e.querySelector(`option[value="__custom__"]`);r?e.insertBefore(n,r):e.appendChild(n)}function Ye(e=null){let t=p(),n=document.getElementById(`selCli`);if(n){let r=e?.cli||n.value||t[0]||`claude`,o=e=>ee.includes(e),s=!o(r)&&t.includes(r),c=n.dataset.expanded===`1`,l=t.filter(o),u=t.filter(e=>!o(e)),d=l.length===0||s||c,p=l.map(e=>{let t=f(e)?.label||e;return`<option value="${a(e)}">${a(t)}</option>`}).join(``);u.length>0&&(d?(p+=`<option disabled>──────</option>`,p+=u.map(e=>{let t=f(e)?.label||e;return`<option value="${a(e)}">${a(t)}</option>`}).join(``)):p+=`<option value="__show_more__">${i(`cli.showMore`)}</option>`),n.innerHTML=p,Array.from(n.options).some(e=>e.value===r)&&(n.value=r)}let r=document.getElementById(`flushCli`);if(r){let n=e?.memory?.cli||r.value||``;r.innerHTML=`<option value="">(active CLI)</option>`+t.map(e=>`<option value="${a(e)}">${a(N(e))}</option>`).join(``),Array.from(r.options).some(e=>e.value===n)&&(r.value=n)}}function L(e,t){return(t||``).trim()}function Xe(e=null){for(let t of p()){let n=f(t),r=t===`ai-e`?z():``,i=P(t);if(i)if(n?.modelNote)i.innerHTML=`<option value="">${a(n.modelNote)}</option>`,i.title=n.modelNote,i.disabled=!0;else{let a=L(t,e?.perCli?.[t]?.model||i.value||``);F(i,t===`ai-e`?n?.modelsByProvider?.[r]||h[t]||[]:h[t]||[],{includeCustom:!0,selected:a}),a&&!Array.from(i.options).some(e=>e.value===a)&&(I(i,a),i.value=a),i.disabled=!1}let o=Je(t);if(o){let i=t===`ai-e`&&r?n?.effortsByProvider?.[r]||[]:null,s=[``].concat(i||n?.efforts||[]),c=e?.perCli?.[t]?.effort||o.value||``,l=[...new Set(s)],u=l.length===1&&!l[0]&&n?.effortNote?n.effortNote:`— none`;o.innerHTML=l.map(e=>e?`<option value="${a(e)}">${a(e)}</option>`:`<option value="">${a(u)}</option>`).join(``),n?.effortNote&&(o.title=n.effortNote),o.disabled=l.length===1&&!l[0]&&!!n?.effortNote,Array.from(o.options).some(e=>e.value===c)&&(o.value=c)}}}function R(e,t=``){let n=document.getElementById(`selEffort`);if(!n)return;let r=f(e),i=z(),o=e===`ai-e`&&i?r?.effortsByProvider?.[i]||[]:null;if(r?.effortNote){n.innerHTML=`<option value="">${a(r.effortNote)}</option>`,n.title=r.effortNote,n.disabled=!0;return}let s=[``].concat(o||r?.efforts||[]);n.innerHTML=[...new Set(s)].map(e=>e?`<option value="${a(e)}">${a(e)}</option>`:`<option value="">— none</option>`).join(``),n.disabled=!1,n.title=``,Array.from(n.options).some(e=>e.value===t)&&(n.value=t)}function Ze(e,t,n){return e?(e.innerHTML=n.map(e=>`<option value="${a(e)}">${a(l(e)||e)}</option>`).join(``),Array.from(e.options).some(e=>e.value===t)?e.value=t:e.options.length>0&&(e.value=e.options[0]?.value||t),e.value||t):t}function z(){let e=document.getElementById(`selAiEProvider`),t=document.getElementById(`providerAiE`);return e?.value||t?.value||f(`ai-e`)?.defaultProvider||`claude`}function Qe(){return document.getElementById(`providerAiE`)?.value||z()}function $e(e,t){let n=document.getElementById(`aiEProviderWrap`),r=document.getElementById(`selAiEProvider`),i=document.getElementById(`providerAiE`),a=f(`ai-e`);if(!a?.providers?.length)return`claude`;let o=Ze(r,e?.perCli?.[`ai-e`]?.provider||i?.value||r?.value||a.defaultProvider||`claude`,a.providers);return Ze(i,o,a.providers),n&&(n.style.display=t===`ai-e`?``:`none`),o}async function et(){await m();let e=await n(`/api/settings`);if(!e)return;u(e.locale??``),Ye(e),$e(e,e.cli||``),Xe(e);let t=document.getElementById(`selCli`);t&&Array.from(t.options).some(t=>t.value===e.cli)&&(t.value=e.cli,t.dataset.prev=e.cli);let r=document.getElementById(`inpCwd`);r&&(r.textContent=e.workingDir);let i=document.getElementById(`headerCli`);if(i){let t=c(e.cli),n=N(e.cli);i.innerHTML=t?`${t} ${a(n)}`:a(n)}if(tt(e.permissions,!1),e.perCli)for(let[t,n]of Object.entries(e.perCli)){let e=P(t),r=Je(t);if(e&&n.model){let r=L(t,n.model);I(e,r),e.value=r}if(r&&(r.value=n.effort||``),t===`codex`&&n.fastMode!==void 0&&(document.getElementById(`codexFastOn`)?.classList.toggle(`active`,n.fastMode),document.getElementById(`codexFastOff`)?.classList.toggle(`active`,!n.fastMode)),t===`codex`){let e=!!n.contextWindow;document.getElementById(`codexCtxOn`)?.classList.toggle(`active`,e),document.getElementById(`codexCtxOff`)?.classList.toggle(`active`,!e);let t=document.getElementById(`codexCtxValues`);t&&(t.style.display=e?``:`none`);let r=document.getElementById(`codexCtxWindow`),i=document.getElementById(`codexCtxCompact`);r&&n.contextWindowSize&&(r.value=String(n.contextWindowSize)),i&&n.contextCompactLimit&&(i.value=String(n.contextCompactLimit))}if(t===`claude`){let e=!!(n.model&&String(n.model).endsWith(`[1m]`));document.getElementById(`claude1mOn`)?.classList.toggle(`active`,e),document.getElementById(`claude1mOff`)?.classList.toggle(`active`,!e)}}H(!1);let o=e.activeOverrides?.[e.cli]||{},s=e.perCli?.[e.cli]||{},l=o.model||s.model,d=o.effort||s.effort||``,f=document.getElementById(`selModel`);if(l&&f){let t=L(e.cli,l);t&&!Array.from(f.options).some(e=>e.value===t)&&I(f,t),f.value=t}R(e.cli,d),oe(e),fe(e),be(e),xe(e),v(),te(e.stt||{})}async function B(){let e=document.getElementById(`selCli`)?.value||`claude`,n={cli:e};return e===`ai-e`&&(n.perCli={"ai-e":{provider:z()}}),We((async()=>{let r=await t(`/api/settings`,`PUT`,n);if(!r){await et();return}let i=r.cli||e,a=document.getElementById(`selCli`);a&&Array.from(a.options).some(e=>e.value===i)&&(a.value=i,a.dataset.prev=i),Ue(i),o([`instances`],`active-cli-changed`)})())}function tt(e,t=!0){t&&r(`/api/settings`,`PUT`,{permissions:`auto`})}function nt(e){let t=P(e);return t?t.value===`__custom__`?qe(e)?.value?.trim()||t.options[0]?.value||`default`:t.value:`default`}function rt(e,t){let n=qe(e);n&&(t.value===`__custom__`?(n.style.display=`block`,n.focus()):(n.style.display=`none`,e===`claude`&&it(t.value),V()))}function it(e){let t=!!(e&&e.endsWith(`[1m]`));document.getElementById(`claude1mOn`)?.classList.toggle(`active`,t),document.getElementById(`claude1mOff`)?.classList.toggle(`active`,!t)}function at(e,t){let n=t.value.trim();if(!n)return;let r=P(e);r&&(I(r,n),r.value=n,t.style.display=`none`,e===`claude`&&it(n),V())}function ot(){let e=Qe(),t=document.getElementById(`selAiEProvider`);t&&Array.from(t.options).some(t=>t.value===e)&&(t.value=e),Xe(null),(document.getElementById(`selCli`)?.value||``)===`ai-e`&&H(!1),V()}async function V(){let e={};for(let t of p()){if(!P(t))continue;let n=Je(t),r={model:nt(t),effort:n?n.value:``};if(t===`ai-e`&&(r.provider=Qe()),t===`codex`){r.fastMode=document.getElementById(`codexFastOn`)?.classList.contains(`active`)??!1,r.contextWindow=document.getElementById(`codexCtxOn`)?.classList.contains(`active`)??!1;let e=document.getElementById(`codexCtxWindow`),t=document.getElementById(`codexCtxCompact`);r.contextWindowSize=parseInt(e?.value||`1000000`,10),r.contextCompactLimit=parseInt(t?.value||`900000`,10)}e[t]=r}await t(`/api/settings`,`PUT`,{perCli:e})}function H(e=!0){let t=document.getElementById(`selCli`);if(!t)return;if(t.value===`__show_more__`){let e=t.dataset.prev||p()[0]||`claude`;t.dataset.expanded=`1`,Ye(null),Array.from(t.options).some(t=>t.value===e)&&(t.value=e);try{t.showPicker()}catch{}return}t.dataset.prev=t.value;let r=t.value||`claude`,o=$e(null,r),s=f(r),c=r===`ai-e`?s?.modelsByProvider?.[o]||h[r]||[]:h[r]||[],l=document.getElementById(`selModel`);s?.modelNote&&l?(l.innerHTML=`<option value="">${a(s.modelNote)}</option>`,l.title=s.modelNote,l.disabled=!0):(F(l,c,{includeCustom:!0,includeDefault:!0}),l&&(l.disabled=!1,l.title=``)),Ue(r),R(r);let u=document.getElementById(`selModelCustom`);u&&u.remove();let d=document.createElement(`input`);if(d.type=`text`,d.id=`selModelCustom`,d.className=`custom-model-input`,d.placeholder=i(`model.placeholder`),d.style.display=`none`,d.onchange=function(){let e=this.value.trim();!e||!l||(I(l,e),l.value=e,this.style.display=`none`,U())},!l){e&&B();return}l.parentElement?.appendChild(d),l.onchange=function(){this.value===`__custom__`?(d.style.display=`block`,d.focus()):(d.style.display=`none`,U())},n(`/api/settings`).then(e=>{if(!e)return;let t=e.activeOverrides?.[r]||{},n=e.perCli?.[r]||{},i=t.model||n.model,a=t.effort||n.effort||``;if(i&&l){if(r===`ai-e`&&(e.perCli?.[`ai-e`]?.provider||`claude`)!==z()){R(r,a);return}let t=L(r,i);I(l,t),l.value=t}R(r,a)}),e&&B()}async function U(){let e=document.getElementById(`selCli`)?.value||`claude`,n=document.getElementById(`selModel`)?.value||`default`;n===`__custom__`&&(n=document.getElementById(`selModelCustom`)?.value?.trim()||`default`);let r=document.getElementById(`selEffort`),i={};i[e]={model:n},r&&!r.disabled&&(i[e].effort=r.value||``);let a={activeOverrides:i};e===`ai-e`&&(a.perCli={"ai-e":{provider:z()}}),await t(`/api/settings`,`PUT`,a)&&o([`instances`],`active-cli-changed`)}function st(){let e=h[document.getElementById(`flushCli`)?.value||document.getElementById(`selCli`)?.value||`claude`]||[];F(document.getElementById(`flushModel`),e,{includeDefault:!0}),ut(),lt()}async function ct(){let e=await n(`/api/memory-files`);if(!e)return;let t=document.getElementById(`flushCli`),r=document.getElementById(`flushModel`);t&&e.cli&&(t.value=e.cli),F(r,h[e.cli||document.getElementById(`selCli`)?.value||`claude`]||[],{includeDefault:!0}),r&&e.model&&(I(r,e.model),r.value=e.model),ut()}async function lt(){await t(`/api/memory-files/settings`,`PUT`,{cli:document.getElementById(`flushCli`)?.value||``,model:document.getElementById(`flushModel`)?.value||``})}function ut(){let e=document.getElementById(`flushAgentBadge`);if(!e)return;let t=document.getElementById(`flushCli`)?.value||``,n=document.getElementById(`flushModel`)?.value||``,r=t||document.getElementById(`selCli`)?.value||``,i=[];r&&i.push(t?N(r):`${N(r)}*`),n&&n!==`default`&&i.push(n),e.textContent=i.length?`(${i.join(` / `)})`:``}var dt=new Set([`ai-e`,`codex-app`]),ft={claude:`Currently subscribed, by June with credit`},pt={cursor:{title:`Enable quota bars (dashboard session)`,commands:[`cursor-agent login`,`export CURSOR_SESSION_TOKEN="<WorkosCursorSessionToken from cursor.com DevTools>"`,`echo "$CURSOR_SESSION_TOKEN" > ~/.cli-jaw/quota/cursor-session-token && chmod 600 ~/.cli-jaw/quota/cursor-session-token`]},agy:{title:`Enable Gem / Cla quota bars`,commands:[`npx antigravity-usage login`,`npx antigravity-usage --json`]},grok:{title:`Grok Build auth (plan quota not in grok CLI)`,commands:[`grok login --oauth`,`grok models # verify auth`],note:`Subscription remaining quota: xAI console only. No official grok quota subcommand.`},opencode:{title:`OpenCode auth + optional plan quota plugin`,commands:[`opencode auth login`,`opencode plugin add @slkiser/opencode-quota`,`npx @slkiser/opencode-quota show`],note:`Built-in opencode stats shows session tokens/cost, not subscription limits. opencode-go/* models use the same CLI.`}};function mt(e,t){return e===`gemini`?t===`Pro`||t===`P`?`P`:t===`Flash`||t===`F`?`F`:t:e===`copilot`&&(t===`Premium`||t===`Prem`||t.includes(`plus monthly subscriber quota`))?`30d`:t.replace(`-hour`,`h`).replace(`-day`,`d`).replace(` Sonnet`,``).replace(` Opus`,``)}function ht(e,t){if(t.delegatedProvider)return`Delegates quota/status to ${t.delegatedProvider}`;let n=t.quotaSource?.match(/^not-exposed-by-(.*?)-cli$/);return n?`Quota not exposed by ${n[1].toUpperCase()} CLI`:t.quotaSource?t.quotaSource:e===`opencode`?`Auth/status only`:`Usage data not exposed by this CLI`}function gt(e){return e.toLowerCase().replace(/^cursor\s+/i,``).trim()}var _t=new Set([`auth/status only`,`google cloud code`,`runtime-checked`]),vt=new Set([`cursor`,`antigravity.google`,`antigravity`,`max`,`copilot`,`gemini`]);function yt(e,t){let n=t.account;if(!n)return[];let r=[];n.email&&r.push(n.email);let i=new Set(r.map(gt));for(let e of[n.plan,n.tier]){if(!e)continue;let t=gt(e);if(!(!t||_t.has(t))&&!vt.has(t)&&!i.has(t)){i.add(t),r.push(e);break}}return r}function bt(e,t,n=[]){let r=pt[e],i=[...n,...r?r.commands:[],...r?.note?[r.note]:[]].filter(Boolean);return i.length?`<button type="button" class="help-trigger" style="margin-left:4px" data-cli-help="${a(i.join(`
99
+ `))}" aria-label="Setup help">?</button>`:``}function xt(e,t){let n=pt[e],r=t.sessionUsage,i=[];r?.primaryModelId&&i.push(`Model: ${r.primaryModelId}`),r?.contextTokensUsed&&r?.contextWindowTokens?i.push(`Session context: ${Math.round(r.contextTokensUsed).toLocaleString()} / ${Math.round(r.contextWindowTokens).toLocaleString()} tokens`):r?.turnCount&&i.push(`Session turns: ${Math.round(r.turnCount).toLocaleString()}`);let o=bt(e,t,i);if(n){let e=n.commands.map(e=>`
100
+ <div style="margin-top:3px"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px;word-break:break-all">${a(e)}</code></div>
101
+ `).join(``);return`
102
+ <div style="font-size:10px;color:var(--text-dim);margin:4px 0 0 16px;padding:5px 7px;background:var(--surface);border:1px solid var(--border);border-radius:5px">
103
+ <div style="color:var(--text);font-weight:600">${a(n.title)}${o}</div>
104
+ ${e}
105
+ ${n.note?`<div style="margin-top:4px;opacity:0.75">${a(n.note)}</div>`:``}
106
+ </div>
107
+ `}return`
108
+ <div style="font-size:10px;color:var(--text-dim);margin:4px 0 0 16px;padding:5px 7px;background:var(--surface);border:1px solid var(--border);border-radius:5px">
109
+ <div style="color:var(--text);font-weight:600">${a(t.displayTier||l(e))}${o}</div>
110
+ <div style="margin-top:2px">${a(ht(e,t))}</div>
111
+ </div>
112
+ `}var St=new Set([0,600,1800]),W=0,Ct=2e3,wt=4e3,G=null,Tt=!1,K=0,q=null,J=null,Et=`cliStatusCollapsed`;function Y(){try{return window.parent!==window}catch{return!0}}function Dt(){try{return localStorage.getItem(Et)===`true`}catch{return!1}}function Ot(e){try{localStorage.setItem(Et,e?`true`:`false`)}catch{}}function kt(e){return`${String(e.getHours()).padStart(2,`0`)}:${String(e.getMinutes()).padStart(2,`0`)}:${String(e.getSeconds()).padStart(2,`0`)}`}function At(){J!=null&&(window.clearTimeout(J),J=null)}function jt(e,t=``){At();let n=document.getElementById(`cliStatusRefreshBtn`),r=document.getElementById(`cliStatusRefreshState`),i=n?.querySelector(`.cli-refresh-label`);n&&(n.classList.remove(`is-refreshing`,`is-success`,`is-error`),n.disabled=e===`refreshing`,e===`idle`?n.removeAttribute(`aria-busy`):n.setAttribute(`aria-busy`,e===`refreshing`?`true`:`false`),e===`refreshing`&&n.classList.add(`is-refreshing`),e===`success`&&n.classList.add(`is-success`),e===`error`&&n.classList.add(`is-error`)),i&&(i.textContent=e===`refreshing`?`Refreshing...`:`Refresh`),r&&(r.textContent=t,r.dataset.state=e)}function Mt(e,t){jt(e,t),J=window.setTimeout(()=>{jt(`idle`)},wt)}var X=!Dt();function Nt(){return X}function Pt(){X=!0;let e=document.getElementById(`cliStatusList`),t=document.getElementById(`cliStatusHeader`);e&&(e.style.display=`block`),t&&t.classList.add(`expanded`),Ot(!1),Z(!0)}function Ft(){let e=document.getElementById(`cliStatusHeader`),t=document.getElementById(`cliStatusList`);!e||!t||(X?(t.style.display=`block`,e.classList.add(`expanded`)):t.style.display=`none`,e.addEventListener(`click`,()=>{X=!X,t.style.display=X?`block`:`none`,e.classList.toggle(`expanded`,X),Ot(!X),X&&Z(!0)}))}function It(){let e=Number(localStorage.getItem(`cliStatusInterval`)||W);return St.has(e)?e:W}function Lt(e=It()){let t=document.getElementById(`cliStatusInterval`);if(!t)return;let n=String(e);t.value=Array.from(t.options).some(e=>e.value===n)?n:String(W)}function Rt(){G!=null&&(window.clearInterval(G),G=null);let e=It();Lt(e),!(e<=0)&&(G=window.setInterval(()=>{document.hidden||!X||!Y()&&!document.hasFocus()||Z(!0)},e*1e3))}function zt(){Tt||!Y()||(Tt=!0,window.addEventListener(`message`,e=>{let t=e.data;t?.type!==`jaw-preview-visibility`||t.visible!==!0||X&&Z(!1)}))}function Bt(e){let t=Number(e),n=St.has(t)?t:W;localStorage.setItem(`cliStatusInterval`,String(n)),Lt(n),Rt()}function Vt(t,r,i){Y()&&(async()=>{if(await new Promise(e=>window.setTimeout(e,600)),t!==K)return;let i=await n(`/api/quota`);t!==K||!i||(e.cliStatusCache={cliStatus:r,quota:i},e.cliStatusTs=Date.now(),Q({cliStatus:r,quota:i}))})()}async function Ht(t,r,i){let a=await n(`/api/quota`);if(t!==K)return!1;let o=a??i??null;return e.cliStatusCache={cliStatus:r,quota:o},a&&(e.cliStatusTs=Date.now()),Q({cliStatus:r,quota:o}),a||Vt(t,r,i),!!a}function Ut(e,t,n,r){let i=()=>{Ht(t,n,r).catch(()=>{})};if(e)return Ht(t,n,r);window.setTimeout(i,Ct)}async function Z(t=!1){if(X){if(t&&jt(`refreshing`,`Refreshing quota...`),q)if(t)await q.catch(()=>{});else return;q=(async()=>{let r=++K,i=document.getElementById(`cliStatusList`);try{let a=It();if(!t&&e.cliStatusCache&&a>0&&Date.now()-e.cliStatusTs<a*1e3){Q({cliStatus:e.cliStatusCache?.cliStatus,quota:e.cliStatusCache?.quota});return}let o=e.cliStatusCache?.quota;i&&!o&&(i.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Loading...</div>`);let s=await n(`/api/cli-status`);if(r!==K)return;if(!s||typeof s!=`object`){i&&(i.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Failed to load CLI status</div>`),t&&Mt(`error`,`Refresh failed`);return}Q({cliStatus:s,quota:o??null});let c=await Ut(t,r,s,o);t&&r===K&&Mt(`success`,`${c?`Updated`:`Checked`} ${kt(new Date)}`)}catch{i&&(i.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Failed to load CLI status</div>`),t&&Mt(`error`,`Refresh failed`)}})().finally(()=>{q=null}),await q}}function Q(e){let{cliStatus:t,quota:r}=e,o=document.getElementById(`cliStatusList`),u={agy:{install:`curl -fsSL https://antigravity.google/cli/install.sh | bash`,auth:`agy runtime auth, antigravity-usage login, or ~/.gemini oauth for quota`},"ai-e":{install:`Install AI-E helper`,auth:`delegates to selected AI-E provider`},claude:{install:`npm i -g @anthropic-ai/claude-code`,auth:`claude auth`},"claude-e":{install:`Install claude-e helper`,auth:`claude auth`},codex:{install:`npm i -g @openai/codex`,auth:`codex login`},"codex-app":{install:`npm i -g @openai/codex`,auth:`codex login`},cursor:{install:`curl https://cursor.com/install -fsS | bash`,auth:`cursor-agent login, CURSOR_API_KEY, or CURSOR_SESSION_TOKEN for quota`},"kiro-code":{install:`Install Kiro CLI from https://kiro.dev/docs/cli`,auth:`kiro-cli login`},gemini:{install:`npm i -g @google/gemini-cli`,auth:`gemini (${i(`cli.gemini.auth`)})`},grok:{install:`curl -fsSL https://x.ai/cli/install.sh | bash`,auth:`grok login --oauth`},opencode:{install:`npm i -g opencode-ai`,auth:`opencode auth`},copilot:{install:`npm i -g copilot`,auth:i(`cli.copilot.authHint`)}},d=``;if(!t||typeof t!=`object`){o&&(o.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Failed to load CLI status</div>`);return}for(let[e,n]of Object.entries(t)){let t=r?.[e],o;o=n.available?!t||t.error?`ok`:t.authenticated===!1?`warn`:`ok`:`missing`;let f=``,p=t?.quotaCapable===!1&&t.authenticated!==!1&&n.available&&!ft[e]&&!dt.has(e);if(t?.account&&!p){let n=yt(e,t);n.length&&(f=`<div style="font-size:10px;color:var(--text-dim);margin:2px 0 4px 16px">${a(n.join(` · `))}</div>`)}let ee=``;if(!n.available||o===`warn`){let t=u[e];if(t){let e=!n.available,r=i(e?`cli.authRequired`:`cli.notAuthenticated`),o=e?`var(--error)`:`var(--warning)`;ee=`
113
+ <div style="font-size:10px;margin:4px 0 2px 16px;padding:6px 8px;background:var(--surface);border-radius:4px;border-left:2px solid ${o}">
114
+ <div style="color:${o};margin-bottom:3px">${r}</div>
115
+ ${e?`<div style="color:var(--text-dim)"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px">${a(t.install)}</code></div>`:``}
116
+ <div style="color:var(--text-dim)${e?`;margin-top:2px`:``}"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px">${a(t.auth)}</code></div>
117
+ </div>
118
+ `}}let m=``,h=ft[e];if(!dt.has(e)){if(h&&n.available)m=`
119
+ <div style="font-size:10px;color:var(--text-dim);margin:4px 0 0 16px;padding:5px 7px;background:var(--surface);border:1px solid var(--border);border-radius:5px">
120
+ ${a(h)}
121
+ </div>
122
+ `;else if(p)m=xt(e,t);else if(t?.windows?.length)m=t.windows.map(t=>{let n=Math.round(t.percent),r=n>80?`var(--error)`:n>50?`var(--warning)`:`var(--info)`,i=mt(e,t.label),o=``;if(t.resetsAt){let e=new Date(typeof t.resetsAt==`number`?t.resetsAt*1e3:t.resetsAt),n=new Date;o=e.toDateString()===n.toDateString()?`${e.getHours()}:${String(e.getMinutes()).padStart(2,`0`)}`:`${e.getMonth()+1}/${e.getDate()}`}return`
123
+ <div style="display:flex;align-items:center;gap:4px;margin-left:16px;font-size:10px;color:var(--text-dim)">
124
+ <span style="min-width:18px;max-width:48px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">${a(i)}</span>
125
+ <div style="flex:1;height:4px;background:var(--border);border-radius:2px;overflow:hidden">
126
+ <div style="width:${n}%;height:100%;background:${r};border-radius:2px"></div>
127
+ </div>
128
+ <span style="width:24px;text-align:right">${n}%</span>
129
+ ${o?`<span style="width:30px;text-align:right;opacity:0.6">${o}</span>`:``}
130
+ </div>
131
+ `}).join(``);else if(t?.error&&n.available){let e=t.reason===`rate_limited`?`Rate limited — retry in a moment`:`Usage data unavailable`;m=`<div style="font-size:10px;color:var(--text-dim);margin:2px 0 0 16px;opacity:0.7">${s.warning} ${e}</div>`}}let te=t?.quotaCapable&&pt[e]?bt(e,t):``;d+=`
132
+ <div class="settings-group" style="margin-bottom:6px;padding:8px 10px">
133
+ <div class="cli-status-row">
134
+ <span class="cli-dot ${o}"></span>
135
+ <span class="cli-provider-icon" aria-hidden="true">${c(e)||``}</span>
136
+ <span class="cli-name" style="font-weight:600">${a(l(e))}${te}</span>${e===`copilot`?`<button id="copilotKeychainBtn" style="font-size:9px;margin-left:6px;padding:1px 5px;background:var(--border);color:var(--text-dim);border:1px solid var(--text-dim);border-radius:3px;cursor:pointer;vertical-align:middle;line-height:1" title="${i(`copilot.keychainHint`)}">${s.key}</button>`:``}
137
+ </div>
138
+ ${f}
139
+ ${ee}
140
+ ${m}
141
+ </div>
142
+ `}o&&(o.innerHTML=d);let f=Object.entries(t);!f.some(([e,t])=>{if(!t.available)return!1;let n=r?.[e];return!n||n.authenticated!==!1})&&f.length>0&&o&&o.insertAdjacentHTML(`afterbegin`,`<div style="padding:8px 10px;margin-bottom:8px;background:var(--warning-dim);border:1px solid var(--warning);border-radius:6px;font-size:11px;color:var(--warning)">
143
+ ${s.warning} ${i(`cli.noReadyCli`)}
144
+ </div>`);let p=document.getElementById(`copilotKeychainBtn`);p&&p.addEventListener(`click`,async()=>{let e=p;e.disabled=!0,e.innerHTML=s.hourglass;try{let t=await n(`/api/copilot/refresh`,{method:`POST`});e.innerHTML=t?.ok?s.check:s.error,t?.ok&&await Z(!0)}catch{e.innerHTML=s.error}setTimeout(()=>{e.innerHTML=s.key,e.disabled=!1},2e3)}),o&&o.querySelectorAll(`[data-cli-help]`).forEach(e=>{e.addEventListener(`click`,t=>{t.stopPropagation(),Wt(e.getAttribute(`data-cli-help`)||``)})})}function Wt(e){let t=document.getElementById(`cliHelpOverlay`);t&&t.remove();let n=document.createElement(`div`);n.id=`cliHelpOverlay`,n.className=`mcp-help-overlay`,n.addEventListener(`click`,e=>{e.target===n&&n.remove()});let r=document.createElement(`div`);r.className=`mcp-help-inner`,r.innerHTML=`
145
+ <h4>CLI Setup</h4>
146
+ ${e.split(`
147
+ `).filter(Boolean).map(e=>`<p><code>${e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`)}</code></p>`).join(``)}
148
+ <div style="text-align:right;margin-top:12px">
149
+ <button type="button" class="btn-save" id="cliHelpClose">OK</button>
150
+ </div>
151
+ `,n.append(r),document.body.append(n),r.querySelector(`#cliHelpClose`)?.addEventListener(`click`,()=>n.remove()),document.addEventListener(`keydown`,function e(t){t.key===`Escape`&&(n.remove(),document.removeEventListener(`keydown`,e,!0))},!0)}function Gt(){n(`/api/prompt`).then(e=>{if(!e)return;let t=document.getElementById(`modalPromptEditor`);t&&(t.value=e.content||``),document.getElementById(`promptModal`)?.classList.add(`open`)})}function Kt(e){e&&e.target!==e.currentTarget||document.getElementById(`promptModal`)?.classList.remove(`open`)}async function qt(){await t(`/api/prompt`,`PUT`,{content:document.getElementById(`modalPromptEditor`)?.value||``}),document.getElementById(`promptModal`)?.classList.remove(`open`)}var Jt=[],$=!1;async function Yt(){let e=await n(`/api/prompt-templates`);e&&(Jt=e.templates,$=!1,Xt(e.tree),en(`tree`),document.getElementById(`templateModal`)?.classList.add(`open`))}function Xt(e){let t=document.getElementById(`templateTree`);if(t){t.innerHTML=``;for(let n of e){let e=document.createElement(`div`);e.style.cssText=`background:var(--bg);border:1px solid var(--accent);border-radius:6px;padding:8px 10px;margin:8px 0 4px;font-size:12px;color:var(--accent);font-weight:600`,e.textContent=`${n.emoji} ${n.label}`,t.appendChild(e);for(let e of n.children){let n=Jt.find(t=>t.id===e);if(!n)continue;let r=document.createElement(`div`);r.style.cssText=`background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:6px 10px;margin:2px 0 2px 24px;font-size:12px;cursor:pointer;transition:border-color .15s`,r.innerHTML=`${s.file} ${a(n.filename)}`,r.addEventListener(`mouseenter`,()=>{r.style.borderColor=`var(--accent2)`}),r.addEventListener(`mouseleave`,()=>{r.style.borderColor=`var(--border)`}),r.addEventListener(`click`,()=>{Zt(n)}),t.appendChild(r)}}}}function Zt(e){let t=document.getElementById(`templateEditor`);t.value=e.content,t.dataset.templateId=e.id,t.readOnly=!0,$=!1;let n=document.getElementById(`templateEditorLabel`);n&&(n.innerHTML=`${s.file} ${a(e.filename)}`);let r=e.content.match(/\{\{[A-Z_]+\}\}/g),i=document.getElementById(`templateVars`);i&&(i.textContent=r?`vars: ${[...new Set(r)].join(`, `)}`:`no variables`);let o=document.getElementById(`templateSaveBtn`);o&&(o.style.display=`none`);let c=document.getElementById(`templateDevToggle`);c&&(c.style.color=`var(--text-dim)`,c.style.borderColor=`var(--border)`,c.innerHTML=`${s.tool} ${d(`devMode`)}`);let l=document.getElementById(`templateModalTitle`);l&&(l.innerHTML=`${s.file} ${a(e.filename)}`),en(`editor`)}function Qt(){if(!$&&!confirm(d(`promptEditWarning`)))return;$=!$;let e=document.getElementById(`templateEditor`);e.readOnly=!$;let t=document.getElementById(`templateSaveBtn`);t&&(t.style.display=$?``:`none`);let n=document.getElementById(`templateDevToggle`);n&&(n.style.color=$?`var(--stop-btn)`:`var(--text-dim)`,n.style.borderColor=$?`var(--stop-btn)`:`var(--border)`,n.innerHTML=$?`${s.lockOpen} ${d(`devModeOn`)}`:`${s.tool} ${d(`devMode`)}`)}async function $t(){let e=document.getElementById(`templateEditor`),n=e.dataset.templateId;if(!n)return;await t(`/api/prompt-templates/${n}`,`PUT`,{content:e.value});let r=document.getElementById(`templateEditorLabel`);r&&(r.innerHTML=`${s.check} ${d(`savedAndReloaded`)}`,setTimeout(()=>{r.innerHTML=`${s.file} ${a(n)}.md`},2e3));let i=Jt.find(e=>e.id===n);i&&(i.content=e.value)}function en(e){let t=document.getElementById(`templateTreeView`),n=document.getElementById(`templateEditorView`);t&&(t.style.display=e===`tree`?``:`none`),n&&(n.style.display=e===`editor`?`flex`:`none`);let r=document.getElementById(`templateModalTitle`);r&&e===`tree`&&(r.innerHTML=`${s.plan} ${d(`promptStructure`)}`)}function tn(){en(`tree`)}function nn(e){e&&e.target!==e.currentTarget||document.getElementById(`templateModal`)?.classList.remove(`open`)}export{He as A,ue as B,st as C,tt as D,V as E,xe as F,re as G,de as H,Se as I,ae as K,ye as L,v as M,Ve as N,B as O,Ee as P,se as R,H as S,U as T,ne as U,le as V,ie as W,at as _,qt as a,ct as b,Qt as c,Ft as d,Nt as f,Bt as g,Rt as h,Yt as i,De as j,Ge as k,Pt as l,Z as m,nn as n,$t as o,Y as p,te as q,Gt as r,tn as s,Kt as t,zt as u,nt as v,ot as w,et as x,rt as y,ce as z};