cli-jaw 2.1.1 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. package/README.ja.md +8 -6
  2. package/README.ko.md +8 -6
  3. package/README.md +18 -11
  4. package/README.zh-CN.md +8 -6
  5. package/dist/bin/cli-jaw.js +19 -3
  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-search.js +71 -0
  10. package/dist/bin/commands/chat-search.js.map +1 -0
  11. package/dist/bin/commands/chat.js +98 -58
  12. package/dist/bin/commands/chat.js.map +1 -1
  13. package/dist/bin/commands/dispatch.js +130 -5
  14. package/dist/bin/commands/dispatch.js.map +1 -1
  15. package/dist/bin/commands/goal.js +66 -9
  16. package/dist/bin/commands/goal.js.map +1 -1
  17. package/dist/bin/commands/history.js +61 -0
  18. package/dist/bin/commands/history.js.map +1 -0
  19. package/dist/bin/commands/lock.js +104 -0
  20. package/dist/bin/commands/lock.js.map +1 -0
  21. package/dist/bin/commands/memory.js +23 -2
  22. package/dist/bin/commands/memory.js.map +1 -1
  23. package/dist/bin/commands/orchestrate.js.map +1 -1
  24. package/dist/bin/commands/project.js +4 -1
  25. package/dist/bin/commands/project.js.map +1 -1
  26. package/dist/bin/commands/tui/fullscreen-mode.js +237 -0
  27. package/dist/bin/commands/tui/fullscreen-mode.js.map +1 -0
  28. package/dist/bin/commands/tui/input-handler.js +139 -52
  29. package/dist/bin/commands/tui/input-handler.js.map +1 -1
  30. package/dist/bin/commands/tui/overlays.js +177 -70
  31. package/dist/bin/commands/tui/overlays.js.map +1 -1
  32. package/dist/bin/commands/tui/renderer.js +70 -20
  33. package/dist/bin/commands/tui/renderer.js.map +1 -1
  34. package/dist/bin/commands/tui/simple-mode.js +1 -2
  35. package/dist/bin/commands/tui/simple-mode.js.map +1 -1
  36. package/dist/bin/commands/tui/tui-io.js +8 -0
  37. package/dist/bin/commands/tui/tui-io.js.map +1 -0
  38. package/dist/bin/commands/tui/types.js +9 -0
  39. package/dist/bin/commands/tui/types.js.map +1 -1
  40. package/dist/bin/commands/tui/ws-handler.js +115 -23
  41. package/dist/bin/commands/tui/ws-handler.js.map +1 -1
  42. package/dist/bin/commands/worker.js +159 -0
  43. package/dist/bin/commands/worker.js.map +1 -0
  44. package/dist/bin/postinstall.js +0 -76
  45. package/dist/bin/postinstall.js.map +1 -1
  46. package/dist/lib/mcp/format-converters.js +21 -2
  47. package/dist/lib/mcp/format-converters.js.map +1 -1
  48. package/dist/lib/mcp/mcp-registry.js +75 -0
  49. package/dist/lib/mcp/mcp-registry.js.map +1 -0
  50. package/dist/lib/stt.js +1 -1
  51. package/dist/lib/stt.js.map +1 -1
  52. package/dist/lib/upload.js +7 -0
  53. package/dist/lib/upload.js.map +1 -1
  54. package/dist/scripts/fresh-install-smoke.js +1 -1
  55. package/dist/scripts/fresh-install-smoke.js.map +1 -1
  56. package/dist/server.js +151 -22
  57. package/dist/server.js.map +1 -1
  58. package/dist/src/agent/agy-runtime.js +1 -0
  59. package/dist/src/agent/agy-runtime.js.map +1 -1
  60. package/dist/src/agent/agy-transcript-watcher.js +78 -0
  61. package/dist/src/agent/agy-transcript-watcher.js.map +1 -0
  62. package/dist/src/agent/agy-transcript.js +158 -0
  63. package/dist/src/agent/agy-transcript.js.map +1 -0
  64. package/dist/src/agent/args.js +51 -5
  65. package/dist/src/agent/args.js.map +1 -1
  66. package/dist/src/agent/claude-e-runtime.js +1 -1
  67. package/dist/src/agent/claude-e-runtime.js.map +1 -1
  68. package/dist/src/agent/codex-app-client.js +2 -2
  69. package/dist/src/agent/codex-app-client.js.map +1 -1
  70. package/dist/src/agent/cursor-runtime.js +1 -0
  71. package/dist/src/agent/cursor-runtime.js.map +1 -1
  72. package/dist/src/agent/error-classifier.js +6 -1
  73. package/dist/src/agent/error-classifier.js.map +1 -1
  74. package/dist/src/agent/events/claude.js +1 -0
  75. package/dist/src/agent/events/claude.js.map +1 -1
  76. package/dist/src/agent/events/codex.js +0 -44
  77. package/dist/src/agent/events/codex.js.map +1 -1
  78. package/dist/src/agent/events/helpers.js +52 -5
  79. package/dist/src/agent/events/helpers.js.map +1 -1
  80. package/dist/src/agent/events/opencode.js +6 -2
  81. package/dist/src/agent/events/opencode.js.map +1 -1
  82. package/dist/src/agent/events/summary.js +3 -2
  83. package/dist/src/agent/events/summary.js.map +1 -1
  84. package/dist/src/agent/events/tool-labels.js +8 -5
  85. package/dist/src/agent/events/tool-labels.js.map +1 -1
  86. package/dist/src/agent/kiro-auth.js +213 -0
  87. package/dist/src/agent/kiro-auth.js.map +1 -0
  88. package/dist/src/agent/kiro-models.js +79 -0
  89. package/dist/src/agent/kiro-models.js.map +1 -0
  90. package/dist/src/agent/kiro-runtime.js +314 -0
  91. package/dist/src/agent/kiro-runtime.js.map +1 -0
  92. package/dist/src/agent/lifecycle-handler.js +208 -23
  93. package/dist/src/agent/lifecycle-handler.js.map +1 -1
  94. package/dist/src/agent/memory-flush-controller.js +3 -4
  95. package/dist/src/agent/memory-flush-controller.js.map +1 -1
  96. package/dist/src/agent/resume-classifier.js +18 -1
  97. package/dist/src/agent/resume-classifier.js.map +1 -1
  98. package/dist/src/agent/session-persistence.js +2 -2
  99. package/dist/src/agent/session-persistence.js.map +1 -1
  100. package/dist/src/agent/smoke-detector.js +3 -0
  101. package/dist/src/agent/smoke-detector.js.map +1 -1
  102. package/dist/src/agent/spawn/queue.js +11 -5
  103. package/dist/src/agent/spawn/queue.js.map +1 -1
  104. package/dist/src/agent/spawn/resume.js +6 -1
  105. package/dist/src/agent/spawn/resume.js.map +1 -1
  106. package/dist/src/agent/spawn-env.js +1 -1
  107. package/dist/src/agent/spawn-env.js.map +1 -1
  108. package/dist/src/agent/spawn.js +231 -43
  109. package/dist/src/agent/spawn.js.map +1 -1
  110. package/dist/src/agent/watchdog.js +1 -1
  111. package/dist/src/agent/watchdog.js.map +1 -1
  112. package/dist/src/browser/actions.js +0 -8
  113. package/dist/src/browser/actions.js.map +1 -1
  114. package/dist/src/browser/adaptive-fetch/browser-escalation.js +5 -29
  115. package/dist/src/browser/adaptive-fetch/browser-escalation.js.map +1 -1
  116. package/dist/src/browser/adaptive-fetch/browser-runtime.js +5 -14
  117. package/dist/src/browser/adaptive-fetch/browser-runtime.js.map +1 -1
  118. package/dist/src/browser/adaptive-fetch/browser-session.js +14 -28
  119. package/dist/src/browser/adaptive-fetch/browser-session.js.map +1 -1
  120. package/dist/src/browser/adaptive-fetch/challenge-detector.js +4 -26
  121. package/dist/src/browser/adaptive-fetch/challenge-detector.js.map +1 -1
  122. package/dist/src/browser/adaptive-fetch/content-scorer.js +5 -29
  123. package/dist/src/browser/adaptive-fetch/content-scorer.js.map +1 -1
  124. package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js +0 -64
  125. package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js.map +1 -1
  126. package/dist/src/browser/adaptive-fetch/fetcher.js +4 -19
  127. package/dist/src/browser/adaptive-fetch/fetcher.js.map +1 -1
  128. package/dist/src/browser/adaptive-fetch/human-loop.js +0 -26
  129. package/dist/src/browser/adaptive-fetch/human-loop.js.map +1 -1
  130. package/dist/src/browser/adaptive-fetch/index.js +74 -145
  131. package/dist/src/browser/adaptive-fetch/index.js.map +1 -1
  132. package/dist/src/browser/adaptive-fetch/metadata.js +1 -41
  133. package/dist/src/browser/adaptive-fetch/metadata.js.map +1 -1
  134. package/dist/src/browser/adaptive-fetch/output.js +1 -18
  135. package/dist/src/browser/adaptive-fetch/output.js.map +1 -1
  136. package/dist/src/browser/adaptive-fetch/reader-adapters.js +43 -75
  137. package/dist/src/browser/adaptive-fetch/reader-adapters.js.map +1 -1
  138. package/dist/src/browser/adaptive-fetch/safety.js +5 -48
  139. package/dist/src/browser/adaptive-fetch/safety.js.map +1 -1
  140. package/dist/src/browser/adaptive-fetch/third-party-readers.js +0 -11
  141. package/dist/src/browser/adaptive-fetch/third-party-readers.js.map +1 -1
  142. package/dist/src/browser/adaptive-fetch/trace.js +3 -18
  143. package/dist/src/browser/adaptive-fetch/trace.js.map +1 -1
  144. package/dist/src/browser/adaptive-fetch/transforms.js +0 -23
  145. package/dist/src/browser/adaptive-fetch/transforms.js.map +1 -1
  146. package/dist/src/browser/adaptive-fetch/types.js +3 -0
  147. package/dist/src/browser/adaptive-fetch/types.js.map +1 -0
  148. package/dist/src/browser/adaptive-fetch/validators.js +0 -17
  149. package/dist/src/browser/adaptive-fetch/validators.js.map +1 -1
  150. package/dist/src/browser/adaptive-fetch/waf-profiles.js +0 -10
  151. package/dist/src/browser/adaptive-fetch/waf-profiles.js.map +1 -1
  152. package/dist/src/browser/connection.js +1 -1
  153. package/dist/src/browser/connection.js.map +1 -1
  154. package/dist/src/browser/web-ai/chatgpt-response.js +0 -1
  155. package/dist/src/browser/web-ai/chatgpt-response.js.map +1 -1
  156. package/dist/src/browser/web-ai/chatgpt.js +0 -33
  157. package/dist/src/browser/web-ai/chatgpt.js.map +1 -1
  158. package/dist/src/browser/web-ai/diagnostics.js +0 -16
  159. package/dist/src/browser/web-ai/diagnostics.js.map +1 -1
  160. package/dist/src/browser/web-ai/doctor.js.map +1 -1
  161. package/dist/src/browser/web-ai/errors.js +1 -1
  162. package/dist/src/browser/web-ai/errors.js.map +1 -1
  163. package/dist/src/browser/web-ai/grok-live.js +2 -0
  164. package/dist/src/browser/web-ai/grok-live.js.map +1 -1
  165. package/dist/src/cli/claude-models.js +2 -2
  166. package/dist/src/cli/claude-models.js.map +1 -1
  167. package/dist/src/cli/command-context.js.map +1 -1
  168. package/dist/src/cli/commands.js +16 -4
  169. package/dist/src/cli/commands.js.map +1 -1
  170. package/dist/src/cli/compact.js +2 -1
  171. package/dist/src/cli/compact.js.map +1 -1
  172. package/dist/src/cli/handlers/session-handlers.js +34 -0
  173. package/dist/src/cli/handlers/session-handlers.js.map +1 -0
  174. package/dist/src/cli/handlers-project.js.map +1 -1
  175. package/dist/src/cli/handlers-runtime.js +2 -0
  176. package/dist/src/cli/handlers-runtime.js.map +1 -1
  177. package/dist/src/cli/handlers-workflows.js +85 -17
  178. package/dist/src/cli/handlers-workflows.js.map +1 -1
  179. package/dist/src/cli/handlers.js +84 -43
  180. package/dist/src/cli/handlers.js.map +1 -1
  181. package/dist/src/cli/readiness.js +17 -1
  182. package/dist/src/cli/readiness.js.map +1 -1
  183. package/dist/src/cli/registry-live.js +17 -0
  184. package/dist/src/cli/registry-live.js.map +1 -0
  185. package/dist/src/cli/registry.js +51 -10
  186. package/dist/src/cli/registry.js.map +1 -1
  187. package/dist/src/cli/tui/composer.js +135 -5
  188. package/dist/src/cli/tui/composer.js.map +1 -1
  189. package/dist/src/cli/tui/diffview.js +41 -0
  190. package/dist/src/cli/tui/diffview.js.map +1 -0
  191. package/dist/src/cli/tui/editor.js +45 -0
  192. package/dist/src/cli/tui/editor.js.map +1 -0
  193. package/dist/src/cli/tui/file-mention.js +78 -0
  194. package/dist/src/cli/tui/file-mention.js.map +1 -0
  195. package/dist/src/cli/tui/highlight.js +82 -0
  196. package/dist/src/cli/tui/highlight.js.map +1 -0
  197. package/dist/src/cli/tui/keymap.js +21 -0
  198. package/dist/src/cli/tui/keymap.js.map +1 -1
  199. package/dist/src/cli/tui/markdown.js +124 -0
  200. package/dist/src/cli/tui/markdown.js.map +1 -0
  201. package/dist/src/cli/tui/mode.js +26 -0
  202. package/dist/src/cli/tui/mode.js.map +1 -0
  203. package/dist/src/cli/tui/overlay.js +121 -98
  204. package/dist/src/cli/tui/overlay.js.map +1 -1
  205. package/dist/src/cli/tui/render/frame.js +72 -0
  206. package/dist/src/cli/tui/render/frame.js.map +1 -0
  207. package/dist/src/cli/tui/render/layout.js +22 -0
  208. package/dist/src/cli/tui/render/layout.js.map +1 -0
  209. package/dist/src/cli/tui/render/mouse.js +25 -0
  210. package/dist/src/cli/tui/render/mouse.js.map +1 -0
  211. package/dist/src/cli/tui/render/scheduler.js +37 -0
  212. package/dist/src/cli/tui/render/scheduler.js.map +1 -0
  213. package/dist/src/cli/tui/render/viewport.js +82 -0
  214. package/dist/src/cli/tui/render/viewport.js.map +1 -0
  215. package/dist/src/cli/tui/renderers.js +37 -0
  216. package/dist/src/cli/tui/renderers.js.map +1 -1
  217. package/dist/src/cli/tui/stream.js +48 -0
  218. package/dist/src/cli/tui/stream.js.map +1 -0
  219. package/dist/src/cli/tui/text-buffer.js +143 -0
  220. package/dist/src/cli/tui/text-buffer.js.map +1 -0
  221. package/dist/src/cli/tui/theme.js +128 -0
  222. package/dist/src/cli/tui/theme.js.map +1 -0
  223. package/dist/src/cli/tui/transcript.js +4 -0
  224. package/dist/src/cli/tui/transcript.js.map +1 -1
  225. package/dist/src/command-contract/help-renderer.js +1 -1
  226. package/dist/src/command-contract/help-renderer.js.map +1 -1
  227. package/dist/src/core/chat-sessions.js +63 -0
  228. package/dist/src/core/chat-sessions.js.map +1 -0
  229. package/dist/src/core/cli-detection.js +14 -0
  230. package/dist/src/core/cli-detection.js.map +1 -1
  231. package/dist/src/core/compact.js +43 -11
  232. package/dist/src/core/compact.js.map +1 -1
  233. package/dist/src/core/config.js +14 -1
  234. package/dist/src/core/config.js.map +1 -1
  235. package/dist/src/core/db.js +52 -12
  236. package/dist/src/core/db.js.map +1 -1
  237. package/dist/src/core/employees.js +2 -2
  238. package/dist/src/core/employees.js.map +1 -1
  239. package/dist/src/core/main-session.js +3 -2
  240. package/dist/src/core/main-session.js.map +1 -1
  241. package/dist/src/discord/bot.js.map +1 -1
  242. package/dist/src/discord/discord-file.js +1 -1
  243. package/dist/src/discord/discord-file.js.map +1 -1
  244. package/dist/src/discord/send-only-client.js +1 -3
  245. package/dist/src/discord/send-only-client.js.map +1 -1
  246. package/dist/src/goal/heartbeat.js +113 -7
  247. package/dist/src/goal/heartbeat.js.map +1 -1
  248. package/dist/src/goal/store.js +44 -5
  249. package/dist/src/goal/store.js.map +1 -1
  250. package/dist/src/ide/diff.js +37 -0
  251. package/dist/src/ide/diff.js.map +1 -1
  252. package/dist/src/manager/launchd-service.js +1 -1
  253. package/dist/src/manager/launchd-service.js.map +1 -1
  254. package/dist/src/manager/lifecycle-helpers.js +14 -0
  255. package/dist/src/manager/lifecycle-helpers.js.map +1 -1
  256. package/dist/src/manager/lifecycle-store.js.map +1 -1
  257. package/dist/src/manager/lifecycle.js +94 -5
  258. package/dist/src/manager/lifecycle.js.map +1 -1
  259. package/dist/src/manager/notes/routes.js +0 -31
  260. package/dist/src/manager/notes/routes.js.map +1 -1
  261. package/dist/src/manager/notes/ws.js.map +1 -1
  262. package/dist/src/manager/preview-link-policy.js +11 -4
  263. package/dist/src/manager/preview-link-policy.js.map +1 -1
  264. package/dist/src/manager/registry.js.map +1 -1
  265. package/dist/src/manager/routes/dashboard-memory.js.map +1 -1
  266. package/dist/src/manager/scan.js +36 -1
  267. package/dist/src/manager/scan.js.map +1 -1
  268. package/dist/src/manager/server.js +42 -7
  269. package/dist/src/manager/server.js.map +1 -1
  270. package/dist/src/manager/shutdown.js +8 -3
  271. package/dist/src/manager/shutdown.js.map +1 -1
  272. package/dist/src/manager/systemd-service.js +1 -1
  273. package/dist/src/manager/systemd-service.js.map +1 -1
  274. package/dist/src/memory/indexing.js +49 -1
  275. package/dist/src/memory/indexing.js.map +1 -1
  276. package/dist/src/memory/keyword-expand.js +0 -187
  277. package/dist/src/memory/keyword-expand.js.map +1 -1
  278. package/dist/src/memory/runtime.js +3 -2
  279. package/dist/src/memory/runtime.js.map +1 -1
  280. package/dist/src/memory/shared.js.map +1 -1
  281. package/dist/src/messaging/send.js +66 -7
  282. package/dist/src/messaging/send.js.map +1 -1
  283. package/dist/src/orchestrator/collect.js +3 -2
  284. package/dist/src/orchestrator/collect.js.map +1 -1
  285. package/dist/src/orchestrator/distribute.js +9 -3
  286. package/dist/src/orchestrator/distribute.js.map +1 -1
  287. package/dist/src/orchestrator/friction.js +59 -0
  288. package/dist/src/orchestrator/friction.js.map +1 -0
  289. package/dist/src/orchestrator/gateway.js +4 -4
  290. package/dist/src/orchestrator/gateway.js.map +1 -1
  291. package/dist/src/orchestrator/pipeline.js +89 -45
  292. package/dist/src/orchestrator/pipeline.js.map +1 -1
  293. package/dist/src/orchestrator/sanitize.js +69 -0
  294. package/dist/src/orchestrator/sanitize.js.map +1 -0
  295. package/dist/src/orchestrator/seed.js +50 -0
  296. package/dist/src/orchestrator/seed.js.map +1 -0
  297. package/dist/src/orchestrator/state-machine.js +215 -76
  298. package/dist/src/orchestrator/state-machine.js.map +1 -1
  299. package/dist/src/orchestrator/worker-monitor.js +1 -1
  300. package/dist/src/orchestrator/worker-monitor.js.map +1 -1
  301. package/dist/src/orchestrator/worker-progress.js +29 -0
  302. package/dist/src/orchestrator/worker-progress.js.map +1 -0
  303. package/dist/src/orchestrator/worker-registry.js +63 -2
  304. package/dist/src/orchestrator/worker-registry.js.map +1 -1
  305. package/dist/src/prompt/builder.js +190 -115
  306. package/dist/src/prompt/builder.js.map +1 -1
  307. package/dist/src/prompt/templates/a1-system.md +124 -61
  308. package/dist/src/prompt/templates/control-system.md +2 -2
  309. package/dist/src/prompt/templates/employee.md +41 -56
  310. package/dist/src/prompt/templates/orchestration.md +23 -8
  311. package/dist/src/prompt/templates/skills.md +6 -0
  312. package/dist/src/routes/browser.js +3 -3
  313. package/dist/src/routes/browser.js.map +1 -1
  314. package/dist/src/routes/employees.js +4 -4
  315. package/dist/src/routes/employees.js.map +1 -1
  316. package/dist/src/routes/goal.js +48 -4
  317. package/dist/src/routes/goal.js.map +1 -1
  318. package/dist/src/routes/heartbeat.js +1 -1
  319. package/dist/src/routes/heartbeat.js.map +1 -1
  320. package/dist/src/routes/i18n.js +1 -1
  321. package/dist/src/routes/i18n.js.map +1 -1
  322. package/dist/src/routes/jaw-memory.js +1 -1
  323. package/dist/src/routes/jaw-memory.js.map +1 -1
  324. package/dist/src/routes/memory.js.map +1 -1
  325. package/dist/src/routes/messaging.js +8 -3
  326. package/dist/src/routes/messaging.js.map +1 -1
  327. package/dist/src/routes/orchestrate.js +267 -117
  328. package/dist/src/routes/orchestrate.js.map +1 -1
  329. package/dist/src/routes/quota-agy-reverse.js +6 -5
  330. package/dist/src/routes/quota-agy-reverse.js.map +1 -1
  331. package/dist/src/routes/quota-kiro-reverse.js +187 -0
  332. package/dist/src/routes/quota-kiro-reverse.js.map +1 -0
  333. package/dist/src/routes/quota.js +68 -6
  334. package/dist/src/routes/quota.js.map +1 -1
  335. package/dist/src/routes/settings.js +37 -8
  336. package/dist/src/routes/settings.js.map +1 -1
  337. package/dist/src/routes/skills.js.map +1 -1
  338. package/dist/src/security/path-guards.js +0 -3
  339. package/dist/src/security/path-guards.js.map +1 -1
  340. package/dist/src/security/security-audit-log.js.map +1 -1
  341. package/dist/src/shared/shell-command-display.js +51 -0
  342. package/dist/src/shared/shell-command-display.js.map +1 -0
  343. package/dist/src/telegram/bot.js.map +1 -1
  344. package/dist/src/trace/store.js +32 -0
  345. package/dist/src/trace/store.js.map +1 -1
  346. package/dist/src/types/cli-engine.js +1 -0
  347. package/dist/src/types/cli-engine.js.map +1 -1
  348. package/dist/src/workflows/employee-boundary.js +7 -7
  349. package/dist/src/workflows/employee-boundary.js.map +1 -1
  350. package/dist/src/workflows/handoff.js +16 -16
  351. package/dist/src/workflows/handoff.js.map +1 -1
  352. package/dist/src/workflows/scope-sandbox.js +58 -0
  353. package/dist/src/workflows/scope-sandbox.js.map +1 -0
  354. package/package.json +1 -1
  355. package/public/assets/providers/kiro-color.svg +15 -0
  356. package/public/assets/providers/kiro.svg +14 -0
  357. package/public/css/chat.css +27 -0
  358. package/public/css/modals.css +79 -0
  359. package/public/css/orc-state.css +10 -6
  360. package/public/css/sidebar.css +85 -0
  361. package/public/css/variables.css +6 -2
  362. package/public/dist/assets/{Agent-CIUGaUVn.js → Agent-DBKNQ6tp.js} +1 -1
  363. package/public/dist/assets/{DocPanel-C1pGgE-S.js → DocPanel-BU16GUlB.js} +1 -1
  364. package/public/dist/assets/DocPanel-gU-WkgyA.css +1 -0
  365. package/public/dist/assets/Employees-F0ssNuO-.js +1 -0
  366. package/public/dist/assets/{FolderPanel-DSkanaGN.js → FolderPanel-DT0fU8f2.js} +1 -1
  367. package/public/dist/assets/Heartbeat-fsuLzY9c.js +1 -0
  368. package/public/dist/assets/Mcp-_Yq4N3Sk.js +4 -0
  369. package/public/dist/assets/{Memory-BgN8djV4.js → Memory-CRR8kotI.js} +1 -1
  370. package/public/dist/assets/{ModelProvider-DHQ1Zvw0.js → ModelProvider-DQgISbKw.js} +1 -1
  371. package/public/dist/assets/agent-meta-C4mauPL5.js +1 -0
  372. package/public/dist/assets/app-0OQhPpTG.css +1 -0
  373. package/public/dist/assets/app-CSqIyg9A.js +55 -0
  374. package/public/dist/assets/constants-BHMkzpN_.js +1 -0
  375. package/public/dist/assets/{employees-DiNLzEXS.js → employees-CZdWHH-r.js} +7 -7
  376. package/public/dist/assets/idb-cache-0LNMskFB.js +1 -0
  377. package/public/dist/assets/idb-cache-5H89a4l8.js +1 -0
  378. package/public/dist/assets/manager-CGTQ5EIm.js +12 -0
  379. package/public/dist/assets/manager-UBunDqMH.css +1 -0
  380. package/public/dist/assets/{memory-B_nn0A4v.js → memory-B3QSmj_e.js} +9 -9
  381. package/public/dist/assets/memory-DOBqiuPc.js +1 -0
  382. package/public/dist/assets/{provider-icons-XEfJPGTe.js → provider-icons-Crv6yvlG.js} +35 -6
  383. package/public/dist/assets/render-J11oxfnl.js +28 -0
  384. package/public/dist/assets/settings-BV_2Bh0_.js +1 -0
  385. package/public/dist/assets/settings-m_cim0ov.js +151 -0
  386. package/public/dist/assets/sidebar-ZBXdBgF7.js +49 -0
  387. package/public/dist/assets/{skills-COa4iSwL.js → skills-CjaBmIPV.js} +6 -6
  388. package/public/dist/assets/skills-Xm3fl1zr.js +1 -0
  389. package/public/dist/assets/{slash-commands-C_ePvrPi.js → slash-commands-71jc07Wf.js} +1 -1
  390. package/public/dist/assets/slash-commands-BO6ssnAz.js +1 -0
  391. package/public/dist/assets/{trace-drawer-CY4z_Ie8.js → trace-drawer-Czvf2P2o.js} +1 -1
  392. package/public/dist/assets/ui-CverZJnd.js +1 -0
  393. package/public/dist/assets/ui-qKxy-4p9.js +142 -0
  394. package/public/dist/index.html +113 -86
  395. package/public/dist/manager/index.html +2 -2
  396. package/public/index.html +111 -84
  397. package/public/js/constants.ts +34 -11
  398. package/public/js/features/chat-messages.ts +13 -2
  399. package/public/js/features/chat-search.ts +5 -1
  400. package/public/js/features/chat.ts +86 -44
  401. package/public/js/features/employees.ts +7 -2
  402. package/public/js/features/idb-cache.ts +4 -0
  403. package/public/js/features/media-lightbox.ts +40 -0
  404. package/public/js/features/message-history.ts +55 -7
  405. package/public/js/features/pending-queue.ts +28 -4
  406. package/public/js/features/process-block.ts +32 -17
  407. package/public/js/features/process-log-adapter.ts +11 -2
  408. package/public/js/features/settings-cli-status-render.ts +161 -0
  409. package/public/js/features/settings-cli-status.ts +136 -187
  410. package/public/js/features/settings-core.ts +5 -1
  411. package/public/js/features/settings-mcp.ts +513 -7
  412. package/public/js/features/settings-types.ts +1 -0
  413. package/public/js/features/settings.ts +1 -1
  414. package/public/js/features/tool-ui.ts +18 -4
  415. package/public/js/features/transport-status-row.ts +3 -0
  416. package/public/js/features/ui-status.ts +5 -1
  417. package/public/js/main.ts +5 -0
  418. package/public/js/preview-parent-origin.ts +14 -0
  419. package/public/js/provider-icons.ts +6 -1
  420. package/public/js/render/file-links.ts +10 -2
  421. package/public/js/render/markdown.ts +16 -0
  422. package/public/js/ui.ts +8 -1
  423. package/public/js/virtual-scroll.ts +19 -0
  424. package/public/js/ws.ts +151 -15
  425. package/public/locales/en.json +9 -2
  426. package/public/locales/ja.json +9 -2
  427. package/public/locales/ko.json +9 -2
  428. package/public/locales/zh.json +9 -2
  429. package/public/manager/src/App.tsx +13 -70
  430. package/public/manager/src/InstancePreview.tsx +56 -11
  431. package/public/manager/src/SidebarRailRouter.tsx +32 -4
  432. package/public/manager/src/components/InstanceRow.tsx +0 -1
  433. package/public/manager/src/components/WorkbenchHeader.tsx +17 -7
  434. package/public/manager/src/doc-panel/DocPanel.tsx +14 -1
  435. package/public/manager/src/doc-panel/doc-panel.css +16 -0
  436. package/public/manager/src/folder-panel/FolderPanel.tsx +13 -2
  437. package/public/manager/src/hooks/useElectronDroppedPaths.ts +89 -0
  438. package/public/manager/src/hooks/useInstanceMessageEvents.ts +4 -15
  439. package/public/manager/src/manager-components.css +35 -1
  440. package/public/manager/src/manager-polish.css +11 -1
  441. package/public/manager/src/manager-shortcut-runner.ts +107 -0
  442. package/public/manager/src/manager-shortcuts.ts +15 -0
  443. package/public/manager/src/panels/desktop-bridge.ts +13 -0
  444. package/public/manager/src/settings/SettingsSidebar.tsx +1 -1
  445. package/public/manager/src/settings/components/sidebar-filter.ts +2 -0
  446. package/public/manager/src/settings/pages/Mcp.tsx +311 -43
  447. package/public/manager/src/settings/pages/components/McpServerCard.tsx +89 -55
  448. package/public/manager/src/settings/pages/components/agent/agent-meta.ts +32 -9
  449. package/public/manager/src/settings/pages/components/employees-helpers.ts +1 -0
  450. package/public/manager/src/settings/pages/components/heartbeat-helpers.ts +1 -0
  451. package/public/manager/src/settings/pages/mcp-helpers.ts +54 -12
  452. package/public/manager/src/settings/types.ts +1 -0
  453. package/public/manager/src/types.ts +2 -1
  454. package/scripts/fresh-install-smoke.ts +1 -1
  455. package/scripts/smoke/agy-transcript-tail-smoke.mjs +89 -0
  456. package/public/dist/assets/DocPanel-CL1scIfq.css +0 -1
  457. package/public/dist/assets/Employees-BL9MAzzx.js +0 -1
  458. package/public/dist/assets/Heartbeat-D64JCg4t.js +0 -1
  459. package/public/dist/assets/Mcp-wYwJA_61.js +0 -3
  460. package/public/dist/assets/agent-meta-BhEbjy4P.js +0 -1
  461. package/public/dist/assets/app-2Rz848bQ.js +0 -48
  462. package/public/dist/assets/app-BW-Xz2p6.css +0 -1
  463. package/public/dist/assets/constants-ahKI_aEG.js +0 -1
  464. package/public/dist/assets/idb-cache-BnZfG5FD.js +0 -1
  465. package/public/dist/assets/idb-cache-CZ3JdK8r.js +0 -1
  466. package/public/dist/assets/manager-CfyZloIP.js +0 -12
  467. package/public/dist/assets/manager-DyrwJLZr.css +0 -1
  468. package/public/dist/assets/memory-CCjNFWmO.js +0 -1
  469. package/public/dist/assets/render-CgDEBoCX.js +0 -28
  470. package/public/dist/assets/settings-CY_6tGuS.js +0 -1
  471. package/public/dist/assets/settings-DWW4GzNc.js +0 -66
  472. package/public/dist/assets/sidebar-DQKE5IA1.js +0 -23
  473. package/public/dist/assets/skills-DYTlqoke.js +0 -1
  474. package/public/dist/assets/slash-commands-D7CU5oso.js +0 -1
  475. package/public/dist/assets/ui-Car1OUvV.js +0 -1
  476. package/public/dist/assets/ui-DK_9ndj0.js +0 -140
  477. /package/public/dist/assets/{locale-DT1WRaeJ.js → locale-BHMJIzyw.js} +0 -0
@@ -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};
@@ -0,0 +1,28 @@
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 f,l as p,m as ee,o as m,p as h,s as te,u as ne,v as g,x as _,y as v}from"./vendor-render-DCb9B75Q.js";import{i as y,t as re}from"./api-tVoG39dL.js";import{t as b}from"./preload-helper-DuH3-WbD.js";import{A as ie,B as ae,C as oe,D as se,E as ce,F as le,G as ue,H as de,I as fe,J as pe,K as me,L as he,M as ge,N as _e,O as ve,P as ye,Q as be,R as xe,S as Se,T as Ce,U as we,V as Te,W as Ee,X as De,Y as Oe,Z as ke,_ as Ae,a as je,b as Me,c as Ne,d as Pe,f as Fe,g as Ie,h as Le,i as Re,j as ze,k as Be,l as Ve,m as He,n as Ue,o as We,p as Ge,q as Ke,r as qe,s as Je,t as Ye,u as Xe,v as Ze,w as Qe,x as $e,y as et,z as tt}from"./vendor-icons-D2l6ddC0.js";import{n as x,t as S}from"./mermaid-preprocess-p7OIpOon.js";var C=[`en`,`ko`,`zh`,`ja`],w=`ko`,T={},E={};async function nt(){let e=null;try{e=localStorage.getItem(`claw_locale`)}catch{}if(!e){let t=(navigator.language||`ko`).split(/[-_]/)[0].toLowerCase();e=C.includes(t)?t:`ko`}E=await D(`ko`),T=e===`ko`?E:await D(e),w=e,document.documentElement.lang=w,k()}async function D(e){try{let{api:t}=await b(async()=>{let{api:e}=await import(`./api-DNnX8m0u.js`);return{api:e}},[]);return await t(`/api/i18n/${e}`)||{}}catch{return{}}}function O(e,t={}){let n=T[e]??E[e]??e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{${e}}`,String(r));return n}function k(){document.querySelectorAll(`[data-i18n]`).forEach(e=>{let t=e.getAttribute(`data-i18n`);t&&(e.textContent=O(t))}),document.querySelectorAll(`[data-i18n-placeholder]`).forEach(e=>{let t=e.getAttribute(`data-i18n-placeholder`);t&&(e.placeholder=O(t))}),document.querySelectorAll(`[data-i18n-title]`).forEach(e=>{let t=e.getAttribute(`data-i18n-title`);t&&(e.title=O(t))}),document.querySelectorAll(`[data-i18n-aria]`).forEach(e=>{let t=e.getAttribute(`data-i18n-aria`);t&&e.setAttribute(`aria-label`,O(t))})}async function rt(e){if(e!==w){C.includes(e)||(e=`ko`),T=e===`ko`?E:await D(e),w=e,document.documentElement.lang=w;try{localStorage.setItem(`claw_locale`,e)}catch{}k();try{let{loadEmployees:e}=await b(async()=>{let{loadEmployees:e}=await import(`./employees-CZdWHH-r.js`);return{loadEmployees:e}},[]);e()}catch{}try{let{loadSkills:e}=await b(async()=>{let{loadSkills:e}=await import(`./skills-Xm3fl1zr.js`);return{loadSkills:e}},[]);e()}catch{}try{let{loadCommands:e}=await b(async()=>{let{loadCommands:e}=await import(`./slash-commands-BO6ssnAz.js`);return{loadCommands:e}},[]);e()}catch{}try{let{loadSettings:e}=await b(async()=>{let{loadSettings:e}=await import(`./settings-BV_2Bh0_.js`);return{loadSettings:e}},[]);e()}catch{}}}function it(){return w}function at(e,t={}){let n=new URL(e,location.origin);return n.searchParams.has(`locale`)||n.searchParams.set(`locale`,w),fetch(n.toString(),t)}function ot(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 A=0;function st(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-${A++}\x00`;return t.set(n,e),n}),fences:t}}function ct(e,t){for(let[n,r]of t)e=e.replace(n,()=>r);return e}function lt(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=A++,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=A++;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 j(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}var ut=/["'](?:subtasks|employee_config|agent_phases|orchestration_plan)["']\s*:/,dt=/(^|\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 ft(e){let t=dt.exec(e);return!t||t.index<0?e:e.slice(0,t.index).trim()}function M(e){let t=e.replace(/```json\n([\s\S]*?)\n```/g,(e,t)=>ut.test(t)?``:e);return t=t.replace(/\{[^{}]*"subtasks"\s*:\s*\[[\s\S]*?\]\s*\}/g,``).trim(),ft(t)}function pt(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 mt(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">${j(a.tex)}</div>`:`<code class="math-placeholder">${j(a.tex)}</code>`;try{return e.renderToString(a.tex,{displayMode:a.displayMode,throwOnError:!1})}catch{return a.displayMode?`<pre><code>${j(a.tex)}</code></pre>`:`<code>${j(a.tex)}</code>`}})}var ht=`http://www.w3.org/2000/svg`,gt=new Set([`a`,`area`,`link`]),_t=[`fill`,`stroke`,`filter`,`mask`,`clip-path`,`marker-start`,`marker-mid`,`marker-end`,`cursor`],N=null;function vt(){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 yt(e){e.addHook(`afterSanitizeAttributes`,e=>{let t=e.tagName.toLowerCase();if(e.namespaceURI===ht||!gt.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 _t){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 bt(){return N||(N=vt(),yt(N),N)}function P(){return bt()}function xt(e){let t=P().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 F(e){return P().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 St=`<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>`,I=14,Ct=16;function L(e,t=Ct){return be(e,{size:t})}var R={check:L(Te),error:L(tt),warning:L(Re),skip:L(Ne),tool:L(qe),thinking:L(Se),search:L(Pe),web:L(ge),exec:L(Ye),compacting:L(et),plan:L(Me),brain:L(Ke),heartPulse:L(ie),lock:L(oe),lockOpen:L(Qe),key:L(se),settings:L(Ve),file:L(le),trash:L(je),lightbulb:L(ce),refresh:L(Ge),mic:L($e),clipboard:L(xe),robot:L(pe),palette:L(Ze),link:L(Ce),salute:L(ze),shark:St,user:L(ae),paperclip:L(Ae),save:L(Fe),gamepad:L(_e),house:L(ve),radio:L(He),folder:L(ye),pencil:L(Ie),chart:L(me),hourglass:L(Be),target:L(We),ban:L(Oe),play:L(Le),stop:L(Je),close:L(Ue,I),send:L(Xe),copy:L(he,I),download:L(fe,I),checkSimple:L(ue,I),chevronLeft:L(we,I),chevronRight:L(de,I),chevronDown:L(Ee,I),arrowLeft:L(ke,I),arrowRight:L(De,I)},wt={"✅":`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 Tt(e){let t=wt[e];return t?R[t]:e}function Et(e){return e===`✅`?`done`:e===`❌`?`error`:null}function Dt(e=document.body){let t=e.querySelectorAll(`[data-icon]`);for(let e of t){let t=e.dataset.icon;t&&R[t]&&(e.innerHTML=R[t],e.classList.add(`icon-hydrated`))}}function Ot(e){return e instanceof Error?e.message:String(e)}function kt(){return window.cliJawDesktop?.clipboard??null}async function z(e){try{let t=kt();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:Ot(e)}}}function At(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=R.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=R.copy,e.appendChild(r)}var jt=!1;function Mt(){jt||(jt=!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&&B(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&&B(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`},`*`),B(i,``,`save`));return}let t=e.querySelector(`svg`);t&&Pt(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&&Pt(t,a);return}}))}function B(e,t,n){let r=()=>{let t=e.innerHTML;e.innerHTML=R.checkSimple,e.classList.add(`copied`),setTimeout(()=>{e.innerHTML=t,e.classList.remove(`copied`)},1500)};n===`copy`?z(t).then(e=>{e.ok&&r()}):r()}function Nt(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&&Nt(t,a)}}function Pt(e,t){let n=e.cloneNode(!0);Nt(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&&(Ft(e,`diagram-${Date.now()}.png`),B(t,``,`save`))},`image/png`)},o.onerror=()=>{Ft(new Blob([i],{type:`image/svg+xml;charset=utf-8`}),`diagram-${Date.now()}.svg`),B(t,``,`save`)},o.src=a}function Ft(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 It(e){return e.kind===`partial`?`<div class="diagram-container diagram-loading" role="status"
3
+ aria-label="Diagram loading"><div class="diagram-spinner"></div></div>`:e.kind===`error`?`<div class="diagram-container diagram-error" role="alert">
4
+ Malformed SVG: unclosed element</div>`:`<div class="diagram-container diagram-svg" tabindex="0"
5
+ role="figure" aria-label="SVG diagram">
6
+ ${F(e.svg)}
7
+ <button class="diagram-save-btn" type="button"
8
+ aria-label="Save as image" title="Save">${R.download}</button>
9
+ <button class="diagram-copy-btn" type="button"
10
+ aria-label="Copy source" title="Copy">${R.copy}</button>
11
+ <button class="diagram-zoom-btn" type="button"
12
+ aria-label="Expand diagram" title="Expand">⤢</button>
13
+ </div>`}function Lt(e,t){for(let n of t){let t=`<div\\b[^>]*?\\bdata-jaw-svg="${n.id}"[^>]*></div>`,r=new RegExp(t,`g`),i=It(n);e=e.replace(r,()=>i)}return e}function V(e){(e||document).querySelectorAll(`.diagram-zoom-btn, .mermaid-zoom-btn`).forEach(e=>{e.dataset.bound||(e.dataset.bound=`1`,e.addEventListener(`click`,()=>{if(e.closest(`.diagram-widget`))return;let t=e.closest(`.diagram-container`),n=e.closest(`.mermaid-container`),r=t||n;if(!r)return;let i=r.cloneNode(!0);i.querySelectorAll(`.diagram-zoom-btn, .mermaid-zoom-btn, .diagram-copy-btn, .diagram-save-btn, .mermaid-copy-btn, .mermaid-save-btn`).forEach(e=>e.remove());let a=n&&!t?`mermaid`:`inline-svg`;Rt(i.innerHTML,a)}))})}function Rt(e,t=`inline-svg`){let n=document.activeElement,r=document.createElement(`div`);r.className=`diagram-overlay`,r.setAttribute(`role`,`dialog`),r.setAttribute(`aria-modal`,`true`),r.setAttribute(`aria-label`,`Expanded diagram`);let i=F(e);r.innerHTML=[`<div class="`,t===`inline-svg`?`diagram-overlay-content diagram-svg-overlay`:`diagram-overlay-content`,`">`,i,`</div>`,`<button class="diagram-overlay-close" type="button" aria-label="Close">✕</button>`].join(``),r.querySelectorAll(`.diagram-overlay-content svg`).forEach(e=>{if(!e.getAttribute(`viewBox`)){let t=e.getAttribute(`width`)||e.getBBox?.()?.width,n=e.getAttribute(`height`)||e.getBBox?.()?.height;t&&n&&e.setAttribute(`viewBox`,`0 0 `+parseFloat(String(t))+` `+parseFloat(String(n)))}e.removeAttribute(`width`),e.removeAttribute(`height`)});let a=r.querySelector(`.diagram-overlay-close`),o=()=>{r.remove(),document.removeEventListener(`keydown`,s),n&&n.isConnected&&n.focus()},s=e=>{if(e.key===`Escape`){o();return}if(e.key===`Tab`){let t=r.querySelectorAll(`button, [href], [tabindex]:not([tabindex="-1"])`);if(t.length===0)return;let n=t[0],i=t[t.length-1];e.shiftKey&&document.activeElement===n?(e.preventDefault(),i.focus()):!e.shiftKey&&document.activeElement===i&&(e.preventDefault(),n.focus())}};a.addEventListener(`click`,o),document.addEventListener(`keydown`,s),document.body.appendChild(r),a.focus()}var zt=!1;function H(){zt||(zt=!0,_.registerLanguage(`javascript`,o),_.registerLanguage(`js`,o),_.registerLanguage(`typescript`,v),_.registerLanguage(`ts`,v),_.registerLanguage(`python`,g),_.registerLanguage(`py`,g),_.registerLanguage(`bash`,i),_.registerLanguage(`shell`,u),_.registerLanguage(`sh`,u),_.registerLanguage(`json`,d),_.registerLanguage(`css`,ee),_.registerLanguage(`xml`,h),_.registerLanguage(`html`,h),_.registerLanguage(`markdown`,l),_.registerLanguage(`md`,l),_.registerLanguage(`yaml`,c),_.registerLanguage(`yml`,c),_.registerLanguage(`sql`,ne),_.registerLanguage(`rust`,p),_.registerLanguage(`rs`,p),_.registerLanguage(`go`,s),_.registerLanguage(`java`,te),_.registerLanguage(`cpp`,m),_.registerLanguage(`c`,m),_.registerLanguage(`diff`,a),_.registerLanguage(`plaintext`,f),_.registerLanguage(`text`,f))}function Bt(e,t){if(H(),t&&_.getLanguage(t))try{return _.highlight(e,{language:t}).value}catch{return j(e)}try{return _.highlightAuto(e).value}catch{return j(e)}}function Vt(e){H(),(e||document).querySelectorAll(`.code-block pre code, .code-block-wrapper pre code`).forEach(e=>{if(e.dataset.highlighted===`yes`)return;let t=[...e.classList].find(e=>e.startsWith(`language-`))?.replace(`language-`,``),n=e.textContent||``;try{t&&_.getLanguage(t)?e.innerHTML=_.highlight(n,{language:t}).value:e.innerHTML=_.highlightAuto(n).value,e.dataset.highlighted=`yes`}catch{}})}var U=null,W=Promise.resolve();function Ht(){return document.documentElement.getAttribute(`data-theme`)===`light`?{primaryColor:`#e2e8f0`,primaryTextColor:`#1a202c`,primaryBorderColor:`#a0aec0`,lineColor:`#718096`,secondaryColor:`#ebf8ff`,tertiaryColor:`#f7fafc`,background:`transparent`,mainBkg:`#e2e8f0`,nodeBorder:`#a0aec0`,clusterBkg:`#f7fafc`,clusterBorder:`#cbd5e0`,titleColor:`#1a202c`,edgeLabelBackground:`#f7fafc`}:{primaryColor:`#2d3748`,primaryTextColor:`#e2e8f0`,primaryBorderColor:`#4a5568`,lineColor:`#718096`,secondaryColor:`#1a365d`,tertiaryColor:`#1a202c`,background:`transparent`,mainBkg:`#2d3748`,nodeBorder:`#4a5568`,clusterBkg:`#1a202c`,clusterBorder:`#2d3748`,titleColor:`#e2e8f0`,edgeLabelBackground:`#1a202c`}}async function G(){return U||=(await b(()=>import(`./mermaid-loader-BPeAxEES.js`),__vite__mapDeps([0]))).loadMermaid(),U}function K(){U.initialize({startOnLoad:!1,theme:`base`,htmlLabels:!1,themeVariables:Ht(),securityLevel:`strict`,suppressErrorRendering:!0})}var Ut=0;async function Wt(){let e=document.querySelectorAll(`.mermaid-rendered`);e.length&&(W=W.then(async()=>{let t=await G();for(let n of e){let e=n,r=e.dataset.mermaidCode;if(!r||!e.isConnected)continue;let i=S(r),a=`mermaid-${++Ut}`;try{K();let n;try{({svg:n}=await t.render(a,i))}catch{let e=x(i);if(!e)continue;K(),{svg:n}=await t.render(`${a}-retry`,e)}if(!e.isConnected)continue;e.innerHTML=xt(n),At(e),V(e)}catch{}}}).catch(e=>{console.error(`[mermaid:queue] rerender failed, keeping queue alive:`,e)}),await W)}var q=null;function Gt(){q||=new IntersectionObserver(e=>{for(let t of e){if(!t.isIntersecting)continue;let e=t.target;e.classList.contains(`mermaid-pending`)&&(q.unobserve(e),Jt(e))}},{rootMargin:`200px`})}function Kt(e,t,n){e.classList.remove(`mermaid-rendered`),e.innerHTML=`
14
+ <div class="mermaid-error">
15
+ <div class="mermaid-error-title">${R.warning} ${j(O(`mermaid.renderFail`)||`Mermaid render failed`)}</div>
16
+ <div class="mermaid-error-msg">${j(n.slice(0,200))}</div>
17
+ <pre class="mermaid-error-code"><code>${j(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=S(t?decodeURIComponent(t):e.textContent||``);e.dataset.mermaidCode=n;let r=`mermaid-${++Ut}`;e.dataset.mermaidInflight=`1`;try{let t=await G();K();let i;try{({svg:i}=await t.render(r,n))}catch(e){let a=x(n);if(!a)throw e;K(),{svg:i}=await t.render(`${r}-retry`,a)}if(!e.isConnected)return;e.innerHTML=xt(i),e.classList.add(`mermaid-rendered`),delete e.dataset.mermaidCodeRaw,At(e),V(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`,W=W.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){q.unobserve(e),Jt(e);continue}}q.observe(e)}}}function Xt(e){if(!q)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)q.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(U)return;let e=()=>{G().catch(()=>{})};typeof window.requestIdleCallback==`function`?window.requestIdleCallback(e,{timeout:2e3}):setTimeout(e,500)}function J(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 Y(){if(window.parent===window)return null;try{let e=window.parent.location.origin;if(e&&e!==`null`&&J(e))return e}catch{}try{if(document.referrer){let e=new URL(document.referrer).origin;if(J(e))return e}}catch{}return null}function Qt(e){let t=Y();return!t||!e.trim()?!1:(window.parent.postMessage({type:`jaw-preview-open-notes`,path:e},t),!0)}function $t(e){let t=Y();return!t||!e.trim()?!1:(window.parent.postMessage({type:`jaw-preview-open-doc`,path:e},t),!0)}function en(e,t){let n=Y();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 X(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=X(e),r=X(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=X(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=X(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)\/)/,Z,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 Z===void 0?Y()?(mn||=y(`/api/dashboard/notes/info`,`GET`,null).then(e=>typeof e?.root==`string`?e.root:null).catch(()=>null).then(e=>(Z=e,e)),mn):(Z=null,null):Z}function yn(e,t){t&&t.classList.add(`opening`),y(`/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 Tn(e){wn(e,await vn())}async function En(e,t){let n=await vn(),r=t.getAttribute(`data-vault-rel`)||ln(e,n);if(r&&Y()&&Qt(r)){t.classList.add(`opened`),setTimeout(()=>t.classList.remove(`opened`),1500);return}if(/\.(md|mdx)$/i.test(e)&&Y()&&$t(e)){t.classList.add(`opened`),setTimeout(()=>t.classList.remove(`opened`),1500);return}yn(e,t)}var Dn=!1;function On(){Dn||(Dn=!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`),En(r,n);return}let i=t?.closest(`.file-path-link`);if(!i)return;let a=i.getAttribute(`data-file-path`);a&&(e.preventDefault(),En(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 kn(){$&&clearTimeout($),Q&&=(cancelAnimationFrame(Q),null),$=setTimeout(()=>{$=null,Q=requestAnimationFrame(()=>{Q=null,Yt(),Vt(),V();let e=document.getElementById(`chatMessages`);e&&Tn(e)})},100)}function An(){$&&=(clearTimeout($),null),Q&&=(cancelAnimationFrame(Q),null)}var jn=!1;function Mn(e,t){z(t).then(t=>{if(!t.ok)return;let n=e.textContent||``;e.textContent=O(`code.copied`),e.classList.add(`copied`),setTimeout(()=>{e.textContent=n,e.classList.remove(`copied`)},1500)})}function Nn(){jn||(jn=!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;Mn(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&&Mn(r,a.textContent||``)}))}function Pn(){Nn(),Mt(),On()}var Fn=!1;function In(){if(Fn)return!0;let e=new n;return e.code=function({text:e,lang:t}){if(t===`mermaid`)return`<div class="mermaid-container mermaid-pending" data-mermaid-code-raw="${encodeURIComponent(e)}" role="status" aria-label="Diagram loading">
19
+ <div class="mermaid-skeleton">
20
+ <div class="mermaid-skeleton-spinner"></div>
21
+ <div class="mermaid-skeleton-text">Rendering diagram…</div>
22
+ </div>
23
+ </div>`;if(t?.trim().toLowerCase()===`diagram-html`)return`<div class="diagram-widget-pending" data-diagram-html="${btoa(unescape(encodeURIComponent(e)))}"
24
+ role="status" aria-label="Interactive widget loading">
25
+ <div class="diagram-spinner"></div>
26
+ </div>`;let n=Bt(e,t),r=t?j(t):``,i=O(`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="${j(i)}">${j(i)}</button></div><pre><code class="hljs${t?` language-${j(t)}`:``}">${n}</code></pre></div>`},e.image=function({href:e,title:t,text:n}){if(!e)return``;let r=e.startsWith(`/`)||e.includes(`/uploads/`)?`${re}/media/${encodeURIComponent(e.split(`/`).pop())}`:j(e),i=j(n||``),a=t?` title="${j(t)}"`:``,o=(r.split(`.`).pop()||``).toLowerCase().split(`?`)[0]||``;return[`mp4`,`webm`,`mov`,`ogg`].includes(o)?`<video src="${r}" controls class="chat-inline-video" preload="metadata"${a}></video>`:`<img src="${r}" alt="${i}" class="chat-inline-img" loading="lazy"${a} />`},e.link=function({href:e,title:t,text:n}){return`<a href="${j(e||``)}" target="_blank" rel="noopener noreferrer"${t?` title="${j(t)}"`:``}>${n}</a>`},t.setOptions({renderer:e,gfm:!0,breaks:!1}),Fn=!0,!0}function Ln(e,n=!1){let r=M(e);if(!r)return`<em class="text-dim orchestrate-placeholder">`+j(O(`orchestrator.dispatching`))+`</em>`;let{text:i,fences:a}=st(r.replace(/\n{3,}/g,`
27
+
28
+ `)),{text:o,blocks:s}=lt(i,n),{text:c,blocks:l}=pt(ct(o,a));H(),In();let u=ot(c),d=t.parse(u);return d=d.replace(/<table/g,`<div class="table-wrapper"><table`).replace(/<\/table>/g,`</table></div>`),d=mt(d,l,n),d=F(d),d=Lt(d,s),n||kn(),Pn(),d}export{O as C,rt as S,j as _,en as a,it as b,Xt as c,z as d,R as f,F as g,Dt as h,J as i,Yt as l,Et as m,An as n,Y as o,Tt as p,Tn as r,Zt as s,Ln as t,Wt as u,M as v,nt as x,at as y};
@@ -0,0 +1 @@
1
+ import{E as e,O as t,x as n}from"./settings-m_cim0ov.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-J11oxfnl.js";import{n as c,r as l}from"./locale-BHMJIzyw.js";import{a as u,i as d,n as f,o as p,t as m}from"./constants-BHMkzpN_.js";import{n as h,r as g}from"./provider-icons-Crv6yvlG.js";function ee(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?_(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?_(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=_(e)}if(c?.value){let e=c.value.slice(-4);c.value=``,c.placeholder=_(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 _(e){return i(`stt.key.savedPlaceholder`,{last4:e||``})}async function te(){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 ne(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 re(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 ie(e){document.getElementById(`tgMentionOn`)?.classList.toggle(`active`,e),document.getElementById(`tgMentionOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{telegram:{mentionOnly:e}})}function ae(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 oe(){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 se(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 ce(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 le(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 ue(e){document.getElementById(`dcMentionOn`)?.classList.toggle(`active`,e),document.getElementById(`dcMentionOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{discord:{mentionOnly:e}})}function de(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 fe(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 pe(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`||!fe(n.telegram)||!fe(n.discord)?null:{activeInbound:n.activeInbound,telegram:n.telegram,discord:n.discord}}function me(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 he(e,t,n){let r=me(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 ge(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
+ ${he(`Telegram`,t.telegram,!0)}
11
+ ${he(`Discord`,t.discord,!0)}
12
+ `}async function _e(){let e=document.getElementById(`channelTransportStatus`);if(e)try{let n=pe(await t(`/api/health`,`GET`,null));if(!n){e.innerHTML=``,e.style.display=`none`;return}ge(e,n),e.style.display=``}catch{e.innerHTML=``,e.style.display=`none`}}async function ve(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 _e()}function ye(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`),_e()}function be(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(u(e)?.label||g(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 xe(){await t(`/api/settings`,`PUT`,{fallbackOrder:[...document.querySelectorAll(`#fallbackOrderList select`)].map(e=>e.value).filter(Boolean)})}function Se(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 Ce(e){return Object.values(e).filter(e=>e.command===`npx`||e.command===`uv`||e.command===`uvx`).length}var v=null;async function y(){try{let e=await n(`/api/mcp`);if(!e)return;v=e;let t=document.getElementById(`mcpServerList`);if(!t)return;let r=Object.entries(e.servers||{});if(!r.length){t.textContent=i(`mcp.noServers`),we(0);return}t.innerHTML=r.map(([e,t])=>{let n=Se(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(``),we(Ce(e.servers))}catch{}}function we(e){let t=document.getElementById(`installBundleLabel`);t&&(t.textContent=`Install bundle (${e})`);let n=t?.closest(`button`);n&&(n.disabled=e===0)}async function Te(){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 Ee(){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>`),y()}catch(t){e.innerHTML=`${s.error} ${a(t.message)}`}}}var b=null,x=null,S=null,C=null,w=null,T=null,E=`local`,D=!1,De=[];function Oe(){if(b)return;b=document.createElement(`div`),b.id=`mcpModal`,b.className=`modal-overlay mcp-modal-overlay`,b.setAttribute(`role`,`presentation`),b.setAttribute(`aria-hidden`,`true`),b.addEventListener(`click`,e=>{e.target===b&&M()});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`,()=>Le());let i=document.createElement(`button`);i.type=`button`,i.className=`btn-modal-close`,i.setAttribute(`aria-label`,`Close`),i.textContent=`x`,i.addEventListener(`click`,()=>M());let a=document.createElement(`div`);a.style.cssText=`display:flex;align-items:center;gap:6px`,a.append(n,r),t.append(a,i),x=document.createElement(`div`),x.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=O(`Active Servers`,!0),c=O(`Add New`,!1),l=O(`Browse`,!1);De=[s,c,l],s.addEventListener(`click`,()=>k(`active`)),c.addEventListener(`click`,()=>k(`add`)),l.addEventListener(`click`,()=>k(`browse`)),o.append(s,c,l),S=document.createElement(`div`),T=document.createElement(`div`),T.style.display=`none`,T.innerHTML=`<p style="opacity:.5">Loading registry...</p>`,C=document.createElement(`div`),C.style.display=`none`,C.innerHTML=ke(),C.querySelectorAll(`[data-mcp-subtab]`).forEach(e=>{e.addEventListener(`click`,()=>{E=e.dataset.mcpSubtab,Ae()})}),w=C.querySelector(`#mcpAddError`);let u=C.querySelector(`[data-action="mcpAddAndSync"]`);u&&u.addEventListener(`click`,()=>void Ie());let d=C.querySelector(`[data-action="closeMcpModal"]`);d&&d.addEventListener(`click`,()=>M()),x.append(o,S,T,C);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`,()=>M()),f.append(p),e.append(t,x,f),b.append(e),document.body.append(b)}function O(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 ke(){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 k(e){S&&(S.style.display=e===`active`?``:`none`),C&&(C.style.display=e===`add`?``:`none`),T&&(T.style.display=e===`browse`?``:`none`),De.forEach((t,n)=>{let r=[`active`,`add`,`browse`][n];t.classList.toggle(`is-active`,r===e)}),e===`active`&&je(),e===`add`&&Ne(),e===`browse`&&Re()}function Ae(){let e=C?.querySelector(`#mcpAddLocal`),t=C?.querySelector(`#mcpAddRemote`);e&&(e.style.display=E===`local`?``:`none`),t&&(t.style.display=E===`remote`?``:`none`),C?.querySelectorAll(`[data-mcp-subtab]`).forEach(e=>{e.classList.toggle(`is-active`,e.dataset.mcpSubtab===E)})}function je(){if(!S||!v)return;let e=Object.entries(v.servers||{});if(!e.length){S.innerHTML=`<p style="opacity:.5">No active MCP servers.</p>`;return}S.innerHTML=e.map(([e,t])=>{let n=Se(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(``),S.querySelectorAll(`[data-mcp-remove]`).forEach(e=>{e.addEventListener(`click`,()=>{let t=e.dataset.mcpRemove;t&&Me(t)})})}async function Me(e){if(!v)return;let n={...v.servers};delete n[e];try{await t(`/api/mcp`,`PUT`,{...v,servers:n}),await t(`/api/mcp/sync`,`POST`,{}),await y(),je()}catch(e){A(e.message)}}function Ne(){for(let e of[`mcpAddName`,`mcpAddCommand`,`mcpAddArgs`,`mcpAddEnv`,`mcpAddRemoteName`,`mcpAddUrl`,`mcpAddHeaders`]){let t=(C??document).querySelector(`#${e}`);t&&(t.value=``)}Pe()}function A(e){w&&(w.style.display=`block`,w.textContent=e)}function Pe(){w&&(w.style.display=`none`)}function Fe(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 j(e){return(C??document).querySelector(`#${e}`)?.value?.trim()??``}async function Ie(){if(!v)return;let e=E===`remote`,n,r;if(e){n=j(`mcpAddRemoteName`);let e=j(`mcpAddUrl`),t=j(`mcpAddHeaders`);if(!n){A(`Name is required.`);return}if(!e){A(`URL is required.`);return}r={url:e};let i=Fe(t);Object.keys(i).length>0&&(r.headers=i)}else{n=j(`mcpAddName`);let e=j(`mcpAddCommand`),t=j(`mcpAddArgs`),i=j(`mcpAddEnv`);if(!n){A(`Name is required.`);return}if(!e){A(`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=Fe(i);Object.keys(o).length>0&&(r.env=o)}if(v.servers[n]){A(`Server "${n}" already exists.`);return}try{await t(`/api/mcp`,`PUT`,{...v,servers:{...v.servers,[n]:r}}),await t(`/api/mcp/sync`,`POST`,{}),await y(),M()}catch(e){A(e.message)}}function Le(){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 Re(){if(T){T.innerHTML=`<p style="opacity:.5">Loading registry...</p>`,v||await y();try{let e=await n(`/api/mcp/registry`);if(!e?.entries?.length&&!e?.builtins?.length){T.innerHTML=`<p style="opacity:.5">No MCP servers in registry.</p>`;return}let t=v?Object.keys(v.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>`),T.innerHTML=r,T.querySelectorAll(`[data-registry-install]`).forEach(t=>{t.addEventListener(`click`,()=>{let n=t.dataset.registryInstall,r=e.entries.find(e=>e.id===n);r&&ze(r,t)})}),T.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&&ze({id:r.id,name:r.name,description:r.description,category:`harness`,type:`remote`,config:r.standalone_config,tags:[],url:r.source},t)})})}catch(e){T.innerHTML=`<p style="color:var(--color-error)">${a(e.message)}</p>`}}}async function ze(e,n){if(v){n.disabled=!0,n.textContent=`Installing...`;try{let r=e.config;await t(`/api/mcp`,`PUT`,{...v,servers:{...v.servers,[e.id]:r}}),await t(`/api/mcp/sync`,`POST`,{}),await y(),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 Be(){Oe(),b?.classList.add(`open`),b?.setAttribute(`aria-hidden`,`false`),D=!0,k(`active`)}function M(){D&&(b?.classList.remove(`open`),b?.setAttribute(`aria-hidden`,`true`),D=!1,Ne(),document.getElementById(`mcpHelpOverlay`)?.remove())}function Ve(){document.addEventListener(`keydown`,e=>{if(document.getElementById(`mcpHelpOverlay`)&&e.key===`Escape`){e.preventDefault(),document.getElementById(`mcpHelpOverlay`)?.remove();return}D&&e.key===`Escape`&&(e.preventDefault(),e.stopImmediatePropagation(),M())},!0)}var N=null;function He(e){let t=document.getElementById(`headerCli`);if(!t)return;let n=h(e),r=P(e);t.innerHTML=n?`${n} ${a(r)}`:a(r)}function P(e){return u(e)?.label||g(e)||e}function Ue(e){let t=e.finally(()=>{N===t&&(N=null)});return N=t,t}async function We(){let e=N;e&&await e}function Ge(e){return e.split(/[^a-zA-Z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function F(e){return document.getElementById(`model`+Ge(e))}function Ke(e){return document.getElementById(`customModel`+Ge(e))}function qe(e){return document.getElementById(`effort`+Ge(e))}function I(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 L(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 Je(e=null){let t=d(),n=document.getElementById(`selCli`);if(n){let r=e?.cli||n.value||t[0]||`claude`,o=e=>f.includes(e),s=!o(r)&&t.includes(r),c=n.dataset.expanded===`1`,l=t.filter(o),d=t.filter(e=>!o(e)),p=l.length===0||s||c,m=l.map(e=>{let t=u(e)?.label||e;return`<option value="${a(e)}">${a(t)}</option>`}).join(``);d.length>0&&(p?(m+=`<option disabled>──────</option>`,m+=d.map(e=>{let t=u(e)?.label||e;return`<option value="${a(e)}">${a(t)}</option>`}).join(``)):m+=`<option value="__show_more__">${i(`cli.showMore`)}</option>`),n.innerHTML=m,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(P(e))}</option>`).join(``),Array.from(r.options).some(e=>e.value===n)&&(r.value=n)}}function R(e,t){return(t||``).trim()}function Ye(e=null){for(let t of d()){let n=u(t),r=t===`ai-e`?B():``,i=F(t);if(i)if(n?.modelNote)i.innerHTML=`<option value="">${a(n.modelNote)}</option>`,i.title=n.modelNote,i.disabled=!0;else{let a=R(t,e?.perCli?.[t]?.model||i.value||``);I(i,t===`ai-e`?n?.modelsByProvider?.[r]||m[t]||[]:m[t]||[],{includeCustom:!0,selected:a}),a&&!Array.from(i.options).some(e=>e.value===a)&&(L(i,a),i.value=a),i.disabled=!1}let o=qe(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 z(e,t=``){let n=document.getElementById(`selEffort`);if(!n)return;let r=u(e),i=B(),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 Xe(e,t,n){return e?(e.innerHTML=n.map(e=>`<option value="${a(e)}">${a(g(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 B(){let e=document.getElementById(`selAiEProvider`),t=document.getElementById(`providerAiE`);return e?.value||t?.value||u(`ai-e`)?.defaultProvider||`claude`}function Ze(){return document.getElementById(`providerAiE`)?.value||B()}function Qe(e,t){let n=document.getElementById(`aiEProviderWrap`),r=document.getElementById(`selAiEProvider`),i=document.getElementById(`providerAiE`),a=u(`ai-e`);if(!a?.providers?.length)return`claude`;let o=Xe(r,e?.perCli?.[`ai-e`]?.provider||i?.value||r?.value||a.defaultProvider||`claude`,a.providers);return Xe(i,o,a.providers),n&&(n.style.display=t===`ai-e`?``:`none`),o}async function $e(){await p();let e=await n(`/api/settings`);if(!e)return;c(e.locale??``),Je(e),Qe(e,e.cli||``),Ye(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=h(e.cli),n=P(e.cli);i.innerHTML=t?`${t} ${a(n)}`:a(n)}if(et(e.permissions,!1),e.perCli)for(let[t,n]of Object.entries(e.perCli)){let e=F(t),r=qe(t);if(e&&n.model){let r=R(t,n.model);L(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)}}U(!1);let o=e.activeOverrides?.[e.cli]||{},s=e.perCli?.[e.cli]||{},l=o.model||s.model,u=o.effort||s.effort||``,d=document.getElementById(`selModel`);if(l&&d){let t=R(e.cli,l);t&&!Array.from(d.options).some(e=>e.value===t)&&L(d,t),d.value=t}z(e.cli,u),ae(e),de(e),ye(e),be(e),y(),ee(e.stt||{})}async function V(){let e=document.getElementById(`selCli`)?.value||`claude`,n={cli:e};return e===`ai-e`&&(n.perCli={"ai-e":{provider:B()}}),Ue((async()=>{let r=await t(`/api/settings`,`PUT`,n);if(!r){await $e();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),He(i),o([`instances`],`active-cli-changed`)})())}function et(e,t=!0){t&&r(`/api/settings`,`PUT`,{permissions:`auto`})}function tt(e){let t=F(e);return t?t.value===`__custom__`?Ke(e)?.value?.trim()||t.options[0]?.value||`default`:t.value:`default`}function nt(e,t){let n=Ke(e);n&&(t.value===`__custom__`?(n.style.display=`block`,n.focus()):(n.style.display=`none`,e===`claude`&&rt(t.value),H()))}function rt(e){let t=!!(e&&e.endsWith(`[1m]`));document.getElementById(`claude1mOn`)?.classList.toggle(`active`,t),document.getElementById(`claude1mOff`)?.classList.toggle(`active`,!t)}function it(e,t){let n=t.value.trim();if(!n)return;let r=F(e);r&&(L(r,n),r.value=n,t.style.display=`none`,e===`claude`&&rt(n),H())}function at(){let e=Ze(),t=document.getElementById(`selAiEProvider`);t&&Array.from(t.options).some(t=>t.value===e)&&(t.value=e),Ye(null),(document.getElementById(`selCli`)?.value||``)===`ai-e`&&U(!1),H()}async function H(){let e={};for(let t of d()){if(!F(t))continue;let n=qe(t),r={model:tt(t),effort:n?n.value:``};if(t===`ai-e`&&(r.provider=Ze()),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 U(e=!0){let t=document.getElementById(`selCli`);if(!t)return;if(t.value===`__show_more__`){let e=t.dataset.prev||d()[0]||`claude`;t.dataset.expanded=`1`,Je(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=Qe(null,r),s=u(r),c=r===`ai-e`?s?.modelsByProvider?.[o]||m[r]||[]:m[r]||[],l=document.getElementById(`selModel`);s?.modelNote&&l?(l.innerHTML=`<option value="">${a(s.modelNote)}</option>`,l.title=s.modelNote,l.disabled=!0):(I(l,c,{includeCustom:!0,includeDefault:!0}),l&&(l.disabled=!1,l.title=``)),He(r),z(r);let f=document.getElementById(`selModelCustom`);f&&f.remove();let p=document.createElement(`input`);if(p.type=`text`,p.id=`selModelCustom`,p.className=`custom-model-input`,p.placeholder=i(`model.placeholder`),p.style.display=`none`,p.onchange=function(){let e=this.value.trim();!e||!l||(L(l,e),l.value=e,this.style.display=`none`,ot())},!l){e&&V();return}l.parentElement?.appendChild(p),l.onchange=function(){this.value===`__custom__`?(p.style.display=`block`,p.focus()):(p.style.display=`none`,ot())},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`)!==B()){z(r,a);return}let t=R(r,i);L(l,t),l.value=t}z(r,a)}),e&&V()}async function ot(){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:B()}}),await t(`/api/settings`,`PUT`,a)&&o([`instances`],`active-cli-changed`)}function st(){let e=m[document.getElementById(`flushCli`)?.value||document.getElementById(`selCli`)?.value||`claude`]||[];I(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),I(r,m[e.cli||document.getElementById(`selCli`)?.value||`claude`]||[],{includeDefault:!0}),r&&e.model&&(L(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?P(r):`${P(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 login`,commands:[`progrok login`]},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||g(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`),c={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`)}},l=``;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 u=``,d=t?.quotaCapable===!1&&t.authenticated!==!1&&n.available&&!ft[e]&&!dt.has(e);if(t?.account&&!d){let n=yt(e,t);n.length&&(u=`<div style="font-size:10px;color:var(--text-dim);margin:2px 0 4px 16px">${a(n.join(` · `))}</div>`)}let f=``;if(!n.available||o===`warn`){let t=c[e];if(t){let e=!n.available,r=i(e?`cli.authRequired`:`cli.notAuthenticated`),o=e?`var(--error)`:`var(--warning)`;f=`
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 p=``,m=ft[e];if(!dt.has(e)){if(m&&n.available)p=`
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(m)}
121
+ </div>
122
+ `;else if(d)p=xt(e,t);else if(t?.windows?.length)p=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`;p=`<div style="font-size:10px;color:var(--text-dim);margin:2px 0 0 16px;opacity:0.7">${s.warning} ${e}</div>`}}let ee=t?.quotaCapable&&pt[e]?bt(e,t):``,_=t?.billing?.usedUsd!=null&&t?.billing?.limitUsd?`<span style="margin-left:auto;font-size:10px;color:var(--text-dim);white-space:nowrap">$${t.billing.usedUsd.toFixed(1)}/$${t.billing.limitUsd}</span>`:``;l+=`
132
+ <div class="settings-group" style="margin-bottom:6px;padding:8px 10px">
133
+ <div class="cli-status-row" style="display:flex;align-items:center">
134
+ <span class="cli-dot ${o}"></span>
135
+ <span class="cli-provider-icon" aria-hidden="true">${h(e)||``}</span>
136
+ <span class="cli-name" style="font-weight:600">${a(g(e))}${ee}</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
+ ${u}
139
+ ${f}
140
+ ${p}
141
+ </div>
142
+ `}o&&(o.innerHTML=l);let u=Object.entries(t);!u.some(([e,t])=>{if(!t.available)return!1;let n=r?.[e];return!n||n.authenticated!==!1})&&u.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 d=document.getElementById(`copilotKeychainBtn`);d&&d.addEventListener(`click`,async()=>{let e=d;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} ${l(`devMode`)}`);let u=document.getElementById(`templateModalTitle`);u&&(u.innerHTML=`${s.file} ${a(e.filename)}`),en(`editor`)}function Qt(){if(!$&&!confirm(l(`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} ${l(`devModeOn`)}`:`${s.tool} ${l(`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} ${l(`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} ${l(`promptStructure`)}`)}function tn(){en(`tree`)}function nn(e){e&&e.target!==e.currentTarget||document.getElementById(`templateModal`)?.classList.remove(`open`)}export{Ve as A,le as B,st as C,et as D,H as E,be as F,ne as G,ue as H,xe as I,ie as K,ve as L,y as M,Be as N,V as O,Te as P,oe as R,U as S,ot as T,te as U,ce as V,re as W,it 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,Ee as j,We as k,Pt as l,Z as m,nn as n,$t as o,Y as p,ee as q,Gt as r,tn as s,Kt as t,zt as u,tt as v,at as w,$e as x,nt as y,se as z};
@@ -0,0 +1,49 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-Bjnw0wQ6.css"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./state-D04-chBy.js";import{i as t,t as n}from"./api-tVoG39dL.js";import{t as r}from"./preload-helper-DuH3-WbD.js";import{C as i,_ as a,b as o,d as s,f as c,n as l}from"./render-J11oxfnl.js";import{A as ee,D as te,_ as ne,a as u,d as re,g as d,i as ie,k as ae,l as f,n as oe,r as se,s as ce,t as le,u as ue,v as de,y as p}from"./ui-qKxy-4p9.js";var fe=3e3,m=new Map,h=[],g=(e,t)=>`${e}:${t}`;function _(e=[]){let t=document.getElementById(`pendingQueue`);if(t){if(h=e.slice(),!e.length){y(new Set),t.classList.remove(`visible`),t.innerHTML=``;return}t.classList.add(`visible`),t.innerHTML=`
3
+ <div class="pending-queue-header">
4
+ <span class="pending-queue-title">${c.hourglass} <span data-i18n="queue.pendingTitle">${a(i(`queue.pendingTitle`))}</span> <span class="pending-queue-count">${e.length}</span></span>
5
+ </div>
6
+ <div class="pending-queue-list">
7
+ ${e.map(pe).join(``)}
8
+ </div>
9
+ `,y(new Set(e.map(e=>e.id))),ge()}}function pe(e){let t=(e.prompt||``).replace(/\s+/g,` `).trim(),n=t.length>140?t.slice(0,140)+`…`:t,r=e.source?`<span class="pending-row-source">${a(e.source)}</span>`:``,o=a(i(`queue.copy`)),s=a(i(`queue.steer`)),l=a(i(`queue.delete`));return`<div class="pending-row" data-pending-id="${a(e.id)}" title="${a(t)}">
10
+ <span class="pending-row-text">${a(n)}</span>
11
+ ${r}
12
+ <button class="pending-row-btn pending-row-copy" data-pending-action="copy" title="${o}" aria-label="${o}"><span class="pending-btn-content">${c.copy}</span></button>
13
+ <button class="pending-row-btn pending-row-steer" data-pending-action="steer" data-i18n-title="queue.steer" title="${s}" aria-label="${s}"><span class="pending-arm-fill" aria-hidden="true"></span><span class="pending-btn-content"><span class="pending-steer-arrow" aria-hidden="true">↳</span><span class="pending-steer-label">${s}</span></span></button>
14
+ <button class="pending-row-btn pending-row-delete" data-pending-action="delete" data-i18n-title="queue.delete" title="${l}" aria-label="${l}"><span class="pending-arm-fill" aria-hidden="true"></span><span class="pending-btn-content">${c.trash}</span></button>
15
+ </div>`}function v(e,t){let n=document.querySelector(`.pending-row[data-pending-id="${CSS.escape(e)}"]`);return n?n.querySelector(`[data-pending-action="${t}"]`):null}function me(e,t){let n=v(e,t);if(!n)return;n.classList.add(`armed`),n.setAttribute(`title`,i(`queue.cancelArm`));let r=n.querySelector(`.pending-arm-fill`);r&&(r.style.animation=`none`,r.offsetWidth,r.style.animation=``)}function he(e,t){let n=v(e,t);n&&(n.classList.remove(`armed`),n.setAttribute(`title`,i(t===`steer`?`queue.steer`:`queue.delete`)))}function ge(){for(let e of m.values()){let t=v(e.id,e.action);t&&(t.classList.add(`armed`),t.setAttribute(`title`,i(`queue.cancelArm`)))}}function y(e){for(let[t,n]of m)e.has(n.id)||(clearTimeout(n.timerId),m.delete(t))}function _e(e,n){let r=g(e,n),i=setTimeout(()=>ye(e,n),fe);m.set(r,{id:e,action:n,timerId:i}),me(e,n),n===`steer`&&t(`/api/orchestrate/queue/${encodeURIComponent(e)}/hold`,`POST`,{}).catch(()=>{})}function ve(e,n){let r=g(e,n),i=m.get(r);i&&(clearTimeout(i.timerId),m.delete(r),he(e,n),n===`steer`&&t(`/api/orchestrate/queue/${encodeURIComponent(e)}/hold`,`DELETE`,{}).catch(()=>{}))}async function ye(e,n){m.delete(g(e,n));let r=n===`steer`?`/api/orchestrate/queue/${encodeURIComponent(e)}/steer`:`/api/orchestrate/queue/${encodeURIComponent(e)}`,i=n===`steer`?`POST`:`DELETE`;if(n===`steer`&&d(`running`),await t(r,i,{})==null){h=h.filter(t=>t.id!==e),_(h),n===`steer`&&H(`steer-fire-miss`).catch(()=>{});return}h=h.filter(t=>t.id!==e),_(h)}function be(e,t){if(m.has(g(e,t))){ve(e,t);return}_e(e,t)}function xe(){let e=document.getElementById(`pendingQueue`);e&&e.addEventListener(`click`,async e=>{let t=e.target?.closest(`[data-pending-action]`);if(!t)return;let n=t.closest(`.pending-row`)?.dataset.pendingId;if(!n)return;let r=t.dataset.pendingAction;if(r===`copy`){let e=h.find(e=>e.id===n);if(e?.prompt&&(await s(e.prompt)).ok){let e=t.querySelector(`.pending-btn-content`);e&&(e.innerHTML=c.checkSimple,setTimeout(()=>{e.innerHTML=c.copy},600))}return}be(n,r===`steer`?`steer`:`delete`)})}var Se=800,b=64,Ce=`CLI-JAW`,x=!1,S=0,C=Ce,w=null,T=``,E=!1,D=0;function O(){return navigator}function we(){return document.visibilityState!==`visible`||!document.hasFocus()}function Te(e){return e-D<Se}function k(){if(w)return w;let e=document.querySelector(`link[rel~="icon"]`);if(e)return w=e,T=e.href||e.getAttribute(`href`)||``,e;let t=document.createElement(`link`);return t.rel=`icon`,document.head.appendChild(t),w=t,E=!0,t}function Ee(e){let t=document.createElement(`canvas`);t.width=b,t.height=b;let n=t.getContext(`2d`);return n?(n.clearRect(0,0,b,b),n.font=`44px "Apple Color Emoji", "Segoe UI Emoji", sans-serif`,n.textAlign=`center`,n.textBaseline=`middle`,n.fillText(`🦈`,28,36),n.beginPath(),n.arc(50,15,e>1?12:9,0,Math.PI*2),n.fillStyle=`#ff335f`,n.fill(),n.lineWidth=4,n.strokeStyle=`#ffffff`,n.stroke(),e>1&&(n.fillStyle=`#ffffff`,n.font=`bold 15px sans-serif`,n.textAlign=`center`,n.textBaseline=`middle`,n.fillText(String(Math.min(e,9)),50,16)),t.toDataURL(`image/png`)):T}async function De(e){let t=O();if(typeof t.setAppBadge==`function`)try{await t.setAppBadge(e)}catch{}}async function Oe(){let e=O();if(typeof e.clearAppBadge==`function`)try{await e.clearAppBadge()}catch{}}function ke(){document.title=`(${S}) ${C}`;let e=k();e&&(e.href=Ee(S)),De(S)}function Ae(){document.title=C}function je(){if(w){if(E){w.remove(),w=null,E=!1;return}w.href=T}}function Me(){x||(x=!0,C=document.title||Ce,k(),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`&&j()}),window.addEventListener(`focus`,()=>j()))}function A(){if(!x||!we())return;let e=Date.now();Te(e)||(D=e,S+=1,ke())}function j(){!x||S===0||(S=0,D=0,Ae(),je(),Oe())}function Ne(e,t){return!e||!t?!0:e===`all`||e===t}var M=new Map;function Pe(e){let t=M.get(e.workflowId)??-1;return e.sequenceId>t}function Fe(e){M.set(e.workflowId,e.sequenceId)}function Ie(e){let t=M.get(e.workflowId)??-1;return t===-1?!1:e.sequenceId>t+1}function Le(e){if(!Pe(e))return{applied:!1,gapDetected:!1};let t=Ie(e);return Fe(e),e.kind===`goal`&&Re(e),{applied:!0,gapDetected:t}}function Re(t){e.activeGoal&&t.status===`done`&&t.kind===`goal`&&(e.activeGoal=null)}var N=[`I`,`P`,`A`,`B`,`C`],P=null;function F(e,t,n){let r=N.indexOf(n);if(r<0)return;let i=e.getBoundingClientRect(),a=t.offsetWidth||36,o=document.getElementById(`dot-${n}`);if(!o)return;let s=N[r+1],c=s?document.getElementById(`dot-${s}`):null;if(c){let e=o.getBoundingClientRect(),n=c.getBoundingClientRect(),r=(e.right+n.left)/2;t.style.left=r-i.left-a/2+`px`}else{let e=o.getBoundingClientRect();t.style.left=e.left-i.left+e.width/2-a/2+`px`}}var I={},L=``,R=0,z=null,B=0,V=!1,ze=0,Be=750,Ve=750;async function He(e={}){let t=await(await fetch(`${n}/api/orchestrate/snapshot`)).json();L=String(t.orc.scope||``),$e(t.orc.state),qe(t.orc.ctx||null),Ke(t.heartbeat||{pending:0,deferredPending:0}),Ge(t.workers),ne(t.runtime.queuePending),oe(t.queued||[]),_(t.queued||[]),e.hydrateRun&&ce(t.activeRun),Qe(),t.runtime.busy?d(`running`):f()||d(`idle`),r(()=>import(`./employees-CZdWHH-r.js`).then(e=>{typeof e.renderEmployees==`function`&&e.renderEmployees()}),__vite__mapDeps([0]))}function H(e=`manual`,t={}){let n=Date.now();return t.hydrateRun?He(t):z||(n-B<Be?Promise.resolve():(B=n,z=He(t).catch(t=>{throw console.warn(`[ws] orchestrate snapshot sync failed (${e})`,t),t}).finally(()=>{z=null}),z))}function Ue(e){ae(e),H(e,{hydrateRun:!0}).finally(()=>{te(e)}).catch(()=>{})}function U(e){let t=Date.now();e!==`discard`&&t-ze<Ve||(ze=t,Ue(e))}function We(){V||(V=!0,window.addEventListener(`focus`,()=>{U(`focus`)}),window.addEventListener(`pageshow`,e=>{e.persisted&&U(`pageshow`)}),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`&&U(`visibilitychange`)}),document.addEventListener(`resume`,()=>{U(`resume`)}),`wasDiscarded`in document&&document.wasDiscarded&&U(`discard`),window.addEventListener(`message`,e=>{e.data?.type===`jaw-preview-visibility`&&e.data.visible&&U(`iframe-visible`)}))}function Ge(e){for(let e of Object.keys(I))delete I[e];for(let t of e)t.state===`running`&&t.phase&&(I[t.agentId]={phase:t.phase,phaseLabel:t.phaseLabel||``})}function Ke(t){let n={pending:Number(t?.pending||0),deferredPending:Number(t?.deferredPending||0),...t?.reason?{reason:t.reason}:{},...t?.policy?{policy:t.policy}:{},...t?.jobId?{jobId:t.jobId}:{},...t?.jobName?{jobName:t.jobName}:{}};e.heartbeatRuntime=n;let r=document.getElementById(`pabcHeartbeatStatus`);if(r)if(n.reason===`pabcd_active`&&n.deferredPending>0){let e=n.jobName?`: ${n.jobName}`:``;r.textContent=`heartbeat deferred (${n.deferredPending})${e}`,r.hidden=!1}else r.textContent=``,r.hidden=!0}function qe(t){e.orcTaskAnchor=String(t?.taskAnchor||``).trim(),e.orcResolvedSelection=t?.resolvedSelection||null;let n=document.getElementById(`pabcTaskAnchor`);n&&(e.orcTaskAnchor?(n.textContent=`anchor: ${e.orcResolvedSelection?.index?`${e.orcResolvedSelection.index}. `:``}${e.orcTaskAnchor}`,n.hidden=!1):(n.textContent=``,n.hidden=!0),Xe(t?.interview||null))}var W=(()=>{try{return localStorage.getItem(`jaw:interviewCollapsed`)===`1`}catch{return!1}})();function Je(e){W=e;try{localStorage.setItem(`jaw:interviewCollapsed`,e?`1`:`0`)}catch{}let t=document.getElementById(`interviewPanel`);if(!t)return;t.classList.toggle(`collapsed`,e);let n=t.querySelector(`.iv-toggle`);n&&n.setAttribute(`aria-expanded`,String(!e))}function Ye(e){let t=e=>{switch(e){case`max`:return 1;case`xhigh`:return .8;case`high`:return .6;case`medium`:return .4;default:return .2}},n=e=>{switch(e){case`max`:return`#2196f3`;case`xhigh`:return`#4caf50`;case`high`:return`#8bc34a`;case`medium`:return`#ff9800`;default:return`#f44336`}},r=[t(e.goal),t(e.constraint),t(e.success),t(e.ontology)],i=1-r.reduce((e,t)=>e+t,0)/r.length,a=Object.values(e).every(e=>e===`max`)||i<=.2?`🟢 Ready`:i<=.4?`🟡 Almost`:`🔴 Needs work`,o=(e,r)=>{let i=t(r);return`<div style="display:flex;align-items:center;gap:6px;font-size:12px">
16
+ <span style="width:70px;color:var(--text-secondary)">${e}</span>
17
+ <div style="flex:1;height:5px;background:var(--bg-tertiary);border-radius:3px">
18
+ <div style="width:${i*100}%;height:100%;background:${n(r)};border-radius:3px;transition:width .3s"></div>
19
+ </div>
20
+ <span style="width:60px;text-align:right;font-weight:600;font-size:11px">${i.toFixed(1)} ${r.toUpperCase()}</span>
21
+ </div>`};return`<div style="display:flex;flex-direction:column;gap:3px;margin:6px 0">
22
+ <div style="display:flex;justify-content:space-between;font-size:11px;margin-bottom:2px">
23
+ <span style="color:var(--text-secondary)">Ambiguity: ${i.toFixed(2)}</span>
24
+ <span>${a}</span>
25
+ </div>
26
+ ${o(`Goal`,e.goal)}
27
+ ${o(`Constraint`,e.constraint)}
28
+ ${o(`Success`,e.success)}
29
+ ${o(`Ontology`,e.ontology)}
30
+ </div>`}function Xe(e){let t=document.getElementById(`interviewPanel`);if(!t)return;if(!e||!e.known.length&&!e.unknown.length){t.hidden=!0;return}t.hidden=!1,t.classList.toggle(`collapsed`,W);let n=e=>{switch(e){case`user_statement`:return`🟢`;case`repo_fact`:return`🔵`;case`inference`:return`🟡`;case`assumption`:return`🟠`;case`default`:return`⚪`;default:return`·`}},r=e.known.map(e=>{if(typeof e==`string`)return`<li class="iv-known">· ${a(e)}</li>`;let t=e,r=n(t.source),i=t.dimension?` <span class="iv-dim">[${t.dimension}]</span>`:``;return`<li class="iv-known">${r} ${a(t.fact)}${i}</li>`}).join(``),i=e.unknown.map(e=>`<li class="iv-unknown">❓ ${a(typeof e==`string`?e:JSON.stringify(e))}</li>`).join(``);t.innerHTML=`
31
+ <button type="button" class="iv-toggle" aria-expanded="${!W}" aria-controls="interviewBody" title="인터뷰 트래커 접기/펼치기">
32
+ <span class="iv-chevron" aria-hidden="true">▸</span>
33
+ <span class="iv-summary">Interview · <span class="iv-known-count">Known ${e.known.length}</span> · <span class="iv-unknown-count">Unknown ${e.unknown.length}</span>${e.known.filter(e=>typeof e==`object`&&e&&`source`in e&&e.source===`assumption`).length>0?` · <span class="iv-assumption-count">⚠️ ${e.known.filter(e=>typeof e==`object`&&e&&`source`in e&&e.source===`assumption`).length} assumptions</span>`:``} · Round ${e.round}</span>
34
+ </button>
35
+ <div class="iv-body" id="interviewBody">
36
+ ${e.assessment?`<div class="iv-section iv-section-ambiguity">${Ye(e.assessment)}</div>`:``}
37
+ <div class="iv-section iv-section-known"><strong>Known (${e.known.length})</strong><ul>${r}</ul></div>
38
+ <div class="iv-section iv-section-unknown"><strong>Unknown (${e.unknown.length})</strong><ul>${i}</ul></div>
39
+ </div>
40
+ `,t.dataset.toggleBound||(t.dataset.toggleBound=`1`,t.addEventListener(`click`,e=>{e.target.closest(`.iv-toggle`)&&Je(!W)}))}function Ze(e,t){let n=document.getElementById(`budgetPanel`);if(!n)return;if(!e||t!==`B`){n.hidden=!0;return}n.hidden=!1;let r=(e,t,n)=>{let r=n>0?Math.min(t/n*100,100):0;return`<div style="display:flex;align-items:center;gap:6px;font-size:12px">
41
+ <span style="width:70px;color:var(--text-secondary)">${e}</span>
42
+ <div style="flex:1;height:5px;background:var(--bg-tertiary);border-radius:3px">
43
+ <div style="width:${r}%;height:100%;background:${r>=100?`#f44336`:r>=66?`#ff9800`:`#4caf50`};border-radius:3px"></div>
44
+ </div>
45
+ <span style="width:30px;text-align:right;font-size:11px">${t}/${n}</span>
46
+ </div>`};n.innerHTML=`<div style="font-size:11px;font-weight:600;margin-bottom:4px;color:var(--text-secondary)">Build Budget</div>
47
+ ${r(`Workers`,e.spent.workerDispatches,e.maxWorkerDispatches)}
48
+ ${r(`Self-heal`,e.spent.selfHealRetries,e.maxSelfHealRetries)}
49
+ ${r(`Verify`,e.spent.verificationRounds,e.maxVerificationRounds)}`}async function Qe(){try{let t=await fetch(`${n}/api/goal`);if(!t.ok)return;let r=await t.json();r.goal?e.activeGoal={id:r.goal.id,objective:r.goal.objective,status:r.goal.status,createdAt:r.goal.createdAt,updatedAt:r.goal.updatedAt,lastCheckpointSummary:r.goal.lastCheckpoint?.summary,nextAction:r.goal.lastCheckpoint?.nextAction}:e.activeGoal=null,G()}catch{}}function G(){let t=document.getElementById(`goalCockpit`);if(!t)return;let n=e.activeGoal;if(!n||n.status===`complete`||n.status===`cancelled`){t.hidden=!0,t.innerHTML=``;return}t.hidden=!1,t.replaceChildren();let r=n.status===`paused`?`paused`:n.status===`blocked`?`blocked`:`active`,i=document.createElement(`span`);i.className=`goal-objective`,i.title=n.objective,i.textContent=n.objective;let a=document.createElement(`span`);if(a.className=`goal-status goal-status--${r}`,a.textContent=n.status,t.append(i,a),n.nextAction){let e=document.createElement(`span`);e.className=`goal-next`,e.textContent=n.nextAction,t.append(e)}}function $e(t,n){let r=new Set([`IDLE`,`I`,`P`,`A`,`B`,`C`,`D`]).has(t)?t:`IDLE`;if(e.orcState=r,r===`IDLE`||r===`D`)document.body.removeAttribute(`data-orc-state`),document.body.style.removeProperty(`--orc-glow`);else{document.body.setAttribute(`data-orc-state`,r);let e=`--orc-glow-${r}`,t=getComputedStyle(document.documentElement).getPropertyValue(e).trim();document.body.style.setProperty(`--orc-glow`,t)}document.body.classList.add(`orc-pulse`),setTimeout(()=>document.body.classList.remove(`orc-pulse`),700);let i=document.getElementById(`orcStateBadge`);i&&(i.textContent={IDLE:``,I:`INTERVIEW`,P:`PLAN`,A:`AUDIT`,B:`BUILD`,C:`CHECK`,D:`DONE`}[r],i.style.display=r===`IDLE`?`none`:`inline-block`);let a=document.getElementById(`pabcRoadmap`),o=document.getElementById(`sharkRunner`),s=document.getElementById(`pabcBrand`);if(a&&o){if(!a.dataset.resizeObserved){a.dataset.resizeObserved=`1`,new ResizeObserver(()=>{P&&o.classList.contains(`running`)&&F(a,o,P)}).observe(a);let e=0;window.addEventListener(`resize`,()=>{cancelAnimationFrame(e),e=requestAnimationFrame(()=>{P&&o.classList.contains(`running`)&&F(a,o,P)})})}if(r===`IDLE`)a.classList.remove(`visible`,`shimmer-out`),o.classList.remove(`running`),P=null;else if(r===`D`){N.forEach(e=>{let t=document.getElementById(`dot-${e}`);t&&(t.className=`pabc-dot done`,t.setAttribute(`data-phase`,e))});for(let e=0;e<N.length;e++){let t=document.getElementById(`pabc-conn-${e}`);t&&(t.className=`pabc-connector done`)}o.classList.remove(`running`),P=null,a.classList.add(`shimmer-out`),setTimeout(()=>a.classList.remove(`visible`,`shimmer-out`),1e3)}else{a.classList.remove(`shimmer-out`),a.classList.add(`visible`),o.classList.add(`running`);let e=N.indexOf(r);N.forEach((t,n)=>{let r=document.getElementById(`dot-${t}`);r&&(r.className=`pabc-dot ${n<e?`done`:n===e?`active`:`future`}`,r.setAttribute(`data-phase`,t))});for(let t=0;t<N.length;t++){let n=document.getElementById(`pabc-conn-${t}`);n&&(n.className=`pabc-connector ${t<e?`done`:``}`)}P=r,requestAnimationFrame(()=>F(a,o,r))}s&&n&&(s.textContent=n)}}function et(){We();let t=`ws://${location.host}`;e.ws=new WebSocket(`${t}${n}/?lang=${o()}`),e.ws.onmessage=t=>{let n;try{n=JSON.parse(t.data)}catch{console.warn(`[ws] malformed message:`,t.data);return}if(!n||typeof n!=`object`||typeof n.type!=`string`){console.warn(`[ws] invalid message shape:`,n);return}if(n.type===`agent_status`){if(!n.running&&f())return;n.running&&f()&&ie(),n.running===void 0?d(n.status||`idle`):d(n.running?`running`:`idle`),n.agentId&&n.phase&&(I[n.agentId]={phase:n.phase,phaseLabel:n.phaseLabel||``},r(()=>import(`./employees-CZdWHH-r.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0])))}else if(n.type===`queue_update`)ne(n.pending||0),Array.isArray(n.queued)&&_(n.queued),H(`queue_update`).catch(()=>{});else if(n.type===`worklog_created`)p(`${c.clipboard} Worklog: ${a(n.path||``)}`);else if(n.type===`round_start`){let e=n.agentPhases||n.subtasks||[],t=e.map(e=>a(e.agent||e.name||``)).join(`, `);p(i(`ws.roundStart`,{round:n.round||0,count:e.length,names:t}))}else if(n.type===`round_done`)n.action===`complete`?p(i(`ws.roundDone`,{round:n.round||0})):n.action===`next`?p(i(`ws.roundNext`,{round:n.round||0})):p(i(`ws.roundRetry`,{round:n.round||0}));else if(n.type===`agent_tool`){if(f())return;let e=n.toolType===`thinking`?`thinking`:n.toolType===`search`?`search`:n.toolType===`subagent`?`subagent`:`tool`;re({id:`step-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,type:e,icon:n.icon||c.tool,rawIcon:n.rawIcon||n.icon||``,label:n.label||``,isEmployee:n.isEmployee===!0,detail:n.detail||``,stepRef:n.stepRef||``,traceRunId:n.traceRunId||``,traceSeq:n.traceSeq,detailAvailable:n.detailAvailable,detailBytes:n.detailBytes,rawRetentionStatus:n.rawRetentionStatus,status:n.status||`running`,startTime:Date.now()})}else if(n.type===`agent_output`||n.type===`agent_chunk`){if(f())return;le(n.text||``)}else if(n.type===`agent_retry`){let e=Number(n.delay??0),t=n.reason,r=a(String(t||`429`));p(i(e>0?`ws.retry`:`ws.retryNow`,{cli:a(n.cli||``),reason:r,delay:e}),`tool-activity`)}else if(n.type===`agent_fallback`)p(i(`ws.fallback`,{from:a(n.from||``),to:a(n.to||``)}),`tool-activity`);else if(n.type===`agent_smoke`)p(`${c.warning} ${a(n.cli||`agent`)}: smoke response detected — auto-continuing`,`tool-activity`);else if(n.type===`goal_done`)e.activeGoal=null,G(),p(`🎯 Goal completed${n.source===`ai_output`?` (detected from AI output)`:``}`,`tool-activity`);else if(n.type===`goal_cancel`)e.activeGoal=null,G(),p(`🎯 Goal cancelled`,`tool-activity`);else if(n.type===`schedule_wakeup`)p(`⏰ Wakeup scheduled in ${n.delaySeconds}s — ${a(String(n.reason||``))}`,`tool-activity`);else if(n.type===`goal_continuation_limit`)p(`⚠️ Goal continuation limit reached (${n.attempts} attempts)`,`tool-activity`);else if(n.type===`goal_continuation`)p(`🎯 Active goal — auto-continuing`,`tool-activity`);else if(n.type===`workflow_event`){let e=n.event;e&&Le(e)}else if(n.type===`agent_done`)n.steered||f()||(u(n.text||``,n.toolLog),A());else if(n.type===`orchestrate_done`)u(n.text||``),A();else if(n.type===`clear`){l(),se(),ee().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``),r(()=>import(`./idb-cache-5H89a4l8.js`).then(e=>e.clearCache()),[]).catch(()=>{})}else if(n.type===`session_reset`)p(`${c.refresh} Session reset — history preserved`,`tool-activity`);else if(n.type===`agent_added`||n.type===`agent_updated`||n.type===`agent_deleted`)r(()=>import(`./employees-CZdWHH-r.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0]));else if(n.type===`heartbeat_pending`){let e={pending:n.pending||0,deferredPending:n.deferredPending||0};n.reason!==void 0&&(e.reason=n.reason),n.policy!==void 0&&(e.policy=n.policy),n.jobId!==void 0&&(e.jobId=n.jobId),n.jobName!==void 0&&(e.jobName=n.jobName),Ke(e)}else if(n.type===`orc_state`){if(!Ne(n.scope,L))return;$e(typeof n.state==`string`?n.state:`IDLE`,n.title),qe({taskAnchor:n.taskAnchor||null,resolvedSelection:n.resolvedSelection||null,interview:n.interview||null}),Ze(n.buildBudget||null,typeof n.state==`string`?n.state:`IDLE`)}else n.type===`memory_status`?r(()=>import(`./memory-DOBqiuPc.js`).then(e=>e.refreshMemorySidebar()),__vite__mapDeps([0])):n.type===`steer_started`?(ue(),u(``),d(`steering`)):n.type===`new_message`&&(n.source===`telegram`||n.source===`discord`||n.fromQueue===!0)?de(n.role===`assistant`?`agent`:n.role||`user`,n.content||``,n.cli):n.type===`system_notice`?p(`ℹ️ ${a(n.text||``)}`,`tool-activity`):n.type===`worker_stalled`?p(`⚠️ Worker stalled: ${a(n.employeeName||n.agentId||``)}`,`tool-activity`):n.type===`worker_disconnected`?p(`🔌 Worker disconnected: ${a(n.agentId||``)} (exit ${a(String(n.exitCode??`?`))})`,`tool-activity`):n.type===`worker_timeout`?p(`⏱️ Worker timed out: ${a(n.employeeName||n.agentId||``)}`,`tool-activity`):n.type===`alert_escalation`?p(a(n.message||``),`tool-activity`):n.type===`schedule_wakeup_failed`?p(`⚠️ Wakeup failed — ${a(String(n.reason||``))}: ${a(n.error||``)}`,`tool-activity`):n.type===`goal_continuation_failed`?p(`⚠️ Goal continuation failed: ${a(n.error||``)}`,`tool-activity`):n.type===`settings_change`?H(`settings_change`).catch(()=>{}):(n.type===`session_switched`||n.type===`session_created`)&&window.location.reload()},e.ws.onopen=()=>{console.log(`[ws] connected`);let e=Date.now()-R<1e4;r(()=>import(`./ui-CverZJnd.js`).then(async t=>{if(t.cleanupToolActivity(),!e)try{await t.loadMessages(),R=Date.now()}catch(e){console.error(`[ws] loadMessages failed`,e)}H(`reconnect`,{hydrateRun:!0}).catch(()=>{}).finally(()=>t.reconcileChatBottomAfterRestore(`reconnect`))}),__vite__mapDeps([0]))},e.ws.onclose=()=>{console.log(`[ws] disconnected, reconnecting in 2s...`),r(()=>import(`./ui-CverZJnd.js`).then(e=>e.cleanupToolActivity()),__vite__mapDeps([0])),d(`idle`),p(`${c.exec} ${i(`ws.disconnected`)}`,`tool-activity`),setTimeout(et,2e3)}}function tt(e){return I[e]||null}var K=`sidebarState`,q=900,nt=768;function J(){return window.innerWidth<=nt}function Y(){document.body.classList.remove(`left-expanded`,`right-expanded`)}function rt(e){let t=`${e}-expanded`,n=e===`left`?`right-expanded`:`left-expanded`,r=!document.body.classList.contains(t);document.body.classList.remove(n),document.body.classList.toggle(t,r)}function it(){let e={};try{e=JSON.parse(localStorage.getItem(K)||`{}`)}catch{}e.left&&document.body.classList.add(`left-collapsed`),e.right&&document.body.classList.add(`right-collapsed`);let t=J();document.getElementById(`toggleLeft`)?.addEventListener(`click`,at),document.getElementById(`toggleRight`)?.addEventListener(`click`,ot),window.addEventListener(`resize`,()=>{let e=J();if(window.innerWidth>q){Y();let e={};try{e=JSON.parse(localStorage.getItem(K)||`{}`)}catch{}document.body.classList.toggle(`left-collapsed`,!!e.left),document.body.classList.toggle(`right-collapsed`,!!e.right)}else document.body.classList.remove(`left-collapsed`,`right-collapsed`),e!==t&&Y();t=e,Q()}),window.innerWidth<=q&&(document.body.classList.remove(`left-collapsed`,`right-collapsed`),J()&&Y()),Q()}function X(){return window.innerWidth<=q}function at(){X()?rt(`left`):document.body.classList.toggle(`left-collapsed`),$(),Q()}function ot(){X()?rt(`right`):document.body.classList.toggle(`right-collapsed`),Z()&&document.getElementById(`tabAgents`)?.classList.contains(`active`)&&r(()=>import(`./employees-CZdWHH-r.js`).then(e=>e.loadEmployees(!0)),__vite__mapDeps([0])),$(),Q()}function st(){return X()?document.body.classList.contains(`left-expanded`):!document.body.classList.contains(`left-collapsed`)}function Z(){return X()?document.body.classList.contains(`right-expanded`):!document.body.classList.contains(`right-collapsed`)}function Q(){let e=document.getElementById(`toggleLeft`),t=document.getElementById(`toggleRight`);e&&(e.innerHTML=st()?c.chevronLeft:c.chevronRight),t&&(t.innerHTML=Z()?c.chevronRight:c.chevronLeft)}function $(){localStorage.setItem(K,JSON.stringify({left:document.body.classList.contains(`left-collapsed`),right:document.body.classList.contains(`right-collapsed`)}))}export{et as a,j as c,ot as i,Me as l,Z as n,tt as o,at as r,H as s,it as t,xe as u};