cli-jaw 2.2.15 → 2.2.17

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 (425) hide show
  1. package/README.md +23 -2
  2. package/dist/bin/cli-jaw.js +39 -0
  3. package/dist/bin/cli-jaw.js.map +1 -1
  4. package/dist/bin/commands/_shared/dashboard-client.js +42 -0
  5. package/dist/bin/commands/_shared/dashboard-client.js.map +1 -0
  6. package/dist/bin/commands/_shared/search-format.js +40 -0
  7. package/dist/bin/commands/_shared/search-format.js.map +1 -0
  8. package/dist/bin/commands/chat-search.js +5 -3
  9. package/dist/bin/commands/chat-search.js.map +1 -1
  10. package/dist/bin/commands/dashboard-chat.js +14 -31
  11. package/dist/bin/commands/dashboard-chat.js.map +1 -1
  12. package/dist/bin/commands/dashboard-memory.js +12 -49
  13. package/dist/bin/commands/dashboard-memory.js.map +1 -1
  14. package/dist/bin/commands/doctor.js +56 -11
  15. package/dist/bin/commands/doctor.js.map +1 -1
  16. package/dist/bin/commands/init.js +31 -1
  17. package/dist/bin/commands/init.js.map +1 -1
  18. package/dist/bin/commands/memory.js +5 -1
  19. package/dist/bin/commands/memory.js.map +1 -1
  20. package/dist/bin/commands/provider.js +23 -0
  21. package/dist/bin/commands/provider.js.map +1 -1
  22. package/dist/bin/commands/slack.js +57 -3
  23. package/dist/bin/commands/slack.js.map +1 -1
  24. package/dist/bin/commands/tui/input-handler.js +1 -1
  25. package/dist/bin/commands/tui/input-handler.js.map +1 -1
  26. package/dist/bin/commands/tui/slash-command-runner.js +4 -5
  27. package/dist/bin/commands/tui/slash-command-runner.js.map +1 -1
  28. package/dist/bin/postinstall.js +16 -18
  29. package/dist/bin/postinstall.js.map +1 -1
  30. package/dist/lib/media-kind.js +28 -0
  31. package/dist/lib/media-kind.js.map +1 -0
  32. package/dist/lib/upload.js +27 -10
  33. package/dist/lib/upload.js.map +1 -1
  34. package/dist/server.js +35 -51
  35. package/dist/server.js.map +1 -1
  36. package/dist/src/agent/args.js +34 -0
  37. package/dist/src/agent/args.js.map +1 -1
  38. package/dist/src/agent/codex-app-client.js +1016 -135
  39. package/dist/src/agent/codex-app-client.js.map +1 -1
  40. package/dist/src/agent/codex-app-events.js +72 -1
  41. package/dist/src/agent/codex-app-events.js.map +1 -1
  42. package/dist/src/agent/codex-host-pool.js +617 -0
  43. package/dist/src/agent/codex-host-pool.js.map +1 -0
  44. package/dist/src/agent/jwc-runtime.js +12 -4
  45. package/dist/src/agent/jwc-runtime.js.map +1 -1
  46. package/dist/src/agent/kiro-auth.js +10 -4
  47. package/dist/src/agent/kiro-auth.js.map +1 -1
  48. package/dist/src/agent/kiro-runtime.js +45 -8
  49. package/dist/src/agent/kiro-runtime.js.map +1 -1
  50. package/dist/src/agent/lifecycle-handler.js +75 -52
  51. package/dist/src/agent/lifecycle-handler.js.map +1 -1
  52. package/dist/src/agent/memory-flush-controller.js +241 -33
  53. package/dist/src/agent/memory-flush-controller.js.map +1 -1
  54. package/dist/src/agent/prompt-context.js +4 -0
  55. package/dist/src/agent/prompt-context.js.map +1 -1
  56. package/dist/src/agent/runtime-pool.js +64 -34
  57. package/dist/src/agent/runtime-pool.js.map +1 -1
  58. package/dist/src/agent/session-persistence.js +71 -15
  59. package/dist/src/agent/session-persistence.js.map +1 -1
  60. package/dist/src/agent/spawn/queue.js +319 -162
  61. package/dist/src/agent/spawn/queue.js.map +1 -1
  62. package/dist/src/agent/spawn.js +581 -268
  63. package/dist/src/agent/spawn.js.map +1 -1
  64. package/dist/src/bgtask/types.js +1 -1
  65. package/dist/src/bgtask/types.js.map +1 -1
  66. package/dist/src/browser/adaptive-fetch/safety.js +25 -0
  67. package/dist/src/browser/adaptive-fetch/safety.js.map +1 -1
  68. package/dist/src/browser/connection.js +2 -8
  69. package/dist/src/browser/connection.js.map +1 -1
  70. package/dist/src/cli/capability-probe-worker.js +172 -0
  71. package/dist/src/cli/capability-probe-worker.js.map +1 -0
  72. package/dist/src/cli/capability-probe.js +83 -0
  73. package/dist/src/cli/capability-probe.js.map +1 -0
  74. package/dist/src/cli/claude-models.js +2 -2
  75. package/dist/src/cli/claude-models.js.map +1 -1
  76. package/dist/src/cli/cli-status-worker.js +296 -0
  77. package/dist/src/cli/cli-status-worker.js.map +1 -0
  78. package/dist/src/cli/cli-status.js +81 -0
  79. package/dist/src/cli/cli-status.js.map +1 -0
  80. package/dist/src/cli/command-context.js +17 -5
  81. package/dist/src/cli/command-context.js.map +1 -1
  82. package/dist/src/cli/compact.js +56 -19
  83. package/dist/src/cli/compact.js.map +1 -1
  84. package/dist/src/cli/handlers-runtime.js +6 -4
  85. package/dist/src/cli/handlers-runtime.js.map +1 -1
  86. package/dist/src/cli/handlers.js +7 -2
  87. package/dist/src/cli/handlers.js.map +1 -1
  88. package/dist/src/cli/opencodex-models.js +5 -32
  89. package/dist/src/cli/opencodex-models.js.map +1 -1
  90. package/dist/src/cli/opencodex-runtime.js +82 -0
  91. package/dist/src/cli/opencodex-runtime.js.map +1 -0
  92. package/dist/src/cli/readiness.js +35 -18
  93. package/dist/src/cli/readiness.js.map +1 -1
  94. package/dist/src/cli/registry-live.js +8 -2
  95. package/dist/src/cli/registry-live.js.map +1 -1
  96. package/dist/src/cli/registry.js +1 -1
  97. package/dist/src/cli/registry.js.map +1 -1
  98. package/dist/src/core/browser-open-default.js +6 -4
  99. package/dist/src/core/browser-open-default.js.map +1 -1
  100. package/dist/src/core/browser-open.js +11 -15
  101. package/dist/src/core/browser-open.js.map +1 -1
  102. package/dist/src/core/bus.js +7 -1
  103. package/dist/src/core/bus.js.map +1 -1
  104. package/dist/src/core/chat-sessions.js +121 -12
  105. package/dist/src/core/chat-sessions.js.map +1 -1
  106. package/dist/src/core/cli-detect.js +148 -4
  107. package/dist/src/core/cli-detect.js.map +1 -1
  108. package/dist/src/core/codex-config.js +21 -0
  109. package/dist/src/core/codex-config.js.map +1 -1
  110. package/dist/src/core/compact.js +73 -21
  111. package/dist/src/core/compact.js.map +1 -1
  112. package/dist/src/core/config.js +449 -20
  113. package/dist/src/core/config.js.map +1 -1
  114. package/dist/src/core/db.js +225 -0
  115. package/dist/src/core/db.js.map +1 -1
  116. package/dist/src/core/event-bus.js +49 -4
  117. package/dist/src/core/event-bus.js.map +1 -1
  118. package/dist/src/core/event-scope.js +100 -0
  119. package/dist/src/core/event-scope.js.map +1 -0
  120. package/dist/src/core/install-integrity.js +176 -0
  121. package/dist/src/core/install-integrity.js.map +1 -0
  122. package/dist/src/core/main-session.js +64 -21
  123. package/dist/src/core/main-session.js.map +1 -1
  124. package/dist/src/core/message-summary.js +12 -2
  125. package/dist/src/core/message-summary.js.map +1 -1
  126. package/dist/src/core/platform-kind.js +139 -0
  127. package/dist/src/core/platform-kind.js.map +1 -0
  128. package/dist/src/core/rate-limit.js +156 -0
  129. package/dist/src/core/rate-limit.js.map +1 -0
  130. package/dist/src/core/runtime-settings.js +165 -17
  131. package/dist/src/core/runtime-settings.js.map +1 -1
  132. package/dist/src/core/session-context.js +7 -0
  133. package/dist/src/core/session-context.js.map +1 -0
  134. package/dist/src/core/session-ops.js +53 -9
  135. package/dist/src/core/session-ops.js.map +1 -1
  136. package/dist/src/core/settings-merge.js +105 -3
  137. package/dist/src/core/settings-merge.js.map +1 -1
  138. package/dist/src/core/settings-watch.js +29 -5
  139. package/dist/src/core/settings-watch.js.map +1 -1
  140. package/dist/src/core/widget-watcher.js +15 -2
  141. package/dist/src/core/widget-watcher.js.map +1 -1
  142. package/dist/src/discord/bot.js +5 -2
  143. package/dist/src/discord/bot.js.map +1 -1
  144. package/dist/src/discord/commands.js +4 -4
  145. package/dist/src/discord/commands.js.map +1 -1
  146. package/dist/src/goal/heartbeat.js +1 -1
  147. package/dist/src/goal/heartbeat.js.map +1 -1
  148. package/dist/src/goal/runtime.js +1 -1
  149. package/dist/src/goal/runtime.js.map +1 -1
  150. package/dist/src/goal-run/controller.js +2 -2
  151. package/dist/src/goal-run/controller.js.map +1 -1
  152. package/dist/src/manager/internal-fetch.js +15 -0
  153. package/dist/src/manager/internal-fetch.js.map +1 -0
  154. package/dist/src/manager/logs.js +2 -1
  155. package/dist/src/manager/logs.js.map +1 -1
  156. package/dist/src/manager/memory/chat-federation.js +104 -11
  157. package/dist/src/manager/memory/chat-federation.js.map +1 -1
  158. package/dist/src/manager/memory/federation.js +100 -0
  159. package/dist/src/manager/memory/federation.js.map +1 -1
  160. package/dist/src/manager/metadata.js +4 -1
  161. package/dist/src/manager/metadata.js.map +1 -1
  162. package/dist/src/manager/notes/assets.js +1 -1
  163. package/dist/src/manager/notes/assets.js.map +1 -1
  164. package/dist/src/manager/notes/frontmatter.js +5 -49
  165. package/dist/src/manager/notes/frontmatter.js.map +1 -1
  166. package/dist/src/manager/notes/link-resolver.js +2 -2
  167. package/dist/src/manager/notes/link-resolver.js.map +1 -1
  168. package/dist/src/manager/notes/remote-assets.js +1 -1
  169. package/dist/src/manager/notes/remote-assets.js.map +1 -1
  170. package/dist/src/manager/notes/routes.js +2 -2
  171. package/dist/src/manager/notes/routes.js.map +1 -1
  172. package/dist/src/manager/notes/store.js +2 -2
  173. package/dist/src/manager/notes/store.js.map +1 -1
  174. package/dist/src/manager/notes/trash.js +1 -1
  175. package/dist/src/manager/notes/trash.js.map +1 -1
  176. package/dist/src/manager/notes/vault-index.js +2 -2
  177. package/dist/src/manager/notes/vault-index.js.map +1 -1
  178. package/dist/src/manager/notes/wiki-links.js +1 -1
  179. package/dist/src/manager/notes/wiki-links.js.map +1 -1
  180. package/dist/src/manager/notes/wiki-routes.js +84 -0
  181. package/dist/src/manager/notes/wiki-routes.js.map +1 -0
  182. package/dist/src/manager/proxy.js +1 -0
  183. package/dist/src/manager/proxy.js.map +1 -1
  184. package/dist/src/manager/routes/dashboard-memory.js +24 -1
  185. package/dist/src/manager/routes/dashboard-memory.js.map +1 -1
  186. package/dist/src/manager/routes/runtime-monitor.js +1 -1
  187. package/dist/src/manager/routes/runtime-monitor.js.map +1 -1
  188. package/dist/src/manager/scan.js +5 -3
  189. package/dist/src/manager/scan.js.map +1 -1
  190. package/dist/src/manager/server.js +20 -6
  191. package/dist/src/manager/server.js.map +1 -1
  192. package/dist/src/manager/telegram-hub/hub-bot.js +4 -3
  193. package/dist/src/manager/telegram-hub/hub-bot.js.map +1 -1
  194. package/dist/src/manager/worker-events.js +2 -1
  195. package/dist/src/manager/worker-events.js.map +1 -1
  196. package/dist/src/memory/heartbeat.js +6 -5
  197. package/dist/src/memory/heartbeat.js.map +1 -1
  198. package/dist/src/memory/indexing.js +162 -45
  199. package/dist/src/memory/indexing.js.map +1 -1
  200. package/dist/src/messaging/channel-validate.js +14 -1
  201. package/dist/src/messaging/channel-validate.js.map +1 -1
  202. package/dist/src/messaging/redact.js +2 -1
  203. package/dist/src/messaging/redact.js.map +1 -1
  204. package/dist/src/messaging/session-key.js +21 -2
  205. package/dist/src/messaging/session-key.js.map +1 -1
  206. package/dist/src/notes/constants.js.map +1 -0
  207. package/dist/src/notes/frontmatter.js +59 -0
  208. package/dist/src/notes/frontmatter.js.map +1 -0
  209. package/dist/src/notes/path-guards.js.map +1 -0
  210. package/dist/src/notes/search.js.map +1 -0
  211. package/dist/src/orchestrator/attestation.js +1 -1
  212. package/dist/src/orchestrator/attestation.js.map +1 -1
  213. package/dist/src/orchestrator/gateway.js +135 -31
  214. package/dist/src/orchestrator/gateway.js.map +1 -1
  215. package/dist/src/orchestrator/pipeline.js +53 -21
  216. package/dist/src/orchestrator/pipeline.js.map +1 -1
  217. package/dist/src/orchestrator/scope.js +36 -2
  218. package/dist/src/orchestrator/scope.js.map +1 -1
  219. package/dist/src/orchestrator/session-lanes.js +87 -0
  220. package/dist/src/orchestrator/session-lanes.js.map +1 -0
  221. package/dist/src/orchestrator/session-work.js +25 -0
  222. package/dist/src/orchestrator/session-work.js.map +1 -0
  223. package/dist/src/orchestrator/state-machine.js +1 -5
  224. package/dist/src/orchestrator/state-machine.js.map +1 -1
  225. package/dist/src/orchestrator/worker-registry.js +20 -10
  226. package/dist/src/orchestrator/worker-registry.js.map +1 -1
  227. package/dist/src/prompt/builder.js +40 -2
  228. package/dist/src/prompt/builder.js.map +1 -1
  229. package/dist/src/prompt/templates/a1-system.md +8 -1
  230. package/dist/src/routes/agent-control.js +44 -8
  231. package/dist/src/routes/agent-control.js.map +1 -1
  232. package/dist/src/routes/chat-sessions.js +34 -6
  233. package/dist/src/routes/chat-sessions.js.map +1 -1
  234. package/dist/src/routes/command.js +63 -8
  235. package/dist/src/routes/command.js.map +1 -1
  236. package/dist/src/routes/events.js +11 -2
  237. package/dist/src/routes/events.js.map +1 -1
  238. package/dist/src/routes/link-preview.js +1 -27
  239. package/dist/src/routes/link-preview.js.map +1 -1
  240. package/dist/src/routes/messages.js +6 -5
  241. package/dist/src/routes/messages.js.map +1 -1
  242. package/dist/src/routes/messaging.js +45 -1
  243. package/dist/src/routes/messaging.js.map +1 -1
  244. package/dist/src/routes/orchestrate.js +53 -33
  245. package/dist/src/routes/orchestrate.js.map +1 -1
  246. package/dist/src/routes/search.js +84 -0
  247. package/dist/src/routes/search.js.map +1 -0
  248. package/dist/src/routes/session-request.js +29 -0
  249. package/dist/src/routes/session-request.js.map +1 -0
  250. package/dist/src/routes/settings.js +110 -3
  251. package/dist/src/routes/settings.js.map +1 -1
  252. package/dist/src/routes/static.js +30 -8
  253. package/dist/src/routes/static.js.map +1 -1
  254. package/dist/src/routes/system.js +1 -1
  255. package/dist/src/routes/system.js.map +1 -1
  256. package/dist/src/routes/wiki.js +122 -0
  257. package/dist/src/routes/wiki.js.map +1 -0
  258. package/dist/src/search/contract.js +2 -0
  259. package/dist/src/search/contract.js.map +1 -0
  260. package/dist/src/search/coordinator.js +153 -0
  261. package/dist/src/search/coordinator.js.map +1 -0
  262. package/dist/src/search/provider.js +40 -0
  263. package/dist/src/search/provider.js.map +1 -0
  264. package/dist/src/search/providers/chat.js +115 -0
  265. package/dist/src/search/providers/chat.js.map +1 -0
  266. package/dist/src/search/providers/memory.js +53 -0
  267. package/dist/src/search/providers/memory.js.map +1 -0
  268. package/dist/src/search/providers/wiki.js +80 -0
  269. package/dist/src/search/providers/wiki.js.map +1 -0
  270. package/dist/src/slack/api.js +10 -1
  271. package/dist/src/slack/api.js.map +1 -1
  272. package/dist/src/slack/attachment-recovery.js +42 -0
  273. package/dist/src/slack/attachment-recovery.js.map +1 -0
  274. package/dist/src/slack/bot.js +120 -41
  275. package/dist/src/slack/bot.js.map +1 -1
  276. package/dist/src/slack/commands.js +24 -8
  277. package/dist/src/slack/commands.js.map +1 -1
  278. package/dist/src/slack/events.js +12 -1
  279. package/dist/src/slack/events.js.map +1 -1
  280. package/dist/src/slack/history.js +108 -0
  281. package/dist/src/slack/history.js.map +1 -0
  282. package/dist/src/slack/inbound-file.js +242 -0
  283. package/dist/src/slack/inbound-file.js.map +1 -0
  284. package/dist/src/slack/inbound-url.js +39 -0
  285. package/dist/src/slack/inbound-url.js.map +1 -0
  286. package/dist/src/slack/ingress.js +140 -0
  287. package/dist/src/slack/ingress.js.map +1 -0
  288. package/dist/src/slack/manifest.js +3 -0
  289. package/dist/src/slack/manifest.js.map +1 -1
  290. package/dist/src/slack/socket.js +1 -1
  291. package/dist/src/slack/socket.js.map +1 -1
  292. package/dist/src/slack/thread-tracker.js +86 -0
  293. package/dist/src/slack/thread-tracker.js.map +1 -0
  294. package/dist/src/telegram/bot.js +21 -11
  295. package/dist/src/telegram/bot.js.map +1 -1
  296. package/dist/src/wiki/config.js +193 -0
  297. package/dist/src/wiki/config.js.map +1 -0
  298. package/dist/src/wiki/entities.js +61 -0
  299. package/dist/src/wiki/entities.js.map +1 -0
  300. package/dist/src/wiki/ontology.js +72 -0
  301. package/dist/src/wiki/ontology.js.map +1 -0
  302. package/dist/src/wiki/prompt.js +172 -0
  303. package/dist/src/wiki/prompt.js.map +1 -0
  304. package/dist/src/wiki/safe-traversal.js +198 -0
  305. package/dist/src/wiki/safe-traversal.js.map +1 -0
  306. package/dist/src/wiki/scaffold.js +77 -0
  307. package/dist/src/wiki/scaffold.js.map +1 -0
  308. package/package.json +6 -5
  309. package/public/css/session-hub.css +266 -0
  310. package/public/dist/assets/AdvancedExport-DYGcCAUq.js +1 -0
  311. package/public/dist/assets/Agent-CNNQ7KkJ.js +1 -0
  312. package/public/dist/assets/{DesignPanel-BGMPhZSx.js → DesignPanel-DcL369nB.js} +1 -1
  313. package/public/dist/assets/{DocPanel-Dz-J_l5M.js → DocPanel-K8A2pm_1.js} +1 -1
  314. package/public/dist/assets/{FolderPanel-DbPhzzvi.js → FolderPanel-CV52EzwG.js} +1 -1
  315. package/public/dist/assets/{MilkdownWysiwygEditor-Em7iC6y9.js → MilkdownWysiwygEditor-BKOCDI4Z.js} +1 -1
  316. package/public/dist/assets/api-B25zNNFJ.js +1 -0
  317. package/public/dist/assets/{app-DX4e6isX.css → app-DjgGeXhJ.css} +1 -1
  318. package/public/dist/assets/app-Dsgp4xpU.js +55 -0
  319. package/public/dist/assets/bgtask-badge-C6h5C-o4.js +1 -0
  320. package/public/dist/assets/{bgtask-badge-qMkKOZx0.js → bgtask-badge-CpavV0Jc.js} +4 -4
  321. package/public/dist/assets/{employees-BnobWM_2.js → employees-BJyEgim7.js} +4 -4
  322. package/public/dist/assets/idb-cache-B5PX63p7.js +1 -0
  323. package/public/dist/assets/{idb-cache-BzzftUET.js → idb-cache-lOntwU3S.js} +1 -1
  324. package/public/dist/assets/{iframe-renderer-C5vRbbl9.js → iframe-renderer-B8k3AvTv.js} +12 -12
  325. package/public/dist/assets/iframe-renderer-BO_GgCTR.js +1 -0
  326. package/public/dist/assets/manager-LkGs6qEJ.css +1 -0
  327. package/public/dist/assets/manager-kXYQyMhR.js +13 -0
  328. package/public/dist/assets/{memory-DF4kPwwC.js → memory-D2RbBVO-.js} +11 -11
  329. package/public/dist/assets/memory-amsvg4Ey.js +1 -0
  330. package/public/dist/assets/message-history-BGHZxvgV.js +1 -0
  331. package/public/dist/assets/message-history-Bw2E_b8L.js +1 -0
  332. package/public/dist/assets/pi-settings-5HVg1sXJ.js +1 -0
  333. package/public/dist/assets/render-BkGcpH7z.js +157 -0
  334. package/public/dist/assets/settings-B1FPORO2.js +56 -0
  335. package/public/dist/assets/settings-CMN-zN4Q.js +1 -0
  336. package/public/dist/assets/settings-core-B_OjGYVN.js +1 -0
  337. package/public/dist/assets/settings-core-CxRwqx86.js +144 -0
  338. package/public/dist/assets/sidebar-DW78DANx.js +49 -0
  339. package/public/dist/assets/skills-Dz-9Yrxr.js +1 -0
  340. package/public/dist/assets/{skills-IGquen_j.js → skills-lWi0ZFiV.js} +6 -6
  341. package/public/dist/assets/{slash-commands-ZRDOL99E.js → slash-commands-DYOI6nKj.js} +1 -1
  342. package/public/dist/assets/slash-commands-xJFCdTTM.js +1 -0
  343. package/public/dist/assets/{trace-drawer-D8To8fYt.js → trace-drawer-DBX9xzmt.js} +1 -1
  344. package/public/dist/assets/{ui-Hx_mNoDf.js → ui-Bx7eqnXt.js} +1 -1
  345. package/public/dist/assets/ui-JOcrYeG-.js +1 -0
  346. package/public/dist/assets/{wiki-link-suggestions-DZQc78gj.js → wiki-link-suggestions-Dp6kBQVu.js} +1 -1
  347. package/public/dist/index.html +4 -4
  348. package/public/dist/manager/index.html +2 -2
  349. package/public/index.html +3 -2
  350. package/public/js/event-channel.ts +25 -0
  351. package/public/js/features/channel-onboarding-flow.ts +16 -1
  352. package/public/js/features/channel-onboarding.ts +20 -2
  353. package/public/js/features/chat-messages.ts +3 -1
  354. package/public/js/features/chat-search.ts +2 -1
  355. package/public/js/features/chat.ts +56 -18
  356. package/public/js/features/elicitation.ts +15 -0
  357. package/public/js/features/idb-cache.ts +34 -0
  358. package/public/js/features/message-history.ts +2 -1
  359. package/public/js/features/session-hub.ts +334 -0
  360. package/public/js/features/settings-cli-status-render.ts +1 -1
  361. package/public/js/features/settings-cli-status.ts +25 -11
  362. package/public/js/features/settings-core.ts +72 -3
  363. package/public/js/features/settings-types.ts +32 -0
  364. package/public/js/features/ui-status.ts +2 -1
  365. package/public/js/main.ts +20 -0
  366. package/public/js/render/compose-block.ts +7 -0
  367. package/public/js/ws.ts +22 -2
  368. package/public/locales/en.json +46 -4
  369. package/public/locales/ja.json +46 -4
  370. package/public/locales/ko.json +46 -4
  371. package/public/locales/zh.json +46 -4
  372. package/public/manager/src/App.tsx +1 -1
  373. package/public/manager/src/InstancePreview.tsx +5 -1
  374. package/public/manager/src/api.ts +2 -1
  375. package/public/manager/src/components/InstanceGroups.tsx +10 -0
  376. package/public/manager/src/components/InstanceListContent.tsx +24 -1
  377. package/public/manager/src/components/InstanceRow.tsx +33 -3
  378. package/public/manager/src/components/InstanceSessionList.tsx +132 -0
  379. package/public/manager/src/hooks/useActiveSessionDisclosure.ts +45 -0
  380. package/public/manager/src/lib/resilient-fetch.ts +93 -0
  381. package/public/manager/src/lib/session-store.ts +216 -0
  382. package/public/manager/src/manager-components.css +97 -0
  383. package/public/manager/src/settings/pages/AdvancedExport.tsx +12 -2
  384. package/public/manager/src/settings/pages/Agent.tsx +113 -1
  385. package/public/manager/src/settings/pages/components/agent/agent-meta.ts +1 -1
  386. package/scripts/bundle-sidecar.sh +50 -2
  387. package/scripts/burst-scenario.mjs +72 -0
  388. package/scripts/check-redaction-sinks.mjs +1 -0
  389. package/scripts/check-strict-baseline.mjs +1 -1
  390. package/scripts/ensure-native-modules.cjs +50 -3
  391. package/scripts/install-risk-gate.mjs +8 -0
  392. package/scripts/install-wsl.sh +27 -2
  393. package/scripts/install.ps1 +121 -0
  394. package/scripts/install.sh +28 -2
  395. package/scripts/postinstall-guard.cjs +44 -2
  396. package/scripts/release-gates.mjs +12 -0
  397. package/dist/src/manager/notes/constants.js.map +0 -1
  398. package/dist/src/manager/notes/path-guards.js.map +0 -1
  399. package/dist/src/manager/notes/search.js.map +0 -1
  400. package/public/dist/assets/AdvancedExport-DsDpqXoH.js +0 -1
  401. package/public/dist/assets/Agent-BjbZVZ9p.js +0 -1
  402. package/public/dist/assets/api-C9dOxby7.js +0 -1
  403. package/public/dist/assets/app-BzD_ZLvt.js +0 -55
  404. package/public/dist/assets/bgtask-badge-Dqbp-Y4e.js +0 -1
  405. package/public/dist/assets/idb-cache-ZH6lOebk.js +0 -1
  406. package/public/dist/assets/iframe-renderer-Df4KIVyx.js +0 -1
  407. package/public/dist/assets/manager-C4eNDNFt.css +0 -1
  408. package/public/dist/assets/manager-DaN201mN.js +0 -13
  409. package/public/dist/assets/memory-D-bULTHl.js +0 -1
  410. package/public/dist/assets/message-history-C4WOisGx.js +0 -1
  411. package/public/dist/assets/message-history-ZBoza6ew.js +0 -1
  412. package/public/dist/assets/pi-settings-CBUGDAuT.js +0 -1
  413. package/public/dist/assets/render-DYX6GRQ0.js +0 -122
  414. package/public/dist/assets/settings-DbJpGoaX.js +0 -55
  415. package/public/dist/assets/settings-SreihUje.js +0 -1
  416. package/public/dist/assets/settings-core-B1Y5Nb4Z.js +0 -1
  417. package/public/dist/assets/settings-core-DobZWIZ7.js +0 -140
  418. package/public/dist/assets/sidebar-Cp22g0Gv.js +0 -49
  419. package/public/dist/assets/skills-DwPIP08e.js +0 -1
  420. package/public/dist/assets/slash-commands-BBVfwcnW.js +0 -1
  421. package/public/dist/assets/ui-CAicpUZc.js +0 -1
  422. /package/dist/src/{manager/notes → notes}/constants.js +0 -0
  423. /package/dist/src/{manager/notes → notes}/path-guards.js +0 -0
  424. /package/dist/src/{manager/notes → notes}/search.js +0 -0
  425. /package/public/dist/assets/{pi-settings-Dh5lgb87.js → pi-settings-DEuKgvIj.js} +0 -0
@@ -0,0 +1,144 @@
1
+ import{a as e,i as t,n,r,t as i}from"./api-tVoG39dL.js";import{M as a,O as o,R as s,x as c}from"./render-BkGcpH7z.js";import{n as l}from"./locale-DC-ZsWOf.js";import{a as u,i as d,n as f,o as p,t as m}from"./constants-Df7-7Rky.js";import{a as ee,c as te,l as ne,u as re}from"./pi-settings-DEuKgvIj.js";import{n as ie,r as ae}from"./provider-icons-VDfahiUp.js";function oe(e){if(e.precision===`binary`)return{percent:null,text:e.status===`exhausted`?`Exhausted`:`Available`};let t=Math.max(0,Math.min(100,Math.round(e.percent)));return{percent:t,text:`${t}%`}}function se(e){return e.probeState===`checking`?`checking`:e.binaryInstalled===!0&&e.capabilityReady===!1?`capability-failed`:e.probeState===`stale`?`stale`:e.available===!0&&e.capabilityReady!==!1?`ready`:`unavailable`}function ce(e){return e>=200&&e<300||e===409}function le(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?h(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?h(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=h(e)}if(c?.value){let e=c.value.slice(-4);c.value=``,c.placeholder=h(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 h(e){return s(`stt.key.savedPlaceholder`,{last4:e||``})}function g(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 ue(e){if(!e||typeof e!=`object`)return null;let t=e.channels;if(!t||typeof t!=`object`)return null;let n=t,r=n.activeInbound;if(r!==`telegram`&&r!==`discord`&&r!==`slack`||!g(n.telegram)||!g(n.discord))return null;let i=g(n.slack)?n.slack:{configured:!1,activeInbound:!1,sendCapable:!1,reason:`unavailable`};return{activeInbound:r,telegram:n.telegram,discord:n.discord,slack:i}}function de(e){let t=[];return t.push(e.configured?s(`settings.channel.configured`):s(`settings.channel.notConfigured`)),e.sendCapable&&t.push(s(`settings.channel.sendCapable`)),e.activeInbound&&t.push(s(`settings.channel.activeInbound`)),t}function _(e,t,n){let r=de(t).map(e=>`<span class="transport-status-chip">${a(e)}</span>`).join(``),i=t.reason===`not_attach_instance`?`<p class="transport-status-hint">${a(s(`settings.channel.notAttachInstanceHint`))}</p>`:n&&t.configured&&t.sendCapable&&!t.activeInbound?`<p class="transport-status-hint">${a(s(`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
+ ${i}
6
+ </div>`}function fe(e,t){e.innerHTML=`
7
+ <h4 class="section-title-row">
8
+ <span><span data-icon="radio"></span> ${a(s(`settings.channel.statusTitle`))}</span>
9
+ </h4>
10
+ ${_(`Telegram`,t.telegram,!0)}
11
+ ${_(`Discord`,t.discord,!0)}
12
+ ${_(`Slack`,t.slack,!0)}
13
+ `}async function pe(){let e=document.getElementById(`channelTransportStatus`);if(e)try{let t=ue(await n(`/api/health`));if(!t){e.innerHTML=``,e.style.display=`none`;return}fe(e,t),e.style.display=``}catch{e.innerHTML=``,e.style.display=`none`}}var me={telegram:[{key:`botToken`,settingsId:`tgToken`,secret:!0,example:`8123456789:AAH...`}],discord:[{key:`botToken`,settingsId:`dcToken`,secret:!0,example:`MTIzNDU2Nzg5...`},{key:`guildId`,settingsId:`dcGuildId`,secret:!1,example:`123456789012345678`}],slack:[{key:`botToken`,settingsId:`slBotToken`,secret:!0,prefix:`xoxb-`,example:`xoxb-1234-5678-abcd...`},{key:`appToken`,settingsId:`slAppToken`,secret:!0,optional:!0,prefix:`xapp-`,example:`xapp-1-A01...`}]},he={telegram:`https://t.me/BotFather`,discord:`https://discord.com/developers/applications`,slack:`https://api.slack.com/apps`};function ge(e,t={}){return{channel:e,step:1,draft:{...t},validatedIdentity:null,validatedTeamId:``,error:null,missingScopes:[],missingCapabilities:[],saved:!1}}function v(e){return me[e]}function _e(e,t){for(let n of v(e)){let e=(t[n.key]||``).trim();if(!e){if(n.optional)continue;return n.key===`guildId`?`guild_required`:`token_required`}if(n.prefix&&!e.startsWith(n.prefix))return n.key===`appToken`?`app_prefix`:`bot_prefix`}return null}function ve(e){return e.step===1?null:e.step===2?_e(e.channel,e.draft):e.step===3?e.validatedIdentity?null:`validation_required`:null}function ye(e){return e.step<4&&ve(e)===null}function be(e){if(e.step>=4)return e;let t=ve(e);return t?{...e,error:t}:{...e,step:e.step+1,error:null}}function xe(e){return e.step<=1?e:{...e,step:e.step-1,error:null}}function Se(e,t,n){return(e.draft[t]??``)===n?e:{...e,draft:{...e.draft,[t]:n},validatedIdentity:null,validatedTeamId:``,error:null,missingScopes:[],missingCapabilities:[]}}function Ce(e,t){return t?.ok?{...e,validatedIdentity:t.identity||`ok`,validatedTeamId:t.teamId||``,error:null,missingScopes:[],missingCapabilities:Array.isArray(t.missingCapabilities)?t.missingCapabilities:[]}:{...e,validatedIdentity:null,validatedTeamId:``,error:t?.error||`network`,missingScopes:Array.isArray(t?.missing)?t.missing:[],missingCapabilities:[]}}function we(e){return{...e,saved:!0,step:4,error:null}}function Te(e){let t={channel:e.channel};for(let n of v(e.channel))t[n.key]=(e.draft[n.key]||``).trim();return t}function Ee(e){let t=t=>(e.draft[t]||``).trim();return e.channel===`telegram`?{telegram:{enabled:!0,token:t(`botToken`)}}:e.channel===`discord`?{discord:{enabled:!0,token:t(`botToken`),guildId:t(`guildId`)}}:{slack:{enabled:!0,botToken:t(`botToken`),appToken:t(`appToken`),...e.validatedTeamId?{teamId:e.validatedTeamId}:{}}}}var De=`jaw:notificationsAsked`;function Oe(){try{return localStorage.getItem(De)===`1`}catch{return!0}}function ke(){try{localStorage.setItem(De,`1`)}catch{}}async function Ae(){if(typeof Notification>`u`)return null;if(Notification.permission!==`default`)return Notification.permission;if(Oe())return null;ke();try{return await Notification.requestPermission()}catch{return null}}var y=null,b=null,x=!1,S=!1,C=0;function je(){document.addEventListener(`click`,e=>{let t=e.target?.closest(`[data-onboard-channel]`);t&&(e.preventDefault(),Me(t.getAttribute(`data-onboard-channel`)))}),document.addEventListener(`keydown`,e=>{e.key!==`Escape`||!b||(e.preventDefault(),e.stopImmediatePropagation(),Ne())},!0),document.addEventListener(`keydown`,e=>{if(e.key!==`Tab`||!b||!y)return;let t=[...y.querySelectorAll(`button:not([disabled]), input:not([disabled]), a[href], [tabindex]:not([tabindex="-1"])`)];if(!t.length)return;let n=t[0],r=t[t.length-1],i=document.activeElement;e.shiftKey&&(i===n||!y.contains(i))?(e.preventDefault(),r.focus()):!e.shiftKey&&i===r&&(e.preventDefault(),n.focus())},!0)}function Me(e){if(e!==`telegram`&&e!==`discord`&&e!==`slack`)return;let t={};for(let n of v(e))t[n.key]=Pe(n.settingsId);b=ge(e,t),x=!1,S=!1,C+=1,Ie(),w(),y?.classList.add(`open`)}function Ne(){y?.classList.remove(`open`),b=null}function Pe(e){return document.getElementById(e)?.value.trim()||``}function Fe(e,t){let n=document.getElementById(e);n&&(n.value=t)}function Ie(){y||(y=document.createElement(`div`),y.className=`modal-overlay onboarding-overlay`,y.addEventListener(`click`,e=>{e.target===y&&Ne()}),document.body.appendChild(y))}function Le(e){return e.step===1?`
14
+ <p class="onboarding-guide">${a(s(`onboarding.guide.${e.channel}`))}</p>
15
+ ${e.channel===`slack`?`<p class="onboarding-guide">${a(s(`onboarding.slackExistingApp`))}</p>`:``}
16
+ <div class="onboarding-actions">
17
+ <button type="button" class="perm-btn" data-onboard-issuer="1">
18
+ ${a(s(`onboarding.openIssuer`))}
19
+ </button>
20
+ </div>`:e.step===2?`${v(e.channel).map(t=>{let n=s(`onboarding.token.${t.key}`)+(t.optional?` (${s(`onboarding.optional`)})`:``);return`
21
+ <div class="onboarding-field">
22
+ <label for="onboard-${t.key}">${a(n)}</label>
23
+ <input id="onboard-${t.key}" data-onboard-field="${t.key}" class="input-sm"
24
+ type="${t.secret?`password`:`text`}"
25
+ placeholder="${a(t.example)}"
26
+ autocomplete="off" spellcheck="false"
27
+ value="${a(e.draft[t.key]||``)}">
28
+ <span class="onboarding-hint">${a(s(`onboarding.hint.${e.channel}.${t.key}`))}</span>
29
+ </div>`}).join(``)}${e.channel===`slack`?`<p class="onboarding-guide">${a(s(`onboarding.slackExistingApp`))}</p>`:``}`:e.step===3?`${x?`<p class="onboarding-guide">${a(s(`onboarding.validating`))}</p>`:e.validatedIdentity?`<p class="onboarding-identity">${a(s(`onboarding.valid`,{identity:e.validatedIdentity}))}</p>`:`<p class="onboarding-guide">${a(s(`onboarding.validateHint`))}</p>`}
30
+ <div class="onboarding-actions">
31
+ <button type="button" class="perm-btn" data-onboard-validate="1" ${x?`disabled`:``}>
32
+ ${a(s(`onboarding.validate`))}
33
+ </button>
34
+ </div>`:`<p class="onboarding-next">${a(s(e.saved?`onboarding.next.${e.channel}`:`onboarding.saveHint`))}</p>`}function Re(e){return e.step===4&&e.saved?`<button type="button" class="perm-btn active" data-onboard-close="1">${a(s(`onboarding.close`))}</button>`:`${e.step>1?`<button type="button" class="perm-btn" data-onboard-back="1">${a(s(`onboarding.back`))}</button>`:``}${e.step===4?`<button type="button" class="perm-btn active" data-onboard-save="1">${a(s(`onboarding.save`))}</button>`:`<button type="button" class="perm-btn ${ye(e)?`active`:``}" data-onboard-next="1">${a(s(`onboarding.next`))}</button>`}`}function w(){if(!y||!b)return;let e=b;y.innerHTML=`
35
+ <div class="modal-box onboarding-box" role="dialog" aria-modal="true"
36
+ aria-labelledby="onboarding-title" aria-describedby="onboarding-step-title">
37
+ <div class="onboarding-head">
38
+ <span class="onboarding-title" id="onboarding-title">${a(s(`onboarding.title.${e.channel}`))}</span>
39
+ <span class="onboarding-progress" role="status" aria-live="polite"
40
+ aria-label="${a(s(`onboarding.progressLabel`,{step:e.step,total:4}))}">${e.step}/4</span>
41
+ <button type="button" class="help-trigger onboarding-close" data-onboard-close="1"
42
+ aria-label="${a(s(`onboarding.close`))}">✕</button>
43
+ </div>
44
+ <div class="onboarding-steps" aria-hidden="true">
45
+ ${Array.from({length:4},(t,n)=>`<span class="onboarding-dot${n+1===e.step?` is-active`:``}${n+1<e.step?` is-done`:``}"></span>`).join(``)}
46
+ </div>
47
+ <div class="onboarding-step-title" id="onboarding-step-title">${a(s(`onboarding.step.${e.step}`))}</div>
48
+ ${Le(e)}
49
+ <div class="onboarding-error" role="alert" style="display:${e.error?``:`none`}">
50
+ ${e.error?a(s(`onboarding.error.${e.error}`)):``}
51
+ ${e.missingScopes.length?`<span class="onboarding-scopes">${a(e.missingScopes.join(`, `))}</span>`:``}
52
+ </div>
53
+ <div class="onboarding-capability-warning" role="status" style="display:${e.missingCapabilities.length?``:`none`}">
54
+ ${e.missingCapabilities.length?a(s(`onboarding.warning.missingCapabilities`,{capabilities:e.missingCapabilities.join(`, `)})):``}
55
+ </div>
56
+ <div class="onboarding-actions onboarding-footer">${Re(e)}</div>
57
+ </div>`,y.querySelectorAll(`[data-onboard-close]`).forEach(e=>e.addEventListener(`click`,Ne)),y.querySelector(`[data-onboard-issuer]`)?.addEventListener(`click`,()=>{b&&window.open(he[b.channel],`_blank`,`noopener`)}),y.querySelector(`[data-onboard-back]`)?.addEventListener(`click`,()=>{b&&(b=xe(b),w())}),y.querySelector(`[data-onboard-next]`)?.addEventListener(`click`,()=>{b&&(Ve(),b=be(b),w())}),y.querySelector(`[data-onboard-validate]`)?.addEventListener(`click`,()=>{He()}),y.querySelector(`[data-onboard-save]`)?.addEventListener(`click`,()=>{Ue()}),y.querySelectorAll(`[data-onboard-field]`).forEach(e=>{e.addEventListener(`input`,()=>{if(!b)return;let t=e.getAttribute(`data-onboard-field`)||``;b=Se(b,t,e.value)}),e.addEventListener(`keydown`,e=>{e.key!==`Enter`||e.shiftKey||e.isComposing||(e.preventDefault(),ze())})}),Be()}function ze(){if(b){if(b.step===3){He();return}if(b.step===4){b.saved||Ue();return}Ve(),b=be(b),w()}}function Be(){let e=[...y?.querySelectorAll(`[data-onboard-field]`)??[]];if(!e.length)return;let t=e.find(e=>!e.value.trim())??e[0];t?.focus();let n=t?.value.length??0;t?.setSelectionRange?.(n,n)}function Ve(){if(b)for(let e of y?.querySelectorAll(`[data-onboard-field]`)??[]){let t=e.getAttribute(`data-onboard-field`)||``;b=Se(b,t,e.value)}}async function He(){if(!b||x)return;let e=C;x=!0,w();let t=await n(`/api/channels/validate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(Te(b))});e===C&&(x=!1,b&&(b=Ce(b,t||{ok:!1,error:`network`}),w()))}async function Ue(){if(!b||S)return;let e=ve({...b,step:3});if(e){b={...b,step:3,error:e},w();return}for(let e of v(b.channel))Fe(e.settingsId,(b.draft[e.key]||``).trim());let n=C;S=!0;try{await t(`/api/settings`,`PUT`,Ee(b))}finally{S=!1}n!==C||!b||(b=we(b),w(),pe(),Ae())}function We(e){return e.trim().length>0}function Ge(e,t){return e.trim().length>0&&t.trim().length>0}function Ke(e){return e.trim().length>0}function qe(e){return e.trim().startsWith(`xoxb-`)}function Je(e){return e.trim().startsWith(`xapp-`)}function T(e){return document.getElementById(e)?.value??``}function E(e){(e===`telegram`?We(T(`tgToken`)):e===`discord`?Ge(T(`dcToken`),T(`dcGuildId`)):Ke(T(`slBotToken`)))||Me(e)}async function Ye(){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 Xe(e){document.getElementById(`tgOn`)?.classList.toggle(`active`,e),document.getElementById(`tgOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{telegram:{enabled:e}}),e&&E(`telegram`)}async function Ze(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 Qe(e){document.getElementById(`tgMentionOn`)?.classList.toggle(`active`,e),document.getElementById(`tgMentionOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{telegram:{mentionOnly:e}})}function $e(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 et(){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 tt(e){document.getElementById(`dcOn`)?.classList.toggle(`active`,e),document.getElementById(`dcOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{discord:{enabled:e}}),e&&E(`discord`)}async function nt(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 rt(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 it(e){document.getElementById(`dcMentionOn`)?.classList.toggle(`active`,e),document.getElementById(`dcMentionOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{discord:{mentionOnly:e}})}function at(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)}var ot=!1;function st(){ot||(ot=!0,document.getElementById(`slack-copy-manifest`)?.addEventListener(`click`,async e=>{let t=e.currentTarget;try{let e=(await n(`/api/slack/manifest`))?.yaml||``;if(!e)throw Error(`empty manifest`);await navigator.clipboard.writeText(e);let r=t.textContent||``;t.textContent=s(`settings.slack.guide.copyManifestDone`),setTimeout(()=>{t.textContent=r},2e3)}catch{t.textContent=s(`settings.slack.guide.copyManifestFail`),setTimeout(()=>{t.textContent=s(`settings.slack.guide.copyManifest`)},2500)}}),document.getElementById(`slack-open-apps`)?.addEventListener(`click`,()=>{window.open(`https://api.slack.com/apps?new_app=1`,`_blank`,`noopener`)}),ct(`slBotToken`,`slack-bot-token-error`,qe),ct(`slAppToken`,`slack-app-token-error`,Je))}function ct(e,t,n){let r=document.getElementById(e),i=document.getElementById(t);if(!r||!i)return;let a=()=>{let e=r.value.trim().length>0&&!n(r.value);i.style.display=e?``:`none`,r.classList.toggle(`input-error`,e)};r.addEventListener(`blur`,a),r.addEventListener(`input`,()=>{i.style.display!==`none`&&a()})}async function lt(){let e=document.getElementById(`slBotToken`)?.value.trim()||``,n=document.getElementById(`slAppToken`)?.value.trim()||``,r=document.getElementById(`slTeamId`)?.value.trim()||``,i=document.getElementById(`slChannelIds`)?.value.trim()||``,a=document.getElementById(`slAttachPort`)?.value.trim()||``;await t(`/api/settings`,`PUT`,{slack:{botToken:e,appToken:n,teamId:r,channelIds:i?i.split(`,`).map(e=>e.trim()).filter(Boolean):[],attachPort:a}})}async function ut(e){document.getElementById(`slOn`)?.classList.toggle(`active`,e),document.getElementById(`slOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{slack:{enabled:e}}),e&&E(`slack`)}async function dt(e){document.getElementById(`slForwardOn`)?.classList.toggle(`active`,e),document.getElementById(`slForwardOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{slack:{forwardAll:e}})}async function ft(e){document.getElementById(`slAllowBotsOn`)?.classList.toggle(`active`,e),document.getElementById(`slAllowBotsOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{slack:{allowBots:e}})}async function pt(e){document.getElementById(`slMentionOn`)?.classList.toggle(`active`,e),document.getElementById(`slMentionOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{slack:{mentionOnly:e}})}async function mt(e){document.getElementById(`slThreadOn`)?.classList.toggle(`active`,e),document.getElementById(`slThreadOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{slack:{replyInThread:e}})}function ht(e){if(!e.slack)return;let t=e.slack;document.getElementById(`slOn`)?.classList.toggle(`active`,!!t.enabled),document.getElementById(`slOff`)?.classList.toggle(`active`,!t.enabled);let n=document.getElementById(`slBotToken`);t.botToken&&n&&(n.value=t.botToken);let r=document.getElementById(`slAppToken`);t.appToken&&r&&(r.value=t.appToken);let i=document.getElementById(`slTeamId`);t.teamId&&i&&(i.value=t.teamId);let a=document.getElementById(`slChannelIds`);t.channelIds?.length&&a&&(a.value=t.channelIds.join(`, `));let o=document.getElementById(`slAttachPort`);o&&(o.value=t.attachPort||``);let s=t.forwardAll!==!1;document.getElementById(`slForwardOn`)?.classList.toggle(`active`,s),document.getElementById(`slForwardOff`)?.classList.toggle(`active`,!s);let c=!!t.allowBots;document.getElementById(`slAllowBotsOn`)?.classList.toggle(`active`,c),document.getElementById(`slAllowBotsOff`)?.classList.toggle(`active`,!c);let l=t.mentionOnly!==!1;document.getElementById(`slMentionOn`)?.classList.toggle(`active`,l),document.getElementById(`slMentionOff`)?.classList.toggle(`active`,!l);let u=t.replyInThread!==!1;document.getElementById(`slThreadOn`)?.classList.toggle(`active`,u),document.getElementById(`slThreadOff`)?.classList.toggle(`active`,!u)}async function gt(e){document.getElementById(`chTelegram`)?.classList.toggle(`active`,e===`telegram`),document.getElementById(`chDiscord`)?.classList.toggle(`active`,e===`discord`),document.getElementById(`chSlack`)?.classList.toggle(`active`,e===`slack`),document.getElementById(`channelTelegramSettings`)?.style.setProperty(`display`,e===`telegram`?``:`none`),document.getElementById(`channelDiscordSettings`)?.style.setProperty(`display`,e===`discord`?``:`none`),document.getElementById(`channelSlackSettings`)?.style.setProperty(`display`,e===`slack`?``:`none`),await t(`/api/settings`,`PUT`,{channel:e}),await pe(),E(e)}function _t(e){let t=e.channel||`telegram`;document.getElementById(`chTelegram`)?.classList.toggle(`active`,t===`telegram`),document.getElementById(`chDiscord`)?.classList.toggle(`active`,t===`discord`),document.getElementById(`chSlack`)?.classList.toggle(`active`,t===`slack`),document.getElementById(`channelTelegramSettings`)?.style.setProperty(`display`,t===`telegram`?``:`none`),document.getElementById(`channelDiscordSettings`)?.style.setProperty(`display`,t===`discord`?``:`none`),document.getElementById(`channelSlackSettings`)?.style.setProperty(`display`,t===`slack`?``:`none`),pe()}function vt(e){let t=document.getElementById(`fallbackOrderList`);if(!t)return;let n=Object.keys(e.perCli||{}),r=e.fallbackOrder||[],i=Math.min(n.length-1,3),o=``;for(let e=0;e<i;e++){let t=r[e]||``,i=n.map(e=>`<option value="${a(e)}" ${e===t?`selected`:``}>${a(u(e)?.label||ae(e))}</option>`).join(``);o+=`
58
+ <div class="settings-row sub-row">
59
+ <label style="min-width:60px">Fallback ${e+1}</label>
60
+ <select id="fallback${e}"
61
+ style="font-size:11px;padding:4px;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:4px;flex:1">
62
+ <option value="">${s(`settings.none`)}</option>
63
+ ${i}
64
+ </select>
65
+ </div>`}t.innerHTML=o}async function yt(){await t(`/api/settings`,`PUT`,{fallbackOrder:[...document.querySelectorAll(`#fallbackOrderList select`)].map(e=>e.value).filter(Boolean)})}function bt(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 xt(e){return Object.values(e).filter(e=>e.command===`npx`||e.command===`uv`||e.command===`uvx`).length}var D=null;async function O(){try{let e=await n(`/api/mcp`);if(!e)return;D=e;let t=document.getElementById(`mcpServerList`);if(!t)return;let r=Object.entries(e.servers||{});if(!r.length){t.textContent=s(`mcp.noServers`),St(0);return}t.innerHTML=r.map(([e,t])=>{let n=bt(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(``),St(xt(e.servers))}catch{}}function St(e){let t=document.getElementById(`installBundleLabel`);t&&(t.textContent=`Install bundle (${e})`);let n=t?.closest(`button`);n&&(n.disabled=e===0)}async function Ct(){let e=document.getElementById(`mcpSyncResult`);if(e){e.style.display=`block`,e.textContent=s(`mcp.syncing`);try{let n=await t(`/api/mcp/sync`,`POST`,{});if(!n){e.innerHTML=`${o.error} sync failed`;return}let r=n.results||{};e.innerHTML=Object.entries(r).map(([e,t])=>`${t?o.check:o.skip} ${a(e)}`).join(` &nbsp; `)}catch(t){e.innerHTML=`${o.error} ${a(t.message)}`}}}async function wt(){let e=document.getElementById(`mcpSyncResult`);if(e){e.style.display=`block`,e.textContent=s(`mcp.installing`);try{let n=await t(`/api/mcp/install`,`POST`,{});if(!n){e.innerHTML=`${o.error} install failed`;return}e.innerHTML=Object.entries(n.results||{}).map(([e,t])=>`${t.status===`installed`?o.check:t.status===`skip`?o.skip:o.error} <b>${a(e)}</b>: ${a(t.status)}${t.bin?` ${o.arrowRight} `+a(t.bin):``}`).join(`<br>`),O()}catch(t){e.innerHTML=`${o.error} ${a(t.message)}`}}}var k=null,A=null,j=null,M=null,N=null,P=null,F=`local`,I=!1,Tt=[];function Et(){if(k)return;k=document.createElement(`div`),k.id=`mcpModal`,k.className=`modal-overlay mcp-modal-overlay`,k.setAttribute(`role`,`presentation`),k.setAttribute(`aria-hidden`,`true`),k.addEventListener(`click`,e=>{e.target===k&&V()});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`,()=>Ft());let i=document.createElement(`button`);i.type=`button`,i.className=`btn-modal-close`,i.setAttribute(`aria-label`,`Close`),i.textContent=`x`,i.addEventListener(`click`,()=>V());let a=document.createElement(`div`);a.style.cssText=`display:flex;align-items:center;gap:6px`,a.append(n,r),t.append(a,i),A=document.createElement(`div`),A.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=L(`Active Servers`,!0),c=L(`Add New`,!1),l=L(`Browse`,!1);Tt=[s,c,l],s.addEventListener(`click`,()=>R(`active`)),c.addEventListener(`click`,()=>R(`add`)),l.addEventListener(`click`,()=>R(`browse`)),o.append(s,c,l),j=document.createElement(`div`),P=document.createElement(`div`),P.style.display=`none`,P.innerHTML=`<p style="opacity:.5">Loading registry...</p>`,M=document.createElement(`div`),M.style.display=`none`,M.innerHTML=Dt(),M.querySelectorAll(`[data-mcp-subtab]`).forEach(e=>{e.addEventListener(`click`,()=>{F=e.dataset.mcpSubtab,Ot()})}),N=M.querySelector(`#mcpAddError`);let u=M.querySelector(`[data-action="mcpAddAndSync"]`);u&&u.addEventListener(`click`,()=>void Pt());let d=M.querySelector(`[data-action="closeMcpModal"]`);d&&d.addEventListener(`click`,()=>V()),A.append(o,j,P,M);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`,()=>V()),f.append(p),e.append(t,A,f),k.append(e),document.body.append(k)}function L(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 Dt(){return`
66
+ <div style="display:flex;gap:4px;margin-bottom:8px">
67
+ <button type="button" class="btn-clear btn-tab is-active" data-mcp-subtab="local">Local</button>
68
+ <button type="button" class="btn-clear btn-tab" data-mcp-subtab="remote">Remote</button>
69
+ </div>
70
+ <div id="mcpAddLocal">
71
+ <div class="settings-row"><label>Name</label><input type="text" id="mcpAddName" placeholder="my-server"></div>
72
+ <div class="settings-row"><label>Command</label><input type="text" id="mcpAddCommand" placeholder="npx"></div>
73
+ <div class="settings-row"><label>Args (comma separated)</label><input type="text" id="mcpAddArgs" placeholder="-y, @upstash/context7-mcp"></div>
74
+ <div class="settings-row"><label>Env (KEY=value per line)</label><textarea id="mcpAddEnv" rows="2" placeholder="API_KEY=xxx"></textarea></div>
75
+ </div>
76
+ <div id="mcpAddRemote" style="display:none">
77
+ <div class="settings-row"><label>Name</label><input type="text" id="mcpAddRemoteName" placeholder="my-api"></div>
78
+ <div class="settings-row"><label>URL</label><input type="text" id="mcpAddUrl" placeholder="https://mcp.example.com/sse"></div>
79
+ <div class="settings-row"><label>Headers (KEY=value per line)</label><textarea id="mcpAddHeaders" rows="2"></textarea></div>
80
+ </div>
81
+ <div id="mcpAddError" class="text-error text-xs py-1" style="display:none"></div>
82
+ <div style="display:flex;gap:8px;margin-top:12px;justify-content:flex-end">
83
+ <button type="button" class="btn-clear" data-action="closeMcpModal">Cancel</button>
84
+ <button type="button" class="btn-clear btn-save" data-action="mcpAddAndSync">Add & Sync</button>
85
+ </div>`}function R(e){j&&(j.style.display=e===`active`?``:`none`),M&&(M.style.display=e===`add`?``:`none`),P&&(P.style.display=e===`browse`?``:`none`),Tt.forEach((t,n)=>{let r=[`active`,`add`,`browse`][n];t.classList.toggle(`is-active`,r===e)}),e===`active`&&kt(),e===`add`&&jt(),e===`browse`&&It()}function Ot(){let e=M?.querySelector(`#mcpAddLocal`),t=M?.querySelector(`#mcpAddRemote`);e&&(e.style.display=F===`local`?``:`none`),t&&(t.style.display=F===`remote`?``:`none`),M?.querySelectorAll(`[data-mcp-subtab]`).forEach(e=>{e.classList.toggle(`is-active`,e.dataset.mcpSubtab===F)})}function kt(){if(!j||!D)return;let e=Object.entries(D.servers||{});if(!e.length){j.innerHTML=`<p style="opacity:.5">No active MCP servers.</p>`;return}j.innerHTML=e.map(([e,t])=>{let n=bt(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">
86
+ <div style="flex:1">
87
+ <div style="display:flex;align-items:center;gap:6px">
88
+ <span class="mcp-active-name">${a(e)}</span>
89
+ ${r}
90
+ </div>
91
+ ${l}
92
+ </div>
93
+ <button type="button" class="btn-clear mcp-active-remove" data-mcp-remove="${a(e)}">Remove</button>
94
+ </div>`}).join(``),j.querySelectorAll(`[data-mcp-remove]`).forEach(e=>{e.addEventListener(`click`,()=>{let t=e.dataset.mcpRemove;t&&At(t)})})}async function At(e){if(!D)return;let n={...D.servers};delete n[e];try{await t(`/api/mcp`,`PUT`,{...D,servers:n}),await t(`/api/mcp/sync`,`POST`,{}),await O(),kt()}catch(e){z(e.message)}}function jt(){for(let e of[`mcpAddName`,`mcpAddCommand`,`mcpAddArgs`,`mcpAddEnv`,`mcpAddRemoteName`,`mcpAddUrl`,`mcpAddHeaders`]){let t=(M??document).querySelector(`#${e}`);t&&(t.value=``)}Mt()}function z(e){N&&(N.style.display=`block`,N.textContent=e)}function Mt(){N&&(N.style.display=`none`)}function Nt(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 B(e){return(M??document).querySelector(`#${e}`)?.value?.trim()??``}async function Pt(){if(!D)return;let e=F===`remote`,n,r;if(e){n=B(`mcpAddRemoteName`);let e=B(`mcpAddUrl`),t=B(`mcpAddHeaders`);if(!n){z(`Name is required.`);return}if(!e){z(`URL is required.`);return}r={url:e};let i=Nt(t);Object.keys(i).length>0&&(r.headers=i)}else{n=B(`mcpAddName`);let e=B(`mcpAddCommand`),t=B(`mcpAddArgs`),i=B(`mcpAddEnv`);if(!n){z(`Name is required.`);return}if(!e){z(`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=Nt(i);Object.keys(o).length>0&&(r.env=o)}if(D.servers[n]){z(`Server "${n}" already exists.`);return}try{await t(`/api/mcp`,`PUT`,{...D,servers:{...D.servers,[n]:r}}),await t(`/api/mcp/sync`,`POST`,{}),await O(),V()}catch(e){z(e.message)}}function Ft(){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=`
95
+ <h4>MCP Server</h4>
96
+ <p>MCP (Model Context Protocol) adds capabilities to AI agents — like installing apps on a phone.</p>
97
+
98
+ <h4>Local Server</h4>
99
+ <p>Runs on your machine. Provide a command and args.</p>
100
+ <pre>Name: context7
101
+ Command: npx
102
+ Args: -y, @upstash/context7-mcp</pre>
103
+
104
+ <h4>Remote Server</h4>
105
+ <p>Connects to an external URL (SSE or Streamable HTTP).</p>
106
+ <pre>Name: my-api
107
+ URL: https://mcp.example.com/sse</pre>
108
+
109
+ <h4>Server Types</h4>
110
+ <p><code>[npx]</code> Node.js package (npx -y ...)<br>
111
+ <code>[uvx]</code> Python package (uvx ...)<br>
112
+ <code>[docker]</code> Docker container<br>
113
+ <code>[remote]</code> External URL</p>
114
+
115
+ <h4>After Adding</h4>
116
+ <p>The server is automatically synced to all installed CLIs (Claude, Codex, Gemini, Cursor, Copilot, OpenCode).</p>
117
+ <p><code>Install bundle</code> converts npx/uvx servers to global binaries for faster startup.</p>
118
+
119
+ <div style="text-align:right;margin-top:12px">
120
+ <button type="button" class="btn-save" id="mcpHelpClose">OK</button>
121
+ </div>
122
+ `,t.append(n),document.body.append(t),n.querySelector(`#mcpHelpClose`)?.addEventListener(`click`,()=>t.remove())}async function It(){if(P){P.innerHTML=`<p style="opacity:.5">Loading registry...</p>`,D||await O();try{let e=await n(`/api/mcp/registry`);if(!e?.entries?.length&&!e?.builtins?.length){P.innerHTML=`<p style="opacity:.5">No MCP servers in registry.</p>`;return}let t=D?Object.keys(D.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)">
123
+ <div style="display:flex;align-items:center;gap:8px">
124
+ <b>${a(e.name)}</b>
125
+ <span style="opacity:.5;font-size:0.85em">[${a(e.type)}]</span>
126
+ <span style="opacity:.4;font-size:0.85em">${a(e.category)}</span>
127
+ ${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>`}
128
+ </div>
129
+ <p style="margin:4px 0 4px 0;font-size:12px;opacity:.75">${a(e.description)}</p>
130
+ <div style="display:flex;gap:4px;align-items:center">
131
+ ${r}
132
+ ${e.url?`<a href="${a(e.url)}" target="_blank" rel="noopener noreferrer" style="font-size:10px;opacity:.5;margin-left:auto">source</a>`:``}
133
+ </div>
134
+ </div>`}).join(``),e.builtins?.length&&(r+=`<div style="margin-top:16px;padding-top:12px;border-top:2px solid var(--border)">
135
+ <h4 style="font-size:12px;opacity:.6;margin:0 0 8px">Harness Built-ins (omo / omx)</h4>
136
+ <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)">
137
+ <div style="display:flex;align-items:center;gap:6px">
138
+ <b style="font-size:12px">${a(e.name)}</b>
139
+ <span style="opacity:.4;font-size:0.8em">${a(e.harness)}</span>
140
+ ${t?`<button type="button" class="btn-clear text-xs" style="color:var(--accent)" data-builtin-install="${a(e.id)}">+ Install standalone</button>`:``}
141
+ </div>
142
+ <p style="margin:2px 0;font-size:11px;opacity:.65">${a(e.description)}</p>
143
+ </div>`}).join(``),r+=`</div>`),P.innerHTML=r,P.querySelectorAll(`[data-registry-install]`).forEach(t=>{t.addEventListener(`click`,()=>{let n=t.dataset.registryInstall,r=e.entries.find(e=>e.id===n);r&&Lt(r,t)})}),P.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&&Lt({id:r.id,name:r.name,description:r.description,category:`harness`,type:`remote`,config:r.standalone_config,tags:[],url:r.source},t)})})}catch(e){P.innerHTML=`<p style="color:var(--color-error)">${a(e.message)}</p>`}}}async function Lt(e,n){if(D){n.disabled=!0,n.textContent=`Installing...`;try{let r=e.config;await t(`/api/mcp`,`PUT`,{...D,servers:{...D.servers,[e.id]:r}}),await t(`/api/mcp/sync`,`POST`,{}),await O(),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 Rt(){Et(),k?.classList.add(`open`),k?.setAttribute(`aria-hidden`,`false`),I=!0,R(`active`)}function V(){I&&(k?.classList.remove(`open`),k?.setAttribute(`aria-hidden`,`true`),I=!1,jt(),document.getElementById(`mcpHelpOverlay`)?.remove())}var zt=!1;function Bt(){zt||(zt=!0,document.addEventListener(`keydown`,e=>{if(document.getElementById(`mcpHelpOverlay`)&&e.key===`Escape`){e.preventDefault(),document.getElementById(`mcpHelpOverlay`)?.remove();return}I&&e.key===`Escape`&&(e.preventDefault(),e.stopImmediatePropagation(),V())},!0))}var Vt=/^\/(?:Users|home)\/[^/]+/,Ht=32;function Ut(e){return e.replace(Vt,`~`)}function Wt(e){if(e.length<=Ht)return e;let t=e.split(`/`);return t.length<=3?e:`${t.slice(0,2).join(`/`)}/…/${t[t.length-1]}`}function Gt(e){let t=(e||[]).filter(e=>typeof e==`string`&&e.trim());return t.length===0?null:{text:`${Wt(Ut(t[0]))}${t.length>1?` +${t.length-1}`:``}`,title:t.join(`
144
+ `)}}function Kt(){return document.getElementById(`headerGitStatus`)}function qt(){let e=Kt();e&&(e.hidden=!0,e.textContent=``,e.removeAttribute(`title`),e.removeAttribute(`aria-label`))}function Jt(e){if(!e?.available)return null;let t=e.branch||e.head;if(!t)return null;let n=[`/`,`⑂ ${t}`];e.trackedChangedCount>0&&n.push(`*${e.trackedChangedCount}`),e.untrackedCount>0&&n.push(`?${e.untrackedCount}`);let r=[`Git: ${e.branch?`branch ${e.branch}`:`detached ${e.head}`}`];return e.trackedChangedCount>0&&r.push(`${e.trackedChangedCount} tracked changes`),e.untrackedCount>0&&r.push(`${e.untrackedCount} untracked files`),{text:n.join(` `),title:r.join(`, `)}}function Yt(e){let t=Kt();if(!t)return;let n=Jt(e);if(!n){qt();return}t.hidden=!1,t.textContent=n.text,t.title=n.title,t.setAttribute(`aria-label`,n.title)}async function Xt(){Yt(await n(`/api/project/git-summary`))}function Zt(e){(Array.isArray(e.changedKeys)?e.changedKeys:[]).includes(`projectDirs`)&&Xt()}var H=null;function Qt(e){return!e||typeof e!=`object`?null:`settings`in e&&e.settings?e.settings:`data`in e&&e.data?e.data:e}async function $t(t){if(t.runtimeDefaultMigration?.state!==`pending`)return t;let n=window.confirm(`신규 설치의 기본 런타임이 Codex App으로 변경되었습니다. 지금 Codex App을 사용하시겠습니까?`)?`accept`:`keep`;try{let r=await e(),a=await fetch(`${i}/api/settings/runtime-default-migration`,{method:`POST`,headers:{"Content-Type":`application/json`,...r?{Authorization:`Bearer ${r}`}:{}},body:JSON.stringify({action:n})}),o=await a.json().catch(()=>null);if(ce(a.status))return Qt(o)??t;window.alert(`런타임 선택을 저장하지 못했습니다 (${a.status}). 다음 설정 진입 때 다시 안내합니다.`)}catch{window.alert(`런타임 선택을 저장하지 못했습니다. 다음 설정 진입 때 다시 안내합니다.`)}return t}async function en(t){if(t.multiSessionDefaultMigration?.state!==`pending`)return t;let n=window.confirm(`이제 대화 세션을 여러 개 열 수 있습니다. 켜면 동시 실행도 2로 올라가서, 두 번째 세션이 첫 번째가 끝나기를 기다리지 않습니다. 지금 켤까요?`)?`accept`:`keep`;try{let r=await e(),a=await fetch(`${i}/api/settings/multi-session-default-migration`,{method:`POST`,headers:{"Content-Type":`application/json`,...r?{Authorization:`Bearer ${r}`}:{}},body:JSON.stringify({action:n})}),o=await a.json().catch(()=>null);if(ce(a.status))return Qt(o)??t;window.alert(`세션 선택을 저장하지 못했습니다 (${a.status}). 다음 설정 진입 때 다시 안내합니다.`)}catch{window.alert(`세션 선택을 저장하지 못했습니다. 다음 설정 진입 때 다시 안내합니다.`)}return t}function U(e){let t=document.getElementById(`headerCli`);if(!t)return;let n=ie(e),r=G(e);t.innerHTML=n?`${n} ${a(r)}`:a(r)}function W(e){let t=document.getElementById(`headerProject`);if(!t)return;tn(t),t.hidden=!1;let n=Gt(e);if(!n){t.classList.add(`is-empty`),t.textContent=`Project: not set`,t.title=`Click to choose the project root folder`;return}t.classList.remove(`is-empty`),t.textContent=`Project ${n.text}`,t.title=`${n.title}\n(click to change)`}function tn(e){if(e.dataset.pickerBound)return;e.dataset.pickerBound=`1`,e.setAttribute(`role`,`button`),e.setAttribute(`tabindex`,`0`);let n=async()=>{if(e.classList.contains(`is-picking`))return;e.classList.add(`is-picking`);let n=e.textContent;e.textContent=`Choosing folder…`;try{let n=await t(`/api/project/pick`,`POST`,{});if(n&&!n.cancelled&&`projectDirs`in n){e.classList.remove(`is-picking`),W(n.projectDirs);return}}catch{}e.classList.remove(`is-picking`),e.textContent=n};e.addEventListener(`click`,()=>{n()}),e.addEventListener(`keydown`,e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n())})}function nn(e){typeof e.cli==`string`&&e.cli&&U(e.cli),`projectDirs`in e&&W(e.projectDirs),Zt(e)}function G(e){return u(e)?.label||ae(e)||e}function rn(e){let t=e.finally(()=>{H===t&&(H=null)});return H=t,t}async function an(){let e=H;e&&await e}function K(e){return e.split(/[^a-zA-Z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function q(e){return document.getElementById(`model`+K(e))}function on(e){return document.getElementById(`customModel`+K(e))}function sn(e){return document.getElementById(`effort`+K(e))}function J(e,t,{includeCustom:n=!1,includeDefault:r=!1,selected:i=``}={}){if(!e)return;let o=r?`<option value="default">default</option>`:``,c=n?`<option value="__custom__">${s(`model.customOption`)}</option>`:``;e.innerHTML=o+(t||[]).map(e=>`<option value="${a(e)}">${a(e)}</option>`).join(``)+c,i&&Array.from(e.options).some(e=>e.value===i)&&(e.value=i)}function Y(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 cn(e=null){let t=d(),n=document.getElementById(`selCli`);if(n){let r=e?.cli||n.value||t[0]||`claude`,i=e=>f.includes(e),o=!i(r)&&t.includes(r),c=n.dataset.expanded===`1`,l=t.filter(i),d=t.filter(e=>!i(e)),p=l.length===0||o||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__">${s(`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(G(e))}</option>`).join(``),Array.from(r.options).some(e=>e.value===n)&&(r.value=n)}}function X(e,t){return(t||``).trim()}function ln(e,t,n,r){let i=(t||``).trim();if(r){let t=e?.effortsByModelByProvider?.[r]?.[i];if(t)return t}return e?.effortsByModel?.[i]||n||e?.efforts||[]}function un(e,t,n){let r=(t||``).trim();return(n?e?.defaultEffortByModelByProvider?.[n]?.[r]:void 0)??e?.defaultEffortByModel?.[r]??``}function dn(e=null){for(let t of d()){let n=u(t),r=t!==`pi`&&n?.providers?.length?Q(t):``,i=q(t);if(i)if(n?.modelNote)i.innerHTML=`<option value="">${a(n.modelNote)}</option>`,i.title=n.modelNote,i.disabled=!0;else{let a=X(t,e?.perCli?.[t]?.model||i.value||``),o=t===`pi`&&e?.perCli?.pi?.provider||``,s=t===`pi`&&o?ee(e?.pi,o):[];J(i,t===`pi`&&s.length?s:r?n?.modelsByProvider?.[r]||m[t]||[]:m[t]||[],{includeCustom:!0,selected:a}),a&&!Array.from(i.options).some(e=>e.value===a)&&(Y(i,a),i.value=a),i.disabled=!1}let o=sn(t);if(o){let i=r?n?.effortsByProvider?.[r]||[]:null,s=X(t,e?.perCli?.[t]?.model||q(t)?.value||``),c=ln(n,s,i,r||void 0),l=[``].concat(c),u=e?.perCli?.[t]?.effort??o.value??``,d=!u||c.includes(u)?u:un(n,s,r||void 0),f=[...new Set(l)],p=f.length===1&&!f[0]&&n?.effortNote?n.effortNote:`— none`;o.innerHTML=f.map(e=>e?`<option value="${a(e)}">${a(e)}</option>`:`<option value="">${a(p)}</option>`).join(``),n?.effortNote&&(o.title=n.effortNote),o.disabled=f.length===1&&!f[0],Array.from(o.options).some(e=>e.value===d)&&(o.value=d)}}}function fn(){return document.getElementById(`selEffort`)?.value||``}function Z(e,t=``,n){let r=document.getElementById(`selEffort`);if(!r)return;let i=u(e),o=e!==`pi`&&i?.providers?.length?Q(e):``,s=o?i?.effortsByProvider?.[o]||[]:null,c=X(e,n??document.getElementById(`selModel`)?.value??``),l=ln(i,c,s,o||void 0);if(l.length===0){let e=i?.effortNote||`— none`;r.innerHTML=`<option value="">${a(e)}</option>`,r.title=e,r.disabled=!0;return}let d=[``].concat(l);r.innerHTML=[...new Set(d)].map(e=>e?`<option value="${a(e)}">${a(e)}</option>`:`<option value="">— none</option>`).join(``),r.disabled=!1,r.title=i?.effortNote||``;let f=!t||l.includes(t)?t:un(i,c,o||void 0);Array.from(r.options).some(e=>e.value===f)&&(r.value=f)}function pn(e,t,n){return e?(e.innerHTML=n.map(e=>`<option value="${a(e)}">${a(ae(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 Q(e){let t=document.getElementById(`selCliProvider`),n=document.getElementById(`provider${e.charAt(0).toUpperCase()+e.slice(1).replace(/-./g,e=>e[1].toUpperCase())}`),r=u(e);return t?.value||n?.value||r?.defaultProvider||``}function mn(e,t){let n=document.getElementById(`cliProviderWrap`),r=document.getElementById(`selCliProvider`),i=document.getElementById(`cliProviderLabel`),a=u(t);if(!(t!==`pi`&&(a?.providers?.length??0)>0))return n&&(n.style.display=`none`),a?.defaultProvider||``;i&&(i.textContent=`Provider`);let o=pn(r,e?.perCli?.[t]?.provider||r?.value||a?.defaultProvider||``,a.providers);return n&&(n.style.display=``),o}async function hn(){await p();let e=await n(`/api/settings`);if(!e)return;e=await $t(e),e=await en(e),l(e.locale??``),cn(e),te(e.pi),re(e.pi,e.perCli?.pi?.provider),e.perCli?.pi?.provider&&ne(e.perCli.pi.provider,e.pi),mn(e,e.cli||``),dn(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=ie(e.cli),n=G(e.cli);i.innerHTML=t?`${t} ${a(n)}`:a(n)}if(W(e.projectDirs),await Xt(),_n(e.permissions,!1),e.perCli)for(let[t,n]of Object.entries(e.perCli)){let e=q(t),r=sn(t);if(e&&n.model){let r=X(t,n.model);Y(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)}}Cn(!1);let o=e.activeOverrides?.[e.cli]||{},s=e.perCli?.[e.cli]||{},c=o.model||s.model,u=o.effort??s.effort??``,d=document.getElementById(`selModel`);if(c&&d){let t=X(e.cli,c);t&&!Array.from(d.options).some(e=>e.value===t)&&Y(d,t),d.value=t}Z(e.cli,u),$e(e),at(e),ht(e),_t(e),vt(e),O(),le(e.stt||{})}async function gn(){let e=document.getElementById(`selCli`)?.value||`claude`,n={cli:e},r=u(e);return e!==`pi`&&r?.providers?.length&&(n.perCli={[e]:{provider:Q(e)}}),rn((async()=>{let r=await t(`/api/settings`,`PUT`,n);if(!r){await hn();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),U(i),c([`instances`],`active-cli-changed`)})())}function _n(e,t=!0){t&&r(`/api/settings`,`PUT`,{permissions:`auto`})}function vn(e){let t=q(e);return t?t.value===`__custom__`?on(e)?.value?.trim()||t.options[0]?.value||`default`:t.value:`default`}function yn(e,t){let n=on(e);n&&(t.value===`__custom__`?(n.style.display=`block`,n.focus()):(n.style.display=`none`,e===`claude`&&bn(t.value),$()))}function bn(e){let t=!!(e&&e.endsWith(`[1m]`));document.getElementById(`claude1mOn`)?.classList.toggle(`active`,t),document.getElementById(`claude1mOff`)?.classList.toggle(`active`,!t)}function xn(e,t){let n=t.value.trim();if(!n)return;let r=q(e);r&&(Y(r,n),r.value=n,t.style.display=`none`,e===`claude`&&bn(n),$())}function Sn(){let e=document.getElementById(`selCli`)?.value||``,t=Q(e),n=document.getElementById(`selCliProvider`);n&&Array.from(n.options).some(e=>e.value===t)&&(n.value=t),dn(null),u(e)?.providers?.length&&Cn(!1),$()}async function $(){let e={};for(let t of d()){if(!q(t))continue;let n=sn(t),r={model:vn(t),effort:n?n.value:``},i=u(t);if(t!==`pi`&&i?.providers?.length&&(r.provider=Q(t)),t===`pi`){let e=document.getElementById(`providerPi`);e?.value&&(r.provider=e.value)}if(t===`codex`){r.fastMode=document.getElementById(`codexFastOn`)?.classList.contains(`active`)??!1,r.contextWindow=document.getElementById(`codexCtxOn`)?.classList.contains(`active`)??!1;let e=document.getElementById(`codexCtxWindow`),t=document.getElementById(`codexCtxCompact`);r.contextWindowSize=parseInt(e?.value||`1000000`,10),r.contextCompactLimit=parseInt(t?.value||`900000`,10)}e[t]=r}await t(`/api/settings`,`PUT`,{perCli:e})}function Cn(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`,cn(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`,i=mn(null,r),o=u(r),c=i&&o?.modelsByProvider?.[i]?o.modelsByProvider[i]:m[r]||[],l=document.getElementById(`selModel`);o?.modelNote&&l?(l.innerHTML=`<option value="">${a(o.modelNote)}</option>`,l.title=o.modelNote,l.disabled=!0):(J(l,c,{includeCustom:!0,includeDefault:!0}),l&&(l.disabled=!1,l.title=``)),U(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=s(`model.placeholder`),p.style.display=`none`,p.onchange=function(){let e=this.value.trim();!e||!l||(Y(l,e),l.value=e,this.style.display=`none`,Z(r,fn(),e),wn())},!l){e&&gn();return}l.parentElement?.appendChild(p),l.onchange=function(){this.value===`__custom__`?(p.style.display=`block`,p.focus()):(p.style.display=`none`,Z(r,fn(),this.value),wn())},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){let t=u(r);if(r!==`pi`&&t?.providers?.length&&(e.perCli?.[r]?.provider||t.defaultProvider||``)!==Q(r)){Z(r,a);return}let n=X(r,i);Y(l,n),l.value=n}Z(r,a)}),e&&gn()}async function wn(){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},o=u(e);e!==`pi`&&o?.providers?.length&&(a.perCli={[e]:{provider:Q(e)}}),await t(`/api/settings`,`PUT`,a)&&c([`instances`],`active-cli-changed`)}function Tn(){let e=m[document.getElementById(`flushCli`)?.value||document.getElementById(`selCli`)?.value||`claude`]||[];J(document.getElementById(`flushModel`),e,{includeDefault:!0}),On(),Dn()}async function En(){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),J(r,m[e.cli||document.getElementById(`selCli`)?.value||`claude`]||[],{includeDefault:!0}),r&&e.model&&(Y(r,e.model),r.value=e.model),On()}async function Dn(){await t(`/api/memory-files/settings`,`PUT`,{cli:document.getElementById(`flushCli`)?.value||``,model:document.getElementById(`flushModel`)?.value||``})}function On(){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?G(r):`${G(r)}*`),n&&n!==`default`&&i.push(n),e.textContent=i.length?`(${i.join(` / `)})`:``}export{et as A,le as B,st as C,dt as D,ft as E,Ye as F,oe as H,Ze as I,Xe as L,rt as M,nt as N,pt as O,it as P,Qe as R,gt as S,ut as T,se as V,O as _,hn as a,vt as b,Sn as c,$ as d,_n as f,wt as g,Bt as h,En as i,tt as j,mt as k,nn as l,an as m,vn as n,Cn as o,gn as p,yn as r,Tn as s,xn as t,wn as u,Rt as v,lt as w,yt as x,Ct as y,je 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-DxpgDKMO.js";import{i as t,t as n}from"./api-tVoG39dL.js";import{t as r}from"./preload-helper-DFYRRz9w.js";import{D as i,F as a,M as o,O as s,R as c,d as ee,n as te}from"./render-BkGcpH7z.js";import{_ as ne,g as re,p as ie}from"./iframe-renderer-B8k3AvTv.js";import{_ as ae,d as oe,u as l,v as u}from"./message-history-Bw2E_b8L.js";import{a as d,d as se,i as ce,l as f,n as le,r as ue,s as de,t as fe,u as pe}from"./ui-Bx7eqnXt.js";var p=null,m=0,h=[],g=2e3,me=3e4,he=1.5,_=null,ge=4e4,_e=1e4,ve=0,ye=!1,be=null,xe=null;function Se(e){xe=e}function Ce(){let e=null;try{e=xe?.()??null}catch{e=null}return e?`&scope=${encodeURIComponent(e)}`:``}function we(){be||=setInterval(()=>{!p||!v||!ye||Date.now()-ve<=ge||(console.warn(`[sse] stalled channel (no ping in`,ge,`ms) — forcing reconnect`),p.close(),p=null,v=!1,x?.(),C(Te))},_e)}var Te=``,v=!1,Ee=!1,De=!1,y=!1,b=!1,Oe=null,x=null,S=null;function ke(e){Oe=e}function Ae(e){x=e}function je(e){S=e}function Me(e,t,n){let r={topic:e,event:t,handler:n};return h.push(r),()=>{let e=h.indexOf(r);e>=0&&h.splice(e,1)}}function Ne(e,t,n){for(let r of h)if((r.topic===`*`||r.topic===e)&&(r.event===null||r.event===t))try{r.handler(n)}catch(e){console.warn(`[sse] handler error:`,e.message)}}function Pe(){Ee||_||(_=setTimeout(()=>{_=null,C(Te)},g),g=Math.min(g*he,me))}function C(e){Te=e,Ee=!1,_&&=(clearTimeout(_),null),p&&p.close();let t=`${n}/api/events?lang=${encodeURIComponent(e)}`+Ce()+(m?`&lastEventId=${m}`:``);y=!1,b=!1,p=new EventSource(t),we(),p.onopen=()=>{g=2e3,v=!0,De=!0,y=!0,ve=Date.now(),Oe?.()},p.onerror=()=>{if(p?.close(),p=null,!y&&!De&&S){b||(b=!0,S());return}v&&(v=!1,x?.()),Pe()},p.onmessage=e=>{m=parseInt(e.lastEventId||`0`,10)||m;let t;try{t=JSON.parse(e.data)}catch{console.warn(`[sse] malformed message:`,e.data);return}if(!t||typeof t!=`object`||typeof t.topic!=`string`||typeof t.event!=`string`){console.warn(`[sse] invalid message shape:`,t);return}if(ve=Date.now(),t.topic===`system`&&t.event===`ping`){ye=!0;return}Ne(t.topic,t.event,t)}}var Fe=3e3,w=new Map,T=[],E=(e,t)=>`${e}:${t}`;function D(e=[]){let t=document.getElementById(`pendingQueue`);if(t){if(T=e.slice(),!e.length){Be(new Set),t.classList.remove(`visible`),t.innerHTML=``;return}t.classList.add(`visible`),t.innerHTML=`
3
+ <div class="pending-queue-header">
4
+ <span class="pending-queue-title">${s.hourglass} <span data-i18n="queue.pendingTitle">${o(c(`queue.pendingTitle`))}</span> <span class="pending-queue-count">${e.length}</span></span>
5
+ </div>
6
+ <div class="pending-queue-list">
7
+ ${e.map(Ie).join(``)}
8
+ </div>
9
+ `,Be(new Set(e.map(e=>e.id))),ze()}}function Ie(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">${o(e.source)}</span>`:``,i=o(c(`queue.copy`)),a=o(c(`queue.steer`)),ee=o(c(`queue.delete`));return`<div class="pending-row" data-pending-id="${o(e.id)}" title="${o(t)}">
10
+ <span class="pending-row-text">${o(n)}</span>
11
+ ${r}
12
+ <button class="pending-row-btn pending-row-copy" data-pending-action="copy" title="${i}" aria-label="${i}"><span class="pending-btn-content">${s.copy}</span></button>
13
+ <button class="pending-row-btn pending-row-steer" data-pending-action="steer" data-i18n-title="queue.steer" title="${a}" aria-label="${a}"><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">${a}</span></span></button>
14
+ <button class="pending-row-btn pending-row-delete" data-pending-action="delete" data-i18n-title="queue.delete" title="${ee}" aria-label="${ee}"><span class="pending-arm-fill" aria-hidden="true"></span><span class="pending-btn-content">${s.trash}</span></button>
15
+ </div>`}function O(e,t){let n=document.querySelector(`.pending-row[data-pending-id="${CSS.escape(e)}"]`);return n?n.querySelector(`[data-pending-action="${t}"]`):null}function Le(e,t){let n=O(e,t);if(!n)return;n.classList.add(`armed`),n.setAttribute(`title`,c(`queue.cancelArm`));let r=n.querySelector(`.pending-arm-fill`);r&&(r.style.animation=`none`,r.offsetWidth,r.style.animation=``)}function Re(e,t){let n=O(e,t);n&&(n.classList.remove(`armed`),n.setAttribute(`title`,c(t===`steer`?`queue.steer`:`queue.delete`)))}function ze(){for(let e of w.values()){let t=O(e.id,e.action);t&&(t.classList.add(`armed`),t.setAttribute(`title`,c(`queue.cancelArm`)))}}function Be(e){for(let[t,n]of w)e.has(n.id)||(clearTimeout(n.timerId),w.delete(t))}function Ve(e,n){let r=E(e,n),i=setTimeout(()=>Ue(e,n),Fe);w.set(r,{id:e,action:n,timerId:i}),Le(e,n),n===`steer`&&t(`/api/orchestrate/queue/${encodeURIComponent(e)}/hold`,`POST`,{}).catch(()=>{})}function He(e,n){let r=E(e,n),i=w.get(r);i&&(clearTimeout(i.timerId),w.delete(r),Re(e,n),n===`steer`&&t(`/api/orchestrate/queue/${encodeURIComponent(e)}/hold`,`DELETE`,{}).catch(()=>{}))}async function Ue(e,n){w.delete(E(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`&&l(`running`),await t(r,i,{})==null){T=T.filter(t=>t.id!==e),D(T),n===`steer`&&U(`steer-fire-miss`).catch(()=>{});return}T=T.filter(t=>t.id!==e),D(T)}function We(e,t){if(w.has(E(e,t))){He(e,t);return}Ve(e,t)}function Ge(){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=T.find(e=>e.id===n);if(e?.prompt&&(await i(e.prompt)).ok){let e=t.querySelector(`.pending-btn-content`);e&&(e.innerHTML=s.checkSimple,setTimeout(()=>{e.innerHTML=s.copy},600))}return}We(n,r===`steer`?`steer`:`delete`)})}var Ke=800,k=64,qe=`CLI-JAW`,A=!1,j=0,M=qe,N=null,Je=``,Ye=!1,Xe=0;function Ze(){return navigator}function Qe(){return document.visibilityState!==`visible`||!document.hasFocus()}function $e(e){return e-Xe<Ke}function et(){if(N)return N;let e=document.querySelector(`link[rel~="icon"]`);if(e)return N=e,Je=e.href||e.getAttribute(`href`)||``,e;let t=document.createElement(`link`);return t.rel=`icon`,document.head.appendChild(t),N=t,Ye=!0,t}function tt(e){let t=document.createElement(`canvas`);t.width=k,t.height=k;let n=t.getContext(`2d`);return n?(n.clearRect(0,0,k,k),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`)):Je}async function nt(e){let t=Ze();if(typeof t.setAppBadge==`function`)try{await t.setAppBadge(e)}catch{}}async function rt(){let e=Ze();if(typeof e.clearAppBadge==`function`)try{await e.clearAppBadge()}catch{}}function it(){document.title=`(${j}) ${M}`;let e=et();e&&(e.href=tt(j)),nt(j)}function at(){document.title=M}function ot(){if(N){if(Ye){N.remove(),N=null,Ye=!1;return}N.href=Je}}function st(){A||(A=!0,M=document.title||qe,et(),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`&&lt()}),window.addEventListener(`focus`,()=>lt()))}function ct(){if(!A||!Qe())return;let e=Date.now();$e(e)||(Xe=e,j+=1,it())}function lt(){!A||j===0||(j=0,Xe=0,at(),ot(),rt())}function ut(e,t){return!e||!t?!0:e===`all`||e===t}var P=[`I`,`P`,`A`,`B`,`C`],F=null;function dt(e,t,n){let r=P.indexOf(n);if(r<0)return;let i=e.getBoundingClientRect(),a=t.offsetWidth||36,o=document.getElementById(`dot-${n}`);if(!o)return;let s=P[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.transform=`translateX(${r-i.left-a/2}px)`}else{let e=o.getBoundingClientRect();t.style.transform=`translateX(${e.left-i.left+e.width/2-a/2}px)`}}var I={},ft=8,pt=64,L=null,R=0,z=[],B=new Map;function mt(e){return e!==null&&z.includes(e)}function ht(e){let t=Number(e);return Number.isFinite(t)&&t>0?Math.floor(t):null}function gt(e,t){if(!(!e||t==null))for(t>(B.get(e)||0)&&B.set(e,t);B.size>pt;){let e=null;for(let t of B.keys())if(t!==L){e=t;break}if(!e)break;B.delete(e)}}function _t(e){let t=new Map;for(let n of e?.toolLog||[]){let e=typeof n?.traceRunId==`string`&&n.traceRunId?n.traceRunId:null,r=ht(n?.traceSeq);!e||r==null||r>(t.get(e)||0)&&t.set(e,r)}return t}function vt(e,t,n){return!n||!e||t==null?!1:t<=(B.get(e)||0)}function yt(e){let t=e??L;L=null,R=0,t&&!z.includes(t)&&(z.push(t),z.length>ft&&z.shift())}function bt(e){!e||e===L||(L=e,R=0)}function xt(e){if(e?.running){typeof e.traceRunId==`string`&&e.traceRunId&&(L=e.traceRunId),R=typeof e.textLen==`number`?e.textLen:(e.text||``).length;for(let[t,n]of _t(e))gt(t,n)}}var St=``,V=0,H=null,Ct=0,wt=!1,Tt=0,Et=750,Dt=750;async function Ot(e={}){let t=await(await fetch(`${n}/api/orchestrate/snapshot`)).json();St=String(t.orc.scope||``),Ht(t.orc.state),Ft(t.orc.ctx||null),Pt(t.heartbeat||{pending:0,deferredPending:0}),Nt(t.workers),oe(t.runtime.queuePending),le(t.queued||[]),D(t.queued||[]),e.hydrateRun&&(de(t.activeRun),xt(t.activeRun)),Bt(),t.runtime.busy?l(`running`):f()||l(`idle`),r(()=>import(`./employees-BJyEgim7.js`).then(e=>{typeof e.renderEmployees==`function`&&e.renderEmployees()}),__vite__mapDeps([0]))}function U(e=`manual`,t={}){let n=Date.now();return t.hydrateRun?Ot(t):H||(n-Ct<Et?Promise.resolve():(Ct=n,H=Ot(t).catch(t=>{throw console.warn(`[ws] orchestrate snapshot sync failed (${e})`,t),t}).finally(()=>{H=null}),H))}function kt(e){return e===`iframe-visible`||e===`pageshow`||e===`discard`||e===`visibilitychange`}function At(e){re(e),r(()=>import(`./ui-JOcrYeG-.js`).then(async t=>{if(kt(e)&&V>0)try{await t.loadMessages(),V=Date.now()}catch(t){console.warn(`[ws] restore loadMessages failed (${e})`,t)}await U(e,{hydrateRun:!0})}),__vite__mapDeps([0])).catch(()=>{}).finally(()=>{ie(e)})}function W(e){let t=Date.now();!kt(e)&&t-Tt<Dt||(Tt=t,At(e))}function jt(e){let t=Array.isArray(e.changedKeys)?e.changedKeys:[];if(t.includes(`multiSession`)){window.location.reload();return}t.includes(`workingDir`)||t.includes(`projectDirs`)?r(()=>import(`./ui-JOcrYeG-.js`).then(async e=>{try{await e.loadMessages(),V=Date.now()}catch(e){console.warn(`[ws] settings scope loadMessages failed`,e)}await U(`settings_change`).catch(()=>{}).finally(()=>e.reconcileChatBottomAfterRestore(`settings_change`))}),__vite__mapDeps([0])):U(`settings_change`).catch(()=>{}),r(()=>import(`./settings-core-B_OjGYVN.js`).then(t=>t.refreshHeaderFromSettingsChange(e)),__vite__mapDeps([0])).catch(()=>{})}function Mt(){wt||(wt=!0,window.addEventListener(`focus`,()=>{W(`focus`)}),window.addEventListener(`pageshow`,e=>{e.persisted&&W(`pageshow`)}),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`&&W(`visibilitychange`)}),document.addEventListener(`resume`,()=>{W(`resume`)}),`wasDiscarded`in document&&document.wasDiscarded&&W(`discard`),window.addEventListener(`message`,e=>{e.data?.type===`jaw-preview-visibility`&&e.data.visible&&W(`iframe-visible`)}))}function Nt(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 Pt(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 Ft(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),Rt(t?.interview||null))}var G=(()=>{try{return localStorage.getItem(`jaw:interviewCollapsed`)===`1`}catch{return!1}})();function It(e){G=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 Lt(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 Rt(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`,G);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">· ${o(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} ${o(t.fact)}${i}</li>`}).join(``),i=e.unknown.map(e=>`<li class="iv-unknown">❓ ${o(typeof e==`string`?e:JSON.stringify(e))}</li>`).join(``);t.innerHTML=`
31
+ <button type="button" class="iv-toggle" aria-expanded="${!G}" 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">${Lt(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`)&&It(!G)}))}function zt(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 Bt(){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,Vt()}catch{}}function Vt(){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 Ht(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(()=>{F&&o.classList.contains(`running`)&&dt(a,o,F)}).observe(a);let e=0;window.addEventListener(`resize`,()=>{cancelAnimationFrame(e),e=requestAnimationFrame(()=>{F&&o.classList.contains(`running`)&&dt(a,o,F)})})}if(r===`IDLE`)a.classList.remove(`visible`,`shimmer-out`),o.classList.remove(`running`),F=null;else if(r===`D`){P.forEach(e=>{let t=document.getElementById(`dot-${e}`);t&&(t.className=`pabc-dot done`,t.setAttribute(`data-phase`,e))});for(let e=0;e<P.length;e++){let t=document.getElementById(`pabc-conn-${e}`);t&&(t.className=`pabc-connector done`)}o.classList.remove(`running`),F=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=P.indexOf(r);P.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<P.length;t++){let n=document.getElementById(`pabc-conn-${t}`);n&&(n.className=`pabc-connector ${t<e?`done`:``}`)}F=r,requestAnimationFrame(()=>dt(a,o,r))}s&&n&&(s.textContent=n)}}var Ut=!1,Wt=Promise.resolve(),Gt=0;function K(){Mt(),Ut||(Ut=!0,tn()),$t(),C(a())}var Kt=K;function qt(e){console.log(`[${e}] connected`),X=2e3,Xt();let t=Date.now()-V<1e4;Wt=r(()=>import(`./ui-JOcrYeG-.js`).then(async n=>{if(n.cleanupToolActivity(),!t)try{await n.loadMessages(),V=Date.now()}catch(t){console.error(`[${e}] loadMessages failed`,t)}await U(`reconnect`,{hydrateRun:!0}).catch(()=>{}).finally(()=>n.reconcileChatBottomAfterRestore(`reconnect`)),r(()=>import(`./memory-amsvg4Ey.js`).then(e=>e.refreshMemorySidebar()),__vite__mapDeps([0])).catch(()=>{}),r(()=>import(`./bgtask-badge-C6h5C-o4.js`).then(e=>e.refreshBgtaskBadge()),__vite__mapDeps([0])).catch(()=>{})}),void 0)}function Jt(){re(`replay_gap`),Wt=r(()=>import(`./ui-JOcrYeG-.js`).then(async e=>{try{await e.loadMessages(),V=Date.now()}catch(e){console.error(`[sse] replay gap loadMessages failed`,e)}await U(`replay_gap`,{hydrateRun:!0}).catch(()=>{}).finally(()=>e.reconcileChatBottomAfterRestore(`replay_gap`))}),__vite__mapDeps([0]))}var Yt=8e3,q=null;function Xt(){q!==null&&(window.clearTimeout(q),q=null)}function Zt(){console.log(`[channel] disconnected`),r(()=>import(`./ui-JOcrYeG-.js`).then(e=>e.cleanupToolActivity()),__vite__mapDeps([0])),q===null&&(q=window.setTimeout(()=>{q=null,l(`idle`),u(`${s.exec} ${c(`ws.disconnected`)}`,`tool-activity`)},Yt))}var J=null,Y=!1,X=2e3,Qt=3e4;function $t(){if(J){Y=!0;try{J.close()}catch{}J=null}}function en(){if(J)return;console.warn(`[channel] /api/events unavailable — falling back to legacy WebSocket`);let e=`ws://${location.host}`,t=new WebSocket(`${e}${n}/?lang=${a()}`);J=t,Y=!1,t.onmessage=e=>{let t;try{t=JSON.parse(e.data)}catch{console.warn(`[ws] malformed message:`,e.data);return}if(!t||typeof t!=`object`||typeof t.type!=`string`){console.warn(`[ws] invalid message shape:`,t);return}nn(t)};let r=!1;t.onopen=()=>{r=!0,X=2e3,qt(`ws`)},t.onclose=()=>{if(J===t&&(J=null),Y){Y=!1;return}if(r){Zt(),setTimeout(K,2e3);return}X=Math.min(X*2,Qt),setTimeout(K,X)}}function tn(){Me(`widget`,`widget_updated`,e=>{let t=e.chatId,n=e.widgetId;typeof t!=`string`||typeof n!=`string`||r(()=>import(`./iframe-renderer-BO_GgCTR.js`).then(e=>e.refreshFileWidget(t,n)),__vite__mapDeps([0])).catch(e=>console.warn(`[widget] refresh failed:`,e.message))}),Me(`*`,null,e=>{nn({...e,type:e.event})}),ke(()=>qt(`sse`)),Ae(()=>Zt()),je(()=>en())}function nn(t){if(t.type===`agent_tool`){if(f())return;let e=typeof t.traceRunId==`string`&&t.traceRunId?t.traceRunId:null,n=ht(t.traceSeq);if(mt(e)||vt(e,n,t.sseReplay===!0))return;t.isEmployee!==!0&&bt(e);let r=t.toolType===`thinking`?`thinking`:t.toolType===`search`?`search`:t.toolType===`subagent`?`subagent`:`tool`;se({id:`step-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,type:r,icon:t.icon||s.tool,rawIcon:t.rawIcon||t.icon||``,label:t.label||``,isEmployee:t.isEmployee===!0,detail:t.detail||``,stepRef:t.stepRef||``,traceRunId:t.traceRunId||``,traceSeq:t.traceSeq,detailAvailable:t.detailAvailable,detailBytes:t.detailBytes,rawRetentionStatus:t.rawRetentionStatus,status:t.status||`running`,startTime:typeof t.startedAt==`number`&&t.startedAt>0?t.startedAt:Date.now()},typeof t.startedAt==`number`&&t.startedAt>0?t.startedAt:void 0),gt(e,n)}else if(t.type===`agent_output`||t.type===`agent_chunk`){if(f())return;let e=typeof t.traceRunId==`string`&&t.traceRunId?t.traceRunId:null;if(mt(e))return;bt(e);let n=t.text||``;if(e&&typeof t.textLen==`number`){if(t.textLen<=R){t.sseReplay!==!0&&t.textLen<R&&(console.warn(`[ws] live agent_output behind applied cursor — resync (${t.textLen} < ${R})`),R=t.textLen);return}let e=t.textLen-R;e<n.length&&(n=n.slice(-e)),R=t.textLen}fe(n)}else if(t.type===`agent_status`){if(!t.running&&f())return;t.running&&f()&&ce(),t.running===void 0?l(t.status||`idle`):l(t.running?`running`:`idle`),t.agentId&&t.phase&&(I[t.agentId]={phase:t.phase,phaseLabel:t.phaseLabel||``},r(()=>import(`./employees-BJyEgim7.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0])))}else if(t.type===`bgtask_update`)r(()=>import(`./bgtask-badge-C6h5C-o4.js`).then(e=>e.applyBgtaskUpdate(t)),__vite__mapDeps([0])).catch(()=>{});else if(t.type===`queue_update`)oe(t.pending||0),Array.isArray(t.queued)&&D(t.queued),U(`queue_update`).catch(()=>{});else if(t.type===`agent_retry`){let e=Number(t.delay??0),n=t.reason,r=o(String(n||`429`));u(c(e>0?`ws.retry`:`ws.retryNow`,{cli:o(t.cli||``),reason:r,delay:e}),`tool-activity`)}else if(t.type===`agent_fallback`)u(c(`ws.fallback`,{from:o(t.from||``),to:o(t.to||``)}),`tool-activity`);else if(t.type===`agent_smoke`)u(`${s.warning} ${o(t.cli||`agent`)}: smoke response detected — auto-continuing`,`tool-activity`);else if(t.type===`goal_done`)e.activeGoal=null,Vt(),u(`🎯 Goal completed${t.source===`ai_output`?` (detected from AI output)`:``}`,`tool-activity`);else if(t.type===`goal_cancel`)e.activeGoal=null,Vt(),u(`🎯 Goal cancelled`,`tool-activity`);else if(t.type===`schedule_wakeup`)u(`⏰ Wakeup scheduled in ${t.delaySeconds}s — ${o(String(t.reason||``))}`,`tool-activity`);else if(t.type===`goal_continuation_limit`)u(`⚠️ Goal continuation limit reached (${t.attempts} attempts)`,`tool-activity`);else if(t.type===`goal_continuation`)u(`🎯 Active goal — auto-continuing`,`tool-activity`);else if(t.type===`agent_done`){if(!(t.steered||f())){let e=typeof t.traceRunId==`string`&&t.traceRunId?t.traceRunId:null;if(mt(e)||e&&L&&e!==L)return;yt(e),d(t.text||``,t.toolLog),ct()}}else if(t.type===`orchestrate_done`)yt(null),d(t.text||``),ct();else if(t.type===`clear`){te(),ue(),ne().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``),r(()=>import(`./idb-cache-B5PX63p7.js`).then(e=>e.clearScopedCache()),[]).catch(()=>{})}else if(t.type===`session_reset`)u(`${s.refresh} Session reset — history preserved`,`tool-activity`);else if(t.type===`agent_added`||t.type===`agent_updated`||t.type===`agent_deleted`)r(()=>import(`./employees-BJyEgim7.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0]));else if(t.type===`heartbeat_pending`){let e={pending:t.pending||0,deferredPending:t.deferredPending||0};t.reason!==void 0&&(e.reason=t.reason),t.policy!==void 0&&(e.policy=t.policy),t.jobId!==void 0&&(e.jobId=t.jobId),t.jobName!==void 0&&(e.jobName=t.jobName),Pt(e)}else if(t.type===`orc_state`)rn(t);else if(t.type===`memory_status`)r(()=>import(`./memory-amsvg4Ey.js`).then(e=>e.refreshMemorySidebar()),__vite__mapDeps([0]));else if(t.type===`steer_started`)pe(),yt(null),d(``),l(`steering`);else if(t.type===`new_message`&&(t.source===`telegram`||t.source===`discord`||t.source===`slack`||t.source===`bgtask`||t.source===`cli`||t.source===`goal`||t.external===!0||t.fromQueue===!0)){let e=t.role===`assistant`?`agent`:t.role||`user`,n=t.content||``,i=t.cli;r(()=>import(`./message-history-BGHZxvgV.js`).then(t=>{if(t.historyReloadInFlight()){t.loadMessages().then(()=>t.loadMessages()).catch(e=>console.warn(`[ws] new_message reload after in-flight failed`,e));return}ae(e,n,i)}),__vite__mapDeps([0]))}else t.type===`system_notice`?u(`ℹ️ ${o(t.text||``)}`,`tool-activity`):t.type===`replay_gap`?Jt():t.type===`worker_stalled`?u(`⚠️ Worker stalled: ${o(t.employeeName||t.agentId||``)}`,`tool-activity`):t.type===`worker_disconnected`?u(`🔌 Worker disconnected: ${o(t.agentId||``)} (exit ${o(String(t.exitCode??`?`))})`,`tool-activity`):t.type===`worker_timeout`?u(`⏱️ Worker timed out: ${o(t.employeeName||t.agentId||``)}`,`tool-activity`):t.type===`alert_escalation`?u(o(t.message||``),`tool-activity`):t.type===`schedule_wakeup_failed`?u(`⚠️ Wakeup failed — ${o(String(t.reason||``))}: ${o(t.error||``)}`,`tool-activity`):t.type===`goal_continuation_failed`?u(`⚠️ Goal continuation failed: ${o(t.error||``)}`,`tool-activity`):t.type===`settings_change`?jt(t):t.type===`session_list`?ee(t):(t.type===`session_switched`||t.type===`session_created`)&&window.location.reload()}function rn(e){let t=++Gt;Wt.then(()=>{t===Gt&&ut(e.scope,St)&&(Ht(typeof e.state==`string`?e.state:`IDLE`,e.title),Ft({taskAnchor:e.taskAnchor||null,resolvedSelection:e.resolvedSelection||null,interview:e.interview||null}),zt(e.buildBudget||null,typeof e.state==`string`?e.state:`IDLE`))})}function an(e){return I[e]||null}var on=`sidebarState`,sn=900,cn=768;function ln(){return window.innerWidth<=cn}function Z(){document.body.classList.remove(`left-expanded`,`right-expanded`)}function un(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 dn(){let e={};try{e=JSON.parse(localStorage.getItem(on)||`{}`)}catch{}e.left&&document.body.classList.add(`left-collapsed`),e.right&&document.body.classList.add(`right-collapsed`);let t=ln();document.getElementById(`toggleLeft`)?.addEventListener(`click`,fn),document.getElementById(`toggleRight`)?.addEventListener(`click`,pn),window.addEventListener(`resize`,()=>{let e=ln();if(window.innerWidth>sn){Z();let e={};try{e=JSON.parse(localStorage.getItem(on)||`{}`)}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&&Z();t=e,$()}),window.innerWidth<=sn&&(document.body.classList.remove(`left-collapsed`,`right-collapsed`),ln()&&Z()),$()}function Q(){return window.innerWidth<=sn}function fn(){Q()?un(`left`):document.body.classList.toggle(`left-collapsed`),gn(),$()}function pn(){Q()?un(`right`):document.body.classList.toggle(`right-collapsed`),hn()&&document.getElementById(`tabAgents`)?.classList.contains(`active`)&&r(()=>import(`./employees-BJyEgim7.js`).then(e=>e.loadEmployees(!0)),__vite__mapDeps([0])),gn(),$()}function mn(){return Q()?document.body.classList.contains(`left-expanded`):!document.body.classList.contains(`left-collapsed`)}function hn(){return Q()?document.body.classList.contains(`right-expanded`):!document.body.classList.contains(`right-collapsed`)}function $(){let e=document.getElementById(`toggleLeft`),t=document.getElementById(`toggleRight`);e&&(e.innerHTML=mn()?s.chevronLeft:s.chevronRight),t&&(t.innerHTML=hn()?s.chevronRight:s.chevronLeft)}function gn(){localStorage.setItem(on,JSON.stringify({left:document.body.classList.contains(`left-collapsed`),right:document.body.classList.contains(`right-collapsed`)}))}export{K as a,U as c,Ge as d,Se as f,pn as i,lt as l,hn as n,an as o,fn as r,Kt as s,dn as t,st as u};
@@ -0,0 +1 @@
1
+ import{n as e}from"./skills-lWi0ZFiV.js";export{e as loadSkills};
@@ -1,12 +1,12 @@
1
- import{t as e}from"./state-DxpgDKMO.js";import{i as t}from"./api-tVoG39dL.js";import{D as n,T as r,j as i,w as a,x as o}from"./render-DYX6GRQ0.js";var s=[`productivity`,`communication`,`devtools`,`ai-media`,`utility`,`smarthome`,`automation`];function c(e,t){return t?[e.id,e.name,e.description,e.category,e.requires?.env?.join(` `),e.requires?.bins?.join(` `),e.install].filter(Boolean).join(` `).toLowerCase().includes(t):!0}async function l(){try{e.allSkills=await(await n(`/api/skills`)).json(),u()}catch{let e=document.getElementById(`skillsList`);e&&(e.innerHTML=`<div style="color:var(--text-dim);font-size:11px">${i(`skill.loadFail`)}</div>`)}}function u(){let t=document.getElementById(`skillsList`),n=document.getElementById(`skillsCount`);if(!t||!n)return;let l=e.allSkills,u=l;e.currentSkillFilter===`installed`?u=l.filter(e=>e.enabled):e.currentSkillFilter===`other`?u=l.filter(e=>!s.includes(e.category||``)):e.currentSkillFilter!==`all`&&(u=l.filter(t=>t.category===e.currentSkillFilter));let d=e.currentSkillSearch.trim().toLowerCase();u=u.filter(e=>c(e,d));let f=l.filter(e=>e.enabled).length;if(n.textContent=d?i(`skill.countFiltered`,{shown:u.length,active:f,total:l.length}):i(`skill.count`,{active:f,total:l.length}),!u.length){t.innerHTML=`<div class="skill-empty">${r(i(`skill.search.empty`))}</div>`;return}t.innerHTML=u.map(e=>{let t=[];return e.requires?.env&&t.push(`${o.key} `+e.requires.env.map(e=>r(e)).join(`, `)),e.requires?.bins&&t.push(`${o.settings} `+e.requires.bins.map(e=>r(e)).join(`, `)),e.install&&t.push(r(e.install)),`
1
+ import{t as e}from"./state-DxpgDKMO.js";import{i as t}from"./api-tVoG39dL.js";import{M as n,O as r,P as i,R as a,j as o}from"./render-BkGcpH7z.js";var s=[`productivity`,`communication`,`devtools`,`ai-media`,`utility`,`smarthome`,`automation`];function c(e,t){return t?[e.id,e.name,e.description,e.category,e.requires?.env?.join(` `),e.requires?.bins?.join(` `),e.install].filter(Boolean).join(` `).toLowerCase().includes(t):!0}async function l(){try{e.allSkills=await(await i(`/api/skills`)).json(),u()}catch{let e=document.getElementById(`skillsList`);e&&(e.innerHTML=`<div style="color:var(--text-dim);font-size:11px">${a(`skill.loadFail`)}</div>`)}}function u(){let t=document.getElementById(`skillsList`),i=document.getElementById(`skillsCount`);if(!t||!i)return;let l=e.allSkills,u=l;e.currentSkillFilter===`installed`?u=l.filter(e=>e.enabled):e.currentSkillFilter===`other`?u=l.filter(e=>!s.includes(e.category||``)):e.currentSkillFilter!==`all`&&(u=l.filter(t=>t.category===e.currentSkillFilter));let d=e.currentSkillSearch.trim().toLowerCase();u=u.filter(e=>c(e,d));let f=l.filter(e=>e.enabled).length;if(i.textContent=d?a(`skill.countFiltered`,{shown:u.length,active:f,total:l.length}):a(`skill.count`,{active:f,total:l.length}),!u.length){t.innerHTML=`<div class="skill-empty">${n(a(`skill.search.empty`))}</div>`;return}t.innerHTML=u.map(e=>{let t=[];return e.requires?.env&&t.push(`${r.key} `+e.requires.env.map(e=>n(e)).join(`, `)),e.requires?.bins&&t.push(`${r.settings} `+e.requires.bins.map(e=>n(e)).join(`, `)),e.install&&t.push(n(e.install)),`
2
2
  <div class="skill-card ${e.enabled?`enabled`:``}">
3
3
  <div class="skill-card-header">
4
- <span class="skill-emoji">${e.emoji?a(e.emoji):o.tool}</span>
5
- <span class="skill-name">${r(e.name||e.id)}</span>
4
+ <span class="skill-emoji">${e.emoji?o(e.emoji):r.tool}</span>
5
+ <span class="skill-name">${n(e.name||e.id)}</span>
6
6
  <button class="skill-toggle ${e.enabled?`on`:`off`}"
7
- data-skill-id="${r(e.id)}" data-skill-enabled="${e.enabled}"
8
- aria-label="${r((e.name||e.id)+` toggle`)}"></button>
7
+ data-skill-id="${n(e.id)}" data-skill-enabled="${e.enabled}"
8
+ aria-label="${n((e.name||e.id)+` toggle`)}"></button>
9
9
  </div>
10
- <div class="skill-desc">${r(e.description||``)}</div>
10
+ <div class="skill-desc">${n(e.description||``)}</div>
11
11
  ${t.length?`<div class="skill-req">${t.join(` · `)}</div>`:``}
12
12
  </div>`}).join(``)}async function d(e,n){let r=n?`/api/skills/disable`:`/api/skills/enable`;try{await t(r,`POST`,{id:e}),await l()}catch(e){console.error(`toggleSkill error:`,e)}}function f(t,n){e.currentSkillFilter=t,document.querySelectorAll(`.skill-filter`).forEach(e=>e.classList.remove(`active`)),n&&n.classList.add(`active`),u()}function p(t){e.currentSkillSearch=t,u()}export{d as a,p as i,l as n,u as r,f as t};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./api-tVoG39dL.js";import{T as t,j as n}from"./render-DYX6GRQ0.js";import{t as r}from"./locale-DC-ZsWOf.js";var i={activeCli:o(`activeCli`,2,1,2,2,1,3),model:o(`model`,2,1,1,2,1,2),effort:o(`effort`,2,1,1),permissions:o(`permissions`,2,1,1),flushAgent:o(`flushAgent`,2,1,1,2,1,3),employees:o(`employees`,3,3,2,4,1,2),skills:o(`skills`,2,1,1,4,1,3),activeChannel:o(`activeChannel`,2,1,1),telegram:{...o(`telegram`,2,1,2,8),docLinks:[{url:`https://t.me/BotFather`,labelKey:`help.telegram.link.botfather`},{url:`https://core.telegram.org/bots/tutorial`,labelKey:`help.telegram.link.docs`}]},discord:{...o(`discord`,2,1,2,9),docLinks:[{url:`https://discord.com/developers/applications`,labelKey:`help.discord.link.portal`},{url:`https://discord.com/developers/docs/getting-started`,labelKey:`help.discord.link.docs`}]},slack:{...o(`slack`,2,1,2,9),docLinks:[{url:`https://api.slack.com/apps`,labelKey:`help.slack.link.portal`},{url:`https://docs.slack.dev/apis/events-api/using-socket-mode/`,labelKey:`help.slack.link.docs`}]},fallbackOrder:o(`fallbackOrder`,2,1,1,2,1,3),mcp:o(`mcp`,2,1,1,4,1,5),memory:o(`memory`,2,1,2,4,1,2),stt:o(`stt`,2,1,1),promptTemplates:o(`promptTemplates`,2,1,1),chatInput:o(`chatInput`,3,2,2),orchestration:o(`orchestration`,3,2,2,8,1,8),attachments:o(`attachments`,3,2,2),diagrams:o(`diagrams`,3,2,2),keyboardShortcuts:o(`keyboardShortcuts`,3,2,2,3,2,3),session:o(`session`,3,1,2,8,1,9),cliTools:o(`cliTools`,3,1,2,6,1,9),agentControl:o(`agentControl`,3,1,2,6,1,6),goals:o(`goals`,3,1,2,10,1,25)};function a(e){return typeof e==`string`&&Object.prototype.hasOwnProperty.call(i,e)}function o(e,t,n,r,i=2,a=1,o=0){return{titleKey:`help.${e}.title`,introKey:`help.${e}.intro`,effectKey:`help.${e}.effect`,useWhenKeys:s(`help.${e}.use`,t),howToKeys:s(`help.${e}.howTo`,i),exampleKeys:s(`help.${e}.example`,a),avoidWhenKeys:s(`help.${e}.avoid`,n),relatedKeys:s(`help.${e}.related`,r),...o>0?{subcmdKeys:s(`help.${e}.subcmd`,o)}:{}}}function s(e,t){return Array.from({length:t},(t,n)=>`${e}.${n+1}`)}var c=!1,l=null,u=null,d=null,f=null,p=null,m=!1;function h(){c||(c=!0,document.addEventListener(`click`,v),document.addEventListener(`keydown`,y,!0))}function g(e,t=null,n=[e]){if(!i[e]){console.warn(`[help-dialog] unknown topic:`,e);return}b(),p=t,x(e,T(n,e)),l?.classList.add(`open`),l?.setAttribute(`aria-hidden`,`false`),m=!0,requestAnimationFrame(()=>f?.focus())}function _(){if(!m)return;l?.classList.remove(`open`),l?.setAttribute(`aria-hidden`,`true`),m=!1;let e=p;p=null,e?.focus()}function v(e){let t=e.target?.closest(`[data-help-topic]`);if(!t)return;let n=t.getAttribute(`data-help-topic`);if(!a(n)){console.warn(`[help-dialog] invalid topic:`,n);return}e.preventDefault(),g(n,t,w(t.getAttribute(`data-help-topics`),n))}function y(e){!m||e.key!==`Escape`||(e.preventDefault(),e.stopImmediatePropagation(),_())}function b(){if(l&&u&&d&&f)return;l=document.createElement(`div`),l.id=`helpDialog`,l.className=`modal-overlay help-dialog-overlay`,l.setAttribute(`role`,`presentation`),l.setAttribute(`aria-hidden`,`true`),l.addEventListener(`click`,e=>{e.target===l&&_()});let e=document.createElement(`div`);e.className=`modal-box help-dialog-box`,e.setAttribute(`role`,`dialog`),e.setAttribute(`aria-modal`,`true`),e.setAttribute(`aria-labelledby`,`helpDialogTitle`),e.addEventListener(`click`,e=>e.stopPropagation());let t=document.createElement(`div`);t.className=`modal-header help-dialog-header`,u=document.createElement(`span`),u.id=`helpDialogTitle`,f=document.createElement(`button`),f.type=`button`,f.className=`btn-modal-close help-dialog-close`,f.setAttribute(`aria-label`,n(`help.close`)),f.textContent=`x`,f.addEventListener(`click`,()=>_()),d=document.createElement(`div`),d.className=`help-dialog-body`;let r=document.createElement(`div`);r.className=`modal-footer help-dialog-footer`;let i=document.createElement(`button`);i.type=`button`,i.className=`btn-save help-dialog-done`,i.textContent=n(`help.close`),i.addEventListener(`click`,()=>_()),t.append(u,f),r.append(i),e.append(t,d,r),l.append(e),document.body.append(l)}function x(e,t=[e]){if(!u||!d||!f)return;let r=i[e];u.textContent=n(r.titleKey),f.setAttribute(`aria-label`,n(`help.close`)),d.replaceChildren();let a=document.createElement(`div`);if(a.className=`help-dialog-content`,S(a,r),t.length<=1){d.append(a);return}let o=document.createElement(`div`);o.className=`help-dialog-layout`,o.append(C(t,e),a),d.append(o)}function S(e,t){t.docLinks?.length&&E(e,t.docLinks),D(e,n(`help.section.what`),n(t.introKey)),D(e,n(`help.section.effect`),n(t.effectKey),`help-effect-text`),O(e,n(`help.section.useWhen`),t.useWhenKeys),A(e,n(`help.section.howTo`),t.howToKeys),O(e,n(`help.section.example`),t.exampleKeys,!1,`help-example-list`),t.avoidWhenKeys?.length&&O(e,n(`help.section.avoidWhen`),t.avoidWhenKeys),t.subcmdKeys?.length&&j(e,n(`help.section.commands`),t.subcmdKeys),t.relatedKeys?.length&&O(e,n(`help.section.related`),t.relatedKeys,!0)}function C(e,t){let r=document.createElement(`nav`);r.className=`help-dialog-nav`,r.setAttribute(`aria-label`,n(`help.section.related`));for(let a of e){let o=i[a],s=document.createElement(`button`);s.type=`button`,s.className=`help-dialog-nav-item`,s.textContent=n(o.titleKey),a===t&&(s.classList.add(`active`),s.setAttribute(`aria-current`,`page`)),s.addEventListener(`click`,()=>x(a,e)),r.append(s)}return r}function w(e,t){return T(e?.split(/[\s,]+/).filter(Boolean)??[],t)}function T(e,t){let n=[];for(let t of e)a(t)&&!n.includes(t)&&n.push(t);return n.includes(t)||n.unshift(t),n}function E(e,t){let r=document.createElement(`section`);r.className=`help-dialog-section help-doc-links`;let i=document.createElement(`nav`);i.className=`help-doc-links-nav`;for(let e of t){let t=document.createElement(`a`);t.href=e.url,t.target=`_blank`,t.rel=`noopener noreferrer`,t.className=`help-doc-link`,t.textContent=n(e.labelKey);let r=document.createElement(`span`);r.className=`help-doc-link-icon`,r.textContent=`↗`,t.append(r),i.append(t)}r.append(i),e.append(r)}function D(e,t,n,r){let i=k(t),a=document.createElement(`p`);r&&(a.className=r),a.textContent=n,i.append(a),e.append(i)}function O(e,t,r,i=!1,a){let o=k(t),s=document.createElement(`ul`);s.className=a??(i?`help-related-list`:`help-dialog-list`);for(let e of r){let t=document.createElement(`li`);t.textContent=n(e),s.append(t)}o.append(s),e.append(o)}function k(e){let t=document.createElement(`section`);t.className=`help-dialog-section`;let n=document.createElement(`h3`);return n.textContent=e,t.append(n),t}function A(e,t,r){let i=k(t),a=document.createElement(`ol`);a.className=`help-dialog-list help-howto-list`;for(let e of r){let t=document.createElement(`li`);t.textContent=n(e),a.append(t)}i.append(a),e.append(i)}function j(e,t,r){let i=k(t),a=document.createElement(`dl`);a.className=`help-subcmd-list`;for(let e of r){let t=n(e),r=t.indexOf(` — `),i=r>=0?t.slice(0,r):t,o=r>=0?t.slice(r+3):``,s=document.createElement(`dt`);s.className=`help-subcmd-cmd`;let c=document.createElement(`code`);c.textContent=i,s.append(c);let l=document.createElement(`dd`);l.className=`help-subcmd-desc`,l.textContent=o,a.append(s,l)}i.append(a),e.append(i)}var M={mcp:`mcp`,memory:`memory`,model:`model`,effort:`effort`,cli:`activeCli`,skill:`skills`,employee:`employees`,orchestrate:`orchestration`,pabcd:`orchestration`,flush:`flushAgent`,fallback:`fallbackOrder`,prompt:`promptTemplates`,browser:`mcp`,status:`activeCli`,steer:`chatInput`,clear:`session`,compact:`session`,reset:`session`,purge:`session`,new:`session`,switch:`session`,sw:`session`,sessions:`session`,ss:`session`,version:`cliTools`,project:`cliTools`,proj:`cliTools`,ide:`cliTools`,file:`cliTools`,forward:`agentControl`,thought:`agentControl`,goal:`goals`,goalplan:`goals`,gd:`goals`,plan:`goals`,interview:`goals`,deliberate:`goals`,planaudit:`goals`,review:`goals`,search:`mcp`,team:`goals`,task:`goals`,help:`keyboardShortcuts`,h:`keyboardShortcuts`,commands:`keyboardShortcuts`,cmd:`keyboardShortcuts`,fork:`session`,quit:`session`,q:`session`,exit:`session`,telegram:`telegram`,discord:`discord`,slack:`slack`,stt:`stt`,attachments:`attachments`,diagrams:`diagrams`};function N(e){let t=e.replace(/^\//,``).trim().split(/\s+/);if(t.length<2||t[t.length-1].toLowerCase()!==`info`)return!1;let n=M[t[0].toLowerCase()];return n?(g(n),!0):!1}var P=[],F=[],I=-1,L=!1,R=null;function z(e){let t=String(e||``).slice(1).trim().split(/\s+/)[0]||``;return t.includes(`/`)||t.includes(`\\`)}var B=()=>document.getElementById(`cmdDropdown`),V=()=>document.getElementById(`chatInput`);function H(e){let t=String(e||``).toLowerCase();return P.filter(e=>`/${e.name}`.startsWith(t))}function U(e){let t=e.workflow?.workflowArgs||[];return t.length?t.map(e=>e.required?`<${e.name}>`:`[${e.name}]`).join(` `):e.args||``}function W(e){let n=e.workflow;return n?`<span class="cmd-meta">
1
+ import{n as e}from"./api-tVoG39dL.js";import{M as t,R as n}from"./render-BkGcpH7z.js";import{t as r}from"./locale-DC-ZsWOf.js";var i={activeCli:o(`activeCli`,2,1,2,2,1,3),model:o(`model`,2,1,1,2,1,2),effort:o(`effort`,2,1,1),permissions:o(`permissions`,2,1,1),flushAgent:o(`flushAgent`,2,1,1,2,1,3),employees:o(`employees`,3,3,2,4,1,2),skills:o(`skills`,2,1,1,4,1,3),activeChannel:o(`activeChannel`,2,1,1),telegram:{...o(`telegram`,2,1,2,8),docLinks:[{url:`https://t.me/BotFather`,labelKey:`help.telegram.link.botfather`},{url:`https://core.telegram.org/bots/tutorial`,labelKey:`help.telegram.link.docs`}]},discord:{...o(`discord`,2,1,2,9),docLinks:[{url:`https://discord.com/developers/applications`,labelKey:`help.discord.link.portal`},{url:`https://discord.com/developers/docs/getting-started`,labelKey:`help.discord.link.docs`}]},slack:{...o(`slack`,2,1,2,9),docLinks:[{url:`https://api.slack.com/apps`,labelKey:`help.slack.link.portal`},{url:`https://docs.slack.dev/apis/events-api/using-socket-mode/`,labelKey:`help.slack.link.docs`}]},fallbackOrder:o(`fallbackOrder`,2,1,1,2,1,3),mcp:o(`mcp`,2,1,1,4,1,5),memory:o(`memory`,2,1,2,4,1,2),stt:o(`stt`,2,1,1),promptTemplates:o(`promptTemplates`,2,1,1),chatInput:o(`chatInput`,3,2,2),orchestration:o(`orchestration`,3,2,2,8,1,8),attachments:o(`attachments`,3,2,2),diagrams:o(`diagrams`,3,2,2),keyboardShortcuts:o(`keyboardShortcuts`,3,2,2,3,2,3),session:o(`session`,3,1,2,8,1,9),cliTools:o(`cliTools`,3,1,2,6,1,9),agentControl:o(`agentControl`,3,1,2,6,1,6),goals:o(`goals`,3,1,2,10,1,25)};function a(e){return typeof e==`string`&&Object.prototype.hasOwnProperty.call(i,e)}function o(e,t,n,r,i=2,a=1,o=0){return{titleKey:`help.${e}.title`,introKey:`help.${e}.intro`,effectKey:`help.${e}.effect`,useWhenKeys:s(`help.${e}.use`,t),howToKeys:s(`help.${e}.howTo`,i),exampleKeys:s(`help.${e}.example`,a),avoidWhenKeys:s(`help.${e}.avoid`,n),relatedKeys:s(`help.${e}.related`,r),...o>0?{subcmdKeys:s(`help.${e}.subcmd`,o)}:{}}}function s(e,t){return Array.from({length:t},(t,n)=>`${e}.${n+1}`)}var c=!1,l=null,u=null,d=null,f=null,p=null,m=!1;function h(){c||(c=!0,document.addEventListener(`click`,v),document.addEventListener(`keydown`,y,!0))}function g(e,t=null,n=[e]){if(!i[e]){console.warn(`[help-dialog] unknown topic:`,e);return}b(),p=t,x(e,T(n,e)),l?.classList.add(`open`),l?.setAttribute(`aria-hidden`,`false`),m=!0,requestAnimationFrame(()=>f?.focus())}function _(){if(!m)return;l?.classList.remove(`open`),l?.setAttribute(`aria-hidden`,`true`),m=!1;let e=p;p=null,e?.focus()}function v(e){let t=e.target?.closest(`[data-help-topic]`);if(!t)return;let n=t.getAttribute(`data-help-topic`);if(!a(n)){console.warn(`[help-dialog] invalid topic:`,n);return}e.preventDefault(),g(n,t,w(t.getAttribute(`data-help-topics`),n))}function y(e){!m||e.key!==`Escape`||(e.preventDefault(),e.stopImmediatePropagation(),_())}function b(){if(l&&u&&d&&f)return;l=document.createElement(`div`),l.id=`helpDialog`,l.className=`modal-overlay help-dialog-overlay`,l.setAttribute(`role`,`presentation`),l.setAttribute(`aria-hidden`,`true`),l.addEventListener(`click`,e=>{e.target===l&&_()});let e=document.createElement(`div`);e.className=`modal-box help-dialog-box`,e.setAttribute(`role`,`dialog`),e.setAttribute(`aria-modal`,`true`),e.setAttribute(`aria-labelledby`,`helpDialogTitle`),e.addEventListener(`click`,e=>e.stopPropagation());let t=document.createElement(`div`);t.className=`modal-header help-dialog-header`,u=document.createElement(`span`),u.id=`helpDialogTitle`,f=document.createElement(`button`),f.type=`button`,f.className=`btn-modal-close help-dialog-close`,f.setAttribute(`aria-label`,n(`help.close`)),f.textContent=`x`,f.addEventListener(`click`,()=>_()),d=document.createElement(`div`),d.className=`help-dialog-body`;let r=document.createElement(`div`);r.className=`modal-footer help-dialog-footer`;let i=document.createElement(`button`);i.type=`button`,i.className=`btn-save help-dialog-done`,i.textContent=n(`help.close`),i.addEventListener(`click`,()=>_()),t.append(u,f),r.append(i),e.append(t,d,r),l.append(e),document.body.append(l)}function x(e,t=[e]){if(!u||!d||!f)return;let r=i[e];u.textContent=n(r.titleKey),f.setAttribute(`aria-label`,n(`help.close`)),d.replaceChildren();let a=document.createElement(`div`);if(a.className=`help-dialog-content`,S(a,r),t.length<=1){d.append(a);return}let o=document.createElement(`div`);o.className=`help-dialog-layout`,o.append(C(t,e),a),d.append(o)}function S(e,t){t.docLinks?.length&&E(e,t.docLinks),D(e,n(`help.section.what`),n(t.introKey)),D(e,n(`help.section.effect`),n(t.effectKey),`help-effect-text`),O(e,n(`help.section.useWhen`),t.useWhenKeys),A(e,n(`help.section.howTo`),t.howToKeys),O(e,n(`help.section.example`),t.exampleKeys,!1,`help-example-list`),t.avoidWhenKeys?.length&&O(e,n(`help.section.avoidWhen`),t.avoidWhenKeys),t.subcmdKeys?.length&&j(e,n(`help.section.commands`),t.subcmdKeys),t.relatedKeys?.length&&O(e,n(`help.section.related`),t.relatedKeys,!0)}function C(e,t){let r=document.createElement(`nav`);r.className=`help-dialog-nav`,r.setAttribute(`aria-label`,n(`help.section.related`));for(let a of e){let o=i[a],s=document.createElement(`button`);s.type=`button`,s.className=`help-dialog-nav-item`,s.textContent=n(o.titleKey),a===t&&(s.classList.add(`active`),s.setAttribute(`aria-current`,`page`)),s.addEventListener(`click`,()=>x(a,e)),r.append(s)}return r}function w(e,t){return T(e?.split(/[\s,]+/).filter(Boolean)??[],t)}function T(e,t){let n=[];for(let t of e)a(t)&&!n.includes(t)&&n.push(t);return n.includes(t)||n.unshift(t),n}function E(e,t){let r=document.createElement(`section`);r.className=`help-dialog-section help-doc-links`;let i=document.createElement(`nav`);i.className=`help-doc-links-nav`;for(let e of t){let t=document.createElement(`a`);t.href=e.url,t.target=`_blank`,t.rel=`noopener noreferrer`,t.className=`help-doc-link`,t.textContent=n(e.labelKey);let r=document.createElement(`span`);r.className=`help-doc-link-icon`,r.textContent=`↗`,t.append(r),i.append(t)}r.append(i),e.append(r)}function D(e,t,n,r){let i=k(t),a=document.createElement(`p`);r&&(a.className=r),a.textContent=n,i.append(a),e.append(i)}function O(e,t,r,i=!1,a){let o=k(t),s=document.createElement(`ul`);s.className=a??(i?`help-related-list`:`help-dialog-list`);for(let e of r){let t=document.createElement(`li`);t.textContent=n(e),s.append(t)}o.append(s),e.append(o)}function k(e){let t=document.createElement(`section`);t.className=`help-dialog-section`;let n=document.createElement(`h3`);return n.textContent=e,t.append(n),t}function A(e,t,r){let i=k(t),a=document.createElement(`ol`);a.className=`help-dialog-list help-howto-list`;for(let e of r){let t=document.createElement(`li`);t.textContent=n(e),a.append(t)}i.append(a),e.append(i)}function j(e,t,r){let i=k(t),a=document.createElement(`dl`);a.className=`help-subcmd-list`;for(let e of r){let t=n(e),r=t.indexOf(` — `),i=r>=0?t.slice(0,r):t,o=r>=0?t.slice(r+3):``,s=document.createElement(`dt`);s.className=`help-subcmd-cmd`;let c=document.createElement(`code`);c.textContent=i,s.append(c);let l=document.createElement(`dd`);l.className=`help-subcmd-desc`,l.textContent=o,a.append(s,l)}i.append(a),e.append(i)}var M={mcp:`mcp`,memory:`memory`,model:`model`,effort:`effort`,cli:`activeCli`,skill:`skills`,employee:`employees`,orchestrate:`orchestration`,pabcd:`orchestration`,flush:`flushAgent`,fallback:`fallbackOrder`,prompt:`promptTemplates`,browser:`mcp`,status:`activeCli`,steer:`chatInput`,clear:`session`,compact:`session`,reset:`session`,purge:`session`,new:`session`,switch:`session`,sw:`session`,sessions:`session`,ss:`session`,version:`cliTools`,project:`cliTools`,proj:`cliTools`,ide:`cliTools`,file:`cliTools`,forward:`agentControl`,thought:`agentControl`,goal:`goals`,goalplan:`goals`,gd:`goals`,plan:`goals`,interview:`goals`,deliberate:`goals`,planaudit:`goals`,review:`goals`,search:`mcp`,team:`goals`,task:`goals`,help:`keyboardShortcuts`,h:`keyboardShortcuts`,commands:`keyboardShortcuts`,cmd:`keyboardShortcuts`,fork:`session`,quit:`session`,q:`session`,exit:`session`,telegram:`telegram`,discord:`discord`,slack:`slack`,stt:`stt`,attachments:`attachments`,diagrams:`diagrams`};function N(e){let t=e.replace(/^\//,``).trim().split(/\s+/);if(t.length<2||t[t.length-1].toLowerCase()!==`info`)return!1;let n=M[t[0].toLowerCase()];return n?(g(n),!0):!1}var P=[],F=[],I=-1,L=!1,R=null;function z(e){let t=String(e||``).slice(1).trim().split(/\s+/)[0]||``;return t.includes(`/`)||t.includes(`\\`)}var B=()=>document.getElementById(`cmdDropdown`),V=()=>document.getElementById(`chatInput`);function H(e){let t=String(e||``).toLowerCase();return P.filter(e=>`/${e.name}`.startsWith(t))}function U(e){let t=e.workflow?.workflowArgs||[];return t.length?t.map(e=>e.required?`<${e.name}>`:`[${e.name}]`).join(` `):e.args||``}function W(e){let n=e.workflow;return n?`<span class="cmd-meta">
2
2
  <span class="cmd-chip">${t(n.phase)}</span>
3
3
  <span class="cmd-chip cmd-risk-${t(n.risk)}">${t(n.risk)}</span>
4
4
  <span class="cmd-chip">${t(n.output)}</span>
@@ -0,0 +1 @@
1
+ import{a as e}from"./slash-commands-DYOI6nKj.js";export{e as loadCommands};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./api-tVoG39dL.js";import{T as t}from"./render-DYX6GRQ0.js";import{r as n}from"./provider-icons-VDfahiUp.js";var r=80,i=``,a=0,o=0,s=!1,c=0,l=null;function u(e){return e.eventType||e.event_type||`event`}function d(e,t=i){return e===c&&t===i}function f(e){return!e||!Number.isInteger(e)||e<1?0:Math.floor((e-1)/r)*r}function p(){let e=document.getElementById(`traceDrawerOverlay`);return e||(e=document.createElement(`div`),e.id=`traceDrawerOverlay`,e.className=`trace-drawer-overlay`,e.innerHTML=`<aside class="trace-drawer" role="dialog" aria-modal="true" aria-labelledby="traceDrawerTitle">
1
+ import{n as e}from"./api-tVoG39dL.js";import{M as t}from"./render-BkGcpH7z.js";import{r as n}from"./provider-icons-VDfahiUp.js";var r=80,i=``,a=0,o=0,s=!1,c=0,l=null;function u(e){return e.eventType||e.event_type||`event`}function d(e,t=i){return e===c&&t===i}function f(e){return!e||!Number.isInteger(e)||e<1?0:Math.floor((e-1)/r)*r}function p(){let e=document.getElementById(`traceDrawerOverlay`);return e||(e=document.createElement(`div`),e.id=`traceDrawerOverlay`,e.className=`trace-drawer-overlay`,e.innerHTML=`<aside class="trace-drawer" role="dialog" aria-modal="true" aria-labelledby="traceDrawerTitle">
2
2
  <header class="trace-drawer-header">
3
3
  <div><p class="trace-drawer-kicker">Raw trace</p><h2 id="traceDrawerTitle">Trace</h2></div>
4
4
  <button class="trace-drawer-close" type="button" aria-label="Close trace drawer">×</button>
@@ -1,2 +1,2 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-Bjnw0wQ6.css"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./state-DxpgDKMO.js";import{t}from"./preload-helper-DFYRRz9w.js";import{E as n,S as r,t as i,v as a,w as o}from"./render-DYX6GRQ0.js";import{A as s,C as c,D as l,N as u,O as d,S as f,_ as ee,b as te,k as p,m,t as ne,v as h,w as g,x as re}from"./iframe-renderer-C5vRbbl9.js";import{C as _,D as v,E as y,S as b,_ as x,b as S,f as ie,g as C,h as w,l as T,m as E,p as D,u as ae,v as oe,w as se,x as O,y as k}from"./message-history-C4WOisGx.js";import{o as ce}from"./idb-cache-BzzftUET.js";var A=2e3,j=80,le=400;function ue(e){if(e<=A)return j;let t=e/A*j;return Math.min(le,Math.round(t))}function M(e){return{chunks:[],fullText:``,textDirty:!1,element:e,pendingRAF:null,isFinalized:!1,lastRenderTime:0}}function N(e,t=``){let n=M(e);return t?(n.chunks=[t],n.fullText=t,n.textDirty=!1,n.element.innerHTML=i(t,!0)+`<span class="stream-cursor" aria-hidden="true"></span>`):n.element.innerHTML=`<span class="stream-cursor" aria-hidden="true"></span>`,n}function P(e){return e.textDirty&&=(e.fullText=e.chunks.join(``),!1),e.fullText}function F(e,t){e.chunks.push(t),e.textDirty=!0,!e.pendingRAF&&!e.isFinalized&&(e.pendingRAF=requestAnimationFrame(()=>{if(e.pendingRAF=null,e.isFinalized)return;let t=performance.now(),n=P(e);n.length<A||t-e.lastRenderTime>ue(n.length)?(e.element.innerHTML=i(n,!0)+`<span class="stream-cursor" aria-hidden="true"></span>`,e.lastRenderTime=t):e.pendingRAF=requestAnimationFrame(()=>{e.pendingRAF=null,!e.isFinalized&&(e.element.innerHTML=i(P(e),!0)+`<span class="stream-cursor" aria-hidden="true"></span>`,e.lastRenderTime=performance.now())})}))}function I(e,t=!1){e.isFinalized=!0,e.pendingRAF&&=(cancelAnimationFrame(e.pendingRAF),null);let n=P(e);return t||(e.element.innerHTML=i(n)),n}function L(e){return typeof e.traceSeq==`number`&&Number.isFinite(e.traceSeq)&&e.traceSeq>0}function R(e,t){return!!t.traceRunId&&!!e.traceRunId&&t.traceRunId===e.traceRunId&&L(t)&&L(e)&&t.traceSeq===e.traceSeq&&t.type===e.type&&t.label===e.label&&!!t.isEmployee==!!e.isEmployee}function z(e,t){return t.stepRef&&e.stepRef===t.stepRef?!0:R(e,t)}function B(e,t,n={}){return[...e].reverse().filter(e=>n.includeDone||e.status===`running`).find(e=>z(e,t))??null}function V(e,t){let n=e.filter(e=>e.status===`running`&&!e.stepRef&&e.label===t.label&&e.type===t.type&&!!e.isEmployee==!!t.isEmployee);return n.length===1?n[0]:null}function H(e,t){let n=[...e].reverse().filter(e=>e.status===`running`);return B(n,t)||V(n,t)}function U(){e.currentProcessBlock&&l(e.currentProcessBlock),e.currentAgentDiv instanceof HTMLElement&&l(e.currentAgentDiv),v(),s(),e.currentAgentDiv=null,e.currentProcessBlock=null,q=null}var W=0;function de(){W=Date.now()}function fe(){W=0}function pe(){return Date.now()-W<8e3}function G(e){for(let t of document.querySelectorAll(`.msg-user`))if(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING)return!0;return!1}function K(){let t=e.currentAgentDiv&&e.currentAgentDiv.isConnected?e.currentAgentDiv:null;return t?G(t)?(e.currentAgentDiv=null,e.currentProcessBlock=null,q=null,null):t:null}function me(){let e=Array.from(document.querySelectorAll(`.msg-agent`)).at(-1)??null;return!e||G(e)?null:e}function he(t,n){k();let i=K();if(i||(i=x(`agent`,``),e.currentAgentDiv=i,e.currentProcessBlock=null),b(i),!e.currentProcessBlock){let t=i.querySelector(`.agent-body`);t&&(e.currentProcessBlock=S(i)),!e.currentProcessBlock&&t&&(_(i),e.currentProcessBlock=f(t))}if(n&&e.currentProcessBlock&&!e.currentProcessBlock.startedAt&&(e.currentProcessBlock.startedAt=n),e.currentProcessBlock){let n=t.rawIcon||t.icon,i=t.status||r(t.icon)||`running`;if(i===`done`||i===`error`){let r=H(e.currentProcessBlock.steps,t);if(r){t.icon=o(t.icon);let a=t.type===`thinking`?p(r.id,t.detail):g(r.id,t.detail);d(e.currentProcessBlock,r.id,{...r,...t,id:r.id,rawIcon:n,detail:a,detailPreview:a,label:t.label||r.label,status:i,startTime:r.startTime}),m();return}if(t.stepRef&&(i===`done`||i===`error`)){let r=[...e.currentProcessBlock.steps].reverse().find(e=>e.stepRef===t.stepRef&&(e.status===`done`||e.status===`error`));if(r){t.icon=o(t.icon);let a=t.type===`thinking`?p(r.id,t.detail):g(r.id,t.detail);d(e.currentProcessBlock,r.id,{...r,...t,id:r.id,rawIcon:n,status:i,detail:a,detailPreview:a,startTime:r.startTime}),m();return}}}if(t.stepRef&&i===`running`){let r=[...e.currentProcessBlock.steps].reverse().find(e=>e.stepRef===t.stepRef&&e.status===`running`);if(r){t.rawIcon=n,t.icon=o(t.icon);let i=p(r.id,t.detail);d(e.currentProcessBlock,r.id,{...r,...t,id:r.id,rawIcon:n,status:`running`,detail:i,detailPreview:i,label:t.label||r.label,startTime:r.startTime}),m();return}}let a=B(e.currentProcessBlock.steps,t,{includeDone:!0});if(a){t.rawIcon=n,t.icon=o(t.icon);let r=t.detail||``,s=c(a.id)||a.detail||a.detailPreview||``,l=r.length>=s.length?r:s,u=p(a.id,l),f=(a.status===`done`||a.status===`error`)&&i===`running`?a.status:i;d(e.currentProcessBlock,a.id,{...a,...t,id:a.id,rawIcon:n,status:f,detail:u,detailPreview:u,label:t.label||a.label,startTime:a.startTime}),m();return}if(t.detail){let n=[...e.currentProcessBlock.steps].reverse().find(e=>e.status===`running`&&e.label===t.label&&e.type===t.type&&!!e.isEmployee==!!t.isEmployee&&!e.detail);if(n){d(e.currentProcessBlock,n.id,t),m();return}}t.rawIcon=n,t.icon=o(t.icon),h(e.currentProcessBlock,t)}m()}var q=null,J=`data-active-run-hydrated`;function Y(e){document.querySelectorAll(`[${J}="true"]`).forEach(t=>{e&&t===e||t.remove()})}function ge(e){let t=K()??me();Y(t);let n=t||x(`agent`,``,e||null);return n.setAttribute(J,`true`),n}function _e(e,t){let n=c(e.id)||e.detail||e.detailPreview||``,r=t.detail||t.detailPreview||``;return r.length>=n.length?r:n}function X(e){return e.stepRef?!0:!!e.traceRunId&&typeof e.traceSeq==`number`&&Number.isFinite(e.traceSeq)&&e.traceSeq>0}function ve(e,t){let n=e.steps.filter(e=>!X(e)),r=0,i=!0;for(let a of t){let t=e.steps.find(e=>z(e,a))??null;if(!t&&!X(a)&&i){let e=n[r]??null;e?e.type===a.type&&!!e.isEmployee==!!a.isEmployee?(t=e,r++):i=!1:r++}if(!t){let n=e.steps.filter(e=>e.label===a.label&&e.type===a.type&&!!e.isEmployee==!!a.isEmployee);t=n.length===1?n[0]:null}if(!t){if(h(e,a),!X(a)&&i){let t=e.steps[e.steps.length-1];t&&n.push(t)}continue}let o=p(t.id,_e(t,a));d(e,t.id,{...t,...a,id:t.id,detail:o,detailPreview:o,label:a.label||t.label})}}function ye(e=[]){document.querySelectorAll(`[data-queued-overlay="true"]`).forEach(e=>e.remove())}var Z=``;function be(e){let t=Array.isArray(e.toolLog)?e.toolLog:[],n=t.map(e=>`${e.stepRef||``}~${e.traceRunId||``}~${e.traceSeq??``}~${e.status||``}~${e.label||``}~${(e.detail||``).length}`).join(`|`);return`${e.traceRunId||``}:${e.cli||``}:${(e.text||``).length}:${t.length}:${n}`}function xe(t){if(!t?.running){Z=``,Y();return}let n=be(t);if(n===Z&&K())return;v(),k(),e.currentAgentDiv=ge(t.cli||null);let r=e.currentAgentDiv.querySelector(`.agent-body`),i=E(t.toolLog||[]);b(e.currentAgentDiv),e.currentProcessBlock=S(e.currentAgentDiv),r&&i.length?(e.currentProcessBlock||=(_(e.currentAgentDiv),f(r)),t.startedAt&&(e.currentProcessBlock.startedAt=t.startedAt),ve(e.currentProcessBlock,C(i,t.startedAt))):e.currentProcessBlock=S(e.currentAgentDiv);let a=e.currentAgentDiv.querySelector(`.msg-content`);a&&(q=N(a,t.text||``)),Z=n}function Q(t){if(!t)return;k(),K()||(e.currentAgentDiv=x(`agent`,``),q=null);let n=e.currentAgentDiv?.querySelector(`.msg-content`);n&&(q||=M(n),F(q,t)),m()}var $=0;function Se(e){e.querySelectorAll(`.mermaid-pending`).forEach(e=>{delete e.dataset.mermaidQueued,delete e.dataset.mermaidQueuedAt})}function Ce(t,r){let o=Date.now();if(!e.currentAgentDiv&&o-$<500)return;Z=``,v(),k(),e.currentAgentDiv&&b(e.currentAgentDiv);let s=se(e.currentProcessBlock??e.currentAgentDiv,!0),c=E(D(Array.isArray(r)?r:[],s)),d=w(c),f=!!e.currentProcessBlock||!!(e.currentAgentDiv&&O(e.currentAgentDiv));e.currentProcessBlock&&=(re(e.currentProcessBlock),null);let p=c.length>0;if(t||p){(!e.currentAgentDiv||!e.currentAgentDiv.isConnected)&&(e.currentAgentDiv=x(`agent`,``)),e.currentAgentDiv.removeAttribute(J);let r=e.currentAgentDiv?.querySelector(`.msg-content`),o=q?I(q,!0):``,s=t||o;if(q=null,r&&(r.innerHTML=i(s)),p&&e.currentAgentDiv&&!f&&!O(e.currentAgentDiv)){let t=e.currentAgentDiv.querySelector(`.msg-content`);t&&t.insertAdjacentHTML(`beforebegin`,te(C(c),!0))}e.currentAgentDiv&&b(e.currentAgentDiv),r&&r.setAttribute(`data-raw`,n(s)),r&&ne(r);let m=ee(),h=!!(m.active&&e.currentAgentDiv&&e.currentAgentDiv.isConnected);if(r&&!h&&a(r,{immediate:!0}),h){let t=e.currentAgentDiv;Se(t),t.querySelectorAll(`.diagram-widget`).forEach(e=>{let t=e,n=t.dataset.widgetHtml,r=t.dataset.widgetId;if(!n&&!r)return;let i=document.createElement(`div`);i.className=`diagram-widget-pending`,r?i.dataset.widgetId=r:n&&(i.dataset.diagramHtml=n),e.replaceWith(i)}),d?(m.appendItem(ie({role:`assistant`,content:s,cli:null,tool_log:d},m.count)),l(t),m.scrollToBottom()):(t.dataset.turnIndex=String(m.count),t.dataset.messageId||(t.dataset.messageId=u()),m.appendLiveItem(t)),t.remove()}s&&ce({role:`assistant`,content:s,tool_log:d,timestamp:Date.now()}).catch(()=>{})}q=null,e.currentAgentDiv=null,$=Date.now(),ae(`idle`),T()}function we(e,n){document.querySelectorAll(`.tab-btn`).forEach(e=>{e.classList.remove(`active`),e.setAttribute(`aria-selected`,`false`)}),document.querySelectorAll(`.tab-content`).forEach(e=>e.classList.remove(`active`)),document.getElementById({agents:`tabAgents`,settings:`tabSettings`,skills:`tabSkills`}[e])?.classList.add(`active`),n&&(n.classList.add(`active`),n.setAttribute(`aria-selected`,`true`)),e===`settings`&&t(()=>import(`./settings-SreihUje.js`).then(e=>e.loadSettings()),__vite__mapDeps([0])),e===`agents`&&t(()=>import(`./employees-BnobWM_2.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0])),e===`skills`&&t(()=>import(`./skills-DwPIP08e.js`).then(e=>e.loadSkills()),__vite__mapDeps([0]))}function Te(){let e=document.getElementById(`tabSettings`)?.classList.contains(`active`);t(()=>import(`./settings-SreihUje.js`).then(t=>e?t.savePerCli():t.updateSettings()),__vite__mapDeps([0]))}function Ee(){y({onStatus:oe})}export{Ce as a,Ee as c,he as d,we as f,fe as i,pe as l,ye as n,Te as o,U as r,xe as s,Q as t,de as u};
2
+ import{t as e}from"./state-DxpgDKMO.js";import{t}from"./preload-helper-DFYRRz9w.js";import{N as n,T as r,j as i,k as a,t as o}from"./render-BkGcpH7z.js";import{A as s,C as c,D as l,N as u,O as d,S as f,_ as ee,b as te,k as p,m,t as ne,v as h,w as g,x as re}from"./iframe-renderer-B8k3AvTv.js";import{C as _,D as v,E as y,S as b,_ as x,b as S,f as ie,g as C,h as w,l as T,m as E,p as D,u as ae,v as oe,w as se,x as O,y as k}from"./message-history-Bw2E_b8L.js";import{s as ce}from"./idb-cache-lOntwU3S.js";var A=2e3,j=80,le=400;function ue(e){if(e<=A)return j;let t=e/A*j;return Math.min(le,Math.round(t))}function M(e){return{chunks:[],fullText:``,textDirty:!1,element:e,pendingRAF:null,isFinalized:!1,lastRenderTime:0}}function N(e,t=``){let n=M(e);return t?(n.chunks=[t],n.fullText=t,n.textDirty=!1,n.element.innerHTML=o(t,!0)+`<span class="stream-cursor" aria-hidden="true"></span>`):n.element.innerHTML=`<span class="stream-cursor" aria-hidden="true"></span>`,n}function P(e){return e.textDirty&&=(e.fullText=e.chunks.join(``),!1),e.fullText}function F(e,t){e.chunks.push(t),e.textDirty=!0,!e.pendingRAF&&!e.isFinalized&&(e.pendingRAF=requestAnimationFrame(()=>{if(e.pendingRAF=null,e.isFinalized)return;let t=performance.now(),n=P(e);n.length<A||t-e.lastRenderTime>ue(n.length)?(e.element.innerHTML=o(n,!0)+`<span class="stream-cursor" aria-hidden="true"></span>`,e.lastRenderTime=t):e.pendingRAF=requestAnimationFrame(()=>{e.pendingRAF=null,!e.isFinalized&&(e.element.innerHTML=o(P(e),!0)+`<span class="stream-cursor" aria-hidden="true"></span>`,e.lastRenderTime=performance.now())})}))}function I(e,t=!1){e.isFinalized=!0,e.pendingRAF&&=(cancelAnimationFrame(e.pendingRAF),null);let n=P(e);return t||(e.element.innerHTML=o(n)),n}function L(e){return typeof e.traceSeq==`number`&&Number.isFinite(e.traceSeq)&&e.traceSeq>0}function R(e,t){return!!t.traceRunId&&!!e.traceRunId&&t.traceRunId===e.traceRunId&&L(t)&&L(e)&&t.traceSeq===e.traceSeq&&t.type===e.type&&t.label===e.label&&!!t.isEmployee==!!e.isEmployee}function z(e,t){return t.stepRef&&e.stepRef===t.stepRef?!0:R(e,t)}function B(e,t,n={}){return[...e].reverse().filter(e=>n.includeDone||e.status===`running`).find(e=>z(e,t))??null}function V(e,t){let n=e.filter(e=>e.status===`running`&&!e.stepRef&&e.label===t.label&&e.type===t.type&&!!e.isEmployee==!!t.isEmployee);return n.length===1?n[0]:null}function H(e,t){let n=[...e].reverse().filter(e=>e.status===`running`);return B(n,t)||V(n,t)}function U(){e.currentProcessBlock&&l(e.currentProcessBlock),e.currentAgentDiv instanceof HTMLElement&&l(e.currentAgentDiv),v(),s(),e.currentAgentDiv=null,e.currentProcessBlock=null,q=null}var W=0;function de(){W=Date.now()}function fe(){W=0}function pe(){return Date.now()-W<8e3}function G(e){for(let t of document.querySelectorAll(`.msg-user`))if(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING)return!0;return!1}function K(){let t=e.currentAgentDiv&&e.currentAgentDiv.isConnected?e.currentAgentDiv:null;return t?G(t)?(e.currentAgentDiv=null,e.currentProcessBlock=null,q=null,null):t:null}function me(){let e=Array.from(document.querySelectorAll(`.msg-agent`)).at(-1)??null;return!e||G(e)?null:e}function he(t,n){k();let r=K();if(r||(r=x(`agent`,``),e.currentAgentDiv=r,e.currentProcessBlock=null),b(r),!e.currentProcessBlock){let t=r.querySelector(`.agent-body`);t&&(e.currentProcessBlock=S(r)),!e.currentProcessBlock&&t&&(_(r),e.currentProcessBlock=f(t))}if(n&&e.currentProcessBlock&&!e.currentProcessBlock.startedAt&&(e.currentProcessBlock.startedAt=n),e.currentProcessBlock){let n=t.rawIcon||t.icon,r=t.status||a(t.icon)||`running`;if(r===`done`||r===`error`){let a=H(e.currentProcessBlock.steps,t);if(a){t.icon=i(t.icon);let o=t.type===`thinking`?p(a.id,t.detail):g(a.id,t.detail);d(e.currentProcessBlock,a.id,{...a,...t,id:a.id,rawIcon:n,detail:o,detailPreview:o,label:t.label||a.label,status:r,startTime:a.startTime}),m();return}if(t.stepRef&&(r===`done`||r===`error`)){let a=[...e.currentProcessBlock.steps].reverse().find(e=>e.stepRef===t.stepRef&&(e.status===`done`||e.status===`error`));if(a){t.icon=i(t.icon);let o=t.type===`thinking`?p(a.id,t.detail):g(a.id,t.detail);d(e.currentProcessBlock,a.id,{...a,...t,id:a.id,rawIcon:n,status:r,detail:o,detailPreview:o,startTime:a.startTime}),m();return}}}if(t.stepRef&&r===`running`){let r=[...e.currentProcessBlock.steps].reverse().find(e=>e.stepRef===t.stepRef&&e.status===`running`);if(r){t.rawIcon=n,t.icon=i(t.icon);let a=p(r.id,t.detail);d(e.currentProcessBlock,r.id,{...r,...t,id:r.id,rawIcon:n,status:`running`,detail:a,detailPreview:a,label:t.label||r.label,startTime:r.startTime}),m();return}}let o=B(e.currentProcessBlock.steps,t,{includeDone:!0});if(o){t.rawIcon=n,t.icon=i(t.icon);let a=t.detail||``,s=c(o.id)||o.detail||o.detailPreview||``,l=a.length>=s.length?a:s,u=p(o.id,l),f=(o.status===`done`||o.status===`error`)&&r===`running`?o.status:r;d(e.currentProcessBlock,o.id,{...o,...t,id:o.id,rawIcon:n,status:f,detail:u,detailPreview:u,label:t.label||o.label,startTime:o.startTime}),m();return}if(t.detail){let n=[...e.currentProcessBlock.steps].reverse().find(e=>e.status===`running`&&e.label===t.label&&e.type===t.type&&!!e.isEmployee==!!t.isEmployee&&!e.detail);if(n){d(e.currentProcessBlock,n.id,t),m();return}}t.rawIcon=n,t.icon=i(t.icon),h(e.currentProcessBlock,t)}m()}var q=null,J=`data-active-run-hydrated`;function Y(e){document.querySelectorAll(`[${J}="true"]`).forEach(t=>{e&&t===e||t.remove()})}function ge(e){let t=K()??me();Y(t);let n=t||x(`agent`,``,e||null);return n.setAttribute(J,`true`),n}function _e(e,t){let n=c(e.id)||e.detail||e.detailPreview||``,r=t.detail||t.detailPreview||``;return r.length>=n.length?r:n}function X(e){return e.stepRef?!0:!!e.traceRunId&&typeof e.traceSeq==`number`&&Number.isFinite(e.traceSeq)&&e.traceSeq>0}function ve(e,t){let n=e.steps.filter(e=>!X(e)),r=0,i=!0;for(let a of t){let t=e.steps.find(e=>z(e,a))??null;if(!t&&!X(a)&&i){let e=n[r]??null;e?e.type===a.type&&!!e.isEmployee==!!a.isEmployee?(t=e,r++):i=!1:r++}if(!t){let n=e.steps.filter(e=>e.label===a.label&&e.type===a.type&&!!e.isEmployee==!!a.isEmployee);t=n.length===1?n[0]:null}if(!t){if(h(e,a),!X(a)&&i){let t=e.steps[e.steps.length-1];t&&n.push(t)}continue}let o=p(t.id,_e(t,a));d(e,t.id,{...t,...a,id:t.id,detail:o,detailPreview:o,label:a.label||t.label})}}function ye(e=[]){document.querySelectorAll(`[data-queued-overlay="true"]`).forEach(e=>e.remove())}var Z=``;function be(e){let t=Array.isArray(e.toolLog)?e.toolLog:[],n=t.map(e=>`${e.stepRef||``}~${e.traceRunId||``}~${e.traceSeq??``}~${e.status||``}~${e.label||``}~${(e.detail||``).length}`).join(`|`);return`${e.traceRunId||``}:${e.cli||``}:${(e.text||``).length}:${t.length}:${n}`}function xe(t){if(!t?.running){Z=``,Y();return}let n=be(t);if(n===Z&&K())return;v(),k(),e.currentAgentDiv=ge(t.cli||null);let r=e.currentAgentDiv.querySelector(`.agent-body`),i=E(t.toolLog||[]);b(e.currentAgentDiv),e.currentProcessBlock=S(e.currentAgentDiv),r&&i.length?(e.currentProcessBlock||=(_(e.currentAgentDiv),f(r)),t.startedAt&&(e.currentProcessBlock.startedAt=t.startedAt),ve(e.currentProcessBlock,C(i,t.startedAt))):e.currentProcessBlock=S(e.currentAgentDiv);let a=e.currentAgentDiv.querySelector(`.msg-content`);a&&(q=N(a,t.text||``)),Z=n}function Q(t){if(!t)return;k(),K()||(e.currentAgentDiv=x(`agent`,``),q=null);let n=e.currentAgentDiv?.querySelector(`.msg-content`);n&&(q||=M(n),F(q,t)),m()}var $=0;function Se(e){e.querySelectorAll(`.mermaid-pending`).forEach(e=>{delete e.dataset.mermaidQueued,delete e.dataset.mermaidQueuedAt})}function Ce(t,i){let a=Date.now();if(!e.currentAgentDiv&&a-$<500)return;Z=``,v(),k(),e.currentAgentDiv&&b(e.currentAgentDiv);let s=se(e.currentProcessBlock??e.currentAgentDiv,!0),c=E(D(Array.isArray(i)?i:[],s)),d=w(c),f=!!e.currentProcessBlock||!!(e.currentAgentDiv&&O(e.currentAgentDiv));e.currentProcessBlock&&=(re(e.currentProcessBlock),null);let p=c.length>0;if(t||p){(!e.currentAgentDiv||!e.currentAgentDiv.isConnected)&&(e.currentAgentDiv=x(`agent`,``)),e.currentAgentDiv.removeAttribute(J);let i=e.currentAgentDiv?.querySelector(`.msg-content`),a=q?I(q,!0):``,s=t||a;if(q=null,i&&(i.innerHTML=o(s)),p&&e.currentAgentDiv&&!f&&!O(e.currentAgentDiv)){let t=e.currentAgentDiv.querySelector(`.msg-content`);t&&t.insertAdjacentHTML(`beforebegin`,te(C(c),!0))}e.currentAgentDiv&&b(e.currentAgentDiv),i&&i.setAttribute(`data-raw`,n(s)),i&&ne(i);let m=ee(),h=!!(m.active&&e.currentAgentDiv&&e.currentAgentDiv.isConnected);if(i&&!h&&r(i,{immediate:!0}),h){let t=e.currentAgentDiv;Se(t),t.querySelectorAll(`.diagram-widget`).forEach(e=>{let t=e,n=t.dataset.widgetHtml,r=t.dataset.widgetId;if(!n&&!r)return;let i=document.createElement(`div`);i.className=`diagram-widget-pending`,r?i.dataset.widgetId=r:n&&(i.dataset.diagramHtml=n),e.replaceWith(i)}),d?(m.appendItem(ie({role:`assistant`,content:s,cli:null,tool_log:d},m.count)),l(t),m.scrollToBottom()):(t.dataset.turnIndex=String(m.count),t.dataset.messageId||(t.dataset.messageId=u()),m.appendLiveItem(t)),t.remove()}s&&ce({role:`assistant`,content:s,tool_log:d,timestamp:Date.now()}).catch(()=>{})}q=null,e.currentAgentDiv=null,$=Date.now(),ae(`idle`),T()}function we(e,n){document.querySelectorAll(`.tab-btn`).forEach(e=>{e.classList.remove(`active`),e.setAttribute(`aria-selected`,`false`)}),document.querySelectorAll(`.tab-content`).forEach(e=>e.classList.remove(`active`)),document.getElementById({agents:`tabAgents`,settings:`tabSettings`,skills:`tabSkills`}[e])?.classList.add(`active`),n&&(n.classList.add(`active`),n.setAttribute(`aria-selected`,`true`)),e===`settings`&&t(()=>import(`./settings-CMN-zN4Q.js`).then(e=>e.loadSettings()),__vite__mapDeps([0])),e===`agents`&&t(()=>import(`./employees-BJyEgim7.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0])),e===`skills`&&t(()=>import(`./skills-Dz-9Yrxr.js`).then(e=>e.loadSkills()),__vite__mapDeps([0]))}function Te(){let e=document.getElementById(`tabSettings`)?.classList.contains(`active`);t(()=>import(`./settings-CMN-zN4Q.js`).then(t=>e?t.savePerCli():t.updateSettings()),__vite__mapDeps([0]))}function Ee(){y({onStatus:oe})}export{Ce as a,Ee as c,he as d,we as f,fe as i,pe as l,ye as n,Te as o,U as r,xe as s,Q as t,de as u};
@@ -0,0 +1 @@
1
+ import{p as e}from"./iframe-renderer-B8k3AvTv.js";import{d as t,o as n}from"./message-history-Bw2E_b8L.js";import{r}from"./ui-Bx7eqnXt.js";export{r as cleanupToolActivity,n as loadMessages,e as reconcileChatBottomAfterRestore,t as updateQueueBadge};
@@ -1,2 +1,2 @@
1
- import{A as e,j as t}from"./api-C9dOxby7.js";var n=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]),r={"image/png":`png`,"image/jpeg":`jpg`,"image/webp":`webp`,"image/gif":`gif`},i=/<img\b[^>]*\bsrc=["'](data:(image\/(?:png|jpeg|webp|gif));base64,([^"']+))["'][^>]*>/i,a=/<img\b[^>]*\bsrc=["']([^"']+)["'][^>]*>/i;function o(e){return!!(e&&n.has(e.type))}function s(e,t){if(!n.has(e))return null;try{let n=atob(t.replace(/\s+/g,``)),i=new Uint8Array(n.length);for(let e=0;e<n.length;e+=1)i[e]=n.charCodeAt(e);let a=r[e]??`png`;return new File([i],`pasted-image.${a}`,{type:e})}catch{return console.warn(`[notes-image-paste] Failed to decode clipboard image data URL`),null}}function c(e){if(e.name)return e;let t=r[e.type]??`png`;return new File([e],`pasted-image.${t}`,{type:e.type,lastModified:e.lastModified})}function l(e){if(!e)return null;for(let t of Array.from(e.items??[])){if(t.kind!==`file`||!n.has(t.type))continue;let e=t.getAsFile();if(o(e))return c(e)}for(let t of Array.from(e.files??[]))if(o(t))return c(t);let t=e.getData?.(`text/html`)??``,r=i.exec(t);if(r){let[,,e,t]=r;return s(e,t)}return null}var u=/\.(?:png|jpe?g|gif|webp)$/i;function d(e){let t=e.trim();if(!t)return null;try{let e=new URL(t);return e.protocol!==`http:`&&e.protocol!==`https:`?null:(e.hash=``,e.toString())}catch{return null}}function f(e){try{return u.test(new URL(e).pathname)}catch{return!1}}function p(e){if(!e)return null;let t=e.getData?.(`text/html`)??``,n=a.exec(t);if(n){let e=d(n[1]);if(e&&f(e))return e}let r=e.getData?.(`text/uri-list`)??``;for(let e of r.split(/\r?\n/)){if(!e||e.startsWith(`#`))continue;let t=d(e);if(t&&f(t))return t}let i=d(e.getData?.(`text/plain`)??``);return i&&f(i)?i:null}function m(e){return!!(l(e)||p(e))}function h(e){return e instanceof Error?e:Error(String(e))}var g=5*1024*1024;async function _(e,t){let n=await createImageBitmap(e),r=4096,{width:i,height:a}=n;if(i>r||a>r){let e=r/Math.max(i,a);i=Math.round(i*e),a=Math.round(a*e)}let o=new OffscreenCanvas(i,a),s=o.getContext(`2d`);if(!s)throw Error(`Canvas 2D context unavailable`);s.drawImage(n,0,0,i,a),n.close();let c=e.name.replace(/\.\w+$/,``)+`.jpg`;for(let n of[.85,.7,.5,.3]){let r=await o.convertToBlob({type:`image/jpeg`,quality:n});if(r.size<=t)return new File([r],c,{type:`image/jpeg`,lastModified:e.lastModified})}let l=new OffscreenCanvas(Math.round(i/2),Math.round(a/2)),u=l.getContext(`2d`);if(!u)throw Error(`Canvas 2D context unavailable`);u.drawImage(o,0,0,l.width,l.height);let d=await l.convertToBlob({type:`image/jpeg`,quality:.7});if(d.size>t)throw Error(`Image too large even after compression`);return new File([d],c,{type:`image/jpeg`,lastModified:e.lastModified})}async function v(n,r){let i=l(r),a=i?null:p(r);return!i&&!a?null:(i&&i.size>g&&(i=await _(i,g)),(i?await e(n,i):await t(n,a)).markdown)}function y(e,t,n){let r=`clipboardData`in e?e.clipboardData:e.dataTransfer;if(!m(r))return!1;let i=r?.getData(`text/plain`)??``;return e.preventDefault(),v(n.notePath,r).then(e=>{e&&t.dispatch(t.state.replaceSelection(e))}).catch(e=>{i&&t.dispatch(t.state.replaceSelection(i)),n.onError?.(h(e))}),!0}function b(e,t,n){return y(e,t,n)}var x=20,S=`.md`;function C(e){return e.trim().toLocaleLowerCase()}function w(e){return e.endsWith(S)?e.slice(0,-3):e}function T(e){return w(e.split(`/`).at(-1)||e)}function E(e,t){let n=0;for(let r=t-1;r>=0&&e[r]===`\\`;r--)n++;return n%2==1}function D(e){let t=new Map;for(let n of e){let e=n.title.trim();if(!e)continue;let r=C(e);t.set(r,(t.get(r)??0)+1)}return t}function O(e,t){let n=e.title.trim();return n&&t.get(C(n))===1?n:w(e.path)}function k(e,t){if(!t)return{matchKind:`title`,score:1};let n=C(e.title),r=C(e.path),i=C(T(e.path));if(n===t)return{matchKind:`title`,score:100};if(n.startsWith(t))return{matchKind:`title`,score:90};for(let n of e.aliases){let e=C(n);if(e===t)return{matchKind:`alias`,score:85};if(e.startsWith(t))return{matchKind:`alias`,score:80}}if(i===t)return{matchKind:`path`,score:75};if(i.startsWith(t))return{matchKind:`path`,score:70};if(r.includes(t))return{matchKind:`path`,score:50};for(let n of e.tags){let e=C(n).replace(/^#/,``);if(e===t||e.startsWith(t))return{matchKind:`tag`,score:40}}return null}function A(e){if(!e)return null;let t=e.lastIndexOf(`[[`);for(;t!==-1&&E(e,t);)t=e.lastIndexOf(`[[`,t-1);if(t===-1)return null;let n=t+2,r=e.slice(n);return r.includes(`
1
+ import{A as e,j as t}from"./api-B25zNNFJ.js";var n=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]),r={"image/png":`png`,"image/jpeg":`jpg`,"image/webp":`webp`,"image/gif":`gif`},i=/<img\b[^>]*\bsrc=["'](data:(image\/(?:png|jpeg|webp|gif));base64,([^"']+))["'][^>]*>/i,a=/<img\b[^>]*\bsrc=["']([^"']+)["'][^>]*>/i;function o(e){return!!(e&&n.has(e.type))}function s(e,t){if(!n.has(e))return null;try{let n=atob(t.replace(/\s+/g,``)),i=new Uint8Array(n.length);for(let e=0;e<n.length;e+=1)i[e]=n.charCodeAt(e);let a=r[e]??`png`;return new File([i],`pasted-image.${a}`,{type:e})}catch{return console.warn(`[notes-image-paste] Failed to decode clipboard image data URL`),null}}function c(e){if(e.name)return e;let t=r[e.type]??`png`;return new File([e],`pasted-image.${t}`,{type:e.type,lastModified:e.lastModified})}function l(e){if(!e)return null;for(let t of Array.from(e.items??[])){if(t.kind!==`file`||!n.has(t.type))continue;let e=t.getAsFile();if(o(e))return c(e)}for(let t of Array.from(e.files??[]))if(o(t))return c(t);let t=e.getData?.(`text/html`)??``,r=i.exec(t);if(r){let[,,e,t]=r;return s(e,t)}return null}var u=/\.(?:png|jpe?g|gif|webp)$/i;function d(e){let t=e.trim();if(!t)return null;try{let e=new URL(t);return e.protocol!==`http:`&&e.protocol!==`https:`?null:(e.hash=``,e.toString())}catch{return null}}function f(e){try{return u.test(new URL(e).pathname)}catch{return!1}}function p(e){if(!e)return null;let t=e.getData?.(`text/html`)??``,n=a.exec(t);if(n){let e=d(n[1]);if(e&&f(e))return e}let r=e.getData?.(`text/uri-list`)??``;for(let e of r.split(/\r?\n/)){if(!e||e.startsWith(`#`))continue;let t=d(e);if(t&&f(t))return t}let i=d(e.getData?.(`text/plain`)??``);return i&&f(i)?i:null}function m(e){return!!(l(e)||p(e))}function h(e){return e instanceof Error?e:Error(String(e))}var g=5*1024*1024;async function _(e,t){let n=await createImageBitmap(e),r=4096,{width:i,height:a}=n;if(i>r||a>r){let e=r/Math.max(i,a);i=Math.round(i*e),a=Math.round(a*e)}let o=new OffscreenCanvas(i,a),s=o.getContext(`2d`);if(!s)throw Error(`Canvas 2D context unavailable`);s.drawImage(n,0,0,i,a),n.close();let c=e.name.replace(/\.\w+$/,``)+`.jpg`;for(let n of[.85,.7,.5,.3]){let r=await o.convertToBlob({type:`image/jpeg`,quality:n});if(r.size<=t)return new File([r],c,{type:`image/jpeg`,lastModified:e.lastModified})}let l=new OffscreenCanvas(Math.round(i/2),Math.round(a/2)),u=l.getContext(`2d`);if(!u)throw Error(`Canvas 2D context unavailable`);u.drawImage(o,0,0,l.width,l.height);let d=await l.convertToBlob({type:`image/jpeg`,quality:.7});if(d.size>t)throw Error(`Image too large even after compression`);return new File([d],c,{type:`image/jpeg`,lastModified:e.lastModified})}async function v(n,r){let i=l(r),a=i?null:p(r);return!i&&!a?null:(i&&i.size>g&&(i=await _(i,g)),(i?await e(n,i):await t(n,a)).markdown)}function y(e,t,n){let r=`clipboardData`in e?e.clipboardData:e.dataTransfer;if(!m(r))return!1;let i=r?.getData(`text/plain`)??``;return e.preventDefault(),v(n.notePath,r).then(e=>{e&&t.dispatch(t.state.replaceSelection(e))}).catch(e=>{i&&t.dispatch(t.state.replaceSelection(i)),n.onError?.(h(e))}),!0}function b(e,t,n){return y(e,t,n)}var x=20,S=`.md`;function C(e){return e.trim().toLocaleLowerCase()}function w(e){return e.endsWith(S)?e.slice(0,-3):e}function T(e){return w(e.split(`/`).at(-1)||e)}function E(e,t){let n=0;for(let r=t-1;r>=0&&e[r]===`\\`;r--)n++;return n%2==1}function D(e){let t=new Map;for(let n of e){let e=n.title.trim();if(!e)continue;let r=C(e);t.set(r,(t.get(r)??0)+1)}return t}function O(e,t){let n=e.title.trim();return n&&t.get(C(n))===1?n:w(e.path)}function k(e,t){if(!t)return{matchKind:`title`,score:1};let n=C(e.title),r=C(e.path),i=C(T(e.path));if(n===t)return{matchKind:`title`,score:100};if(n.startsWith(t))return{matchKind:`title`,score:90};for(let n of e.aliases){let e=C(n);if(e===t)return{matchKind:`alias`,score:85};if(e.startsWith(t))return{matchKind:`alias`,score:80}}if(i===t)return{matchKind:`path`,score:75};if(i.startsWith(t))return{matchKind:`path`,score:70};if(r.includes(t))return{matchKind:`path`,score:50};for(let n of e.tags){let e=C(n).replace(/^#/,``);if(e===t||e.startsWith(t))return{matchKind:`tag`,score:40}}return null}function A(e){if(!e)return null;let t=e.lastIndexOf(`[[`);for(;t!==-1&&E(e,t);)t=e.lastIndexOf(`[[`,t-1);if(t===-1)return null;let n=t+2,r=e.slice(n);return r.includes(`
2
2
  `)||r.includes(`]`)||r.includes(`[`)||e.slice(n).includes(`]]`)?null:{from:n,to:e.length,query:r}}function j(e,t){if(t<0||t>e.length)return null;let n=A(e.slice(0,t));if(!n)return null;let r=e.slice(t,t+2)===`]]`;return{...n,to:n.to+(r?2:0),hasClosingSuffix:r}}function M(e,t,n=x){let r=C(t),i=D(e),a=[];for(let t of e){let e=k(t,r);e&&a.push({path:t.path,title:t.title,aliases:t.aliases,tags:t.tags,insertText:O(t,i),matchKind:e.matchKind,score:e.score})}return a.sort((e,t)=>t.score-e.score||e.title.localeCompare(t.title)||e.path.localeCompare(t.path)).slice(0,n)}function N(e){return`${e.insertText}]]`}export{y as a,b as i,j as n,v as o,M as r,m as s,N as t};
@@ -31,9 +31,9 @@
31
31
  href="https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@400;500;600;700&family=Outfit:wght@400;500;600;700&display=swap"
32
32
  rel="stylesheet">
33
33
  <!-- Vite handles module bundling in dev (HMR) and production (build) -->
34
- <script type="module" crossorigin src="/dist/assets/app-BzD_ZLvt.js"></script>
34
+ <script type="module" crossorigin src="/dist/assets/app-Dsgp4xpU.js"></script>
35
35
  <link rel="stylesheet" crossorigin href="/dist/assets/vendor-render-Bjnw0wQ6.css">
36
- <link rel="stylesheet" crossorigin href="/dist/assets/app-DX4e6isX.css">
36
+ <link rel="stylesheet" crossorigin href="/dist/assets/app-DjgGeXhJ.css">
37
37
  </head>
38
38
 
39
39
  <body>
@@ -574,7 +574,7 @@
574
574
  <span class="slack-step-num">1</span>
575
575
  <div class="slack-step-body">
576
576
  <div class="slack-step-title" data-i18n="settings.slack.guide.step1Title">Slack 앱 만들기</div>
577
- <div class="slack-step-desc" data-i18n="settings.slack.guide.step1Desc">Create an App → From an app manifest → 워크스페이스 선택 → 붙여넣기</div>
577
+ <div class="slack-step-desc" data-i18n="settings.slack.guide.step1Desc">Create an App → From an app manifest → 워크스페이스 선택 → 붙여넣기 (기존 앱은 files:read 추가)</div>
578
578
  <div class="slack-step-actions">
579
579
  <button id="slack-copy-manifest" class="perm-btn" type="button" data-i18n="settings.slack.guide.copyManifest">매니페스트 복사</button>
580
580
  <button id="slack-open-apps" class="perm-btn" type="button" data-i18n="settings.slack.guide.openApps">앱 페이지 열기</button>
@@ -585,7 +585,7 @@
585
585
  <span class="slack-step-num">2</span>
586
586
  <div class="slack-step-body">
587
587
  <div class="slack-step-title" data-i18n="settings.slack.guide.step2Title">봇 토큰 붙여넣기</div>
588
- <div class="slack-step-desc" data-i18n="settings.slack.guide.step2Desc">앱 설정 → OAuth &amp; Permissions → Install to Workspace → Bot User OAuth Token 복사</div>
588
+ <div class="slack-step-desc" data-i18n="settings.slack.guide.step2Desc">앱 설정 → OAuth &amp; Permissions → files:read 확인 → Reinstall to Workspace → Bot User OAuth Token 복사</div>
589
589
  <input type="password" id="slBotToken" placeholder="xoxb-..." class="input-sm">
590
590
  <div class="slack-field-error" id="slack-bot-token-error" style="display:none" data-i18n="settings.slack.guide.botTokenError">xoxb-로 시작하는 봇 토큰이어야 합니다</div>
591
591
  </div>