fengming 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. package/CHANGELOG.md +3 -3
  2. package/README.md +78 -450
  3. package/dist/{agent-harness-runtime-COzAFcQB.d.ts → agent-harness-runtime-CJcPjBmT.d.ts} +1 -1
  4. package/dist/{agent-runtime-1czICFwC.d.ts → agent-runtime-nmjdhJEE.d.ts} +2 -2
  5. package/dist/agents/embedded-agent-runner/run/runtime-context-prompt.d.ts +1 -1
  6. package/dist/agents/embedded-agent-runner/tool-split.d.ts +1 -1
  7. package/dist/auto-reply/reply/commands-crestodian.d.ts +1 -1
  8. package/dist/build-info.json +2 -2
  9. package/dist/{bundled-channel-config-schema-DpdKMATU.d.ts → bundled-channel-config-schema-CmLwx9HX.d.ts} +36 -36
  10. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  11. package/dist/{channel-core-XgBI6Jc1.d.ts → channel-core-DaPUw6Je.d.ts} +1 -1
  12. package/dist/{channel-entry-contract-Da7x7SAM.d.ts → channel-entry-contract-W06RQ3IX.d.ts} +1 -1
  13. package/dist/{channel-pairing-ZPcuQOLk.d.ts → channel-pairing-tHLwK3ka.d.ts} +1 -1
  14. package/dist/cli-startup-metadata.json +8 -8
  15. package/dist/{commands-BapTBcjM.d.ts → commands-DpE2lL8e.d.ts} +1 -1
  16. package/dist/{commands-types-DA_yRXQe.d.ts → commands-types-BOSpkqdA.d.ts} +1 -1
  17. package/dist/{config-schema-Cy-B9tFb.d.ts → config-schema-Kd5OzZGL.d.ts} +1 -1
  18. package/dist/control-ui/assets/{activity-CQDZlvlv.js → activity-0AnFM1pt.js} +2 -2
  19. package/dist/control-ui/assets/{agents-wUgG33N_.js → agents-DMcgU9w9.js} +39 -33
  20. package/dist/control-ui/assets/{channel-config-extras-DEnhuQfF.js → channel-config-extras-Cnty6sJP.js} +2 -2
  21. package/dist/control-ui/assets/{channels-DgmnVztj.js → channels-BIjF291a.js} +2 -2
  22. package/dist/control-ui/assets/{cron-D6RebRs_.js → cron-gyAzSB5C.js} +9 -9
  23. package/dist/control-ui/assets/{debug-DXlIrEz5.js → debug-CNnIMqYL.js} +2 -2
  24. package/dist/control-ui/assets/i18n-COx0mMoe.js +2 -0
  25. package/dist/control-ui/assets/{index-Cai2STXi.js → index-D5d_SwnF.js} +166 -156
  26. package/dist/control-ui/assets/{instances-34XIx8zZ.js → instances-CcPo2WpS.js} +2 -2
  27. package/dist/control-ui/assets/{logs-FvE0QuC6.js → logs-D7YSLRvz.js} +3 -3
  28. package/dist/control-ui/assets/{nodes-BQqP_Fco.js → nodes-8OSr5IQB.js} +37 -37
  29. package/dist/control-ui/assets/{push-subscription-D0l8kKQw.js → push-subscription-SK4PlhIV.js} +2 -2
  30. package/dist/control-ui/assets/{sessions-BOQ1YpmX.js → sessions-CRXERFxi.js} +3 -3
  31. package/dist/control-ui/assets/{skills-BqKUfTXv.js → skills-DcnRqwFx.js} +27 -27
  32. package/dist/control-ui/assets/skills-shared-KvN3lpfP.js +11 -0
  33. package/dist/control-ui/assets/{workboard-bmN4DclT.js → workboard-QBQBDBPN.js} +2 -2
  34. package/dist/control-ui/index.html +2 -2
  35. package/dist/control-ui/sw.js +1 -1
  36. package/dist/{core-BzDoBdiK.d.ts → core-7YGuWGGY.d.ts} +1 -1
  37. package/dist/crestodian/rescue-message.d.ts +1 -1
  38. package/dist/{delegate-D8dnnPTh.d.ts → delegate-BKwD9QpK.d.ts} +1 -1
  39. package/dist/{embedded-agent-tGt_IO2X.d.ts → embedded-agent-B_uQRTM0.d.ts} +1 -1
  40. package/dist/entry.d.ts +1 -1
  41. package/dist/extensionAPI.d.ts +2 -2
  42. package/dist/extensions/active-memory/index.d.ts +1 -1
  43. package/dist/extensions/admin-http-rpc/index.d.ts +1 -1
  44. package/dist/extensions/alibaba/index.d.ts +1 -1
  45. package/dist/extensions/baichuan/index.d.ts +1 -1
  46. package/dist/extensions/bonjour/index.d.ts +1 -1
  47. package/dist/extensions/browser/cli-metadata.d.ts +1 -1
  48. package/dist/extensions/browser/index.d.ts +1 -1
  49. package/dist/extensions/browser/plugin-registration.d.ts +1 -1
  50. package/dist/extensions/browser/register.runtime.d.ts +2 -2
  51. package/dist/extensions/browser/runtime-api.d.ts +3 -3
  52. package/dist/extensions/browser/setup-api.d.ts +1 -1
  53. package/dist/extensions/byteplus/index.d.ts +1 -1
  54. package/dist/extensions/byteplus/provider-discovery.d.ts +1 -1
  55. package/dist/extensions/canvas/cli-metadata.d.ts +1 -1
  56. package/dist/extensions/canvas/index.d.ts +1 -1
  57. package/dist/extensions/canvas/setup-api.d.ts +1 -1
  58. package/dist/extensions/deepseek/api.d.ts +1 -1
  59. package/dist/extensions/deepseek/index.d.ts +1 -1
  60. package/dist/extensions/deepseek/provider-discovery.d.ts +1 -1
  61. package/dist/extensions/deepseek/provider-policy-api.d.ts +1 -1
  62. package/dist/extensions/deepseek/stream.d.ts +1 -1
  63. package/dist/extensions/deepseek/thinking.d.ts +1 -1
  64. package/dist/extensions/device-pair/api.d.ts +3 -3
  65. package/dist/extensions/device-pair/index.d.ts +1 -1
  66. package/dist/extensions/device-pair/notify.d.ts +1 -1
  67. package/dist/extensions/longcat/index.d.ts +1 -1
  68. package/dist/extensions/memory-core/api.d.ts +1 -1
  69. package/dist/extensions/memory-core/cli-metadata.d.ts +1 -1
  70. package/dist/extensions/memory-core/index.d.ts +1 -1
  71. package/dist/extensions/memory-core/manager-runtime.d.ts +1 -1
  72. package/dist/extensions/memory-core/runtime-api.d.ts +2 -2
  73. package/dist/extensions/minimax/index.d.ts +1 -1
  74. package/dist/extensions/minimax/provider-contract-api.d.ts +1 -1
  75. package/dist/extensions/minimax/provider-discovery.d.ts +1 -1
  76. package/dist/extensions/minimax/provider-registration.d.ts +1 -1
  77. package/dist/extensions/minimax/speech-provider.d.ts +1 -1
  78. package/dist/extensions/minimax/web-search-contract-api.d.ts +1 -1
  79. package/dist/extensions/minimax/web-search-provider.d.ts +1 -1
  80. package/dist/extensions/moonshot/index.d.ts +1 -1
  81. package/dist/extensions/moonshot/provider-contract-api.d.ts +1 -1
  82. package/dist/extensions/moonshot/provider-discovery.d.ts +1 -1
  83. package/dist/extensions/moonshot/web-search-contract-api.d.ts +1 -1
  84. package/dist/extensions/moonshot/web-search-provider.d.ts +1 -1
  85. package/dist/extensions/qianfan/index.d.ts +1 -1
  86. package/dist/extensions/qwen/api.d.ts +1 -1
  87. package/dist/extensions/qwen/index.d.ts +1 -1
  88. package/dist/extensions/qwen/stream.d.ts +1 -1
  89. package/dist/extensions/sensenova/index.d.ts +1 -1
  90. package/dist/extensions/skill-workshop/api.d.ts +2 -2
  91. package/dist/extensions/skill-workshop/index.d.ts +1 -1
  92. package/dist/extensions/stepfun/index.d.ts +1 -1
  93. package/dist/extensions/tavily/index.d.ts +1 -1
  94. package/dist/extensions/tavily/web-search-contract-api.d.ts +1 -1
  95. package/dist/extensions/tavily/web-search-provider.d.ts +1 -1
  96. package/dist/extensions/tencent/index.d.ts +1 -1
  97. package/dist/extensions/tencent/provider-discovery.d.ts +1 -1
  98. package/dist/extensions/thread-ownership/api.d.ts +2 -2
  99. package/dist/extensions/thread-ownership/index.d.ts +1 -1
  100. package/dist/extensions/tiangong/index.d.ts +1 -1
  101. package/dist/extensions/volcengine/index.d.ts +1 -1
  102. package/dist/extensions/volcengine/provider-discovery.d.ts +1 -1
  103. package/dist/extensions/volcengine/speech-provider.d.ts +1 -1
  104. package/dist/extensions/webhooks/api.d.ts +2 -2
  105. package/dist/extensions/webhooks/index.d.ts +1 -1
  106. package/dist/extensions/webhooks/runtime-api.d.ts +1 -1
  107. package/dist/extensions/weixin/index.d.ts +1 -1
  108. package/dist/extensions/workboard/api.d.ts +2 -2
  109. package/dist/extensions/workboard/index.d.ts +1 -1
  110. package/dist/extensions/workboard/runtime-api.d.ts +1 -1
  111. package/dist/extensions/xiaomi/index.d.ts +1 -1
  112. package/dist/extensions/xiaomi/speech-provider.d.ts +1 -1
  113. package/dist/extensions/xiaomi/stream.d.ts +1 -1
  114. package/dist/extensions/xiaomi/thinking.d.ts +1 -1
  115. package/dist/extensions/xingchen/index.d.ts +1 -1
  116. package/dist/extensions/yi/index.d.ts +1 -1
  117. package/dist/extensions/zai/index.d.ts +1 -1
  118. package/dist/extensions/zhinao/index.d.ts +1 -1
  119. package/dist/{fengming-runtime-DHPxVr6f.d.ts → fengming-runtime-C-e5uAWU.d.ts} +1 -1
  120. package/dist/gateway/protocol/index.d.ts +1 -1
  121. package/dist/{host-compat-TRE1-NIe.d.ts → host-compat-D2ZmxxiQ.d.ts} +1 -1
  122. package/dist/{plugin-sdk/http-registry-BniL_epL.d.ts → http-registry-DJLRFFA3.d.ts} +2 -2
  123. package/dist/{index-DhOQs6M_.d.ts → index-zAqPF2YS.d.ts} +78 -78
  124. package/dist/{loader-C7-pVnXN.d.ts → loader-BBk0D_wC.d.ts} +2 -2
  125. package/dist/{manager-B4RbKdxw.d.ts → manager-CKJulXDU.d.ts} +3 -3
  126. package/dist/{plugin-sdk/memory-core-host-engine-storage-DYPjOQCg.d.ts → memory-core-host-engine-storage-BLYSHe5j.d.ts} +1 -1
  127. package/dist/{plugin-entry-BQwto-H7.d.ts → plugin-entry-Dn3yAjFL.d.ts} +1 -1
  128. package/dist/{plugin-runtime-D6-SBOmj.d.ts → plugin-runtime-BPNrZxQB.d.ts} +1 -1
  129. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  130. package/dist/plugin-sdk/agent-config-primitives.d.ts +1 -1
  131. package/dist/plugin-sdk/{agent-harness-runtime-CgQiThzm.d.ts → agent-harness-runtime-Bkrjji63.d.ts} +2 -2
  132. package/dist/plugin-sdk/agent-harness-runtime.d.ts +4 -4
  133. package/dist/plugin-sdk/agent-harness-task-runtime.d.ts +1 -1
  134. package/dist/plugin-sdk/agent-harness.d.ts +4 -4
  135. package/dist/plugin-sdk/agent-runtime.d.ts +1 -1
  136. package/dist/plugin-sdk/{bundled-channel-config-schema-CEdFwQa3.d.ts → bundled-channel-config-schema-Ck8L7M3c.d.ts} +27 -27
  137. package/dist/plugin-sdk/bundled-channel-config-schema.d.ts +3 -3
  138. package/dist/plugin-sdk/channel-config-primitives.d.ts +2 -2
  139. package/dist/plugin-sdk/channel-config-schema-legacy.d.ts +3 -3
  140. package/dist/plugin-sdk/channel-config-schema.d.ts +2 -2
  141. package/dist/plugin-sdk/channel-core.d.ts +3 -3
  142. package/dist/plugin-sdk/channel-entry-contract.d.ts +1 -1
  143. package/dist/plugin-sdk/{channel-pairing-CX6ncj1r.d.ts → channel-pairing-CzsPAHgH.d.ts} +1 -1
  144. package/dist/plugin-sdk/channel-pairing.d.ts +1 -1
  145. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  146. package/dist/plugin-sdk/cli-backend.d.ts +1 -1
  147. package/dist/plugin-sdk/compat.d.ts +6 -6
  148. package/dist/plugin-sdk/{config-schema-D7cABQ6o.d.ts → config-schema-DUddICQM.d.ts} +1 -1
  149. package/dist/plugin-sdk/{config-schema-DuJUjn6k.d.ts → config-schema-N64y7n8C.d.ts} +1 -1
  150. package/dist/plugin-sdk/config-schema.d.ts +9 -9
  151. package/dist/plugin-sdk/{core-CPtu2Ftl.d.ts → core-BWZB2hNB.d.ts} +1 -1
  152. package/dist/plugin-sdk/core.d.ts +8 -8
  153. package/dist/plugin-sdk/{delegate-uk6vAMkc.d.ts → delegate-o5xckIuc.d.ts} +1 -1
  154. package/dist/plugin-sdk/discord.d.ts +4 -4
  155. package/dist/plugin-sdk/{fengming-runtime-Dt2ZEVYX.d.ts → fengming-runtime-abXAXyq2.d.ts} +1 -1
  156. package/dist/plugin-sdk/gateway-runtime.d.ts +1 -1
  157. package/dist/plugin-sdk/{host-compat-CM0h9ODw.d.ts → host-compat-D2Ky8seZ.d.ts} +1 -1
  158. package/dist/{http-registry-DVTzBlBL.d.ts → plugin-sdk/http-registry-oxJbX3E-.d.ts} +2 -2
  159. package/dist/plugin-sdk/image-generation-core.d.ts +4 -4
  160. package/dist/plugin-sdk/image-generation-runtime.d.ts +3 -3
  161. package/dist/plugin-sdk/index.d.ts +4 -4
  162. package/dist/plugin-sdk/lmstudio.d.ts +1 -1
  163. package/dist/plugin-sdk/{loader-aELh60PE.d.ts → loader-CgJhYjxT.d.ts} +3 -3
  164. package/dist/plugin-sdk/{logger-BpB3--7Z.d.ts → logger-CyDIBtoX.d.ts} +1 -1
  165. package/dist/plugin-sdk/logging-core.d.ts +3 -3
  166. package/dist/plugin-sdk/memory-core-host-engine-embeddings.d.ts +2 -2
  167. package/dist/plugin-sdk/memory-core-host-engine-foundation.d.ts +3 -3
  168. package/dist/{memory-core-host-engine-storage-BBHT1228.d.ts → plugin-sdk/memory-core-host-engine-storage-DfW7ZqD0.d.ts} +1 -1
  169. package/dist/plugin-sdk/memory-core-host-engine-storage.d.ts +1 -1
  170. package/dist/plugin-sdk/memory-core-host-runtime-cli.d.ts +1 -1
  171. package/dist/plugin-sdk/memory-core-host-runtime-core.d.ts +3 -3
  172. package/dist/plugin-sdk/memory-core.d.ts +3 -3
  173. package/dist/plugin-sdk/memory-host-core.d.ts +3 -3
  174. package/dist/plugin-sdk/migration-runtime.d.ts +1 -1
  175. package/dist/plugin-sdk/migration.d.ts +1 -1
  176. package/dist/plugin-sdk/music-generation-core.d.ts +2 -2
  177. package/dist/plugin-sdk/{plugin-entry-DO9kQeTr.d.ts → plugin-entry-C9xM-ZA9.d.ts} +1 -1
  178. package/dist/plugin-sdk/plugin-entry.d.ts +3 -3
  179. package/dist/plugin-sdk/plugin-runtime.d.ts +3 -3
  180. package/dist/plugin-sdk/{provider-api-key-auth-DvIiojS6.d.ts → provider-api-key-auth-DOmYPTC2.d.ts} +1 -1
  181. package/dist/plugin-sdk/provider-auth-api-key.d.ts +4 -4
  182. package/dist/plugin-sdk/{provider-auth-helpers-CYkWZ0vq.d.ts → provider-auth-helpers-pqDNrZTd.d.ts} +1 -1
  183. package/dist/plugin-sdk/{provider-auth-input-DUV6ZTw4.d.ts → provider-auth-input-Ckt-cU4H.d.ts} +1 -1
  184. package/dist/plugin-sdk/provider-auth-result.d.ts +1 -1
  185. package/dist/plugin-sdk/provider-auth-runtime.d.ts +1 -1
  186. package/dist/plugin-sdk/provider-auth.d.ts +5 -5
  187. package/dist/plugin-sdk/provider-catalog-runtime.d.ts +2 -2
  188. package/dist/plugin-sdk/{provider-catalog-shared-Cm3SyFfL.d.ts → provider-catalog-shared-QvOT8Wz1.d.ts} +1 -1
  189. package/dist/plugin-sdk/provider-catalog-shared.d.ts +2 -2
  190. package/dist/plugin-sdk/provider-entry.d.ts +3 -3
  191. package/dist/plugin-sdk/{provider-model-shared-D5rgn7Gb.d.ts → provider-model-shared-Bnc8IMx5.d.ts} +1 -1
  192. package/dist/plugin-sdk/provider-model-shared.d.ts +2 -2
  193. package/dist/plugin-sdk/{provider-registry-DxdZT9UN.d.ts → provider-registry-Ba1nNfhA.d.ts} +1 -1
  194. package/dist/plugin-sdk/{provider-registry-DiKX35tc.d.ts → provider-registry-CqB5bSAD.d.ts} +1 -1
  195. package/dist/plugin-sdk/{provider-registry-D0vmhPWL.d.ts → provider-registry-CxdVib8g.d.ts} +1 -1
  196. package/dist/plugin-sdk/{provider-self-hosted-setup-BPx7JMDC.d.ts → provider-self-hosted-setup-eMoeVPnF.d.ts} +1 -1
  197. package/dist/plugin-sdk/provider-setup.d.ts +2 -2
  198. package/dist/plugin-sdk/{provider-stream-DcC2vn_N.d.ts → provider-stream-CGaLae9n.d.ts} +1 -1
  199. package/dist/plugin-sdk/provider-stream-family.d.ts +2 -2
  200. package/dist/plugin-sdk/{provider-stream-shared-ByDv3QKm.d.ts → provider-stream-shared-u5mt-8_i.d.ts} +1 -1
  201. package/dist/plugin-sdk/provider-stream-shared.d.ts +1 -1
  202. package/dist/plugin-sdk/provider-stream.d.ts +2 -2
  203. package/dist/plugin-sdk/provider-tools.d.ts +1 -1
  204. package/dist/plugin-sdk/provider-web-fetch-contract.d.ts +1 -1
  205. package/dist/plugin-sdk/provider-web-fetch.d.ts +1 -1
  206. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  207. package/dist/plugin-sdk/{provider-web-search-contract-fields-CY4v8kS-.d.ts → provider-web-search-contract-fields-BiWOSs_d.d.ts} +1 -1
  208. package/dist/plugin-sdk/provider-web-search-contract.d.ts +2 -2
  209. package/dist/plugin-sdk/provider-web-search.d.ts +1 -1
  210. package/dist/plugin-sdk/realtime-transcription.d.ts +1 -1
  211. package/dist/plugin-sdk/realtime-voice.d.ts +1 -1
  212. package/dist/plugin-sdk/{redact-identifier-CVwkabcI.d.ts → redact-identifier-CVqsKaEK.d.ts} +1 -1
  213. package/dist/plugin-sdk/{registry-CzaGoAKH.d.ts → registry-Gq9OFlb3.d.ts} +2 -2
  214. package/dist/plugin-sdk/{registry-types-DN1yiH3F.d.ts → registry-types-DyBkef1H.d.ts} +2 -2
  215. package/dist/plugin-sdk/reply-runtime.d.ts +1 -1
  216. package/dist/plugin-sdk/runtime-env.d.ts +3 -3
  217. package/dist/plugin-sdk/runtime-store.d.ts +1 -1
  218. package/dist/plugin-sdk/runtime.d.ts +3 -3
  219. package/dist/plugin-sdk/self-hosted-provider-setup.d.ts +2 -2
  220. package/dist/plugin-sdk/simple-completion-runtime.d.ts +1 -1
  221. package/dist/plugin-sdk/speech-core.d.ts +2 -2
  222. package/dist/plugin-sdk/speech.d.ts +2 -2
  223. package/dist/plugin-sdk/{subsystem-n4Y4vCcQ.d.ts → subsystem-Boo2DQIV.d.ts} +1 -1
  224. package/dist/plugin-sdk/text-runtime.d.ts +2 -2
  225. package/dist/plugin-sdk/tool-plugin.d.ts +2 -2
  226. package/dist/plugin-sdk/tts-runtime.d.ts +1 -1
  227. package/dist/plugin-sdk/{types-BI8R-vGd.d.ts → types-DGF1KeaJ.d.ts} +2 -2
  228. package/dist/plugin-sdk/{types-CsqNt0j8.d.ts → types-DpaN54PS.d.ts} +1 -1
  229. package/dist/plugin-sdk/{unhandled-rejections-D9eBl3hT.d.ts → unhandled-rejections-Bez6JG0y.d.ts} +2 -2
  230. package/dist/plugin-sdk/video-generation-core.d.ts +3 -3
  231. package/dist/plugin-sdk/video-generation-runtime.d.ts +3 -3
  232. package/dist/plugin-sdk/webhook-ingress.d.ts +1 -1
  233. package/dist/plugin-sdk/webhook-targets.d.ts +1 -1
  234. package/dist/plugin-sdk/{zod-schema.core-CwBNqcXp.d.ts → zod-schema.core-B4_b2R5K.d.ts} +1 -1
  235. package/dist/{plugin-service-Cy3vwSOn.d.ts → plugin-service-BMh62dvU.d.ts} +1 -1
  236. package/dist/plugins/build-smoke-entry.d.ts +2 -2
  237. package/dist/plugins/loader.d.ts +1 -1
  238. package/dist/plugins/provider-discovery.runtime.d.ts +1 -1
  239. package/dist/plugins/provider-runtime.runtime.d.ts +1 -1
  240. package/dist/plugins/runtime/index.d.ts +1 -1
  241. package/dist/plugins/tools.d.ts +1 -1
  242. package/dist/postinstall-inventory.json +96 -96
  243. package/dist/{provider-api-key-auth-BjKfGyov.d.ts → provider-api-key-auth-CtAGRL44.d.ts} +1 -1
  244. package/dist/{provider-auth-result-Sw1OUu-6.d.ts → provider-auth-result-DUS0m_dV.d.ts} +1 -1
  245. package/dist/{provider-catalog-shared-Ben2I52T.d.ts → provider-catalog-shared-mfno7279.d.ts} +1 -1
  246. package/dist/{provider-model-shared-wM5TV9Ng.d.ts → provider-model-shared-DfASEDB4.d.ts} +1 -1
  247. package/dist/{provider-registry-Dw-5Wvsm.d.ts → provider-registry-8UqxuZ2l.d.ts} +1 -1
  248. package/dist/{provider-registry-BcmSY6e9.d.ts → provider-registry-B74ybVvw.d.ts} +1 -1
  249. package/dist/{provider-registry-BDPo5BwZ.d.ts → provider-registry-EtWPUX-T.d.ts} +1 -1
  250. package/dist/{provider-self-hosted-setup-CdXS5o8C.d.ts → provider-self-hosted-setup-BXzjhUnt.d.ts} +1 -1
  251. package/dist/{provider-stream-CKC-5yIb.d.ts → provider-stream-DR7L8ceW.d.ts} +1 -1
  252. package/dist/{provider-stream-shared-B9I1_R5G.d.ts → provider-stream-shared-x7Ei7uU4.d.ts} +1 -1
  253. package/dist/{provider-web-search-contract-fields-DWCNJ1gv.d.ts → provider-web-search-contract-fields-CubPutml.d.ts} +1 -1
  254. package/dist/{registry-CzLplYy2.d.ts → registry-1OENNRXe.d.ts} +2 -2
  255. package/dist/{registry-types-bZ9DUzsh.d.ts → registry-types-BkTarHZm.d.ts} +1 -1
  256. package/dist/{runtime-api-6AzCGq2r.d.ts → runtime-api-j5jsKtgF.d.ts} +1 -1
  257. package/dist/{speech-core-1E_gItrL.d.ts → speech-core-BlfIRsk6.d.ts} +1 -1
  258. package/dist/{stream-B1XWAwSd.d.ts → stream-BY4pOmRj.d.ts} +1 -1
  259. package/dist/{stream-Uhap3Hwe.d.ts → stream-DERSd5-u.d.ts} +1 -1
  260. package/dist/subagent-registry.runtime.d.ts +1 -1
  261. package/dist/{tool-split-CS-CUjRP.d.ts → tool-split-BwedOn6_.d.ts} +1 -1
  262. package/dist/{tools-CxCS74tx.d.ts → tools-AKxYCcU9.d.ts} +1 -1
  263. package/dist/{tts-runtime-C_HPu4L6.d.ts → tts-runtime-BtJfNI35.d.ts} +3 -3
  264. package/dist/{types-C2ceowXy.d.ts → types-CO5pZ_C_.d.ts} +1 -1
  265. package/dist/{types-DOqKczfg.d.ts → types-Zun8SVqO.d.ts} +1 -1
  266. package/dist/web-fetch/runtime.d.ts +1 -1
  267. package/dist/{webhook-targets-BNv1WgAl.d.ts → webhook-targets-Dnrjxo22.d.ts} +1 -1
  268. package/dist/{zod-schema.core-Cuz0lz6m.d.ts → zod-schema.core-BGLctDlK.d.ts} +1 -1
  269. package/package.json +2 -1
  270. package/dist/control-ui/assets/i18n-BTde16Gb.js +0 -2
  271. package/dist/control-ui/assets/skills-shared-C_ebnwLL.js +0 -11
@@ -1,7 +1,7 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./agents-wUgG33N_.js","./lit-runtime-DA0-mbwP.js","./markdown-runtime-C9Jq8Bu5.js","./rolldown-runtime-QTnfLwEv.js","./string-coerce-BuYUxt7q.js","./i18n-BTde16Gb.js","./channel-config-extras-DEnhuQfF.js","./skills-shared-C_ebnwLL.js","./activity-CQDZlvlv.js","./channels-DgmnVztj.js","./cron-D6RebRs_.js","./debug-DXlIrEz5.js","./instances-34XIx8zZ.js","./logs-FvE0QuC6.js","./nodes-BQqP_Fco.js","./sessions-BOQ1YpmX.js","./skills-BqKUfTXv.js","./workboard-bmN4DclT.js","./push-subscription-D0l8kKQw.js"])))=>i.map(i=>d[i]);
2
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{a as t,c as n,d as r,f as i,h as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,s as p,u as m}from"./lit-runtime-DA0-mbwP.js";import{a as h,i as g,n as _,r as v,t as y}from"./i18n-BTde16Gb.js";import{i as b,n as x,r as S,t as C}from"./gateway-runtime-CMyVbEq5.js";import{n as w,r as T,t as E}from"./string-coerce-BuYUxt7q.js";import{n as D,r as O,t as ee}from"./config-runtime-CCw2hptH.js";import{_ as k,a as te,c as A,d as j,f as M,g as N,h as P,i as F,l as ne,m as re,n as ie,o as ae,p as oe,r as se,s as ce,t as le,u as I,v as ue}from"./markdown-runtime-C9Jq8Bu5.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();function de(e){if(typeof e==`string`)return e.trim()||void 0}function fe(e){if(!Array.isArray(e))return;let t=e.map(e=>de(e)).filter(e=>!!e);return t.length>0?t:void 0}var L={AUTH_REQUIRED:`AUTH_REQUIRED`,AUTH_UNAUTHORIZED:`AUTH_UNAUTHORIZED`,AUTH_TOKEN_MISSING:`AUTH_TOKEN_MISSING`,AUTH_TOKEN_MISMATCH:`AUTH_TOKEN_MISMATCH`,AUTH_TOKEN_NOT_CONFIGURED:`AUTH_TOKEN_NOT_CONFIGURED`,AUTH_PASSWORD_MISSING:`AUTH_PASSWORD_MISSING`,AUTH_PASSWORD_MISMATCH:`AUTH_PASSWORD_MISMATCH`,AUTH_PASSWORD_NOT_CONFIGURED:`AUTH_PASSWORD_NOT_CONFIGURED`,AUTH_BOOTSTRAP_TOKEN_INVALID:`AUTH_BOOTSTRAP_TOKEN_INVALID`,AUTH_DEVICE_TOKEN_MISMATCH:`AUTH_DEVICE_TOKEN_MISMATCH`,AUTH_SCOPE_MISMATCH:`AUTH_SCOPE_MISMATCH`,AUTH_RATE_LIMITED:`AUTH_RATE_LIMITED`,AUTH_TAILSCALE_IDENTITY_MISSING:`AUTH_TAILSCALE_IDENTITY_MISSING`,AUTH_TAILSCALE_PROXY_MISSING:`AUTH_TAILSCALE_PROXY_MISSING`,AUTH_TAILSCALE_WHOIS_FAILED:`AUTH_TAILSCALE_WHOIS_FAILED`,AUTH_TAILSCALE_IDENTITY_MISMATCH:`AUTH_TAILSCALE_IDENTITY_MISMATCH`,CONTROL_UI_ORIGIN_NOT_ALLOWED:`CONTROL_UI_ORIGIN_NOT_ALLOWED`,PROTOCOL_MISMATCH:`PROTOCOL_MISMATCH`,CONTROL_UI_DEVICE_IDENTITY_REQUIRED:`CONTROL_UI_DEVICE_IDENTITY_REQUIRED`,DEVICE_IDENTITY_REQUIRED:`DEVICE_IDENTITY_REQUIRED`,DEVICE_AUTH_INVALID:`DEVICE_AUTH_INVALID`,DEVICE_AUTH_DEVICE_ID_MISMATCH:`DEVICE_AUTH_DEVICE_ID_MISMATCH`,DEVICE_AUTH_SIGNATURE_EXPIRED:`DEVICE_AUTH_SIGNATURE_EXPIRED`,DEVICE_AUTH_NONCE_REQUIRED:`DEVICE_AUTH_NONCE_REQUIRED`,DEVICE_AUTH_NONCE_MISMATCH:`DEVICE_AUTH_NONCE_MISMATCH`,DEVICE_AUTH_SIGNATURE_INVALID:`DEVICE_AUTH_SIGNATURE_INVALID`,DEVICE_AUTH_PUBLIC_KEY_INVALID:`DEVICE_AUTH_PUBLIC_KEY_INVALID`,PAIRING_REQUIRED:`PAIRING_REQUIRED`,CLIENT_VERSION_MISMATCH:`CLIENT_VERSION_MISMATCH`},pe={NOT_PAIRED:`not-paired`,ROLE_UPGRADE:`role-upgrade`,SCOPE_UPGRADE:`scope-upgrade`,METADATA_UPGRADE:`metadata-upgrade`},me=new Set([`retry_with_device_token`,`update_auth_configuration`,`update_auth_credentials`,`wait_then_retry`,`review_auth_configuration`]),he=new Set([`not-paired`,`role-upgrade`,`scope-upgrade`,`metadata-upgrade`]),ge=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/,_e={"not-paired":{requirement:`device is not approved yet`,remediationHint:`Approve this device from the pending pairing requests.`,recoveryTitle:`Gateway pairing approval required.`},"role-upgrade":{requirement:`device is asking for a higher role than currently approved`,remediationHint:`Review the requested role upgrade, then approve the pending request.`,recoveryTitle:`Gateway role upgrade approval required.`},"scope-upgrade":{requirement:`device is asking for more scopes than currently approved`,remediationHint:`Review the requested scopes, then approve the pending upgrade.`,recoveryTitle:`Gateway scope upgrade approval required.`},"metadata-upgrade":{requirement:`device identity changed and must be re-approved`,remediationHint:`Review the refreshed device details, then approve the pending request.`,recoveryTitle:`Gateway device refresh approval required.`}},ve={"not-paired":`device pairing required`,"role-upgrade":`role upgrade pending approval`,"scope-upgrade":`scope upgrade pending approval`,"metadata-upgrade":`device metadata change pending approval`};function ye(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e.code;return typeof t==`string`&&t.trim().length>0?t:null}function be(e){if(!e||typeof e!=`object`||Array.isArray(e))return{};let t=e,n=typeof t.canRetryWithDeviceToken==`boolean`?t.canRetryWithDeviceToken:void 0,r=de(t.recommendedNextStep)??``;return{canRetryWithDeviceToken:n,recommendedNextStep:me.has(r)?r:void 0}}function xe(e){let t=de(e)??``;return he.has(t)?t:void 0}function Se(e){let t=de(e);return t&&ge.test(t)?t:void 0}function Ce(e){return fe(e)}function we(e){return{code:L.PAIRING_REQUIRED,...e.reason?{reason:e.reason}:{},...e.requestId?{requestId:e.requestId}:{},...e.remediationHint?{remediationHint:e.remediationHint}:{},...e.recommendedNextStep?{recommendedNextStep:e.recommendedNextStep}:{},...e.retryable===void 0?{}:{retryable:e.retryable},...e.pauseReconnect===void 0?{}:{pauseReconnect:e.pauseReconnect},...e.deviceId?{deviceId:e.deviceId}:{},...e.requestedRole?{requestedRole:e.requestedRole}:{},...e.requestedScopes?{requestedScopes:e.requestedScopes}:{},...e.approvedRoles?{approvedRoles:e.approvedRoles}:{},...e.approvedScopes?{approvedScopes:e.approvedScopes}:{}}}function Te(e){return e?_e[e].requirement:`device approval is required`}function Ee(e){return e?_e[e].remediationHint:`Approve the pending device request before retrying.`}function De(e){if(ye(e)!==L.PAIRING_REQUIRED||!e||typeof e!=`object`||Array.isArray(e))return null;let t=e,n=xe(t.reason),r=Se(t.requestId),i=de(t.remediationHint)??Ee(n),a=de(t.recommendedNextStep)??``,o=me.has(a)?a:void 0,s=de(t.deviceId),c=de(t.requestedRole),l=Ce(t.requestedScopes),u=Ce(t.approvedRoles),d=Ce(t.approvedScopes);return we({reason:n,requestId:r,remediationHint:i,recommendedNextStep:o,retryable:typeof t.retryable==`boolean`?t.retryable:void 0,pauseReconnect:typeof t.pauseReconnect==`boolean`?t.pauseReconnect:void 0,deviceId:s,requestedRole:c,requestedScopes:l,approvedRoles:u,approvedScopes:d})}function Oe(e){let t=de(e);if(!t)return null;let n=t.trim().toLowerCase(),r;for(let[e,t]of Object.entries(ve))if(n.includes(t)){r=e;break}if(!r&&n.includes(`pairing required`)&&(r=pe.NOT_PAIRED),!r)return null;let i=Se(t.match(/\(requestId:\s*([^\s)]+)\)/i)?.[1]);return{...i?{requestId:i}:{},reason:r}}function ke(e){let t=De(e),n=ve[t?.reason??pe.NOT_PAIRED];return t?.requestId?`${n} (requestId: ${t.requestId})`:n}function Ae(e){return ye(e.details)===L.PAIRING_REQUIRED?ke(e.details):ye(e.details)===L.PROTOCOL_MISMATCH?je(e.message,e.details):de(e.message)??`gateway request failed`}function je(e,t){let n=t,r=Me(n.clientMinProtocol),i=Me(n.clientMaxProtocol),a=Me(n.expectedProtocol),o=Me(n.minimumProbeProtocol),s=[];r!==void 0&&i!==void 0&&s.push(r===i?`Control UI v${r}`:`Control UI v${r}-v${i}`),a!==void 0&&s.push(`Gateway v${a}`),o!==void 0&&s.push(`probe min v${o}`);let c=de(e)??`protocol mismatch`;return s.length>0?`${c}: ${s.join(`, `)}`:c}function Me(e){return typeof e==`number`&&Number.isInteger(e)&&e>0?e:void 0}var Ne={WEBCHAT_UI:`webchat-ui`,CONTROL_UI:`fengming-control-ui`,TUI:`fengming-tui`,WEBCHAT:`webchat`,CLI:`cli`,GATEWAY_CLIENT:`gateway-client`,MACOS_APP:`fengming-macos`,IOS_APP:`fengming-ios`,ANDROID_APP:`fengming-android`,NODE_HOST:`node-host`,TEST:`test`,FINGERPRINT:`fingerprint`,PROBE:`fengming-probe`},Pe=Ne,Fe={WEBCHAT:`webchat`,CLI:`cli`,UI:`ui`,BACKEND:`backend`,NODE:`node`,PROBE:`probe`,TEST:`test`};new Set(Object.values(Ne)),new Set(Object.values(Fe));var Ie=100,Le=2e3;function Re(e){return typeof e==`object`&&!!e&&e.reason===`startup-sidecars`}function ze(e){if(!e||typeof e!=`object`)return!1;let t=e;return(t.gatewayCode??t.code)===`UNAVAILABLE`&&t.retryable===!0&&Re(t.details)}function Be(e){if(!ze(e))return null;let t=e.retryAfterMs;return Math.min(Math.max(Math.floor(typeof t==`number`&&Number.isFinite(t)?t:500),Ie),Le)}function Ve(e){let t=e.scopes.join(`,`),n=e.token??``;return[`v2`,e.deviceId,e.clientId,e.clientMode,e.role,t,String(e.signedAtMs),n,e.nonce].join(`|`)}function He(e){return e.trim()}function Ue(e){if(!Array.isArray(e))return[];let t=new Set;for(let n of e){if(typeof n!=`string`)continue;let e=n.trim();e&&t.add(e)}return t.has(`operator.admin`)?(t.add(`operator.read`),t.add(`operator.write`)):t.has(`operator.write`)&&t.add(`operator.read`),[...t].toSorted()}function We(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ge(e){return We(e)?e:void 0}function Ke(e){return e&&typeof e==`object`?e:void 0}function qe(e,t){if(!We(t)||typeof t.token!=`string`)return null;let n=typeof t.updatedAtMs==`number`&&Number.isFinite(t.updatedAtMs)?t.updatedAtMs:0;return{token:t.token,role:e,scopes:Ue(Array.isArray(t.scopes)?t.scopes:void 0),updatedAtMs:n}}function Je(e){let t={};for(let[n,r]of Object.entries(e)){let e=He(n);if(!e)continue;let i=qe(e,r);i&&(t[e]=i)}return t}function Ye(e){let t=e.adapter.readStore();if(!t||t.deviceId!==e.deviceId)return null;let n=He(e.role);return qe(n,t.tokens[n])}function Xe(e){let t=He(e.role),n=e.adapter.readStore(),r={version:1,deviceId:e.deviceId,tokens:n&&n.deviceId===e.deviceId&&n.tokens?Je(n.tokens):{}},i={token:e.token,role:t,scopes:Ue(e.scopes),updatedAtMs:Date.now()};return r.tokens[t]=i,e.adapter.writeStore(r),i}function Ze(e){let t=e.adapter.readStore();if(!t||t.deviceId!==e.deviceId)return;let n=He(e.role);if(!t.tokens[n])return;let r={version:1,deviceId:t.deviceId,tokens:Je(t.tokens)};delete r.tokens[n],e.adapter.writeStore(r)}function Qe(e){return!!e&&typeof e.getItem==`function`&&typeof e.setItem==`function`}function $e(e){let t=Object.getOwnPropertyDescriptor(globalThis,e);if(typeof process<`u`&&{}.VITEST)return t&&!t.get&&Qe(t.value)?t.value:null;if(typeof window<`u`&&typeof document<`u`)try{let t=window[e];return Qe(t)?t:null}catch{return null}return t&&!t.get&&Qe(t.value)?t.value:null}function et(){return $e(`localStorage`)}function tt(){return $e(`sessionStorage`)}var nt=`fengming.device.auth.v1`;function rt(){try{let e=et()?.getItem(nt);if(!e)return null;let t=JSON.parse(e);return!t||t.version!==1||!t.deviceId||typeof t.deviceId!=`string`||!t.tokens||typeof t.tokens!=`object`?null:t}catch{return null}}function it(e){try{et()?.setItem(nt,JSON.stringify(e))}catch{}}function at(e){return Ye({adapter:{readStore:rt,writeStore:it},deviceId:e.deviceId,role:e.role})}function ot(e){return Xe({adapter:{readStore:rt,writeStore:it},deviceId:e.deviceId,role:e.role,token:e.token,scopes:e.scopes})}function st(e){Ze({adapter:{readStore:rt,writeStore:it},deviceId:e.deviceId,role:e.role})}var ct=`fengming-device-identity-v1`;function lt(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replaceAll(`+`,`-`).replaceAll(`/`,`_`).replace(/=+$/g,``)}function ut(e){let t=e.replaceAll(`-`,`+`).replaceAll(`_`,`/`),n=t+`=`.repeat((4-t.length%4)%4),r=atob(n),i=new Uint8Array(r.length);for(let e=0;e<r.length;e+=1)i[e]=r.charCodeAt(e);return i}function dt(e){return Array.from(e).map(e=>e.toString(16).padStart(2,`0`)).join(``)}async function ft(e){let t=await crypto.subtle.digest(`SHA-256`,e.slice().buffer);return dt(new Uint8Array(t))}async function pt(){let e=b.randomSecretKey(),t=await x(e);return{deviceId:await ft(t),publicKey:lt(t),privateKey:lt(e)}}async function mt(){let e=et();try{let t=e?.getItem(ct);if(t){let n=JSON.parse(t);if(n?.version===1&&typeof n.deviceId==`string`&&typeof n.publicKey==`string`&&typeof n.privateKey==`string`){let t=await ft(ut(n.publicKey));if(t!==n.deviceId){let r={...n,deviceId:t};return e?.setItem(ct,JSON.stringify(r)),{deviceId:t,publicKey:n.publicKey,privateKey:n.privateKey}}return{deviceId:n.deviceId,publicKey:n.publicKey,privateKey:n.privateKey}}}}catch{}let t=await pt(),n={version:1,deviceId:t.deviceId,publicKey:t.publicKey,privateKey:t.privateKey,createdAtMs:Date.now()};return e?.setItem(ct,JSON.stringify(n)),t}async function ht(e,t){let n=ut(e);return lt(await S(new TextEncoder().encode(t),n))}var gt=!1;function _t(e){e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=``;for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,`0`);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}function vt(){gt||(gt=!0,console.warn(`[uuid] crypto API missing; refusing insecure UUID generation`))}function yt(e=globalThis.crypto){if(e&&typeof e.randomUUID==`function`)return e.randomUUID();if(e&&typeof e.getRandomValues==`function`){let t=new Uint8Array(16);return e.getRandomValues(t),_t(t)}throw vt(),Error(`Web Crypto is required for UUID generation`)}var bt=class extends Error{constructor(e){super(Ae({message:e.message,details:xt(e.message,e.details)})),this.name=`GatewayRequestError`,this.gatewayCode=e.code,this.details=e.details,this.retryable=e.retryable===!0,this.retryAfterMs=e.retryAfterMs}};function xt(e,t){return ye(t)===L.PROTOCOL_MISMATCH||!e?.toLowerCase().includes(`protocol mismatch`)?t:{code:L.PROTOCOL_MISMATCH,clientMinProtocol:4,clientMaxProtocol:4,...t&&typeof t==`object`&&!Array.isArray(t)?t:{}}}function St(e){return ye(e?.details)}function Ct(e){let t=De(e);return t?.pauseReconnect===!1||t?.recommendedNextStep===`wait_then_retry`}function wt(e){if(!e)return!1;let t=St(e);return t===L.PAIRING_REQUIRED&&Ct(e.details)?!1:t===L.AUTH_TOKEN_MISSING||t===L.AUTH_BOOTSTRAP_TOKEN_INVALID||t===L.AUTH_PASSWORD_MISSING||t===L.AUTH_PASSWORD_MISMATCH||t===L.AUTH_RATE_LIMITED||t===L.AUTH_DEVICE_TOKEN_MISMATCH||t===L.AUTH_SCOPE_MISMATCH||t===L.PAIRING_REQUIRED||t===L.CONTROL_UI_DEVICE_IDENTITY_REQUIRED||t===L.DEVICE_IDENTITY_REQUIRED}function Tt(e){let t=e.split(`.`);return t.length!==4||t[0]!==`127`?!1:t.every(e=>{if(!/^\d+$/.test(e))return!1;let t=Number(e);return t>=0&&t<=255})}function Et(e){try{let t=new URL(e,window.location.href),n=t.hostname.trim().toLowerCase(),r=n===`localhost`||n===`::1`||n===`[::1]`,i=Tt(n);if(r||i)return!0;let a=new URL(window.location.href);return t.host===a.host}catch{return!1}}var Dt=`operator`,Ot=[`operator.admin`,`operator.read`,`operator.write`,`operator.approvals`,`operator.pairing`],kt=4008,At=4013,jt=1006,Mt=`BROWSER_WEBSOCKET_CONSTRUCTOR_ERROR`,Nt=`BROWSER_WEBSOCKET_SECURITY_ERROR`;function Pt(e){let t=e.authToken;if(t||e.authPassword)return{token:t,deviceToken:e.authDeviceToken??e.resolvedDeviceToken,password:e.authPassword}}function Ft(e){return e instanceof Error&&e.message?e.message:String(e)}function It(e){if(e instanceof Error&&e.name)return e.name;if(e&&typeof e==`object`&&`name`in e){let t=e.name;return typeof t==`string`&&t.trim()?t:void 0}}function Lt(e){let t=It(e)?.toLowerCase(),n=Ft(e).toLowerCase();return t===`securityerror`||n.includes(`security error`)||n.includes(`mixed content`)||n.includes(`insecure websocket`)}function Rt(e,t){let n=Lt(e),r=Ft(e),i=t.trim().toLowerCase().startsWith(`ws://`);return n?{code:Nt,message:`Browser refused the Gateway WebSocket for security reasons.`+(i?` Use wss:// when the Control UI is served over HTTPS/Tailscale Serve, or open the loopback dashboard at http://127.0.0.1:18789.`:` Check the Gateway WebSocket URL and browser security policy.`),details:{code:Nt,browserErrorName:It(e),browserMessage:r}}:{code:Mt,message:`Could not create the Gateway WebSocket: ${r}`,details:{code:Mt,browserErrorName:It(e),browserMessage:r}}}function zt(e){return e.storedToken&&(e.resolvedDeviceToken===e.storedToken||e.authDeviceToken===e.storedToken)&&e.storedScopes&&e.storedScopes.length>0?[...e.storedScopes]:[...Ot]}async function Bt(e){let{deviceIdentity:t}=e;if(!t)return;let n=Date.now(),r=e.connectNonce??``,i=Ve({deviceId:t.deviceId,clientId:e.client.id,clientMode:e.client.mode,role:e.role,scopes:e.scopes,signedAtMs:n,token:e.authToken??null,nonce:r}),a=await ht(t.privateKey,i);return{id:t.deviceId,publicKey:t.publicKey,signature:a,signedAt:n,nonce:r}}function Vt(e){return!e.deviceTokenRetryBudgetUsed&&!e.authDeviceToken&&!!e.explicitGatewayToken&&!!e.deviceIdentity&&!!e.storedToken&&e.canRetryWithDeviceTokenHint&&Et(e.url)}var Ht=class{constructor(e){this.opts=e,this.ws=null,this.pending=new Map,this.closed=!1,this.lastSeq=null,this.connectNonce=null,this.connectSent=!1,this.connectTimer=null,this.connectGeneration=0,this.backoffMs=800,this.pendingDeviceTokenRetry=!1,this.deviceTokenRetryBudgetUsed=!1,this.pendingStartupReconnectDelayMs=null,this.eventListeners=new Set}start(){this.closed=!1,this.connect()}stop(){this.closed=!0,this.clearConnectTimer(),this.ws?.close(),this.ws=null,this.pendingConnectError=void 0,this.pendingDeviceTokenRetry=!1,this.deviceTokenRetryBudgetUsed=!1,this.pendingStartupReconnectDelayMs=null,this.flushPending(Error(`网关客户端已停止`))}get connected(){return this.ws?.readyState===WebSocket.OPEN}connect(){if(this.closed)return;let e;try{e=new WebSocket(this.opts.url)}catch(e){let t=Rt(e,this.opts.url);this.ws=null,this.pendingConnectError=void 0,this.pendingDeviceTokenRetry=!1,this.pendingStartupReconnectDelayMs=null,this.flushPending(Error(t.message)),this.opts.onClose?.({code:jt,reason:t.code===Nt?`security error`:`websocket error`,error:t});return}let t=++this.connectGeneration;this.ws=e,e.addEventListener(`open`,()=>this.queueConnect(e,t)),e.addEventListener(`message`,n=>{this.isActiveSocket(e,t)&&this.handleMessage(e,t,String(n.data??``))}),e.addEventListener(`close`,t=>{if(this.ws!==e)return;let n=t.reason??``,r=this.pendingConnectError;if(this.pendingConnectError=void 0,this.ws=null,this.pendingStartupReconnectDelayMs!==null){this.flushPending(Error(`gateway closed (${t.code}): ${n}`)),this.scheduleReconnect();return}if(this.flushPending(Error(`gateway closed (${t.code}): ${n}`)),this.opts.onClose?.({code:t.code,reason:n,error:r}),St(r)===L.AUTH_TOKEN_MISMATCH){this.pendingDeviceTokenRetry&&this.scheduleReconnect();return}wt(r)||this.scheduleReconnect()}),e.addEventListener(`error`,()=>{})}scheduleReconnect(){if(this.closed)return;let e=this.pendingStartupReconnectDelayMs;this.pendingStartupReconnectDelayMs=null;let t=e??this.backoffMs;e===null&&(this.backoffMs=Math.min(this.backoffMs*1.7,15e3)),this.clearConnectTimer(),this.connectTimer=window.setTimeout(()=>{this.connectTimer=null,this.connect()},t)}flushPending(e){for(let[t,n]of this.pending)this.emitRequestTiming(t,n,!1,`CLIENT_CLOSED`),n.reject(e);this.pending.clear()}nowMs(){return typeof performance<`u`&&typeof performance.now==`function`?performance.now():Date.now()}emitRequestTiming(e,t,n,r){let i=this.nowMs();try{this.opts.onRequestTiming?.({id:e,method:t.method,ok:n,durationMs:Math.max(0,i-t.startedAtMs),startedAtMs:t.startedAtMs,endedAtMs:i,errorCode:r})}catch(e){console.error(`[gateway] request timing handler error:`,e)}}buildConnectClient(){return{id:this.opts.clientName??Pe.CONTROL_UI,version:this.opts.clientVersion??`control-ui`,platform:this.opts.platform??navigator.platform??`web`,mode:this.opts.mode??Fe.WEBCHAT,instanceId:this.opts.instanceId}}buildConnectParams(e){return{minProtocol:4,maxProtocol:4,client:e.client,role:e.role,scopes:e.scopes,device:e.device,caps:[`tool-events`],auth:e.auth,userAgent:navigator.userAgent,locale:navigator.language}}async buildConnectPlan(e){let t=Dt,n=this.buildConnectClient(),r=this.opts.token?.trim()||void 0,i=this.opts.password?.trim()||void 0,a=typeof crypto<`u`&&!!crypto.subtle,o=null,s={authToken:r,authPassword:i,canFallbackToShared:!1};a&&(o=await mt(),s=this.selectConnectAuth({role:t,deviceId:o.deviceId}));let c=zt(s);return{role:t,scopes:c,client:n,explicitGatewayToken:r,selectedAuth:s,auth:Pt(s),deviceIdentity:o,device:await Bt({deviceIdentity:o,client:n,role:t,scopes:c,authToken:s.authToken,connectNonce:e})}}handleConnectHello(e,t,n,r){this.isActiveSocket(n,r)&&(this.pendingDeviceTokenRetry=!1,this.deviceTokenRetryBudgetUsed=!1,this.pendingStartupReconnectDelayMs=null,e?.auth?.deviceToken&&t.deviceIdentity&&ot({deviceId:t.deviceIdentity.deviceId,role:e.auth.role??t.role,token:e.auth.deviceToken,scopes:e.auth.scopes??[]}),this.backoffMs=800,this.opts.onHello?.(e))}handleConnectFailure(e,t,n,r){if(!this.isActiveSocket(n,r))return;let i=e instanceof bt?St(e):null,a=e instanceof bt?be(e.details):{},o=a.recommendedNextStep===`retry_with_device_token`,s=a.canRetryWithDeviceToken===!0||o||i===L.AUTH_TOKEN_MISMATCH;Vt({deviceTokenRetryBudgetUsed:this.deviceTokenRetryBudgetUsed,authDeviceToken:t.selectedAuth.authDeviceToken,explicitGatewayToken:t.explicitGatewayToken,deviceIdentity:t.deviceIdentity,storedToken:t.selectedAuth.storedToken,canRetryWithDeviceTokenHint:s,url:this.opts.url})&&(this.pendingDeviceTokenRetry=!0,this.deviceTokenRetryBudgetUsed=!0),e instanceof bt?this.pendingConnectError={code:e.gatewayCode,message:e.message,details:e.details,retryable:e.retryable,retryAfterMs:e.retryAfterMs}:this.pendingConnectError=void 0,t.selectedAuth.storedToken&&(t.selectedAuth.resolvedDeviceToken===t.selectedAuth.storedToken||t.selectedAuth.authDeviceToken===t.selectedAuth.storedToken)&&t.deviceIdentity&&i===L.AUTH_DEVICE_TOKEN_MISMATCH&&st({deviceId:t.deviceIdentity.deviceId,role:t.role});let c=Be(e);if(c!==null&&(this.pendingStartupReconnectDelayMs=c),ze(e)){n.close(At,`gateway starting`);return}n.close(kt,`connect failed`)}isActiveSocket(e,t){return!this.closed&&this.ws===e&&this.connectGeneration===t}async sendConnect(e,t){if(!this.isActiveSocket(e,t)||e.readyState!==WebSocket.OPEN||this.connectSent)return;this.connectSent=!0,this.clearConnectTimer();let n=await this.buildConnectPlan(this.connectNonce);!this.isActiveSocket(e,t)||e.readyState!==WebSocket.OPEN||(this.pendingDeviceTokenRetry&&n.selectedAuth.authDeviceToken&&(this.pendingDeviceTokenRetry=!1),this.requestOnSocket(e,`connect`,this.buildConnectParams(n)).then(r=>this.handleConnectHello(r,n,e,t)).catch(r=>this.handleConnectFailure(r,n,e,t)))}handleMessage(e,t,n){let r;try{r=JSON.parse(n)}catch{return}let i=r;if(i.type===`event`){let n=r;if(n.event===`connect.challenge`){let r=n.payload,i=r&&typeof r.nonce==`string`?r.nonce:null;i&&(this.connectNonce=i,this.sendConnect(e,t));return}let i=typeof n.seq==`number`?n.seq:null;i!==null&&(this.lastSeq!==null&&i>this.lastSeq+1&&this.opts.onGap?.({expected:this.lastSeq+1,received:i}),this.lastSeq=i);try{this.opts.onEvent?.(n);for(let e of this.eventListeners)e(n)}catch(e){console.error(`[gateway] event handler error:`,e)}return}if(i.type===`res`){let e=r,t=this.pending.get(e.id);if(!t)return;this.pending.delete(e.id),e.ok?(this.emitRequestTiming(e.id,t,!0),t.resolve(e.payload)):(this.emitRequestTiming(e.id,t,!1,e.error?.code),t.reject(new bt({code:e.error?.code??`UNAVAILABLE`,message:e.error?.message??`request failed`,details:e.error?.details,retryable:e.error?.retryable,retryAfterMs:e.error?.retryAfterMs})));return}}selectConnectAuth(e){let t=this.opts.token?.trim()||void 0,n=this.opts.password?.trim()||void 0,r=at({deviceId:e.deviceId,role:e.role}),i=r?.scopes??[],a=e.role!==Dt||i.includes(`operator.read`)||i.includes(`operator.write`)||i.includes(`operator.admin`)?r?.token:void 0,o=this.pendingDeviceTokenRetry&&!!t&&!!a&&Et(this.opts.url),s=t||n?void 0:a??void 0;return{authToken:t??s,authDeviceToken:o?a??void 0:void 0,authPassword:n,resolvedDeviceToken:s,storedToken:a??void 0,storedScopes:r?.scopes??void 0,canFallbackToShared:!!(a&&t)}}request(e,t){return!this.ws||this.ws.readyState!==WebSocket.OPEN?Promise.reject(Error(`网关未连接`)):this.requestOnSocket(this.ws,e,t)}requestOnSocket(e,t,n){if(this.ws!==e||e.readyState!==WebSocket.OPEN)return Promise.reject(Error(`网关未连接`));let r=yt(),i={type:`req`,id:r,method:t,params:n},a=this.nowMs(),o=new Promise((e,n)=>{this.pending.set(r,{resolve:t=>e(t),reject:n,method:t,startedAtMs:a})});return e.send(JSON.stringify(i)),o}addEventListener(e){return this.eventListeners.add(e),()=>{this.eventListeners.delete(e)}}queueConnect(e,t){this.isActiveSocket(e,t)&&(this.connectNonce=null,this.connectSent=!1,this.clearConnectTimer(),this.connectTimer=window.setTimeout(()=>{this.connectTimer=null,this.sendConnect(e,t)},750))}clearConnectTimer(){this.connectTimer!==null&&(window.clearTimeout(this.connectTimer),this.connectTimer=null)}};function Ut(e){return e instanceof bt?St(e)===L.AUTH_UNAUTHORIZED?!0:e.message.includes(`missing scope: operator.read`):!1}function Wt(e){return`This connection is missing operator.read, so ${e} cannot be loaded yet.`}function Gt(e){return new Promise(t=>setTimeout(()=>t(`timeout`),e))}async function Kt(e,t,n={}){if(!e.client||!e.connected||e.channelsLoading&&(!e.channelsLoadingProbe||t))return;let r=(e.channelsRefreshSeq??0)+1;e.channelsRefreshSeq=r,e.channelsLoading=!0,e.channelsLoadingProbe=t,e.channelsError=null;let i=(async()=>{try{let n=await e.client.request(`channels.status`,{probe:t,timeoutMs:8e3});if(e.channelsRefreshSeq!==r)return;e.channelsSnapshot=n,e.channelsLastSuccess=Date.now()}catch(t){if(e.channelsRefreshSeq!==r)return;Ut(t)?(e.channelsSnapshot=null,e.channelsError=Wt(`channel status`)):e.channelsError=String(t)}finally{e.channelsRefreshSeq===r&&(e.channelsLoading=!1,e.channelsLoadingProbe=null)}})(),a=n.softTimeoutMs;if(typeof a==`number`&&a>0)return await Promise.race([i.then(()=>`done`),Gt(a)]),void 0;await i}function qt(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.prototype.toString.call(e)===`[object Object]`}var Jt=new Set([`__proto__`,`prototype`,`constructor`]);function Yt(e){return Jt.has(e)}function Xt(e){return qt(e)?typeof e.id==`string`&&e.id.length>0:!1}function Zt(e,t,n){if(!e.every(Xt))return;let r=[...e],i=new Map;for(let[e,t]of r.entries()){if(!Xt(t))return;i.set(t.id,e)}for(let e of t){if(!Xt(e)){r.push(structuredClone(e));continue}let t=i.get(e.id);if(t===void 0){r.push(structuredClone(e)),i.set(e.id,r.length-1);continue}r[t]=Qt(r[t],e,n)}return r}function Qt(e,t,n={}){if(!qt(t))return t;let r=qt(e)?{...e}:{};for(let[e,i]of Object.entries(t))if(!Yt(e)){if(i===null){delete r[e];continue}if(n.mergeObjectArraysById&&Array.isArray(r[e])&&Array.isArray(i)){let t=Zt(r[e],i,n);if(t){r[e]=t;continue}}if(qt(i)){let t=r[e];r[e]=Qt(qt(t)?t:{},i,n);continue}r[e]=i}return r}function $t(e){return(e??[]).map(e=>T(String(e))??``).filter(Boolean)}function en(e){return[...new Set(e)]}function tn(e){return en(e)}function nn(e){return tn(e).toSorted((e,t)=>e<t?-1:+(e>t))}function rn(e){if(e)return Array.isArray(e.type)?e.type.find(e=>e!==`null`)??e.type[0]:e.type}function an(e){if(!e)return``;if(e.default!==void 0)return e.default;switch(rn(e)){case`object`:return{};case`array`:return[];case`boolean`:return!1;case`number`:case`integer`:return 0;case`string`:return``;default:return``}}function on(e){return e.filter(e=>typeof e==`string`).join(`.`)}function sn(e,t){let n=t[on(e)];if(n)return n;let r=e.map(String);for(let[e,n]of Object.entries(t)){if(!e.includes(`*`))continue;let t=e.split(`.`);if(t.length!==r.length)continue;let i=!0;for(let e=0;e<r.length;e+=1)if(t[e]!==`*`&&t[e]!==r[e]){i=!1;break}if(i)return n}}function cn(e){return e.replace(/_/g,` `).replace(/([a-z0-9])([A-Z])/g,`$1 $2`).replace(/\s+/g,` `).replace(/^./,e=>e.toUpperCase())}var ln=[`maxtokens`,`maxoutputtokens`,`maxinputtokens`,`maxcompletiontokens`,`contexttokens`,`totaltokens`,`tokencount`,`tokenlimit`,`tokenbudget`,`passwordfile`],un=[/token$/i,/password/i,/secret/i,/api.?key/i,/serviceaccount(?:ref)?$/i],dn=/^\$\{[^}]*\}$/,fn=`[redacted - click reveal to view]`,pn=64,mn=2e4;function hn(){return{visited:0}}function gn(e,t){return!(t>pn||(e.visited+=1,e.visited>mn))}function _n(e){return dn.test(e.trim())}function vn(e){let t=E(e);return!ln.some(e=>t.endsWith(e))&&un.some(t=>t.test(e))}function yn(e){return typeof e==`string`?e.trim().length>0&&!_n(e):e!=null}function bn(e){return e?.sensitive??!1}function xn(e,t,n){return Sn(e,t,n,hn(),0)}function Sn(e,t,n,r,i){if(!gn(r,i))return!0;let a=on(t);return(bn(sn(t,n))||vn(a))&&yn(e)?!0:Array.isArray(e)?e.some((e,a)=>Sn(e,[...t,a],n,r,i+1)):e&&typeof e==`object`?Object.entries(e).some(([e,a])=>Sn(a,[...t,e],n,r,i+1)):!1}function Cn(e,t,n){return wn(e,t,n,hn(),0)}function wn(e,t,n,r,i){if(!gn(r,i))return 1;if(e==null)return 0;let a=on(t);return(bn(sn(t,n))||vn(a))&&yn(e)?1:Array.isArray(e)?e.reduce((e,a,o)=>e+wn(a,[...t,o],n,r,i+1),0):e&&typeof e==`object`?Object.entries(e).reduce((e,[a,o])=>e+wn(o,[...t,a],n,r,i+1),0):0}function Tn(e,t){let n=e.trim();if(n===``)return;let r=Number(n);return!Number.isFinite(r)||t&&!Number.isInteger(r)?e:r}function En(e){let t=e.trim();return t===`true`?!0:t===`false`?!1:e}function Dn(e,t){if(e==null)return e;if(t.allOf&&t.allOf.length>0){let n=e;for(let e of t.allOf)n=Dn(n,e);return n}let n=rn(t);if(t.anyOf||t.oneOf){let n=(t.anyOf??t.oneOf??[]).filter(e=>!(e.type===`null`||Array.isArray(e.type)&&e.type.includes(`null`)));if(n.length===1)return Dn(e,n[0]);if(typeof e==`string`)for(let t of n){let n=rn(t);if(n===`number`||n===`integer`){let t=Tn(e,n===`integer`);if(t===void 0||typeof t==`number`)return t}if(n===`boolean`){let t=En(e);if(typeof t==`boolean`)return t}}for(let t of n){let n=rn(t);if(n===`object`&&typeof e==`object`&&!Array.isArray(e)||n===`array`&&Array.isArray(e))return Dn(e,t)}return e}if(n===`number`||n===`integer`){if(typeof e==`string`){let t=Tn(e,n===`integer`);if(t===void 0||typeof t==`number`)return t}return e}if(n===`boolean`){if(typeof e==`string`){let t=En(e);if(typeof t==`boolean`)return t}return e}if(n===`string`)return typeof e==`string`&&e.length===0&&t.minLength?void 0:e;if(n===`object`){if(typeof e!=`object`||Array.isArray(e))return e;let n=e,r=t.properties??{},i=t.additionalProperties&&typeof t.additionalProperties==`object`?t.additionalProperties:null,a={};for(let[e,t]of Object.entries(n)){let n=r[e]??i,o=n?Dn(t,n):t;o!==void 0&&(a[e]=o)}return a}if(n===`array`){if(!Array.isArray(e))return e;if(Array.isArray(t.items)){let n=t.items;return e.map((e,t)=>{let r=t<n.length?n[t]:void 0;return r?Dn(e,r):e})}let n=t.items;return n?e.map(e=>Dn(e,n)).filter(e=>e!==void 0):e}return e}function On(e){return structuredClone(e)}function kn(e){return`${JSON.stringify(e,null,2).trimEnd()}\n`}var An=`__FENGMING_REDACTED__`,jn={omitted:!0};function Mn(e){return{omitted:!1,value:e}}function Nn(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Pn(e,t){return e!=null&&Object.prototype.hasOwnProperty.call(e,t)}function Fn(e){if(e.value===An)return e.originalFormValue!==An||e.originalRawPathExists?Mn(e.value):e.canOmit?jn:Mn(e.value);if(Array.isArray(e.value)){let t=Array.isArray(e.originalFormValue)?e.originalFormValue:[],n=Array.isArray(e.originalRawValue)?e.originalRawValue:[];return Mn(e.value.map((e,r)=>{let i=Fn({value:e,originalFormValue:t[r],originalRawValue:n[r],originalRawPathExists:r in n,canOmit:!1});return i.omitted?e:i.value}))}if(!Nn(e.value))return Mn(e.value);let t=Nn(e.originalFormValue)?e.originalFormValue:null,n=Nn(e.originalRawValue)?e.originalRawValue:null,r={};for(let[i,a]of Object.entries(e.value)){let e=t!=null&&Object.prototype.hasOwnProperty.call(t,i)?t[i]:void 0,o=Pn(n,i),s=Fn({value:a,originalFormValue:e,originalRawValue:o?n?.[i]:void 0,originalRawPathExists:o,canOmit:!0});s.omitted||(r[i]=s.value)}return e.canOmit&&Object.keys(r).length===0&&!e.originalRawPathExists?jn:Mn(r)}function In(e,t,n){if(!t||!n)return e;let r;try{r=O.parse(n)}catch{return e}if(!Nn(r))return e;let i=Fn({value:e,originalFormValue:t,originalRawValue:r,originalRawPathExists:!0,canOmit:!1});return!i.omitted&&Nn(i.value)?i.value:e}var Ln=new Set([`__proto__`,`prototype`,`constructor`]);function Rn(e){return typeof e==`string`&&Ln.has(e)}function zn(e,t,n){if(t.length===0||t.some(Rn))return null;let r=e;for(let e=0;e<t.length-1;e+=1){let i=t[e],a=t[e+1];if(typeof i==`number`){if(!Array.isArray(r))return null;if(r[i]==null){if(!n)return null;r[i]=typeof a==`number`?[]:{}}r=r[i];continue}if(typeof r!=`object`||!r)return null;let o=r;if(o[i]==null){if(!n)return null;o[i]=typeof a==`number`?[]:{}}r=o[i]}return{current:r,lastKey:t[t.length-1]}}function Bn(e,t,n){let r=zn(e,t,!0);if(r){if(typeof r.lastKey==`number`){Array.isArray(r.current)&&(r.current[r.lastKey]=n);return}typeof r.current==`object`&&r.current!=null&&(r.current[r.lastKey]=n)}}function Vn(e,t){let n=zn(e,t,!1);if(n){if(typeof n.lastKey==`number`){Array.isArray(n.current)&&n.current.splice(n.lastKey,1);return}typeof n.current==`object`&&n.current!=null&&delete n.current[n.lastKey]}}var Hn=new WeakMap;async function Un(e,t={}){if(!(!e.client||!e.connected)){e.configLoading=!0,e.lastError=null;try{Jn(e,await e.client.request(`config.get`,{}),t)}catch(t){e.lastError=String(t)}finally{e.configLoading=!1}}}async function Wn(e){if(!(!e.client||!e.connected)&&!e.configSchemaLoading){e.configSchemaLoading=!0;try{Gn(e,await e.client.request(`config.schema`,{}))}catch(t){e.lastError=String(t)}finally{e.configSchemaLoading=!1}}}function Gn(e,t){e.configSchema=t.schema??null,e.configUiHints=t.uiHints??{},e.configSchemaVersion=t.version??null}function Kn(e){return!e||typeof e!=`object`||Array.isArray(e)?null:e}function qn(e){return Kn(e?.sourceConfig)??Kn(e?.resolved)??Kn(e?.config)}function Jn(e,t,n={}){let r=e.configFormDirty&&n.discardPendingChanges!==!0,i=e.configDraftBaseHash??e.configSnapshot?.hash??null;e.configSnapshot=t;let a=qn(t);!(typeof t.raw==`string`||a||e.configForm)&&e.configFormMode===`raw`&&(e.configFormMode=`form`);let o=typeof t.raw==`string`?t.raw:a?kn(a):e.configRaw;r?e.configFormMode!==`raw`&&e.configForm?e.configRaw=kn(e.configForm):e.configFormMode!==`raw`&&(e.configRaw=o):e.configRaw=o,e.configValid=typeof t.valid==`boolean`?t.valid:null,e.configIssues=Array.isArray(t.issues)?t.issues:[],r?e.configDraftBaseHash=i:(e.configForm=On(a??{}),e.configFormOriginal=On(a??{}),e.configRawOriginal=o,e.configFormDirty=!1,e.configDraftBaseHash=t.hash??null,Hn.delete(e))}function Yn(e){return!e||typeof e!=`object`||Array.isArray(e)?null:e}function Xn(e){if(e.configFormMode!==`form`||!e.configForm)return e.configRaw;let t=Yn(e.configSchema);return kn(In(t?Dn(e.configForm,t):e.configForm,e.configFormOriginal,e.configRawOriginal))}function Zn(e){let t=(e.status??`error`).trim()||`error`,n=(e.reason??`unexpected-error`).trim()||`unexpected-error`;return{tone:t===`skipped`?`warn`:`danger`,text:`Update ${t}: ${n}. ${{dirty:`Commit or stash changes, then retry.`,"no-upstream":`Set an upstream branch, then retry.`,"not-git-install":"Not a git checkout. Run `fengming update` from the CLI for a global reinstall.","not-fengming-root":`Run the update from an FengMing checkout or use the CLI global reinstall path.`,"deps-install-failed":`Dependency install failed. Fix the install error and retry.`,"build-failed":`Build failed. Fix the build error and retry.`,"ui-build-failed":`The control UI rebuild failed. Fix the UI build error and retry.`,"global-install-failed":`The global package install did not verify on disk. Retry or reinstall from the CLI.`,"restart-disabled":"The update was not applied because gateway restarts are disabled. Enable restarts in config, then retry — or run `fengming update` from the CLI.","restart-unavailable":`This global install cannot be safely replaced while restarts are disabled and no supervisor is present.`,"restart-unhealthy":`The replacement process never became healthy. The previous process stayed up so you can recover.`,"doctor-failed":"Doctor repair failed. Run `fengming doctor --non-interactive` and retry."}[n]??`See the gateway logs for the exact failure and retry once the cause is fixed.`}`}}async function Qn(e,t,n,r={}){if(!e.client||!e.connected)return!1;e[n]=!0,e.lastError=null;try{let n=Xn(e),i=e.configDraftBaseHash??e.configSnapshot?.hash;return i?(await e.client.request(t,{raw:n,baseHash:i,...r}),e.configFormDirty=!1,e.configDraftBaseHash=null,Hn.delete(e),await Un(e),!0):(e.lastError=`Config hash missing; reload and retry.`,!1)}catch(t){return e.lastError=String(t),!1}finally{e[n]=!1}}function $n(e,t){let n=On(e.configFormOriginal??qn(e.configSnapshot)??{}),r=kn(t),i=kn(n);e.configForm=t,e.configRaw=r,e.configFormDirty=r!==i}async function er(e){return Qn(e,`config.set`,`configSaving`)}async function tr(e){return Qn(e,`config.apply`,`configApplying`,{sessionKey:e.applySessionKey})}async function nr(e){if(!(!e.client||!e.connected)){e.updateRunning=!0,e.lastError=null,e.updateStatusBanner=null;try{let t=await e.client.request(`update.run`,{sessionKey:e.applySessionKey}),n=t.result?.status??(t.ok===!0?`ok`:`error`);if(n===`ok`&&t.ok===!0){e.pendingUpdateExpectedVersion=t.result?.after?.version??null;return}e.pendingUpdateExpectedVersion=null,e.updateStatusBanner=Zn({status:n,reason:t.result?.reason})}catch(t){e.lastError=String(t),e.pendingUpdateExpectedVersion=null}finally{e.updateRunning=!1}}}function rr(e,t){let n=On(e.configForm??qn(e.configSnapshot)??{});t(n),$n(e,n)}function ir(e,t){let n=Hn.get(e);n?n.add(t):Hn.set(e,new Set([t]))}function ar(e,t){let n=Hn.get(e);n&&(n.delete(t),n.size===0&&Hn.delete(e))}function or(e,t,n,r){if(n.length!==4||n[0]!==`plugins`||n[1]!==`entries`||typeof n[2]!=`string`||n[3]!==`enabled`)return;let i=n[2],a=t.plugins&&typeof t.plugins==`object`&&!Array.isArray(t.plugins)?t.plugins:null,o=Array.isArray(a?.allow)?a.allow:null;if(!o){ar(e,i);return}if(r===!0){if(o.includes(i))return;if(o.length===0){ar(e,i);return}Bn(t,[`plugins`,`allow`],[...o,i]),ir(e,i);return}Hn.get(e)?.has(i)&&(Bn(t,[`plugins`,`allow`],o.filter(e=>e!==i)),ar(e,i))}function sr(e,t,n){rr(e,r=>{if(Bn(r,t,n),t[0]===`plugins`&&t[1]===`allow`){Hn.delete(e);return}or(e,r,t,n)})}function cr(e,t){e.configRaw=t,e.configFormDirty=t!==e.configRawOriginal,e.configFormDirty?e.configDraftBaseHash=e.configDraftBaseHash??e.configSnapshot?.hash??null:e.configDraftBaseHash=e.configSnapshot?.hash??null}function lr(e,t){let n=qn(e.configSnapshot),r=e.configForm??n;if(!r||!e.configForm&&!e.configSnapshot?.hash)return;let i=Qt(On(r),t);!i||typeof i!=`object`||Array.isArray(i)||$n(e,On(i))}function ur(e){let t=qn(e.configSnapshot);e.configForm=On(e.configFormOriginal??t??{}),e.configRaw=e.configRawOriginal??kn(e.configFormOriginal??t??{}),e.configFormDirty=!1,e.configDraftBaseHash=e.configSnapshot?.hash??null,Hn.delete(e)}function dr(e,t){rr(e,e=>Vn(e,t))}function fr(e,t){let n=t.trim();if(!n)return-1;let r=e?.agents?.list;return Array.isArray(r)?r.findIndex(e=>e&&typeof e==`object`&&`id`in e&&e.id===n):-1}function pr(e,t){let n=t.trim();if(!n)return-1;let r=e.configForm??qn(e.configSnapshot),i=fr(r,n);if(i>=0)return i;let a=r?.agents?.list,o=Array.isArray(a)?a.length:0;return sr(e,[`agents`,`list`,o,`id`],n),o}function mr(e,t){let n=t.trim();if(!n)return!1;let r=fr(e.configForm??qn(e.configSnapshot),n);return r<0?!1:(rr(e,e=>{let t=e?.agents?.list;if(Array.isArray(t))for(let e=0;e<t.length;e++){let n=t[e];if(!n||typeof n!=`object`||Array.isArray(n))continue;let i=n;e===r?i.default=!0:delete i.default}}),!0)}async function hr(e){if(!(!e.client||!e.connected)){e.lastError=null;try{let t=await e.client.request(`config.openFile`,{});if(!t.ok){e.lastError=t.error||`Failed to open config file`;let n=t.path||e.configSnapshot?.path;if(n)try{await navigator.clipboard.writeText(n),e.lastError+=`\n\nFile path copied to clipboard: ${n}`}catch{e.lastError+=`\n\nFile path: ${n}`}}}catch(t){let n=e.configSnapshot?.path;if(n)try{await navigator.clipboard.writeText(n)}catch{}e.lastError=String(t)}}}async function gr(e){let t=await er(e),n=e.lastError;if(!t){await Un(e),n&&!e.lastError&&(e.lastError=n);return}await Kt(e,!0)}async function _r(e){await Un(e,{discardPendingChanges:!0}),await Kt(e,!0)}function vr(e,t){let n=t.trim();!n||e.settings.lastActiveSessionKey===n||e.applySettings({...e.settings,lastActiveSessionKey:n})}var yr=new Set([`tweakcn.com`,`www.tweakcn.com`]),br=/^[A-Za-z0-9][A-Za-z0-9_-]{7,127}$/,xr=`fengming-custom-theme`,Sr=2e5,Cr=240,wr=1e4,Tr=`"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,Er=`"JetBrains Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace`,Dr=[`url(`,`image(`,`image-set(`,`-webkit-image-set(`,`cross-fade(`,`element(`,`-moz-element(`,`paint(`,`@import`,`expression(`],Or=new Set([`black`,`white`,`transparent`,`currentcolor`]),kr=/^(?:rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch)\([a-z0-9+\-.,/%\s]+\)$/i,Ar=/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,jr=new Set([`,`,`'`,`"`,`.`,`_`,`-`]),Mr=`bg.bg-accent.bg-elevated.bg-hover.bg-muted.bg-content.card.card-foreground.card-highlight.popover.popover-foreground.panel.panel-strong.panel-hover.chrome.chrome-strong.text.text-strong.chat-text.muted.muted-strong.muted-foreground.border.border-strong.border-hover.input.ring.accent.accent-hover.accent-muted.accent-subtle.accent-foreground.accent-glow.primary.primary-foreground.secondary.secondary-foreground.accent-2.accent-2-muted.accent-2-subtle.destructive.destructive-foreground.danger.danger-muted.danger-subtle.focus.focus-ring.focus-glow.font-body.font-display.mono.grid-line`.split(`.`),Nr=[`background`,`foreground`,`card`,`card-foreground`,`popover`,`popover-foreground`,`primary`,`primary-foreground`,`secondary`,`secondary-foreground`,`muted`,`muted-foreground`,`accent`,`accent-foreground`,`destructive`,`destructive-foreground`,`border`,`input`,`ring`],Pr=D().max(Cr);function Fr(e){return Object.fromEntries(e.map(e=>[e,Pr]))}var Ir=ee({name:D().max(80).optional(),cssVars:ee({theme:ee({"font-sans":Pr.optional(),"font-mono":Pr.optional()}).optional(),light:ee(Fr(Nr)),dark:ee(Fr(Nr))})}),Lr=ee({sourceUrl:D(),themeId:D(),label:D(),importedAt:D(),light:ee(Fr(Mr)),dark:ee(Fr(Mr))});function Rr(e){if(!br.test(e))throw Error(`Unsupported tweakcn link. Expected a theme share URL.`)}function zr(e){let t=e.split(`/`).filter(Boolean);return t.length===2&&t[0]===`themes`?(Rr(t[1]),t[1]):t.length===3&&t[0]===`r`&&t[1]===`themes`?(Rr(t[2]),t[2]):null}function Br(e){let t=T(e);if(!t)throw Error(`Paste a tweakcn theme link to import.`);let n=t.replace(/[.,;:]+$/,``);return br.test(n)?`https://tweakcn.com/themes/${n}`:n.startsWith(`/themes/`)||n.startsWith(`/r/themes/`)?`https://tweakcn.com${n}`:/^(?:www\.)?tweakcn\.com\//i.test(n)?`https://${n}`:n.match(/https?:\/\/(?:www\.)?tweakcn\.com\/[^\s<>"')]+/i)?.[0]?.replace(/[.,;:]+$/,``)??n}function Vr(e){let t=zr(e.pathname);if(t)return t;let n=e.searchParams.get(`theme`)??e.searchParams.get(`themeId`)??e.searchParams.get(`id`);if(n)return Rr(n),n;throw Error(`Unsupported tweakcn link. Expected a theme share URL.`)}function Hr(e,t){let n=T(e);if(!n||n.length>Cr)throw Error(`Unsupported tweakcn token: ${t}`);let r=n.toLowerCase();if(Dr.some(e=>r.includes(e))||n.includes(`/*`)||n.includes(`*/`)||n.includes(`\\`))throw Error(`Unsupported tweakcn token: ${t}`);for(let e of n){let n=e.charCodeAt(0);if(n<32||n===127||e===`{`||e===`}`||e===`;`||e===`<`||e===`>`||e==="`")throw Error(`Unsupported tweakcn token: ${t}`)}return n}function Ur(e,t){let n=Hr(e,t),r=n.toLowerCase();if(Or.has(r)||Ar.test(n)||kr.test(n))return n;throw Error(`Unsupported tweakcn token: ${t}`)}function Wr(e){let t=e.charCodeAt(0);return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122||e===` `||jr.has(e)}function Gr(e,t){let n=Hr(e,t);if(n.includes(`(`)||n.includes(`)`)||!Array.from(n).every(Wr))throw Error(`Unsupported tweakcn token: ${t}`);return n}function Kr(e,t){return t===`font-sans`||t===`font-mono`?Gr(e,t):Ur(e,t)}function qr(e){return Object.fromEntries(e)}function Jr(e){if(!e||typeof e!=`object`)return null;let t=[];for(let n of Mr){let r=n===`font-body`||n===`font-display`||n===`mono`?Gr(e[n],n):Hr(e[n],n);t.push([n,r])}return qr(t)}function R(e,t,n,r){let i=T(e[n]);if(i)return Kr(i,n);let a=T(t?.[n]);if(a)return Kr(a,n);if(r!=null)return n===`font-sans`||n===`font-mono`?Gr(r,n):Hr(r,n);throw Error(`tweakcn theme is missing required token: ${n}`)}function Yr(e,t,n){let r=e===`light`,i=r?`black`:`white`,a=R(t,n,`background`),o=R(t,n,`foreground`),s=R(t,n,`card`),c=R(t,n,`card-foreground`),l=R(t,n,`popover`),u=R(t,n,`popover-foreground`),d=R(t,n,`primary`),f=R(t,n,`primary-foreground`),p=R(t,n,`secondary`),m=R(t,n,`secondary-foreground`),h=R(t,n,`muted`),g=R(t,n,`muted-foreground`),_=R(t,n,`accent`),v=R(t,n,`accent-foreground`),y=R(t,n,`destructive`),b=R(t,n,`destructive-foreground`),x=R(t,n,`border`),S=R(t,n,`input`),C=R(t,n,`ring`),w=R(t,n,`font-sans`,Tr),T=R(t,n,`font-mono`,Er);return qr([[`bg`,a],[`bg-accent`,`color-mix(in srgb, var(--bg) 88%, var(--card) 12%)`],[`bg-elevated`,s],[`bg-hover`,`color-mix(in srgb, var(--muted) 68%, var(--bg) 32%)`],[`bg-muted`,h],[`bg-content`,`color-mix(in srgb, var(--bg) 92%, var(--card) 8%)`],[`card`,s],[`card-foreground`,c],[`card-highlight`,`color-mix(in srgb, var(--text) ${r?`3`:`5`}%, transparent)`],[`popover`,l],[`popover-foreground`,u],[`panel`,a],[`panel-strong`,s],[`panel-hover`,`color-mix(in srgb, var(--card) 76%, var(--muted) 24%)`],[`chrome`,`color-mix(in srgb, var(--bg) 96%, transparent)`],[`chrome-strong`,`color-mix(in srgb, var(--bg) 98%, transparent)`],[`text`,o],[`text-strong`,o],[`chat-text`,o],[`muted`,g],[`muted-strong`,`color-mix(in srgb, var(--muted) 84%, var(--text) 16%)`],[`muted-foreground`,g],[`border`,x],[`border-strong`,`color-mix(in srgb, var(--border) 72%, var(--text) 28%)`],[`border-hover`,`color-mix(in srgb, var(--border) 55%, var(--text) 45%)`],[`input`,S],[`ring`,C],[`accent`,_],[`accent-hover`,`color-mix(in srgb, var(--accent) 82%, ${i} 18%)`],[`accent-muted`,_],[`accent-subtle`,`color-mix(in srgb, var(--accent) ${r?`10`:`16`}%, transparent)`],[`accent-foreground`,v],[`accent-glow`,`color-mix(in srgb, var(--accent) ${r?`18`:`30`}%, transparent)`],[`primary`,d],[`primary-foreground`,f],[`secondary`,p],[`secondary-foreground`,m],[`accent-2`,d],[`accent-2-muted`,`color-mix(in srgb, var(--accent-2) 72%, transparent)`],[`accent-2-subtle`,`color-mix(in srgb, var(--accent-2) ${r?`8`:`12`}%, transparent)`],[`destructive`,y],[`destructive-foreground`,b],[`danger`,y],[`danger-muted`,`color-mix(in srgb, var(--danger) 75%, transparent)`],[`danger-subtle`,`color-mix(in srgb, var(--danger) ${r?`8`:`12`}%, transparent)`],[`focus`,`color-mix(in srgb, var(--ring) ${r?`14`:`22`}%, transparent)`],[`focus-ring`,`0 0 0 2px var(--bg), 0 0 0 3px color-mix(in srgb, var(--ring) ${r?`70`:`80`}%, transparent)`],[`focus-glow`,`0 0 0 2px var(--bg), 0 0 0 3px var(--ring), 0 0 16px var(--accent-glow)`],[`font-body`,w],[`font-display`,w],[`mono`,T],[`grid-line`,`color-mix(in srgb, var(--text) ${r?`4`:`3`}%, transparent)`]])}function Xr(e){let t=T(e);return t?t.slice(0,80):`Custom`}function Zr(e){let t=Br(e),n;try{n=new URL(t)}catch{throw Error(`Paste a full tweakcn URL.`)}if(!yr.has(n.hostname))throw Error(`Only tweakcn.com theme links are supported.`);let r=Vr(n);return{themeId:r,sourceUrl:`https://tweakcn.com/themes/${r}`,fetchUrl:`https://tweakcn.com/r/themes/${r}`}}function Qr(e){let t=Lr.safeParse(e);if(!t.success)return null;try{Rr(t.data.themeId);let e=Jr(t.data.light),n=Jr(t.data.dark);return!e||!n?null:{sourceUrl:t.data.sourceUrl,themeId:t.data.themeId,label:Xr(t.data.label),importedAt:t.data.importedAt,light:e,dark:n}}catch{return null}}function $r(e,t){let n=Ir.safeParse(e);if(!n.success)throw Error(`tweakcn returned an invalid theme payload.`);let r=n.data,i=r.cssVars.theme;return{sourceUrl:t.sourceUrl,themeId:t.themeId,label:Xr(r.name),importedAt:new Date().toISOString(),light:Yr(`light`,r.cssVars.light,i),dark:Yr(`dark`,r.cssVars.dark,i)}}function ei(e){if(!e)return;let t;try{t=new URL(e)}catch{throw Error(`Unexpected tweakcn import response URL.`)}if(t.protocol!==`https:`||!yr.has(t.hostname))throw Error(`Unexpected redirect during tweakcn import.`)}function ti(e){let t=e.get(`content-length`);if(!t)return null;let n=Number(t);return Number.isFinite(n)&&n>=0?n:null}async function ni(e){let t=ti(e.headers);if(t!=null&&t>Sr)throw Error(`tweakcn theme payload is too large.`);if(!e.body)throw Error(`tweakcn returned an unreadable theme payload.`);let n=e.body.getReader(),r=new TextDecoder,i=0,a=``;try{for(;;){let e=await n.read();if(e.done)break;if(i+=e.value.byteLength,i>Sr)throw await n.cancel().catch(()=>void 0),Error(`tweakcn theme payload is too large.`);a+=r.decode(e.value,{stream:!0})}return a+=r.decode(),a}finally{n.releaseLock()}}async function ri(e){let t=await ni(e);try{return JSON.parse(t)}catch{throw Error(`tweakcn returned invalid JSON.`)}}async function ii(e,t=fetch){let n=Zr(e),r=new AbortController,i=setTimeout(()=>r.abort(),wr);try{let e=await t(n.fetchUrl,{headers:{accept:`application/json`},redirect:`error`,signal:r.signal});if(ei(e.url),!e.ok)throw Error(`tweakcn import failed (${e.status}).`);return $r(await ri(e),n)}catch(e){throw r.signal.aborted?Error(`tweakcn import timed out.`,{cause:e}):e}finally{clearTimeout(i)}}function ai(e){let t=Jr(e.light),n=Jr(e.dark);if(!t||!n)throw Error(`存储的自定义主题缺少必需的令牌`);let r=e=>Mr.map(t=>` --${t}: ${e[t]};`).join(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./agents-DMcgU9w9.js","./lit-runtime-DA0-mbwP.js","./markdown-runtime-C9Jq8Bu5.js","./rolldown-runtime-QTnfLwEv.js","./string-coerce-BuYUxt7q.js","./i18n-COx0mMoe.js","./channel-config-extras-Cnty6sJP.js","./skills-shared-KvN3lpfP.js","./activity-0AnFM1pt.js","./channels-BIjF291a.js","./cron-gyAzSB5C.js","./debug-CNnIMqYL.js","./instances-CcPo2WpS.js","./logs-D7YSLRvz.js","./nodes-8OSr5IQB.js","./sessions-CRXERFxi.js","./skills-DcnRqwFx.js","./workboard-QBQBDBPN.js","./push-subscription-SK4PlhIV.js"])))=>i.map(i=>d[i]);
2
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{a as t,c as n,d as r,f as i,h as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,s as p,u as m}from"./lit-runtime-DA0-mbwP.js";import{a as h,i as g,n as _,r as v,t as y}from"./i18n-COx0mMoe.js";import{i as b,n as x,r as S,t as C}from"./gateway-runtime-CMyVbEq5.js";import{n as w,r as T,t as E}from"./string-coerce-BuYUxt7q.js";import{n as D,r as O,t as ee}from"./config-runtime-CCw2hptH.js";import{_ as k,a as te,c as A,d as j,f as M,g as N,h as P,i as F,l as ne,m as re,n as ie,o as ae,p as oe,r as se,s as ce,t as le,u as I,v as ue}from"./markdown-runtime-C9Jq8Bu5.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();function de(e){if(typeof e==`string`)return e.trim()||void 0}function fe(e){if(!Array.isArray(e))return;let t=e.map(e=>de(e)).filter(e=>!!e);return t.length>0?t:void 0}var L={AUTH_REQUIRED:`AUTH_REQUIRED`,AUTH_UNAUTHORIZED:`AUTH_UNAUTHORIZED`,AUTH_TOKEN_MISSING:`AUTH_TOKEN_MISSING`,AUTH_TOKEN_MISMATCH:`AUTH_TOKEN_MISMATCH`,AUTH_TOKEN_NOT_CONFIGURED:`AUTH_TOKEN_NOT_CONFIGURED`,AUTH_PASSWORD_MISSING:`AUTH_PASSWORD_MISSING`,AUTH_PASSWORD_MISMATCH:`AUTH_PASSWORD_MISMATCH`,AUTH_PASSWORD_NOT_CONFIGURED:`AUTH_PASSWORD_NOT_CONFIGURED`,AUTH_BOOTSTRAP_TOKEN_INVALID:`AUTH_BOOTSTRAP_TOKEN_INVALID`,AUTH_DEVICE_TOKEN_MISMATCH:`AUTH_DEVICE_TOKEN_MISMATCH`,AUTH_SCOPE_MISMATCH:`AUTH_SCOPE_MISMATCH`,AUTH_RATE_LIMITED:`AUTH_RATE_LIMITED`,AUTH_TAILSCALE_IDENTITY_MISSING:`AUTH_TAILSCALE_IDENTITY_MISSING`,AUTH_TAILSCALE_PROXY_MISSING:`AUTH_TAILSCALE_PROXY_MISSING`,AUTH_TAILSCALE_WHOIS_FAILED:`AUTH_TAILSCALE_WHOIS_FAILED`,AUTH_TAILSCALE_IDENTITY_MISMATCH:`AUTH_TAILSCALE_IDENTITY_MISMATCH`,CONTROL_UI_ORIGIN_NOT_ALLOWED:`CONTROL_UI_ORIGIN_NOT_ALLOWED`,PROTOCOL_MISMATCH:`PROTOCOL_MISMATCH`,CONTROL_UI_DEVICE_IDENTITY_REQUIRED:`CONTROL_UI_DEVICE_IDENTITY_REQUIRED`,DEVICE_IDENTITY_REQUIRED:`DEVICE_IDENTITY_REQUIRED`,DEVICE_AUTH_INVALID:`DEVICE_AUTH_INVALID`,DEVICE_AUTH_DEVICE_ID_MISMATCH:`DEVICE_AUTH_DEVICE_ID_MISMATCH`,DEVICE_AUTH_SIGNATURE_EXPIRED:`DEVICE_AUTH_SIGNATURE_EXPIRED`,DEVICE_AUTH_NONCE_REQUIRED:`DEVICE_AUTH_NONCE_REQUIRED`,DEVICE_AUTH_NONCE_MISMATCH:`DEVICE_AUTH_NONCE_MISMATCH`,DEVICE_AUTH_SIGNATURE_INVALID:`DEVICE_AUTH_SIGNATURE_INVALID`,DEVICE_AUTH_PUBLIC_KEY_INVALID:`DEVICE_AUTH_PUBLIC_KEY_INVALID`,PAIRING_REQUIRED:`PAIRING_REQUIRED`,CLIENT_VERSION_MISMATCH:`CLIENT_VERSION_MISMATCH`},pe={NOT_PAIRED:`not-paired`,ROLE_UPGRADE:`role-upgrade`,SCOPE_UPGRADE:`scope-upgrade`,METADATA_UPGRADE:`metadata-upgrade`},me=new Set([`retry_with_device_token`,`update_auth_configuration`,`update_auth_credentials`,`wait_then_retry`,`review_auth_configuration`]),he=new Set([`not-paired`,`role-upgrade`,`scope-upgrade`,`metadata-upgrade`]),ge=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/,_e={"not-paired":{requirement:`device is not approved yet`,remediationHint:`Approve this device from the pending pairing requests.`,recoveryTitle:`Gateway pairing approval required.`},"role-upgrade":{requirement:`device is asking for a higher role than currently approved`,remediationHint:`Review the requested role upgrade, then approve the pending request.`,recoveryTitle:`Gateway role upgrade approval required.`},"scope-upgrade":{requirement:`device is asking for more scopes than currently approved`,remediationHint:`Review the requested scopes, then approve the pending upgrade.`,recoveryTitle:`Gateway scope upgrade approval required.`},"metadata-upgrade":{requirement:`device identity changed and must be re-approved`,remediationHint:`Review the refreshed device details, then approve the pending request.`,recoveryTitle:`Gateway device refresh approval required.`}},ve={"not-paired":`device pairing required`,"role-upgrade":`role upgrade pending approval`,"scope-upgrade":`scope upgrade pending approval`,"metadata-upgrade":`device metadata change pending approval`};function ye(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e.code;return typeof t==`string`&&t.trim().length>0?t:null}function be(e){if(!e||typeof e!=`object`||Array.isArray(e))return{};let t=e,n=typeof t.canRetryWithDeviceToken==`boolean`?t.canRetryWithDeviceToken:void 0,r=de(t.recommendedNextStep)??``;return{canRetryWithDeviceToken:n,recommendedNextStep:me.has(r)?r:void 0}}function xe(e){let t=de(e)??``;return he.has(t)?t:void 0}function Se(e){let t=de(e);return t&&ge.test(t)?t:void 0}function Ce(e){return fe(e)}function we(e){return{code:L.PAIRING_REQUIRED,...e.reason?{reason:e.reason}:{},...e.requestId?{requestId:e.requestId}:{},...e.remediationHint?{remediationHint:e.remediationHint}:{},...e.recommendedNextStep?{recommendedNextStep:e.recommendedNextStep}:{},...e.retryable===void 0?{}:{retryable:e.retryable},...e.pauseReconnect===void 0?{}:{pauseReconnect:e.pauseReconnect},...e.deviceId?{deviceId:e.deviceId}:{},...e.requestedRole?{requestedRole:e.requestedRole}:{},...e.requestedScopes?{requestedScopes:e.requestedScopes}:{},...e.approvedRoles?{approvedRoles:e.approvedRoles}:{},...e.approvedScopes?{approvedScopes:e.approvedScopes}:{}}}function Te(e){return e?_e[e].requirement:`device approval is required`}function Ee(e){return e?_e[e].remediationHint:`Approve the pending device request before retrying.`}function De(e){if(ye(e)!==L.PAIRING_REQUIRED||!e||typeof e!=`object`||Array.isArray(e))return null;let t=e,n=xe(t.reason),r=Se(t.requestId),i=de(t.remediationHint)??Ee(n),a=de(t.recommendedNextStep)??``,o=me.has(a)?a:void 0,s=de(t.deviceId),c=de(t.requestedRole),l=Ce(t.requestedScopes),u=Ce(t.approvedRoles),d=Ce(t.approvedScopes);return we({reason:n,requestId:r,remediationHint:i,recommendedNextStep:o,retryable:typeof t.retryable==`boolean`?t.retryable:void 0,pauseReconnect:typeof t.pauseReconnect==`boolean`?t.pauseReconnect:void 0,deviceId:s,requestedRole:c,requestedScopes:l,approvedRoles:u,approvedScopes:d})}function Oe(e){let t=de(e);if(!t)return null;let n=t.trim().toLowerCase(),r;for(let[e,t]of Object.entries(ve))if(n.includes(t)){r=e;break}if(!r&&n.includes(`pairing required`)&&(r=pe.NOT_PAIRED),!r)return null;let i=Se(t.match(/\(requestId:\s*([^\s)]+)\)/i)?.[1]);return{...i?{requestId:i}:{},reason:r}}function ke(e){let t=De(e),n=ve[t?.reason??pe.NOT_PAIRED];return t?.requestId?`${n} (requestId: ${t.requestId})`:n}function Ae(e){return ye(e.details)===L.PAIRING_REQUIRED?ke(e.details):ye(e.details)===L.PROTOCOL_MISMATCH?je(e.message,e.details):de(e.message)??`gateway request failed`}function je(e,t){let n=t,r=Me(n.clientMinProtocol),i=Me(n.clientMaxProtocol),a=Me(n.expectedProtocol),o=Me(n.minimumProbeProtocol),s=[];r!==void 0&&i!==void 0&&s.push(r===i?`Control UI v${r}`:`Control UI v${r}-v${i}`),a!==void 0&&s.push(`Gateway v${a}`),o!==void 0&&s.push(`probe min v${o}`);let c=de(e)??`protocol mismatch`;return s.length>0?`${c}: ${s.join(`, `)}`:c}function Me(e){return typeof e==`number`&&Number.isInteger(e)&&e>0?e:void 0}var Ne={WEBCHAT_UI:`webchat-ui`,CONTROL_UI:`fengming-control-ui`,TUI:`fengming-tui`,WEBCHAT:`webchat`,CLI:`cli`,GATEWAY_CLIENT:`gateway-client`,MACOS_APP:`fengming-macos`,IOS_APP:`fengming-ios`,ANDROID_APP:`fengming-android`,NODE_HOST:`node-host`,TEST:`test`,FINGERPRINT:`fingerprint`,PROBE:`fengming-probe`},Pe=Ne,Fe={WEBCHAT:`webchat`,CLI:`cli`,UI:`ui`,BACKEND:`backend`,NODE:`node`,PROBE:`probe`,TEST:`test`};new Set(Object.values(Ne)),new Set(Object.values(Fe));var Ie=100,Le=2e3;function Re(e){return typeof e==`object`&&!!e&&e.reason===`startup-sidecars`}function ze(e){if(!e||typeof e!=`object`)return!1;let t=e;return(t.gatewayCode??t.code)===`UNAVAILABLE`&&t.retryable===!0&&Re(t.details)}function Be(e){if(!ze(e))return null;let t=e.retryAfterMs;return Math.min(Math.max(Math.floor(typeof t==`number`&&Number.isFinite(t)?t:500),Ie),Le)}function Ve(e){let t=e.scopes.join(`,`),n=e.token??``;return[`v2`,e.deviceId,e.clientId,e.clientMode,e.role,t,String(e.signedAtMs),n,e.nonce].join(`|`)}function He(e){return e.trim()}function Ue(e){if(!Array.isArray(e))return[];let t=new Set;for(let n of e){if(typeof n!=`string`)continue;let e=n.trim();e&&t.add(e)}return t.has(`operator.admin`)?(t.add(`operator.read`),t.add(`operator.write`)):t.has(`operator.write`)&&t.add(`operator.read`),[...t].toSorted()}function We(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ge(e){return We(e)?e:void 0}function Ke(e){return e&&typeof e==`object`?e:void 0}function qe(e,t){if(!We(t)||typeof t.token!=`string`)return null;let n=typeof t.updatedAtMs==`number`&&Number.isFinite(t.updatedAtMs)?t.updatedAtMs:0;return{token:t.token,role:e,scopes:Ue(Array.isArray(t.scopes)?t.scopes:void 0),updatedAtMs:n}}function Je(e){let t={};for(let[n,r]of Object.entries(e)){let e=He(n);if(!e)continue;let i=qe(e,r);i&&(t[e]=i)}return t}function Ye(e){let t=e.adapter.readStore();if(!t||t.deviceId!==e.deviceId)return null;let n=He(e.role);return qe(n,t.tokens[n])}function Xe(e){let t=He(e.role),n=e.adapter.readStore(),r={version:1,deviceId:e.deviceId,tokens:n&&n.deviceId===e.deviceId&&n.tokens?Je(n.tokens):{}},i={token:e.token,role:t,scopes:Ue(e.scopes),updatedAtMs:Date.now()};return r.tokens[t]=i,e.adapter.writeStore(r),i}function Ze(e){let t=e.adapter.readStore();if(!t||t.deviceId!==e.deviceId)return;let n=He(e.role);if(!t.tokens[n])return;let r={version:1,deviceId:t.deviceId,tokens:Je(t.tokens)};delete r.tokens[n],e.adapter.writeStore(r)}function Qe(e){return!!e&&typeof e.getItem==`function`&&typeof e.setItem==`function`}function $e(e){let t=Object.getOwnPropertyDescriptor(globalThis,e);if(typeof process<`u`&&{}.VITEST)return t&&!t.get&&Qe(t.value)?t.value:null;if(typeof window<`u`&&typeof document<`u`)try{let t=window[e];return Qe(t)?t:null}catch{return null}return t&&!t.get&&Qe(t.value)?t.value:null}function et(){return $e(`localStorage`)}function tt(){return $e(`sessionStorage`)}var nt=`fengming.device.auth.v1`;function rt(){try{let e=et()?.getItem(nt);if(!e)return null;let t=JSON.parse(e);return!t||t.version!==1||!t.deviceId||typeof t.deviceId!=`string`||!t.tokens||typeof t.tokens!=`object`?null:t}catch{return null}}function it(e){try{et()?.setItem(nt,JSON.stringify(e))}catch{}}function at(e){return Ye({adapter:{readStore:rt,writeStore:it},deviceId:e.deviceId,role:e.role})}function ot(e){return Xe({adapter:{readStore:rt,writeStore:it},deviceId:e.deviceId,role:e.role,token:e.token,scopes:e.scopes})}function st(e){Ze({adapter:{readStore:rt,writeStore:it},deviceId:e.deviceId,role:e.role})}var ct=`fengming-device-identity-v1`;function lt(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replaceAll(`+`,`-`).replaceAll(`/`,`_`).replace(/=+$/g,``)}function ut(e){let t=e.replaceAll(`-`,`+`).replaceAll(`_`,`/`),n=t+`=`.repeat((4-t.length%4)%4),r=atob(n),i=new Uint8Array(r.length);for(let e=0;e<r.length;e+=1)i[e]=r.charCodeAt(e);return i}function dt(e){return Array.from(e).map(e=>e.toString(16).padStart(2,`0`)).join(``)}async function ft(e){let t=await crypto.subtle.digest(`SHA-256`,e.slice().buffer);return dt(new Uint8Array(t))}async function pt(){let e=b.randomSecretKey(),t=await x(e);return{deviceId:await ft(t),publicKey:lt(t),privateKey:lt(e)}}async function mt(){let e=et();try{let t=e?.getItem(ct);if(t){let n=JSON.parse(t);if(n?.version===1&&typeof n.deviceId==`string`&&typeof n.publicKey==`string`&&typeof n.privateKey==`string`){let t=await ft(ut(n.publicKey));if(t!==n.deviceId){let r={...n,deviceId:t};return e?.setItem(ct,JSON.stringify(r)),{deviceId:t,publicKey:n.publicKey,privateKey:n.privateKey}}return{deviceId:n.deviceId,publicKey:n.publicKey,privateKey:n.privateKey}}}}catch{}let t=await pt(),n={version:1,deviceId:t.deviceId,publicKey:t.publicKey,privateKey:t.privateKey,createdAtMs:Date.now()};return e?.setItem(ct,JSON.stringify(n)),t}async function ht(e,t){let n=ut(e);return lt(await S(new TextEncoder().encode(t),n))}var gt=!1;function _t(e){e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=``;for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,`0`);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}function vt(){gt||(gt=!0,console.warn(`[uuid] crypto API missing; refusing insecure UUID generation`))}function yt(e=globalThis.crypto){if(e&&typeof e.randomUUID==`function`)return e.randomUUID();if(e&&typeof e.getRandomValues==`function`){let t=new Uint8Array(16);return e.getRandomValues(t),_t(t)}throw vt(),Error(`Web Crypto is required for UUID generation`)}var bt=class extends Error{constructor(e){super(Ae({message:e.message,details:xt(e.message,e.details)})),this.name=`GatewayRequestError`,this.gatewayCode=e.code,this.details=e.details,this.retryable=e.retryable===!0,this.retryAfterMs=e.retryAfterMs}};function xt(e,t){return ye(t)===L.PROTOCOL_MISMATCH||!e?.toLowerCase().includes(`protocol mismatch`)?t:{code:L.PROTOCOL_MISMATCH,clientMinProtocol:4,clientMaxProtocol:4,...t&&typeof t==`object`&&!Array.isArray(t)?t:{}}}function St(e){return ye(e?.details)}function Ct(e){let t=De(e);return t?.pauseReconnect===!1||t?.recommendedNextStep===`wait_then_retry`}function wt(e){if(!e)return!1;let t=St(e);return t===L.PAIRING_REQUIRED&&Ct(e.details)?!1:t===L.AUTH_TOKEN_MISSING||t===L.AUTH_BOOTSTRAP_TOKEN_INVALID||t===L.AUTH_PASSWORD_MISSING||t===L.AUTH_PASSWORD_MISMATCH||t===L.AUTH_RATE_LIMITED||t===L.AUTH_DEVICE_TOKEN_MISMATCH||t===L.AUTH_SCOPE_MISMATCH||t===L.PAIRING_REQUIRED||t===L.CONTROL_UI_DEVICE_IDENTITY_REQUIRED||t===L.DEVICE_IDENTITY_REQUIRED}function Tt(e){let t=e.split(`.`);return t.length!==4||t[0]!==`127`?!1:t.every(e=>{if(!/^\d+$/.test(e))return!1;let t=Number(e);return t>=0&&t<=255})}function Et(e){try{let t=new URL(e,window.location.href),n=t.hostname.trim().toLowerCase(),r=n===`localhost`||n===`::1`||n===`[::1]`,i=Tt(n);if(r||i)return!0;let a=new URL(window.location.href);return t.host===a.host}catch{return!1}}var Dt=`operator`,Ot=[`operator.admin`,`operator.read`,`operator.write`,`operator.approvals`,`operator.pairing`],kt=4008,At=4013,jt=1006,Mt=`BROWSER_WEBSOCKET_CONSTRUCTOR_ERROR`,Nt=`BROWSER_WEBSOCKET_SECURITY_ERROR`;function Pt(e){let t=e.authToken;if(t||e.authPassword)return{token:t,deviceToken:e.authDeviceToken??e.resolvedDeviceToken,password:e.authPassword}}function Ft(e){return e instanceof Error&&e.message?e.message:String(e)}function It(e){if(e instanceof Error&&e.name)return e.name;if(e&&typeof e==`object`&&`name`in e){let t=e.name;return typeof t==`string`&&t.trim()?t:void 0}}function Lt(e){let t=It(e)?.toLowerCase(),n=Ft(e).toLowerCase();return t===`securityerror`||n.includes(`security error`)||n.includes(`mixed content`)||n.includes(`insecure websocket`)}function Rt(e,t){let n=Lt(e),r=Ft(e),i=t.trim().toLowerCase().startsWith(`ws://`);return n?{code:Nt,message:`Browser refused the Gateway WebSocket for security reasons.`+(i?` Use wss:// when the Control UI is served over HTTPS/Tailscale Serve, or open the loopback dashboard at http://127.0.0.1:18789.`:` Check the Gateway WebSocket URL and browser security policy.`),details:{code:Nt,browserErrorName:It(e),browserMessage:r}}:{code:Mt,message:`Could not create the Gateway WebSocket: ${r}`,details:{code:Mt,browserErrorName:It(e),browserMessage:r}}}function zt(e){return e.storedToken&&(e.resolvedDeviceToken===e.storedToken||e.authDeviceToken===e.storedToken)&&e.storedScopes&&e.storedScopes.length>0?[...e.storedScopes]:[...Ot]}async function Bt(e){let{deviceIdentity:t}=e;if(!t)return;let n=Date.now(),r=e.connectNonce??``,i=Ve({deviceId:t.deviceId,clientId:e.client.id,clientMode:e.client.mode,role:e.role,scopes:e.scopes,signedAtMs:n,token:e.authToken??null,nonce:r}),a=await ht(t.privateKey,i);return{id:t.deviceId,publicKey:t.publicKey,signature:a,signedAt:n,nonce:r}}function Vt(e){return!e.deviceTokenRetryBudgetUsed&&!e.authDeviceToken&&!!e.explicitGatewayToken&&!!e.deviceIdentity&&!!e.storedToken&&e.canRetryWithDeviceTokenHint&&Et(e.url)}var Ht=class{constructor(e){this.opts=e,this.ws=null,this.pending=new Map,this.closed=!1,this.lastSeq=null,this.connectNonce=null,this.connectSent=!1,this.connectTimer=null,this.connectGeneration=0,this.backoffMs=800,this.pendingDeviceTokenRetry=!1,this.deviceTokenRetryBudgetUsed=!1,this.pendingStartupReconnectDelayMs=null,this.eventListeners=new Set}start(){this.closed=!1,this.connect()}stop(){this.closed=!0,this.clearConnectTimer(),this.ws?.close(),this.ws=null,this.pendingConnectError=void 0,this.pendingDeviceTokenRetry=!1,this.deviceTokenRetryBudgetUsed=!1,this.pendingStartupReconnectDelayMs=null,this.flushPending(Error(`网关客户端已停止`))}get connected(){return this.ws?.readyState===WebSocket.OPEN}connect(){if(this.closed)return;let e;try{e=new WebSocket(this.opts.url)}catch(e){let t=Rt(e,this.opts.url);this.ws=null,this.pendingConnectError=void 0,this.pendingDeviceTokenRetry=!1,this.pendingStartupReconnectDelayMs=null,this.flushPending(Error(t.message)),this.opts.onClose?.({code:jt,reason:t.code===Nt?`security error`:`websocket error`,error:t});return}let t=++this.connectGeneration;this.ws=e,e.addEventListener(`open`,()=>this.queueConnect(e,t)),e.addEventListener(`message`,n=>{this.isActiveSocket(e,t)&&this.handleMessage(e,t,String(n.data??``))}),e.addEventListener(`close`,t=>{if(this.ws!==e)return;let n=t.reason??``,r=this.pendingConnectError;if(this.pendingConnectError=void 0,this.ws=null,this.pendingStartupReconnectDelayMs!==null){this.flushPending(Error(`gateway closed (${t.code}): ${n}`)),this.scheduleReconnect();return}if(this.flushPending(Error(`gateway closed (${t.code}): ${n}`)),this.opts.onClose?.({code:t.code,reason:n,error:r}),St(r)===L.AUTH_TOKEN_MISMATCH){this.pendingDeviceTokenRetry&&this.scheduleReconnect();return}wt(r)||this.scheduleReconnect()}),e.addEventListener(`error`,()=>{})}scheduleReconnect(){if(this.closed)return;let e=this.pendingStartupReconnectDelayMs;this.pendingStartupReconnectDelayMs=null;let t=e??this.backoffMs;e===null&&(this.backoffMs=Math.min(this.backoffMs*1.7,15e3)),this.clearConnectTimer(),this.connectTimer=window.setTimeout(()=>{this.connectTimer=null,this.connect()},t)}flushPending(e){for(let[t,n]of this.pending)this.emitRequestTiming(t,n,!1,`CLIENT_CLOSED`),n.reject(e);this.pending.clear()}nowMs(){return typeof performance<`u`&&typeof performance.now==`function`?performance.now():Date.now()}emitRequestTiming(e,t,n,r){let i=this.nowMs();try{this.opts.onRequestTiming?.({id:e,method:t.method,ok:n,durationMs:Math.max(0,i-t.startedAtMs),startedAtMs:t.startedAtMs,endedAtMs:i,errorCode:r})}catch(e){console.error(`[gateway] request timing handler error:`,e)}}buildConnectClient(){return{id:this.opts.clientName??Pe.CONTROL_UI,version:this.opts.clientVersion??`control-ui`,platform:this.opts.platform??navigator.platform??`web`,mode:this.opts.mode??Fe.WEBCHAT,instanceId:this.opts.instanceId}}buildConnectParams(e){return{minProtocol:4,maxProtocol:4,client:e.client,role:e.role,scopes:e.scopes,device:e.device,caps:[`tool-events`],auth:e.auth,userAgent:navigator.userAgent,locale:navigator.language}}async buildConnectPlan(e){let t=Dt,n=this.buildConnectClient(),r=this.opts.token?.trim()||void 0,i=this.opts.password?.trim()||void 0,a=typeof crypto<`u`&&!!crypto.subtle,o=null,s={authToken:r,authPassword:i,canFallbackToShared:!1};a&&(o=await mt(),s=this.selectConnectAuth({role:t,deviceId:o.deviceId}));let c=zt(s);return{role:t,scopes:c,client:n,explicitGatewayToken:r,selectedAuth:s,auth:Pt(s),deviceIdentity:o,device:await Bt({deviceIdentity:o,client:n,role:t,scopes:c,authToken:s.authToken,connectNonce:e})}}handleConnectHello(e,t,n,r){this.isActiveSocket(n,r)&&(this.pendingDeviceTokenRetry=!1,this.deviceTokenRetryBudgetUsed=!1,this.pendingStartupReconnectDelayMs=null,e?.auth?.deviceToken&&t.deviceIdentity&&ot({deviceId:t.deviceIdentity.deviceId,role:e.auth.role??t.role,token:e.auth.deviceToken,scopes:e.auth.scopes??[]}),this.backoffMs=800,this.opts.onHello?.(e))}handleConnectFailure(e,t,n,r){if(!this.isActiveSocket(n,r))return;let i=e instanceof bt?St(e):null,a=e instanceof bt?be(e.details):{},o=a.recommendedNextStep===`retry_with_device_token`,s=a.canRetryWithDeviceToken===!0||o||i===L.AUTH_TOKEN_MISMATCH;Vt({deviceTokenRetryBudgetUsed:this.deviceTokenRetryBudgetUsed,authDeviceToken:t.selectedAuth.authDeviceToken,explicitGatewayToken:t.explicitGatewayToken,deviceIdentity:t.deviceIdentity,storedToken:t.selectedAuth.storedToken,canRetryWithDeviceTokenHint:s,url:this.opts.url})&&(this.pendingDeviceTokenRetry=!0,this.deviceTokenRetryBudgetUsed=!0),e instanceof bt?this.pendingConnectError={code:e.gatewayCode,message:e.message,details:e.details,retryable:e.retryable,retryAfterMs:e.retryAfterMs}:this.pendingConnectError=void 0,t.selectedAuth.storedToken&&(t.selectedAuth.resolvedDeviceToken===t.selectedAuth.storedToken||t.selectedAuth.authDeviceToken===t.selectedAuth.storedToken)&&t.deviceIdentity&&i===L.AUTH_DEVICE_TOKEN_MISMATCH&&st({deviceId:t.deviceIdentity.deviceId,role:t.role});let c=Be(e);if(c!==null&&(this.pendingStartupReconnectDelayMs=c),ze(e)){n.close(At,`gateway starting`);return}n.close(kt,`connect failed`)}isActiveSocket(e,t){return!this.closed&&this.ws===e&&this.connectGeneration===t}async sendConnect(e,t){if(!this.isActiveSocket(e,t)||e.readyState!==WebSocket.OPEN||this.connectSent)return;this.connectSent=!0,this.clearConnectTimer();let n=await this.buildConnectPlan(this.connectNonce);!this.isActiveSocket(e,t)||e.readyState!==WebSocket.OPEN||(this.pendingDeviceTokenRetry&&n.selectedAuth.authDeviceToken&&(this.pendingDeviceTokenRetry=!1),this.requestOnSocket(e,`connect`,this.buildConnectParams(n)).then(r=>this.handleConnectHello(r,n,e,t)).catch(r=>this.handleConnectFailure(r,n,e,t)))}handleMessage(e,t,n){let r;try{r=JSON.parse(n)}catch{return}let i=r;if(i.type===`event`){let n=r;if(n.event===`connect.challenge`){let r=n.payload,i=r&&typeof r.nonce==`string`?r.nonce:null;i&&(this.connectNonce=i,this.sendConnect(e,t));return}let i=typeof n.seq==`number`?n.seq:null;i!==null&&(this.lastSeq!==null&&i>this.lastSeq+1&&this.opts.onGap?.({expected:this.lastSeq+1,received:i}),this.lastSeq=i);try{this.opts.onEvent?.(n);for(let e of this.eventListeners)e(n)}catch(e){console.error(`[gateway] event handler error:`,e)}return}if(i.type===`res`){let e=r,t=this.pending.get(e.id);if(!t)return;this.pending.delete(e.id),e.ok?(this.emitRequestTiming(e.id,t,!0),t.resolve(e.payload)):(this.emitRequestTiming(e.id,t,!1,e.error?.code),t.reject(new bt({code:e.error?.code??`UNAVAILABLE`,message:e.error?.message??`request failed`,details:e.error?.details,retryable:e.error?.retryable,retryAfterMs:e.error?.retryAfterMs})));return}}selectConnectAuth(e){let t=this.opts.token?.trim()||void 0,n=this.opts.password?.trim()||void 0,r=at({deviceId:e.deviceId,role:e.role}),i=r?.scopes??[],a=e.role!==Dt||i.includes(`operator.read`)||i.includes(`operator.write`)||i.includes(`operator.admin`)?r?.token:void 0,o=this.pendingDeviceTokenRetry&&!!t&&!!a&&Et(this.opts.url),s=t||n?void 0:a??void 0;return{authToken:t??s,authDeviceToken:o?a??void 0:void 0,authPassword:n,resolvedDeviceToken:s,storedToken:a??void 0,storedScopes:r?.scopes??void 0,canFallbackToShared:!!(a&&t)}}request(e,t){return!this.ws||this.ws.readyState!==WebSocket.OPEN?Promise.reject(Error(`网关未连接`)):this.requestOnSocket(this.ws,e,t)}requestOnSocket(e,t,n){if(this.ws!==e||e.readyState!==WebSocket.OPEN)return Promise.reject(Error(`网关未连接`));let r=yt(),i={type:`req`,id:r,method:t,params:n},a=this.nowMs(),o=new Promise((e,n)=>{this.pending.set(r,{resolve:t=>e(t),reject:n,method:t,startedAtMs:a})});return e.send(JSON.stringify(i)),o}addEventListener(e){return this.eventListeners.add(e),()=>{this.eventListeners.delete(e)}}queueConnect(e,t){this.isActiveSocket(e,t)&&(this.connectNonce=null,this.connectSent=!1,this.clearConnectTimer(),this.connectTimer=window.setTimeout(()=>{this.connectTimer=null,this.sendConnect(e,t)},750))}clearConnectTimer(){this.connectTimer!==null&&(window.clearTimeout(this.connectTimer),this.connectTimer=null)}};function Ut(e){return e instanceof bt?St(e)===L.AUTH_UNAUTHORIZED?!0:e.message.includes(`missing scope: operator.read`):!1}function Wt(e){return`This connection is missing operator.read, so ${e} cannot be loaded yet.`}function Gt(e){return new Promise(t=>setTimeout(()=>t(`timeout`),e))}async function Kt(e,t,n={}){if(!e.client||!e.connected||e.channelsLoading&&(!e.channelsLoadingProbe||t))return;let r=(e.channelsRefreshSeq??0)+1;e.channelsRefreshSeq=r,e.channelsLoading=!0,e.channelsLoadingProbe=t,e.channelsError=null;let i=(async()=>{try{let n=await e.client.request(`channels.status`,{probe:t,timeoutMs:8e3});if(e.channelsRefreshSeq!==r)return;e.channelsSnapshot=n,e.channelsLastSuccess=Date.now()}catch(t){if(e.channelsRefreshSeq!==r)return;Ut(t)?(e.channelsSnapshot=null,e.channelsError=Wt(`channel status`)):e.channelsError=String(t)}finally{e.channelsRefreshSeq===r&&(e.channelsLoading=!1,e.channelsLoadingProbe=null)}})(),a=n.softTimeoutMs;if(typeof a==`number`&&a>0)return await Promise.race([i.then(()=>`done`),Gt(a)]),void 0;await i}function qt(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.prototype.toString.call(e)===`[object Object]`}var Jt=new Set([`__proto__`,`prototype`,`constructor`]);function Yt(e){return Jt.has(e)}function Xt(e){return qt(e)?typeof e.id==`string`&&e.id.length>0:!1}function Zt(e,t,n){if(!e.every(Xt))return;let r=[...e],i=new Map;for(let[e,t]of r.entries()){if(!Xt(t))return;i.set(t.id,e)}for(let e of t){if(!Xt(e)){r.push(structuredClone(e));continue}let t=i.get(e.id);if(t===void 0){r.push(structuredClone(e)),i.set(e.id,r.length-1);continue}r[t]=Qt(r[t],e,n)}return r}function Qt(e,t,n={}){if(!qt(t))return t;let r=qt(e)?{...e}:{};for(let[e,i]of Object.entries(t))if(!Yt(e)){if(i===null){delete r[e];continue}if(n.mergeObjectArraysById&&Array.isArray(r[e])&&Array.isArray(i)){let t=Zt(r[e],i,n);if(t){r[e]=t;continue}}if(qt(i)){let t=r[e];r[e]=Qt(qt(t)?t:{},i,n);continue}r[e]=i}return r}function $t(e){return(e??[]).map(e=>T(String(e))??``).filter(Boolean)}function en(e){return[...new Set(e)]}function tn(e){return en(e)}function nn(e){return tn(e).toSorted((e,t)=>e<t?-1:+(e>t))}function rn(e){if(e)return Array.isArray(e.type)?e.type.find(e=>e!==`null`)??e.type[0]:e.type}function an(e){if(!e)return``;if(e.default!==void 0)return e.default;switch(rn(e)){case`object`:return{};case`array`:return[];case`boolean`:return!1;case`number`:case`integer`:return 0;case`string`:return``;default:return``}}function on(e){return e.filter(e=>typeof e==`string`).join(`.`)}function sn(e,t){let n=t[on(e)];if(n)return n;let r=e.map(String);for(let[e,n]of Object.entries(t)){if(!e.includes(`*`))continue;let t=e.split(`.`);if(t.length!==r.length)continue;let i=!0;for(let e=0;e<r.length;e+=1)if(t[e]!==`*`&&t[e]!==r[e]){i=!1;break}if(i)return n}}function cn(e){return e.replace(/_/g,` `).replace(/([a-z0-9])([A-Z])/g,`$1 $2`).replace(/\s+/g,` `).replace(/^./,e=>e.toUpperCase())}var ln=[`maxtokens`,`maxoutputtokens`,`maxinputtokens`,`maxcompletiontokens`,`contexttokens`,`totaltokens`,`tokencount`,`tokenlimit`,`tokenbudget`,`passwordfile`],un=[/token$/i,/password/i,/secret/i,/api.?key/i,/serviceaccount(?:ref)?$/i],dn=/^\$\{[^}]*\}$/,fn=`[redacted - click reveal to view]`,pn=64,mn=2e4;function hn(){return{visited:0}}function gn(e,t){return!(t>pn||(e.visited+=1,e.visited>mn))}function _n(e){return dn.test(e.trim())}function vn(e){let t=E(e);return!ln.some(e=>t.endsWith(e))&&un.some(t=>t.test(e))}function yn(e){return typeof e==`string`?e.trim().length>0&&!_n(e):e!=null}function bn(e){return e?.sensitive??!1}function xn(e,t,n){return Sn(e,t,n,hn(),0)}function Sn(e,t,n,r,i){if(!gn(r,i))return!0;let a=on(t);return(bn(sn(t,n))||vn(a))&&yn(e)?!0:Array.isArray(e)?e.some((e,a)=>Sn(e,[...t,a],n,r,i+1)):e&&typeof e==`object`?Object.entries(e).some(([e,a])=>Sn(a,[...t,e],n,r,i+1)):!1}function Cn(e,t,n){return wn(e,t,n,hn(),0)}function wn(e,t,n,r,i){if(!gn(r,i))return 1;if(e==null)return 0;let a=on(t);return(bn(sn(t,n))||vn(a))&&yn(e)?1:Array.isArray(e)?e.reduce((e,a,o)=>e+wn(a,[...t,o],n,r,i+1),0):e&&typeof e==`object`?Object.entries(e).reduce((e,[a,o])=>e+wn(o,[...t,a],n,r,i+1),0):0}function Tn(e,t){let n=e.trim();if(n===``)return;let r=Number(n);return!Number.isFinite(r)||t&&!Number.isInteger(r)?e:r}function En(e){let t=e.trim();return t===`true`?!0:t===`false`?!1:e}function Dn(e,t){if(e==null)return e;if(t.allOf&&t.allOf.length>0){let n=e;for(let e of t.allOf)n=Dn(n,e);return n}let n=rn(t);if(t.anyOf||t.oneOf){let n=(t.anyOf??t.oneOf??[]).filter(e=>!(e.type===`null`||Array.isArray(e.type)&&e.type.includes(`null`)));if(n.length===1)return Dn(e,n[0]);if(typeof e==`string`)for(let t of n){let n=rn(t);if(n===`number`||n===`integer`){let t=Tn(e,n===`integer`);if(t===void 0||typeof t==`number`)return t}if(n===`boolean`){let t=En(e);if(typeof t==`boolean`)return t}}for(let t of n){let n=rn(t);if(n===`object`&&typeof e==`object`&&!Array.isArray(e)||n===`array`&&Array.isArray(e))return Dn(e,t)}return e}if(n===`number`||n===`integer`){if(typeof e==`string`){let t=Tn(e,n===`integer`);if(t===void 0||typeof t==`number`)return t}return e}if(n===`boolean`){if(typeof e==`string`){let t=En(e);if(typeof t==`boolean`)return t}return e}if(n===`string`)return typeof e==`string`&&e.length===0&&t.minLength?void 0:e;if(n===`object`){if(typeof e!=`object`||Array.isArray(e))return e;let n=e,r=t.properties??{},i=t.additionalProperties&&typeof t.additionalProperties==`object`?t.additionalProperties:null,a={};for(let[e,t]of Object.entries(n)){let n=r[e]??i,o=n?Dn(t,n):t;o!==void 0&&(a[e]=o)}return a}if(n===`array`){if(!Array.isArray(e))return e;if(Array.isArray(t.items)){let n=t.items;return e.map((e,t)=>{let r=t<n.length?n[t]:void 0;return r?Dn(e,r):e})}let n=t.items;return n?e.map(e=>Dn(e,n)).filter(e=>e!==void 0):e}return e}function On(e){return structuredClone(e)}function kn(e){return`${JSON.stringify(e,null,2).trimEnd()}\n`}var An=`__FENGMING_REDACTED__`,jn={omitted:!0};function Mn(e){return{omitted:!1,value:e}}function Nn(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Pn(e,t){return e!=null&&Object.prototype.hasOwnProperty.call(e,t)}function Fn(e){if(e.value===An)return e.originalFormValue!==An||e.originalRawPathExists?Mn(e.value):e.canOmit?jn:Mn(e.value);if(Array.isArray(e.value)){let t=Array.isArray(e.originalFormValue)?e.originalFormValue:[],n=Array.isArray(e.originalRawValue)?e.originalRawValue:[];return Mn(e.value.map((e,r)=>{let i=Fn({value:e,originalFormValue:t[r],originalRawValue:n[r],originalRawPathExists:r in n,canOmit:!1});return i.omitted?e:i.value}))}if(!Nn(e.value))return Mn(e.value);let t=Nn(e.originalFormValue)?e.originalFormValue:null,n=Nn(e.originalRawValue)?e.originalRawValue:null,r={};for(let[i,a]of Object.entries(e.value)){let e=t!=null&&Object.prototype.hasOwnProperty.call(t,i)?t[i]:void 0,o=Pn(n,i),s=Fn({value:a,originalFormValue:e,originalRawValue:o?n?.[i]:void 0,originalRawPathExists:o,canOmit:!0});s.omitted||(r[i]=s.value)}return e.canOmit&&Object.keys(r).length===0&&!e.originalRawPathExists?jn:Mn(r)}function In(e,t,n){if(!t||!n)return e;let r;try{r=O.parse(n)}catch{return e}if(!Nn(r))return e;let i=Fn({value:e,originalFormValue:t,originalRawValue:r,originalRawPathExists:!0,canOmit:!1});return!i.omitted&&Nn(i.value)?i.value:e}var Ln=new Set([`__proto__`,`prototype`,`constructor`]);function Rn(e){return typeof e==`string`&&Ln.has(e)}function zn(e,t,n){if(t.length===0||t.some(Rn))return null;let r=e;for(let e=0;e<t.length-1;e+=1){let i=t[e],a=t[e+1];if(typeof i==`number`){if(!Array.isArray(r))return null;if(r[i]==null){if(!n)return null;r[i]=typeof a==`number`?[]:{}}r=r[i];continue}if(typeof r!=`object`||!r)return null;let o=r;if(o[i]==null){if(!n)return null;o[i]=typeof a==`number`?[]:{}}r=o[i]}return{current:r,lastKey:t[t.length-1]}}function Bn(e,t,n){let r=zn(e,t,!0);if(r){if(typeof r.lastKey==`number`){Array.isArray(r.current)&&(r.current[r.lastKey]=n);return}typeof r.current==`object`&&r.current!=null&&(r.current[r.lastKey]=n)}}function Vn(e,t){let n=zn(e,t,!1);if(n){if(typeof n.lastKey==`number`){Array.isArray(n.current)&&n.current.splice(n.lastKey,1);return}typeof n.current==`object`&&n.current!=null&&delete n.current[n.lastKey]}}var Hn=new WeakMap;async function Un(e,t={}){if(!(!e.client||!e.connected)){e.configLoading=!0,e.lastError=null;try{Jn(e,await e.client.request(`config.get`,{}),t)}catch(t){e.lastError=String(t)}finally{e.configLoading=!1}}}async function Wn(e){if(!(!e.client||!e.connected)&&!e.configSchemaLoading){e.configSchemaLoading=!0;try{Gn(e,await e.client.request(`config.schema`,{}))}catch(t){e.lastError=String(t)}finally{e.configSchemaLoading=!1}}}function Gn(e,t){e.configSchema=t.schema??null,e.configUiHints=t.uiHints??{},e.configSchemaVersion=t.version??null}function Kn(e){return!e||typeof e!=`object`||Array.isArray(e)?null:e}function qn(e){return Kn(e?.sourceConfig)??Kn(e?.resolved)??Kn(e?.config)}function Jn(e,t,n={}){let r=e.configFormDirty&&n.discardPendingChanges!==!0,i=e.configDraftBaseHash??e.configSnapshot?.hash??null;e.configSnapshot=t;let a=qn(t);!(typeof t.raw==`string`||a||e.configForm)&&e.configFormMode===`raw`&&(e.configFormMode=`form`);let o=typeof t.raw==`string`?t.raw:a?kn(a):e.configRaw;r?e.configFormMode!==`raw`&&e.configForm?e.configRaw=kn(e.configForm):e.configFormMode!==`raw`&&(e.configRaw=o):e.configRaw=o,e.configValid=typeof t.valid==`boolean`?t.valid:null,e.configIssues=Array.isArray(t.issues)?t.issues:[],r?e.configDraftBaseHash=i:(e.configForm=On(a??{}),e.configFormOriginal=On(a??{}),e.configRawOriginal=o,e.configFormDirty=!1,e.configDraftBaseHash=t.hash??null,Hn.delete(e))}function Yn(e){return!e||typeof e!=`object`||Array.isArray(e)?null:e}function Xn(e){if(e.configFormMode!==`form`||!e.configForm)return e.configRaw;let t=Yn(e.configSchema);return kn(In(t?Dn(e.configForm,t):e.configForm,e.configFormOriginal,e.configRawOriginal))}function Zn(e){let t=(e.status??`error`).trim()||`error`,n=(e.reason??`unexpected-error`).trim()||`unexpected-error`;return{tone:t===`skipped`?`warn`:`danger`,text:`Update ${t}: ${n}. ${{dirty:`Commit or stash changes, then retry.`,"no-upstream":`Set an upstream branch, then retry.`,"not-git-install":"Not a git checkout. Run `fengming update` from the CLI for a global reinstall.","not-fengming-root":`Run the update from an FengMing checkout or use the CLI global reinstall path.`,"deps-install-failed":`Dependency install failed. Fix the install error and retry.`,"build-failed":`Build failed. Fix the build error and retry.`,"ui-build-failed":`The control UI rebuild failed. Fix the UI build error and retry.`,"global-install-failed":`The global package install did not verify on disk. Retry or reinstall from the CLI.`,"restart-disabled":"The update was not applied because gateway restarts are disabled. Enable restarts in config, then retry — or run `fengming update` from the CLI.","restart-unavailable":`This global install cannot be safely replaced while restarts are disabled and no supervisor is present.`,"restart-unhealthy":`The replacement process never became healthy. The previous process stayed up so you can recover.`,"doctor-failed":"Doctor repair failed. Run `fengming doctor --non-interactive` and retry."}[n]??`See the gateway logs for the exact failure and retry once the cause is fixed.`}`}}async function Qn(e,t,n,r={}){if(!e.client||!e.connected)return!1;e[n]=!0,e.lastError=null;try{let n=Xn(e),i=e.configDraftBaseHash??e.configSnapshot?.hash;return i?(await e.client.request(t,{raw:n,baseHash:i,...r}),e.configFormDirty=!1,e.configDraftBaseHash=null,Hn.delete(e),await Un(e),!0):(e.lastError=`Config hash missing; reload and retry.`,!1)}catch(t){return e.lastError=String(t),!1}finally{e[n]=!1}}function $n(e,t){let n=On(e.configFormOriginal??qn(e.configSnapshot)??{}),r=kn(t),i=kn(n);e.configForm=t,e.configRaw=r,e.configFormDirty=r!==i}async function er(e){return Qn(e,`config.set`,`configSaving`)}async function tr(e){return Qn(e,`config.apply`,`configApplying`,{sessionKey:e.applySessionKey})}async function nr(e){if(!(!e.client||!e.connected)){e.updateRunning=!0,e.lastError=null,e.updateStatusBanner=null;try{let t=await e.client.request(`update.run`,{sessionKey:e.applySessionKey}),n=t.result?.status??(t.ok===!0?`ok`:`error`);if(n===`ok`&&t.ok===!0){e.pendingUpdateExpectedVersion=t.result?.after?.version??null;return}e.pendingUpdateExpectedVersion=null,e.updateStatusBanner=Zn({status:n,reason:t.result?.reason})}catch(t){e.lastError=String(t),e.pendingUpdateExpectedVersion=null}finally{e.updateRunning=!1}}}function rr(e,t){let n=On(e.configForm??qn(e.configSnapshot)??{});t(n),$n(e,n)}function ir(e,t){let n=Hn.get(e);n?n.add(t):Hn.set(e,new Set([t]))}function ar(e,t){let n=Hn.get(e);n&&(n.delete(t),n.size===0&&Hn.delete(e))}function or(e,t,n,r){if(n.length!==4||n[0]!==`plugins`||n[1]!==`entries`||typeof n[2]!=`string`||n[3]!==`enabled`)return;let i=n[2],a=t.plugins&&typeof t.plugins==`object`&&!Array.isArray(t.plugins)?t.plugins:null,o=Array.isArray(a?.allow)?a.allow:null;if(!o){ar(e,i);return}if(r===!0){if(o.includes(i))return;if(o.length===0){ar(e,i);return}Bn(t,[`plugins`,`allow`],[...o,i]),ir(e,i);return}Hn.get(e)?.has(i)&&(Bn(t,[`plugins`,`allow`],o.filter(e=>e!==i)),ar(e,i))}function sr(e,t,n){rr(e,r=>{if(Bn(r,t,n),t[0]===`plugins`&&t[1]===`allow`){Hn.delete(e);return}or(e,r,t,n)})}function cr(e,t){e.configRaw=t,e.configFormDirty=t!==e.configRawOriginal,e.configFormDirty?e.configDraftBaseHash=e.configDraftBaseHash??e.configSnapshot?.hash??null:e.configDraftBaseHash=e.configSnapshot?.hash??null}function lr(e,t){let n=qn(e.configSnapshot),r=e.configForm??n;if(!r||!e.configForm&&!e.configSnapshot?.hash)return;let i=Qt(On(r),t);!i||typeof i!=`object`||Array.isArray(i)||$n(e,On(i))}function ur(e){let t=qn(e.configSnapshot);e.configForm=On(e.configFormOriginal??t??{}),e.configRaw=e.configRawOriginal??kn(e.configFormOriginal??t??{}),e.configFormDirty=!1,e.configDraftBaseHash=e.configSnapshot?.hash??null,Hn.delete(e)}function dr(e,t){rr(e,e=>Vn(e,t))}function fr(e,t){let n=t.trim();if(!n)return-1;let r=e?.agents?.list;return Array.isArray(r)?r.findIndex(e=>e&&typeof e==`object`&&`id`in e&&e.id===n):-1}function pr(e,t){let n=t.trim();if(!n)return-1;let r=e.configForm??qn(e.configSnapshot),i=fr(r,n);if(i>=0)return i;let a=r?.agents?.list,o=Array.isArray(a)?a.length:0;return sr(e,[`agents`,`list`,o,`id`],n),o}function mr(e,t){let n=t.trim();if(!n)return!1;let r=fr(e.configForm??qn(e.configSnapshot),n);return r<0?!1:(rr(e,e=>{let t=e?.agents?.list;if(Array.isArray(t))for(let e=0;e<t.length;e++){let n=t[e];if(!n||typeof n!=`object`||Array.isArray(n))continue;let i=n;e===r?i.default=!0:delete i.default}}),!0)}async function hr(e){if(!(!e.client||!e.connected)){e.lastError=null;try{let t=await e.client.request(`config.openFile`,{});if(!t.ok){e.lastError=t.error||`Failed to open config file`;let n=t.path||e.configSnapshot?.path;if(n)try{await navigator.clipboard.writeText(n),e.lastError+=`\n\nFile path copied to clipboard: ${n}`}catch{e.lastError+=`\n\nFile path: ${n}`}}}catch(t){let n=e.configSnapshot?.path;if(n)try{await navigator.clipboard.writeText(n)}catch{}e.lastError=String(t)}}}async function gr(e){let t=await er(e),n=e.lastError;if(!t){await Un(e),n&&!e.lastError&&(e.lastError=n);return}await Kt(e,!0)}async function _r(e){await Un(e,{discardPendingChanges:!0}),await Kt(e,!0)}function vr(e,t){let n=t.trim();!n||e.settings.lastActiveSessionKey===n||e.applySettings({...e.settings,lastActiveSessionKey:n})}var yr=new Set([`tweakcn.com`,`www.tweakcn.com`]),br=/^[A-Za-z0-9][A-Za-z0-9_-]{7,127}$/,xr=`fengming-custom-theme`,Sr=2e5,Cr=240,wr=1e4,Tr=`"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,Er=`"JetBrains Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace`,Dr=[`url(`,`image(`,`image-set(`,`-webkit-image-set(`,`cross-fade(`,`element(`,`-moz-element(`,`paint(`,`@import`,`expression(`],Or=new Set([`black`,`white`,`transparent`,`currentcolor`]),kr=/^(?:rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch)\([a-z0-9+\-.,/%\s]+\)$/i,Ar=/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,jr=new Set([`,`,`'`,`"`,`.`,`_`,`-`]),Mr=`bg.bg-accent.bg-elevated.bg-hover.bg-muted.bg-content.card.card-foreground.card-highlight.popover.popover-foreground.panel.panel-strong.panel-hover.chrome.chrome-strong.text.text-strong.chat-text.muted.muted-strong.muted-foreground.border.border-strong.border-hover.input.ring.accent.accent-hover.accent-muted.accent-subtle.accent-foreground.accent-glow.primary.primary-foreground.secondary.secondary-foreground.accent-2.accent-2-muted.accent-2-subtle.destructive.destructive-foreground.danger.danger-muted.danger-subtle.focus.focus-ring.focus-glow.font-body.font-display.mono.grid-line`.split(`.`),Nr=[`background`,`foreground`,`card`,`card-foreground`,`popover`,`popover-foreground`,`primary`,`primary-foreground`,`secondary`,`secondary-foreground`,`muted`,`muted-foreground`,`accent`,`accent-foreground`,`destructive`,`destructive-foreground`,`border`,`input`,`ring`],Pr=D().max(Cr);function Fr(e){return Object.fromEntries(e.map(e=>[e,Pr]))}var Ir=ee({name:D().max(80).optional(),cssVars:ee({theme:ee({"font-sans":Pr.optional(),"font-mono":Pr.optional()}).optional(),light:ee(Fr(Nr)),dark:ee(Fr(Nr))})}),Lr=ee({sourceUrl:D(),themeId:D(),label:D(),importedAt:D(),light:ee(Fr(Mr)),dark:ee(Fr(Mr))});function Rr(e){if(!br.test(e))throw Error(`Unsupported tweakcn link. Expected a theme share URL.`)}function zr(e){let t=e.split(`/`).filter(Boolean);return t.length===2&&t[0]===`themes`?(Rr(t[1]),t[1]):t.length===3&&t[0]===`r`&&t[1]===`themes`?(Rr(t[2]),t[2]):null}function Br(e){let t=T(e);if(!t)throw Error(`Paste a tweakcn theme link to import.`);let n=t.replace(/[.,;:]+$/,``);return br.test(n)?`https://tweakcn.com/themes/${n}`:n.startsWith(`/themes/`)||n.startsWith(`/r/themes/`)?`https://tweakcn.com${n}`:/^(?:www\.)?tweakcn\.com\//i.test(n)?`https://${n}`:n.match(/https?:\/\/(?:www\.)?tweakcn\.com\/[^\s<>"')]+/i)?.[0]?.replace(/[.,;:]+$/,``)??n}function Vr(e){let t=zr(e.pathname);if(t)return t;let n=e.searchParams.get(`theme`)??e.searchParams.get(`themeId`)??e.searchParams.get(`id`);if(n)return Rr(n),n;throw Error(`Unsupported tweakcn link. Expected a theme share URL.`)}function Hr(e,t){let n=T(e);if(!n||n.length>Cr)throw Error(`Unsupported tweakcn token: ${t}`);let r=n.toLowerCase();if(Dr.some(e=>r.includes(e))||n.includes(`/*`)||n.includes(`*/`)||n.includes(`\\`))throw Error(`Unsupported tweakcn token: ${t}`);for(let e of n){let n=e.charCodeAt(0);if(n<32||n===127||e===`{`||e===`}`||e===`;`||e===`<`||e===`>`||e==="`")throw Error(`Unsupported tweakcn token: ${t}`)}return n}function Ur(e,t){let n=Hr(e,t),r=n.toLowerCase();if(Or.has(r)||Ar.test(n)||kr.test(n))return n;throw Error(`Unsupported tweakcn token: ${t}`)}function Wr(e){let t=e.charCodeAt(0);return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122||e===` `||jr.has(e)}function Gr(e,t){let n=Hr(e,t);if(n.includes(`(`)||n.includes(`)`)||!Array.from(n).every(Wr))throw Error(`Unsupported tweakcn token: ${t}`);return n}function Kr(e,t){return t===`font-sans`||t===`font-mono`?Gr(e,t):Ur(e,t)}function qr(e){return Object.fromEntries(e)}function Jr(e){if(!e||typeof e!=`object`)return null;let t=[];for(let n of Mr){let r=n===`font-body`||n===`font-display`||n===`mono`?Gr(e[n],n):Hr(e[n],n);t.push([n,r])}return qr(t)}function R(e,t,n,r){let i=T(e[n]);if(i)return Kr(i,n);let a=T(t?.[n]);if(a)return Kr(a,n);if(r!=null)return n===`font-sans`||n===`font-mono`?Gr(r,n):Hr(r,n);throw Error(`tweakcn theme is missing required token: ${n}`)}function Yr(e,t,n){let r=e===`light`,i=r?`black`:`white`,a=R(t,n,`background`),o=R(t,n,`foreground`),s=R(t,n,`card`),c=R(t,n,`card-foreground`),l=R(t,n,`popover`),u=R(t,n,`popover-foreground`),d=R(t,n,`primary`),f=R(t,n,`primary-foreground`),p=R(t,n,`secondary`),m=R(t,n,`secondary-foreground`),h=R(t,n,`muted`),g=R(t,n,`muted-foreground`),_=R(t,n,`accent`),v=R(t,n,`accent-foreground`),y=R(t,n,`destructive`),b=R(t,n,`destructive-foreground`),x=R(t,n,`border`),S=R(t,n,`input`),C=R(t,n,`ring`),w=R(t,n,`font-sans`,Tr),T=R(t,n,`font-mono`,Er);return qr([[`bg`,a],[`bg-accent`,`color-mix(in srgb, var(--bg) 88%, var(--card) 12%)`],[`bg-elevated`,s],[`bg-hover`,`color-mix(in srgb, var(--muted) 68%, var(--bg) 32%)`],[`bg-muted`,h],[`bg-content`,`color-mix(in srgb, var(--bg) 92%, var(--card) 8%)`],[`card`,s],[`card-foreground`,c],[`card-highlight`,`color-mix(in srgb, var(--text) ${r?`3`:`5`}%, transparent)`],[`popover`,l],[`popover-foreground`,u],[`panel`,a],[`panel-strong`,s],[`panel-hover`,`color-mix(in srgb, var(--card) 76%, var(--muted) 24%)`],[`chrome`,`color-mix(in srgb, var(--bg) 96%, transparent)`],[`chrome-strong`,`color-mix(in srgb, var(--bg) 98%, transparent)`],[`text`,o],[`text-strong`,o],[`chat-text`,o],[`muted`,g],[`muted-strong`,`color-mix(in srgb, var(--muted) 84%, var(--text) 16%)`],[`muted-foreground`,g],[`border`,x],[`border-strong`,`color-mix(in srgb, var(--border) 72%, var(--text) 28%)`],[`border-hover`,`color-mix(in srgb, var(--border) 55%, var(--text) 45%)`],[`input`,S],[`ring`,C],[`accent`,_],[`accent-hover`,`color-mix(in srgb, var(--accent) 82%, ${i} 18%)`],[`accent-muted`,_],[`accent-subtle`,`color-mix(in srgb, var(--accent) ${r?`10`:`16`}%, transparent)`],[`accent-foreground`,v],[`accent-glow`,`color-mix(in srgb, var(--accent) ${r?`18`:`30`}%, transparent)`],[`primary`,d],[`primary-foreground`,f],[`secondary`,p],[`secondary-foreground`,m],[`accent-2`,d],[`accent-2-muted`,`color-mix(in srgb, var(--accent-2) 72%, transparent)`],[`accent-2-subtle`,`color-mix(in srgb, var(--accent-2) ${r?`8`:`12`}%, transparent)`],[`destructive`,y],[`destructive-foreground`,b],[`danger`,y],[`danger-muted`,`color-mix(in srgb, var(--danger) 75%, transparent)`],[`danger-subtle`,`color-mix(in srgb, var(--danger) ${r?`8`:`12`}%, transparent)`],[`focus`,`color-mix(in srgb, var(--ring) ${r?`14`:`22`}%, transparent)`],[`focus-ring`,`0 0 0 2px var(--bg), 0 0 0 3px color-mix(in srgb, var(--ring) ${r?`70`:`80`}%, transparent)`],[`focus-glow`,`0 0 0 2px var(--bg), 0 0 0 3px var(--ring), 0 0 16px var(--accent-glow)`],[`font-body`,w],[`font-display`,w],[`mono`,T],[`grid-line`,`color-mix(in srgb, var(--text) ${r?`4`:`3`}%, transparent)`]])}function Xr(e){let t=T(e);return t?t.slice(0,80):`Custom`}function Zr(e){let t=Br(e),n;try{n=new URL(t)}catch{throw Error(`Paste a full tweakcn URL.`)}if(!yr.has(n.hostname))throw Error(`Only tweakcn.com theme links are supported.`);let r=Vr(n);return{themeId:r,sourceUrl:`https://tweakcn.com/themes/${r}`,fetchUrl:`https://tweakcn.com/r/themes/${r}`}}function Qr(e){let t=Lr.safeParse(e);if(!t.success)return null;try{Rr(t.data.themeId);let e=Jr(t.data.light),n=Jr(t.data.dark);return!e||!n?null:{sourceUrl:t.data.sourceUrl,themeId:t.data.themeId,label:Xr(t.data.label),importedAt:t.data.importedAt,light:e,dark:n}}catch{return null}}function $r(e,t){let n=Ir.safeParse(e);if(!n.success)throw Error(`tweakcn returned an invalid theme payload.`);let r=n.data,i=r.cssVars.theme;return{sourceUrl:t.sourceUrl,themeId:t.themeId,label:Xr(r.name),importedAt:new Date().toISOString(),light:Yr(`light`,r.cssVars.light,i),dark:Yr(`dark`,r.cssVars.dark,i)}}function ei(e){if(!e)return;let t;try{t=new URL(e)}catch{throw Error(`Unexpected tweakcn import response URL.`)}if(t.protocol!==`https:`||!yr.has(t.hostname))throw Error(`Unexpected redirect during tweakcn import.`)}function ti(e){let t=e.get(`content-length`);if(!t)return null;let n=Number(t);return Number.isFinite(n)&&n>=0?n:null}async function ni(e){let t=ti(e.headers);if(t!=null&&t>Sr)throw Error(`tweakcn theme payload is too large.`);if(!e.body)throw Error(`tweakcn returned an unreadable theme payload.`);let n=e.body.getReader(),r=new TextDecoder,i=0,a=``;try{for(;;){let e=await n.read();if(e.done)break;if(i+=e.value.byteLength,i>Sr)throw await n.cancel().catch(()=>void 0),Error(`tweakcn theme payload is too large.`);a+=r.decode(e.value,{stream:!0})}return a+=r.decode(),a}finally{n.releaseLock()}}async function ri(e){let t=await ni(e);try{return JSON.parse(t)}catch{throw Error(`tweakcn returned invalid JSON.`)}}async function ii(e,t=fetch){let n=Zr(e),r=new AbortController,i=setTimeout(()=>r.abort(),wr);try{let e=await t(n.fetchUrl,{headers:{accept:`application/json`},redirect:`error`,signal:r.signal});if(ei(e.url),!e.ok)throw Error(`tweakcn import failed (${e.status}).`);return $r(await ri(e),n)}catch(e){throw r.signal.aborted?Error(`tweakcn import timed out.`,{cause:e}):e}finally{clearTimeout(i)}}function ai(e){let t=Jr(e.light),n=Jr(e.dark);if(!t||!n)throw Error(`存储的自定义主题缺少必需的令牌`);let r=e=>Mr.map(t=>` --${t}: ${e[t]};`).join(`
3
3
  `);return[`:root[data-theme="custom"] {`,r(n),`}`,`:root[data-theme="custom-light"] {`,r(t),`}`].join(`
4
- `)}function oi(e){if(typeof document>`u`)return;let t=document.getElementById(xr);if(!e){t?.remove();return}let n=``;try{n=ai(e)}catch{t?.remove();return}if(!n){t?.remove();return}t||(t=document.createElement(`style`),t.id=xr,document.head.appendChild(t)),t.textContent=n}var si=[{label:`chat`,tabs:[`chat`]},{label:`control`,tabs:[`overview`,`activity`,`workboard`,`instances`,`sessions`,`usage`,`cron`]},{label:`agent`,tabs:[`agents`,`skills`,`nodes`,`dreams`]},{label:`settings`,tabs:[`config`]}],ci=[`config`,`channels`,`communications`,`appearance`,`automation`,`infrastructure`,`aiAgents`,`debug`,`logs`],li={agents:`/agents`,activity:`/activity`,overview:`/overview`,workboard:`/workboard`,channels:`/channels`,instances:`/instances`,sessions:`/sessions`,usage:`/usage`,cron:`/cron`,skills:`/skills`,nodes:`/nodes`,chat:`/chat`,config:`/config`,communications:`/communications`,appearance:`/appearance`,automation:`/automation`,infrastructure:`/infrastructure`,aiAgents:`/ai-agents`,debug:`/debug`,logs:`/logs`,dreams:`/dreaming`},ui={"/dreams":`dreams`},di=new Map([...Object.entries(li).map(([e,t])=>[t,e]),...Object.entries(ui)]);function fi(e){if(!e)return``;let t=e.trim();return t.startsWith(`/`)||(t=`/${t}`),t===`/`?``:(t.endsWith(`/`)&&(t=t.slice(0,-1)),t)}function pi(e){if(!e)return`/`;let t=e.trim();return t.startsWith(`/`)||(t=`/${t}`),t.length>1&&t.endsWith(`/`)&&(t=t.slice(0,-1)),t}function mi(e,t=``){let n=fi(t),r=li[e];return n?`${n}${r}`:r}function hi(e){return ci.includes(e)}function gi(e,t=``){let n=fi(t),r=e||`/`;n&&(r===n?r=`/`:r.startsWith(`${n}/`)&&(r=r.slice(n.length)));let i=E(pi(r));return i.endsWith(`/index.html`)&&(i=`/`),i===`/`?`chat`:di.get(i)??null}function _i(e){let t=pi(e);if(t.endsWith(`/index.html`)&&(t=pi(t.slice(0,-11))),t===`/`)return``;let n=t.split(`/`).filter(Boolean);if(n.length===0)return``;for(let e=0;e<n.length;e++){let t=E(`/${n.slice(e).join(`/`)}`);if(di.has(t)){let t=n.slice(0,e);return t.length?`/${t.join(`/`)}`:``}}return`/${n.join(`/`)}`}function vi(e){switch(e){case`agents`:return`folder`;case`chat`:return`messageSquare`;case`overview`:return`barChart`;case`activity`:return`activity`;case`workboard`:return`folder`;case`channels`:return`link`;case`instances`:return`radio`;case`sessions`:return`fileText`;case`usage`:return`barChart`;case`cron`:return`loader`;case`skills`:return`zap`;case`nodes`:return`monitor`;case`config`:return`settings`;case`communications`:return`send`;case`appearance`:return`spark`;case`automation`:return`terminal`;case`infrastructure`:return`globe`;case`aiAgents`:return`brain`;case`debug`:return`bug`;case`logs`:return`scrollText`;case`dreams`:return`moon`;default:return`folder`}}function yi(e){return v(e===`config`?`nav.settings`:`tabs.${e}`)}function bi(e){return v(`subtitles.${e}`)}var xi=new Set([`claw`,`knot`,`dash`,`custom`]),Si=new Set([`system`,`light`,`dark`]),Ci={defaultTheme:{theme:`claw`,mode:`dark`},docsTheme:{theme:`claw`,mode:`light`},lightTheme:{theme:`knot`,mode:`dark`},landingTheme:{theme:`knot`,mode:`dark`},newTheme:{theme:`knot`,mode:`dark`},dark:{theme:`claw`,mode:`dark`},light:{theme:`claw`,mode:`light`},openknot:{theme:`knot`,mode:`dark`},fieldmanual:{theme:`dash`,mode:`dark`},clawdash:{theme:`dash`,mode:`light`},system:{theme:`claw`,mode:`system`}};function wi(){return typeof globalThis.matchMedia==`function`?globalThis.matchMedia(`(prefers-color-scheme: light)`).matches:!1}function Ti(e,t){let n=typeof e==`string`?e:``,r=typeof t==`string`?t:``;return{theme:xi.has(n)?n:Ci[n]?.theme??`claw`,mode:Si.has(r)?r:Ci[n]?.mode??`system`}}function Ei(e){return e===`system`?wi()?`light`:`dark`:e}function Di(e,t){let n=Ei(t);return e===`claw`?n===`light`?`light`:`dark`:e===`knot`?n===`light`?`openknot-light`:`openknot`:e===`dash`?n===`light`?`dash-light`:`dash`:n===`light`?`custom-light`:`custom`}function Oi(e,t){let n=T(e);if(n)return n.length<=t?n:n.slice(0,t)}var ki=[{id:`read`,label:`read`,description:`Read file contents`,sectionId:`fs`,profiles:[`coding`]},{id:`write`,label:`write`,description:`Create or overwrite files`,sectionId:`fs`,profiles:[`coding`]},{id:`edit`,label:`edit`,description:`Make precise edits`,sectionId:`fs`,profiles:[`coding`]},{id:`apply_patch`,label:`apply_patch`,description:`Patch files`,sectionId:`fs`,profiles:[`coding`]},{id:`exec`,label:`exec`,description:`Run shell now.`,sectionId:`runtime`,profiles:[`coding`]},{id:`process`,label:`process`,description:`Inspect/control exec sessions.`,sectionId:`runtime`,profiles:[`coding`]},{id:`code_execution`,label:`code_execution`,description:`Run sandboxed remote analysis`,sectionId:`runtime`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`web_search`,label:`web_search`,description:`Search the web`,sectionId:`web`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`web_fetch`,label:`web_fetch`,description:`Fetch web content`,sectionId:`web`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`x_search`,label:`x_search`,description:`Search X posts`,sectionId:`web`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`memory_search`,label:`memory_search`,description:`Semantic search`,sectionId:`memory`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`memory_get`,label:`memory_get`,description:`Read memory files`,sectionId:`memory`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`sessions_list`,label:`sessions_list`,description:`List visible sessions; filters/previews.`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInFengMingGroup:!0},{id:`sessions_history`,label:`sessions_history`,description:`Read sanitized session history.`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInFengMingGroup:!0},{id:`sessions_send`,label:`sessions_send`,description:`Message session or configured agent.`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInFengMingGroup:!0},{id:`sessions_spawn`,label:`sessions_spawn`,description:`Spawn subagent or ACP session.`,sectionId:`sessions`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`sessions_yield`,label:`sessions_yield`,description:`End turn to receive sub-agent results`,sectionId:`sessions`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`subagents`,label:`subagents`,description:`Manage sub-agents`,sectionId:`sessions`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`session_status`,label:`session_status`,description:`Show session status/model/usage.`,sectionId:`sessions`,profiles:[`minimal`,`coding`,`messaging`],includeInFengMingGroup:!0},{id:`browser`,label:`browser`,description:`Control web browser`,sectionId:`ui`,profiles:[],includeInFengMingGroup:!0},{id:`canvas`,label:`canvas`,description:`Control node Canvas surfaces when the Canvas plugin is enabled`,sectionId:`ui`,profiles:[]},{id:`message`,label:`message`,description:`Send messages`,sectionId:`messaging`,profiles:[`messaging`],includeInFengMingGroup:!0},{id:`heartbeat_respond`,label:`heartbeat_respond`,description:`Record heartbeat outcomes`,sectionId:`automation`,profiles:[],includeInFengMingGroup:!0},{id:`cron`,label:`cron`,description:`Schedule reminders, cron, wake events.`,sectionId:`automation`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`gateway`,label:`gateway`,description:`Gateway control`,sectionId:`automation`,profiles:[],includeInFengMingGroup:!0},{id:`nodes`,label:`nodes`,description:`Nodes + devices`,sectionId:`nodes`,profiles:[],includeInFengMingGroup:!0},{id:`agents_list`,label:`agents_list`,description:`List agents`,sectionId:`agents`,profiles:[],includeInFengMingGroup:!0},{id:`get_goal`,label:`get_goal`,description:`Get current thread goal`,sectionId:`agents`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`create_goal`,label:`create_goal`,description:`Create a thread goal`,sectionId:`agents`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`update_goal`,label:`update_goal`,description:`Complete or block a thread goal`,sectionId:`agents`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`update_plan`,label:`update_plan`,description:`Track short work plan.`,sectionId:`agents`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`image`,label:`image`,description:`Image understanding`,sectionId:`media`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`image_generate`,label:`image_generate`,description:`Image generation`,sectionId:`media`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`music_generate`,label:`music_generate`,description:`Music generation`,sectionId:`media`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`video_generate`,label:`video_generate`,description:`Video generation`,sectionId:`media`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`tts`,label:`tts`,description:`Text-to-speech conversion`,sectionId:`media`,profiles:[],includeInFengMingGroup:!0}];new Map(ki.map(e=>[e.id,e]));function Ai(e){return ki.filter(t=>t.profiles.includes(e)).map(e=>e.id)}var ji={minimal:{allow:Ai(`minimal`)},coding:{allow:[...Ai(`coding`),`bundle-mcp`]},messaging:{allow:[...Ai(`messaging`),`bundle-mcp`]},full:{allow:[`*`]}};function Mi(){let e=new Map;for(let t of ki){let n=`group:${t.sectionId}`,r=e.get(n)??[];r.push(t.id),e.set(n,r)}return{"group:fengming":ki.filter(e=>e.includeInFengMingGroup).map(e=>e.id),...Object.fromEntries(e.entries())}}var Ni=Mi();function Pi(e){if(!e)return;let t=ji[e];if(t&&!(!t.allow&&!t.deny))return{allow:t.allow?[...t.allow]:void 0,deny:t.deny?[...t.deny]:void 0}}var Fi={bash:`exec`,"apply-patch":`apply_patch`},Ii={...Ni};function Li(e){let t=E(e);return Fi[t]??t}function Ri(e){return e?e.map(Li).filter(Boolean):[]}function zi(e){let t=Ri(e),n=[];for(let e of t){let t=Ii[e];if(t){n.push(...t);continue}n.push(e)}return tn(n)}function Bi(e){return Pi(e)}var Vi=50,Hi=64,Ui=2e6,Wi=500,Gi=200,Ki=/^(data:image\/|\/(?!\/))/i,qi=`Assistant`;function Ji(e){let t=Oi(e??void 0,Ui);return t?Ki.test(t)?t:/[\r\n]/.test(t)?null:t.length<=Hi?t:null:null}function Yi(e){let t=Oi(e?.name,Vi)??qi,n=Ji(e?.avatar),r=Oi(e?.avatarSource??void 0,Wi)??null,i=e?.avatarStatus===`none`||e?.avatarStatus===`local`||e?.avatarStatus===`remote`||e?.avatarStatus===`data`?e.avatarStatus:null,a=Oi(e?.avatarReason??void 0,Gi)??null;return{agentId:typeof e?.agentId==`string`&&e.agentId.trim()?e.agentId.trim():null,name:t,avatar:n,avatarSource:r,avatarStatus:i,avatarReason:a}}function Xi(e,t){let n=e.trim();if(!n)return``;let r=t?.trim();if(!r)return n;let i=`${r.toLowerCase()}/`;return n.toLowerCase().startsWith(i)?n:`${r}/${n}`}function Zi(e){let t=e.trim();return t?t.includes(`/`)?{kind:`qualified`,value:t}:{kind:`raw`,value:t}:null}function Qi(e,t){if(!e)return``;let n=e?.value.trim();return n?e.kind===`qualified`?n:ta(n,t)||n:``}function $i(e,t){if(typeof e!=`string`)return``;let n=e.trim();if(!n)return``;let r=t?.trim();if(!r)return n;let i=`${r.toLowerCase()}/`;return n.toLowerCase().startsWith(i)||n.includes(`/`)?n:Xi(n,r)}function ea(e,t){let n=t.trim().toLowerCase();return n?e.some(e=>oa(e)===n):!1}function ta(e,t){let n=e.trim().toLowerCase();if(!n)return``;let r=``;for(let e of t){if(e.id.trim().toLowerCase()!==n)continue;let t=Xi(e.id,e.provider);if(!r){r=t;continue}if(r.toLowerCase()!==t.toLowerCase())return``}return r}function na(e,t,n){if(typeof e!=`string`)return``;let r=e.trim();if(!r)return``;let i=t?.trim();if(!i)return Qi(Zi(r),n);if(!r.includes(`/`)){let e=Qi(Zi(r),n);return e===r?$i(r,i):e}if(ea(n,r))return r;let a=ta(r,n);if(a)return a;let o=Xi(r,i);return ea(n,o)?o:$i(r,i)}function ra(e){let t=e.trim();if(!t)return``;let n=t.indexOf(`/`);return n<=0?t:`${t.slice(n+1)} · ${t.slice(0,n)}`}function ia(e){let t=e.provider?.trim();return t?`${e.id} · ${t}`:e.id}function aa(e){return e.alias?.trim()||e.name.trim()}function oa(e){return Xi(e.id,e.provider).trim().toLowerCase()}function sa(e,t){return`${e.toLowerCase()}\u0000${t?.trim().toLowerCase()??``}`}function ca(e){let t=new Map,n=new Map;for(let r of e){let e=aa(r);if(!e)continue;let i=oa(r),a=e.toLowerCase(),o=sa(e,r.provider),s=t.get(a)??new Set;s.add(i),t.set(a,s);let c=n.get(o)??new Set;c.add(i),n.set(o,c)}let r=new Map;for(let i of e){let e=oa(i),a=aa(i);if(!a){r.set(e,ia(i));continue}let o=a.toLowerCase();if((t.get(o)?.size??0)<=1){r.set(e,a);continue}let s=i.provider?.trim();if((n.get(sa(a,s))?.size??0)<=1){r.set(e,s?`${a} · ${s}`:`${a} · ${i.id}`);continue}r.set(e,`${a} · ${ia(i)}`)}return r}function la(e,t){return t.get(oa(e))??ia(e)}function ua(e,t){let n=e.trim();return n?t.get(n.toLowerCase())??ra(n):``}function da(e,t){let n=e.provider?.trim();return{value:Xi(e.id,n),label:la(e,t)}}var fa=[{id:`fs`,label:`Files`,tools:[{id:`read`,label:`read`,description:v(`tools.readFiles`)},{id:`write`,label:`write`,description:v(`tools.createFiles`)},{id:`edit`,label:`edit`,description:v(`tools.preciseEdits`)},{id:`apply_patch`,label:`apply_patch`,description:`Patch files (OpenAI)`}]},{id:`runtime`,label:`Runtime`,tools:[{id:`exec`,label:`exec`,description:v(`tools.runShell`)},{id:`process`,label:`process`,description:v(`tools.manageProcesses`)}]},{id:`web`,label:`Web`,tools:[{id:`web_search`,label:`web_search`,description:v(`tools.searchWeb`)},{id:`web_fetch`,label:`web_fetch`,description:v(`tools.fetchWeb`)}]},{id:`memory`,label:`Memory`,tools:[{id:`memory_search`,label:`memory_search`,description:v(`tools.semanticSearch`)},{id:`memory_get`,label:`memory_get`,description:v(`tools.readMemory`)}]},{id:`sessions`,label:`Sessions`,tools:[{id:`sessions_list`,label:`sessions_list`,description:v(`tools.listSessions`)},{id:`sessions_history`,label:`sessions_history`,description:v(`tools.sessionHistory`)},{id:`sessions_send`,label:`sessions_send`,description:v(`tools.sendToSession`)},{id:`sessions_spawn`,label:`sessions_spawn`,description:`Spawn sub-agent`},{id:`session_status`,label:`session_status`,description:v(`tools.sessionStatus`)}]},{id:`ui`,label:`UI`,tools:[{id:`browser`,label:`browser`,description:v(`tools.controlBrowser`)},{id:`canvas`,label:`canvas`,description:v(`tools.controlCanvases`)}]},{id:`messaging`,label:`Messaging`,tools:[{id:`message`,label:`message`,description:v(`tools.sendMessages`)}]},{id:`automation`,label:`Automation`,tools:[{id:`cron`,label:`cron`,description:v(`tools.scheduleTasks`)},{id:`gateway`,label:`gateway`,description:v(`tools.gatewayControl`)}]},{id:`nodes`,label:`Nodes`,tools:[{id:`nodes`,label:`nodes`,description:`Nodes + devices`}]},{id:`agents`,label:`Agents`,tools:[{id:`agents_list`,label:`agents_list`,description:v(`tools.listAgents`)}]},{id:`media`,label:`Media`,tools:[{id:`image`,label:`image`,description:v(`tools.imageUnderstanding`)}]}],pa=[{id:`minimal`,label:`Minimal`},{id:`coding`,label:`Coding`},{id:`messaging`,label:`Messaging`},{id:`full`,label:`Full`}];function ma(e){return e?.groups?.length?e.groups.map(e=>({id:e.id,label:e.label,source:e.source,pluginId:e.pluginId,tools:e.tools.map(e=>({id:e.id,label:e.label,description:e.description,source:e.source,pluginId:e.pluginId,optional:e.optional,defaultProfiles:[...e.defaultProfiles]}))})):fa}function ha(e){return e?.profiles?.length?e.profiles:pa}function ga(e){return T(e.name)??T(e.identity?.name)??e.id}var _a=/^(data:image\/|\/(?!\/))/i;function va(e){return _a.test(e)}function ya(e,t){let n=[T(t?.avatar),T(e.identity?.avatarUrl),T(e.identity?.avatar)];for(let e of n)if(e&&va(e))return e;return null}function ba(e,t,n){let r=T(e);return r?.startsWith(`blob:`)?r:ya(t,n)}function xa(e){let t=T(e)?.replace(/\/$/,``)??``;return t?`${t}/favicon.svg`:`favicon.svg`}function Sa(e){let t=T(e)?.replace(/\/$/,``)??``;return t?`${t}/apple-touch-icon.png`:`apple-touch-icon.png`}function Ca(e){let t=e.trim();return t.startsWith(`blob:`)||va(t)}var wa=/[\u200B-\u200F\u202A-\u202E\u2060-\u206F\uFEFF]/u;function Ta(e){let t=e?.trim();return!t||t===`A`||Ca(t)||t.length>8||/\s/.test(t)||/[\\/.:]/.test(t)||wa.test(t)?null:t}function Ea(e,t){let n=[T(e.identity?.emoji),T(e.identity?.avatar),T(t?.emoji),T(t?.avatar)];for(let e of n){let t=Ta(e);if(t)return t}return null}function Da(e,t){return t&&e===t?`default`:null}function Oa(e){if(e==null||!Number.isFinite(e))return`-`;if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n.toFixed(+(n<10))} ${t[r]}`}function ka(e,t){let n=e;return{entry:(n?.agents?.list??[]).find(e=>e?.id===t),defaults:n?.agents?.defaults,globalTools:n?.tools}}function Aa(e,t,n,r,i){let a=ka(t,e.id),o=(n&&n.agentId===e.id?n.workspace:null)||a.entry?.workspace||a.defaults?.workspace||e.workspace||`default`,s=a.entry?.model?Ma(a.entry?.model):a.defaults?.model?Ma(a.defaults?.model):Ma(e.model),c=ja(e.agentRuntime),l=T(e.identity?.name)||T(e.name)||T(i?.name)||a.entry?.name||e.id,u=ya(e,i)?`custom`:Ea(e,i)??`—`,d=Array.isArray(a.entry?.skills)?a.entry?.skills:null,f=d?.length??null;return{workspace:o,model:s,runtime:c,identityName:l,identityAvatar:u,skillsLabel:d?`${f} selected`:`all skills`,isDefault:!!(r&&e.id===r)}}function ja(e){let t=T(e?.id)??`pi`,n=T(e?.fallback);return n?`${t} (fallback ${n})`:t}function Ma(e){if(!e)return`-`;if(typeof e==`string`)return T(e)||`-`;if(typeof e==`object`&&e){let t=e,n=T(t.primary);if(n){let e=Array.isArray(t.fallbacks)?t.fallbacks.length:0;return e>0?`${n} (+${e} fallback)`:n}}return`-`}function Na(e){let t=e.match(/^(.+) \(\+\d+ fallback\)$/);return t?t[1]:e}function Pa(e){if(!e)return null;if(typeof e==`string`)return T(e)||null;if(typeof e==`object`&&e){let t=e;return T(typeof t.primary==`string`?t.primary:typeof t.model==`string`?t.model:typeof t.id==`string`?t.id:typeof t.value==`string`?t.value:null)||null}return null}function Fa(e){if(!e||typeof e==`string`)return null;if(typeof e==`object`&&e){let t=e,n=Array.isArray(t.fallbacks)?t.fallbacks:Array.isArray(t.fallback)?t.fallback:null;return n?n.filter(e=>typeof e==`string`):null}return null}function Ia(e,t){return Fa(e)??Fa(t)}function La(e,t){if(typeof t!=`string`)return;let n=t.trim();n&&e.add(n)}function Ra(e,t){if(!t)return;if(typeof t==`string`){La(e,t);return}if(typeof t!=`object`)return;let n=t;La(e,n.primary),La(e,n.model),La(e,n.id),La(e,n.value);let r=Array.isArray(n.fallbacks)?n.fallbacks:Array.isArray(n.fallback)?n.fallback:[];for(let t of r)La(e,t)}function za(e){let t=Array.from(e),n=Array.from({length:t.length},()=>``),r=(e,r,i)=>{let a=e,o=r,s=e;for(;a<r&&o<i;)n[s++]=t[a].localeCompare(t[o])<=0?t[a++]:t[o++];for(;a<r;)n[s++]=t[a++];for(;o<i;)n[s++]=t[o++];for(let r=e;r<i;r+=1)t[r]=n[r]},i=(e,t)=>{if(t-e<=1)return;let n=e+t>>>1;i(e,n),i(n,t),r(e,n,t)};return i(0,t.length),t}function Ba(e){if(!e||typeof e!=`object`)return[];let t=e.agents;if(!t||typeof t!=`object`)return[];let n=new Set,r=t.defaults;if(r&&typeof r==`object`){let e=r;Ra(n,e.model);let t=e.models;if(t&&typeof t==`object`)for(let e of Object.keys(t))La(n,e)}let i=t.list;if(i&&typeof i==`object`)for(let e of Object.values(i))!e||typeof e!=`object`||Ra(n,e.model);return za(n)}function Va(e){return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function Ha(e){let t=e?.agents?.defaults?.models;if(!t||typeof t!=`object`)return[];let n=[];for(let[e,r]of Object.entries(t)){let t=e.trim();if(!t)continue;let i=r&&typeof r==`object`&&`alias`in r&&typeof r.alias==`string`?r.alias?.trim():void 0,a=i&&i!==t?`${i} (${t})`:t;n.push({value:t,label:a})}return n}function Ua(e,t,n,r){let a=new Set,o=[],s=r?E(r):null,c=(e,t)=>{let n=E(e);a.has(n)||(a.add(n),o.push({value:e,label:t}))};for(let t of Ha(e))c(t.value,t.label);if(n)for(let e of n){let t=e.provider?.trim();c(Xi(e.id,t),t?`${e.id} · ${t}`:e.id)}return t&&!a.has(E(t))&&o.unshift({value:t,label:`Current (${t})`}),o.length===0?i:o.map(e=>d`
4
+ `)}function oi(e){if(typeof document>`u`)return;let t=document.getElementById(xr);if(!e){t?.remove();return}let n=``;try{n=ai(e)}catch{t?.remove();return}if(!n){t?.remove();return}t||(t=document.createElement(`style`),t.id=xr,document.head.appendChild(t)),t.textContent=n}var si=[{label:`chat`,tabs:[`chat`]},{label:`control`,tabs:[`overview`,`activity`,`workboard`,`instances`,`sessions`,`usage`,`cron`]},{label:`agent`,tabs:[`agents`,`skills`,`nodes`,`dreams`]},{label:`settings`,tabs:[`config`]}],ci=[`config`,`channels`,`communications`,`appearance`,`automation`,`infrastructure`,`aiAgents`,`debug`,`logs`],li={agents:`/agents`,activity:`/activity`,overview:`/overview`,workboard:`/workboard`,channels:`/channels`,instances:`/instances`,sessions:`/sessions`,usage:`/usage`,cron:`/cron`,skills:`/skills`,nodes:`/nodes`,chat:`/chat`,config:`/config`,communications:`/communications`,appearance:`/appearance`,automation:`/automation`,infrastructure:`/infrastructure`,aiAgents:`/ai-agents`,debug:`/debug`,logs:`/logs`,dreams:`/dreaming`},ui={"/dreams":`dreams`},di=new Map([...Object.entries(li).map(([e,t])=>[t,e]),...Object.entries(ui)]);function fi(e){if(!e)return``;let t=e.trim();return t.startsWith(`/`)||(t=`/${t}`),t===`/`?``:(t.endsWith(`/`)&&(t=t.slice(0,-1)),t)}function pi(e){if(!e)return`/`;let t=e.trim();return t.startsWith(`/`)||(t=`/${t}`),t.length>1&&t.endsWith(`/`)&&(t=t.slice(0,-1)),t}function mi(e,t=``){let n=fi(t),r=li[e];return n?`${n}${r}`:r}function hi(e){return ci.includes(e)}function gi(e,t=``){let n=fi(t),r=e||`/`;n&&(r===n?r=`/`:r.startsWith(`${n}/`)&&(r=r.slice(n.length)));let i=E(pi(r));return i.endsWith(`/index.html`)&&(i=`/`),i===`/`?`chat`:di.get(i)??null}function _i(e){let t=pi(e);if(t.endsWith(`/index.html`)&&(t=pi(t.slice(0,-11))),t===`/`)return``;let n=t.split(`/`).filter(Boolean);if(n.length===0)return``;for(let e=0;e<n.length;e++){let t=E(`/${n.slice(e).join(`/`)}`);if(di.has(t)){let t=n.slice(0,e);return t.length?`/${t.join(`/`)}`:``}}return`/${n.join(`/`)}`}function vi(e){switch(e){case`agents`:return`folder`;case`chat`:return`messageSquare`;case`overview`:return`barChart`;case`activity`:return`activity`;case`workboard`:return`folder`;case`channels`:return`link`;case`instances`:return`radio`;case`sessions`:return`fileText`;case`usage`:return`barChart`;case`cron`:return`loader`;case`skills`:return`zap`;case`nodes`:return`monitor`;case`config`:return`settings`;case`communications`:return`send`;case`appearance`:return`spark`;case`automation`:return`terminal`;case`infrastructure`:return`globe`;case`aiAgents`:return`brain`;case`debug`:return`bug`;case`logs`:return`scrollText`;case`dreams`:return`moon`;default:return`folder`}}function yi(e){return v(e===`config`?`nav.settings`:`tabs.${e}`)}function bi(e){return v(`subtitles.${e}`)}var xi=new Set([`claw`,`knot`,`dash`,`custom`]),Si=new Set([`system`,`light`,`dark`]),Ci={defaultTheme:{theme:`claw`,mode:`dark`},docsTheme:{theme:`claw`,mode:`light`},lightTheme:{theme:`knot`,mode:`dark`},landingTheme:{theme:`knot`,mode:`dark`},newTheme:{theme:`knot`,mode:`dark`},dark:{theme:`claw`,mode:`dark`},light:{theme:`claw`,mode:`light`},openknot:{theme:`knot`,mode:`dark`},fieldmanual:{theme:`dash`,mode:`dark`},clawdash:{theme:`dash`,mode:`light`},system:{theme:`claw`,mode:`system`}};function wi(){return typeof globalThis.matchMedia==`function`?globalThis.matchMedia(`(prefers-color-scheme: light)`).matches:!1}function Ti(e,t){let n=typeof e==`string`?e:``,r=typeof t==`string`?t:``;return{theme:xi.has(n)?n:Ci[n]?.theme??`claw`,mode:Si.has(r)?r:Ci[n]?.mode??`system`}}function Ei(e){return e===`system`?wi()?`light`:`dark`:e}function Di(e,t){let n=Ei(t);return e===`claw`?n===`light`?`light`:`dark`:e===`knot`?n===`light`?`openknot-light`:`openknot`:e===`dash`?n===`light`?`dash-light`:`dash`:n===`light`?`custom-light`:`custom`}function Oi(e,t){let n=T(e);if(n)return n.length<=t?n:n.slice(0,t)}var ki=[{id:`read`,label:`read`,description:`Read file contents`,sectionId:`fs`,profiles:[`coding`]},{id:`write`,label:`write`,description:`Create or overwrite files`,sectionId:`fs`,profiles:[`coding`]},{id:`edit`,label:`edit`,description:`Make precise edits`,sectionId:`fs`,profiles:[`coding`]},{id:`apply_patch`,label:`apply_patch`,description:`Patch files`,sectionId:`fs`,profiles:[`coding`]},{id:`exec`,label:`exec`,description:`Run shell now.`,sectionId:`runtime`,profiles:[`coding`]},{id:`process`,label:`process`,description:`Inspect/control exec sessions.`,sectionId:`runtime`,profiles:[`coding`]},{id:`code_execution`,label:`code_execution`,description:`Run sandboxed remote analysis`,sectionId:`runtime`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`web_search`,label:`web_search`,description:`Search the web`,sectionId:`web`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`web_fetch`,label:`web_fetch`,description:`Fetch web content`,sectionId:`web`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`x_search`,label:`x_search`,description:`Search X posts`,sectionId:`web`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`memory_search`,label:`memory_search`,description:`Semantic search`,sectionId:`memory`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`memory_get`,label:`memory_get`,description:`Read memory files`,sectionId:`memory`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`sessions_list`,label:`sessions_list`,description:`List visible sessions; filters/previews.`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInFengMingGroup:!0},{id:`sessions_history`,label:`sessions_history`,description:`Read sanitized session history.`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInFengMingGroup:!0},{id:`sessions_send`,label:`sessions_send`,description:`Message session or configured agent.`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInFengMingGroup:!0},{id:`sessions_spawn`,label:`sessions_spawn`,description:`Spawn subagent or ACP session.`,sectionId:`sessions`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`sessions_yield`,label:`sessions_yield`,description:`End turn to receive sub-agent results`,sectionId:`sessions`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`subagents`,label:`subagents`,description:`Manage sub-agents`,sectionId:`sessions`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`session_status`,label:`session_status`,description:`Show session status/model/usage.`,sectionId:`sessions`,profiles:[`minimal`,`coding`,`messaging`],includeInFengMingGroup:!0},{id:`browser`,label:`browser`,description:`Control web browser`,sectionId:`ui`,profiles:[],includeInFengMingGroup:!0},{id:`canvas`,label:`canvas`,description:`Control node Canvas surfaces when the Canvas plugin is enabled`,sectionId:`ui`,profiles:[]},{id:`message`,label:`message`,description:`Send messages`,sectionId:`messaging`,profiles:[`messaging`],includeInFengMingGroup:!0},{id:`heartbeat_respond`,label:`heartbeat_respond`,description:`Record heartbeat outcomes`,sectionId:`automation`,profiles:[],includeInFengMingGroup:!0},{id:`cron`,label:`cron`,description:`Schedule reminders, cron, wake events.`,sectionId:`automation`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`gateway`,label:`gateway`,description:`Gateway control`,sectionId:`automation`,profiles:[],includeInFengMingGroup:!0},{id:`nodes`,label:`nodes`,description:`Nodes + devices`,sectionId:`nodes`,profiles:[],includeInFengMingGroup:!0},{id:`agents_list`,label:`agents_list`,description:`List agents`,sectionId:`agents`,profiles:[],includeInFengMingGroup:!0},{id:`get_goal`,label:`get_goal`,description:`Get current thread goal`,sectionId:`agents`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`create_goal`,label:`create_goal`,description:`Create a thread goal`,sectionId:`agents`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`update_goal`,label:`update_goal`,description:`Complete or block a thread goal`,sectionId:`agents`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`update_plan`,label:`update_plan`,description:`Track short work plan.`,sectionId:`agents`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`image`,label:`image`,description:`Image understanding`,sectionId:`media`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`image_generate`,label:`image_generate`,description:`Image generation`,sectionId:`media`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`music_generate`,label:`music_generate`,description:`Music generation`,sectionId:`media`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`video_generate`,label:`video_generate`,description:`Video generation`,sectionId:`media`,profiles:[`coding`],includeInFengMingGroup:!0},{id:`tts`,label:`tts`,description:`Text-to-speech conversion`,sectionId:`media`,profiles:[],includeInFengMingGroup:!0}];new Map(ki.map(e=>[e.id,e]));function Ai(e){return ki.filter(t=>t.profiles.includes(e)).map(e=>e.id)}var ji={minimal:{allow:Ai(`minimal`)},coding:{allow:[...Ai(`coding`),`bundle-mcp`]},messaging:{allow:[...Ai(`messaging`),`bundle-mcp`]},full:{allow:[`*`]}};function Mi(){let e=new Map;for(let t of ki){let n=`group:${t.sectionId}`,r=e.get(n)??[];r.push(t.id),e.set(n,r)}return{"group:fengming":ki.filter(e=>e.includeInFengMingGroup).map(e=>e.id),...Object.fromEntries(e.entries())}}var Ni=Mi();function Pi(e){if(!e)return;let t=ji[e];if(t&&!(!t.allow&&!t.deny))return{allow:t.allow?[...t.allow]:void 0,deny:t.deny?[...t.deny]:void 0}}var Fi={bash:`exec`,"apply-patch":`apply_patch`},Ii={...Ni};function Li(e){let t=E(e);return Fi[t]??t}function Ri(e){return e?e.map(Li).filter(Boolean):[]}function zi(e){let t=Ri(e),n=[];for(let e of t){let t=Ii[e];if(t){n.push(...t);continue}n.push(e)}return tn(n)}function Bi(e){return Pi(e)}var Vi=50,Hi=64,Ui=2e6,Wi=500,Gi=200,Ki=/^(data:image\/|\/(?!\/))/i,qi=`Assistant`;function Ji(e){let t=Oi(e??void 0,Ui);return t?Ki.test(t)?t:/[\r\n]/.test(t)?null:t.length<=Hi?t:null:null}function Yi(e){let t=Oi(e?.name,Vi)??qi,n=Ji(e?.avatar),r=Oi(e?.avatarSource??void 0,Wi)??null,i=e?.avatarStatus===`none`||e?.avatarStatus===`local`||e?.avatarStatus===`remote`||e?.avatarStatus===`data`?e.avatarStatus:null,a=Oi(e?.avatarReason??void 0,Gi)??null;return{agentId:typeof e?.agentId==`string`&&e.agentId.trim()?e.agentId.trim():null,name:t,avatar:n,avatarSource:r,avatarStatus:i,avatarReason:a}}function Xi(e,t){let n=e.trim();if(!n)return``;let r=t?.trim();if(!r)return n;let i=`${r.toLowerCase()}/`;return n.toLowerCase().startsWith(i)?n:`${r}/${n}`}function Zi(e){let t=e.trim();return t?t.includes(`/`)?{kind:`qualified`,value:t}:{kind:`raw`,value:t}:null}function Qi(e,t){if(!e)return``;let n=e?.value.trim();return n?e.kind===`qualified`?n:ta(n,t)||n:``}function $i(e,t){if(typeof e!=`string`)return``;let n=e.trim();if(!n)return``;let r=t?.trim();if(!r)return n;let i=`${r.toLowerCase()}/`;return n.toLowerCase().startsWith(i)||n.includes(`/`)?n:Xi(n,r)}function ea(e,t){let n=t.trim().toLowerCase();return n?e.some(e=>oa(e)===n):!1}function ta(e,t){let n=e.trim().toLowerCase();if(!n)return``;let r=``;for(let e of t){if(e.id.trim().toLowerCase()!==n)continue;let t=Xi(e.id,e.provider);if(!r){r=t;continue}if(r.toLowerCase()!==t.toLowerCase())return``}return r}function na(e,t,n){if(typeof e!=`string`)return``;let r=e.trim();if(!r)return``;let i=t?.trim();if(!i)return Qi(Zi(r),n);if(!r.includes(`/`)){let e=Qi(Zi(r),n);return e===r?$i(r,i):e}if(ea(n,r))return r;let a=ta(r,n);if(a)return a;let o=Xi(r,i);return ea(n,o)?o:$i(r,i)}function ra(e){let t=e.trim();if(!t)return``;let n=t.indexOf(`/`);return n<=0?t:`${t.slice(n+1)} · ${t.slice(0,n)}`}function ia(e){let t=e.provider?.trim();return t?`${e.id} · ${t}`:e.id}function aa(e){return e.alias?.trim()||e.name.trim()}function oa(e){return Xi(e.id,e.provider).trim().toLowerCase()}function sa(e,t){return`${e.toLowerCase()}\u0000${t?.trim().toLowerCase()??``}`}function ca(e){let t=new Map,n=new Map;for(let r of e){let e=aa(r);if(!e)continue;let i=oa(r),a=e.toLowerCase(),o=sa(e,r.provider),s=t.get(a)??new Set;s.add(i),t.set(a,s);let c=n.get(o)??new Set;c.add(i),n.set(o,c)}let r=new Map;for(let i of e){let e=oa(i),a=aa(i);if(!a){r.set(e,ia(i));continue}let o=a.toLowerCase();if((t.get(o)?.size??0)<=1){r.set(e,a);continue}let s=i.provider?.trim();if((n.get(sa(a,s))?.size??0)<=1){r.set(e,s?`${a} · ${s}`:`${a} · ${i.id}`);continue}r.set(e,`${a} · ${ia(i)}`)}return r}function la(e,t){return t.get(oa(e))??ia(e)}function ua(e,t){let n=e.trim();return n?t.get(n.toLowerCase())??ra(n):``}function da(e,t){let n=e.provider?.trim();return{value:Xi(e.id,n),label:la(e,t)}}var fa=[{id:`fs`,label:`Files`,tools:[{id:`read`,label:`read`,description:v(`tools.readFiles`)},{id:`write`,label:`write`,description:v(`tools.createFiles`)},{id:`edit`,label:`edit`,description:v(`tools.preciseEdits`)},{id:`apply_patch`,label:`apply_patch`,description:`Patch files (OpenAI)`}]},{id:`runtime`,label:`Runtime`,tools:[{id:`exec`,label:`exec`,description:v(`tools.runShell`)},{id:`process`,label:`process`,description:v(`tools.manageProcesses`)}]},{id:`web`,label:`Web`,tools:[{id:`web_search`,label:`web_search`,description:v(`tools.searchWeb`)},{id:`web_fetch`,label:`web_fetch`,description:v(`tools.fetchWeb`)}]},{id:`memory`,label:`Memory`,tools:[{id:`memory_search`,label:`memory_search`,description:v(`tools.semanticSearch`)},{id:`memory_get`,label:`memory_get`,description:v(`tools.readMemory`)}]},{id:`sessions`,label:`Sessions`,tools:[{id:`sessions_list`,label:`sessions_list`,description:v(`tools.listSessions`)},{id:`sessions_history`,label:`sessions_history`,description:v(`tools.sessionHistory`)},{id:`sessions_send`,label:`sessions_send`,description:v(`tools.sendToSession`)},{id:`sessions_spawn`,label:`sessions_spawn`,description:v(`agents.spawnSubAgent`)},{id:`session_status`,label:`session_status`,description:v(`tools.sessionStatus`)}]},{id:`ui`,label:`UI`,tools:[{id:`browser`,label:`browser`,description:v(`tools.controlBrowser`)},{id:`canvas`,label:`canvas`,description:v(`tools.controlCanvases`)}]},{id:`messaging`,label:`Messaging`,tools:[{id:`message`,label:`message`,description:v(`tools.sendMessages`)}]},{id:`automation`,label:`Automation`,tools:[{id:`cron`,label:`cron`,description:v(`tools.scheduleTasks`)},{id:`gateway`,label:`gateway`,description:v(`tools.gatewayControl`)}]},{id:`nodes`,label:`Nodes`,tools:[{id:`nodes`,label:`nodes`,description:v(`agents.nodesDevices`)}]},{id:`agents`,label:`Agents`,tools:[{id:`agents_list`,label:`agents_list`,description:v(`tools.listAgents`)}]},{id:`media`,label:`Media`,tools:[{id:`image`,label:`image`,description:v(`tools.imageUnderstanding`)}]}],pa=[{id:`minimal`,label:`Minimal`},{id:`coding`,label:`Coding`},{id:`messaging`,label:`Messaging`},{id:`full`,label:`Full`}];function ma(e){return e?.groups?.length?e.groups.map(e=>({id:e.id,label:e.label,source:e.source,pluginId:e.pluginId,tools:e.tools.map(e=>({id:e.id,label:e.label,description:e.description,source:e.source,pluginId:e.pluginId,optional:e.optional,defaultProfiles:[...e.defaultProfiles]}))})):fa}function ha(e){return e?.profiles?.length?e.profiles:pa}function ga(e){return T(e.name)??T(e.identity?.name)??e.id}var _a=/^(data:image\/|\/(?!\/))/i;function va(e){return _a.test(e)}function ya(e,t){let n=[T(t?.avatar),T(e.identity?.avatarUrl),T(e.identity?.avatar)];for(let e of n)if(e&&va(e))return e;return null}function ba(e,t,n){let r=T(e);return r?.startsWith(`blob:`)?r:ya(t,n)}function xa(e){let t=T(e)?.replace(/\/$/,``)??``;return t?`${t}/favicon.svg`:`favicon.svg`}function Sa(e){let t=T(e)?.replace(/\/$/,``)??``;return t?`${t}/apple-touch-icon.png`:`apple-touch-icon.png`}function Ca(e){let t=e.trim();return t.startsWith(`blob:`)||va(t)}var wa=/[\u200B-\u200F\u202A-\u202E\u2060-\u206F\uFEFF]/u;function Ta(e){let t=e?.trim();return!t||t===`A`||Ca(t)||t.length>8||/\s/.test(t)||/[\\/.:]/.test(t)||wa.test(t)?null:t}function Ea(e,t){let n=[T(e.identity?.emoji),T(e.identity?.avatar),T(t?.emoji),T(t?.avatar)];for(let e of n){let t=Ta(e);if(t)return t}return null}function Da(e,t){return t&&e===t?`default`:null}function Oa(e){if(e==null||!Number.isFinite(e))return`-`;if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n.toFixed(+(n<10))} ${t[r]}`}function ka(e,t){let n=e;return{entry:(n?.agents?.list??[]).find(e=>e?.id===t),defaults:n?.agents?.defaults,globalTools:n?.tools}}function Aa(e,t,n,r,i){let a=ka(t,e.id),o=(n&&n.agentId===e.id?n.workspace:null)||a.entry?.workspace||a.defaults?.workspace||e.workspace||`default`,s=a.entry?.model?Ma(a.entry?.model):a.defaults?.model?Ma(a.defaults?.model):Ma(e.model),c=ja(e.agentRuntime),l=T(e.identity?.name)||T(e.name)||T(i?.name)||a.entry?.name||e.id,u=ya(e,i)?`custom`:Ea(e,i)??`—`,d=Array.isArray(a.entry?.skills)?a.entry?.skills:null,f=d?.length??null;return{workspace:o,model:s,runtime:c,identityName:l,identityAvatar:u,skillsLabel:d?`${f} selected`:`all skills`,isDefault:!!(r&&e.id===r)}}function ja(e){let t=T(e?.id)??`pi`,n=T(e?.fallback);return n?`${t} (fallback ${n})`:t}function Ma(e){if(!e)return`-`;if(typeof e==`string`)return T(e)||`-`;if(typeof e==`object`&&e){let t=e,n=T(t.primary);if(n){let e=Array.isArray(t.fallbacks)?t.fallbacks.length:0;return e>0?`${n} (+${e} fallback)`:n}}return`-`}function Na(e){let t=e.match(/^(.+) \(\+\d+ fallback\)$/);return t?t[1]:e}function Pa(e){if(!e)return null;if(typeof e==`string`)return T(e)||null;if(typeof e==`object`&&e){let t=e;return T(typeof t.primary==`string`?t.primary:typeof t.model==`string`?t.model:typeof t.id==`string`?t.id:typeof t.value==`string`?t.value:null)||null}return null}function Fa(e){if(!e||typeof e==`string`)return null;if(typeof e==`object`&&e){let t=e,n=Array.isArray(t.fallbacks)?t.fallbacks:Array.isArray(t.fallback)?t.fallback:null;return n?n.filter(e=>typeof e==`string`):null}return null}function Ia(e,t){return Fa(e)??Fa(t)}function La(e,t){if(typeof t!=`string`)return;let n=t.trim();n&&e.add(n)}function Ra(e,t){if(!t)return;if(typeof t==`string`){La(e,t);return}if(typeof t!=`object`)return;let n=t;La(e,n.primary),La(e,n.model),La(e,n.id),La(e,n.value);let r=Array.isArray(n.fallbacks)?n.fallbacks:Array.isArray(n.fallback)?n.fallback:[];for(let t of r)La(e,t)}function za(e){let t=Array.from(e),n=Array.from({length:t.length},()=>``),r=(e,r,i)=>{let a=e,o=r,s=e;for(;a<r&&o<i;)n[s++]=t[a].localeCompare(t[o])<=0?t[a++]:t[o++];for(;a<r;)n[s++]=t[a++];for(;o<i;)n[s++]=t[o++];for(let r=e;r<i;r+=1)t[r]=n[r]},i=(e,t)=>{if(t-e<=1)return;let n=e+t>>>1;i(e,n),i(n,t),r(e,n,t)};return i(0,t.length),t}function Ba(e){if(!e||typeof e!=`object`)return[];let t=e.agents;if(!t||typeof t!=`object`)return[];let n=new Set,r=t.defaults;if(r&&typeof r==`object`){let e=r;Ra(n,e.model);let t=e.models;if(t&&typeof t==`object`)for(let e of Object.keys(t))La(n,e)}let i=t.list;if(i&&typeof i==`object`)for(let e of Object.values(i))!e||typeof e!=`object`||Ra(n,e.model);return za(n)}function Va(e){return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function Ha(e){let t=e?.agents?.defaults?.models;if(!t||typeof t!=`object`)return[];let n=[];for(let[e,r]of Object.entries(t)){let t=e.trim();if(!t)continue;let i=r&&typeof r==`object`&&`alias`in r&&typeof r.alias==`string`?r.alias?.trim():void 0,a=i&&i!==t?`${i} (${t})`:t;n.push({value:t,label:a})}return n}function Ua(e,t,n,r){let a=new Set,o=[],s=r?E(r):null,c=(e,t)=>{let n=E(e);a.has(n)||(a.add(n),o.push({value:e,label:t}))};for(let t of Ha(e))c(t.value,t.label);if(n)for(let e of n){let t=e.provider?.trim();c(Xi(e.id,t),t?`${e.id} · ${t}`:e.id)}return t&&!a.has(E(t))&&o.unshift({value:t,label:`Current (${t})`}),o.length===0?i:o.map(e=>d`
5
5
  <option
6
6
  value=${e.value}
7
7
  ?selected=${s===E(e.value)}
@@ -59,12 +59,12 @@ Action:
59
59
  • Limit – Set max characters for TTS
60
60
  • Summary – Toggle AI summary for long texts
61
61
  • Audio – Generate TTS from custom text
62
- • Help – Show usage guide`}}),H({key:`whoami`,nativeName:`whoami`,description:`Show your sender id.`,textAlias:`/whoami`,category:`status`,tier:`power`}),H({key:`session`,nativeName:`session`,description:`Manage session-level settings (for example /session idle).`,textAlias:`/session`,category:`session`,tier:`power`,args:[{name:`action`,description:`idle | max-age`,type:`string`,choices:[`idle`,`max-age`]},{name:`value`,description:`Duration (24h, 90m) or off`,type:`string`,captureRemaining:!0}],argsMenu:`auto`}),H({key:`subagents`,nativeName:`subagents`,description:`Inspect subagent runs for this session.`,textAlias:`/subagents`,category:`management`,tier:`standard`,args:[{name:`action`,description:`list | log | info`,type:`string`,choices:[`list`,`log`,`info`]},{name:`target`,description:`Run id, index, or session key`,type:`string`},{name:`value`,description:`Additional input (limit/message)`,type:`string`,captureRemaining:!0}],argsMenu:`auto`}),H({key:`acp`,nativeName:`acp`,description:`Manage ACP sessions and runtime options.`,textAlias:`/acp`,category:`management`,tier:`power`,args:[{name:`action`,description:`Action to run`,type:`string`,preferAutocomplete:!0,choices:[`spawn`,`cancel`,`steer`,`close`,`sessions`,`status`,`set-mode`,`set`,`cwd`,`permissions`,`timeout`,`model`,`reset-options`,`doctor`,`install`,`help`]},{name:`value`,description:`Action arguments`,type:`string`,captureRemaining:!0}],argsMenu:`auto`}),H({key:`focus`,nativeName:`focus`,description:`Bind this thread (Discord) or topic/conversation (Telegram) to a session target.`,textAlias:`/focus`,category:`management`,tier:`power`,args:[{name:`target`,description:`Subagent label/index or session key/id/label`,type:`string`,captureRemaining:!0}]}),H({key:`unfocus`,nativeName:`unfocus`,description:`Remove the current thread (Discord) or topic/conversation (Telegram) binding.`,textAlias:`/unfocus`,category:`management`,tier:`power`}),H({key:`agents`,nativeName:`agents`,description:`List thread-bound agents for this session.`,textAlias:`/agents`,category:`management`,tier:`standard`}),H({key:`steer`,nativeName:`steer`,description:`Send guidance to the active run in this session.`,textAlias:`/steer`,category:`management`,tier:`standard`,args:[{name:`message`,description:`Steering message`,type:`string`,captureRemaining:!0}]}),H({key:`config`,nativeName:`config`,description:`Show or set config values.`,textAlias:`/config`,category:`management`,tier:`power`,args:[{name:`action`,description:`show | get | set | unset`,type:`string`,choices:[`show`,`get`,`set`,`unset`]},{name:`path`,description:`Config path`,type:`string`},{name:`value`,description:`Value for set`,type:`string`,captureRemaining:!0}],argsParsing:`none`,formatArgs:bd.config}),H({key:`mcp`,nativeName:`mcp`,description:`Show or set FengMing MCP servers.`,textAlias:`/mcp`,category:`management`,tier:`power`,args:[{name:`action`,description:`show | get | set | unset`,type:`string`,choices:[`show`,`get`,`set`,`unset`]},{name:`path`,description:`MCP server name`,type:`string`},{name:`value`,description:`JSON config for set`,type:`string`,captureRemaining:!0}],argsParsing:`none`,formatArgs:bd.mcp}),H({key:`plugins`,nativeName:`plugins`,description:`List, show, enable, or disable plugins.`,textAliases:[`/plugins`,`/plugin`],category:`management`,tier:`power`,args:[{name:`action`,description:`list | show | get | enable | disable`,type:`string`,choices:[`list`,`show`,`get`,`enable`,`disable`]},{name:`path`,description:`Plugin id or name`,type:`string`}],argsParsing:`none`,formatArgs:bd.plugins}),H({key:`debug`,nativeName:`debug`,description:`Set runtime debug overrides.`,textAlias:`/debug`,category:`management`,tier:`power`,args:[{name:`action`,description:`show | reset | set | unset`,type:`string`,choices:[`show`,`reset`,`set`,`unset`]},{name:`path`,description:`Debug path`,type:`string`},{name:`value`,description:`Value for set`,type:`string`,captureRemaining:!0}],argsParsing:`none`,formatArgs:bd.debug}),H({key:`usage`,nativeName:`usage`,description:`Usage footer or cost summary.`,textAlias:`/usage`,category:`options`,tier:`standard`,args:[{name:`mode`,description:`off, tokens, full, or cost`,type:`string`,choices:[`off`,`tokens`,`full`,`cost`]}],argsMenu:`auto`}),H({key:`stop`,nativeName:`stop`,description:`Stop the current run.`,textAlias:`/stop`,category:`session`,tier:`essential`}),H({key:`restart`,nativeName:`restart`,description:`Restart FengMing.`,textAlias:`/restart`,category:`tools`,tier:`power`}),H({key:`activation`,nativeName:`activation`,description:`Set group activation mode.`,textAlias:`/activation`,category:`management`,tier:`power`,args:[{name:`mode`,description:`mention or always`,type:`string`,choices:[`mention`,`always`]}],argsMenu:`auto`}),H({key:`send`,nativeName:`send`,description:`Set send policy.`,textAlias:`/send`,category:`management`,tier:`power`,args:[{name:`mode`,description:`on, off, or inherit`,type:`string`,choices:[`on`,`off`,`inherit`]}],argsMenu:`auto`}),H({key:`reset`,nativeName:`reset`,description:`Reset the current session.`,textAlias:`/reset`,acceptsArgs:!0,category:`session`,tier:`essential`}),H({key:`new`,nativeName:`new`,description:`Start a new session.`,textAlias:`/new`,acceptsArgs:!0,category:`session`,tier:`essential`}),H({key:`compact`,nativeName:`compact`,description:`Compact the session context.`,textAlias:`/compact`,category:`session`,tier:`essential`,args:[{name:`instructions`,description:`Extra compaction instructions`,type:`string`,captureRemaining:!0}]}),H({key:`think`,nativeName:`think`,description:`Set thinking level.`,textAlias:`/think`,category:`options`,tier:`essential`,args:[{name:`level`,description:`Thinking level`,type:`string`,choices:({provider:e,model:t,catalog:r})=>n(e,t,r)}],argsMenu:`auto`}),H({key:`verbose`,nativeName:`verbose`,description:`Toggle verbose mode.`,textAlias:`/verbose`,category:`options`,tier:`standard`,args:[{name:`mode`,description:`on, off, or full`,type:`string`,choices:[`on`,`off`,`full`]}]}),H({key:`trace`,nativeName:`trace`,description:`Toggle plugin trace lines.`,textAlias:`/trace`,category:`options`,tier:`power`,args:[{name:`mode`,description:`on, off, or raw`,type:`string`,choices:[`on`,`off`,`raw`]}],argsMenu:`auto`}),H({key:`fast`,nativeName:`fast`,description:`Toggle fast mode.`,textAlias:`/fast`,category:`options`,tier:`standard`,args:[{name:`mode`,description:`status, on, off, or default`,type:`string`,choices:[`status`,`on`,`off`,`default`]}],argsMenu:`auto`}),H({key:`reasoning`,nativeName:`reasoning`,description:`Toggle reasoning visibility.`,textAlias:`/reasoning`,category:`options`,tier:`standard`,args:[{name:`mode`,description:`on, off, or stream`,type:`string`,choices:[`on`,`off`,`stream`]}],argsMenu:`auto`}),H({key:`elevated`,nativeName:`elevated`,description:`Toggle elevated mode.`,textAlias:`/elevated`,category:`options`,tier:`power`,args:[{name:`mode`,description:`on, off, ask, or full`,type:`string`,choices:[`on`,`off`,`ask`,`full`]}],argsMenu:`auto`}),H({key:`exec`,nativeName:`exec`,description:`Set exec defaults for this session.`,textAlias:`/exec`,category:`options`,tier:`power`,args:[{name:`host`,description:`sandbox, gateway, or node`,type:`string`,choices:[`sandbox`,`gateway`,`node`]},{name:`security`,description:`deny, allowlist, or full`,type:`string`,choices:[`deny`,`allowlist`,`full`]},{name:`ask`,description:`off, on-miss, or always`,type:`string`,choices:[`off`,`on-miss`,`always`]},{name:`node`,description:`Node id or name`,type:`string`}],argsParsing:`none`,formatArgs:bd.exec}),H({key:`model`,nativeName:`model`,description:`Show or set the model.`,textAlias:`/model`,category:`options`,tier:`essential`,args:[{name:`model`,description:`Model id (provider/model or id)`,type:`string`}]}),H({key:`models`,nativeName:`models`,description:`List model providers/models.`,textAlias:`/models`,tier:`standard`,argsParsing:`none`,acceptsArgs:!0,category:`options`}),H({key:`queue`,nativeName:`queue`,description:`Adjust queue settings.`,textAlias:`/queue`,category:`options`,tier:`power`,args:[{name:`mode`,description:`queue mode`,type:`string`,choices:[`steer`,`followup`,`collect`,`interrupt`]},{name:`debounce`,description:`debounce duration (e.g. 500ms, 2s)`,type:`string`},{name:`cap`,description:`queue cap`,type:`number`},{name:`drop`,description:`drop policy`,type:`string`,choices:[`old`,`new`,`summarize`]}],argsParsing:`none`,formatArgs:bd.queue}),H({key:`bash`,description:`Run host shell commands (host-only).`,textAlias:`/bash`,scope:`text`,category:`tools`,tier:`power`,args:[{name:`command`,description:`Shell command`,type:`string`,captureRemaining:!0}]})];return Sd(r,`whoami`,`/id`),Sd(r,`think`,`/thinking`,`/t`),Sd(r,`verbose`,`/v`),Sd(r,`reasoning`,`/reason`),Sd(r,`elevated`,`/elev`),Sd(r,`steer`,`/tell`),Cd(r),r}var Td=/^[a-z0-9][a-z0-9_-]*$/u,Ed=500,Dd=20,Od=20,kd=50,Ad=200,jd=2e3,Md=200,Nd={help:`book`,status:`barChart`,usage:`barChart`,export:`download`,export_session:`download`,tools:`terminal`,skill:`zap`,commands:`book`,new:`plus`,reset:`refresh`,compact:`loader`,stop:`stop`,clear:`trash`,focus:`eye`,unfocus:`eye`,model:`brain`,models:`brain`,think:`brain`,verbose:`terminal`,fast:`zap`,agents:`monitor`,subagents:`folder`,steer:`send`,tts:`volume2`},Pd=new Set([`help`,`new`,`reset`,`stop`,`compact`,`focus`,`model`,`think`,`fast`,`verbose`,`export-session`,`usage`,`agents`,`steer`,`redirect`]),Fd=[{key:`clear`,name:`clear`,description:v(`chat.clearChatHistory`),icon:`trash`,category:`session`,executeLocal:!0,tier:`standard`},{key:`redirect`,name:`redirect`,description:`Abort and restart with a new message`,args:`<message>`,icon:`refresh`,category:`agents`,executeLocal:!0,tier:`power`}],Id={help:`tools`,commands:`tools`,tools:`tools`,skill:`tools`,status:`tools`,export_session:`tools`,usage:`tools`,tts:`tools`,agents:`agents`,subagents:`agents`,steer:`agents`,redirect:`agents`,session:`session`,stop:`session`,reset:`session`,new:`session`,compact:`session`,focus:`session`,unfocus:`session`,model:`model`,models:`model`,think:`model`,verbose:`model`,fast:`model`,reasoning:`model`,elevated:`model`,queue:`model`},Ld={steer:`Inject a message into the active run`},Rd={steer:`<message>`};function zd(e){return e.key.replace(/[:.-]/g,`_`)}function Bd(e){return(e.aliases??[]).map(e=>e.trim()).filter(Boolean).map(e=>e.startsWith(`/`)?e.slice(1):e)}function Vd(e){return e.name.trim()||null}function Hd(e){if(e.args?.length)return e.args.map(e=>{let t=`<${e.name}>`;return e.required?t:`[${e.name}]`}).join(` `)}function Ud(e){return typeof e==`string`?e:e.value}function Wd(e){let t=e.args?.[0];if(!t)return;let n=t.choices?.map(Ud).filter(Boolean);return n?.length?n:void 0}function Gd(e){let t=Id[zd(e)];if(t)return t;switch(e.category){case`session`:return`session`;case`options`:return`model`;case`management`:return`tools`;default:return`tools`}}function Kd(e){return Nd[zd(e)]??`terminal`}function qd(e){let t=e.tier;return t===`essential`||t===`standard`||t===`power`?t:`standard`}function Jd(e,t=`local`){let n=Vd(e);return n?{key:e.key,name:n,aliases:Bd(e).filter(e=>e!==n),description:Ld[e.key]??e.description,args:Rd[e.key]??Hd(e),icon:Kd(e),category:Gd(e),executeLocal:t===`local`&&Pd.has(e.key),argOptions:Wd(e),tier:t===`local`?qd(e):`standard`}:null}function Yd(e){let t=E(e.trim().replace(/^\//u,``).slice(0,Ad));return!t||!Td.test(t)?null:t}function Xd(e,t){let n=typeof e==`string`?e:``;return n.length>t?n.slice(0,t):n}function Zd(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:null}function Qd(e){let t=`args`in e?e.args:void 0;return Array.isArray(t)?t.map(e=>Zd(e)).filter(e=>e!==null):[]}function $d(e){if(e.dynamic===!0)return[];let t=e.choices;return Array.isArray(t)?t.map(e=>{if(typeof e==`string`)return Xd(e,Ad);let t=Zd(e);return t?{value:Xd(t.value,Ad),label:Xd(t.label,Ad)}:null}).filter(e=>e?typeof e==`string`?!!e:!!e.value:!1):[]}function ef(){return[...wd().map(e=>({key:e.key,name:e.textAliases[0]?.replace(/^\//u,``)??e.key,aliases:e.textAliases,description:e.description,args:e.args?.map(e=>({name:e.name,required:e.required,choices:Array.isArray(e.choices)?e.choices:void 0})),category:e.category,tier:e.tier})).map(e=>Jd(e,`local`)).filter(e=>e!==null),...Fd]}function tf(e=ef()){let t=new Set;for(let n of e){t.add(E(n.name));for(let e of n.aliases??[]){let n=Yd(e);n&&t.add(n)}}return t}function nf(e,t){let n=(Array.isArray(e.textAliases)?e.textAliases:[]).slice(0,Dd).filter(e=>typeof e==`string`).map(Yd).filter(e=>!!e).filter(e=>!t.has(e)),r=n[0]??(typeof e.name==`string`?Yd(e.name):null);if(!r||t.has(r))return null;let i=Qd(e).slice(0,Od).map(e=>({name:Xd(e.name,Md),required:e.required===!0,choices:$d(e).slice(0,kd)})).filter(e=>e.name.length>0).map(e=>Object.assign({name:e.name},e.required?{required:!0}:{},e.choices.length>0?{choices:e.choices}:{}));return{key:r,name:r,aliases:n.map(e=>`/${e}`),description:Xd(e.description,jd),...i.length>0?{args:i}:{},category:typeof e.category==`string`?e.category:void 0}}function rf(e){cf.splice(0,cf.length,...e)}function af(e){let t=ef(),n=tf(t),r=e.slice(0,Ed).map(e=>nf(e,n)).filter(e=>e!==null).map(e=>Jd(e,`remote`)).filter(e=>e!==null),i=new Map;for(let e of[...t,...r]){let t=E(e.name);!t||i.has(t)||i.set(t,e)}return Array.from(i.values())}function of(e){let t=e?.commands;return Array.isArray(t)?t.map(e=>Zd(e)).filter(e=>e!==null):[]}function sf(){return ef()}var cf=sf(),lf=0;async function uf(e){let t=++lf,n=e.agentId?.trim();if(!e.client){if(t!==lf)return;rf(sf());return}try{let r=await e.client.request(`commands.list`,{...n?{agentId:n}:{},includeArgs:!0,scope:`text`});if(t!==lf)return;rf(af(of(r)))}catch{if(t!==lf)return;rf(sf())}}var df=[`session`,`model`,`tools`,`agents`],ff={session:`Session`,model:`Model`,agents:`Agents`,tools:`Tools`},pf={essential:0,standard:1,power:2};function mf(e,t){let n=E(e),r=t?.showAll??!1,i=n?cf.filter(e=>e.name.startsWith(n)||e.aliases?.some(e=>E(e).startsWith(n))||E(e.description).includes(n)):cf;return!n&&!r&&(i=i.filter(e=>(e.tier??`standard`)!==`power`)),i.toSorted((e,t)=>{let r=pf[e.tier??`standard`]??1,i=pf[t.tier??`standard`]??1;if(r!==i)return r-i;let a=df.indexOf(e.category??`session`),o=df.indexOf(t.category??`session`);if(a!==o)return a-o;if(n){let r=+!e.name.startsWith(n),i=+!t.name.startsWith(n);if(r!==i)return r-i}return 0})}function hf(){return cf.filter(e=>(e.tier??`standard`)===`power`).length}function gf(e){let t=e.trim();if(!t.startsWith(`/`))return null;let n=t.slice(1),r=n.search(/[\s:]/u),i=r===-1?n:n.slice(0,r),a=r===-1?``:n.slice(r).trimStart();a.startsWith(`:`)&&(a=a.slice(1).trimStart());let o=a.trim();if(!i)return null;let s=E(i),c=cf.find(e=>e.name===s||e.aliases?.some(e=>E(e)===s));return c?{command:c,args:o}:null}function _f(e){if(!e)return;let t=E(e);if([`off`,`false`,`no`,`0`].includes(t))return`off`;if([`full`,`all`,`everything`].includes(t))return`full`;if([`on`,`minimal`,`true`,`yes`,`1`].includes(t))return`on`}function vf(e){let t=w(e);return t?[`default`,`inherit`,`inherited`,`clear`,`reset`,`unpin`].includes(t):!1}async function yf(e,t,n,r,i={}){switch(n){case`help`:return bf();case`new`:return{content:`Starting new session...`,action:`new-session`};case`reset`:return{content:`Resetting session...`,action:`reset`};case`stop`:return{content:`Stopping current run...`,action:`stop`};case`clear`:return{content:`Chat history cleared.`,action:`clear`};case`focus`:return{content:`Toggled focus mode.`,action:`toggle-focus`};case`compact`:return await xf(e,t,i);case`model`:return await Sf(e,t,r,i);case`think`:return await Cf(e,t,r,i);case`fast`:return await Tf(e,t,r,i);case`verbose`:return await wf(e,t,r,i);case`export-session`:return{content:`Exporting session...`,action:`export`};case`usage`:return await Ef(e,t);case`agents`:return await Df(e);case`steer`:return await Kf(e,t,r,i);case`redirect`:return await qf(e,t,r,i);default:return{content:`Unknown command: \`/${n}\``}}}function bf(){let e=[`**Available Commands**
63
- `],t=``;for(let n of cf){let r=n.category??`session`;r!==t&&(t=r,e.push(`**${r.charAt(0).toUpperCase()+r.slice(1)}**`));let i=n.args?` ${n.args}`:``,a=n.executeLocal?``:` *(agent)*`;e.push(`\`/${n.name}${i}\` — ${n.description}${a}`)}return e.push("\nType `/` to open the command menu."),{content:e.join(`
64
- `)}}async function xf(e,t,n){try{let r=await e.request(`sessions.compact`,{key:t,...kf(t,n)});if(r?.compacted){let e=r.result?.tokensBefore,t=r.result?.tokensAfter;return{content:`Context compacted successfully${typeof e==`number`&&typeof t==`number`?` (${e.toLocaleString()} -> ${t.toLocaleString()} tokens)`:``}.`,action:`refresh`}}return typeof r?.reason==`string`&&r.reason.trim()?{content:`Compaction skipped: ${r.reason}`,action:`refresh`}:{content:`Compaction skipped.`,action:`refresh`}}catch(e){return{content:`Compaction failed: ${String(e)}`}}}async function Sf(e,t,n,r){let i=r.chatModelCatalog??r.modelCatalog;if(!n)try{let[n,r]=await Promise.all([e.request(`sessions.list`,{}),i?Promise.resolve(i):Vf(e)]),a=zf(n,t)?.model||n?.defaults?.model||`default`,o=r.map(e=>e.id),s=[`**Current model:** \`${a}\``];return o.length>0&&s.push(`**Available:** ${o.slice(0,10).map(e=>`\`${e}\``).join(`, `)}${o.length>10?` +${o.length-10} more`:``}`),{content:s.join(`
65
- `)}}catch(e){return{content:`Failed to get model info: ${String(e)}`}}try{let a=n.trim(),[o,s]=await Promise.all([e.request(`sessions.patch`,{key:t,...kf(t,r),model:a}),i?Promise.resolve(i):Vf(e,{allowFailure:!0})]),c=o.resolved?.model??a,l=na(c,o.resolved?.modelProvider,s),u=Zi(a),d=o.resolved?.modelProvider?.trim();return u?.kind===`qualified`&&d&&l&&!l.toLowerCase().startsWith(`${d.toLowerCase()}/`)&&u.value.toLowerCase().endsWith(`/${c.trim().toLowerCase()}`)&&(l=u.value),{content:`Model set to \`${a}\`.`,action:`refresh`,sessionPatch:{modelOverride:Zi(l)}}}catch(e){return{content:`Failed to set model: ${String(e)}`}}}async function Cf(e,t,n,r){let i=n.trim();if(!i)try{let{session:n,defaults:r,models:i}=await Bf(e,t);return{content:jf(`Current thinking level: ${Hf(n,r,i)}.`,Nf(n,r))}}catch(e){return{content:`Failed to get thinking level: ${String(e)}`}}if(vf(i))try{return await e.request(`sessions.patch`,{key:t,...kf(t,r),thinkingLevel:null}),{content:`Thinking level reset to default.`,action:`refresh`}}catch(e){return{content:`Failed to reset thinking level: ${String(e)}`}}try{let{session:n,defaults:a}=await Rf(e,t),o=Pf(i,n,a);return o?Ff(n,a,o)?(await e.request(`sessions.patch`,{key:t,...kf(t,r),thinkingLevel:o}),{content:`Thinking level set to **${o}**.`,action:`refresh`}):{content:`Unsupported thinking level "${i}" for this model. Valid levels: ${Nf(n,a)}.`}:{content:`Unrecognized thinking level "${i}". Valid levels: ${Nf(n,a)}.`}}catch(e){return{content:`Failed to set thinking level: ${String(e)}`}}}async function wf(e,t,n,r){let i=n.trim();if(!i)try{return{content:jf(`Current verbose level: ${_f((await Lf(e,t))?.verboseLevel)??`off`}.`,`on, full, off`)}}catch(e){return{content:`Failed to get verbose level: ${String(e)}`}}let a=_f(i);if(!a)return{content:`Unrecognized verbose level "${i}". Valid levels: off, on, full.`};try{return await e.request(`sessions.patch`,{key:t,...kf(t,r),verboseLevel:a}),{content:`Verbose mode set to **${a}**.`,action:`refresh`}}catch(e){return{content:`Failed to set verbose mode: ${String(e)}`}}}async function Tf(e,t,n,r){let i=E(n);if(!i||i===`status`)try{return{content:jf(`Current fast mode: ${Uf(await Lf(e,t))}.`,`status, on, off, default`)}}catch(e){return{content:`Failed to get fast mode: ${String(e)}`}}if(vf(i))try{return await e.request(`sessions.patch`,{key:t,...kf(t,r),fastMode:null}),{content:`Fast mode reset to default.`,action:`refresh`}}catch(e){return{content:`Failed to reset fast mode: ${String(e)}`}}if(i!==`on`&&i!==`off`)return{content:`Unrecognized fast mode "${n.trim()}". Valid levels: status, on, off, default.`};try{return await e.request(`sessions.patch`,{key:t,...kf(t,r),fastMode:i===`on`}),{content:`Fast mode ${i===`on`?`enabled`:`disabled`}.`,action:`refresh`}}catch(e){return{content:`Failed to set fast mode: ${String(e)}`}}}async function Ef(e,t){try{let n=zf(await e.request(`sessions.list`,{}),t);if(!n)return{content:`No active session.`};let r=Number.isFinite(n.inputTokens),i=Number.isFinite(n.outputTokens),a=r?n.inputTokens??0:0,o=i?n.outputTokens??0:0,s=r||i?a+o:null,c=Number.isFinite(n.totalTokens)?n.totalTokens??null:s,l=n.totalTokensFresh!==!1,u=n.contextTokens??0,d=c!==null&&l&&u>0?Math.round(c/u*100):null,f=s===null?`n/a`:`${l?``:`~`}${Jf(s)}`,p=[`**Session Usage**`,`Input: **${Jf(a)}** tokens`,`Output: **${Jf(o)}** tokens`,`Total: **${f}** tokens`];return d!==null&&p.push(`Context: **${d}%** of ${Jf(u)}`),n.model&&p.push(`Model: \`${n.model}\``),{content:p.join(`
66
- `)}}catch(e){return{content:`Failed to get usage: ${String(e)}`}}}async function Df(e){try{let t=await e.request(`agents.list`,{}),n=t?.agents??[];if(n.length===0)return{content:`No agents configured.`};let r=[`**Agents** (${n.length})\n`];for(let e of n){let n=e.id===t?.defaultId,i=e.identity?.name||e.name||e.id,a=n?` *(default)*`:``,o=e.agentRuntime?.id?` · runtime \`${e.agentRuntime.id}\``:``;r.push(`- \`${e.id}\` — ${i}${a}${o}`)}return{content:r.join(`
67
- `)}}catch(e){return{content:`Failed to list agents: ${String(e)}`}}}function Of(e){return w(e)}function kf(e,t){let n=Of(e),r=z(n??``),i=r&&r.agentId!==`main`&&(r.rest===`main`||r.rest===`global`)?r.agentId:void 0,a=i??w(t.agentId);return(n===`global`||i)&&a?{agentId:a}:{}}function Af(e,t){let n=new Set([e]);if(t&&t!==`main`){let r=`agent:${t}:${Vc}`,i=`agent:${t}:global`;(e===r||e===i)&&n.add(`global`)}if(t===`main`){let t=`agent:${Bc}:main`;e===`main`?n.add(t):e===t&&n.add(Vc)}return n}function jf(e,t){return`${e}\nOptions: ${t}.`}function Mf(e,t,n=`, `){return If(e,t).map(e=>e.label).join(n)}function Nf(e,t){let n=Mf(e,t);return n.split(`, `).includes(`default`)?n:`default, ${n}`}function Pf(e,t,n){let r=ld(e);if(r)return r;let i=E(e);return If(t,n).map(e=>({id:ld(e.id)??E(e.id),label:E(e.label)})).find(e=>e.id===i||e.label===i)?.id}function Ff(e,t,n){return If(e,t).some(e=>(ld(e.id)??E(e.id))===n||ld(e.label)===n)}function If(e,t){if(e?.thinkingLevels?.length)return e.thinkingLevels;let n=(!e?.modelProvider||e.modelProvider===t?.modelProvider)&&(!e?.model||e.model===t?.model);return n&&t?.thinkingLevels?.length?t.thinkingLevels:((e?.thinkingOptions?.length?e.thinkingOptions:null)??(n&&t?.thinkingOptions?.length?t.thinkingOptions:null)??dd(e?.modelProvider??t?.modelProvider,e?.model??t?.model).split(/\s*,\s*/)).filter(Boolean).map(e=>({id:ld(e)??E(e),label:e}))}async function Lf(e,t){return(await Rf(e,t)).session}async function Rf(e,t){let n=await e.request(`sessions.list`,{});return{session:zf(n,t),defaults:n?.defaults}}function zf(e,t){let n=Of(t),r=z(n??``)?.agentId??(n===`main`?`main`:void 0),i=n?Af(n,r):new Set;return e?.sessions?.find(e=>{let t=Of(e.key);return t?i.has(t):!1})}async function Bf(e,t){let[n,r]=await Promise.all([e.request(`sessions.list`,{}),Vf(e)]);return{session:zf(n,t),defaults:n?.defaults,models:r}}async function Vf(e,t){try{return(await e.request(`models.list`,{view:`configured`}))?.models??[]}catch(e){if(t?.allowFailure)return[];throw e}}function Hf(e,t,n){let r=ld(e?.thinkingLevel);if(r)return If(e,t).find(e=>ld(e.id)===r)?.label??r;if(e?.thinkingDefault)return e.thinkingDefault;if(t?.thinkingDefault)return t.thinkingDefault;let i=e?.modelProvider??t?.modelProvider,a=e?.model??t?.model;return!i||!a?`off`:fd({provider:i,model:a,catalog:n})}function Uf(e){return e?.fastMode===!0?`on`:`off`}async function Wf(e,t){let n=t.trim();return n?{key:e,message:n}:{error:`empty`}}function Gf(e){return e?.status===`running`&&e.endedAt==null}async function Kf(e,t,n,r){try{let i=await Wf(t,n);return`error`in i?{content:i.error===`empty`?"Usage: `/steer <message>`":i.error}:Gf(zf(r.sessionsResult??await e.request(`sessions.list`,kf(t,r)),i.key))?(await e.request(`chat.send`,{sessionKey:i.key,...kf(i.key,r),message:i.message,deliver:!1,idempotencyKey:yt()}),{content:`Steered.`,pendingCurrentRun:i.key===t}):{content:"No active run. Use the chat input or `/redirect` instead."}}catch(e){return{content:`Failed to steer: ${String(e)}`}}}async function qf(e,t,n,r){try{let i=await Wf(t,n);if(`error`in i)return{content:i.error===`empty`?"Usage: `/redirect <message>`":i.error};let a=await e.request(`sessions.steer`,{key:i.key,...kf(i.key,r),message:i.message});return{content:`Redirected.`,trackRunId:typeof a?.runId==`string`?a.runId:void 0}}catch(e){return{content:`Failed to redirect: ${String(e)}`}}}function Jf(e){return e>=1e6?`${(e/1e6).toFixed(1).replace(/\.0$/,``)}M`:e>=1e3?`${(e/1e3).toFixed(1).replace(/\.0$/,``)}k`:String(e)}function Yf(e){return typeof e==`string`?e:e instanceof Error&&typeof e.message==`string`?e.message:`unknown error`}function Xf(e){let t=Yf(e.message),n=E(t),r=De(e.details),i=Oe(t),a=r?.reason??i?.reason;if(n.startsWith(`pairing required:`)&&a)return`gateway pairing required: ${Te(a)}`;if(i&&n!==`pairing required`)return t;let o=r?.approvedRoles?.join(`, `)??`none`,s=r?.requestedRole??`none`,c=r?.approvedScopes?.join(`, `)??`none`,l=r?.requestedScopes?.join(`, `)??`none`;switch(r?.reason){case`scope-upgrade`:return r.approvedScopes||r.requestedScopes?`device scope upgrade requires approval (approved: ${c}; requested: ${l})`:ke(e.details);case`role-upgrade`:return r.approvedRoles||r.requestedRole?`device role upgrade requires approval (approved: ${o}; requested: ${s})`:ke(e.details);case`metadata-upgrade`:return`device reconnect details changed and require approval`;default:return`gateway pairing required`}}function Zf(e){let t=Yf(e.message);switch(St(e)){case L.AUTH_TOKEN_MISMATCH:return`gateway token mismatch`;case L.AUTH_UNAUTHORIZED:return`gateway auth failed`;case L.AUTH_RATE_LIMITED:return`too many failed authentication attempts`;case L.PAIRING_REQUIRED:return Xf(e);case L.CONTROL_UI_DEVICE_IDENTITY_REQUIRED:return`device identity required (use HTTPS/localhost or allow insecure auth explicitly)`;case L.CONTROL_UI_ORIGIN_NOT_ALLOWED:return`origin not allowed (open the Control UI from the gateway host or allow it in gateway.controlUi.allowedOrigins)`;case L.AUTH_TOKEN_MISSING:return`gateway token missing`;default:break}let n=E(t);return n===`fetch failed`||n===`failed to fetch`||n===`connect failed`?`gateway connect failed`:t}function Qf(e){return e&&typeof e==`object`?Zf(e):Yf(e)}function $f(e){return e?/[\r\n]/.test(e)?null:e:null}function ep(e){return $f(T(e.hello?.auth?.deviceToken)??null)??$f(T(e.settings?.token)??null)??$f(T(e.password)??null)??null}function tp(e){let t=ep(e);return t?`Bearer ${t}`:null}function np(e){return tn([T(e.hello?.auth?.deviceToken),T(e.settings?.token),T(e.password)].flatMap(e=>$f(e??null)??[]))}var rp=`HEARTBEAT_OK`,ip=300;function ap(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function op(e,t=ip){let n=e.trim();if(!n)return{shouldSkip:!0};let r=n.replace(/<[^>]*>/g,` `).replace(/&nbsp;/gi,` `).replace(/^[*`~_]+/,``).replace(/[*`~_]+$/,``);if(!n.includes(rp)&&!r.includes(rp))return{shouldSkip:!1};let i=RegExp(`${ap(rp)}[^\\w]{0,4}$`),a=!0,o=!1;for(n=r.trim();a;){a=!1;let e=n.trim();if(e.startsWith(rp)){n=e.slice(12).trimStart(),o=!0,a=!0;continue}if(i.test(e)){let t=e.lastIndexOf(rp),r=e.slice(0,t).trimEnd(),i=e.slice(t+12).trimStart();n=r?`${r}${i}`.trimEnd():``,o=!0,a=!0}}return o?{shouldSkip:!n||n.length<=t}:{shouldSkip:!1}}function sp(e){return e===`thinking`||e===`reasoning`}function cp(e){if(typeof e==`string`)return{text:e,hasVisibleNonTextContent:!1};if(!Array.isArray(e))return{text:``,hasVisibleNonTextContent:e!=null};let t=!1;return{text:e.filter(e=>!e||typeof e!=`object`||!(`type`in e)?(t=!0,!1):e.type===`text`?typeof e.text==`string`?!0:(t=!0,!1):(sp(e.type)||(t=!0),!1)).map(e=>e.text).join(``),hasVisibleNonTextContent:t}}function lp(e){if(!e||typeof e!=`object`)return!1;let t=e;if(E(t.role)!==`assistant`)return!1;let{text:n,hasVisibleNonTextContent:r}=cp(typeof t.content==`string`||Array.isArray(t.content)?t.content:t.text);return r?!1:op(n).shouldSkip}var up=/^\s*NO_REPLY\s*$/,dp=`[fengming] missing tool result in session history; inserted synthetic error result for transcript repair.`,fp=100,pp=4e3,mp=6e4,hp=500,gp=5e3,_p=new WeakMap;function vp(e){let t=e,n=(_p.get(t)??0)+1;return _p.set(t,n),n}function yp(e,t){return _p.get(e)===t}function bp(e,t,n,r){return!yp(e,t)||e.sessionKey!==n?!1:!Lp(n)||Rp(e)===r}function xp(e){return up.test(e)}function Sp(e){if(!e||typeof e!=`object`)return!1;let t=e;if(E(t.role)!==`assistant`)return!1;if(typeof t.text==`string`)return xp(t.text);let n=Fu(e);return typeof n==`string`&&xp(n)}function Cp(e){if(!e||typeof e!=`object`||E(e.role)!==`toolresult`)return!1;let t=Fu(e);return typeof t==`string`&&t.trim()===dp}function wp(e){if(typeof e==`string`)return!0;if(!Array.isArray(e))return!1;if(e.length===0)return!0;let t=!1;for(let n of e){if(!n||typeof n!=`object`)return!1;let e=n;if(e.type!==`text`||(t=!0,typeof e.text!=`string`))return!1}return t}function Tp(e){if(!e||typeof e!=`object`)return!1;let t=e;return E(t.role)!==`user`||(Array.isArray(t.MediaPaths)?t.MediaPaths:typeof t.MediaPath==`string`?[t.MediaPath]:[]).some(e=>typeof e==`string`&&e.trim())||!wp(t.content??t.text)?!1:(Fu(e)?.trim()??``)===``}function Ep(e){return op(e).shouldSkip}function Dp(e){return Sp(e)||lp(e)}function Op(e){return Dp(e)||Cp(e)||Tp(e)}function kp(e){return!!(e&&typeof e==`object`&&e.__fengming&&typeof e.__fengming==`object`)}function Ap(e){if(!e||typeof e!=`object`||kp(e))return!1;let t=E(e.role);return t===`user`||t===`assistant`}function jp(e){if(!e||typeof e!=`object`)return null;let t=E(e.role);if(!t)return null;let n=Fu(e)?.trim();if(n)return`${t}:text:${n}`;try{return`${t}:content:${JSON.stringify(e.content??null)}`}catch{return null}}function Mp(e,t){if(t.length===0)return e;if(e.length===0)return t.filter(e=>Ap(e)&&!Op(e)).length===t.length?t:e;let n=new Map;e.forEach((e,t)=>{let r=jp(e);r&&n.set(r,t)});let r=-1,i=-1;for(let e=t.length-1;e>=0;e--){let a=jp(t[e]),o=a?n.get(a):void 0;if(typeof o==`number`){r=e,i=o;break}}if(r<0||i<e.length-1)return e;let a=[];for(let i of t.slice(r+1)){if(!Ap(i)||Op(i))return e;let t=jp(i);if(!t||n.has(t))return e;a.push(i)}return a.length>0?[...e,...a]:e}function Np(e,t){if(!(e instanceof bt)||e.gatewayCode!==`UNAVAILABLE`||!e.retryable)return!1;let n=e.details;if(!n||typeof n!=`object`)return!0;let r=n.method;return typeof r!=`string`||r===t}function Pp(e){let t=typeof e.retryAfterMs==`number`?e.retryAfterMs:hp;return Math.min(Math.max(t,100),gp)}function Fp(e){return new Promise(t=>setTimeout(t,e))}function Ip(e){return E(e)===`global`}function Lp(e){return Ip(e)?!0:E(z(e)?.rest)===`main`}function Rp(e){let t=z(e.sessionKey);if(t?.agentId)return B(t.agentId);let n=e.hello?.snapshot,r=typeof e.assistantAgentId==`string`&&e.assistantAgentId.trim()?e.assistantAgentId:void 0,i=typeof e.agentsList?.defaultId==`string`&&e.agentsList.defaultId.trim()?e.agentsList.defaultId:void 0,a=typeof n?.sessionDefaults?.defaultAgentId==`string`&&n.sessionDefaults.defaultAgentId.trim()?n.sessionDefaults.defaultAgentId:void 0,o=r??i??a;return o?B(o):void 0}function zp(e){let t=e.hello?.snapshot,n=typeof e.agentsList?.defaultId==`string`&&e.agentsList.defaultId.trim()?e.agentsList.defaultId:typeof t?.sessionDefaults?.defaultAgentId==`string`&&t.sessionDefaults.defaultAgentId.trim()?t.sessionDefaults.defaultAgentId:void 0;return n?B(n):void 0}function Bp(e,t){if(!Lp(e.sessionKey)||!Ip(t.sessionKey))return!0;let n=typeof t.agentId==`string`&&t.agentId.trim()?B(t.agentId):void 0,r=Rp(e);return n?r!==void 0&&n===r:r===void 0||r===zp(e)}function Vp(e,t){return(Yc(t.sessionKey,e.sessionKey)||Ip(t.sessionKey)&&Lp(e.sessionKey))&&Bp(e,t)}function Hp(e){let t=e;t.toolStreamById instanceof Map&&Array.isArray(t.toolStreamOrder)&&Array.isArray(t.chatToolMessages)&&Array.isArray(t.chatStreamSegments)&&wl(t)}async function Up(e){if(!e.client||!e.connected)return;let t=e.sessionKey,n=vp(e),r=Lp(t)?Rp(e):null,i=Date.now(),a=e.chatMessages;e.resetChatInputHistoryNavigation?.(),e.chatLoading=!0,e.lastError=null;try{let o;for(;;)try{o=await e.client.request(`chat.history`,{sessionKey:t,...r?{agentId:r}:{},limit:fp,maxChars:pp});break}catch(a){if(!bp(e,n,t,r))return;if(Date.now()-i<mp&&Np(a,`chat.history`)){if(await Fp(Pp(a)),!e.client||!e.connected)return;continue}throw a}if(!bp(e,n,t,r))return;e.chatMessages=Mp((Array.isArray(o.messages)?o.messages:[]).filter(e=>!Op(e)),a),e.currentSessionId=typeof o.sessionId==`string`&&o.sessionId.trim()?o.sessionId:null,e.chatThinkingLevel=o.thinkingLevel??null,Hp(e),e.chatStream=null,e.chatStreamStartedAt=null}catch(i){if(!bp(e,n,t,r))return;Ut(i)?(e.chatMessages=[],e.chatThinkingLevel=null,e.lastError=Wt(`existing chat history`)):e.lastError=String(i)}finally{yp(e,n)&&(e.chatLoading=!1)}}function Wp(e){let t=/^data:([^;]+);base64,(.+)$/.exec(e);return t?{mimeType:t[1],content:t[2]}:null}function Gp(e){return/^\s*data:/iu.test(e)}function Kp(e){let t=e.fileName?.trim();return t?`Attached image: ${t}`:`Attached image`}function qp(e){return e&&e.length>0?e.map(e=>{let t=Vl(e),n=t?Wp(t):null;return n?{type:n.mimeType.startsWith(`image/`)?`image`:`file`,mimeType:n.mimeType,fileName:e.fileName,content:n.content}:null}).filter(e=>e!==null):void 0}function Jp(e,t){if(!e||typeof e!=`object`)return{runId:t,status:`started`};let n=e,r=typeof n.runId==`string`&&n.runId.trim()?n.runId.trim():t,i=n.status;return{runId:r,status:i===`in_flight`||i===`ok`?i:`started`}}async function Yp(e,t){let n=t.sessionKey??e.sessionKey,r=t.agentId?B(t.agentId):Rp(e),i=e.currentSessionId,a=n===e.sessionKey&&(!Ip(n)||r!==void 0&&r===Rp(e))&&typeof i==`string`&&i.trim()?i.trim():void 0;return Jp(await e.client.request(`chat.send`,{sessionKey:n,...Ip(n)&&r?{agentId:r}:{},...a?{sessionId:a}:{},message:t.message,deliver:!1,idempotencyKey:t.runId,attachments:qp(t.attachments)}),t.runId)}function Xp(e,t){if(!e||typeof e!=`object`)return null;let n=e,r=n.role;if(typeof r==`string`){if((t.roleCaseSensitive?r:E(r))!==`assistant`)return null}else if(t.roleRequirement===`required`)return null;return t.requireContentArray?Array.isArray(n.content)?n:null:!(`content`in n)&&!(t.allowTextField&&`text`in n)?null:n}function Zp(e){return Xp(e,{roleRequirement:`required`,roleCaseSensitive:!0,requireContentArray:!0})}function Qp(e){return Xp(e,{roleRequirement:`optional`,allowTextField:!0})}function $p(e){let t=Qp(e.message);if(t&&!Dp(t))return t;let n=e.errorMessage?.trim();return n?{role:`assistant`,content:[{type:`text`,text:n.startsWith(`⚠️`)||n.startsWith(`Error:`)?n:`Error: ${n}`}],timestamp:Date.now()}:null}function em(e,t,n,r=Date.now()){let i=t.trim(),a=n&&n.length>0,o=[];if(i&&o.push({type:`text`,text:i}),a)for(let e of n){let t=Hl(e);if(t){if(e.mimeType.startsWith(`image/`)){if(Gp(t)){o.push({type:`text`,text:Kp(e)});continue}o.push({type:`image`,url:t,source:{type:`url`,url:t}});continue}o.push({type:`attachment`,attachment:{url:t,kind:e.mimeType.startsWith(`audio/`)?`audio`:`document`,label:e.fileName?.trim()||`Attached file`,mimeType:e.mimeType}})}}e.chatMessages=[...e.chatMessages,{role:`user`,content:o,timestamp:r}]}async function tm(e,t,n){if(!e.client||!e.connected)return null;let r=t.trim(),i=n&&n.length>0;if(!r&&!i)return null;e.lastError=null;let a=yt();try{return(await Yp(e,{message:r,attachments:n,runId:a})).runId}catch(t){return e.lastError=Qf(t),null}}async function nm(e,t,n){return tm(e,t,n)}async function rm(e,t,n){return tm(e,t,n)}async function im(e){if(!e.client||!e.connected)return!1;let t=e.chatRunId;try{return await e.client.request(`chat.abort`,t?{sessionKey:e.sessionKey,...(()=>{let t=Rp(e);return Ip(e.sessionKey)&&t?{agentId:t}:{}})(),runId:t}:{sessionKey:e.sessionKey,...(()=>{let t=Rp(e);return Ip(e.sessionKey)&&t?{agentId:t}:{}})()}),!0}catch(t){return e.lastError=Qf(t),!1}}function am(e,t){if(!t)return null;let n=e.chatRunId!==null,r=Vp(e,t),i=e.chatRunId!==null&&typeof t.runId==`string`&&t.runId===e.chatRunId;if(!r&&!i)return null;if(!e.chatRunId&&r&&typeof t.runId==`string`&&(e.chatRunId=t.runId,e.chatStreamStartedAt??=Date.now()),e.chatRunId&&t.runId!==e.chatRunId){if(t.state===`final`){let n=Qp(t.message);return n&&!Dp(n)?(e.chatMessages=[...e.chatMessages,n],null):`final`}return null}let a=t.runId??e.chatRunId,o=(n,i)=>ad(e,{outcome:n,sessionStatus:i,runId:a,sessionKey:e.sessionKey,sessionKeys:r?[e.sessionKey,t.sessionKey]:[],clearLocalRun:!0,clearChatStream:!0});if(t.state===`delta`){let n=Fu(t.message);typeof n==`string`&&!xp(n)&&!lp(t.message)&&(e.chatStream=n)}else if(t.state===`final`){let n=Qp(t.message);n&&!Dp(n)?e.chatMessages=[...e.chatMessages,n]:e.chatStream?.trim()&&!xp(e.chatStream)&&!Ep(e.chatStream)&&(e.chatMessages=[...e.chatMessages,{role:`assistant`,content:[{type:`text`,text:e.chatStream}],timestamp:Date.now()}]),o(`done`,`done`)}else if(t.state===`aborted`){let n=Zp(t.message);if(n&&!Dp(n))e.chatMessages=[...e.chatMessages,n];else{let t=e.chatStream??``;t.trim()&&!xp(t)&&!Ep(t)&&(e.chatMessages=[...e.chatMessages,{role:`assistant`,content:[{type:`text`,text:t}],timestamp:Date.now()}])}o(`interrupted`,`killed`)}else if(t.state===`error`){let r=n?$p(t):null;r&&(e.chatMessages=[...e.chatMessages,r]),o(`interrupted`,`failed`),e.lastError=t.errorMessage??`chat error`}return t.state}async function om(e){try{return(await e.request(`models.list`,{view:`configured`}))?.models??[]}catch{return[]}}var sm=new WeakMap,cm=new WeakMap;function lm(e){return typeof e.sessionKey==`string`&&e.sessionKey.trim()!==``}function um(e){return(typeof e==`string`?e.trim():``)||null}function dm(e){return(e??``).trim().toLowerCase()===`global`}function fm(e,t){let n=z(t);if(!n?.agentId)return null;let r=n.rest.toLowerCase();return r===`global`||r===`main`&&e.sessionsResult?.sessions.find(e=>e.key===t)?.kind===`global`?B(n.agentId):null}function pm(e,t){return dm(t)?mm(e):fm(e,t)}function mm(e){let t=z(e.sessionKey);if(t?.agentId)return B(t.agentId);let n=e.hello?.snapshot,r=typeof e.assistantAgentId==`string`&&e.assistantAgentId.trim()?e.assistantAgentId:void 0,i=typeof e.agentsList?.defaultId==`string`&&e.agentsList.defaultId.trim()?e.agentsList.defaultId:void 0,a=typeof n?.sessionDefaults?.defaultAgentId==`string`&&n.sessionDefaults.defaultAgentId.trim()?n.sessionDefaults.defaultAgentId:void 0;return B(r??i??a??`main`)}function hm(e){let t=e.hello?.snapshot;return B(typeof e.agentsList?.defaultId==`string`&&e.agentsList.defaultId.trim()?e.agentsList.defaultId:typeof t?.sessionDefaults?.defaultAgentId==`string`&&t.sessionDefaults.defaultAgentId.trim()?t.sessionDefaults.defaultAgentId:`main`)}function gm(e,t,n){if(!dm(n))return!0;let r=Dm(t.session)?t.session:null,i=typeof t.agentId==`string`&&t.agentId.trim()||typeof r?.agentId==`string`&&r.agentId.trim(),a=i?B(i):null,o=mm(e);return a?a===o:o===hm(e)}function _m(e,t){let n=pm(e,t);return{key:t,...n?{agentId:n}:{}}}function vm(e,t){let n=pm(e,t);return{key:t,...n?{agentId:n}:{}}}function ym(e){let t=e,n=(cm.get(t)??0)+1;return cm.set(t,n),n}function bm(e,t){return cm.get(e)===t.generation&&e.client===t.client&&e.connected&&e.sessionKey.trim()===t.requestedKey&&pm(e,t.requestedKey)===(t.requestedAgentId??null)}function xm(e,t){return(e&&typeof e==`object`&&typeof e.key==`string`?e.key.trim():``)||t}async function Sm(e,t,n){try{await e.request(`sessions.messages.unsubscribe`,{key:t,...dm(t)&&n?{agentId:n}:{}})}catch{}}function Cm(e,t){return!(e.sessionKey!==t.changedSessionKey||t.eventRunId!==void 0&&e.chatRunId&&e.chatRunId!==t.eventRunId||t.eventRunId===void 0&&e.chatRunId)}var wm=`abortedLastRun.childSessions.compactionCheckpointCount.contextTokens.displayName.endedAt.elevatedLevel.fastMode.goal.hasActiveRun.inputTokens.kind.label.latestCompactionCheckpoint.model.modelProvider.outputTokens.reasoningLevel.runtimeMs.sessionId.spawnedBy.startedAt.status.archived.subject.surface.systemSent.thinkingDefault.thinkingLevel.thinkingOptions.totalTokens.totalTokensFresh.updatedAt.verboseLevel`.split(`.`);function Tm(e){let t=e,n=sm.get(t);return n||(n={loading:!1,ownsStateLoading:!1,pending:null},sm.set(t,n)),n}function Em(e){let t=e.pending;return e.pending=null,t}function Dm(e){return!!(e&&typeof e==`object`)}function Om(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function km(e){let t=e.trim();if(!/^\d+$/.test(t))return 0;let n=Number(t);return Number.isSafeInteger(n)?n:0}function Am(e){if(e!==void 0)return Number.isSafeInteger(e)?e:0}function jm(e){return e===`cron`||e===`direct`||e===`group`||e===`global`||e===`unknown`?e:void 0}function Mm(e){return e.archived===!0}function Nm(e,t){return e.filter(e=>e.key&&(t.showArchived||!Mm(e)))}function Pm(e,t){let n=Nm(e.sessions,t);return{...e,count:n.length,sessions:n}}function Fm(e,t){let n=new Set,r=[];for(let i of[...e.sessions,...t.sessions])!i.key||n.has(i.key)||(n.add(i.key),r.push(i));let i=t.totalCount??e.totalCount,a=t.hasMore??(typeof i==`number`&&Number.isFinite(i)?r.length<i:!1),o=t.nextOffset===void 0?a?r.length:null:t.nextOffset;return{...t,count:r.length,totalCount:i,hasMore:a,nextOffset:o,sessions:r}}function Im(e,t){return(t.updatedAt??0)-(e.updatedAt??0)}function Lm(e){return`${e?.compactionCheckpointCount??0}:${e?.latestCompactionCheckpoint?.checkpointId??``}:${e?.latestCompactionCheckpoint?.createdAt??0}`}function Rm(e,t){if(!(t in e.sessionsCheckpointItemsByKey)&&!(t in e.sessionsCheckpointErrorByKey))return;let n={...e.sessionsCheckpointItemsByKey},r={...e.sessionsCheckpointErrorByKey};delete n[t],delete r[t],e.sessionsCheckpointItemsByKey=n,e.sessionsCheckpointErrorByKey=r}async function zm(e,t){e.sessionsCheckpointLoadingKey=t,e.sessionsCheckpointErrorByKey={...e.sessionsCheckpointErrorByKey,[t]:``};try{let n=await e.client?.request(`sessions.compaction.list`,vm(e,t));n&&(e.sessionsCheckpointItemsByKey={...e.sessionsCheckpointItemsByKey,[t]:n.checkpoints??[]})}catch(n){e.sessionsCheckpointErrorByKey={...e.sessionsCheckpointErrorByKey,[t]:String(n)}}finally{e.sessionsCheckpointLoadingKey===t&&(e.sessionsCheckpointLoadingKey=null)}}async function Bm(e,t){if(e.sessionsLoading)return!1;let n=Tm(e);e.sessionsLoading=!0,e.sessionsError=null;let r=!1;try{await t()}finally{e.sessionsLoading=!1;let t=Em(n);t&&e.client&&e.connected&&(await Gm(e,t.overrides),r=!0)}return r}async function Vm(e,t,n,r,i){if(!e.client||!e.connected||!window.confirm(i))return null;let a=e.client;e.sessionsCheckpointBusyKey=n;try{let i=await a.request(r,{...vm(e,t),checkpointId:n});return await Gm(e,dm(t)?{agentId:mm(e)}:void 0),i}catch(t){return e.sessionsError=String(t),null}finally{e.sessionsCheckpointBusyKey===n&&(e.sessionsCheckpointBusyKey=null)}}function Hm(e,t){if(!Dm(t)||!e.sessionsResult)return{applied:!1};let n=Dm(t.session)?t.session:null,r=n??t,i=typeof r.key==`string`&&r.key.trim()||typeof t.sessionKey==`string`&&t.sessionKey.trim()||typeof t.key==`string`&&t.key.trim()||``;if(!i||!gm(e,t,i))return{applied:!1};let a=e.sessionsResult.sessions,o=a.findIndex(e=>e.key===i);if(t.reason===`delete`)return o<0?{applied:!1}:(e.sessionsResult={...e.sessionsResult,count:Math.max(0,e.sessionsResult.count-1),sessions:a.filter(e=>e.key!==i)},Rm(e,i),{applied:!0,change:`deleted`});let s=o>=0?a[o]:void 0;if(!(o>=0||n!==null||typeof r.sessionId==`string`))return{applied:!1};let c=Lm(s),l=jm(r.kind)??s?.kind??`unknown`,u={...s??{key:i,kind:l,updatedAt:null},key:i,kind:l},d=u;for(let e of wm){let n=Om(r,e),i=e===`goal`&&Om(t,`goal`)&&t.goal===null;if(!n&&!i)continue;let a=i?null:r[e];a===void 0||e===`goal`&&a===null?delete d[e]:d[e]=a}if(!Om(r,`hasActiveRun`)&&u.status&&(u.status===`running`?t.phase===`start`&&(u.hasActiveRun=!0):u.hasActiveRun=!1),u.totalTokensFresh===!1&&!Om(r,`totalTokens`)&&delete u.totalTokens,!e.sessionsShowArchived&&Mm(u))return o<0?{applied:!1}:(e.sessionsResult={...e.sessionsResult,count:Math.max(0,e.sessionsResult.count-1),sessions:a.filter(e=>e.key!==i)},Rm(e,i),{applied:!0,change:`deleted`});let f=(o>=0?a.map((e,t)=>t===o?u:e):[u,...a]).toSorted(Im),p=typeof t.ts==`number`&&Number.isFinite(t.ts)?t.ts:null,m=typeof t.clientRunId==`string`&&t.clientRunId.trim()?t.clientRunId.trim():typeof t.runId==`string`&&t.runId.trim()?t.runId.trim():void 0;e.sessionsResult={...e.sessionsResult,ts:p==null?e.sessionsResult.ts:Math.max(e.sessionsResult.ts,p),count:o>=0?e.sessionsResult.count:e.sessionsResult.count+1,sessions:f};let h=lm(e),g=e.chatRunId??null,_=h?e.sessionKey:null,v=u.hasActiveRun!==!0&&h&&Cm(e,{changedSessionKey:i,eventRunId:m})&&sd(e,{publishRunStatus:!1});return c!==Lm(u)&&Rm(e,i),{applied:!0,change:o>=0?`updated`:`inserted`,...v?{clearedChatRun:!0}:{},...v&&_!=null?{clearedChatRunStatus:{phase:u.status===`done`?`done`:`interrupted`,runId:g,sessionKey:_}}:{}}}async function Um(e){if(!(!e.client||!e.connected))try{await e.client.request(`sessions.subscribe`,{})}catch(t){e.sessionsError=String(t)}}async function Wm(e,t){if(!e.client||!e.connected)return;let n=e.client,r=e.sessionKey.trim();if(!r)return;let i=ym(e),a=um(e.chatSessionMessageSubscriptionRequestedKey),o=um(e.chatSessionMessageSubscriptionKey),s=a??o,c=pm(e,r),l=c!==null&&s===r&&(e.chatSessionMessageSubscriptionAgentId??null)!==c,u=s!==null&&s!==r,d=o!==null&&(u||l),f=t?.force===!0||u||l||o===null||a===null;if(!d&&!f)return;let p=()=>bm(e,{generation:i,client:n,requestedKey:r,requestedAgentId:c});try{if(d&&o&&(await n.request(`sessions.messages.unsubscribe`,{key:o,...dm(o)&&e.chatSessionMessageSubscriptionAgentId?{agentId:e.chatSessionMessageSubscriptionAgentId}:{}}),p()&&(e.chatSessionMessageSubscriptionKey=null,e.chatSessionMessageSubscriptionRequestedKey=null,e.chatSessionMessageSubscriptionAgentId=null)),!f||!p())return;let t=_m(e,r),i=xm(await n.request(`sessions.messages.subscribe`,t),r),a=`agentId`in t?t.agentId:null;if(!p()){let t=um(e.chatSessionMessageSubscriptionKey)!==i,r=dm(i)&&(e.chatSessionMessageSubscriptionAgentId??null)!==a;(t||r)&&await Sm(n,i,a);return}e.chatSessionMessageSubscriptionRequestedKey=r,e.chatSessionMessageSubscriptionKey=i,e.chatSessionMessageSubscriptionAgentId=a}catch(t){p()&&(e.sessionsError=String(t))}}async function Gm(e,t){if(!e.client||!e.connected)return;let n=Tm(e);if(n.loading){n.pending={overrides:t};return}if(e.sessionsLoading){n.pending={overrides:t};return}let r=e.client;n.loading=!0,n.ownsStateLoading=!0,e.sessionsLoading=!0,e.sessionsError=null;let i=t;try{for(;;){n.pending=null,await Km(e,r,i);let t=Em(n);if(!t||!e.client||!e.connected)break;i=t.overrides}}finally{n.loading=!1,n.pending=null,n.ownsStateLoading&&=(e.sessionsLoading=!1,!1)}}async function Km(e,t,n){await(async()=>{let r=new Map((e.sessionsResult?.sessions??[]).map(e=>[e.key,e])),i=n?.includeGlobal??e.sessionsIncludeGlobal,a=n?.includeUnknown??e.sessionsIncludeUnknown,o=n?.showArchived??e.sessionsShowArchived,s=o?0:Am(n?.activeMinutes)??km(e.sessionsFilterActive),c=Am(n?.limit)??km(e.sessionsFilterLimit),l={includeGlobal:i,includeUnknown:a,configuredAgentsOnly:n?.configuredAgentsOnly??!0},u=n?.agentId?.trim();u&&(l.agentId=u),s>0&&(l.activeMinutes=s),c>0&&(l.limit=c);let d=typeof n?.offset==`number`&&Number.isFinite(n.offset)?Math.max(0,Math.floor(n.offset)):0;d>0&&(l.offset=d);let f=n?.search?.trim();f&&(l.search=f);let p=await t.request(`sessions.list`,l);if(p){let t=Pm(p,{showArchived:o});e.sessionsResult=n?.append===!0&&d>0&&e.sessionsResult?Fm(e.sessionsResult,t):t,lm(e)&&sd(e,{publishRunStatus:n?.publishChatRunStatus!==!1});let i=new Set(e.sessionsResult.sessions.map(e=>e.key));for(let t of Object.keys(e.sessionsCheckpointItemsByKey))i.has(t)||Rm(e,t);let a=!1;for(let t of e.sessionsResult.sessions)Lm(r.get(t.key))!==Lm(t)&&(Rm(e,t.key),e.sessionsExpandedCheckpointKey===t.key&&(a=!0));let s=e.sessionsExpandedCheckpointKey;s&&i.has(s)&&(a||!e.sessionsCheckpointItemsByKey[s])&&await zm(e,s)}})().catch(t=>{if(!Ut(t)){e.sessionsError=String(t);return}e.sessionsResult=null,e.sessionsError=Wt(`sessions`)})}async function qm(e,t,n){if(!e.client||!e.connected)return;let r={key:t,...dm(t)?{agentId:mm(e)}:{}};for(let e of[`label`,`thinkingLevel`,`fastMode`,`verboseLevel`,`reasoningLevel`])e in n&&(r[e]=n[e]);try{await e.client.request(`sessions.patch`,r),await Gm(e,dm(t)?{agentId:mm(e)}:void 0)}catch(t){e.sessionsError=String(t)}}async function Jm(e,t={},n){if(!e.client||!e.connected||e.sessionsLoading)return null;let r=e.client,i=null;try{await Bm(e,async()=>{let a=await r.request(`sessions.create`,t),o=typeof a?.key==`string`?a.key.trim():``;if(!o)throw Error(`sessions.create returned no key`);i=o,await Gm(e,n)})}catch(t){return e.sessionsError=String(t),null}return i}async function Ym(e,t){if(!e.client||!e.connected||t.length===0)return[];let n=e.client;if(e.sessionsLoading||!window.confirm(`Delete ${t.length} ${t.length===1?`session`:`sessions`}?\n\nThis will delete the session entries and archive their transcripts.`))return[];let r=[],i=[],a=await Bm(e,async()=>{for(let a of t)try{await n.request(`sessions.delete`,{key:a,...dm(a)?{agentId:mm(e)}:{},deleteTranscript:!0}),r.push(a)}catch(e){i.push(String(e))}});return r.length>0&&!a&&await Gm(e,r.some(e=>dm(e))?{agentId:mm(e)}:void 0),i.length>0&&(e.sessionsError=i.join(`; `)),r}async function Xm(e,t){let n=t.trim();if(n){if(e.sessionsExpandedCheckpointKey===n){e.sessionsExpandedCheckpointKey=null;return}e.sessionsExpandedCheckpointKey=n,!e.sessionsCheckpointItemsByKey[n]&&await zm(e,n)}}async function Zm(e,t,n){return(await Vm(e,t,n,`sessions.compaction.branch`,`Create a new child session from this compacted checkpoint?`))?.key??null}async function Qm(e,t,n){await Vm(e,t,n,`sessions.compaction.restore`,`Restore this session to the selected compacted checkpoint?
62
+ • Help – Show usage guide`}}),H({key:`whoami`,nativeName:`whoami`,description:`Show your sender id.`,textAlias:`/whoami`,category:`status`,tier:`power`}),H({key:`session`,nativeName:`session`,description:`Manage session-level settings (for example /session idle).`,textAlias:`/session`,category:`session`,tier:`power`,args:[{name:`action`,description:`idle | max-age`,type:`string`,choices:[`idle`,`max-age`]},{name:`value`,description:`Duration (24h, 90m) or off`,type:`string`,captureRemaining:!0}],argsMenu:`auto`}),H({key:`subagents`,nativeName:`subagents`,description:`Inspect subagent runs for this session.`,textAlias:`/subagents`,category:`management`,tier:`standard`,args:[{name:`action`,description:`list | log | info`,type:`string`,choices:[`list`,`log`,`info`]},{name:`target`,description:`Run id, index, or session key`,type:`string`},{name:`value`,description:`Additional input (limit/message)`,type:`string`,captureRemaining:!0}],argsMenu:`auto`}),H({key:`acp`,nativeName:`acp`,description:`Manage ACP sessions and runtime options.`,textAlias:`/acp`,category:`management`,tier:`power`,args:[{name:`action`,description:`Action to run`,type:`string`,preferAutocomplete:!0,choices:[`spawn`,`cancel`,`steer`,`close`,`sessions`,`status`,`set-mode`,`set`,`cwd`,`permissions`,`timeout`,`model`,`reset-options`,`doctor`,`install`,`help`]},{name:`value`,description:`Action arguments`,type:`string`,captureRemaining:!0}],argsMenu:`auto`}),H({key:`focus`,nativeName:`focus`,description:`Bind this thread (Discord) or topic/conversation (Telegram) to a session target.`,textAlias:`/focus`,category:`management`,tier:`power`,args:[{name:`target`,description:`Subagent label/index or session key/id/label`,type:`string`,captureRemaining:!0}]}),H({key:`unfocus`,nativeName:`unfocus`,description:`Remove the current thread (Discord) or topic/conversation (Telegram) binding.`,textAlias:`/unfocus`,category:`management`,tier:`power`}),H({key:`agents`,nativeName:`agents`,description:`List thread-bound agents for this session.`,textAlias:`/agents`,category:`management`,tier:`standard`}),H({key:`steer`,nativeName:`steer`,description:`Send guidance to the active run in this session.`,textAlias:`/steer`,category:`management`,tier:`standard`,args:[{name:`message`,description:`Steering message`,type:`string`,captureRemaining:!0}]}),H({key:`config`,nativeName:`config`,description:`Show or set config values.`,textAlias:`/config`,category:`management`,tier:`power`,args:[{name:`action`,description:`show | get | set | unset`,type:`string`,choices:[`show`,`get`,`set`,`unset`]},{name:`path`,description:`Config path`,type:`string`},{name:`value`,description:`Value for set`,type:`string`,captureRemaining:!0}],argsParsing:`none`,formatArgs:bd.config}),H({key:`mcp`,nativeName:`mcp`,description:`Show or set FengMing MCP servers.`,textAlias:`/mcp`,category:`management`,tier:`power`,args:[{name:`action`,description:`show | get | set | unset`,type:`string`,choices:[`show`,`get`,`set`,`unset`]},{name:`path`,description:`MCP server name`,type:`string`},{name:`value`,description:`JSON config for set`,type:`string`,captureRemaining:!0}],argsParsing:`none`,formatArgs:bd.mcp}),H({key:`plugins`,nativeName:`plugins`,description:`List, show, enable, or disable plugins.`,textAliases:[`/plugins`,`/plugin`],category:`management`,tier:`power`,args:[{name:`action`,description:`list | show | get | enable | disable`,type:`string`,choices:[`list`,`show`,`get`,`enable`,`disable`]},{name:`path`,description:`Plugin id or name`,type:`string`}],argsParsing:`none`,formatArgs:bd.plugins}),H({key:`debug`,nativeName:`debug`,description:`Set runtime debug overrides.`,textAlias:`/debug`,category:`management`,tier:`power`,args:[{name:`action`,description:`show | reset | set | unset`,type:`string`,choices:[`show`,`reset`,`set`,`unset`]},{name:`path`,description:`Debug path`,type:`string`},{name:`value`,description:`Value for set`,type:`string`,captureRemaining:!0}],argsParsing:`none`,formatArgs:bd.debug}),H({key:`usage`,nativeName:`usage`,description:`Usage footer or cost summary.`,textAlias:`/usage`,category:`options`,tier:`standard`,args:[{name:`mode`,description:`off, tokens, full, or cost`,type:`string`,choices:[`off`,`tokens`,`full`,`cost`]}],argsMenu:`auto`}),H({key:`stop`,nativeName:`stop`,description:`Stop the current run.`,textAlias:`/stop`,category:`session`,tier:`essential`}),H({key:`restart`,nativeName:`restart`,description:`Restart FengMing.`,textAlias:`/restart`,category:`tools`,tier:`power`}),H({key:`activation`,nativeName:`activation`,description:`Set group activation mode.`,textAlias:`/activation`,category:`management`,tier:`power`,args:[{name:`mode`,description:`mention or always`,type:`string`,choices:[`mention`,`always`]}],argsMenu:`auto`}),H({key:`send`,nativeName:`send`,description:`Set send policy.`,textAlias:`/send`,category:`management`,tier:`power`,args:[{name:`mode`,description:`on, off, or inherit`,type:`string`,choices:[`on`,`off`,`inherit`]}],argsMenu:`auto`}),H({key:`reset`,nativeName:`reset`,description:`Reset the current session.`,textAlias:`/reset`,acceptsArgs:!0,category:`session`,tier:`essential`}),H({key:`new`,nativeName:`new`,description:`Start a new session.`,textAlias:`/new`,acceptsArgs:!0,category:`session`,tier:`essential`}),H({key:`compact`,nativeName:`compact`,description:`Compact the session context.`,textAlias:`/compact`,category:`session`,tier:`essential`,args:[{name:`instructions`,description:`Extra compaction instructions`,type:`string`,captureRemaining:!0}]}),H({key:`think`,nativeName:`think`,description:`Set thinking level.`,textAlias:`/think`,category:`options`,tier:`essential`,args:[{name:`level`,description:`Thinking level`,type:`string`,choices:({provider:e,model:t,catalog:r})=>n(e,t,r)}],argsMenu:`auto`}),H({key:`verbose`,nativeName:`verbose`,description:`Toggle verbose mode.`,textAlias:`/verbose`,category:`options`,tier:`standard`,args:[{name:`mode`,description:`on, off, or full`,type:`string`,choices:[`on`,`off`,`full`]}]}),H({key:`trace`,nativeName:`trace`,description:`Toggle plugin trace lines.`,textAlias:`/trace`,category:`options`,tier:`power`,args:[{name:`mode`,description:`on, off, or raw`,type:`string`,choices:[`on`,`off`,`raw`]}],argsMenu:`auto`}),H({key:`fast`,nativeName:`fast`,description:`Toggle fast mode.`,textAlias:`/fast`,category:`options`,tier:`standard`,args:[{name:`mode`,description:`status, on, off, or default`,type:`string`,choices:[`status`,`on`,`off`,`default`]}],argsMenu:`auto`}),H({key:`reasoning`,nativeName:`reasoning`,description:`Toggle reasoning visibility.`,textAlias:`/reasoning`,category:`options`,tier:`standard`,args:[{name:`mode`,description:`on, off, or stream`,type:`string`,choices:[`on`,`off`,`stream`]}],argsMenu:`auto`}),H({key:`elevated`,nativeName:`elevated`,description:`Toggle elevated mode.`,textAlias:`/elevated`,category:`options`,tier:`power`,args:[{name:`mode`,description:`on, off, ask, or full`,type:`string`,choices:[`on`,`off`,`ask`,`full`]}],argsMenu:`auto`}),H({key:`exec`,nativeName:`exec`,description:`Set exec defaults for this session.`,textAlias:`/exec`,category:`options`,tier:`power`,args:[{name:`host`,description:`sandbox, gateway, or node`,type:`string`,choices:[`sandbox`,`gateway`,`node`]},{name:`security`,description:`deny, allowlist, or full`,type:`string`,choices:[`deny`,`allowlist`,`full`]},{name:`ask`,description:`off, on-miss, or always`,type:`string`,choices:[`off`,`on-miss`,`always`]},{name:`node`,description:`Node id or name`,type:`string`}],argsParsing:`none`,formatArgs:bd.exec}),H({key:`model`,nativeName:`model`,description:`Show or set the model.`,textAlias:`/model`,category:`options`,tier:`essential`,args:[{name:`model`,description:`Model id (provider/model or id)`,type:`string`}]}),H({key:`models`,nativeName:`models`,description:`List model providers/models.`,textAlias:`/models`,tier:`standard`,argsParsing:`none`,acceptsArgs:!0,category:`options`}),H({key:`queue`,nativeName:`queue`,description:`Adjust queue settings.`,textAlias:`/queue`,category:`options`,tier:`power`,args:[{name:`mode`,description:`queue mode`,type:`string`,choices:[`steer`,`followup`,`collect`,`interrupt`]},{name:`debounce`,description:`debounce duration (e.g. 500ms, 2s)`,type:`string`},{name:`cap`,description:`queue cap`,type:`number`},{name:`drop`,description:`drop policy`,type:`string`,choices:[`old`,`new`,`summarize`]}],argsParsing:`none`,formatArgs:bd.queue}),H({key:`bash`,description:`Run host shell commands (host-only).`,textAlias:`/bash`,scope:`text`,category:`tools`,tier:`power`,args:[{name:`command`,description:`Shell command`,type:`string`,captureRemaining:!0}]})];return Sd(r,`whoami`,`/id`),Sd(r,`think`,`/thinking`,`/t`),Sd(r,`verbose`,`/v`),Sd(r,`reasoning`,`/reason`),Sd(r,`elevated`,`/elev`),Sd(r,`steer`,`/tell`),Cd(r),r}var Td=/^[a-z0-9][a-z0-9_-]*$/u,Ed=500,Dd=20,Od=20,kd=50,Ad=200,jd=2e3,Md=200,Nd={help:`book`,status:`barChart`,usage:`barChart`,export:`download`,export_session:`download`,tools:`terminal`,skill:`zap`,commands:`book`,new:`plus`,reset:`refresh`,compact:`loader`,stop:`stop`,clear:`trash`,focus:`eye`,unfocus:`eye`,model:`brain`,models:`brain`,think:`brain`,verbose:`terminal`,fast:`zap`,agents:`monitor`,subagents:`folder`,steer:`send`,tts:`volume2`},Pd=new Set([`help`,`new`,`reset`,`stop`,`compact`,`focus`,`model`,`think`,`fast`,`verbose`,`export-session`,`usage`,`agents`,`steer`,`redirect`]),Fd=[{key:`clear`,name:`clear`,description:v(`chat.clearChatHistory`),icon:`trash`,category:`session`,executeLocal:!0,tier:`standard`},{key:`redirect`,name:`redirect`,description:v(`chat.abortRestart`),args:`<message>`,icon:`refresh`,category:`agents`,executeLocal:!0,tier:`power`}],Id={help:`tools`,commands:`tools`,tools:`tools`,skill:`tools`,status:`tools`,export_session:`tools`,usage:`tools`,tts:`tools`,agents:`agents`,subagents:`agents`,steer:`agents`,redirect:`agents`,session:`session`,stop:`session`,reset:`session`,new:`session`,compact:`session`,focus:`session`,unfocus:`session`,model:`model`,models:`model`,think:`model`,verbose:`model`,fast:`model`,reasoning:`model`,elevated:`model`,queue:`model`},Ld={steer:v(`chat.injectMessage`)},Rd={steer:`<message>`};function zd(e){return e.key.replace(/[:.-]/g,`_`)}function Bd(e){return(e.aliases??[]).map(e=>e.trim()).filter(Boolean).map(e=>e.startsWith(`/`)?e.slice(1):e)}function Vd(e){return e.name.trim()||null}function Hd(e){if(e.args?.length)return e.args.map(e=>{let t=`<${e.name}>`;return e.required?t:`[${e.name}]`}).join(` `)}function Ud(e){return typeof e==`string`?e:e.value}function Wd(e){let t=e.args?.[0];if(!t)return;let n=t.choices?.map(Ud).filter(Boolean);return n?.length?n:void 0}function Gd(e){let t=Id[zd(e)];if(t)return t;switch(e.category){case`session`:return`session`;case`options`:return`model`;case`management`:return`tools`;default:return`tools`}}function Kd(e){return Nd[zd(e)]??`terminal`}function qd(e){let t=e.tier;return t===`essential`||t===`standard`||t===`power`?t:`standard`}function Jd(e,t=`local`){let n=Vd(e);return n?{key:e.key,name:n,aliases:Bd(e).filter(e=>e!==n),description:Ld[e.key]??e.description,args:Rd[e.key]??Hd(e),icon:Kd(e),category:Gd(e),executeLocal:t===`local`&&Pd.has(e.key),argOptions:Wd(e),tier:t===`local`?qd(e):`standard`}:null}function Yd(e){let t=E(e.trim().replace(/^\//u,``).slice(0,Ad));return!t||!Td.test(t)?null:t}function Xd(e,t){let n=typeof e==`string`?e:``;return n.length>t?n.slice(0,t):n}function Zd(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:null}function Qd(e){let t=`args`in e?e.args:void 0;return Array.isArray(t)?t.map(e=>Zd(e)).filter(e=>e!==null):[]}function $d(e){if(e.dynamic===!0)return[];let t=e.choices;return Array.isArray(t)?t.map(e=>{if(typeof e==`string`)return Xd(e,Ad);let t=Zd(e);return t?{value:Xd(t.value,Ad),label:Xd(t.label,Ad)}:null}).filter(e=>e?typeof e==`string`?!!e:!!e.value:!1):[]}function ef(){return[...wd().map(e=>({key:e.key,name:e.textAliases[0]?.replace(/^\//u,``)??e.key,aliases:e.textAliases,description:e.description,args:e.args?.map(e=>({name:e.name,required:e.required,choices:Array.isArray(e.choices)?e.choices:void 0})),category:e.category,tier:e.tier})).map(e=>Jd(e,`local`)).filter(e=>e!==null),...Fd]}function tf(e=ef()){let t=new Set;for(let n of e){t.add(E(n.name));for(let e of n.aliases??[]){let n=Yd(e);n&&t.add(n)}}return t}function nf(e,t){let n=(Array.isArray(e.textAliases)?e.textAliases:[]).slice(0,Dd).filter(e=>typeof e==`string`).map(Yd).filter(e=>!!e).filter(e=>!t.has(e)),r=n[0]??(typeof e.name==`string`?Yd(e.name):null);if(!r||t.has(r))return null;let i=Qd(e).slice(0,Od).map(e=>({name:Xd(e.name,Md),required:e.required===!0,choices:$d(e).slice(0,kd)})).filter(e=>e.name.length>0).map(e=>Object.assign({name:e.name},e.required?{required:!0}:{},e.choices.length>0?{choices:e.choices}:{}));return{key:r,name:r,aliases:n.map(e=>`/${e}`),description:Xd(e.description,jd),...i.length>0?{args:i}:{},category:typeof e.category==`string`?e.category:void 0}}function rf(e){cf.splice(0,cf.length,...e)}function af(e){let t=ef(),n=tf(t),r=e.slice(0,Ed).map(e=>nf(e,n)).filter(e=>e!==null).map(e=>Jd(e,`remote`)).filter(e=>e!==null),i=new Map;for(let e of[...t,...r]){let t=E(e.name);!t||i.has(t)||i.set(t,e)}return Array.from(i.values())}function of(e){let t=e?.commands;return Array.isArray(t)?t.map(e=>Zd(e)).filter(e=>e!==null):[]}function sf(){return ef()}var cf=sf(),lf=0;async function uf(e){let t=++lf,n=e.agentId?.trim();if(!e.client){if(t!==lf)return;rf(sf());return}try{let r=await e.client.request(`commands.list`,{...n?{agentId:n}:{},includeArgs:!0,scope:`text`});if(t!==lf)return;rf(af(of(r)))}catch{if(t!==lf)return;rf(sf())}}var df=[`session`,`model`,`tools`,`agents`],ff={session:`Session`,model:`Model`,agents:`Agents`,tools:`Tools`},pf={essential:0,standard:1,power:2};function mf(e,t){let n=E(e),r=t?.showAll??!1,i=n?cf.filter(e=>e.name.startsWith(n)||e.aliases?.some(e=>E(e).startsWith(n))||E(e.description).includes(n)):cf;return!n&&!r&&(i=i.filter(e=>(e.tier??`standard`)!==`power`)),i.toSorted((e,t)=>{let r=pf[e.tier??`standard`]??1,i=pf[t.tier??`standard`]??1;if(r!==i)return r-i;let a=df.indexOf(e.category??`session`),o=df.indexOf(t.category??`session`);if(a!==o)return a-o;if(n){let r=+!e.name.startsWith(n),i=+!t.name.startsWith(n);if(r!==i)return r-i}return 0})}function hf(){return cf.filter(e=>(e.tier??`standard`)===`power`).length}function gf(e){let t=e.trim();if(!t.startsWith(`/`))return null;let n=t.slice(1),r=n.search(/[\s:]/u),i=r===-1?n:n.slice(0,r),a=r===-1?``:n.slice(r).trimStart();a.startsWith(`:`)&&(a=a.slice(1).trimStart());let o=a.trim();if(!i)return null;let s=E(i),c=cf.find(e=>e.name===s||e.aliases?.some(e=>E(e)===s));return c?{command:c,args:o}:null}function _f(e){if(!e)return;let t=E(e);if([`off`,`false`,`no`,`0`].includes(t))return`off`;if([`full`,`all`,`everything`].includes(t))return`full`;if([`on`,`minimal`,`true`,`yes`,`1`].includes(t))return`on`}function vf(e){let t=w(e);return t?[`default`,`inherit`,`inherited`,`clear`,`reset`,`unpin`].includes(t):!1}async function yf(e,t,n,r,i={}){switch(n){case`help`:return bf();case`new`:return{content:v(`chat.slashCommands.newSession`),action:`new-session`};case`reset`:return{content:v(`chat.slashCommands.resetSession`),action:`reset`};case`stop`:return{content:v(`chat.slashCommands.stopRun`),action:`stop`};case`clear`:return{content:v(`chat.slashCommands.historyCleared`),action:`clear`};case`focus`:return{content:v(`chat.slashCommands.focusToggled`),action:`toggle-focus`};case`compact`:return await xf(e,t,i);case`model`:return await Sf(e,t,r,i);case`think`:return await Cf(e,t,r,i);case`fast`:return await Tf(e,t,r,i);case`verbose`:return await wf(e,t,r,i);case`export-session`:return{content:v(`chat.slashCommands.exporting`),action:`export`};case`usage`:return await Ef(e,t);case`agents`:return await Df(e);case`steer`:return await Kf(e,t,r,i);case`redirect`:return await qf(e,t,r,i);default:return{content:v(`chat.slashCommands.unknownCommand`,{command:n})}}}function bf(){let e=[v(`chat.slashCommands.availableCommands`)],t=``;for(let n of cf){let r=n.category??`session`;r!==t&&(t=r,e.push(`**${r.charAt(0).toUpperCase()+r.slice(1)}**`));let i=n.args?` ${n.args}`:``,a=n.executeLocal?``:v(`chat.slashCommands.agentIndicator`);e.push(`\`/${n.name}${i}\` — ${n.description}${a}`)}return e.push(`
63
+ `+v(`chat.slashCommands.commandMenuHint`)),{content:e.join(`
64
+ `)}}async function xf(e,t,n){try{let r=await e.request(`sessions.compact`,{key:t,...kf(t,n)});if(r?.compacted){let e=r.result?.tokensBefore,t=r.result?.tokensAfter,n=typeof e==`number`&&typeof t==`number`?v(`chat.slashCommands.compactionTokenChange`,{before:e.toLocaleString(),after:t.toLocaleString()}):``;return{content:v(`chat.slashCommands.compactionSuccess`)+n+`.`,action:`refresh`}}return typeof r?.reason==`string`&&r.reason.trim()?{content:v(`chat.slashCommands.compactionSkippedReason`,{reason:r.reason}),action:`refresh`}:{content:v(`chat.slashCommands.compactionSkipped`),action:`refresh`}}catch(e){return{content:v(`chat.slashCommands.compactionFailed`,{error:String(e)})}}}async function Sf(e,t,n,r){let i=r.chatModelCatalog??r.modelCatalog;if(!n)try{let[n,r]=await Promise.all([e.request(`sessions.list`,{}),i?Promise.resolve(i):Vf(e)]),a=zf(n,t)?.model||n?.defaults?.model||`default`,o=r.map(e=>e.id),s=[v(`chat.slashCommands.currentModel`,{model:a})];if(o.length>0){let e=o.slice(0,10).map(e=>`\`${e}\``).join(`, `),t=o.length>10?v(`chat.slashCommands.moreModels`,{count:String(o.length-10)}):``;s.push(v(`chat.slashCommands.availableModels`,{models:e})+t)}return{content:s.join(`
65
+ `)}}catch(e){return{content:v(`chat.slashCommands.modelInfoFailed`,{error:String(e)})}}try{let a=n.trim(),[o,s]=await Promise.all([e.request(`sessions.patch`,{key:t,...kf(t,r),model:a}),i?Promise.resolve(i):Vf(e,{allowFailure:!0})]),c=o.resolved?.model??a,l=na(c,o.resolved?.modelProvider,s),u=Zi(a),d=o.resolved?.modelProvider?.trim();return u?.kind===`qualified`&&d&&l&&!l.toLowerCase().startsWith(`${d.toLowerCase()}/`)&&u.value.toLowerCase().endsWith(`/${c.trim().toLowerCase()}`)&&(l=u.value),{content:v(`chat.slashCommands.modelSet`,{model:a}),action:`refresh`,sessionPatch:{modelOverride:Zi(l)}}}catch(e){return{content:v(`chat.slashCommands.modelSetFailed`,{error:String(e)})}}}async function Cf(e,t,n,r){let i=n.trim();if(!i)try{let{session:n,defaults:r,models:i}=await Bf(e,t);return{content:jf(v(`chat.slashCommands.thinkingCurrent`,{level:Hf(n,r,i)}),Nf(n,r))}}catch(e){return{content:v(`chat.slashCommands.thinkingGetFailed`,{error:String(e)})}}if(vf(i))try{return await e.request(`sessions.patch`,{key:t,...kf(t,r),thinkingLevel:null}),{content:v(`chat.slashCommands.thinkingResetDefault`),action:`refresh`}}catch(e){return{content:v(`chat.slashCommands.thinkingResetFailed`,{error:String(e)})}}try{let{session:n,defaults:a}=await Rf(e,t),o=Pf(i,n,a);return o?Ff(n,a,o)?(await e.request(`sessions.patch`,{key:t,...kf(t,r),thinkingLevel:o}),{content:v(`chat.slashCommands.thinkingSet`,{level:o}),action:`refresh`}):{content:v(`chat.slashCommands.thinkingUnsupported`,{level:i,options:Nf(n,a)})}:{content:v(`chat.slashCommands.thinkingUnrecognized`,{level:i,options:Nf(n,a)})}}catch(e){return{content:v(`chat.slashCommands.thinkingSetFailed`,{error:String(e)})}}}async function wf(e,t,n,r){let i=n.trim();if(!i)try{return{content:jf(v(`chat.slashCommands.verboseCurrent`,{level:_f((await Lf(e,t))?.verboseLevel)??`off`}),`on, full, off`)}}catch(e){return{content:v(`chat.slashCommands.verboseGetFailed`,{error:String(e)})}}let a=_f(i);if(!a)return{content:v(`chat.slashCommands.verboseUnrecognized`,{level:i})};try{return await e.request(`sessions.patch`,{key:t,...kf(t,r),verboseLevel:a}),{content:v(`chat.slashCommands.verboseSet`,{level:a}),action:`refresh`}}catch(e){return{content:v(`chat.slashCommands.verboseSetFailed`,{error:String(e)})}}}async function Tf(e,t,n,r){let i=E(n);if(!i||i===`status`)try{return{content:jf(v(`chat.slashCommands.fastCurrent`,{level:Uf(await Lf(e,t))}),`status, on, off, default`)}}catch(e){return{content:v(`chat.slashCommands.fastGetFailed`,{error:String(e)})}}if(vf(i))try{return await e.request(`sessions.patch`,{key:t,...kf(t,r),fastMode:null}),{content:v(`chat.slashCommands.fastResetDefault`),action:`refresh`}}catch(e){return{content:v(`chat.slashCommands.fastResetFailed`,{error:String(e)})}}if(i!==`on`&&i!==`off`)return{content:v(`chat.slashCommands.fastUnrecognized`,{level:n.trim()})};try{return await e.request(`sessions.patch`,{key:t,...kf(t,r),fastMode:i===`on`}),{content:v(i===`on`?`chat.slashCommands.fastEnabled`:`chat.slashCommands.fastDisabled`),action:`refresh`}}catch(e){return{content:v(`chat.slashCommands.fastSetFailed`,{error:String(e)})}}}async function Ef(e,t){try{let n=zf(await e.request(`sessions.list`,{}),t);if(!n)return{content:v(`chat.slashCommands.usageNoSession`)};let r=Number.isFinite(n.inputTokens),i=Number.isFinite(n.outputTokens),a=r?n.inputTokens??0:0,o=i?n.outputTokens??0:0,s=r||i?a+o:null,c=Number.isFinite(n.totalTokens)?n.totalTokens??null:s,l=n.totalTokensFresh!==!1,u=n.contextTokens??0,d=c!==null&&l&&u>0?Math.round(c/u*100):null,f=s===null?`n/a`:`${l?``:`~`}${Jf(s)}`,p=[v(`chat.slashCommands.usageTitle`),v(`chat.slashCommands.usageInput`,{tokens:Jf(a)}),v(`chat.slashCommands.usageOutput`,{tokens:Jf(o)}),v(`chat.slashCommands.usageTotal`,{display:f})];return d!==null&&p.push(v(`chat.slashCommands.usageContext`,{pct:String(d),ctx:Jf(u)})),n.model&&p.push(v(`chat.slashCommands.usageModel`,{model:n.model})),{content:p.join(`
66
+ `)}}catch(e){return{content:v(`chat.slashCommands.usageFailed`,{error:String(e)})}}}async function Df(e){try{let t=await e.request(`agents.list`,{}),n=t?.agents??[];if(n.length===0)return{content:v(`chat.slashCommands.agentsNone`)};let r=[v(`chat.slashCommands.agentsTitle`,{count:String(n.length)})];for(let e of n){let n=e.id===t?.defaultId,i=e.identity?.name||e.name||e.id,a=n?v(`chat.slashCommands.agentsDefault`):``,o=e.agentRuntime?.id?` · runtime \`${e.agentRuntime.id}\``:``;r.push(`- \`${e.id}\` — ${i}${a}${o}`)}return{content:r.join(`
67
+ `)}}catch(e){return{content:v(`chat.slashCommands.agentsListFailed`,{error:String(e)})}}}function Of(e){return w(e)}function kf(e,t){let n=Of(e),r=z(n??``),i=r&&r.agentId!==`main`&&(r.rest===`main`||r.rest===`global`)?r.agentId:void 0,a=i??w(t.agentId);return(n===`global`||i)&&a?{agentId:a}:{}}function Af(e,t){let n=new Set([e]);if(t&&t!==`main`){let r=`agent:${t}:${Vc}`,i=`agent:${t}:global`;(e===r||e===i)&&n.add(`global`)}if(t===`main`){let t=`agent:${Bc}:main`;e===`main`?n.add(t):e===t&&n.add(Vc)}return n}function jf(e,t){return`${e}\n${v(`chat.slashCommands.options`,{options:t})}.`}function Mf(e,t,n=`, `){return If(e,t).map(e=>e.label).join(n)}function Nf(e,t){let n=Mf(e,t);return n.split(`, `).includes(`default`)?n:`default, ${n}`}function Pf(e,t,n){let r=ld(e);if(r)return r;let i=E(e);return If(t,n).map(e=>({id:ld(e.id)??E(e.id),label:E(e.label)})).find(e=>e.id===i||e.label===i)?.id}function Ff(e,t,n){return If(e,t).some(e=>(ld(e.id)??E(e.id))===n||ld(e.label)===n)}function If(e,t){if(e?.thinkingLevels?.length)return e.thinkingLevels;let n=(!e?.modelProvider||e.modelProvider===t?.modelProvider)&&(!e?.model||e.model===t?.model);return n&&t?.thinkingLevels?.length?t.thinkingLevels:((e?.thinkingOptions?.length?e.thinkingOptions:null)??(n&&t?.thinkingOptions?.length?t.thinkingOptions:null)??dd(e?.modelProvider??t?.modelProvider,e?.model??t?.model).split(/\s*,\s*/)).filter(Boolean).map(e=>({id:ld(e)??E(e),label:e}))}async function Lf(e,t){return(await Rf(e,t)).session}async function Rf(e,t){let n=await e.request(`sessions.list`,{});return{session:zf(n,t),defaults:n?.defaults}}function zf(e,t){let n=Of(t),r=z(n??``)?.agentId??(n===`main`?`main`:void 0),i=n?Af(n,r):new Set;return e?.sessions?.find(e=>{let t=Of(e.key);return t?i.has(t):!1})}async function Bf(e,t){let[n,r]=await Promise.all([e.request(`sessions.list`,{}),Vf(e)]);return{session:zf(n,t),defaults:n?.defaults,models:r}}async function Vf(e,t){try{return(await e.request(`models.list`,{view:`configured`}))?.models??[]}catch(e){if(t?.allowFailure)return[];throw e}}function Hf(e,t,n){let r=ld(e?.thinkingLevel);if(r)return If(e,t).find(e=>ld(e.id)===r)?.label??r;if(e?.thinkingDefault)return e.thinkingDefault;if(t?.thinkingDefault)return t.thinkingDefault;let i=e?.modelProvider??t?.modelProvider,a=e?.model??t?.model;return!i||!a?`off`:fd({provider:i,model:a,catalog:n})}function Uf(e){return e?.fastMode===!0?`on`:`off`}async function Wf(e,t){let n=t.trim();return n?{key:e,message:n}:{error:`empty`}}function Gf(e){return e?.status===`running`&&e.endedAt==null}async function Kf(e,t,n,r){try{let i=await Wf(t,n);return`error`in i?{content:i.error===`empty`?v(`chat.slashCommands.steerUsage`):i.error}:Gf(zf(r.sessionsResult??await e.request(`sessions.list`,kf(t,r)),i.key))?(await e.request(`chat.send`,{sessionKey:i.key,...kf(i.key,r),message:i.message,deliver:!1,idempotencyKey:yt()}),{content:v(`chat.slashCommands.steerOk`),pendingCurrentRun:i.key===t}):{content:v(`chat.slashCommands.steerNoRun`)}}catch(e){return{content:v(`chat.slashCommands.steerFailed`,{error:String(e)})}}}async function qf(e,t,n,r){try{let i=await Wf(t,n);if(`error`in i)return{content:i.error===`empty`?v(`chat.slashCommands.redirectUsage`):i.error};let a=await e.request(`sessions.steer`,{key:i.key,...kf(i.key,r),message:i.message}),o=typeof a?.runId==`string`?a.runId:void 0;return{content:v(`chat.slashCommands.redirectOk`),trackRunId:o}}catch(e){return{content:v(`chat.slashCommands.redirectFailed`,{error:String(e)})}}}function Jf(e){return e>=1e6?`${(e/1e6).toFixed(1).replace(/\.0$/,``)}M`:e>=1e3?`${(e/1e3).toFixed(1).replace(/\.0$/,``)}k`:String(e)}function Yf(e){return typeof e==`string`?e:e instanceof Error&&typeof e.message==`string`?e.message:`unknown error`}function Xf(e){let t=Yf(e.message),n=E(t),r=De(e.details),i=Oe(t),a=r?.reason??i?.reason;if(n.startsWith(`pairing required:`)&&a)return`gateway pairing required: ${Te(a)}`;if(i&&n!==`pairing required`)return t;let o=r?.approvedRoles?.join(`, `)??`none`,s=r?.requestedRole??`none`,c=r?.approvedScopes?.join(`, `)??`none`,l=r?.requestedScopes?.join(`, `)??`none`;switch(r?.reason){case`scope-upgrade`:return r.approvedScopes||r.requestedScopes?`device scope upgrade requires approval (approved: ${c}; requested: ${l})`:ke(e.details);case`role-upgrade`:return r.approvedRoles||r.requestedRole?`device role upgrade requires approval (approved: ${o}; requested: ${s})`:ke(e.details);case`metadata-upgrade`:return`device reconnect details changed and require approval`;default:return`gateway pairing required`}}function Zf(e){let t=Yf(e.message);switch(St(e)){case L.AUTH_TOKEN_MISMATCH:return`gateway token mismatch`;case L.AUTH_UNAUTHORIZED:return`gateway auth failed`;case L.AUTH_RATE_LIMITED:return`too many failed authentication attempts`;case L.PAIRING_REQUIRED:return Xf(e);case L.CONTROL_UI_DEVICE_IDENTITY_REQUIRED:return`device identity required (use HTTPS/localhost or allow insecure auth explicitly)`;case L.CONTROL_UI_ORIGIN_NOT_ALLOWED:return`origin not allowed (open the Control UI from the gateway host or allow it in gateway.controlUi.allowedOrigins)`;case L.AUTH_TOKEN_MISSING:return`gateway token missing`;default:break}let n=E(t);return n===`fetch failed`||n===`failed to fetch`||n===`connect failed`?`gateway connect failed`:t}function Qf(e){return e&&typeof e==`object`?Zf(e):Yf(e)}function $f(e){return e?/[\r\n]/.test(e)?null:e:null}function ep(e){return $f(T(e.hello?.auth?.deviceToken)??null)??$f(T(e.settings?.token)??null)??$f(T(e.password)??null)??null}function tp(e){let t=ep(e);return t?`Bearer ${t}`:null}function np(e){return tn([T(e.hello?.auth?.deviceToken),T(e.settings?.token),T(e.password)].flatMap(e=>$f(e??null)??[]))}var rp=`HEARTBEAT_OK`,ip=300;function ap(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function op(e,t=ip){let n=e.trim();if(!n)return{shouldSkip:!0};let r=n.replace(/<[^>]*>/g,` `).replace(/&nbsp;/gi,` `).replace(/^[*`~_]+/,``).replace(/[*`~_]+$/,``);if(!n.includes(rp)&&!r.includes(rp))return{shouldSkip:!1};let i=RegExp(`${ap(rp)}[^\\w]{0,4}$`),a=!0,o=!1;for(n=r.trim();a;){a=!1;let e=n.trim();if(e.startsWith(rp)){n=e.slice(12).trimStart(),o=!0,a=!0;continue}if(i.test(e)){let t=e.lastIndexOf(rp),r=e.slice(0,t).trimEnd(),i=e.slice(t+12).trimStart();n=r?`${r}${i}`.trimEnd():``,o=!0,a=!0}}return o?{shouldSkip:!n||n.length<=t}:{shouldSkip:!1}}function sp(e){return e===`thinking`||e===`reasoning`}function cp(e){if(typeof e==`string`)return{text:e,hasVisibleNonTextContent:!1};if(!Array.isArray(e))return{text:``,hasVisibleNonTextContent:e!=null};let t=!1;return{text:e.filter(e=>!e||typeof e!=`object`||!(`type`in e)?(t=!0,!1):e.type===`text`?typeof e.text==`string`?!0:(t=!0,!1):(sp(e.type)||(t=!0),!1)).map(e=>e.text).join(``),hasVisibleNonTextContent:t}}function lp(e){if(!e||typeof e!=`object`)return!1;let t=e;if(E(t.role)!==`assistant`)return!1;let{text:n,hasVisibleNonTextContent:r}=cp(typeof t.content==`string`||Array.isArray(t.content)?t.content:t.text);return r?!1:op(n).shouldSkip}var up=/^\s*NO_REPLY\s*$/,dp=`[fengming] missing tool result in session history; inserted synthetic error result for transcript repair.`,fp=100,pp=4e3,mp=6e4,hp=500,gp=5e3,_p=new WeakMap;function vp(e){let t=e,n=(_p.get(t)??0)+1;return _p.set(t,n),n}function yp(e,t){return _p.get(e)===t}function bp(e,t,n,r){return!yp(e,t)||e.sessionKey!==n?!1:!Lp(n)||Rp(e)===r}function xp(e){return up.test(e)}function Sp(e){if(!e||typeof e!=`object`)return!1;let t=e;if(E(t.role)!==`assistant`)return!1;if(typeof t.text==`string`)return xp(t.text);let n=Fu(e);return typeof n==`string`&&xp(n)}function Cp(e){if(!e||typeof e!=`object`||E(e.role)!==`toolresult`)return!1;let t=Fu(e);return typeof t==`string`&&t.trim()===dp}function wp(e){if(typeof e==`string`)return!0;if(!Array.isArray(e))return!1;if(e.length===0)return!0;let t=!1;for(let n of e){if(!n||typeof n!=`object`)return!1;let e=n;if(e.type!==`text`||(t=!0,typeof e.text!=`string`))return!1}return t}function Tp(e){if(!e||typeof e!=`object`)return!1;let t=e;return E(t.role)!==`user`||(Array.isArray(t.MediaPaths)?t.MediaPaths:typeof t.MediaPath==`string`?[t.MediaPath]:[]).some(e=>typeof e==`string`&&e.trim())||!wp(t.content??t.text)?!1:(Fu(e)?.trim()??``)===``}function Ep(e){return op(e).shouldSkip}function Dp(e){return Sp(e)||lp(e)}function Op(e){return Dp(e)||Cp(e)||Tp(e)}function kp(e){return!!(e&&typeof e==`object`&&e.__fengming&&typeof e.__fengming==`object`)}function Ap(e){if(!e||typeof e!=`object`||kp(e))return!1;let t=E(e.role);return t===`user`||t===`assistant`}function jp(e){if(!e||typeof e!=`object`)return null;let t=E(e.role);if(!t)return null;let n=Fu(e)?.trim();if(n)return`${t}:text:${n}`;try{return`${t}:content:${JSON.stringify(e.content??null)}`}catch{return null}}function Mp(e,t){if(t.length===0)return e;if(e.length===0)return t.filter(e=>Ap(e)&&!Op(e)).length===t.length?t:e;let n=new Map;e.forEach((e,t)=>{let r=jp(e);r&&n.set(r,t)});let r=-1,i=-1;for(let e=t.length-1;e>=0;e--){let a=jp(t[e]),o=a?n.get(a):void 0;if(typeof o==`number`){r=e,i=o;break}}if(r<0||i<e.length-1)return e;let a=[];for(let i of t.slice(r+1)){if(!Ap(i)||Op(i))return e;let t=jp(i);if(!t||n.has(t))return e;a.push(i)}return a.length>0?[...e,...a]:e}function Np(e,t){if(!(e instanceof bt)||e.gatewayCode!==`UNAVAILABLE`||!e.retryable)return!1;let n=e.details;if(!n||typeof n!=`object`)return!0;let r=n.method;return typeof r!=`string`||r===t}function Pp(e){let t=typeof e.retryAfterMs==`number`?e.retryAfterMs:hp;return Math.min(Math.max(t,100),gp)}function Fp(e){return new Promise(t=>setTimeout(t,e))}function Ip(e){return E(e)===`global`}function Lp(e){return Ip(e)?!0:E(z(e)?.rest)===`main`}function Rp(e){let t=z(e.sessionKey);if(t?.agentId)return B(t.agentId);let n=e.hello?.snapshot,r=typeof e.assistantAgentId==`string`&&e.assistantAgentId.trim()?e.assistantAgentId:void 0,i=typeof e.agentsList?.defaultId==`string`&&e.agentsList.defaultId.trim()?e.agentsList.defaultId:void 0,a=typeof n?.sessionDefaults?.defaultAgentId==`string`&&n.sessionDefaults.defaultAgentId.trim()?n.sessionDefaults.defaultAgentId:void 0,o=r??i??a;return o?B(o):void 0}function zp(e){let t=e.hello?.snapshot,n=typeof e.agentsList?.defaultId==`string`&&e.agentsList.defaultId.trim()?e.agentsList.defaultId:typeof t?.sessionDefaults?.defaultAgentId==`string`&&t.sessionDefaults.defaultAgentId.trim()?t.sessionDefaults.defaultAgentId:void 0;return n?B(n):void 0}function Bp(e,t){if(!Lp(e.sessionKey)||!Ip(t.sessionKey))return!0;let n=typeof t.agentId==`string`&&t.agentId.trim()?B(t.agentId):void 0,r=Rp(e);return n?r!==void 0&&n===r:r===void 0||r===zp(e)}function Vp(e,t){return(Yc(t.sessionKey,e.sessionKey)||Ip(t.sessionKey)&&Lp(e.sessionKey))&&Bp(e,t)}function Hp(e){let t=e;t.toolStreamById instanceof Map&&Array.isArray(t.toolStreamOrder)&&Array.isArray(t.chatToolMessages)&&Array.isArray(t.chatStreamSegments)&&wl(t)}async function Up(e){if(!e.client||!e.connected)return;let t=e.sessionKey,n=vp(e),r=Lp(t)?Rp(e):null,i=Date.now(),a=e.chatMessages;e.resetChatInputHistoryNavigation?.(),e.chatLoading=!0,e.lastError=null;try{let o;for(;;)try{o=await e.client.request(`chat.history`,{sessionKey:t,...r?{agentId:r}:{},limit:fp,maxChars:pp});break}catch(a){if(!bp(e,n,t,r))return;if(Date.now()-i<mp&&Np(a,`chat.history`)){if(await Fp(Pp(a)),!e.client||!e.connected)return;continue}throw a}if(!bp(e,n,t,r))return;e.chatMessages=Mp((Array.isArray(o.messages)?o.messages:[]).filter(e=>!Op(e)),a),e.currentSessionId=typeof o.sessionId==`string`&&o.sessionId.trim()?o.sessionId:null,e.chatThinkingLevel=o.thinkingLevel??null,Hp(e),e.chatStream=null,e.chatStreamStartedAt=null}catch(i){if(!bp(e,n,t,r))return;Ut(i)?(e.chatMessages=[],e.chatThinkingLevel=null,e.lastError=Wt(`existing chat history`)):e.lastError=String(i)}finally{yp(e,n)&&(e.chatLoading=!1)}}function Wp(e){let t=/^data:([^;]+);base64,(.+)$/.exec(e);return t?{mimeType:t[1],content:t[2]}:null}function Gp(e){return/^\s*data:/iu.test(e)}function Kp(e){let t=e.fileName?.trim();return t?`Attached image: ${t}`:`Attached image`}function qp(e){return e&&e.length>0?e.map(e=>{let t=Vl(e),n=t?Wp(t):null;return n?{type:n.mimeType.startsWith(`image/`)?`image`:`file`,mimeType:n.mimeType,fileName:e.fileName,content:n.content}:null}).filter(e=>e!==null):void 0}function Jp(e,t){if(!e||typeof e!=`object`)return{runId:t,status:`started`};let n=e,r=typeof n.runId==`string`&&n.runId.trim()?n.runId.trim():t,i=n.status;return{runId:r,status:i===`in_flight`||i===`ok`?i:`started`}}async function Yp(e,t){let n=t.sessionKey??e.sessionKey,r=t.agentId?B(t.agentId):Rp(e),i=e.currentSessionId,a=n===e.sessionKey&&(!Ip(n)||r!==void 0&&r===Rp(e))&&typeof i==`string`&&i.trim()?i.trim():void 0;return Jp(await e.client.request(`chat.send`,{sessionKey:n,...Ip(n)&&r?{agentId:r}:{},...a?{sessionId:a}:{},message:t.message,deliver:!1,idempotencyKey:t.runId,attachments:qp(t.attachments)}),t.runId)}function Xp(e,t){if(!e||typeof e!=`object`)return null;let n=e,r=n.role;if(typeof r==`string`){if((t.roleCaseSensitive?r:E(r))!==`assistant`)return null}else if(t.roleRequirement===`required`)return null;return t.requireContentArray?Array.isArray(n.content)?n:null:!(`content`in n)&&!(t.allowTextField&&`text`in n)?null:n}function Zp(e){return Xp(e,{roleRequirement:`required`,roleCaseSensitive:!0,requireContentArray:!0})}function Qp(e){return Xp(e,{roleRequirement:`optional`,allowTextField:!0})}function $p(e){let t=Qp(e.message);if(t&&!Dp(t))return t;let n=e.errorMessage?.trim();return n?{role:`assistant`,content:[{type:`text`,text:n.startsWith(`⚠️`)||n.startsWith(`Error:`)?n:`Error: ${n}`}],timestamp:Date.now()}:null}function em(e,t,n,r=Date.now()){let i=t.trim(),a=n&&n.length>0,o=[];if(i&&o.push({type:`text`,text:i}),a)for(let e of n){let t=Hl(e);if(t){if(e.mimeType.startsWith(`image/`)){if(Gp(t)){o.push({type:`text`,text:Kp(e)});continue}o.push({type:`image`,url:t,source:{type:`url`,url:t}});continue}o.push({type:`attachment`,attachment:{url:t,kind:e.mimeType.startsWith(`audio/`)?`audio`:`document`,label:e.fileName?.trim()||`Attached file`,mimeType:e.mimeType}})}}e.chatMessages=[...e.chatMessages,{role:`user`,content:o,timestamp:r}]}async function tm(e,t,n){if(!e.client||!e.connected)return null;let r=t.trim(),i=n&&n.length>0;if(!r&&!i)return null;e.lastError=null;let a=yt();try{return(await Yp(e,{message:r,attachments:n,runId:a})).runId}catch(t){return e.lastError=Qf(t),null}}async function nm(e,t,n){return tm(e,t,n)}async function rm(e,t,n){return tm(e,t,n)}async function im(e){if(!e.client||!e.connected)return!1;let t=e.chatRunId;try{return await e.client.request(`chat.abort`,t?{sessionKey:e.sessionKey,...(()=>{let t=Rp(e);return Ip(e.sessionKey)&&t?{agentId:t}:{}})(),runId:t}:{sessionKey:e.sessionKey,...(()=>{let t=Rp(e);return Ip(e.sessionKey)&&t?{agentId:t}:{}})()}),!0}catch(t){return e.lastError=Qf(t),!1}}function am(e,t){if(!t)return null;let n=e.chatRunId!==null,r=Vp(e,t),i=e.chatRunId!==null&&typeof t.runId==`string`&&t.runId===e.chatRunId;if(!r&&!i)return null;if(!e.chatRunId&&r&&typeof t.runId==`string`&&(e.chatRunId=t.runId,e.chatStreamStartedAt??=Date.now()),e.chatRunId&&t.runId!==e.chatRunId){if(t.state===`final`){let n=Qp(t.message);return n&&!Dp(n)?(e.chatMessages=[...e.chatMessages,n],null):`final`}return null}let a=t.runId??e.chatRunId,o=(n,i)=>ad(e,{outcome:n,sessionStatus:i,runId:a,sessionKey:e.sessionKey,sessionKeys:r?[e.sessionKey,t.sessionKey]:[],clearLocalRun:!0,clearChatStream:!0});if(t.state===`delta`){let n=Fu(t.message);typeof n==`string`&&!xp(n)&&!lp(t.message)&&(e.chatStream=n)}else if(t.state===`final`){let n=Qp(t.message);n&&!Dp(n)?e.chatMessages=[...e.chatMessages,n]:e.chatStream?.trim()&&!xp(e.chatStream)&&!Ep(e.chatStream)&&(e.chatMessages=[...e.chatMessages,{role:`assistant`,content:[{type:`text`,text:e.chatStream}],timestamp:Date.now()}]),o(`done`,`done`)}else if(t.state===`aborted`){let n=Zp(t.message);if(n&&!Dp(n))e.chatMessages=[...e.chatMessages,n];else{let t=e.chatStream??``;t.trim()&&!xp(t)&&!Ep(t)&&(e.chatMessages=[...e.chatMessages,{role:`assistant`,content:[{type:`text`,text:t}],timestamp:Date.now()}])}o(`interrupted`,`killed`)}else if(t.state===`error`){let r=n?$p(t):null;r&&(e.chatMessages=[...e.chatMessages,r]),o(`interrupted`,`failed`),e.lastError=t.errorMessage??`chat error`}return t.state}async function om(e){try{return(await e.request(`models.list`,{view:`configured`}))?.models??[]}catch{return[]}}var sm=new WeakMap,cm=new WeakMap;function lm(e){return typeof e.sessionKey==`string`&&e.sessionKey.trim()!==``}function um(e){return(typeof e==`string`?e.trim():``)||null}function dm(e){return(e??``).trim().toLowerCase()===`global`}function fm(e,t){let n=z(t);if(!n?.agentId)return null;let r=n.rest.toLowerCase();return r===`global`||r===`main`&&e.sessionsResult?.sessions.find(e=>e.key===t)?.kind===`global`?B(n.agentId):null}function pm(e,t){return dm(t)?mm(e):fm(e,t)}function mm(e){let t=z(e.sessionKey);if(t?.agentId)return B(t.agentId);let n=e.hello?.snapshot,r=typeof e.assistantAgentId==`string`&&e.assistantAgentId.trim()?e.assistantAgentId:void 0,i=typeof e.agentsList?.defaultId==`string`&&e.agentsList.defaultId.trim()?e.agentsList.defaultId:void 0,a=typeof n?.sessionDefaults?.defaultAgentId==`string`&&n.sessionDefaults.defaultAgentId.trim()?n.sessionDefaults.defaultAgentId:void 0;return B(r??i??a??`main`)}function hm(e){let t=e.hello?.snapshot;return B(typeof e.agentsList?.defaultId==`string`&&e.agentsList.defaultId.trim()?e.agentsList.defaultId:typeof t?.sessionDefaults?.defaultAgentId==`string`&&t.sessionDefaults.defaultAgentId.trim()?t.sessionDefaults.defaultAgentId:`main`)}function gm(e,t,n){if(!dm(n))return!0;let r=Dm(t.session)?t.session:null,i=typeof t.agentId==`string`&&t.agentId.trim()||typeof r?.agentId==`string`&&r.agentId.trim(),a=i?B(i):null,o=mm(e);return a?a===o:o===hm(e)}function _m(e,t){let n=pm(e,t);return{key:t,...n?{agentId:n}:{}}}function vm(e,t){let n=pm(e,t);return{key:t,...n?{agentId:n}:{}}}function ym(e){let t=e,n=(cm.get(t)??0)+1;return cm.set(t,n),n}function bm(e,t){return cm.get(e)===t.generation&&e.client===t.client&&e.connected&&e.sessionKey.trim()===t.requestedKey&&pm(e,t.requestedKey)===(t.requestedAgentId??null)}function xm(e,t){return(e&&typeof e==`object`&&typeof e.key==`string`?e.key.trim():``)||t}async function Sm(e,t,n){try{await e.request(`sessions.messages.unsubscribe`,{key:t,...dm(t)&&n?{agentId:n}:{}})}catch{}}function Cm(e,t){return!(e.sessionKey!==t.changedSessionKey||t.eventRunId!==void 0&&e.chatRunId&&e.chatRunId!==t.eventRunId||t.eventRunId===void 0&&e.chatRunId)}var wm=`abortedLastRun.childSessions.compactionCheckpointCount.contextTokens.displayName.endedAt.elevatedLevel.fastMode.goal.hasActiveRun.inputTokens.kind.label.latestCompactionCheckpoint.model.modelProvider.outputTokens.reasoningLevel.runtimeMs.sessionId.spawnedBy.startedAt.status.archived.subject.surface.systemSent.thinkingDefault.thinkingLevel.thinkingOptions.totalTokens.totalTokensFresh.updatedAt.verboseLevel`.split(`.`);function Tm(e){let t=e,n=sm.get(t);return n||(n={loading:!1,ownsStateLoading:!1,pending:null},sm.set(t,n)),n}function Em(e){let t=e.pending;return e.pending=null,t}function Dm(e){return!!(e&&typeof e==`object`)}function Om(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function km(e){let t=e.trim();if(!/^\d+$/.test(t))return 0;let n=Number(t);return Number.isSafeInteger(n)?n:0}function Am(e){if(e!==void 0)return Number.isSafeInteger(e)?e:0}function jm(e){return e===`cron`||e===`direct`||e===`group`||e===`global`||e===`unknown`?e:void 0}function Mm(e){return e.archived===!0}function Nm(e,t){return e.filter(e=>e.key&&(t.showArchived||!Mm(e)))}function Pm(e,t){let n=Nm(e.sessions,t);return{...e,count:n.length,sessions:n}}function Fm(e,t){let n=new Set,r=[];for(let i of[...e.sessions,...t.sessions])!i.key||n.has(i.key)||(n.add(i.key),r.push(i));let i=t.totalCount??e.totalCount,a=t.hasMore??(typeof i==`number`&&Number.isFinite(i)?r.length<i:!1),o=t.nextOffset===void 0?a?r.length:null:t.nextOffset;return{...t,count:r.length,totalCount:i,hasMore:a,nextOffset:o,sessions:r}}function Im(e,t){return(t.updatedAt??0)-(e.updatedAt??0)}function Lm(e){return`${e?.compactionCheckpointCount??0}:${e?.latestCompactionCheckpoint?.checkpointId??``}:${e?.latestCompactionCheckpoint?.createdAt??0}`}function Rm(e,t){if(!(t in e.sessionsCheckpointItemsByKey)&&!(t in e.sessionsCheckpointErrorByKey))return;let n={...e.sessionsCheckpointItemsByKey},r={...e.sessionsCheckpointErrorByKey};delete n[t],delete r[t],e.sessionsCheckpointItemsByKey=n,e.sessionsCheckpointErrorByKey=r}async function zm(e,t){e.sessionsCheckpointLoadingKey=t,e.sessionsCheckpointErrorByKey={...e.sessionsCheckpointErrorByKey,[t]:``};try{let n=await e.client?.request(`sessions.compaction.list`,vm(e,t));n&&(e.sessionsCheckpointItemsByKey={...e.sessionsCheckpointItemsByKey,[t]:n.checkpoints??[]})}catch(n){e.sessionsCheckpointErrorByKey={...e.sessionsCheckpointErrorByKey,[t]:String(n)}}finally{e.sessionsCheckpointLoadingKey===t&&(e.sessionsCheckpointLoadingKey=null)}}async function Bm(e,t){if(e.sessionsLoading)return!1;let n=Tm(e);e.sessionsLoading=!0,e.sessionsError=null;let r=!1;try{await t()}finally{e.sessionsLoading=!1;let t=Em(n);t&&e.client&&e.connected&&(await Gm(e,t.overrides),r=!0)}return r}async function Vm(e,t,n,r,i){if(!e.client||!e.connected||!window.confirm(i))return null;let a=e.client;e.sessionsCheckpointBusyKey=n;try{let i=await a.request(r,{...vm(e,t),checkpointId:n});return await Gm(e,dm(t)?{agentId:mm(e)}:void 0),i}catch(t){return e.sessionsError=String(t),null}finally{e.sessionsCheckpointBusyKey===n&&(e.sessionsCheckpointBusyKey=null)}}function Hm(e,t){if(!Dm(t)||!e.sessionsResult)return{applied:!1};let n=Dm(t.session)?t.session:null,r=n??t,i=typeof r.key==`string`&&r.key.trim()||typeof t.sessionKey==`string`&&t.sessionKey.trim()||typeof t.key==`string`&&t.key.trim()||``;if(!i||!gm(e,t,i))return{applied:!1};let a=e.sessionsResult.sessions,o=a.findIndex(e=>e.key===i);if(t.reason===`delete`)return o<0?{applied:!1}:(e.sessionsResult={...e.sessionsResult,count:Math.max(0,e.sessionsResult.count-1),sessions:a.filter(e=>e.key!==i)},Rm(e,i),{applied:!0,change:`deleted`});let s=o>=0?a[o]:void 0;if(!(o>=0||n!==null||typeof r.sessionId==`string`))return{applied:!1};let c=Lm(s),l=jm(r.kind)??s?.kind??`unknown`,u={...s??{key:i,kind:l,updatedAt:null},key:i,kind:l},d=u;for(let e of wm){let n=Om(r,e),i=e===`goal`&&Om(t,`goal`)&&t.goal===null;if(!n&&!i)continue;let a=i?null:r[e];a===void 0||e===`goal`&&a===null?delete d[e]:d[e]=a}if(!Om(r,`hasActiveRun`)&&u.status&&(u.status===`running`?t.phase===`start`&&(u.hasActiveRun=!0):u.hasActiveRun=!1),u.totalTokensFresh===!1&&!Om(r,`totalTokens`)&&delete u.totalTokens,!e.sessionsShowArchived&&Mm(u))return o<0?{applied:!1}:(e.sessionsResult={...e.sessionsResult,count:Math.max(0,e.sessionsResult.count-1),sessions:a.filter(e=>e.key!==i)},Rm(e,i),{applied:!0,change:`deleted`});let f=(o>=0?a.map((e,t)=>t===o?u:e):[u,...a]).toSorted(Im),p=typeof t.ts==`number`&&Number.isFinite(t.ts)?t.ts:null,m=typeof t.clientRunId==`string`&&t.clientRunId.trim()?t.clientRunId.trim():typeof t.runId==`string`&&t.runId.trim()?t.runId.trim():void 0;e.sessionsResult={...e.sessionsResult,ts:p==null?e.sessionsResult.ts:Math.max(e.sessionsResult.ts,p),count:o>=0?e.sessionsResult.count:e.sessionsResult.count+1,sessions:f};let h=lm(e),g=e.chatRunId??null,_=h?e.sessionKey:null,v=u.hasActiveRun!==!0&&h&&Cm(e,{changedSessionKey:i,eventRunId:m})&&sd(e,{publishRunStatus:!1});return c!==Lm(u)&&Rm(e,i),{applied:!0,change:o>=0?`updated`:`inserted`,...v?{clearedChatRun:!0}:{},...v&&_!=null?{clearedChatRunStatus:{phase:u.status===`done`?`done`:`interrupted`,runId:g,sessionKey:_}}:{}}}async function Um(e){if(!(!e.client||!e.connected))try{await e.client.request(`sessions.subscribe`,{})}catch(t){e.sessionsError=String(t)}}async function Wm(e,t){if(!e.client||!e.connected)return;let n=e.client,r=e.sessionKey.trim();if(!r)return;let i=ym(e),a=um(e.chatSessionMessageSubscriptionRequestedKey),o=um(e.chatSessionMessageSubscriptionKey),s=a??o,c=pm(e,r),l=c!==null&&s===r&&(e.chatSessionMessageSubscriptionAgentId??null)!==c,u=s!==null&&s!==r,d=o!==null&&(u||l),f=t?.force===!0||u||l||o===null||a===null;if(!d&&!f)return;let p=()=>bm(e,{generation:i,client:n,requestedKey:r,requestedAgentId:c});try{if(d&&o&&(await n.request(`sessions.messages.unsubscribe`,{key:o,...dm(o)&&e.chatSessionMessageSubscriptionAgentId?{agentId:e.chatSessionMessageSubscriptionAgentId}:{}}),p()&&(e.chatSessionMessageSubscriptionKey=null,e.chatSessionMessageSubscriptionRequestedKey=null,e.chatSessionMessageSubscriptionAgentId=null)),!f||!p())return;let t=_m(e,r),i=xm(await n.request(`sessions.messages.subscribe`,t),r),a=`agentId`in t?t.agentId:null;if(!p()){let t=um(e.chatSessionMessageSubscriptionKey)!==i,r=dm(i)&&(e.chatSessionMessageSubscriptionAgentId??null)!==a;(t||r)&&await Sm(n,i,a);return}e.chatSessionMessageSubscriptionRequestedKey=r,e.chatSessionMessageSubscriptionKey=i,e.chatSessionMessageSubscriptionAgentId=a}catch(t){p()&&(e.sessionsError=String(t))}}async function Gm(e,t){if(!e.client||!e.connected)return;let n=Tm(e);if(n.loading){n.pending={overrides:t};return}if(e.sessionsLoading){n.pending={overrides:t};return}let r=e.client;n.loading=!0,n.ownsStateLoading=!0,e.sessionsLoading=!0,e.sessionsError=null;let i=t;try{for(;;){n.pending=null,await Km(e,r,i);let t=Em(n);if(!t||!e.client||!e.connected)break;i=t.overrides}}finally{n.loading=!1,n.pending=null,n.ownsStateLoading&&=(e.sessionsLoading=!1,!1)}}async function Km(e,t,n){await(async()=>{let r=new Map((e.sessionsResult?.sessions??[]).map(e=>[e.key,e])),i=n?.includeGlobal??e.sessionsIncludeGlobal,a=n?.includeUnknown??e.sessionsIncludeUnknown,o=n?.showArchived??e.sessionsShowArchived,s=o?0:Am(n?.activeMinutes)??km(e.sessionsFilterActive),c=Am(n?.limit)??km(e.sessionsFilterLimit),l={includeGlobal:i,includeUnknown:a,configuredAgentsOnly:n?.configuredAgentsOnly??!0},u=n?.agentId?.trim();u&&(l.agentId=u),s>0&&(l.activeMinutes=s),c>0&&(l.limit=c);let d=typeof n?.offset==`number`&&Number.isFinite(n.offset)?Math.max(0,Math.floor(n.offset)):0;d>0&&(l.offset=d);let f=n?.search?.trim();f&&(l.search=f);let p=await t.request(`sessions.list`,l);if(p){let t=Pm(p,{showArchived:o});e.sessionsResult=n?.append===!0&&d>0&&e.sessionsResult?Fm(e.sessionsResult,t):t,lm(e)&&sd(e,{publishRunStatus:n?.publishChatRunStatus!==!1});let i=new Set(e.sessionsResult.sessions.map(e=>e.key));for(let t of Object.keys(e.sessionsCheckpointItemsByKey))i.has(t)||Rm(e,t);let a=!1;for(let t of e.sessionsResult.sessions)Lm(r.get(t.key))!==Lm(t)&&(Rm(e,t.key),e.sessionsExpandedCheckpointKey===t.key&&(a=!0));let s=e.sessionsExpandedCheckpointKey;s&&i.has(s)&&(a||!e.sessionsCheckpointItemsByKey[s])&&await zm(e,s)}})().catch(t=>{if(!Ut(t)){e.sessionsError=String(t);return}e.sessionsResult=null,e.sessionsError=Wt(`sessions`)})}async function qm(e,t,n){if(!e.client||!e.connected)return;let r={key:t,...dm(t)?{agentId:mm(e)}:{}};for(let e of[`label`,`thinkingLevel`,`fastMode`,`verboseLevel`,`reasoningLevel`])e in n&&(r[e]=n[e]);try{await e.client.request(`sessions.patch`,r),await Gm(e,dm(t)?{agentId:mm(e)}:void 0)}catch(t){e.sessionsError=String(t)}}async function Jm(e,t={},n){if(!e.client||!e.connected||e.sessionsLoading)return null;let r=e.client,i=null;try{await Bm(e,async()=>{let a=await r.request(`sessions.create`,t),o=typeof a?.key==`string`?a.key.trim():``;if(!o)throw Error(`sessions.create returned no key`);i=o,await Gm(e,n)})}catch(t){return e.sessionsError=String(t),null}return i}async function Ym(e,t){if(!e.client||!e.connected||t.length===0)return[];let n=e.client;if(e.sessionsLoading||!window.confirm(`Delete ${t.length} ${t.length===1?`session`:`sessions`}?\n\nThis will delete the session entries and archive their transcripts.`))return[];let r=[],i=[],a=await Bm(e,async()=>{for(let a of t)try{await n.request(`sessions.delete`,{key:a,...dm(a)?{agentId:mm(e)}:{},deleteTranscript:!0}),r.push(a)}catch(e){i.push(String(e))}});return r.length>0&&!a&&await Gm(e,r.some(e=>dm(e))?{agentId:mm(e)}:void 0),i.length>0&&(e.sessionsError=i.join(`; `)),r}async function Xm(e,t){let n=t.trim();if(n){if(e.sessionsExpandedCheckpointKey===n){e.sessionsExpandedCheckpointKey=null;return}e.sessionsExpandedCheckpointKey=n,!e.sessionsCheckpointItemsByKey[n]&&await zm(e,n)}}async function Zm(e,t,n){return(await Vm(e,t,n,`sessions.compaction.branch`,`Create a new child session from this compacted checkpoint?`))?.key??null}async function Qm(e,t,n){await Vm(e,t,n,`sessions.compaction.restore`,`Restore this session to the selected compacted checkpoint?
68
68
 
69
69
  This replaces the current active transcript for the session key.`)}function $m(e,t={}){let n={activeMinutes:0,limit:50,includeGlobal:!0,includeUnknown:!0,configuredAgentsOnly:!0};typeof e.sessionsShowArchived==`boolean`&&(n.showArchived=e.sessionsShowArchived);let r=T(t.search??void 0);r&&(n.search=r);let i=typeof t.offset==`number`&&Number.isFinite(t.offset)?Math.max(0,Math.floor(t.offset)):0;return i>0&&(n.offset=i),t.append===!0&&(n.append=!0),n}function eh(e){return e.chatSending||!!e.chatRunId}function th(e){return e.chatRunId?!0:!!e.sessionsResult?.sessions.some(t=>t.key===e.sessionKey&&Yu(t))}function nh(e){let t=e.trim();if(!t)return!1;let n=E(t);return n===`/stop`?!0:n===`stop`||n===`esc`||n===`abort`||n===`wait`||n===`exit`}function rh(e){let t=e.trim();if(!t)return!1;let n=E(t);return n===`/new`||n===`/reset`?!0:n.startsWith(`/new `)||n.startsWith(`/reset `)}function ih(e){return rh(e)?typeof globalThis.confirm==`function`?globalThis.confirm(`Start a new session? This will reset the current chat.`):!1:!0}function ah(e){return/^\/(?:btw|side)(?::|\s|$)/i.test(e.trim())}function oh(e){return E(e)===`global`}function sh(e){return(e.hello?.snapshot)?.sessionDefaults?.defaultAgentId?.trim()||void 0}function ch(e){return(e.hello?.snapshot)?.sessionDefaults?.mainKey?.trim()||void 0}function lh(e,t){let n=z(t);if(!n)return;let r=E(n.rest),i=E(e.agentsList?.mainKey??ch(e)??`main`);return r===`main`||r===i?B(n.agentId):void 0}function uh(e){let t=e.assistantAgentId?.trim()||e.agentsList?.defaultId?.trim()||sh(e);return t?B(t):void 0}function dh(e,t){return oh(t)?uh(e):lh(e,t)}function fh(e,t,n){if(e.sessionKey!==t){let r=lh(e,e.sessionKey);if(!r||!oh(t))return!1;let i=n??e.agentsList?.defaultId??sh(e);return i?r===B(i):r===B(`main`)}if(!oh(t))return!0;let r=uh(e),i=n??e.agentsList?.defaultId??sh(e);return i?r===B(i):r===void 0}function ph(e,t){let n=oh(t)?uh(e):lh(e,t);return n?{agentId:n}:{}}async function mh(e,t){let n=e.chatRunId,r=()=>{t?.preserveDraft||(e.chatMessage=``,Uu(e))};if(!e.connected&&th(e)){r(),e.pendingAbort={runId:n,sessionKey:e.sessionKey,...ph(e,e.sessionKey)};return}e.connected&&(r(),await im(e))}function hh(e,t,n,r,i){let a=t.trim(),o=!!(n&&n.length>0);if(!a&&!o)return null;let s={id:yt(),text:a,createdAt:Date.now(),attachments:o?Wl(n??[]):void 0,refreshSessions:r,localCommandArgs:i?.args,localCommandName:i?.name,sessionKey:e.sessionKey,agentId:dh(e,e.sessionKey)};return e.chatQueue=[...e.chatQueue,s],s}function gh(e,t,n,r){let i=t.trim(),a=!!(r&&r.length>0);!i&&!a||(e.chatQueue=[...e.chatQueue,{id:yt(),text:i,createdAt:Date.now(),kind:`steered`,attachments:a?Wl(r??[]):void 0,pendingRunId:n}])}function _h(e,t,n,r){let i=t.trim(),a=!!(n&&n.length>0);if(!i&&!a)return null;let o={id:yt(),text:i,createdAt:Date.now(),attachments:a?n:void 0,refreshSessions:r,sendAttempts:0,sendRunId:yt(),sendState:e.connected&&e.client?`sending`:`waiting-reconnect`,sessionKey:e.sessionKey,agentId:dh(e,e.sessionKey)};return e.chatQueue=[...e.chatQueue,o],o}function vh(e,t,n){return xh(e,e.sessionKey,t,n)}function yh(e,t){return t===e.sessionKey?e.chatQueue:e.chatQueueBySession?.[t]??[]}function bh(e,t,n){if(t===e.sessionKey){e.chatQueue=n;return}let r={...e.chatQueueBySession};n.length>0?r[t]=n:delete r[t],e.chatQueueBySession=r,e.requestUpdate?.()}function xh(e,t,n,r){let i=null;return bh(e,t,yh(e,t).map(e=>e.id===n?(i=r(e),i):e)),i}function Sh(e,t,n=e.sessionKey){let r=yh(e,n),i=r.find(e=>e.id===t)??null;return bh(e,n,r.filter(e=>e.id!==t)),i}function Ch(e,t){return e instanceof bt?e.retryable:/gateway (?:not connected|closed)|websocket|disconnected/i.test(t)}function wh(e,t){t.previousDraft!=null&&!e.chatMessage.trim()&&(e.chatMessage=t.previousDraft),t.previousAttachments?.length&&e.chatAttachments.length===0&&(e.chatAttachments=t.previousAttachments)}function Th(e,t,n=e.sessionKey){if(t.sendRunId&&t.sendState)return t;let r=t.sessionKey??n,i=t.agentId??dh(e,r),a={...t,sendAttempts:t.sendAttempts??0,sendRunId:t.sendRunId??yt(),sendState:e.connected&&e.client?`sending`:`waiting-reconnect`,sessionKey:r,agentId:i};return xh(e,r,t.id,()=>a),a}async function Eh(e,t,n,r=e.sessionKey){let i=yh(e,r).find(e=>e.id===t);if(!i||i.pendingRunId||i.localCommandName)return`failed`;let a=Th(e,i,r),o=a.text.trim(),s=a.attachments??[],c=s.length>0;if(!o&&!c)return Sh(e,t,a.sessionKey??e.sessionKey),`sent`;let l=a.sessionKey??e.sessionKey;if(!e.connected||!e.client)return xh(e,l,t,e=>({...e,sendState:`waiting-reconnect`,sendError:void 0})),`pending`;let u=a.sendRunId??yt(),d=Date.now();xh(e,l,t,e=>({...e,sendAttempts:(e.sendAttempts??0)+1,sendError:void 0,sendRunId:u,sendState:`sending`,sessionKey:l,agentId:a.agentId})),e.chatSending=!0;let f=()=>fh(e,l,a.agentId);f()&&(e.lastError=null,ad(e,{clearRunStatus:!0}));try{let n=await Yp(e,{message:o,attachments:c?s:void 0,runId:u,sessionKey:l,agentId:a.agentId});return Sh(e,t,l),f()&&(em(e,o,c?s:void 0,d),n.status===`ok`?(ad(e,{sessionStatus:`done`,runId:n.runId,sessionKey:l,clearLocalRun:!0,clearChatStream:!0,clearToolStream:!0,clearSideResultTerminalRuns:!0,clearRunStatus:!0}),Up(e)):(e.chatRunId=n.runId,e.chatStream=``,e.chatStreamStartedAt=d)),a.refreshSessions&&(n.status===`ok`?Gm(e,{...$m(e)}):e.refreshSessionsAfterChat.add(n.runId)),Jl(Nh(e,s)),`sent`}catch(r){let i=Qf(r);return Ch(r,i)?(xh(e,l,t,e=>({...e,sendError:i,sendState:`waiting-reconnect`})),f()&&(e.lastError=v(`chat.msgSendOnReconnect`)),`pending`):(xh(e,l,t,e=>({...e,sendError:i,sendState:`failed`})),f()&&(e.lastError=i,wh(e,n??{})),`failed`)}finally{e.chatSending=!1}}async function Dh(e,t,n){wl(e),Go(e);let r=n?.queueItemId==null?_h(e,t,n?.attachments,n?.refreshSessions):e.chatQueue.find(e=>e.id===n.queueItemId)??null;if(!r)return!1;let i=r.sessionKey??e.sessionKey,a=await Eh(e,r.id,{previousDraft:n?.previousDraft,previousAttachments:n?.previousAttachments})===`sent`;return a&&e.sessionKey===i&&(vr(e,i),Uu(e)),a&&e.sessionKey===i&&n?.restoreDraft&&n.previousDraft?.trim()&&(e.chatMessage=n.previousDraft),a&&e.sessionKey===i&&n?.restoreAttachments&&n.previousAttachments?.length&&(e.chatAttachments=n.previousAttachments),e.sessionKey===i&&zo(e,!0),a&&e.sessionKey===i&&!e.chatRunId&&Lh(e),a}function Oh(e){let t=Vl(e);return JSON.stringify([e.id,e.mimeType,e.fileName??``,e.sizeBytes??0,t?.length??0,t?.slice(0,64)??``])}function kh(e,t,n,r){return JSON.stringify([t,e.sessionKey,n.trim(),r.map(Oh)])}async function Ah(e,t,n){let r=e.chatSubmitGuards??=new Map;if(r.has(t))return;let i,a=new Promise(e=>{i=e});r.set(t,a);try{return await n()}finally{i(),r.get(t)===a&&r.delete(t)}}function jh(e,t){return e.chatModelSwitchPromises?.[t]||!0}function Mh(e,t,n){let r=e.chatAttachments.length===n.length&&e.chatAttachments.every((e,t)=>Oh(e)===Oh(n[t])),i=e.chatMessage===t&&r,a=i;return i&&(e.chatMessage=``),a&&(e.chatAttachments=[]),(i||a)&&Uu(e),{previousAttachments:a?n:void 0,previousDraft:i?t:void 0}}function Nh(e,t){if(!t?.length)return t?[]:void 0;let n=new Set((e.chatAttachments??[]).map(e=>e.id));return t.filter(e=>!n.has(e.id))}function Ph(e){return e.map(e=>{let t=Vl(e);return{...e,...t?{dataUrl:t}:{}}})}async function Fh(e,t,n){let r=!!await nm(e,t,n?.attachments);return!r&&n?.previousDraft!=null&&(e.chatMessage=n.previousDraft),!r&&n?.previousAttachments&&(e.chatAttachments=n.previousAttachments),r&&(vr(e,e.sessionKey),Kl(Nh(e,n?.attachments))),r}async function Ih(e,t){if(!e.connected||!e.chatRunId)return;let n=e.chatRunId,r=e.chatQueue.find(e=>e.id===t&&!e.pendingRunId&&!e.localCommandName);if(!r)return;let i=r.text.trim(),a=r.attachments??[],o=a.length>0;if(!(!i&&!o)){if(e.chatQueue=e.chatQueue.map(e=>e.id===t?{...e,kind:`steered`,pendingRunId:n}:e),!await rm(e,i,o?a:void 0)){e.chatQueue=e.chatQueue.map(e=>e.id===t?r:e);return}Kl(a),vr(e,e.sessionKey),zo(e)}}async function Lh(e){if(!e.connected||eh(e))return;let t=e.chatQueue.findIndex(t=>!t.pendingRunId&&t.sendState!==`sending`&&t.sendState!==`failed`&&(t.sessionKey==null||t.sessionKey===e.sessionKey));if(t<0)return;let n=e.chatQueue[t],r=!1;try{n.localCommandName?(e.chatQueue=e.chatQueue.filter((e,n)=>n!==t),await qh(e,n.localCommandName,n.localCommandArgs??``),r=!0):r=await Dh(e,n.text,{queueItemId:n.id,attachments:n.attachments,refreshSessions:n.refreshSessions})}catch(t){e.lastError=String(t)}!r&&n.localCommandName?e.chatQueue=[n,...e.chatQueue]:r&&e.chatQueue.length>0&&Lh(e)}function Rh(e,t){let n=e.chatQueue.filter(e=>e.id===t);e.chatQueue=e.chatQueue.filter(e=>e.id!==t);for(let t of n)Kl(Nh(e,t.attachments))}function zh(e,t){if(!t)return;let n=e.chatQueue.filter(e=>e.pendingRunId===t);e.chatQueue=e.chatQueue.filter(e=>e.pendingRunId!==t);for(let t of n)Kl(Nh(e,t.attachments))}function Bh(e){return[e.chatQueue,...Object.values(e.chatQueueBySession??{})]}function Vh(e){return Bh(e).some(e=>e.some(e=>e.sendRunId&&e.sendState===`waiting-reconnect`))}function Hh(e){let t=e=>{let t=!1,n=e.map(e=>!e.sendRunId||e.sendState!==`sending`?e:(t=!0,{...e,sendState:`waiting-reconnect`}));return{changed:t,queue:n}},n=t(e.chatQueue);n.changed&&(e.chatQueue=n.queue);let r=!1,i={...e.chatQueueBySession};for(let[e,n]of Object.entries(i)){let a=t(n);a.changed&&(r=!0,i[e]=a.queue)}r&&(e.chatQueueBySession=i)}async function Uh(e){if(!e.connected||!e.client||e.chatSending)return;let t=[e.sessionKey,...Object.keys(e.chatQueueBySession??{}).filter(t=>t!==e.sessionKey)];for(let n of t){let t=yh(e,n).find(e=>e.sendRunId&&e.sendState===`waiting-reconnect`&&!e.pendingRunId&&!e.localCommandName);if(t&&(await Eh(e,t.id,void 0,n),e.chatRunId))return}e.chatRunId||Lh(e)}async function Wh(e,t){let n=e.chatQueue.find(e=>e.id===t);!n||n.localCommandName||n.pendingRunId||n.sendState===`sending`||(vh(e,t,t=>({...t,sendError:void 0,sendState:e.connected&&e.client?`sending`:`waiting-reconnect`})),await Eh(e,t),e.chatRunId||Lh(e))}async function Gh(e,t,n){let r=e.chatMessage,i=(t??e.chatMessage).trim(),a=e.sessionKey,o=e.chatAttachments??[],s=t==null?Ph(o):[],c=s.length>0;if(!i&&!c||t!=null&&n?.confirmReset&&!ih(i))return;if(nh(i)){t??Hu(e,i),await mh(e);return}if(ah(i)){await Ah(e,kh(e,`btw`,i,s),async()=>{let n=jh(e,a);if(n!==!0&&!await n||e.sessionKey!==a)return;let o=t==null?Mh(e,r,s):{};t??Hu(e,i),await Fh(e,i,{previousDraft:o.previousDraft,attachments:c?s:void 0,previousAttachments:o.previousAttachments})});return}let l=gf(i);if(l?.command.executeLocal){if(eh(e)&&Kh(l.command.key)){t??(Hu(e,i),e.chatMessage=``,e.chatAttachments=[],Uu(e)),hh(e,i,void 0,rh(i),{args:l.args,name:l.command.key});return}let a=t==null?r:void 0;t??(Hu(e,i),e.chatMessage=``,e.chatAttachments=[],Uu(e)),await qh(e,l.command.key,l.args,{previousDraft:a,restoreDraft:!!(t&&n?.restoreDraft)});return}let u=rh(i);await Ah(e,kh(e,`message`,i,s),async()=>{let o=jh(e,a);if(o!==!0&&!await o||e.sessionKey!==a)return;let l=t==null?Mh(e,r,s):{};if(eh(e)){t??Hu(e,i),hh(e,i,s,u);return}await Dh(e,i,{previousDraft:l.previousDraft,restoreDraft:!!(t&&n?.restoreDraft),attachments:c?s:void 0,previousAttachments:l.previousAttachments,restoreAttachments:!!(t&&n?.restoreDraft),refreshSessions:u})})}function Kh(e){return![`stop`,`focus`,`export-session`,`steer`,`redirect`,`new`].includes(e)}async function qh(e,t,n,r){switch(t){case`stop`:await mh(e);return;case`new`:if(!e.onSlashAction){e.lastError=v(`chat.newChatUnavailable`);return}await e.onSlashAction(`new-session`);return;case`reset`:await Dh(e,`/reset`,{refreshSessions:!0,previousDraft:r?.previousDraft,restoreDraft:r?.restoreDraft});return;case`clear`:await Jh(e);return;case`focus`:await e.onSlashAction?.(`toggle-focus`);return;case`export-session`:await e.onSlashAction?.(`export`);return}if(!e.client||!e.connected){e.lastError=v(`chat.gatewayNotConnected`),Yh(e,`Cannot run \`/${t}\`: Control UI is not connected to the Gateway.`),zo(e);return}let i=e.sessionKey,a;try{a=await yf(e.client,i,t,n,{chatModelCatalog:e.chatModelCatalog,sessionsResult:e.sessionsResult,agentId:dh(e,i)})}catch(n){e.lastError=String(n),Yh(e,`Command \`/${t}\` failed unexpectedly.`),zo(e);return}a.content&&Yh(e,a.content),a.trackRunId&&(e.chatRunId=a.trackRunId,e.chatStream=``,e.chatSending=!1),a.pendingCurrentRun&&e.chatRunId&&gh(e,`/${t} ${n}`.trim(),e.chatRunId),a.sessionPatch&&`modelOverride`in a.sessionPatch&&(e.chatModelOverrides={...e.chatModelOverrides,[i]:a.sessionPatch.modelOverride??null},await e.onSlashAction?.(`refresh-tools-effective`)),a.action===`refresh`&&await Xh(e),zo(e)}async function Jh(e){if(!e.client||!e.connected)return;let t=th(e);try{await e.client.request(`sessions.reset`,{key:e.sessionKey,...ph(e,e.sessionKey)}),e.chatMessages=[],e.chatSideResult=null,ad(e,{outcome:t?`interrupted`:void 0,sessionStatus:`killed`,runId:e.chatRunId,sessionKey:e.sessionKey,clearLocalRun:!0,clearChatStream:!0,clearToolStream:!0,clearSideResultTerminalRuns:!0,clearRunStatus:!t}),await Up(e)}catch(t){e.lastError=String(t)}zo(e)}function Yh(e,t){e.chatMessages=[...e.chatMessages,{role:`system`,content:t,timestamp:Date.now()}]}async function Xh(e,t){let n=()=>e.requestUpdate?.(),r=Up(e).finally(()=>{t?.scheduleScroll!==!1&&zo(e),n()});if(Promise.allSettled([Gm(e,{...$m(e),...ph(e,e.sessionKey)}),fg(e),Zh(e),Qh(e)]).finally(n),t?.awaitHistory===!0){await r;return}await Promise.resolve()}async function Zh(e){if(!e.client||!e.connected){e.chatModelsLoading=!1,e.chatModelCatalog=[];return}e.chatModelsLoading=!0;try{e.chatModelCatalog=await om(e.client)}finally{e.chatModelsLoading=!1}}async function Qh(e){await uf({client:e.client,agentId:ig(e)})}var $h=Lh,eg=new WeakMap,tg=new WeakMap;function ng(e){let t=e,n=(eg.get(t)??0)+1;return eg.set(t,n),n}function rg(e,t,n){return eg.get(e)===t&&e.sessionKey===n}function ig(e){let t=z(e.sessionKey);return t?.agentId?t.agentId:sh(e)||`main`}function ag(e,t){let n=fi(e),r=encodeURIComponent(t);return n?`${n}/avatar/${r}?meta=1`:`/avatar/${r}?meta=1`}function og(e){let t=e,n=tg.get(t);n&&(URL.revokeObjectURL(n),tg.delete(t)),e.chatAvatarUrl=null}function sg(e){og(e),e.chatAvatarSource=null,e.chatAvatarStatus=null,e.chatAvatarReason=null}function cg(e,t){let n=e,r=tg.get(n);r&&r!==t&&(URL.revokeObjectURL(r),tg.delete(n)),t?.startsWith(`blob:`)&&tg.set(n,t),e.chatAvatarUrl=t}function lg(e,t){let n=t.avatarStatus===`none`||t.avatarStatus===`local`||t.avatarStatus===`remote`||t.avatarStatus===`data`?t.avatarStatus:null;e.chatAvatarSource=typeof t.avatarSource==`string`&&t.avatarSource.trim()?t.avatarSource.trim():null,e.chatAvatarStatus=n,e.chatAvatarReason=typeof t.avatarReason==`string`&&t.avatarReason.trim()?t.avatarReason.trim():null}function ug(e){return e?{Authorization:e}:void 0}function dg(e){return e.startsWith(`/`)}async function fg(e){if(!e.connected){sg(e);return}let t=e.sessionKey,n=ng(e),r=ig(e);if(!r){rg(e,n,t)&&sg(e);return}sg(e);let i=ug(tp(e)),a=ag(e.basePath,r);try{let r=await fetch(a,{method:`GET`,...i?{headers:i}:{}});if(!rg(e,n,t))return;if(!r.ok){sg(e);return}let o=await r.json();if(!rg(e,n,t))return;lg(e,o);let s=typeof o.avatarUrl==`string`?o.avatarUrl.trim():``;if(!s||!va(s)){og(e);return}if(!dg(s)){cg(e,s);return}let c=await fetch(s,{method:`GET`,...i?{headers:i}:{}});if(!c.ok){rg(e,n,t)&&og(e);return}let l=URL.createObjectURL(await c.blob());if(!rg(e,n,t)){URL.revokeObjectURL(l);return}cg(e,l)}catch{rg(e,n,t)&&sg(e)}}var pg={trace:!0,debug:!0,info:!0,warn:!0,error:!0,fatal:!0},mg={activeMinutes:`120`,limit:`200`},hg={name:``,description:``,agentId:``,sessionKey:``,clearAgent:!1,enabled:!0,deleteAfterRun:!0,scheduleKind:`every`,scheduleAt:``,everyAmount:`30`,everyUnit:`minutes`,cronExpr:`0 7 * * *`,cronTz:``,scheduleExact:!1,staggerAmount:``,staggerUnit:`seconds`,sessionTarget:`isolated`,wakeMode:`now`,payloadKind:`agentTurn`,payloadText:``,payloadModel:``,payloadThinking:``,payloadLightContext:!1,deliveryMode:`announce`,deliveryChannel:`last`,deliveryTo:``,deliveryAccountId:``,deliveryBestEffort:!1,failureAlertMode:`inherit`,failureAlertAfter:`2`,failureAlertCooldownSeconds:`3600`,failureAlertChannel:`last`,failureAlertTo:``,failureAlertDeliveryMode:`announce`,failureAlertAccountId:``,timeoutSeconds:``},gg=`operator`,_g=`operator.admin`,vg=`operator.read`,yg=`operator.write`,bg=`operator.`;function xg(e){let t=new Set;for(let n of e){let e=n.trim();e&&t.add(e)}return[...t]}function Sg(e,t){return e.startsWith(bg)?t.has(_g)?!0:e===vg?t.has(vg)||t.has(yg):e===yg?t.has(yg):t.has(e):!1}function Cg(e){let t=xg(e.requestedScopes);if(t.length===0)return!0;let n=xg(e.allowedScopes);if(n.length===0)return!1;let r=new Set(n);if(e.role.trim()!==gg){let n=`${e.role.trim()}.`;return t.every(e=>e.startsWith(n)&&r.has(e))}return t.every(e=>Sg(e,r))}async function wg(e){if(!(!e.client||!e.connected)&&!e.debugLoading){e.debugLoading=!0;try{let[t,n,r,i]=await Promise.all([e.client.request(`status`,{}),e.client.request(`health`,{}),e.client.request(`models.list`,{}),e.client.request(`last-heartbeat`,{})]);e.debugStatus=t,e.debugHealth=n;let a=r;e.debugModels=Array.isArray(a?.models)?a?.models:[],e.debugHeartbeat=i}catch(t){e.debugCallError=String(t)}finally{e.debugLoading=!1}}}async function Tg(e){if(!(!e.client||!e.connected)){e.debugCallError=null,e.debugCallResult=null;try{let t=e.debugCallParams.trim()?JSON.parse(e.debugCallParams):{},n=await e.client.request(e.debugCallMethod.trim(),t);e.debugCallResult=JSON.stringify(n,null,2)}catch(t){e.debugCallError=String(t)}}}var Eg=`\\x1b\\[[\\x20-\\x3f]*[\\x40-\\x7e]`,Dg=`\\x1b\\][^\\x07\\x1b]*(?:\\x1b\\\\|\\x07)`,Og=new RegExp(Eg,`g`),kg=new RegExp(Dg,`g`);typeof Intl<`u`&&`Segmenter`in Intl&&new Intl.Segmenter(void 0,{granularity:`grapheme`});function Ag(e){return e.replace(kg,``).replace(Og,``)}var jg=new Set([`trace`,`debug`,`info`,`warn`,`error`,`fatal`]);function Mg(e){return Ag(e)}function Ng(e){if(typeof e!=`string`)return null;let t=e.trim();if(!t.startsWith(`{`)||!t.endsWith(`}`))return null;try{let e=JSON.parse(t);return e&&typeof e==`object`?e:null}catch{return null}}function Pg(e){if(typeof e!=`string`)return null;let t=E(e);return jg.has(t)?t:null}function Fg(e){if(!e.trim())return{raw:e,message:e};try{let t=JSON.parse(e),n=t&&typeof t._meta==`object`&&t._meta!==null?t._meta:null,r=typeof t.time==`string`?t.time:typeof n?.date==`string`?n?.date:null,i=Pg(n?.logLevelName??n?.level),a=typeof t[0]==`string`?t[0]:typeof n?.name==`string`?n?.name:null,o=Ng(a),s=typeof o?.subsystem==`string`?o.subsystem:typeof o?.module==`string`?o.module:null;!s&&a&&a.length<120&&(s=a);let c=typeof t[1]==`string`?t[1]:typeof t[2]==`string`?t[2]:!o&&typeof t[0]==`string`?t[0]:typeof t.message==`string`?t.message:e;return{raw:e,time:r,level:i,subsystem:s&&Mg(s),message:Mg(c),meta:n??void 0}}catch{return{raw:e,message:Mg(e)}}}async function Ig(e,t){let n=t?.quiet===!0;if(!(!e.client||!e.connected||e.logsLoading&&!n)){n||(e.logsLoading=!0),e.logsError=null;try{let n=await e.client.request(`logs.tail`,{cursor:t?.reset?void 0:e.logsCursor??void 0,limit:e.logsLimit,maxBytes:e.logsMaxBytes}),r=(Array.isArray(n.lines)?n.lines.filter(e=>typeof e==`string`):[]).map(Fg);e.logsEntries=t?.reset||n.reset||e.logsCursor==null?r:[...e.logsEntries,...r].slice(-2e3),e.logsCursor=typeof n.cursor==`number`?n.cursor:e.logsCursor,e.logsFile=typeof n.file==`string`?n.file:e.logsFile,e.logsTruncated=!!n.truncated,e.logsLastFetchAt=Date.now()}catch(t){Ut(t)?(e.logsEntries=[],e.logsError=Wt(`logs`)):e.logsError=String(t)}finally{n||(e.logsLoading=!1)}}}async function Lg(e,t){if(!(!e.client||!e.connected)&&!e.nodesLoading){e.nodesLoading=!0,t?.quiet||(e.lastError=null);try{let t=await e.client.request(`node.list`,{});e.nodes=Array.isArray(t.nodes)?t.nodes:[]}catch(n){t?.quiet||(e.lastError=String(n))}finally{e.nodesLoading=!1}}}var Rg=3e4;function zg(e){e.nodesPollInterval??=window.setInterval(()=>{e.tab===`nodes`&&Lg(e,{quiet:!0})},Rg)}function Bg(e){e.nodesPollInterval!=null&&(clearInterval(e.nodesPollInterval),e.nodesPollInterval=null)}function Vg(e){e.logsPollInterval??=window.setInterval(()=>{e.tab===`logs`&&Ig(e,{quiet:!0})},2e3)}function Hg(e){e.logsPollInterval!=null&&(clearInterval(e.logsPollInterval),e.logsPollInterval=null)}function Ug(e){e.debugPollInterval??=window.setInterval(()=>{e.tab===`debug`&&wg(e)},3e3)}function Wg(e){e.debugPollInterval!=null&&(clearInterval(e.debugPollInterval),e.debugPollInterval=null)}var Gg=250,Kg=1e3,qg=16,Jg=50,Yg=50,Xg=50,Zg=50;function Qg(){return typeof performance<`u`&&typeof performance.now==`function`?performance.now():Date.now()}function $g(e){return Math.max(0,Math.round(e))}function e_(e){if(typeof queueMicrotask==`function`){queueMicrotask(e);return}Promise.resolve().then(e)}function t_(e){let t=typeof window<`u`&&typeof window.requestAnimationFrame==`function`?window.requestAnimationFrame.bind(window):null;if(!t){e_(e);return}t(()=>t(e))}function n_(e,t,n){let r=n?console.warn:console.debug;typeof r==`function`&&r(`[fengming] ${e}`,t)}function r_(e,t,n,r){let i={ts:Date.now(),event:t,payload:n};Array.isArray(e.eventLogBuffer)&&(e.eventLogBuffer=[i,...typeof r?.maxBufferedEventsForType==`number`?i_(e.eventLogBuffer,t,Math.max(0,r.maxBufferedEventsForType-1)):e.eventLogBuffer].slice(0,Gg),(e.tab===`debug`||e.tab===`overview`)&&(e.eventLog=e.eventLogBuffer)),r?.console!==!1&&n_(t,n,r?.warn===!0)}function i_(e,t,n){let r=0;return e.filter(e=>!e||typeof e!=`object`||!(`event`in e)||e.event!==t?!0:(r+=1,r<=n))}function a_(e,t,n){let r=(e.controlUiTabPaintSeq??0)+1;e.controlUiTabPaintSeq=r;let i=Qg();e.requestUpdate?.();let a=()=>{e.isConnected===!1||e.controlUiTabPaintSeq!==r||e.tab!==n||r_(e,`control-ui.tab.visible`,{previousTab:t,tab:n,durationMs:$g(Qg()-i)})};Promise.resolve(e.updateComplete).catch(()=>void 0).then(()=>t_(a))}function o_(e,t){let n=(e.controlUiRefreshSeq??0)+1;e.controlUiRefreshSeq=n;let r={seq:n,tab:t,startedAtMs:Qg()};return r_(e,`control-ui.refresh`,{tab:t,phase:`start`},{console:!1}),r}function s_(e,t){return e.controlUiRefreshSeq===t.seq&&e.tab===t.tab}function c_(e,t,n){s_(e,t)&&r_(e,`control-ui.refresh`,{tab:t.tab,phase:`end`,status:n,durationMs:$g(Qg()-t.startedAtMs)},{console:!1})}function l_(e,t){let n=$g(t.durationMs),r=!t.ok||n>=Kg;r_(e,`control-ui.rpc`,{id:t.id,method:t.method,ok:t.ok,durationMs:n,slow:n>=Kg,errorCode:t.errorCode},{warn:r})}function u_(e,t,n){let r=typeof n.durationMs==`number`?$g(n.durationMs):void 0;r==null||r<qg||e_(()=>{r_(e,`control-ui.render`,{surface:t,...n,durationMs:r,slow:!0},{warn:r>=Jg,maxBufferedEventsForType:Zg})})}function d_(){let e=globalThis.PerformanceObserver;return typeof e==`function`?e:null}function f_(e){if(e)try{return new URL(e,globalThis.location?.href).pathname}catch{return e.split(/[?#]/,1)[0]}}function p_(e){if(!Array.isArray(e)||e.length===0)return;let t;for(let n of e)(!t||(n.duration??0)>(t.duration??0))&&(t=n);if(t)return{durationMs:$g(t.duration??0),invoker:t.invoker,sourceUrl:f_(t.sourceURL),sourceFunctionName:t.sourceFunctionName}}function m_(e,t,n){let r=$g(n.duration);r<Yg||r_(e,`control-ui.${t}`,{tab:e.tab,name:n.name,startTimeMs:$g(n.startTime),durationMs:r,blockingDurationMs:typeof n.blockingDuration==`number`?$g(n.blockingDuration):void 0,scriptCount:Array.isArray(n.scripts)?n.scripts.length:void 0,topScript:p_(n.scripts)},{warn:!0,maxBufferedEventsForType:Xg})}function h_(e){let t=d_(),n=t?.supportedEntryTypes??[],r=n.includes(`long-animation-frame`)?`long-animation-frame`:n.includes(`longtask`)?`longtask`:null;if(!t||!r)return null;let i=new t(t=>{for(let n of t.getEntries())m_(e,r,n)});try{i.observe({type:r,buffered:!0})}catch{return null}return i}function g_(e,t){if(!e)return e;let n=e.files.some(e=>e.name===t.name)?e.files.map(e=>e.name===t.name?t:e):[...e.files,t];return{...e,files:n}}async function __(e,t){if(!(!e.client||!e.connected||e.agentFilesLoading)){e.agentFilesLoading=!0,e.agentFilesError=null;try{let n=await e.client.request(`agents.files.list`,{agentId:t});n&&(e.agentFilesList=n,e.agentFileActive&&!n.files.some(t=>t.name===e.agentFileActive)&&(e.agentFileActive=null))}catch(t){e.agentFilesError=String(t)}finally{e.agentFilesLoading=!1}}}async function v_(e,t,n,r){if(!(!e.client||!e.connected||e.agentFilesLoading)&&!(!r?.force&&Object.hasOwn(e.agentFileContents,n))){e.agentFilesLoading=!0,e.agentFilesError=null;try{let i=await e.client.request(`agents.files.get`,{agentId:t,name:n});if(i?.file){let t=i.file.content??``,a=e.agentFileContents[n]??``,o=e.agentFileDrafts[n],s=r?.preserveDraft??!0;e.agentFilesList=g_(e.agentFilesList,i.file),e.agentFileContents={...e.agentFileContents,[n]:t},(!s||!Object.hasOwn(e.agentFileDrafts,n)||o===a)&&(e.agentFileDrafts={...e.agentFileDrafts,[n]:t})}}catch(t){e.agentFilesError=String(t)}finally{e.agentFilesLoading=!1}}}async function y_(e,t,n,r){if(!(!e.client||!e.connected||e.agentFileSaving)){e.agentFileSaving=!0,e.agentFilesError=null;try{let i=await e.client.request(`agents.files.set`,{agentId:t,name:n,content:r});i?.file&&(e.agentFilesList=g_(e.agentFilesList,i.file),e.agentFileContents={...e.agentFileContents,[n]:r},e.agentFileDrafts={...e.agentFileDrafts,[n]:r})}catch(t){e.agentFilesError=String(t)}finally{e.agentFileSaving=!1}}}async function b_(e,t){if(!(!e.client||!e.connected||e.agentIdentityLoading)&&!e.agentIdentityById[t]){e.agentIdentityLoading=!0,e.agentIdentityError=null;try{let n=await e.client.request(`agent.identity.get`,{agentId:t});n&&(e.agentIdentityById={...e.agentIdentityById,[t]:n})}catch(t){e.agentIdentityError=String(t)}finally{e.agentIdentityLoading=!1}}}async function x_(e,t){if(!e.client||!e.connected||e.agentIdentityLoading)return;let n=t.filter(t=>!e.agentIdentityById[t]);if(n.length!==0){e.agentIdentityLoading=!0,e.agentIdentityError=null;try{for(let t of n){let n=await e.client.request(`agent.identity.get`,{agentId:t});n&&(e.agentIdentityById={...e.agentIdentityById,[t]:n})}}catch(t){e.agentIdentityError=String(t)}finally{e.agentIdentityLoading=!1}}}async function S_(e,t){if(!(!e.client||!e.connected)&&!e.agentSkillsLoading){e.agentSkillsLoading=!0,e.agentSkillsError=null;try{let n=await e.client.request(`skills.status`,{agentId:t});n&&(e.agentSkillsReport=n,e.agentSkillsAgentId=t)}catch(t){e.agentSkillsError=String(t)}finally{e.agentSkillsLoading=!1}}}function C_(e,t){return!!(e.agentsSelectedId&&e.agentsSelectedId!==t)}function w_(e,t){return Ut(e)?Wt(t):String(e)}async function T_(e){if(!(!e.client||!e.connected||e.agentsLoading)){e.agentsLoading=!0,e.agentsError=null;try{let t=await e.client.request(`agents.list`,{});if(t){e.agentsList=t;let n=e.agentsSelectedId;(!n||!t.agents.some(e=>e.id===n))&&(e.agentsSelectedId=t.defaultId??t.agents[0]?.id??null)}}catch(t){Ut(t)?(e.agentsList=null,e.agentsError=Wt(`agent list`)):e.agentsError=String(t)}finally{e.agentsLoading=!1}}}async function E_(e,t){let n=t.trim();if(!e.client||!e.connected||!n||e.toolsCatalogLoading&&e.toolsCatalogLoadingAgentId===n)return;let r=()=>e.toolsCatalogLoadingAgentId!==n||C_(e,n);e.toolsCatalogLoading=!0,e.toolsCatalogLoadingAgentId=n,e.toolsCatalogError=null,e.toolsCatalogResult=null;try{let t=await e.client.request(`tools.catalog`,{agentId:n,includePlugins:!0});if(r())return;e.toolsCatalogResult=t}catch(t){if(r())return;e.toolsCatalogError=w_(t,`tools catalog`)}finally{e.toolsCatalogLoadingAgentId===n&&(e.toolsCatalogLoadingAgentId=null,e.toolsCatalogLoading=!1)}}async function D_(e,t){let n=t.agentId.trim(),r=t.sessionKey.trim(),i=k_(e,{agentId:n,sessionKey:r});if(!e.client||!e.connected||!n||!r||e.toolsEffectiveLoading&&e.toolsEffectiveLoadingKey===i)return;let a=()=>e.toolsEffectiveLoadingKey!==i||C_(e,n);e.toolsEffectiveLoading=!0,e.toolsEffectiveLoadingKey=i,e.toolsEffectiveResultKey=null,e.toolsEffectiveError=null,e.toolsEffectiveResult=null;try{let t=await e.client.request(`tools.effective`,{agentId:n,sessionKey:r});if(a())return;e.toolsEffectiveResultKey=i,e.toolsEffectiveResult=t}catch(t){if(a())return;e.toolsEffectiveError=w_(t,`effective tools`)}finally{e.toolsEffectiveLoadingKey===i&&(e.toolsEffectiveLoadingKey=null,e.toolsEffectiveLoading=!1)}}function O_(e){e.toolsEffectiveResult=null,e.toolsEffectiveResultKey=null,e.toolsEffectiveError=null,e.toolsEffectiveLoading=!1,e.toolsEffectiveLoadingKey=null}function k_(e,t){let n=t.agentId.trim(),r=t.sessionKey.trim();return`${n}:${r}:model=${j_(e,r)||`(default)`}`}function A_(e){let t=e.sessionKey?.trim();if(!t||e.agentsPanel!==`tools`||!e.agentsSelectedId)return;let n=Xc(t);if(!(!n||e.agentsSelectedId!==n))return D_(e,{agentId:n,sessionKey:t})}function j_(e,t){let n=t.trim();if(!n)return``;let r=e.chatModelCatalog??[],i=e.chatModelOverrides?.[n],a=e.sessionsResult?.defaults,o=na(a?.model,a?.modelProvider,r);if(i===null)return o;if(i)return Qi(i,r);let s=e.sessionsResult?.sessions?.find(e=>e.key===n);return s?.model?na(s.model,s.modelProvider,r):o}async function M_(e){let t=e.agentsSelectedId;await er(e),await T_(e),t&&e.agentsList?.agents.some(e=>e.id===t)&&(e.agentsSelectedId=t)}function N_(e){return!!(e&&typeof e==`object`)}function P_(e){return N_(e)?e.kind===`systemEvent`?typeof e.text==`string`:e.kind===`agentTurn`?typeof e.message==`string`:!1:!1}function F_(e){let t=e.payload;return P_(t)?t:null}function I_(e){return F_(e)!==null}function L_(e){return e.state?.lastRunStatus??e.state?.lastStatus??`unknown`}var R_=`last`;function z_(e){return e.sessionTarget!==`main`&&e.payloadKind===`agentTurn`}function B_(e){return e.deliveryMode!==`announce`||z_(e)?e:{...e,deliveryMode:`none`}}function V_(e){let t={};if(e.name.trim()||(t.name=`cron.errors.nameRequired`),e.scheduleKind===`at`){let n=Date.parse(e.scheduleAt);Number.isFinite(n)||(t.scheduleAt=`cron.errors.scheduleAtInvalid`)}else if(e.scheduleKind===`every`)xc(e.everyAmount,0)<=0&&(t.everyAmount=`cron.errors.everyAmountInvalid`);else if(e.cronExpr.trim()||(t.cronExpr=`cron.errors.cronExprRequired`),!e.scheduleExact){let n=e.staggerAmount.trim();n&&xc(n,0)<=0&&(t.staggerAmount=`cron.errors.staggerAmountInvalid`)}if(e.payloadText.trim()||(t.payloadText=e.payloadKind===`systemEvent`?`cron.errors.systemTextRequired`:`cron.errors.agentMessageRequired`),e.payloadKind===`agentTurn`){let n=e.timeoutSeconds.trim();n&&xc(n,0)<=0&&(t.timeoutSeconds=`cron.errors.timeoutInvalid`)}if(e.deliveryMode===`webhook`){let n=e.deliveryTo.trim();n?/^https?:\/\//i.test(n)||(t.deliveryTo=`cron.errors.webhookUrlInvalid`):t.deliveryTo=`cron.errors.webhookUrlRequired`}if(e.failureAlertMode===`custom`){let n=e.failureAlertAfter.trim();if(n){let e=xc(n,0);(!Number.isFinite(e)||e<=0)&&(t.failureAlertAfter=`Failure alert threshold must be greater than 0.`)}let r=e.failureAlertCooldownSeconds.trim();if(r){let e=xc(r,-1);(!Number.isFinite(e)||e<0)&&(t.failureAlertCooldownSeconds=`Cooldown must be 0 or greater.`)}}return t}function H_(e){return Object.keys(e).length>0}async function U_(e){if(!(!e.client||!e.connected))try{e.cronStatus=await e.client.request(`cron.status`,{})}catch(t){Ut(t)?(e.cronStatus=null,e.cronError=Wt(`cron status`)):e.cronError=String(t)}}async function W_(e,t){let n=e.client;if(!(!n||!e.connected||e.cronBusy)){e.cronBusy=!0,e.cronError=null;try{await t(n)}catch(t){e.cronError=String(t)}finally{e.cronBusy=!1}}}function G_(e){let t=typeof e.totalRaw==`number`&&Number.isFinite(e.totalRaw)?Math.max(0,Math.floor(e.totalRaw)):e.pageCount,n=typeof e.offsetRaw==`number`&&Number.isFinite(e.offsetRaw)?Math.max(0,Math.floor(e.offsetRaw)):0,r=typeof e.hasMoreRaw==`boolean`?e.hasMoreRaw:n+e.pageCount<Math.max(t,n+e.pageCount);return{total:t,hasMore:r,nextOffset:typeof e.nextOffsetRaw==`number`&&Number.isFinite(e.nextOffsetRaw)?Math.max(0,Math.floor(e.nextOffsetRaw)):r?n+e.pageCount:null}}async function K_(e){if(!e.cronJobsReloadPending)return;let t=e.cronJobsReloadPendingTableFilters;e.cronJobsReloadPending=!1,e.cronJobsReloadPendingTableFilters=!1,await q_(e,{tableFilters:t})}async function q_(e,t){if(!e.client||!e.connected)return;let n=t?.append===!0;if(e.cronLoading||e.cronJobsLoadingMore){n||(e.cronJobsReloadPending=!0,e.cronJobsReloadPendingTableFilters=t?.tableFilters===!0);return}if(!(n&&!e.cronJobsHasMore)){n?e.cronJobsLoadingMore=!0:e.cronLoading=!0,e.cronError=null;try{let r=n?Math.max(0,e.cronJobsNextOffset??e.cronJobs.length):0,i=await e.client.request(`cron.list`,{includeDisabled:e.cronJobsEnabledFilter===`all`,limit:e.cronJobsLimit,offset:r,query:e.cronJobsQuery.trim()||void 0,enabled:e.cronJobsEnabledFilter,...t?.tableFilters?{scheduleKind:e.cronJobsScheduleKindFilter,lastRunStatus:e.cronJobsLastStatusFilter}:{},sortBy:e.cronJobsSortBy,sortDir:e.cronJobsSortDir}),a=Array.isArray(i.jobs)?i.jobs:[],o=a.filter(I_);e.cronJobs=n?[...e.cronJobs,...o]:o;let s=G_({totalRaw:i.total,offsetRaw:i.offset,nextOffsetRaw:i.nextOffset,hasMoreRaw:i.hasMore,pageCount:a.length});e.cronJobsTotal=Math.max(s.total,e.cronJobs.length),e.cronJobsHasMore=s.hasMore,e.cronJobsNextOffset=s.nextOffset,e.cronEditingJobId&&!e.cronJobs.some(t=>t.id===e.cronEditingJobId)&&Z_(e)}catch(t){e.cronError=String(t)}finally{n?e.cronJobsLoadingMore=!1:e.cronLoading=!1,await K_(e)}}}function J_(e,t){typeof t.cronJobsQuery==`string`&&(e.cronJobsQuery=t.cronJobsQuery),e.cronJobsEnabledFilter=t.cronJobsEnabledFilter??e.cronJobsEnabledFilter,e.cronJobsScheduleKindFilter=t.cronJobsScheduleKindFilter??e.cronJobsScheduleKindFilter,e.cronJobsLastStatusFilter=t.cronJobsLastStatusFilter??e.cronJobsLastStatusFilter,e.cronJobsSortBy=t.cronJobsSortBy??e.cronJobsSortBy,e.cronJobsSortDir=t.cronJobsSortDir??e.cronJobsSortDir}function Y_(e){return e.cronJobs.filter(t=>{let n=X_(t);return!(!n||e.cronJobsScheduleKindFilter!==`all`&&n!==e.cronJobsScheduleKindFilter||e.cronJobsLastStatusFilter!==`all`&&L_(t)!==e.cronJobsLastStatusFilter)})}function X_(e){let t=e.schedule?.kind;return t===`at`||t===`every`||t===`cron`?t:null}function Z_(e){e.cronEditingJobId=null}function Q_(e){e.cronRuns=[],e.cronRunsTotal=0,e.cronRunsHasMore=!1,e.cronRunsNextOffset=null}function $_(e){e.cronForm={...hg},e.cronFieldErrors=V_(e.cronForm)}function ev(e){let t=Date.parse(e);if(!Number.isFinite(t))return``;let n=new Date(t);return`${n.getFullYear()}-${String(n.getMonth()+1).padStart(2,`0`)}-${String(n.getDate()).padStart(2,`0`)}T${String(n.getHours()).padStart(2,`0`)}:${String(n.getMinutes()).padStart(2,`0`)}`}function tv(e){if(e%864e5==0)return{everyAmount:String(Math.max(1,e/864e5)),everyUnit:`days`};if(e%36e5==0)return{everyAmount:String(Math.max(1,e/36e5)),everyUnit:`hours`};let t=Math.max(1,Math.ceil(e/6e4));return{everyAmount:String(t),everyUnit:`minutes`}}function nv(e){return e===0?{scheduleExact:!0,staggerAmount:``,staggerUnit:`seconds`}:typeof e!=`number`||!Number.isFinite(e)||e<0?{scheduleExact:!1,staggerAmount:``,staggerUnit:`seconds`}:e%6e4==0?{scheduleExact:!1,staggerAmount:String(Math.max(1,e/6e4)),staggerUnit:`minutes`}:{scheduleExact:!1,staggerAmount:String(Math.max(1,Math.ceil(e/1e3))),staggerUnit:`seconds`}}function rv(e,t){let n=e.failureAlert,r=F_(e),i={...t,name:e.name,description:e.description??``,agentId:e.agentId??``,sessionKey:e.sessionKey??``,clearAgent:!1,enabled:e.enabled,deleteAfterRun:e.deleteAfterRun??!1,scheduleKind:e.schedule.kind,scheduleAt:``,everyAmount:t.everyAmount,everyUnit:t.everyUnit,cronExpr:t.cronExpr,cronTz:``,scheduleExact:!1,staggerAmount:``,staggerUnit:`seconds`,sessionTarget:e.sessionTarget,wakeMode:e.wakeMode,payloadKind:r?.kind??hg.payloadKind,payloadText:r?.kind===`systemEvent`?r.text:r?.message??``,payloadModel:r?.kind===`agentTurn`?r.model??``:``,payloadThinking:r?.kind===`agentTurn`?r.thinking??``:``,payloadLightContext:r?.kind===`agentTurn`?r.lightContext===!0:!1,deliveryMode:e.delivery?.mode??`none`,deliveryChannel:e.delivery?.channel??`last`,deliveryTo:e.delivery?.to??``,deliveryAccountId:e.delivery?.accountId??``,deliveryBestEffort:e.delivery?.bestEffort??!1,failureAlertMode:n===!1?`disabled`:n&&typeof n==`object`?`custom`:`inherit`,failureAlertAfter:n&&typeof n==`object`&&typeof n.after==`number`?String(n.after):hg.failureAlertAfter,failureAlertCooldownSeconds:n&&typeof n==`object`&&typeof n.cooldownMs==`number`?String(Math.floor(n.cooldownMs/1e3)):hg.failureAlertCooldownSeconds,failureAlertChannel:n&&typeof n==`object`?n.channel??`last`:R_,failureAlertTo:n&&typeof n==`object`?n.to??``:``,failureAlertDeliveryMode:n&&typeof n==`object`?n.mode??`announce`:`announce`,failureAlertAccountId:n&&typeof n==`object`?n.accountId??``:``,timeoutSeconds:r?.kind===`agentTurn`&&typeof r.timeoutSeconds==`number`?String(r.timeoutSeconds):``};if(e.schedule.kind===`at`)i.scheduleAt=ev(e.schedule.at);else if(e.schedule.kind===`every`){let t=tv(e.schedule.everyMs);i.everyAmount=t.everyAmount,i.everyUnit=t.everyUnit}else{i.cronExpr=e.schedule.expr,i.cronTz=e.schedule.tz??``;let t=nv(e.schedule.staggerMs);i.scheduleExact=t.scheduleExact,i.staggerAmount=t.staggerAmount,i.staggerUnit=t.staggerUnit}return B_(i)}function iv(e){if(e.scheduleKind===`at`){let t=Date.parse(e.scheduleAt);if(!Number.isFinite(t))throw Error(v(`cron.errors.invalidRunTime`));return{kind:`at`,at:new Date(t).toISOString()}}if(e.scheduleKind===`every`){let t=xc(e.everyAmount,0);if(t<=0)throw Error(v(`cron.errors.invalidIntervalAmount`));let n=e.everyUnit;return{kind:`every`,everyMs:t*(n===`minutes`?6e4:n===`hours`?36e5:864e5)}}let t=e.cronExpr.trim();if(!t)throw Error(v(`cron.errors.cronExprRequiredShort`));if(e.scheduleExact)return{kind:`cron`,expr:t,tz:e.cronTz.trim()||void 0,staggerMs:0};let n=e.staggerAmount.trim();if(!n)return{kind:`cron`,expr:t,tz:e.cronTz.trim()||void 0};let r=xc(n,0);if(r<=0)throw Error(v(`cron.errors.invalidStaggerAmount`));let i=e.staggerUnit===`minutes`?r*6e4:r*1e3;return{kind:`cron`,expr:t,tz:e.cronTz.trim()||void 0,staggerMs:i}}function av(e){if(e.payloadKind===`systemEvent`){let t=e.payloadText.trim();if(!t)throw Error(v(`cron.errors.systemEventTextRequired`));return{kind:`systemEvent`,text:t}}let t=e.payloadText.trim();if(!t)throw Error(v(`cron.errors.agentMessageRequiredShort`));let n={kind:`agentTurn`,message:t},r=e.payloadModel.trim();r&&(n.model=r);let i=e.payloadThinking.trim();i&&(n.thinking=i);let a=xc(e.timeoutSeconds,0);return a>0&&(n.timeoutSeconds=a),e.payloadLightContext&&(n.lightContext=!0),n}function ov(e,t={}){let n=e.trim();if(n)return n===`last`?t.preserveLastOnUpdate?R_:void 0:n}function sv(e,t){if(e.failureAlertMode===`disabled`)return!1;if(e.failureAlertMode!==`custom`)return;let n=xc(e.failureAlertAfter.trim(),0),r=e.failureAlertCooldownSeconds.trim(),i=r.length>0?xc(r,0):void 0,a=i!==void 0&&Number.isFinite(i)&&i>=0?Math.floor(i*1e3):void 0,o=e.failureAlertDeliveryMode,s=e.failureAlertAccountId.trim(),c={after:n>0?Math.floor(n):void 0,channel:ov(e.failureAlertChannel,{preserveLastOnUpdate:!!t}),to:e.failureAlertTo.trim()||void 0,...a===void 0?{}:{cooldownMs:a}};return o&&(c.mode=o),c.accountId=s||void 0,c}async function cv(e){let t=!1;return await W_(e,async n=>{let r=B_(e.cronForm);r!==e.cronForm&&(e.cronForm=r);let i=V_(r);if(e.cronFieldErrors=i,H_(i))return;let a=iv(r),o=av(r),s=e.cronEditingJobId?e.cronJobs.find(t=>t.id===e.cronEditingJobId):void 0,c=s?F_(s):null;if(o.kind===`agentTurn`){let t=c?.kind===`agentTurn`?c.lightContext:void 0;!r.payloadLightContext&&e.cronEditingJobId&&t!==void 0&&(o.lightContext=!1)}let l=r.deliveryMode,u=l&&l!==`none`?{mode:l,channel:l===`announce`?ov(r.deliveryChannel,{preserveLastOnUpdate:!!s?.delivery?.channel}):void 0,to:r.deliveryTo.trim()||void 0,accountId:l===`announce`?r.deliveryAccountId.trim():void 0,bestEffort:r.deliveryBestEffort}:l===`none`?{mode:`none`}:void 0,d=sv(r,s?.failureAlert&&typeof s.failureAlert==`object`?s.failureAlert.channel:void 0),f=r.clearAgent?null:r.agentId.trim(),p=r.sessionKey.trim()||(s?.sessionKey?null:void 0),m={name:r.name.trim(),description:r.description.trim(),agentId:f===null?null:f||void 0,sessionKey:p,enabled:r.enabled,deleteAfterRun:r.deleteAfterRun,schedule:a,sessionTarget:r.sessionTarget,wakeMode:r.wakeMode,payload:o,delivery:u,failureAlert:d};if(!m.name)throw Error(v(`cron.errors.nameRequiredShort`));e.cronEditingJobId?(await n.request(`cron.update`,{id:e.cronEditingJobId,patch:m}),Z_(e)):(await n.request(`cron.add`,m),$_(e)),await q_(e,{tableFilters:!0}),await U_(e),t=!0}),t}async function lv(e,t,n){await W_(e,async r=>{await r.request(`cron.update`,{id:t.id,patch:{enabled:n}}),await q_(e,{tableFilters:!0}),await U_(e)})}async function uv(e,t,n=`force`){await W_(e,async r=>{await r.request(`cron.run`,{id:t.id,mode:n}),await fv(e,e.cronRunsScope===`all`?null:t.id)})}async function dv(e,t){await W_(e,async n=>{await n.request(`cron.remove`,{id:t.id}),e.cronEditingJobId===t.id&&Z_(e),e.cronRunsJobId===t.id&&(e.cronRunsJobId=null,Q_(e)),await q_(e,{tableFilters:!0}),await U_(e)})}async function fv(e,t,n){if(!e.client||!e.connected)return`skipped`;let r=e.cronRunsScope,i=t??e.cronRunsJobId;if(r===`job`&&!i)return Q_(e),`skipped`;let a=n?.append===!0;if(a&&!e.cronRunsHasMore)return`skipped`;try{a&&(e.cronRunsLoadingMore=!0);let t=a?Math.max(0,e.cronRunsNextOffset??e.cronRuns.length):0,n=await e.client.request(`cron.runs`,{scope:r,id:r===`job`?i??void 0:void 0,limit:e.cronRunsLimit,offset:t,statuses:e.cronRunsStatuses.length>0?e.cronRunsStatuses:void 0,status:e.cronRunsStatusFilter,deliveryStatuses:e.cronRunsDeliveryStatuses.length>0?e.cronRunsDeliveryStatuses:void 0,query:e.cronRunsQuery.trim()||void 0,sortDir:e.cronRunsSortDir}),o=Array.isArray(n.entries)?n.entries:[];e.cronRuns=a&&(r===`all`||e.cronRunsJobId===i)?[...e.cronRuns,...o]:o,r===`job`&&(e.cronRunsJobId=i??null);let s=G_({totalRaw:n.total,offsetRaw:n.offset,nextOffsetRaw:n.nextOffset,hasMoreRaw:n.hasMore,pageCount:o.length});return e.cronRunsTotal=Math.max(s.total,e.cronRuns.length),e.cronRunsHasMore=s.hasMore,e.cronRunsNextOffset=s.nextOffset,`ok`}catch(t){return e.cronError=String(t),`error`}finally{a&&(e.cronRunsLoadingMore=!1)}}async function pv(e){e.cronRunsScope===`job`&&!e.cronRunsJobId||await fv(e,e.cronRunsJobId,{append:!0})}function mv(e,t){e.cronRunsScope=t.cronRunsScope??e.cronRunsScope,Array.isArray(t.cronRunsStatuses)&&(e.cronRunsStatuses=t.cronRunsStatuses,e.cronRunsStatusFilter=t.cronRunsStatuses.length===1?t.cronRunsStatuses[0]:`all`),Array.isArray(t.cronRunsDeliveryStatuses)&&(e.cronRunsDeliveryStatuses=t.cronRunsDeliveryStatuses),t.cronRunsStatusFilter&&(e.cronRunsStatusFilter=t.cronRunsStatusFilter,e.cronRunsStatuses=t.cronRunsStatusFilter===`all`?[]:[t.cronRunsStatusFilter]),typeof t.cronRunsQuery==`string`&&(e.cronRunsQuery=t.cronRunsQuery),e.cronRunsSortDir=t.cronRunsSortDir??e.cronRunsSortDir}function hv(e,t){e.cronEditingJobId=t.id,e.cronRunsJobId=t.id,e.cronForm=rv(t,e.cronForm),e.cronFieldErrors=V_(e.cronForm)}function gv(e,t){let n=e.trim()||`Job`,r=`${n} copy`;if(!t.has(E(r)))return r;let i=2;for(;i<1e3;){let e=`${n} copy ${i}`;if(!t.has(E(e)))return e;i+=1}return`${n} copy ${Date.now()}`}function _v(e,t){Z_(e),e.cronRunsJobId=t.id;let n=new Set(e.cronJobs.map(e=>E(e.name))),r=rv(t,e.cronForm);r.name=gv(t.name,n),e.cronForm=r,e.cronFieldErrors=V_(e.cronForm)}function vv(e){Z_(e),$_(e)}async function yv(e,t){if(!(!e.client||!e.connected)&&!e.devicesLoading){e.devicesLoading=!0,t?.quiet||(e.devicesError=null);try{let t=await e.client.request(`device.pair.list`,{});e.devicesList={pending:Array.isArray(t?.pending)?t.pending:[],paired:Array.isArray(t?.paired)?t.paired:[]}}catch(n){t?.quiet||(e.devicesError=String(n))}finally{e.devicesLoading=!1}}}async function bv(e,t){if(!(!e.client||!e.connected))try{await e.client.request(`device.pair.approve`,{requestId:t}),await yv(e)}catch(t){e.devicesError=String(t)}}async function xv(e,t){if(!(!e.client||!e.connected)&&window.confirm(`Reject this device pairing request?`))try{await e.client.request(`device.pair.reject`,{requestId:t}),await yv(e)}catch(t){e.devicesError=String(t)}}async function Sv(e,t){if(!(!e.client||!e.connected))try{let n=await e.client.request(`device.token.rotate`,t);if(n?.token){let e=await mt(),r=n.role??t.role;(n.deviceId===e.deviceId||t.deviceId===e.deviceId)&&ot({deviceId:e.deviceId,role:r,token:n.token,scopes:n.scopes??t.scopes??[]}),window.prompt(`New device token (copy and store securely):`,n.token)}await yv(e)}catch(t){e.devicesError=String(t)}}async function Cv(e,t){if(!(!e.client||!e.connected)&&window.confirm(`Revoke token for ${t.deviceId} (${t.role})?`))try{await e.client.request(`device.token.revoke`,t);let n=await mt();t.deviceId===n.deviceId&&st({deviceId:n.deviceId,role:t.role}),await yv(e)}catch(t){e.devicesError=String(t)}}function wv(e,t,n){let r=n?.enabledByDefault??!0,i=e?.config;if(!i||typeof i!=`object`||Array.isArray(i))return r;let a=`plugins`in i&&i.plugins&&typeof i.plugins==`object`?i.plugins:null;if(a?.enabled===!1||(Array.isArray(a?.deny)&&a.deny.every(e=>typeof e==`string`)?a.deny:[]).includes(t))return!1;let o=Array.isArray(a?.allow)&&a.allow.every(e=>typeof e==`string`)?a.allow:[];if(o.length>0&&!o.includes(t))return!1;let s=(a&&`entries`in a&&a.entries&&typeof a.entries==`object`?a.entries:null)?.[t];if(!s||typeof s!=`object`||Array.isArray(s))return r;let c=s.enabled;return typeof c==`boolean`?c:r}var Tv=`DREAMS.md`,Ev=`memory-core`,Dv=`memory-wiki`;function Ov(e){return typeof globalThis.confirm==`function`?globalThis.confirm(e):!0}function kv(e){return wv(e.configSnapshot,Dv,{enabledByDefault:!1})}function Av(e,t){let n=e.hello?.features?.methods;return Array.isArray(n)?n.includes(t):null}function jv(e,t){let n=Av(e,t);return n===null?kv(e):n}function Mv(e,t){switch(e){case`doctor.memory.dedupeDreamDiary`:{let e=typeof t?.dedupedEntries==`number`?t.dedupedEntries:typeof t?.removedEntries==`number`?t.removedEntries:0,n=typeof t?.keptEntries==`number`?t.keptEntries:void 0;return n===void 0?`Removed ${e} duplicate dream ${e===1?`entry`:`entries`}.`:`Removed ${e} duplicate dream ${e===1?`entry`:`entries`} and kept ${n}.`}case`doctor.memory.repairDreamingArtifacts`:{let e=[],n=W(t?.archiveDir);return t?.archivedSessionCorpus===!0&&e.push(`archived session corpus`),t?.archivedSessionIngestion===!0&&e.push(`archived ingestion state`),t?.archivedDreamsDiary===!0&&e.push(`archived dream diary`),e.length===0?`Dream cache repair finished with no changes.`:n?`Dream cache repair complete: ${e.join(`, `)}. Archive: ${n}`:`Dream cache repair complete: ${e.join(`, `)}.`}case`doctor.memory.backfillDreamDiary`:return`Backfilled ${typeof t?.written==`number`?t.written:0} dream diary entries.`;case`doctor.memory.resetDreamDiary`:return`Removed ${typeof t?.removedEntries==`number`?t.removedEntries:0} backfilled dream diary entries.`;case`doctor.memory.resetGroundedShortTerm`:return`Cleared ${typeof t?.removedShortTermEntries==`number`?t.removedShortTermEntries:0} replayed short-term entries.`}return`Dream diary action complete.`}function U(e){return!e||typeof e!=`object`||Array.isArray(e)?null:e}function W(e){if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}function Nv(e,t=!1){return typeof e==`boolean`?e:t}function G(e,t=0){return typeof e!=`number`||!Number.isFinite(e)?t:Math.max(0,Math.floor(e))}function Pv(e,t=0){return typeof e!=`number`||!Number.isFinite(e)?t:Math.max(0,Math.min(1,e))}function Fv(e){let t=W(e)?.toLowerCase();return t===`inline`||t===`separate`||t===`both`?t:`inline`}function Iv(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function Lv(e){return{enabled:Nv(e?.enabled,!1),cron:W(e?.cron)??``,managedCronPresent:Nv(e?.managedCronPresent,!1),...Iv(e?.nextRunAtMs)===void 0?{}:{nextRunAtMs:Iv(e?.nextRunAtMs)}}}function Rv(e){let t=W(U(U(e?.plugins)?.slots)?.memory);return t&&t.toLowerCase()!==`none`?t:Ev}function zv(e){let t=Rv(e);return{pluginId:t,enabled:Nv(U(U(U(U(U(e?.plugins)?.entries)?.[t])?.config)?.dreaming)?.enabled,!1)}}function Bv(e){let t=U(e),n=W(t?.key),r=W(t?.path),i=W(t?.snippet);if(!n||!r||!i)return null;let a=W(t?.promotedAt),o=W(t?.lastRecalledAt);return{key:n,path:r,startLine:Math.max(1,G(t?.startLine,1)),endLine:Math.max(1,G(t?.endLine,1)),snippet:i,recallCount:G(t?.recallCount,0),dailyCount:G(t?.dailyCount,0),groundedCount:G(t?.groundedCount,0),totalSignalCount:G(t?.totalSignalCount,0),lightHits:G(t?.lightHits,0),remHits:G(t?.remHits,0),phaseHitCount:G(t?.phaseHitCount,0),...a?{promotedAt:a}:{},...o?{lastRecalledAt:o}:{}}}function Vv(e){return Array.isArray(e)?e.map(e=>Bv(e)).filter(e=>e!==null):[]}function Hv(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`&&e.trim().length>0):[]}function Uv(e){let t=U(e),n=W(t?.pagePath),r=W(t?.title),i=W(t?.riskLevel),a=W(t?.topicKey),o=W(t?.topicLabel),s=W(t?.digestStatus),c=W(t?.summary);return!n||!r||!a||!o||!c||i!==`low`&&i!==`medium`&&i!==`high`&&i!==`unknown`||s!==`available`&&s!==`withheld`?null:{pagePath:n,title:r,riskLevel:i,riskReasons:Hv(t?.riskReasons),labels:Hv(t?.labels),topicKey:a,topicLabel:o,digestStatus:s,activeBranchMessages:G(t?.activeBranchMessages,0),userMessageCount:G(t?.userMessageCount,0),assistantMessageCount:G(t?.assistantMessageCount,0),...W(t?.firstUserLine)?{firstUserLine:W(t?.firstUserLine)}:{},...W(t?.lastUserLine)?{lastUserLine:W(t?.lastUserLine)}:{},...W(t?.assistantOpener)?{assistantOpener:W(t?.assistantOpener)}:{},summary:c,candidateSignals:Hv(t?.candidateSignals),correctionSignals:Hv(t?.correctionSignals),preferenceSignals:Hv(t?.preferenceSignals),...W(t?.createdAt)?{createdAt:W(t?.createdAt)}:{},...W(t?.updatedAt)?{updatedAt:W(t?.updatedAt)}:{}}}function Wv(e){let t=U(e),n=W(t?.key),r=W(t?.label);if(!n||!r)return null;let i=Array.isArray(t?.items)?t.items.map(e=>Uv(e)).filter(e=>e!==null):[];return{key:n,label:r,itemCount:G(t?.itemCount,i.length),highRiskCount:G(t?.highRiskCount,i.filter(e=>e.riskLevel===`high`).length),withheldCount:G(t?.withheldCount,i.filter(e=>e.digestStatus===`withheld`).length),preferenceSignalCount:G(t?.preferenceSignalCount,i.reduce((e,t)=>e+t.preferenceSignals.length,0)),...W(t?.updatedAt)?{updatedAt:W(t?.updatedAt)}:{},items:i}}function Gv(e){let t=U(e),n=Array.isArray(t?.clusters)?t.clusters.map(e=>Wv(e)).filter(e=>e!==null):[];return{sourceType:(t?.sourceType,`chatgpt`),totalItems:G(t?.totalItems,n.reduce((e,t)=>e+t.itemCount,0)),totalClusters:G(t?.totalClusters,n.length),clusters:n}}function Kv(e){return e===`entity`||e===`concept`||e===`source`||e===`synthesis`||e===`report`?e:void 0}function qv(){return{synthesis:0,entity:0,concept:0,source:0,report:0}}function Jv(e,t){let n=U(e);return{synthesis:G(n?.synthesis,t.synthesis),entity:G(n?.entity,t.entity),concept:G(n?.concept,t.concept),source:G(n?.source,t.source),report:G(n?.report,t.report)}}function Yv(e){return e.synthesis+e.entity+e.concept+e.source+e.report}function Xv(e){let t=U(e),n=W(t?.pagePath),r=W(t?.title),i=Kv(t?.kind);return!n||!r||!i?null:{pagePath:n,title:r,kind:i,...W(t?.id)?{id:W(t?.id)}:{},...W(t?.updatedAt)?{updatedAt:W(t?.updatedAt)}:{},...W(t?.sourceType)?{sourceType:W(t?.sourceType)}:{},claimCount:G(t?.claimCount,0),questionCount:G(t?.questionCount,0),contradictionCount:G(t?.contradictionCount,0),claims:Hv(t?.claims),questions:Hv(t?.questions),contradictions:Hv(t?.contradictions),...W(t?.snippet)?{snippet:W(t?.snippet)}:{}}}function Zv(e){let t=U(e),n=Kv(t?.key),r=W(t?.label);if(!n||!r)return null;let i=Array.isArray(t?.items)?t.items.map(e=>Xv(e)).filter(e=>e!==null):[];return{key:n,label:r,itemCount:G(t?.itemCount,i.length),claimCount:G(t?.claimCount,i.reduce((e,t)=>e+t.claimCount,0)),questionCount:G(t?.questionCount,i.reduce((e,t)=>e+t.questionCount,0)),contradictionCount:G(t?.contradictionCount,i.reduce((e,t)=>e+t.contradictionCount,0)),...W(t?.updatedAt)?{updatedAt:W(t?.updatedAt)}:{},items:i}}function Qv(e){let t=U(e),n=Array.isArray(t?.clusters)?t.clusters.map(e=>Zv(e)).filter(e=>e!==null):[],r=G(t?.totalItems,n.reduce((e,t)=>e+t.itemCount,0)),i=qv();for(let e of n)i[e.key]+=e.itemCount;let a=Jv(t?.pageCounts,i),o=Yv(a)||r;return{totalItems:r,totalPages:G(t?.totalPages,o),pageCounts:a,totalClaims:G(t?.totalClaims,n.reduce((e,t)=>e+t.claimCount,0)),totalQuestions:G(t?.totalQuestions,n.reduce((e,t)=>e+t.questionCount,0)),totalContradictions:G(t?.totalContradictions,n.reduce((e,t)=>e+t.contradictionCount,0)),clusters:n}}function $v(e){let t=U(e);if(!t)return null;let n=U(t.phases),r=U(n?.light),i=U(n?.deep),a=U(n?.rem),o=r&&i&&a?{light:{...Lv(r),lookbackDays:G(r.lookbackDays,0),limit:G(r.limit,0)},deep:{...Lv(i),limit:G(i.limit,0),minScore:Pv(i.minScore,0),minRecallCount:G(i.minRecallCount,0),minUniqueQueries:G(i.minUniqueQueries,0),recencyHalfLifeDays:G(i.recencyHalfLifeDays,0),...typeof i.maxAgeDays==`number`&&Number.isFinite(i.maxAgeDays)?{maxAgeDays:G(i.maxAgeDays,0)}:{},...typeof i.maxPromotedSnippetTokens==`number`&&Number.isFinite(i.maxPromotedSnippetTokens)?{maxPromotedSnippetTokens:G(i.maxPromotedSnippetTokens,0)}:{}},rem:{...Lv(a),lookbackDays:G(a.lookbackDays,0),limit:G(a.limit,0),minPatternStrength:Pv(a.minPatternStrength,0)}}:void 0,s=W(t.timezone),c=W(t.storePath),l=W(t.phaseSignalPath),u=W(t.storeError),d=W(t.phaseSignalError);return{enabled:Nv(t.enabled,!1),...s?{timezone:s}:{},verboseLogging:Nv(t.verboseLogging,!1),storageMode:Fv(t.storageMode),separateReports:Nv(t.separateReports,!1),shortTermCount:G(t.shortTermCount,0),recallSignalCount:G(t.recallSignalCount,0),dailySignalCount:G(t.dailySignalCount,0),groundedSignalCount:G(t.groundedSignalCount,0),totalSignalCount:G(t.totalSignalCount,0),phaseSignalCount:G(t.phaseSignalCount,0),lightPhaseHitCount:G(t.lightPhaseHitCount,0),remPhaseHitCount:G(t.remPhaseHitCount,0),promotedTotal:G(t.promotedTotal,0),promotedToday:G(t.promotedToday,0),...c?{storePath:c}:{},...l?{phaseSignalPath:l}:{},...u?{storeError:u}:{},...d?{phaseSignalError:d}:{},shortTermEntries:Vv(t.shortTermEntries),signalEntries:Vv(t.signalEntries),promotedEntries:Vv(t.promotedEntries),...o?{phases:o}:{}}}async function ey(e){if(!(!e.client||!e.connected||e.dreamingStatusLoading)){e.dreamingStatusLoading=!0,e.dreamingStatusError=null;try{e.dreamingStatus=$v((await e.client.request(`doctor.memory.status`,{}))?.dreaming)}catch(t){e.dreamingStatusError=String(t)}finally{e.dreamingStatusLoading=!1}}}async function ty(e){if(!(!e.client||!e.connected||e.dreamDiaryLoading)){e.dreamDiaryLoading=!0,e.dreamDiaryError=null;try{let t=await e.client.request(`doctor.memory.dreamDiary`,{}),n=W(t?.path)??Tv;t?.found===!0?(e.dreamDiaryPath=n,e.dreamDiaryContent=typeof t?.content==`string`?t.content:``):(e.dreamDiaryPath=n,e.dreamDiaryContent=null)}catch(t){e.dreamDiaryError=String(t)}finally{e.dreamDiaryLoading=!1}}}async function ny(e){if(!(!e.client||!e.connected||e.wikiImportInsightsLoading)){if(!jv(e,`wiki.importInsights`)){e.wikiImportInsights=null,e.wikiImportInsightsError=null;return}e.wikiImportInsightsLoading=!0,e.wikiImportInsightsError=null;try{e.wikiImportInsights=Gv(await e.client.request(`wiki.importInsights`,{}))}catch(t){e.wikiImportInsightsError=String(t)}finally{e.wikiImportInsightsLoading=!1}}}async function ry(e){if(!(!e.client||!e.connected||e.wikiMemoryPalaceLoading)){if(!jv(e,`wiki.palace`)){e.wikiMemoryPalace=null,e.wikiMemoryPalaceError=null;return}e.wikiMemoryPalaceLoading=!0,e.wikiMemoryPalaceError=null;try{e.wikiMemoryPalace=Qv(await e.client.request(`wiki.palace`,{}))}catch(t){e.wikiMemoryPalaceError=String(t)}finally{e.wikiMemoryPalaceLoading=!1}}}async function iy(e,t,n){if(!e.client||!e.connected||e.dreamDiaryActionLoading||t===`doctor.memory.repairDreamingArtifacts`&&!Ov(`Repair Dream Cache? This archives derived dream cache files and rebuilds them from clean inputs. Your dream diary stays untouched.`)||t===`doctor.memory.dedupeDreamDiary`&&!Ov(`Dedupe Dream Diary? This rewrites DREAMS.md and removes only exact duplicate diary entries.`))return!1;e.dreamDiaryActionLoading=!0,e.dreamingStatusError=null,e.dreamDiaryError=null,e.dreamDiaryActionMessage=null,e.dreamDiaryActionArchivePath=null;try{let r=await e.client.request(t,{});return n?.reloadDiary!==!1&&await ty(e),await ey(e),e.dreamDiaryActionArchivePath=t===`doctor.memory.repairDreamingArtifacts`?W(r?.archiveDir)??null:null,e.dreamDiaryActionMessage={kind:`success`,text:Mv(t,r)},!0}catch(t){let n=String(t);return e.dreamingStatusError=n,e.lastError=n,e.dreamDiaryActionArchivePath=null,e.dreamDiaryActionMessage={kind:`error`,text:n},!1}finally{e.dreamDiaryActionLoading=!1}}async function ay(e){return iy(e,`doctor.memory.backfillDreamDiary`)}async function oy(e){return iy(e,`doctor.memory.resetDreamDiary`)}async function sy(e){return iy(e,`doctor.memory.resetGroundedShortTerm`,{reloadDiary:!1})}async function cy(e){return iy(e,`doctor.memory.repairDreamingArtifacts`,{reloadDiary:!1})}async function ly(e){let t=e.dreamDiaryActionArchivePath;if(!t)return!1;if(!globalThis.navigator?.clipboard?.writeText)return e.dreamDiaryActionMessage={kind:`error`,text:`Could not copy archive path.`},!1;try{return await globalThis.navigator.clipboard.writeText(t),e.dreamDiaryActionMessage={kind:`success`,text:`Archive path copied.`},!0}catch{return e.dreamDiaryActionMessage={kind:`error`,text:`Could not copy archive path.`},!1}}async function uy(e){return iy(e,`doctor.memory.dedupeDreamDiary`)}async function dy(e,t){if(!e.client||!e.connected||e.dreamingModeSaving)return!1;let n=e.configSnapshot?.hash;if(!n)return e.dreamingStatusError=`Config hash missing; refresh and retry.`,!1;e.dreamingModeSaving=!0,e.dreamingStatusError=null;try{return await e.client.request(`config.patch`,{baseHash:n,raw:JSON.stringify(t),sessionKey:e.applySessionKey,note:`Dreaming settings updated from the Dreaming tab.`}),!0}catch(t){let n=String(t);return e.dreamingStatusError=n,e.lastError=n,!1}finally{e.dreamingModeSaving=!1}}function fy(e){let t=U(e),n=Array.isArray(t?.children)?t.children:[];for(let e of n)if(W(U(e)?.key)===`dreaming`)return!0;return!1}function py(e){return U(U(e)?.schema)?.additionalProperties===!1}async function my(e,t){if(!e.client||!e.connected)return!0;try{let n=await e.client.request(`config.schema.lookup`,{path:`plugins.entries.${t}.config`});if(fy(n))return!0;if(py(n)){let n=`Selected memory plugin "${t}" does not support dreaming settings.`;return e.dreamingStatusError=n,e.lastError=n,!1}}catch{return!0}return!0}async function hy(e,t){if(e.dreamingModeSaving)return!1;if(!e.configSnapshot?.hash)return e.dreamingStatusError=`Config hash missing; refresh and retry.`,!1;let{pluginId:n}=zv(U(e.configSnapshot?.config)??null);if(!await my(e,n))return!1;let r=await dy(e,{plugins:{entries:{[n]:{config:{dreaming:{enabled:t}}}}}});return r&&e.dreamingStatus&&(e.dreamingStatus={...e.dreamingStatus,enabled:t}),r}function gy(e){if(!e||e.kind===`gateway`)return{method:`exec.approvals.get`,params:{}};let t=e.nodeId.trim();return t?{method:`exec.approvals.node.get`,params:{nodeId:t}}:null}function _y(e,t){if(!e||e.kind===`gateway`)return{method:`exec.approvals.set`,params:t};let n=e.nodeId.trim();return n?{method:`exec.approvals.node.set`,params:{...t,nodeId:n}}:null}async function vy(e,t){if(!(!e.client||!e.connected)&&!e.execApprovalsLoading){e.execApprovalsLoading=!0,e.lastError=null;try{let n=gy(t);if(!n){e.lastError=`Select a node before loading exec approvals.`;return}yy(e,await e.client.request(n.method,n.params))}catch(t){e.lastError=String(t)}finally{e.execApprovalsLoading=!1}}}function yy(e,t){e.execApprovalsSnapshot=t,e.execApprovalsDirty||(e.execApprovalsForm=On(t.file??{}))}async function by(e,t){if(!(!e.client||!e.connected)){e.execApprovalsSaving=!0,e.lastError=null;try{let n=e.execApprovalsSnapshot?.hash;if(!n){e.lastError=`Exec approvals hash missing; reload and retry.`;return}let r=_y(t,{file:e.execApprovalsForm??e.execApprovalsSnapshot?.file??{},baseHash:n});if(!r){e.lastError=`Select a node before saving exec approvals.`;return}await e.client.request(r.method,r.params),e.execApprovalsDirty=!1,await vy(e,t)}catch(t){e.lastError=String(t)}finally{e.execApprovalsSaving=!1}}}function xy(e,t,n){let r=On(e.execApprovalsForm??e.execApprovalsSnapshot?.file??{});Bn(r,t,n),e.execApprovalsForm=r,e.execApprovalsDirty=!0}function Sy(e,t){let n=On(e.execApprovalsForm??e.execApprovalsSnapshot?.file??{});Vn(n,t),e.execApprovalsForm=n,e.execApprovalsDirty=!0}var Cy={ts:0,providers:[]};async function wy(e,t){let n=t?.refresh?{refresh:!0}:{};return await e.request(`models.authStatus`,n)??Cy}async function Ty(e,t){if(!(!e.client||!e.connected)&&!e.modelAuthStatusLoading){e.modelAuthStatusLoading=!0,e.modelAuthStatusError=null;try{e.modelAuthStatusResult=await wy(e.client,t)}catch(t){e.modelAuthStatusError=t instanceof Error?t.message:String(t),e.modelAuthStatusResult=Cy}finally{e.modelAuthStatusLoading=!1}}}async function Ey(e){if(!(!e.client||!e.connected)&&!e.presenceLoading){e.presenceLoading=!0,e.presenceError=null,e.presenceStatus=null;try{let t=await e.client.request(`system-presence`,{});Array.isArray(t)?(e.presenceEntries=t,e.presenceStatus=t.length===0?`No instances yet.`:null):(e.presenceEntries=[],e.presenceStatus=`No presence payload.`)}catch(t){Ut(t)?(e.presenceEntries=[],e.presenceStatus=null,e.presenceError=Wt(`instance presence`)):e.presenceError=String(t)}finally{e.presenceLoading=!1}}}function Dy(e,t,n){t.trim()&&(e.skillMessages={...e.skillMessages,[t]:n})}var Oy=e=>e instanceof Error?e.message:String(e);function ky(e){return`${e.registry}\0${e.slug}\0${e.version}`}function Ay(e){return!!(e&&e.status===`linked`&&e.valid)}function jy(e){return e.skills.some(e=>Ay(e.clawhub))}function My(e){if(!e.skillCard?.present)return;let t=e.clawhub?.status===`linked`&&e.clawhub.valid?e.clawhub.installedVersion:``;return`${e.skillCard.path}\0${e.skillCard.sizeBytes}\0${t}`}function Ny(e,t){let n=e.skillsReport?.skills.find(e=>e.skillKey===t);return n?My(n):void 0}async function Py(e,t,n,r,i){try{let r=await t();if(!e())return;n(r)}catch(t){if(!e())return;r(t)}i()}function Fy(e,t){e.clawhubSearchQuery=t,e.clawhubInstallMessage=null,e.clawhubSearchResults=null,e.clawhubSearchError=null,e.clawhubSearchLoading=!1}async function Iy(e,t){if(t?.clearMessages&&Object.keys(e.skillMessages).length>0&&(e.skillMessages={}),!(!e.client||!e.connected||e.skillsLoading)){e.skillsLoading=!0,e.skillsError=null;try{let t=await e.client.request(`skills.status`,{});t&&Array.isArray(t.skills)&&(e.skillsReport=t,Ly(e,t),zy(e,t))}catch(t){e.skillsError=Oy(t)}finally{e.skillsLoading=!1}}}function Ly(e,t){let n=new Map(t.skills.map(e=>[e.skillKey,My(e)]).filter(e=>e[1]!==void 0));e.skillCardContents=Object.fromEntries(Object.entries(e.skillCardContents).filter(([t])=>e.skillCardContentKeys[t]===n.get(t))),e.skillCardContentKeys=Object.fromEntries(Object.entries(e.skillCardContentKeys).filter(([e,t])=>t===n.get(e))),e.skillCardErrors=Object.fromEntries(Object.entries(e.skillCardErrors).filter(([e])=>n.has(e))),e.skillCardLoadingKey&&!n.has(e.skillCardLoadingKey)&&(e.skillCardLoadingKey=null)}async function Ry(e,t){if(!e.client||!e.connected||e.skillCardLoadingKey===t||e.skillCardContents[t]!==void 0&&e.skillCardContentKeys[t]===Ny(e,t))return;let n=Ny(e,t);if(!n)return;e.skillCardLoadingKey=t;let{[t]:r,...i}=e.skillCardErrors;e.skillCardErrors=i;try{let r=await e.client.request(`skills.skillCard`,{skillKey:t});r?.skillKey===t&&typeof r.content==`string`&&Ny(e,t)===n&&(e.skillCardContents={...e.skillCardContents,[t]:r.content},e.skillCardContentKeys={...e.skillCardContentKeys,[t]:n})}catch(n){e.skillCardErrors={...e.skillCardErrors,[t]:Oy(n)}}finally{e.skillCardLoadingKey===t&&(e.skillCardLoadingKey=null)}}async function zy(e,t){let n=e.client;if(!n||!e.connected||!jy(t)){e.clawhubVerdicts={},e.clawhubVerdictsLoading=!1,e.clawhubVerdictsError=null;return}e.clawhubVerdictsLoading=!0,e.clawhubVerdictsError=null;try{let t=await n.request(`skills.securityVerdicts`,{});e.clawhubVerdicts=Object.fromEntries((t?.items??[]).map(e=>[ky({registry:e.registry,slug:e.requestedSlug,version:e.requestedVersion}),e]))}catch(t){e.clawhubVerdicts={},e.clawhubVerdictsError=Oy(t)}finally{e.clawhubVerdictsLoading=!1}}function By(e,t,n){e.skillEdits={...e.skillEdits,[t]:n}}async function Vy(e,t,n){let r=e.client;if(!(!r||!e.connected)){e.skillsBusyKey=t,e.skillsError=null;try{let i=await n(r);await Iy(e),Dy(e,t,i)}catch(n){let r=Oy(n);e.skillsError=r,Dy(e,t,{kind:`error`,message:r})}finally{e.skillsBusyKey=null}}}async function Hy(e,t,n){await Vy(e,t,async e=>(await e.request(`skills.update`,{skillKey:t,enabled:n}),{kind:`success`,message:n?`Skill enabled`:`Skill disabled`}))}async function Uy(e,t){await Vy(e,t,async n=>{let r=e.skillEdits[t]??``;return await n.request(`skills.update`,{skillKey:t,apiKey:r}),{kind:`success`,message:`API key saved — stored in fengming.json (skills.entries.${t})`}})}async function Wy(e,t,n,r,i=!1){await Vy(e,t,async e=>({kind:`success`,message:(await e.request(`skills.install`,{name:n,installId:r,dangerouslyForceUnsafeInstall:i,timeoutMs:12e4}))?.message??`Installed`}))}async function Gy(e,t){if(!e.client||!e.connected)return;if(!t.trim()){e.clawhubSearchResults=null,e.clawhubSearchError=null,e.clawhubSearchLoading=!1;return}let n=e.client;e.clawhubSearchResults=null,e.clawhubSearchLoading=!0,e.clawhubSearchError=null,await Py(()=>t===e.clawhubSearchQuery,()=>n.request(`skills.search`,{query:t,limit:20}),t=>{e.clawhubSearchResults=t?.results??[]},t=>{e.clawhubSearchError=Oy(t)},()=>{e.clawhubSearchLoading=!1})}async function Ky(e,t){if(!e.client||!e.connected)return;let n=e.client;e.clawhubDetailSlug=t,e.clawhubDetailLoading=!0,e.clawhubDetailError=null,e.clawhubDetail=null,await Py(()=>t===e.clawhubDetailSlug,()=>n.request(`skills.detail`,{slug:t}),t=>{e.clawhubDetail=t??null},t=>{e.clawhubDetailError=Oy(t)},()=>{e.clawhubDetailLoading=!1})}function qy(e){e.clawhubDetailSlug=null,e.clawhubDetail=null,e.clawhubDetailError=null,e.clawhubDetailLoading=!1}async function Jy(e,t){if(!(!e.client||!e.connected)){e.clawhubInstallSlug=t,e.clawhubInstallMessage=null;try{await e.client.request(`skills.install`,{source:`clawhub`,slug:t}),await Iy(e),e.clawhubInstallMessage={kind:`success`,text:`Installed ${t}`}}catch(t){e.clawhubInstallMessage={kind:`error`,text:Oy(t)}}finally{e.clawhubInstallSlug=null}}}var Yy=`fengming.control.usage.date-params.v1`,Xy=`fengming.control.usage.scope-params.v1`,Zy=`fengming.control.usage.agent-params.v1`,Qy=`fengming.control.usage.agent-scope.v1`,$y=/unexpected property ['"]mode['"]/i,eb=/unexpected property ['"]utcoffset['"]/i,tb=/unexpected property ['"]groupby['"]/i,nb=/unexpected property ['"]includehistorical['"]/i,rb=/unexpected property ['"]agentid['"]/i,ib=/unexpected property ['"]agentscope['"]/i,ab=/invalid sessions\.usage params/i,ob=null,sb=null,cb=null,lb=null;function ub(e){let t=et()?.getItem(e);if(!t)return new Set;try{let e=JSON.parse(t)?.unsupportedGatewayKeys;return Array.isArray(e)?new Set(e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(Boolean)):new Set}catch{return new Set}}function db(e,t){try{et()?.setItem(e,JSON.stringify({unsupportedGatewayKeys:Array.from(t)}))}catch{}}function fb(){return ob||=ub(Yy),ob}function pb(){return sb||=ub(Xy),sb}function mb(){return cb||=ub(Zy),cb}function hb(){return lb||=ub(Qy),lb}function gb(e){let t=e?.trim();if(!t)return`__default__`;try{let e=new URL(t),n=e.pathname===`/`?``:e.pathname;return E(`${e.protocol}//${e.host}${n}`)}catch{return E(t)}}function _b(e){return!fb().has(gb(e.settings?.gatewayUrl))}function vb(e){let t=fb();t.add(gb(e.settings?.gatewayUrl)),db(Yy,t)}function yb(e){return!pb().has(gb(e.settings?.gatewayUrl))}function bb(e){let t=pb();t.add(gb(e.settings?.gatewayUrl)),db(Xy,t)}function xb(e){return!mb().has(gb(e.settings?.gatewayUrl))}function Sb(e){let t=mb();t.add(gb(e.settings?.gatewayUrl)),db(Zy,t)}function Cb(e){return!hb().has(gb(e.settings?.gatewayUrl))}function wb(e){let t=hb();t.add(gb(e.settings?.gatewayUrl)),db(Qy,t)}function Tb(e){let t=jb(e);return ab.test(t)&&($y.test(t)||eb.test(t))}function Eb(e){let t=jb(e);return ab.test(t)&&(tb.test(t)||nb.test(t))}function Db(e){let t=jb(e);return ab.test(t)&&rb.test(t)}function Ob(e){let t=jb(e);return ab.test(t)&&ib.test(t)}var kb=e=>{let t=-e,n=t>=0?`+`:`-`,r=Math.abs(t),i=Math.floor(r/60),a=r%60;return a===0?`UTC${n}${i}`:`UTC${n}${i}:${a.toString().padStart(2,`0`)}`},Ab=e=>e===`utc`?{mode:`utc`}:{mode:`specific`,utcOffset:kb(new Date().getTimezoneOffset())};function jb(e){if(typeof e==`string`)return e;if(e instanceof Error&&typeof e.message==`string`&&e.message.trim())return e.message;if(e&&typeof e==`object`)try{return JSON.stringify(e)||`request failed`}catch{}return`request failed`}function Mb(e,t,n){t&&(e.usageResult=t),n&&(e.usageCostSummary=n)}async function Nb(e,t){let n=e.client;if(!(!n||!e.connected||e.usageLoading)){e.usageLoading=!0,e.usageError=null;try{let r=t?.startDate??e.usageStartDate,i=t?.endDate??e.usageEndDate,a=E(e.usageAgentId??``)||void 0,o=(t,o,s,c)=>{let l=t?Ab(e.usageTimeZone):void 0,u=o?{groupBy:e.usageScope,includeHistorical:e.usageScope===`family`}:void 0,d=a?s?{agentId:a}:void 0:c?{agentScope:`all`}:void 0;return Promise.all([n.request(`sessions.usage`,{startDate:r,endDate:i,...d,...l,...u,limit:1e3,includeContextWeight:!0}),n.request(`usage.cost`,{startDate:r,endDate:i,...d,...l})])},s=_b(e),c=yb(e),l=!!a&&xb(e),u=!a&&Cb(e);for(;;)try{let[t,n]=await o(s,c,l,u);Mb(e,t,n);break}catch(t){if(l&&Db(t)){Sb(e),l=!1;continue}if(u&&Ob(t)){wb(e),u=!1;continue}if(c&&Eb(t)){bb(e),c=!1;continue}if(s&&Tb(t)){vb(e),s=!1;continue}throw t}}catch(t){Ut(t)?(e.usageResult=null,e.usageCostSummary=null,e.usageError=Wt(`usage`)):e.usageError=jb(t)}finally{e.usageLoading=!1}}}async function Pb(e,t,n){let r=e.client;if(!(!r||!e.connected||e[t])){e[t]=!0;try{await n(r)}catch{}finally{e[t]=!1}}}async function Fb(e,t){await Pb(e,`usageTimeSeriesLoading`,async n=>{e.usageTimeSeries=null,e.usageTimeSeries=await n.request(`sessions.usage.timeseries`,{key:t})||null})}async function Ib(e,t){await Pb(e,`usageSessionLogsLoading`,async n=>{e.usageSessionLogs=null;let r=(await n.request(`sessions.usage.logs`,{key:t,limit:1e3}))?.logs;e.usageSessionLogs=Array.isArray(r)?r:null})}var Lb=[`triage`,`backlog`,`todo`,`scheduled`,`ready`,`running`,`review`,`blocked`,`done`],Rb=[`low`,`normal`,`high`,`urgent`],zb=[`codex`,`claude`],Bb=[`autonomous`,`manual`],Vb=[`idle`,`running`,`review`,`blocked`,`done`],Hb=[`created`,`edited`,`moved`,`linked`,`claimed`,`heartbeat`,`execution_updated`,`attempt_started`,`attempt_updated`,`comment_added`,`link_added`,`proof_added`,`artifact_added`,`diagnostic`,`notification`,`dispatch`,`archived`,`unarchived`,`stale`],Ub=[`running`,`succeeded`,`failed`,`blocked`,`stopped`],Wb=[`parent`,`child`,`blocks`,`blocked_by`,`relates_to`],Gb=[`passed`,`failed`,`skipped`,`unknown`],Kb=[`bugfix`,`docs`,`release`,`pr_review`,`plugin`],qb=[`warning`,`error`,`critical`],Jb={codex:`openai/gpt-5.5`,claude:`anthropic/claude-sonnet-4-6`},Yb=new WeakMap,Xb=new WeakMap,Zb=40,Qb=6e3,$b=700,ex=180,tx=512,nx=1800*1e3;function rx(){return{loading:!1,loaded:!1,loadAttempted:!1,error:null,cards:[],statuses:Lb,query:``,priorityFilter:`all`,draftOpen:!1,editingCardId:null,draftTitle:``,draftNotes:``,draftStatus:`todo`,draftPriority:`normal`,draftLabels:``,draftAgentId:``,draftSessionKey:``,draftTemplateId:``,busyCardId:null,draggedCardId:null,syncingCardIds:new Set,capturingSessionKeys:new Set,gameOpen:!1,gamePlayerIndex:0,gameMoves:0,gameWins:0,gameMessage:`workboard.gameStart`}}function ix(e){let t=Yb.get(e);return t||(t=rx(),Yb.set(e,t)),t}function ax(e){return e instanceof Error&&e.message.trim()?e.message:typeof e==`string`&&e.trim()?e.trim():K(e)&&typeof e.message==`string`&&e.message.trim()?e.message.trim():`Unknown workboard error.`}function K(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function ox(e){if(!K(e))return;let t=typeof e.id==`string`&&e.id.trim()?e.id.trim():``,n=zb.includes(e.engine)?e.engine:null,r=Bb.includes(e.mode)?e.mode:null,i=Vb.includes(e.status)?e.status:`idle`,a=typeof e.model==`string`&&e.model.trim()?e.model.trim():``,o=typeof e.startedAt==`number`?e.startedAt:0,s=typeof e.updatedAt==`number`?e.updatedAt:o;if(!(!t||!n||!r||!a||!o))return{id:t,kind:`agent-session`,engine:n,mode:r,status:i,model:a,startedAt:o,updatedAt:s,...typeof e.sessionKey==`string`?{sessionKey:e.sessionKey}:{},...typeof e.runId==`string`?{runId:e.runId}:{}}}function sx(e){if(!K(e))return null;let t=typeof e.id==`string`&&e.id.trim()?e.id.trim():``,n=Hb.includes(e.kind)?e.kind:null,r=typeof e.at==`number`&&Number.isFinite(e.at)?e.at:0;if(!t||!n||!r)return null;let i=Lb.includes(e.fromStatus)?e.fromStatus:void 0,a=Lb.includes(e.toStatus)?e.toStatus:void 0;return{id:t,kind:n,at:r,...i?{fromStatus:i}:{},...a?{toStatus:a}:{},...typeof e.sessionKey==`string`?{sessionKey:e.sessionKey}:{},...typeof e.runId==`string`?{runId:e.runId}:{}}}function cx(e){return Array.isArray(e)?e.map(sx).filter(e=>e!==null):[]}function lx(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`&&e.trim()!==``):[]}function ux(e){if(!K(e))return;let t=K(e.workspace)?{kind:e.workspace.kind===`scratch`||e.workspace.kind===`dir`||e.workspace.kind===`worktree`?e.workspace.kind:void 0,...typeof e.workspace.path==`string`?{path:e.workspace.path}:{},...typeof e.workspace.branch==`string`?{branch:e.workspace.branch}:{}}:void 0,n={...typeof e.tenant==`string`?{tenant:e.tenant}:{},...typeof e.boardId==`string`?{boardId:e.boardId}:{},...typeof e.createdByCardId==`string`?{createdByCardId:e.createdByCardId}:{},...typeof e.idempotencyKey==`string`?{idempotencyKey:e.idempotencyKey}:{},...lx(e.skills).length?{skills:lx(e.skills)}:{},...t?.kind?{workspace:t}:{},...typeof e.maxRuntimeSeconds==`number`?{maxRuntimeSeconds:e.maxRuntimeSeconds}:{},...typeof e.maxRetries==`number`?{maxRetries:e.maxRetries}:{},...typeof e.scheduledAt==`number`?{scheduledAt:e.scheduledAt}:{},...typeof e.summary==`string`?{summary:e.summary}:{},...lx(e.createdCardIds).length?{createdCardIds:lx(e.createdCardIds)}:{},...typeof e.dispatchCount==`number`?{dispatchCount:e.dispatchCount}:{},...typeof e.lastDispatchAt==`number`?{lastDispatchAt:e.lastDispatchAt}:{}};return Object.keys(n).length?n:void 0}function dx(e){if(!K(e))return;let t=Array.isArray(e.attempts)?e.attempts.flatMap(e=>{if(!K(e)||typeof e.id!=`string`||typeof e.startedAt!=`number`)return[];let t=Ub.includes(e.status)?e.status:`running`;return[{id:e.id,status:t,startedAt:e.startedAt,...typeof e.endedAt==`number`?{endedAt:e.endedAt}:{},...zb.includes(e.engine)?{engine:e.engine}:{},...Bb.includes(e.mode)?{mode:e.mode}:{},...typeof e.model==`string`?{model:e.model}:{},...typeof e.sessionKey==`string`?{sessionKey:e.sessionKey}:{},...typeof e.runId==`string`?{runId:e.runId}:{},...typeof e.error==`string`?{error:e.error}:{}}]}):[],n=Array.isArray(e.comments)?e.comments.flatMap(e=>!K(e)||typeof e.id!=`string`||typeof e.body!=`string`||typeof e.createdAt!=`number`?[]:[{id:e.id,body:e.body,createdAt:e.createdAt,...typeof e.updatedAt==`number`?{updatedAt:e.updatedAt}:{}}]):[],r=Array.isArray(e.links)?e.links.flatMap(e=>!K(e)||typeof e.id!=`string`||typeof e.createdAt!=`number`?[]:[{id:e.id,type:Wb.includes(e.type)?e.type:`relates_to`,createdAt:e.createdAt,...typeof e.targetCardId==`string`?{targetCardId:e.targetCardId}:{},...typeof e.title==`string`?{title:e.title}:{},...typeof e.url==`string`?{url:e.url}:{}}]):[],i=Array.isArray(e.proof)?e.proof.flatMap(e=>!K(e)||typeof e.id!=`string`||typeof e.createdAt!=`number`?[]:[{id:e.id,status:Gb.includes(e.status)?e.status:`unknown`,createdAt:e.createdAt,...typeof e.label==`string`?{label:e.label}:{},...typeof e.command==`string`?{command:e.command}:{},...typeof e.url==`string`?{url:e.url}:{},...typeof e.note==`string`?{note:e.note}:{}}]):[],a=Array.isArray(e.artifacts)?e.artifacts.flatMap(e=>!K(e)||typeof e.id!=`string`||typeof e.createdAt!=`number`?[]:[{id:e.id,createdAt:e.createdAt,...typeof e.label==`string`?{label:e.label}:{},...typeof e.url==`string`?{url:e.url}:{},...typeof e.path==`string`?{path:e.path}:{},...typeof e.mimeType==`string`?{mimeType:e.mimeType}:{}}]):[],o=K(e.claim)?{ownerId:typeof e.claim.ownerId==`string`?e.claim.ownerId:``,...typeof e.claim.token==`string`?{token:e.claim.token}:{},claimedAt:typeof e.claim.claimedAt==`number`?e.claim.claimedAt:0,lastHeartbeatAt:typeof e.claim.lastHeartbeatAt==`number`?e.claim.lastHeartbeatAt:0,...typeof e.claim.expiresAt==`number`?{expiresAt:e.claim.expiresAt}:{}}:void 0,s=Array.isArray(e.diagnostics)?e.diagnostics.flatMap(e=>!K(e)||typeof e.kind!=`string`||typeof e.title!=`string`?[]:[{kind:e.kind,severity:qb.includes(e.severity)?e.severity:`warning`,title:e.title,detail:typeof e.detail==`string`?e.detail:e.title,firstSeenAt:typeof e.firstSeenAt==`number`?e.firstSeenAt:Date.now(),lastSeenAt:typeof e.lastSeenAt==`number`?e.lastSeenAt:Date.now(),count:typeof e.count==`number`?e.count:1}]):[],c=Array.isArray(e.notifications)?e.notifications.flatMap(e=>!K(e)||typeof e.id!=`string`||typeof e.kind!=`string`||typeof e.message!=`string`||typeof e.createdAt!=`number`?[]:[{id:e.id,kind:e.kind,message:e.message,createdAt:e.createdAt,...typeof e.sessionKey==`string`?{sessionKey:e.sessionKey}:{},...typeof e.runId==`string`?{runId:e.runId}:{}}]):[],l=K(e.stale)?{detectedAt:typeof e.stale.detectedAt==`number`?e.stale.detectedAt:Date.now(),...typeof e.stale.lastSessionUpdatedAt==`number`?{lastSessionUpdatedAt:e.stale.lastSessionUpdatedAt}:{},reason:typeof e.stale.reason==`string`?e.stale.reason:`Session has not reported recent activity.`}:void 0,u=ux(e.automation),d={...t.length?{attempts:t}:{},...n.length?{comments:n}:{},...r.length?{links:r}:{},...i.length?{proof:i}:{},...a.length?{artifacts:a}:{},...u?{automation:u}:{},...o?.ownerId&&o.claimedAt?{claim:o}:{},...s.length?{diagnostics:s}:{},...c.length?{notifications:c}:{},...Kb.includes(e.templateId)?{templateId:e.templateId}:{},...typeof e.archivedAt==`number`?{archivedAt:e.archivedAt}:{},...l?{stale:l}:{},...typeof e.failureCount==`number`?{failureCount:e.failureCount}:{}};return Object.keys(d).length?d:void 0}function fx(e){if(!K(e))return null;let t=typeof e.id==`string`?e.id:``,n=typeof e.title==`string`?e.title:``,r=Lb.includes(e.status)?e.status:`todo`,i=Rb.includes(e.priority)?e.priority:`normal`;if(!t||!n)return null;let a=ox(e.execution),o=cx(e.events),s=dx(e.metadata);return{id:t,title:n,status:r,priority:i,labels:Array.isArray(e.labels)?e.labels.filter(e=>typeof e==`string`):[],position:typeof e.position==`number`?e.position:0,createdAt:typeof e.createdAt==`number`?e.createdAt:0,updatedAt:typeof e.updatedAt==`number`?e.updatedAt:0,...typeof e.notes==`string`?{notes:e.notes}:{},...typeof e.agentId==`string`?{agentId:e.agentId}:{},...typeof e.sessionKey==`string`?{sessionKey:e.sessionKey}:{},...typeof e.runId==`string`?{runId:e.runId}:{},...typeof e.taskId==`string`?{taskId:e.taskId}:{},...typeof e.sourceUrl==`string`?{sourceUrl:e.sourceUrl}:{},...a?{execution:a}:{},...typeof e.startedAt==`number`?{startedAt:e.startedAt}:{},...typeof e.completedAt==`number`?{completedAt:e.completedAt}:{},...o.length?{events:o}:{},...s?{metadata:s}:{}}}function px(e){if(!K(e))return{cards:[],statuses:Lb};let t=Array.isArray(e.cards)?e.cards.map(fx).filter(e=>e!==null):[],n=Array.isArray(e.statuses)?e.statuses.filter(e=>Lb.includes(e)):Lb;return{cards:t,statuses:n.length?n:Lb}}function mx(e){let t=K(e)?fx(e.card):null;if(!t)throw Error(`工作台响应中没有包含卡片`);return t}async function hx(e){let t=ix(e.host);if(!e.client||!e.force&&(t.loaded||t.loadAttempted))return;let n=e.client,r=Xb.get(e.host);if(r){await r;return}t.loadAttempted=!0,t.loading=!0,t.error=null,e.requestUpdate?.();let i=(async()=>{try{let e=px(await n.request(`workboard.cards.list`,{}));t.cards=e.cards,t.statuses=e.statuses,t.loaded=!0}catch(e){t.error=ax(e)}finally{t.loading=!1,Xb.delete(e.host),e.requestUpdate?.()}})();Xb.set(e.host,i),await i}function gx(e,t){let n=e.cards.filter(e=>e.id!==t.id);n.push(t),e.cards=n.toSorted((e,t)=>e.position-t.position)}function _x(e,t){let n=[];for(let r of e){if(r.id===t)continue;let e=r.metadata?.links;if(!e?.some(e=>e.targetCardId===t)){n.push(r);continue}let i=e.filter(e=>e.targetCardId!==t),a={...r.metadata,links:i};i.length===0&&delete a.links,n.push(Object.keys(a).length?{...r,metadata:a}:{...r,metadata:void 0})}return n}function vx(e){e.draftOpen=!1,e.editingCardId=null,e.draftTitle=``,e.draftNotes=``,e.draftStatus=`todo`,e.draftPriority=`normal`,e.draftLabels=``,e.draftAgentId=``,e.draftSessionKey=``,e.draftTemplateId=``}function yx(e){let t=[];for(let n of e.split(`,`)){let e=n.trim();if(e&&!t.includes(e)&&t.push(e),t.length>=12)break}return t}function bx(e){return{title:e.draftTitle,notes:e.draftNotes,status:e.draftStatus,priority:e.draftPriority,labels:yx(e.draftLabels),agentId:e.draftAgentId,sessionKey:e.draftSessionKey,...e.draftTemplateId?{templateId:e.draftTemplateId}:{}}}function xx(e){return e===`failed`||e===`killed`||e===`timeout`}function Sx(e){if(e.status===`running`&&e.hasActiveRun===!1&&!(typeof e.updatedAt!=`number`||Date.now()-e.updatedAt<nx))return{detectedAt:Date.now(),lastSessionUpdatedAt:e.updatedAt,reason:`Linked session has not reported recent activity.`}}function Cx(e){return e.sessionKey??e.execution?.sessionKey}function wx(e){return e.runId??e.execution?.runId}function Tx(e,t){let n=tS(e,t);return Cx(e)?n?Sx(n)?{session:n,state:`stale`,targetStatus:`running`}:n.hasActiveRun===!0||n.status===`running`?{session:n,state:`running`,targetStatus:`running`}:n.abortedLastRun||xx(n.status)?{session:n,state:`failed`,targetStatus:`blocked`}:n.status===`done`?{session:n,state:`succeeded`,targetStatus:`review`}:{session:n,state:`idle`}:{session:null,state:`missing`}:{session:null,state:`unlinked`}}function Ex(e,t){return!t||e.status===t?!1:t===`running`?e.status===`backlog`||e.status===`todo`||e.status===`ready`:t===`blocked`||t===`review`?e.status===`running`||e.status===`todo`||e.status===`ready`:!1}function Dx(e){switch(e.state){case`running`:case`stale`:return`running`;case`succeeded`:return`review`;case`failed`:return`blocked`;case`missing`:return;case`idle`:return`idle`;case`unlinked`:return}}function Ox(e,t){return!!(e.execution&&t&&e.execution.status!==t)}function kx(e,t){let n=t.session;return[e.id,e.status,e.updatedAt,t.targetStatus??``,t.state,n?.status??``,n?.hasActiveRun===!0?`active`:`idle`,n?.updatedAt??``,e.execution?.status??``,e.execution?.updatedAt??``].join(`:`)}var Ax=new WeakMap;function jx(e){let t=Ax.get(e);return t||(t=new Map,Ax.set(e,t)),t}function Mx(e){return typeof e==`string`&&e.trim()?e.trim():null}function Nx(e){return typeof e==`string`?e:Array.isArray(e)?e.map(e=>K(e)?typeof e.text==`string`?e.text:typeof e.content==`string`?e.content:``:``).filter(Boolean).join(`
70
70
  `).trim():``}function Px(e,t,n){let r=n===`first`?e:e.toReversed();for(let e of r){if(!K(e)||e.role!==t)continue;let n=Nx(e.content).trim();if(n)return n}return null}function Fx(e){let t=e.replace(/\s+/g,` `).trim();return t.length<=$b?t:`${t.slice(0,$b-3).trimEnd()}...`}function Ix(e){let t=e.replace(/\s+/g,` `).trim();return t.length<=ex?t:`${t.slice(0,ex-3).trimEnd()}...`}function Lx(e,t){return Ix(Mx(e.label)??Mx(e.displayName)??t??e.key)}function Rx(e){return e.hasActiveRun===!0||e.status===`running`?`running`:e.abortedLastRun||xx(e.status)?`blocked`:e.status===`done`?`review`:`todo`}async function zx(e){try{let t=await e.client.request(`chat.history`,{sessionKey:e.sessionKey,limit:Zb,maxChars:Qb});return K(t)&&Array.isArray(t.messages)?t.messages:[]}catch{return[]}}function Bx(e){let t=[`Session: ${e.session.key}`];return e.recentUserText&&t.push(``,`Recent user prompt: ${Fx(e.recentUserText)}`),e.lastAssistantText&&t.push(``,`Latest assistant note: ${Fx(e.lastAssistantText)}`),t.join(`
@@ -492,7 +492,7 @@ This replaces the current active transcript for the session key.`)}function $m(e
492
492
  ${e}
493
493
  \`\`\``;let n=mT(e);return n.includes("```")?n:`\`\`\`text
494
494
  ${e}
495
- \`\`\``}function jT(e){let t=e?.trim().replace(/\s+/g,` `);if(t)return t.replace(/^with\s+/i,``).trim()||t}function MT(e){let t=jT(e);if(t)return t.slice(0,120)}function NT(e,t,n){for(let r=e.length-1;r>=0;r--){let i=e[r];if(i&&(i.id===t||i.name===n&&!i.outputText))return i}}function PT(e,t=`tool`){let n=e,r=_T(n.content),i=bT(n),a=[];for(let e=0;e<r.length;e++){let o=r[e]??{},s=(typeof o.type==`string`?o.type:``).toLowerCase();if([`toolcall`,`tool_call`,`tooluse`,`tool_use`].includes(s)||typeof o.name==`string`&&(o.arguments!=null||o.args!=null||o.input!=null)){let r=vT(o.arguments??o.args??o.input);a.push({id:OT(o,n,e,t),name:typeof o.name==`string`?o.name:`tool`,args:r,inputText:kT(r)});continue}if(s===`toolresult`||s===`tool_result`){let r=typeof o.name==`string`?o.name:`tool`,s=OT(o,n,e,t),c=NT(a,s,r),l=yT(o),u=DT(l,r),d=bT(o)??i;if(c){c.outputText=l,c.preview=u,d!==void 0&&(c.isError=d);continue}a.push({id:s,name:r,outputText:l,...d===void 0?{}:{isError:d},preview:u})}}let o=typeof n.role==`string`?n.role.toLowerCase():``;if((IC(e)||o===`tool`||o===`function`||typeof n.toolName==`string`||typeof n.tool_name==`string`)&&a.length===0){let r=typeof n.toolName==`string`&&n.toolName||typeof n.tool_name==`string`&&n.tool_name||`tool`,o=Iu(e)??void 0;a.push({id:OT({},n,0,t),name:r,outputText:o,...i===void 0?{}:{isError:i},preview:DT(o,r)})}return a}function FT(e){let t=fT({name:e.name,args:e.args}),n=pT(t),r=ET(e),i=[`## ${t.label}`,`**Tool:** \`${t.name}\``];if(n&&i.push(`**Summary:** ${n}`),e.inputText?.trim()){let t=typeof e.args==`object`&&e.args!==null;i.push(`### Tool input\n${AT(e.inputText,t?`json`:`text`)}`)}return e.outputText?.trim()?i.push(`### ${r?`Tool error`:`Tool output`}\n${mT(e.outputText)}`):i.push(r?`### Tool error
495
+ \`\`\``}function jT(e){let t=e?.trim().replace(/\s+/g,` `);if(t)return t.replace(/^with\s+/i,``).trim()||t}function MT(e){let t=jT(e);if(t)return t.slice(0,120)}function NT(e,t,n){for(let r=e.length-1;r>=0;r--){let i=e[r];if(i&&(i.id===t||i.name===n&&!i.outputText))return i}}function PT(e,t=`tool`){let n=e,r=_T(n.content),i=bT(n),a=[];for(let e=0;e<r.length;e++){let o=r[e]??{},s=(typeof o.type==`string`?o.type:``).toLowerCase();if([`toolcall`,`tool_call`,`tooluse`,`tool_use`].includes(s)||typeof o.name==`string`&&(o.arguments!=null||o.args!=null||o.input!=null)){let r=vT(o.arguments??o.args??o.input);a.push({id:OT(o,n,e,t),name:typeof o.name==`string`?o.name:`tool`,args:r,inputText:kT(r)});continue}if(s===`toolresult`||s===`tool_result`){let r=typeof o.name==`string`?o.name:`tool`,s=OT(o,n,e,t),c=NT(a,s,r),l=yT(o),u=DT(l,r),d=bT(o)??i;if(c){c.outputText=l,c.preview=u,d!==void 0&&(c.isError=d);continue}a.push({id:s,name:r,outputText:l,...d===void 0?{}:{isError:d},preview:u})}}let o=typeof n.role==`string`?n.role.toLowerCase():``;if((IC(e)||o===`tool`||o===`function`||typeof n.toolName==`string`||typeof n.tool_name==`string`)&&a.length===0){let r=typeof n.toolName==`string`&&n.toolName||typeof n.tool_name==`string`&&n.tool_name||`tool`,o=Iu(e)??void 0;a.push({id:OT({},n,0,t),name:r,outputText:o,...i===void 0?{}:{isError:i},preview:DT(o,r)})}return a}function FT(e){let t=fT({name:e.name,args:e.args}),n=pT(t),r=ET(e),i=[`## ${t.label}`,`**Tool:** \`${t.name}\``];if(n&&i.push(`**Summary:** ${n}`),e.inputText?.trim()){let t=typeof e.args==`object`&&e.args!==null;i.push(`### Tool input\n${AT(e.inputText,t?`json`:`text`)}`)}return e.outputText?.trim()?i.push(`### ${v(r?`chat.toolError`:`chat.toolOutput`)}\n${mT(e.outputText)}`):i.push(r?`### Tool error
496
496
  *No output — tool failed.*`:`### Tool output
497
497
  *No output — tool completed successfully.*`),i.join(`
498
498
 
@@ -525,7 +525,7 @@ ${e}
525
525
  <span class="chat-tool-card__raw-toggle-icon">${q.chevronDown}</span>
526
526
  </button>
527
527
  <div class="chat-tool-card__raw-body" hidden>
528
- ${HT({label:`Tool output`,text:e,expanded:!0})}
528
+ ${HT({label:v(`chat.toolOutput`),text:e,expanded:!0})}
529
529
  </div>
530
530
  </div>
531
531
  `}function HT(e){let{label:t,text:n,expanded:r,empty:i}=e;return d`
@@ -552,7 +552,7 @@ ${e}
552
552
  >${q.x}<span>Error</span></span
553
553
  >`:i}
554
554
  </button>
555
- `}function WT(e,t){if(t?.trim())return t;if(typeof e.args==`string`)return MT(e.inputText?.trim()?e.inputText:e.args)}function GT(e,t){let n=!!e.outputText?.trim(),r=fT({name:e.name,args:e.args,detailMode:`explain`}),a=ET(e),o=a?void 0:WT(e,r.detail),s=a?`Tool error`:o??r.label,c=a?r.label:o&&n?`output`:void 0;return d`
555
+ `}function WT(e,t){if(t?.trim())return t;if(typeof e.args==`string`)return MT(e.inputText?.trim()?e.inputText:e.args)}function GT(e,t){let n=!!e.outputText?.trim(),r=fT({name:e.name,args:e.args,detailMode:`explain`}),a=ET(e),o=a?void 0:WT(e,r.detail),s=a?v(`chat.toolError`):o??r.label,c=a?r.label:o&&n?`output`:void 0;return d`
556
556
  <div
557
557
  class="chat-tool-msg-collapse chat-tool-msg-collapse--manual ${t.expanded?`is-open`:``}"
558
558
  >
@@ -588,11 +588,11 @@ ${e}
588
588
  `:i}
589
589
  </div>
590
590
  ${s?d`<div class="chat-tool-card__detail">${s}</div>`:i}
591
- ${l?HT({label:`Tool input`,text:e.inputText,expanded:!0}):i}
592
- ${c?e.preview?d`${m} ${VT(e.outputText)}`:HT({label:u?`Tool error`:`Tool output`,text:e.outputText,expanded:!0}):i}
591
+ ${l?HT({label:v(`chat.toolInput`),text:e.inputText,expanded:!0}):i}
592
+ ${c?e.preview?d`${m} ${VT(e.outputText)}`:HT({label:v(u?`chat.toolError`:`chat.toolOutput`),text:e.outputText,expanded:!0}):i}
593
593
  </div>
594
594
  `}function qT(e,t,n){let r=e,i=Array.isArray(r.content)?[...r.content]:typeof r.content==`string`?[{type:`text`,text:r.content}]:typeof r.text==`string`?[{type:`text`,text:r.text}]:[];return i.some(e=>{if(!e||typeof e!=`object`)return!1;let n=e;return n.type===`canvas`&&n.preview?.kind===`canvas`&&(t.viewId&&n.preview.viewId===t.viewId||t.url&&n.preview.url===t.url)})?e:{...r,content:[...i,{type:`canvas`,preview:t,...n?{rawText:n}:{}}]}}function JT(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:null}function YT(e){if(!JT(e))return null;try{return YC(e)}catch{return null}}function XT(e){let t=YT(e);if(!t)return null;let n=PT(e,`preview`);for(let e=n.length-1;e>=0;e--){let r=n[e];if(r?.preview?.kind===`canvas`)return{preview:r.preview,text:r.outputText??null,timestamp:t.timestamp??null}}let r=Iu(e)??void 0,i=e,a=DT(r,typeof i.toolName==`string`?i.toolName:typeof i.tool_name==`string`?i.tool_name:void 0);return a?.kind===`canvas`?{preview:a,text:r??null,timestamp:t.timestamp??null}:null}function ZT(e,t){let n=e.map((e,t)=>{if(e.kind!==`message`)return null;let n=e.message;return(typeof n.role==`string`?n.role.toLowerCase():``)===`assistant`?{index:t,timestamp:YT(e.message)?.timestamp??null}:null}).filter(Boolean);if(n.length===0)return null;if(t==null)return n[n.length-1]?.index??null;let r=null,i=null;for(let e of n)if(e.timestamp!=null){if(e.timestamp<=t){r={index:e.index,timestamp:e.timestamp};continue}i={index:e.index,timestamp:e.timestamp};break}if(r&&i){let e=t-r.timestamp;return i.timestamp-t<e?i.index:r.index}return r?r.index:i?i.index:n[n.length-1]?.index??null}function QT(e){let t=[],n=null;for(let r of e){if(r.kind!==`message`){n&&=(t.push(n),null),t.push(r);continue}let e=YC(r.message),i=FC(e.role),a=i.toLowerCase()===`user`?e.senderLabel??null:null,o=e.timestamp||Date.now();!n||n.role!==i||i.toLowerCase()===`user`&&n.senderLabel!==a?(n&&t.push(n),n={kind:`group`,key:`group:${i}:${r.key}`,role:i,senderLabel:a,messages:[{message:r.message,key:r.key,duplicateCount:r.duplicateCount}],timestamp:o,isStreaming:!1}):n.messages.push({message:r.message,key:r.key,duplicateCount:r.duplicateCount})}return n&&t.push(n),t}function $T(e){let t=YT(e);if(!t)return null;let n=FC(t.role).toLowerCase();if(!n||n===`tool`||t.content.length===0)return null;let r=[];for(let e of t.content){if(e.type!==`text`||typeof e.text!=`string`)return null;r.push(e.text)}let i=r.join(`
595
- `).trim().replace(/\s+/g,` `);return i?`${n}:${n===`user`?(t.senderLabel??``).trim():``}:${i}`:null}function eE(e){let t=[],n=null;for(let r of e){if(r.kind!==`message`){t.push(r),n=null;continue}let e=$T(r.message),i=t[t.length-1];if(e&&n===e&&i?.kind===`message`){i.duplicateCount=(i.duplicateCount??1)+1;continue}t.push(r),n=e}return t}function tE(e){let t=YT(e);return t?t.content.length>0||!!t.replyTarget:!1}function nE(e){let t=KC(e);return t.trim().length>0?t:``}function rE(e,t){return!t||!e.startsWith(t)?e:e.slice(t.length).trimStart()}function iE(e){let t=JT(e)?.timestamp;return typeof t==`number`&&Number.isFinite(t)?t:null}function aE(e){switch(e.kind){case`message`:return e.key===`chat:history:notice`?-1/0:iE(e.message);case`divider`:return e.timestamp;case`stream`:return e.startedAt;case`reading-indicator`:return null}return null}function oE(e){return e.map((e,t)=>({item:e,index:t,timestamp:aE(e)})).toSorted((e,t)=>e.timestamp==null&&t.timestamp==null?e.index-t.index:e.timestamp==null?1:t.timestamp==null?-1:e.timestamp===t.timestamp?e.index-t.index:e.timestamp-t.timestamp).map(({item:e})=>e)}var sE=8,cE=400;function lE(e,t,n){return Math.min(n,e+Math.max(0,t))}function uE(e,t,n,r=0){if(t<=0)return 0;if(typeof e==`string`)return Math.min(e.length,t);if(!e||typeof e!=`object`||r>=sE||n.nodes>=cE||n.visited.has(e))return 0;if(n.visited.add(e),n.nodes+=1,Array.isArray(e)){let i=0;for(let a of e)if(i=lE(i,uE(a,t-i,n,r+1),t),i>=t)break;return i}let i=e,a=0;for(let e of[`text`,`content`,`args`,`arguments`,`input`])if(a=lE(a,uE(i[e],t-a,n,r+1),t),a>=t)break;return a}function dE(e,t){let n=JT(e);if(!n)return 1;let r={visited:new WeakSet,nodes:0},i=0;for(let e of[`content`,`text`,`args`,`arguments`,`input`])if(i=lE(i,uE(n[e],t-i,r),t),i>=t)break;return Math.max(i,1)}function fE(e,t){return t?!1:YT(e)?.role.toLowerCase()===`toolresult`}function pE(e,t){let n=0;for(let r of e)fE(r,t)||(n+=1);return n}function mE(e,t){let n=0,r=0,i=e.length;for(let a=e.length-1;a>=0;--a){let o=e[a];if(fE(o,t))continue;if(n>=100)break;let s=dE(o,Math.max(1,Yl-r+1));if(n>0&&r+s>24e4)break;r+=s,n+=1,i=a}return i}function hE(e){let t=[],n=(Array.isArray(e.messages)?e.messages:[]).filter(e=>!lp(e)),r=Array.isArray(e.toolMessages)?e.toolMessages:[],i=r.map(e=>XT(e)).filter(e=>!!e),a=mE(n,e.showToolCalls),o=pE(n.slice(0,a),e.showToolCalls),s=pE(n.slice(a),e.showToolCalls);o>0&&t.push({kind:`message`,key:`chat:history:notice`,message:{role:`system`,content:`Showing last ${s} messages (${o} hidden).`,timestamp:Date.now()}});for(let r=a;r<n.length;r++){let i=n[r],a=YT(i);if(!a)continue;let o=(JT(i)??{}).__fengming;if(o&&o.kind===`compaction`){t.push({kind:`divider`,key:typeof o.id==`string`?`divider:compaction:${o.id}`:`divider:compaction:${a.timestamp}:${r}`,label:`Compacted history`,description:`The compacted transcript is preserved as a checkpoint. Open session checkpoints to branch or restore from that compacted view.`,action:{kind:`session-checkpoints`,label:`Open checkpoints`},timestamp:a.timestamp??Date.now()});continue}if(!e.showToolCalls&&a.role.toLowerCase()===`toolresult`)continue;let s=e.searchQuery??``;e.searchOpen&&s.trim()&&!XC(i,s)||!tE(i)&&a.role.toLowerCase()!==`assistant`||t.push({kind:`message`,key:gE(i,r),message:i})}for(let e of i){let n=ZT(t,e.timestamp);if(n==null)continue;let r=t[n];!r||r.kind!==`message`||(t[n]={...r,message:qT(r.message,e.preview,e.text)})}t=t.filter(e=>e.kind!==`message`||tE(e.message));let c=e.streamSegments??[],l=Math.max(c.length,r.length),u=null;for(let i=0;i<l;i++){if(i<c.length){let n=nE(c[i].text),r=rE(n,u);n.length>0&&(u=n),r.length>0&&t.push({kind:`stream`,key:`stream-seg:${e.sessionKey}:${i}`,text:r,startedAt:c[i].ts})}i<r.length&&e.showToolCalls&&t.push({kind:`message`,key:gE(r[i],i+n.length),message:r[i]})}if(e.stream!==null){let n=`stream:${e.sessionKey}:${e.streamStartedAt??`live`}`,r=rE(nE(e.stream),u);r.length>0?op(r).shouldSkip||t.push({kind:`stream`,key:n,text:r,startedAt:e.streamStartedAt??Date.now()}):e.stream.trim().length===0&&t.push({kind:`reading-indicator`,key:n})}return QT(eE(oE(t)))}function gE(e,t){let n=JT(e)??{},r=typeof n.toolCallId==`string`?n.toolCallId:``;if(r){let e=typeof n.role==`string`?n.role:`unknown`,i=typeof n.id==`string`?n.id:``;if(i)return`tool:${e}:${r}:${i}`;let a=typeof n.messageId==`string`?n.messageId:``;if(a)return`tool:${e}:${r}:${a}`;let o=typeof n.timestamp==`number`?n.timestamp:null;return o==null?`tool:${e}:${r}:${t}`:`tool:${e}:${r}:${o}:${t}`}let i=typeof n.id==`string`?n.id:``;if(i)return`msg:${i}`;let a=typeof n.messageId==`string`?n.messageId:``;if(a)return`msg:${a}`;let o=typeof n.timestamp==`number`?n.timestamp:null,s=typeof n.role==`string`?n.role:`unknown`;return o==null?`msg:${s}:${t}`:`msg:${s}:${o}:${t}`}function _E(e){switch(e.sendState){case`sending`:return`Sending`;case`waiting-reconnect`:return v(`chat.waitingReconnect`);case`failed`:return`Failed`;default:return null}}function vE(e){return e.queue.length?d`
595
+ `).trim().replace(/\s+/g,` `);return i?`${n}:${n===`user`?(t.senderLabel??``).trim():``}:${i}`:null}function eE(e){let t=[],n=null;for(let r of e){if(r.kind!==`message`){t.push(r),n=null;continue}let e=$T(r.message),i=t[t.length-1];if(e&&n===e&&i?.kind===`message`){i.duplicateCount=(i.duplicateCount??1)+1;continue}t.push(r),n=e}return t}function tE(e){let t=YT(e);return t?t.content.length>0||!!t.replyTarget:!1}function nE(e){let t=KC(e);return t.trim().length>0?t:``}function rE(e,t){return!t||!e.startsWith(t)?e:e.slice(t.length).trimStart()}function iE(e){let t=JT(e)?.timestamp;return typeof t==`number`&&Number.isFinite(t)?t:null}function aE(e){switch(e.kind){case`message`:return e.key===`chat:history:notice`?-1/0:iE(e.message);case`divider`:return e.timestamp;case`stream`:return e.startedAt;case`reading-indicator`:return null}return null}function oE(e){return e.map((e,t)=>({item:e,index:t,timestamp:aE(e)})).toSorted((e,t)=>e.timestamp==null&&t.timestamp==null?e.index-t.index:e.timestamp==null?1:t.timestamp==null?-1:e.timestamp===t.timestamp?e.index-t.index:e.timestamp-t.timestamp).map(({item:e})=>e)}var sE=8,cE=400;function lE(e,t,n){return Math.min(n,e+Math.max(0,t))}function uE(e,t,n,r=0){if(t<=0)return 0;if(typeof e==`string`)return Math.min(e.length,t);if(!e||typeof e!=`object`||r>=sE||n.nodes>=cE||n.visited.has(e))return 0;if(n.visited.add(e),n.nodes+=1,Array.isArray(e)){let i=0;for(let a of e)if(i=lE(i,uE(a,t-i,n,r+1),t),i>=t)break;return i}let i=e,a=0;for(let e of[`text`,`content`,`args`,`arguments`,`input`])if(a=lE(a,uE(i[e],t-a,n,r+1),t),a>=t)break;return a}function dE(e,t){let n=JT(e);if(!n)return 1;let r={visited:new WeakSet,nodes:0},i=0;for(let e of[`content`,`text`,`args`,`arguments`,`input`])if(i=lE(i,uE(n[e],t-i,r),t),i>=t)break;return Math.max(i,1)}function fE(e,t){return t?!1:YT(e)?.role.toLowerCase()===`toolresult`}function pE(e,t){let n=0;for(let r of e)fE(r,t)||(n+=1);return n}function mE(e,t){let n=0,r=0,i=e.length;for(let a=e.length-1;a>=0;--a){let o=e[a];if(fE(o,t))continue;if(n>=100)break;let s=dE(o,Math.max(1,Yl-r+1));if(n>0&&r+s>24e4)break;r+=s,n+=1,i=a}return i}function hE(e){let t=[],n=(Array.isArray(e.messages)?e.messages:[]).filter(e=>!lp(e)),r=Array.isArray(e.toolMessages)?e.toolMessages:[],i=r.map(e=>XT(e)).filter(e=>!!e),a=mE(n,e.showToolCalls),o=pE(n.slice(0,a),e.showToolCalls),s=pE(n.slice(a),e.showToolCalls);o>0&&t.push({kind:`message`,key:`chat:history:notice`,message:{role:`system`,content:v(`chat.historyNotice`,{visible:String(s),hidden:String(o)}),timestamp:Date.now()}});for(let r=a;r<n.length;r++){let i=n[r],a=YT(i);if(!a)continue;let o=(JT(i)??{}).__fengming;if(o&&o.kind===`compaction`){t.push({kind:`divider`,key:typeof o.id==`string`?`divider:compaction:${o.id}`:`divider:compaction:${a.timestamp}:${r}`,label:v(`chat.compactedHistory`),description:v(`chat.compactedHistoryHint`),action:{kind:`session-checkpoints`,label:v(`chat.openCheckpoints`)},timestamp:a.timestamp??Date.now()});continue}if(!e.showToolCalls&&a.role.toLowerCase()===`toolresult`)continue;let s=e.searchQuery??``;e.searchOpen&&s.trim()&&!XC(i,s)||!tE(i)&&a.role.toLowerCase()!==`assistant`||t.push({kind:`message`,key:gE(i,r),message:i})}for(let e of i){let n=ZT(t,e.timestamp);if(n==null)continue;let r=t[n];!r||r.kind!==`message`||(t[n]={...r,message:qT(r.message,e.preview,e.text)})}t=t.filter(e=>e.kind!==`message`||tE(e.message));let c=e.streamSegments??[],l=Math.max(c.length,r.length),u=null;for(let i=0;i<l;i++){if(i<c.length){let n=nE(c[i].text),r=rE(n,u);n.length>0&&(u=n),r.length>0&&t.push({kind:`stream`,key:`stream-seg:${e.sessionKey}:${i}`,text:r,startedAt:c[i].ts})}i<r.length&&e.showToolCalls&&t.push({kind:`message`,key:gE(r[i],i+n.length),message:r[i]})}if(e.stream!==null){let n=`stream:${e.sessionKey}:${e.streamStartedAt??`live`}`,r=rE(nE(e.stream),u);r.length>0?op(r).shouldSkip||t.push({kind:`stream`,key:n,text:r,startedAt:e.streamStartedAt??Date.now()}):e.stream.trim().length===0&&t.push({kind:`reading-indicator`,key:n})}return QT(eE(oE(t)))}function gE(e,t){let n=JT(e)??{},r=typeof n.toolCallId==`string`?n.toolCallId:``;if(r){let e=typeof n.role==`string`?n.role:`unknown`,i=typeof n.id==`string`?n.id:``;if(i)return`tool:${e}:${r}:${i}`;let a=typeof n.messageId==`string`?n.messageId:``;if(a)return`tool:${e}:${r}:${a}`;let o=typeof n.timestamp==`number`?n.timestamp:null;return o==null?`tool:${e}:${r}:${t}`:`tool:${e}:${r}:${o}:${t}`}let i=typeof n.id==`string`?n.id:``;if(i)return`msg:${i}`;let a=typeof n.messageId==`string`?n.messageId:``;if(a)return`msg:${a}`;let o=typeof n.timestamp==`number`?n.timestamp:null,s=typeof n.role==`string`?n.role:`unknown`;return o==null?`msg:${s}:${t}`:`msg:${s}:${o}:${t}`}function _E(e){switch(e.sendState){case`sending`:return`Sending`;case`waiting-reconnect`:return v(`chat.waitingReconnect`);case`failed`:return`Failed`;default:return null}}function vE(e){return e.queue.length?d`
596
596
  <div class="chat-queue" role="status" aria-live="polite">
597
597
  <div class="chat-queue__title">Queued (${e.queue.length})</div>
598
598
  <div class="chat-queue__list">
@@ -626,7 +626,7 @@ ${e}
626
626
  class="btn chat-queue__steer"
627
627
  type="button"
628
628
  title=${v(`chat.queue.steerNow`)}
629
- aria-label="Steer queued message"
629
+ aria-label=${v(`chat.steerQueued`)}
630
630
  @click=${()=>e.onQueueSteer?.(t.id)}
631
631
  >
632
632
  ${q.cornerDownRight}
@@ -636,7 +636,7 @@ ${e}
636
636
  <button
637
637
  class="btn chat-queue__remove"
638
638
  type="button"
639
- aria-label="Remove queued message"
639
+ aria-label=${v(`chat.removeQueued`)}
640
640
  @click=${()=>e.onQueueRemove(t.id)}
641
641
  >
642
642
  ${q.x}
@@ -715,7 +715,7 @@ ${e}
715
715
  class="context-notice__action ${n.compactBusy?`context-notice__action--busy`:``}"
716
716
  type="button"
717
717
  title=${v(`chat.context.compactSession`)}
718
- aria-label="Compact recommended session context"
718
+ aria-label=${v(`chat.compactRecommended`)}
719
719
  ?disabled=${o}
720
720
  @click=${e=>{e.preventDefault(),e.stopPropagation(),!o&&n.onCompact?.()}}
721
721
  >
@@ -778,7 +778,7 @@ ${e}
778
778
  class="chat-avatar ${h} chat-avatar--logo"
779
779
  src="${l}"
780
780
  alt="${o}"
781
- />`:d`<div class="chat-avatar ${h}">${m}</div>`}function SD(e){let t=e.trim();return t.startsWith(`blob:`)||va(t)}var CD=1500,wD=2e3,TD=v(`chat.copyAsMarkdown`),ED=`Copied`,DD=`Copy failed`;async function OD(e){if(!e)return!1;try{return await navigator.clipboard.writeText(e),!0}catch{return!1}}function kD(e,t){e.title=t,e.setAttribute(`aria-label`,t)}function AD(e){let t=e.label??TD;return d`
781
+ />`:d`<div class="chat-avatar ${h}">${m}</div>`}function SD(e){let t=e.trim();return t.startsWith(`blob:`)||va(t)}var CD=1500,wD=2e3,TD=v(`chat.copyAsMarkdown`),ED=`Copied`,DD=v(`chat.copyFailed`);async function OD(e){if(!e)return!1;try{return await navigator.clipboard.writeText(e),!0}catch{return!1}}function kD(e,t){e.title=t,e.setAttribute(`aria-label`,t)}function AD(e){let t=e.label??TD;return d`
782
782
  <button
783
783
  class="btn btn--xs chat-copy-btn"
784
784
  type="button"
@@ -791,7 +791,7 @@ ${e}
791
791
  <span class="chat-copy-btn__icon-check">${q.check}</span>
792
792
  </span>
793
793
  </button>
794
- `}function jD(e,t=TD){return AD({text:()=>e,label:t})}function MD(e){return jD(e,TD)}var ND=new Map,PD=new Map,FD=5e3,ID=3e4;function LD(e){let t=new Date(e);return Number.isFinite(t.getTime())?{label:t.toLocaleString([],{month:`short`,day:`numeric`,year:`numeric`,hour:`numeric`,minute:`2-digit`}),title:t.toLocaleString([],{weekday:`long`,month:`long`,day:`numeric`,year:`numeric`,hour:`numeric`,minute:`2-digit`,second:`2-digit`,timeZoneName:`short`}),dateTime:t.toISOString()}:{label:`Unknown date`,title:`Unknown date`,dateTime:``}}function RD(e){let t=LD(e);return d`
794
+ `}function jD(e,t=TD){return AD({text:()=>e,label:t})}function MD(e){return jD(e,TD)}var ND=new Map,PD=new Map,FD=5e3,ID=3e4;function LD(e){let t=new Date(e);return Number.isFinite(t.getTime())?{label:t.toLocaleString([],{month:`short`,day:`numeric`,year:`numeric`,hour:`numeric`,minute:`2-digit`}),title:t.toLocaleString([],{weekday:`long`,month:`long`,day:`numeric`,year:`numeric`,hour:`numeric`,minute:`2-digit`,second:`2-digit`,timeZoneName:`short`}),dateTime:t.toISOString()}:{label:v(`chat.unknownDate`),title:v(`chat.unknownDate`),dateTime:``}}function RD(e){let t=LD(e);return d`
795
795
  <time class="chat-group-timestamp" datetime=${t.dateTime} title=${t.title}>
796
796
  ${t.label}
797
797
  </time>
@@ -842,7 +842,7 @@ ${e}
842
842
  <button
843
843
  class="chat-group-delete"
844
844
  title="Delete"
845
- aria-label="Delete message"
845
+ aria-label=${v(`chat.deleteMessage`)}
846
846
  @click=${n=>{if(lO()){e();return}let r=n.currentTarget,i=r.closest(`.chat-delete-wrap`),a=i?.querySelector(`.chat-delete-confirm`);if(a){uO(a);return}let o=document.createElement(`div`);o.className=`chat-delete-confirm chat-delete-confirm--${t}`,o.innerHTML=`
847
847
  <p class="chat-delete-confirm__text">${v(`chat.messages.deleteConfirm`)}</p>
848
848
  <label class="chat-delete-confirm__remember">
@@ -861,7 +861,7 @@ ${e}
861
861
  `}function hO(e,t){return e.flatMap(e=>{let n=vO(e.url),r=n&&SO(e.url,t?.localMediaPreviewRoots??[]);if(n&&!r)return[];let i=r?jO(e.url,t?.localMediaPreviewRoots??[],t?.basePath,t?.authToken,t?.onRequestUpdate):{status:`available`};if(i.status!==`available`)return[];let a=r?CO(e.url,t?.basePath,i.mediaTicket):e.url;return[{...e,displayUrl:a}]})}function gO(e,t){if(e.length===0)return i;let n=e=>{vD(e,{allowDataImage:!0})},r=(e,t)=>d`
862
862
  <img
863
863
  src=${t}
864
- alt=${e.alt??`Attached image`}
864
+ alt=${e.alt??v(`chat.attachedImage`)}
865
865
  class="chat-message-image"
866
866
  width=${e.width??i}
867
867
  height=${e.height??i}
@@ -871,10 +871,10 @@ ${e}
871
871
  <div class="chat-reply-pill">
872
872
  <span class="chat-reply-pill__icon">${q.messageSquare}</span>
873
873
  <span class="chat-reply-pill__label">
874
- ${e.kind===`current`?`Replying to current message`:`Replying to ${e.id}`}
874
+ ${e.kind===`current`?v(`chat.replyingToCurrent`):`Replying to ${e.id}`}
875
875
  </span>
876
876
  </div>
877
- `:i}function vO(e){let t=e.trim();return/^\/(?:__fengming__|media|api\/chat\/media\/outgoing)\//.test(t)?!1:t.startsWith(`file://`)||t.startsWith(`~`)||t.startsWith(`/`)||/^[a-zA-Z]:[\\/]/.test(t)}function yO(e){let t=e.trim();if(!vO(t))return null;if(t.startsWith(`file://`))try{let e=new URL(t),n=decodeURIComponent(e.pathname);return/^\/[a-zA-Z]:\//.test(n)?n.slice(1):n}catch{return null}return t.startsWith(`~`)?null:t}function bO(e){let t=new Set;for(let n of e){let e=xO(n.trim()),r=e.match(/^(\/Users\/[^/]+|\/home\/[^/]+)(?:\/|$)/);if(r?.[1]){t.add(r[1]);continue}let i=e.match(/^([a-z]:\/Users\/[^/]+)(?:\/|$)/i);i?.[1]&&t.add(i[1])}return[...t]}function xO(e){let t=e.replace(/\\/g,`/`).replace(/\/+$/,``);return/^\/[a-zA-Z]:\//.test(t)&&(t=t.slice(1)),/^[a-zA-Z]:\//.test(t)?t.toLowerCase():t}function SO(e,t){let n=yO(e),r=n?[xO(n)]:e.trim().startsWith(`~`)?bO(t).map(t=>xO(e.trim().replace(/^~(?=$|[\\/])/,t))):[];return r.length===0?!1:t.some(e=>{let t=xO(e.trim());return t.length>0&&r.some(e=>e===t||e.startsWith(`${t}/`))})}function CO(e,t,n){if(!vO(e))return e;let r=t&&t!==`/`?t.endsWith(`/`)?t.slice(0,-1):t:``,i=new URLSearchParams({source:e}),a=n?.trim();return a&&i.set(`mediaTicket`,a),`${r}/__fengming__/assistant-media?${i.toString()}`}function wO(e){let t=e.trim();if(t.startsWith(`/api/chat/media/outgoing/`))return!0;try{let e=new URL(t,window.location.origin);return e.origin===window.location.origin&&e.pathname.startsWith(`/api/chat/media/outgoing/`)}catch{return!1}}function TO(e){try{let t=new URL(e,window.location.origin).pathname.split(`/`)[5];return t?decodeURIComponent(t):null}catch{return null}}function EO(e,t){return e.startsWith(`/`)?`${t&&t!==`/`?t.endsWith(`/`)?t.slice(0,-1):t:``}${e}`:e}async function DO(e,t){let n=t?.authToken?.trim()??``,r=EO(e,t?.basePath),i=`${r}::${n}`,a=BD.get(i);if(a)return a;let o=VD.get(i);if(o&&Date.now()-o<HD)return null;let s=zD.get(i);return s||(s=(async()=>{let t=TO(e),a=new Headers({Accept:`image/*`});n&&a.set(`Authorization`,`Bearer ${n}`),t&&a.set(`x-fengming-requester-session-key`,t);let o=await fetch(r,{method:`GET`,headers:a,credentials:`same-origin`});if(!o.ok)return VD.set(i,Date.now()),null;let s=await o.blob();if(!s.type.startsWith(`image/`))return VD.set(i,Date.now()),null;let c=URL.createObjectURL(s);return BD.set(i,c),VD.delete(i),c})().finally(()=>{zD.delete(i)}),zD.set(i,s)),s}function OO(e,t){let n=CO(e,t);return`${n}${n.includes(`?`)?`&`:`?`}meta=1`}function kO(e){let t=PD.get(e);t&&(clearTimeout(t),PD.delete(e))}function AO(e,t,n){if(kO(e),t.status!==`available`||!t.mediaTicket||!t.mediaTicketExpiresAt||!n)return;let r=Math.max(0,t.mediaTicketExpiresAt-Date.now()-ID),i=setTimeout(()=>{PD.delete(e);let r=ND.get(e);r?.status!==`available`||r.mediaTicket!==t.mediaTicket||(ND.delete(e),n())},r);PD.set(e,i)}function jO(e,t,n,r,i){if(!vO(e))return{status:`available`};if(!SO(e,t))return{status:`unavailable`,reason:v(`chat.outsideAllowedFolders`),checkedAt:Date.now()};let a=r?.trim()??``,o=`${n??``}::${a}::${e}`,s=ND.get(o);if(s){let e=Date.now();if(s.status===`unavailable`&&e-s.checkedAt>=FD)ND.delete(o);else if(s.status===`available`&&s.mediaTicket&&(!s.mediaTicketExpiresAt||s.mediaTicketExpiresAt-e<=ID))ND.delete(o);else return AO(o,s,i),s}if(kO(o),ND.set(o,{status:`checking`}),typeof fetch==`function`){let t=new Headers({Accept:`application/json`});a&&t.set(`Authorization`,`Bearer ${a}`),fetch(OO(e,n),{method:`GET`,headers:t,credentials:`same-origin`}).then(async e=>{let t=await e.json().catch(()=>null);if(t?.available===!0){let e=t.mediaTicket?.trim(),n=Date.parse(t.mediaTicketExpiresAt??``);if(e&&!Number.isFinite(n)){kO(o),ND.set(o,{status:`unavailable`,reason:`Attachment unavailable`,checkedAt:Date.now()});return}let r={status:`available`,...e?{mediaTicket:e,mediaTicketExpiresAt:n}:{}};ND.set(o,r),AO(o,r,i)}else kO(o),ND.set(o,{status:`unavailable`,reason:t?.reason?.trim()||`Attachment unavailable`,checkedAt:Date.now()})}).catch(()=>{kO(o),ND.set(o,{status:`unavailable`,reason:`Attachment unavailable`,checkedAt:Date.now()})}).finally(()=>{i?.()})}return{status:`checking`}}function MO(e){return d`
877
+ `:i}function vO(e){let t=e.trim();return/^\/(?:__fengming__|media|api\/chat\/media\/outgoing)\//.test(t)?!1:t.startsWith(`file://`)||t.startsWith(`~`)||t.startsWith(`/`)||/^[a-zA-Z]:[\\/]/.test(t)}function yO(e){let t=e.trim();if(!vO(t))return null;if(t.startsWith(`file://`))try{let e=new URL(t),n=decodeURIComponent(e.pathname);return/^\/[a-zA-Z]:\//.test(n)?n.slice(1):n}catch{return null}return t.startsWith(`~`)?null:t}function bO(e){let t=new Set;for(let n of e){let e=xO(n.trim()),r=e.match(/^(\/Users\/[^/]+|\/home\/[^/]+)(?:\/|$)/);if(r?.[1]){t.add(r[1]);continue}let i=e.match(/^([a-z]:\/Users\/[^/]+)(?:\/|$)/i);i?.[1]&&t.add(i[1])}return[...t]}function xO(e){let t=e.replace(/\\/g,`/`).replace(/\/+$/,``);return/^\/[a-zA-Z]:\//.test(t)&&(t=t.slice(1)),/^[a-zA-Z]:\//.test(t)?t.toLowerCase():t}function SO(e,t){let n=yO(e),r=n?[xO(n)]:e.trim().startsWith(`~`)?bO(t).map(t=>xO(e.trim().replace(/^~(?=$|[\\/])/,t))):[];return r.length===0?!1:t.some(e=>{let t=xO(e.trim());return t.length>0&&r.some(e=>e===t||e.startsWith(`${t}/`))})}function CO(e,t,n){if(!vO(e))return e;let r=t&&t!==`/`?t.endsWith(`/`)?t.slice(0,-1):t:``,i=new URLSearchParams({source:e}),a=n?.trim();return a&&i.set(`mediaTicket`,a),`${r}/__fengming__/assistant-media?${i.toString()}`}function wO(e){let t=e.trim();if(t.startsWith(`/api/chat/media/outgoing/`))return!0;try{let e=new URL(t,window.location.origin);return e.origin===window.location.origin&&e.pathname.startsWith(`/api/chat/media/outgoing/`)}catch{return!1}}function TO(e){try{let t=new URL(e,window.location.origin).pathname.split(`/`)[5];return t?decodeURIComponent(t):null}catch{return null}}function EO(e,t){return e.startsWith(`/`)?`${t&&t!==`/`?t.endsWith(`/`)?t.slice(0,-1):t:``}${e}`:e}async function DO(e,t){let n=t?.authToken?.trim()??``,r=EO(e,t?.basePath),i=`${r}::${n}`,a=BD.get(i);if(a)return a;let o=VD.get(i);if(o&&Date.now()-o<HD)return null;let s=zD.get(i);return s||(s=(async()=>{let t=TO(e),a=new Headers({Accept:`image/*`});n&&a.set(`Authorization`,`Bearer ${n}`),t&&a.set(`x-fengming-requester-session-key`,t);let o=await fetch(r,{method:`GET`,headers:a,credentials:`same-origin`});if(!o.ok)return VD.set(i,Date.now()),null;let s=await o.blob();if(!s.type.startsWith(`image/`))return VD.set(i,Date.now()),null;let c=URL.createObjectURL(s);return BD.set(i,c),VD.delete(i),c})().finally(()=>{zD.delete(i)}),zD.set(i,s)),s}function OO(e,t){let n=CO(e,t);return`${n}${n.includes(`?`)?`&`:`?`}meta=1`}function kO(e){let t=PD.get(e);t&&(clearTimeout(t),PD.delete(e))}function AO(e,t,n){if(kO(e),t.status!==`available`||!t.mediaTicket||!t.mediaTicketExpiresAt||!n)return;let r=Math.max(0,t.mediaTicketExpiresAt-Date.now()-ID),i=setTimeout(()=>{PD.delete(e);let r=ND.get(e);r?.status!==`available`||r.mediaTicket!==t.mediaTicket||(ND.delete(e),n())},r);PD.set(e,i)}function jO(e,t,n,r,i){if(!vO(e))return{status:`available`};if(!SO(e,t))return{status:`unavailable`,reason:v(`chat.outsideAllowedFolders`),checkedAt:Date.now()};let a=r?.trim()??``,o=`${n??``}::${a}::${e}`,s=ND.get(o);if(s){let e=Date.now();if(s.status===`unavailable`&&e-s.checkedAt>=FD)ND.delete(o);else if(s.status===`available`&&s.mediaTicket&&(!s.mediaTicketExpiresAt||s.mediaTicketExpiresAt-e<=ID))ND.delete(o);else return AO(o,s,i),s}if(kO(o),ND.set(o,{status:`checking`}),typeof fetch==`function`){let t=new Headers({Accept:`application/json`});a&&t.set(`Authorization`,`Bearer ${a}`),fetch(OO(e,n),{method:`GET`,headers:t,credentials:`same-origin`}).then(async e=>{let t=await e.json().catch(()=>null);if(t?.available===!0){let e=t.mediaTicket?.trim(),n=Date.parse(t.mediaTicketExpiresAt??``);if(e&&!Number.isFinite(n)){kO(o),ND.set(o,{status:`unavailable`,reason:v(`chat.attachmentUnavailable`),checkedAt:Date.now()});return}let r={status:`available`,...e?{mediaTicket:e,mediaTicketExpiresAt:n}:{}};ND.set(o,r),AO(o,r,i)}else kO(o),ND.set(o,{status:`unavailable`,reason:t?.reason?.trim()||v(`chat.attachmentUnavailable`),checkedAt:Date.now()})}).catch(()=>{kO(o),ND.set(o,{status:`unavailable`,reason:v(`chat.attachmentUnavailable`),checkedAt:Date.now()})}).finally(()=>{i?.()})}return{status:`checking`}}function MO(e){return d`
878
878
  <div class="chat-assistant-attachment-card chat-assistant-attachment-card--blocked">
879
879
  <div class="chat-assistant-attachment-card__header">
880
880
  <span class="chat-assistant-attachment-card__icon">${e.kind===`image`?q.image:e.kind===`audio`?q.mic:e.kind===`video`?q.monitor:q.paperclip}</span>
@@ -898,7 +898,9 @@ ${e}
898
898
  <div class="chat-assistant-attachment-card chat-assistant-attachment-card--audio">
899
899
  <div class="chat-assistant-attachment-card__header">
900
900
  <span class="chat-assistant-attachment-card__title">${e.label}</span>
901
- ${s?e.isVoiceNote?d`<span class="chat-assistant-attachment-badge">${v(`chat.messages.voiceNote`)}</span>`:i:d`<span
901
+ ${s?e.isVoiceNote?d`<span class="chat-assistant-attachment-badge"
902
+ >${v(`chat.messages.voiceNote`)}</span
903
+ >`:i:d`<span
902
904
  class="chat-assistant-attachment-badge chat-assistant-attachment-badge--muted"
903
905
  >${o.status===`checking`?`Checking...`:`Unavailable`}</span
904
906
  >`}
@@ -1165,7 +1167,7 @@ ${e}
1165
1167
  type="button"
1166
1168
  style="margin-top: 12px;"
1167
1169
  >
1168
- View Raw Text
1170
+ ${v(`chat.viewRawText`)}
1169
1171
  </button>
1170
1172
  `:t?t.kind===`canvas`?d`
1171
1173
  <div class="chat-tool-card__preview" data-kind="canvas">
@@ -1181,7 +1183,7 @@ ${e}
1181
1183
  ${t.rawText?.trim()?d`
1182
1184
  <div style="margin-top: 12px;">
1183
1185
  <button @click=${e.onViewRawText} class="btn" type="button">
1184
- View Raw Text
1186
+ ${v(`chat.viewRawText`)}
1185
1187
  </button>
1186
1188
  </div>
1187
1189
  `:i}
@@ -1199,7 +1201,7 @@ ${e}
1199
1201
  </div>
1200
1202
  </div>
1201
1203
  <button @click=${e.onViewRawText} class="btn btn--sm" type="button">
1202
- View Raw Text
1204
+ ${v(`chat.viewRawText`)}
1203
1205
  </button>
1204
1206
  </div>
1205
1207
  <article class="sidebar-markdown-reader sidebar-markdown">
@@ -1240,12 +1242,12 @@ ${e}
1240
1242
  background: var(--accent, #007bff);
1241
1243
  }
1242
1244
  `}render(){return i}connectedCallback(){super.connectedCallback(),this.setStaticAccessibilityAttributes(),this.addEventListener(`pointerdown`,this.handlePointerDown),this.addEventListener(`keydown`,this.handleKeyDown)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener(`pointerdown`,this.handlePointerDown),this.removeEventListener(`keydown`,this.handleKeyDown),this.stopDragging()}updated(){this.setAttribute(`aria-valuemin`,String(this.toAriaValue(this.minRatio))),this.setAttribute(`aria-valuemax`,String(this.toAriaValue(this.maxRatio))),this.setAttribute(`aria-valuenow`,String(this.toAriaValue(this.splitRatio))),this.label?this.setAttribute(`aria-label`,this.label):this.removeAttribute(`aria-label`)}stopDragging(){this.isDragging&&(this.isDragging=!1,this.classList.remove(`dragging`),this.releaseActivePointer(),document.removeEventListener(`pointermove`,this.handlePointerMove),document.removeEventListener(`pointerup`,this.handlePointerUp),document.removeEventListener(`pointercancel`,this.handlePointerUp))}emitResize(e){let t=this.clampRatio(e);this.dispatchEvent(new CustomEvent(`resize`,{detail:{splitRatio:t},bubbles:!0,composed:!0}))}clampRatio(e){return Math.max(this.minRatio,Math.min(this.maxRatio,e))}toAriaValue(e){return Math.round(e*100)}setStaticAccessibilityAttributes(){this.setAttribute(`role`,`separator`),this.setAttribute(`tabindex`,`0`),this.setAttribute(`aria-orientation`,`vertical`)}capturePointer(e){typeof this.setPointerCapture==`function`&&(this.setPointerCapture(e),this.activePointerId=e)}releaseActivePointer(){let e=this.activePointerId;this.activePointerId=null,!(e==null||typeof this.releasePointerCapture!=`function`)&&(typeof this.hasPointerCapture==`function`&&!this.hasPointerCapture(e)||this.releasePointerCapture(e))}};J([m({type:Number})],dk.prototype,`splitRatio`,void 0),J([m({type:Number})],dk.prototype,`minRatio`,void 0),J([m({type:Number})],dk.prototype,`maxRatio`,void 0),J([m({type:String})],dk.prototype,`label`,void 0),customElements.get(`resizable-divider`)||customElements.define(`resizable-divider`,dk);var fk=[`a[href]`,`button`,`input`,`select`,`textarea`,`summary`,`[contenteditable='true']`,`[role='button']`,`[role='listbox']`,`[role='option']`].join(`,`);function pk(e){return e?.phase===`done`||e?.phase===`interrupted`}var mk=new Map,hk=new Map,gk=`chat-slash-menu-listbox`,_k=`chat-slash-active-announcement`;function vk(e){return GO(mk,e,()=>new VO(e))}function yk(e){return GO(hk,e,()=>new PE(e))}function bk(e){let t=e.realtimeTalkOptions,n=e.onRealtimeTalkOptionsChange;if(!e.realtimeTalkOptionsOpen||!t||!n)return i;let r=e=>t=>{let r=t.currentTarget.value;n({[e]:r})},a=t.vadThreshold===``,o=[`0.65`,`0.5`,`0.35`].includes(t.vadThreshold),s=!a&&!o,c=a?``:o?t.vadThreshold:`__custom`;return d`
1243
- <div class="agent-chat__talk-options" aria-label="Talk options">
1245
+ <div class="agent-chat__talk-options" aria-label=${v(`chat.talkOptions`)}>
1244
1246
  <div class="agent-chat__talk-options-primary">
1245
1247
  <label>
1246
- <span>Voice</span>
1248
+ <span>${v(`chat.voice`)}</span>
1247
1249
  <select .value=${t.voice} @change=${r(`voice`)}>
1248
- <option value="">Default</option>
1250
+ <option value="">${v(`chat.default`)}</option>
1249
1251
  ${[`alloy`,`ash`,`ballad`,`coral`,`echo`,`sage`,`shimmer`,`verse`,`marin`,`cedar`].map(e=>d`<option value=${e}>${e}</option>`)}
1250
1252
  </select>
1251
1253
  </label>
@@ -1358,18 +1360,21 @@ ${e}
1358
1360
  <div
1359
1361
  class=${[`chat-attachment-thumb`,jk(t)?``:`chat-attachment-thumb--file`].filter(Boolean).join(` `)}
1360
1362
  >
1361
- ${jk(t)&&Hl(t)?d`<img src=${Hl(t)} alt="Attachment preview" />`:d`
1362
- <div class="chat-attachment-file" title=${t.fileName??`Attached file`}>
1363
+ ${jk(t)&&Hl(t)?d`<img
1364
+ src=${Hl(t)}
1365
+ alt=${v(`chat.attachmentPreview`)}
1366
+ />`:d`
1367
+ <div class="chat-attachment-file" title=${t.fileName??v(`chat.attachedFile`)}>
1363
1368
  <span class="chat-attachment-file__icon">${q.paperclip}</span>
1364
1369
  <span class="chat-attachment-file__name"
1365
- >${t.fileName??`Attached file`}</span
1370
+ >${t.fileName??v(`chat.attachedFile`)}</span
1366
1371
  >
1367
1372
  </div>
1368
1373
  `}
1369
1374
  <button
1370
1375
  class="chat-attachment-remove"
1371
1376
  type="button"
1372
- aria-label="Remove attachment"
1377
+ aria-label=${v(`chat.removeAttachment`)}
1373
1378
  @click=${()=>{let n=(e.attachments??[]).filter(e=>e.id!==t.id);Gl(t.id),e.onAttachmentsChange?.(n)}}
1374
1379
  >
1375
1380
  &times;
@@ -1392,14 +1397,14 @@ ${e}
1392
1397
  ${q.search}
1393
1398
  <input
1394
1399
  type="text"
1395
- placeholder="Search messages..."
1396
- aria-label="Search messages"
1400
+ placeholder=${v(`chat.searchMessages`)}
1401
+ aria-label=${v(`chat.searchMessages`)}
1397
1402
  .value=${Y.searchQuery}
1398
1403
  @input=${t=>{Y.searchQuery=t.target.value,e()}}
1399
1404
  />
1400
1405
  <button
1401
1406
  class="btn btn--ghost"
1402
- aria-label="Close search"
1407
+ aria-label=${v(`chat.closeSearch`)}
1403
1408
  @click=${()=>{Y.searchOpen=!1,Y.searchQuery=``,e()}}
1404
1409
  >
1405
1410
  ${q.x}
@@ -1444,7 +1449,7 @@ ${e}
1444
1449
  id=${gk}
1445
1450
  class="slash-menu"
1446
1451
  role="listbox"
1447
- aria-label="Command arguments"
1452
+ aria-label=${v(`chat.commandArguments`)}
1448
1453
  >
1449
1454
  <div class="slash-menu-group">
1450
1455
  <div class="slash-menu-group__label">
@@ -1914,7 +1919,7 @@ ${e}
1914
1919
  </option>`)}
1915
1920
  </select>
1916
1921
  </label>
1917
- `}async function MN(e,t){if(!e.client||!e.connected)return!1;if(wM(e)===t)return!0;let n=e.sessionKey,r=e.chatModelOverrides[n];e.lastError=null,e.chatModelOverrides={...e.chatModelOverrides,[n]:Zi(t)};let i=e.client,a,o=()=>{if(e.chatModelSwitchPromises?.[n]===a){let t={...e.chatModelSwitchPromises};delete t[n],e.chatModelSwitchPromises=t}};return a=(async()=>{try{return await i.request(`sessions.patch`,{key:n,model:t||null}),CN(e),await GM(e),!0}catch(t){return e.chatModelOverrides={...e.chatModelOverrides,[n]:r},e.lastError=`Failed to set model: ${String(t)}`,!1}finally{o()}})(),e.chatModelSwitchPromises={...e.chatModelSwitchPromises,[n]:a},a}function NN(e,t,n){let r=e.sessionsResult;r&&(e.sessionsResult={...r,sessions:r.sessions.map(e=>e.key===t?Object.assign({},e,{thinkingLevel:n}):e)})}async function PN(e,t){if(!e.client||!e.connected)return;let n=e.sessionKey,r=e.sessionsResult?.sessions?.find(e=>e.key===n)?.thinkingLevel,i=(ld(t)??t.trim())||void 0,a=typeof r==`string`&&r.trim()?ld(r)??r.trim():void 0;if((a??``)!==(i??``)){e.lastError=null,NN(e,n,i),e.chatThinkingLevel=i??null;try{await e.client.request(`sessions.patch`,{key:n,thinkingLevel:i??null}),await GM(e)}catch(t){NN(e,n,r),e.chatThinkingLevel=a??null,e.lastError=`Failed to set thinking level: ${String(t)}`}}}function FN(e,t){return B(z(t)?.agentId??e.agentsList?.defaultId??`main`)}function IN(e,t,n){let r=z(e);return r?B(r.agentId)===t:t===n}function LN(e,t){let n=B(t);if(FN(e,e.sessionKey)===n)return e.sessionKey;let r=B(e.agentsList?.defaultId??`main`),i=(e.sessionsResult?.sessions??[]).filter(e=>!IN(e.key,n,r)||e.kind===`global`||e.kind===`unknown`||IM(e.key)?!1:!Zc(e.key)&&!e.spawnedBy).toSorted((e,t)=>(t.updatedAt??0)-(e.updatedAt??0));return i[0]?.key?i[0].key:qc({agentId:n})}function RN(e){let t=new Set,n=[],r=r=>{let i=B(r);t.has(i)||(t.add(i),n.push({id:i,label:BN(e,i)}))};r(FN(e,e.sessionKey)),r(e.agentsList?.defaultId??`main`);for(let t of e.agentsList?.agents??[])r(t.id);for(let t of e.sessionsResult?.sessions??[]){let e=z(t.key);e&&r(e.agentId)}return n}function zN(e,t,n){let r=n?.sessions??[],i=e.sessionsHideCron??!0,a=FN(e,t),o=B(e.agentsList?.defaultId??`main`),s=new Map;for(let e of r)s.set(e.key,e);let c=new Set,l=new Map,u=(e,t)=>{let n=l.get(e);if(n)return n;let r={id:e,label:t,options:[]};return l.set(e,r),r},d=t=>{if(!t||c.has(t))return;c.add(t);let n=s.get(t),r=z(t),i=r?u(`agent:${E(r.agentId)}`,BN(e,r.agentId)):u(`other`,`Other Sessions`),a=T(r?.rest)??t;i.options.push({key:t,label:VN(t,n,r?.rest),scopeLabel:a,title:t})};for(let e of r)!IN(e.key,a,o)&&e.key!==t||e.key!==t&&(e.kind===`global`||e.kind===`unknown`)||i&&e.key!==t&&IM(e.key)||(Zc(e.key)||e.spawnedBy)&&e.key!==t||d(e.key);(s.has(t)||t)&&d(t);for(let e of l.values()){let t=new Map;for(let n of e.options)t.set(n.label,(t.get(n.label)??0)+1);for(let n of e.options)(t.get(n.label)??0)>1&&n.scopeLabel!==n.label&&(n.label=`${n.label} · ${n.scopeLabel}`)}let f=Array.from(l.values()).flatMap(e=>e.options.map(t=>({groupLabel:e.label,option:t}))),p=new Map(f.map(({option:e})=>[e,e.label])),m=()=>{let e=new Map;for(let{option:t}of f){let n=p.get(t)??t.label;e.set(n,(e.get(n)??0)+1)}return e},h=(e,t)=>{let n=t.trim();return n?e===n||e.endsWith(` · ${n}`)||e.endsWith(` / ${n}`):!1},g=m();for(let{groupLabel:e,option:t}of f){let n=p.get(t)??t.label;if((g.get(n)??0)<=1)continue;let r=`${e} / `;n.startsWith(r)||p.set(t,`${e} / ${n}`)}let _=m();for(let{option:e}of f){let t=p.get(e)??e.label;(_.get(t)??0)<=1||h(t,e.scopeLabel)||p.set(e,`${t} · ${e.scopeLabel}`)}let v=m();for(let{option:e}of f){let t=p.get(e)??e.label;(v.get(t)??0)<=1||p.set(e,`${t} · ${e.key}`)}for(let{option:e}of f)e.label=p.get(e)??e.label;return Array.from(l.values())}function BN(e,t){let n=E(t),r=(e.agentsList?.agents??[]).find(e=>E(e.id)===n),i=T(r?.identity?.name)??T(r?.name)??``;return i&&i!==t?`${i} (${t})`:t}function VN(e,t,n){let r=T(n)??e;if(!t)return r;let i=T(t.label)??``,a=T(t.displayName)??``;return i&&i!==e||a&&a!==e?FM(e,t):r}async function HN(e){e.chatManualRefreshInFlight=!0,e.chatNewMessagesBelow=!1,await e.updateComplete,e.resetToolStream();try{await Xh(e,{awaitHistory:!0,scheduleScroll:!1}),e.scrollToBottom({smooth:!0})}finally{requestAnimationFrame(()=>{e.chatManualRefreshInFlight=!1,e.chatNewMessagesBelow=!1})}}function UN(e){return ep(e)}function WN(e){let t=Xc(e.sessionKey),n=e.agentsList?.agents.find(e=>E(e.id)===t);return{agentLabel:T(n?.identity?.name)??T(n?.name)??t}}function GN(e){let t=e.hello?.snapshot;return T(t?.sessionDefaults?.mainSessionKey)||T(t?.sessionDefaults?.mainKey)||`main`}function KN(e,t){let n=e.chatQueueBySession??={};if(e.chatQueue.length>0){n[t]=[...e.chatQueue],e.chatQueueBySession={...n};return}Object.prototype.hasOwnProperty.call(n,t)&&(delete n[t],e.chatQueueBySession={...n})}function qN(e,t){return[...e.chatQueueBySession?.[t]??[]]}function JN(e,t){let n=e,r=e.sessionKey;KN(e,r),e.sessionKey=t,r!==t&&rN(e),e.currentSessionId=null,e.chatMessage=``,e.chatAttachments=[],e.chatMessages=[],e.chatToolMessages=[],e.activityEntries=[],e.activityExpandedIds=new Set,e.activityAtBottom=!0,e.chatStreamSegments=[],e.chatThinkingLevel=null,e.chatStream=null,e.chatSideResult=null,e.lastError=null,e.chatAvatarUrl=null,e.chatAvatarSource=null,e.chatAvatarStatus=null,e.chatAvatarReason=null,e.realtimeTalkTranscript=null,e.resetRealtimeTalkConversation?.(),e.chatQueue=qN(e,t),n.resetChatInputHistoryNavigation(),n.chatStreamStartedAt=null,ad(e,{clearLocalRun:!0,clearChatStream:!0,clearToolStream:!0,clearSideResultTerminalRuns:!0,clearRunStatus:!0}),n.resetChatScroll(),e.applySettings({...e.settings,sessionKey:t,lastActiveSessionKey:t})}function YN(e){return!e.chatLoading&&!e.chatSending&&!e.chatRunId&&e.chatStream===null&&e.chatQueue.length===0}var XN=v(`chat.newSessionWaitRun`),ZN=v(`chat.sessionListRefreshing`),QN=v(`chat.newChatFailed`);function $N(e,t,n){let r=mi(t,e.basePath),a=t===`config`?hi(e.tab):e.tab===t,o=n?.collapsed??e.settings.navCollapsed;return d`
1922
+ `}async function MN(e,t){if(!e.client||!e.connected)return!1;if(wM(e)===t)return!0;let n=e.sessionKey,r=e.chatModelOverrides[n];e.lastError=null,e.chatModelOverrides={...e.chatModelOverrides,[n]:Zi(t)};let i=e.client,a,o=()=>{if(e.chatModelSwitchPromises?.[n]===a){let t={...e.chatModelSwitchPromises};delete t[n],e.chatModelSwitchPromises=t}};return a=(async()=>{try{return await i.request(`sessions.patch`,{key:n,model:t||null}),CN(e),await GM(e),!0}catch(t){return e.chatModelOverrides={...e.chatModelOverrides,[n]:r},e.lastError=`Failed to set model: ${String(t)}`,!1}finally{o()}})(),e.chatModelSwitchPromises={...e.chatModelSwitchPromises,[n]:a},a}function NN(e,t,n){let r=e.sessionsResult;r&&(e.sessionsResult={...r,sessions:r.sessions.map(e=>e.key===t?Object.assign({},e,{thinkingLevel:n}):e)})}async function PN(e,t){if(!e.client||!e.connected)return;let n=e.sessionKey,r=e.sessionsResult?.sessions?.find(e=>e.key===n)?.thinkingLevel,i=(ld(t)??t.trim())||void 0,a=typeof r==`string`&&r.trim()?ld(r)??r.trim():void 0;if((a??``)!==(i??``)){e.lastError=null,NN(e,n,i),e.chatThinkingLevel=i??null;try{await e.client.request(`sessions.patch`,{key:n,thinkingLevel:i??null}),await GM(e)}catch(t){NN(e,n,r),e.chatThinkingLevel=a??null,e.lastError=`Failed to set thinking level: ${String(t)}`}}}function FN(e,t){return B(z(t)?.agentId??e.agentsList?.defaultId??`main`)}function IN(e,t,n){let r=z(e);return r?B(r.agentId)===t:t===n}function LN(e,t){let n=B(t);if(FN(e,e.sessionKey)===n)return e.sessionKey;let r=B(e.agentsList?.defaultId??`main`),i=(e.sessionsResult?.sessions??[]).filter(e=>!IN(e.key,n,r)||e.kind===`global`||e.kind===`unknown`||IM(e.key)?!1:!Zc(e.key)&&!e.spawnedBy).toSorted((e,t)=>(t.updatedAt??0)-(e.updatedAt??0));return i[0]?.key?i[0].key:qc({agentId:n})}function RN(e){let t=new Set,n=[],r=r=>{let i=B(r);t.has(i)||(t.add(i),n.push({id:i,label:BN(e,i)}))};r(FN(e,e.sessionKey)),r(e.agentsList?.defaultId??`main`);for(let t of e.agentsList?.agents??[])r(t.id);for(let t of e.sessionsResult?.sessions??[]){let e=z(t.key);e&&r(e.agentId)}return n}function zN(e,t,n){let r=n?.sessions??[],i=e.sessionsHideCron??!0,a=FN(e,t),o=B(e.agentsList?.defaultId??`main`),s=new Map;for(let e of r)s.set(e.key,e);let c=new Set,l=new Map,u=(e,t)=>{let n=l.get(e);if(n)return n;let r={id:e,label:t,options:[]};return l.set(e,r),r},d=t=>{if(!t||c.has(t))return;c.add(t);let n=s.get(t),r=z(t),i=r?u(`agent:${E(r.agentId)}`,BN(e,r.agentId)):u(`other`,v(`chat.otherSessions`)),a=T(r?.rest)??t;i.options.push({key:t,label:VN(t,n,r?.rest),scopeLabel:a,title:t})};for(let e of r)!IN(e.key,a,o)&&e.key!==t||e.key!==t&&(e.kind===`global`||e.kind===`unknown`)||i&&e.key!==t&&IM(e.key)||(Zc(e.key)||e.spawnedBy)&&e.key!==t||d(e.key);(s.has(t)||t)&&d(t);for(let e of l.values()){let t=new Map;for(let n of e.options)t.set(n.label,(t.get(n.label)??0)+1);for(let n of e.options)(t.get(n.label)??0)>1&&n.scopeLabel!==n.label&&(n.label=`${n.label} · ${n.scopeLabel}`)}let f=Array.from(l.values()).flatMap(e=>e.options.map(t=>({groupLabel:e.label,option:t}))),p=new Map(f.map(({option:e})=>[e,e.label])),m=()=>{let e=new Map;for(let{option:t}of f){let n=p.get(t)??t.label;e.set(n,(e.get(n)??0)+1)}return e},h=(e,t)=>{let n=t.trim();return n?e===n||e.endsWith(` · ${n}`)||e.endsWith(` / ${n}`):!1},g=m();for(let{groupLabel:e,option:t}of f){let n=p.get(t)??t.label;if((g.get(n)??0)<=1)continue;let r=`${e} / `;n.startsWith(r)||p.set(t,`${e} / ${n}`)}let _=m();for(let{option:e}of f){let t=p.get(e)??e.label;(_.get(t)??0)<=1||h(t,e.scopeLabel)||p.set(e,`${t} · ${e.scopeLabel}`)}let y=m();for(let{option:e}of f){let t=p.get(e)??e.label;(y.get(t)??0)<=1||p.set(e,`${t} · ${e.key}`)}for(let{option:e}of f)e.label=p.get(e)??e.label;return Array.from(l.values())}function BN(e,t){let n=E(t),r=(e.agentsList?.agents??[]).find(e=>E(e.id)===n),i=T(r?.identity?.name)??T(r?.name)??``;return i&&i!==t?`${i} (${t})`:t}function VN(e,t,n){let r=T(n)??e;if(!t)return r;let i=T(t.label)??``,a=T(t.displayName)??``;return i&&i!==e||a&&a!==e?FM(e,t):r}async function HN(e){e.chatManualRefreshInFlight=!0,e.chatNewMessagesBelow=!1,await e.updateComplete,e.resetToolStream();try{await Xh(e,{awaitHistory:!0,scheduleScroll:!1}),e.scrollToBottom({smooth:!0})}finally{requestAnimationFrame(()=>{e.chatManualRefreshInFlight=!1,e.chatNewMessagesBelow=!1})}}function UN(e){return ep(e)}function WN(e){let t=Xc(e.sessionKey),n=e.agentsList?.agents.find(e=>E(e.id)===t);return{agentLabel:T(n?.identity?.name)??T(n?.name)??t}}function GN(e){let t=e.hello?.snapshot;return T(t?.sessionDefaults?.mainSessionKey)||T(t?.sessionDefaults?.mainKey)||`main`}function KN(e,t){let n=e.chatQueueBySession??={};if(e.chatQueue.length>0){n[t]=[...e.chatQueue],e.chatQueueBySession={...n};return}Object.prototype.hasOwnProperty.call(n,t)&&(delete n[t],e.chatQueueBySession={...n})}function qN(e,t){return[...e.chatQueueBySession?.[t]??[]]}function JN(e,t){let n=e,r=e.sessionKey;KN(e,r),e.sessionKey=t,r!==t&&rN(e),e.currentSessionId=null,e.chatMessage=``,e.chatAttachments=[],e.chatMessages=[],e.chatToolMessages=[],e.activityEntries=[],e.activityExpandedIds=new Set,e.activityAtBottom=!0,e.chatStreamSegments=[],e.chatThinkingLevel=null,e.chatStream=null,e.chatSideResult=null,e.lastError=null,e.chatAvatarUrl=null,e.chatAvatarSource=null,e.chatAvatarStatus=null,e.chatAvatarReason=null,e.realtimeTalkTranscript=null,e.resetRealtimeTalkConversation?.(),e.chatQueue=qN(e,t),n.resetChatInputHistoryNavigation(),n.chatStreamStartedAt=null,ad(e,{clearLocalRun:!0,clearChatStream:!0,clearToolStream:!0,clearSideResultTerminalRuns:!0,clearRunStatus:!0}),n.resetChatScroll(),e.applySettings({...e.settings,sessionKey:t,lastActiveSessionKey:t})}function YN(e){return!e.chatLoading&&!e.chatSending&&!e.chatRunId&&e.chatStream===null&&e.chatQueue.length===0}var XN=v(`chat.newSessionWaitRun`),ZN=v(`chat.sessionListRefreshing`),QN=v(`chat.newChatFailed`);function $N(e,t,n){let r=mi(t,e.basePath),a=t===`config`?hi(e.tab):e.tab===t,o=n?.collapsed??e.settings.navCollapsed;return d`
1918
1923
  <a
1919
1924
  href=${r}
1920
1925
  class="nav-item ${a?`nav-item--active`:``}"
@@ -2313,7 +2318,7 @@ ${e}
2313
2318
  class="filter-chip-remove"
2314
2319
  @click=${s}
2315
2320
  title=${v(`usage.filters.remove`)}
2316
- aria-label="Remove session filter"
2321
+ aria-label=${v(`usage.filters.remove`)}
2317
2322
  >
2318
2323
  ×
2319
2324
  </button>
@@ -3575,7 +3580,7 @@ ${e}
3575
3580
  </div>
3576
3581
  </div>
3577
3582
  </dialog>
3578
- `}var RI=[{id:`personal`,label:`Personal Assistant`,description:`Balanced default for daily use.`,detail:`Good fit for chat, docs, and light edits without a large coding budget.`,impact:`Injects bootstrap context every turn with a moderate prompt budget.`,icon:`✨`,patch:{agents:{defaults:{bootstrapMaxChars:2e4,bootstrapTotalMaxChars:15e4,contextInjection:`always`}}}},{id:`codeAgent`,label:`Code Agent`,description:`Highest context budget for repo work.`,detail:`Best for multi-file changes, long bootstrap docs, and code-heavy sessions.`,impact:`Uses the largest prompt budget and reinjects context every turn.`,icon:`🛠️`,patch:{agents:{defaults:{bootstrapMaxChars:5e4,bootstrapTotalMaxChars:3e5,contextInjection:`always`}}}},{id:`teamBot`,label:`Team Bot`,description:`Lean follow-ups for shared bots.`,detail:`Best for multi-channel workflows where continuity matters more than large bootstrap payloads.`,impact:`Keeps follow-up turns smaller by skipping safe continuation reinjection.`,icon:`👥`,patch:{agents:{defaults:{bootstrapMaxChars:1e4,bootstrapTotalMaxChars:8e4,contextInjection:`continuation-skip`}}}},{id:`minimal`,label:`Minimal`,description:`Smallest context budget and lowest cost.`,detail:`Best for quick utility turns, automations, and cost-sensitive workflows.`,impact:`Uses the smallest bootstrap budget and the leanest follow-up behavior.`,icon:`⚡`,patch:{agents:{defaults:{bootstrapMaxChars:5e3,bootstrapTotalMaxChars:3e4,contextInjection:`continuation-skip`}}}}];function zI(e){return RI.find(t=>t.id===e)}function BI(e){let t=e.agents?.defaults;if(!t)return null;let n=t.bootstrapMaxChars,r=t.bootstrapTotalMaxChars,i=t.contextInjection;for(let e of RI){let t=e.patch.agents?.defaults;if(t&&n===t.bootstrapMaxChars&&r===t.bootstrapTotalMaxChars&&i===t.contextInjection)return e.id}return null}var VI=[{id:`claw`,label:`Claw`},{id:`knot`,label:`Knot`},{id:`dash`,label:`Dash`}],HI=[{value:0,label:`None`},{value:25,label:`Slight`},{value:50,label:`Default`},{value:75,label:`Round`},{value:100,label:`Full`}],UI=[{value:90,label:`S`},{value:100,label:`M`},{value:110,label:`L`},{value:125,label:`XL`},{value:140,label:`XXL`}],WI=[`off`,`low`,`medium`,`high`],GI=[`minimal`,`coding`,`messaging`,`full`],KI=`You`,qI=15e5,JI=qI;function YI(){return d`
3583
+ `}var RI=[{id:`personal`,label:`settings.quick.presetPersonal`,description:`settings.quick.presetPersonalDesc`,detail:`settings.quick.presetPersonalDetail`,impact:`settings.quick.presetPersonalImpact`,icon:`✨`,patch:{agents:{defaults:{bootstrapMaxChars:2e4,bootstrapTotalMaxChars:15e4,contextInjection:`always`}}}},{id:`codeAgent`,label:`settings.quick.presetCode`,description:`settings.quick.presetCodeDesc`,detail:`settings.quick.presetCodeDetail`,impact:`settings.quick.presetCodeImpact`,icon:`🛠️`,patch:{agents:{defaults:{bootstrapMaxChars:5e4,bootstrapTotalMaxChars:3e5,contextInjection:`always`}}}},{id:`teamBot`,label:`settings.quick.presetTeam`,description:`settings.quick.presetTeamDesc`,detail:`settings.quick.presetTeamDetail`,impact:`settings.quick.presetTeamImpact`,icon:`👥`,patch:{agents:{defaults:{bootstrapMaxChars:1e4,bootstrapTotalMaxChars:8e4,contextInjection:`continuation-skip`}}}},{id:`minimal`,label:`settings.quick.presetMinimal`,description:`settings.quick.presetMinimalDesc`,detail:`settings.quick.presetMinimalDetail`,impact:`settings.quick.presetMinimalImpact`,icon:`⚡`,patch:{agents:{defaults:{bootstrapMaxChars:5e3,bootstrapTotalMaxChars:3e4,contextInjection:`continuation-skip`}}}}];function zI(e){return RI.find(t=>t.id===e)}function BI(e){let t=e.agents?.defaults;if(!t)return null;let n=t.bootstrapMaxChars,r=t.bootstrapTotalMaxChars,i=t.contextInjection;for(let e of RI){let t=e.patch.agents?.defaults;if(t&&n===t.bootstrapMaxChars&&r===t.bootstrapTotalMaxChars&&i===t.contextInjection)return e.id}return null}var VI=[{id:`claw`,label:`Claw`},{id:`knot`,label:`Knot`},{id:`dash`,label:`Dash`}],HI=[{value:0,label:`None`},{value:25,label:`Slight`},{value:50,label:`Default`},{value:75,label:`Round`},{value:100,label:`Full`}],UI=[{value:90,label:`S`},{value:100,label:`M`},{value:110,label:`L`},{value:125,label:`XL`},{value:140,label:`XXL`}],WI=[`off`,`low`,`medium`,`high`],GI=[`minimal`,`coding`,`messaging`,`full`],KI=`You`,qI=15e5,JI=qI;function YI(){return d`
3579
3584
  <svg viewBox="0 0 24 24" fill="currentColor" width="18" height="18">
3580
3585
  <circle cx="12" cy="8" r="4" />
3581
3586
  <path d="M20 21a8 8 0 1 0-16 0" />
@@ -3597,7 +3602,7 @@ ${e}
3597
3602
  src=${Sa(e.basePath??``)}
3598
3603
  alt=${t}
3599
3604
  />
3600
- `}function tL(e,t){let n=e.target,r=n.files?.[0],i=t.onUserAvatarChange;if(!r||!i){n.value=``;return}if(!r.type.startsWith(`image/`)){n.value=``;return}if(r.size>qI){n.value=``;return}let a=new FileReader;a.addEventListener(`load`,()=>{i(typeof a.result==`string`?a.result:null)}),a.readAsDataURL(r),n.value=``}function nL(e,t){let n=e.target,r=n.files?.[0],i=t.onAssistantAvatarOverrideChange;if(!r||!i){n.value=``;return}if(r.size>JI){n.value=``;return}let a=new FileReader;a.addEventListener(`load`,()=>{let e=typeof a.result==`string`?a.result:``;e&&i(e)}),a.readAsDataURL(r),n.value=``}var rL={bootstrapMaxChars:12e3,bootstrapTotalMaxChars:6e4,contextInjection:`always`};function iL(e){let t=e?.agents?.defaults;return{bootstrapMaxChars:typeof t?.bootstrapMaxChars==`number`&&Number.isFinite(t.bootstrapMaxChars)?Math.floor(t.bootstrapMaxChars):rL.bootstrapMaxChars,bootstrapTotalMaxChars:typeof t?.bootstrapTotalMaxChars==`number`&&Number.isFinite(t.bootstrapTotalMaxChars)?Math.floor(t.bootstrapTotalMaxChars):rL.bootstrapTotalMaxChars,contextInjection:t?.contextInjection===`continuation-skip`?`continuation-skip`:`always`}}function aL(e,t){return e.bootstrapMaxChars===t.bootstrapMaxChars&&e.bootstrapTotalMaxChars===t.bootstrapTotalMaxChars&&e.contextInjection===t.contextInjection}function oL(e){return`${e.toLocaleString()} chars`}function sL(e){return e===`always`?`Every turn`:`Skip safe follow-ups`}function cL(e){return e===`always`?`Reinject workspace bootstrap context on every turn.`:`Skip bootstrap reinjection after a completed safe follow-up.`}function lL(e){let t=e.value!==e.previousValue;return d`
3605
+ `}function tL(e,t){let n=e.target,r=n.files?.[0],i=t.onUserAvatarChange;if(!r||!i){n.value=``;return}if(!r.type.startsWith(`image/`)){n.value=``;return}if(r.size>qI){n.value=``;return}let a=new FileReader;a.addEventListener(`load`,()=>{i(typeof a.result==`string`?a.result:null)}),a.readAsDataURL(r),n.value=``}function nL(e,t){let n=e.target,r=n.files?.[0],i=t.onAssistantAvatarOverrideChange;if(!r||!i){n.value=``;return}if(r.size>JI){n.value=``;return}let a=new FileReader;a.addEventListener(`load`,()=>{let e=typeof a.result==`string`?a.result:``;e&&i(e)}),a.readAsDataURL(r),n.value=``}var rL={bootstrapMaxChars:12e3,bootstrapTotalMaxChars:6e4,contextInjection:`always`};function iL(e){let t=e?.agents?.defaults;return{bootstrapMaxChars:typeof t?.bootstrapMaxChars==`number`&&Number.isFinite(t.bootstrapMaxChars)?Math.floor(t.bootstrapMaxChars):rL.bootstrapMaxChars,bootstrapTotalMaxChars:typeof t?.bootstrapTotalMaxChars==`number`&&Number.isFinite(t.bootstrapTotalMaxChars)?Math.floor(t.bootstrapTotalMaxChars):rL.bootstrapTotalMaxChars,contextInjection:t?.contextInjection===`continuation-skip`?`continuation-skip`:`always`}}function aL(e,t){return e.bootstrapMaxChars===t.bootstrapMaxChars&&e.bootstrapTotalMaxChars===t.bootstrapTotalMaxChars&&e.contextInjection===t.contextInjection}function oL(e){return`${e.toLocaleString()} chars`}function sL(e){return v(e===`always`?`settings.quick.everyTurn`:`settings.quick.skipSafeFollowups`)}function cL(e){return v(e===`always`?`settings.quick.contextInjectAlways`:`settings.quick.contextInjectSkip`)}function lL(e){let t=e.value!==e.previousValue;return d`
3601
3606
  <div class="qs-profile-stat ${t?`qs-profile-stat--changed`:``}">
3602
3607
  <div class="qs-profile-stat__header">
3603
3608
  <span class="qs-profile-stat__label">${e.label}</span>
@@ -3694,13 +3699,17 @@ ${e}
3694
3699
  <span class="qs-row__label">
3695
3700
  ${r} MCP server${r===1?``:`s`}
3696
3701
  </span>
3697
- <button class="qs-link-btn" @click=${e.onConfigureMcp}>${v(`overview.quickActions.configure`)}</button>
3702
+ <button class="qs-link-btn" @click=${e.onConfigureMcp}>
3703
+ ${v(`overview.quickActions.configure`)}
3704
+ </button>
3698
3705
  </div>
3699
3706
  </div>
3700
3707
  </div>
3701
3708
  `}function mL(e){let{gatewayAuth:t,execPolicy:n,deviceAuth:r,browserEnabled:i,toolProfile:a}=e.security,o=a.trim()||`full`,s=GI.includes(o)?GI:[...GI,o];return d`
3702
3709
  <div class="qs-card qs-card--security">
3703
- ${uL(q.eye,`Security`,d`<button class="qs-link-btn" @click=${e.onSecurityConfigure}>${v(`overview.quickActions.configure`)}</button>`)}
3710
+ ${uL(q.eye,`Security`,d`<button class="qs-link-btn" @click=${e.onSecurityConfigure}>
3711
+ ${v(`overview.quickActions.configure`)}
3712
+ </button>`)}
3704
3713
  <div class="qs-card__body">
3705
3714
  <div class="qs-row">
3706
3715
  <span class="qs-row__label">Gateway auth</span>
@@ -3864,47 +3873,47 @@ ${e}
3864
3873
  <div class="qs-identity-card__title">${r}</div>
3865
3874
  <div class="qs-identity-card__sub">${f}</div>
3866
3875
  ${s?d`
3867
- <div
3868
- class="qs-identity-card__source"
3869
- title=${e.assistantAvatarSource??``}
3870
- >
3871
- <span>${l}</span>
3872
- <code>${s}</code>
3873
- </div>
3874
- `:i}
3876
+ <div
3877
+ class="qs-identity-card__source"
3878
+ title=${e.assistantAvatarSource??``}
3879
+ >
3880
+ <span>${l}</span>
3881
+ <code>${s}</code>
3882
+ </div>
3883
+ `:i}
3875
3884
  ${c?d`<div class="qs-identity-card__issue">${c}</div>`:i}
3876
3885
  ${u?d`
3877
- <div class="qs-identity-card__repair">
3878
- <div class="qs-identity-card__actions">
3879
- <label class="btn btn--sm">
3880
- ${e.assistantAvatarUploadBusy?`Saving...`:v(o?`settings.quick.replaceImage`:`settings.quick.chooseImage`)}
3881
- <input
3882
- type="file"
3883
- accept="image/*"
3884
- hidden
3885
- ?disabled=${e.assistantAvatarUploadBusy===!0}
3886
- @change=${t=>nL(t,e)}
3887
- />
3888
- </label>
3889
- ${o?d`
3890
- <button
3891
- type="button"
3892
- class="btn btn--sm btn--ghost"
3893
- ?disabled=${e.assistantAvatarUploadBusy===!0}
3894
- @click=${()=>{e.onAssistantAvatarClearOverride?.()}}
3895
- >
3896
- Clear override
3897
- </button>
3898
- `:i}
3899
- </div>
3900
- <div class="muted">
3901
- Stores a Control UI override. Clear it to return to IDENTITY.md.
3886
+ <div class="qs-identity-card__repair">
3887
+ <div class="qs-identity-card__actions">
3888
+ <label class="btn btn--sm">
3889
+ ${e.assistantAvatarUploadBusy?v(`settings.quick.saving`):v(o?`settings.quick.replaceImage`:`settings.quick.chooseImage`)}
3890
+ <input
3891
+ type="file"
3892
+ accept="image/*"
3893
+ hidden
3894
+ ?disabled=${e.assistantAvatarUploadBusy===!0}
3895
+ @change=${t=>nL(t,e)}
3896
+ />
3897
+ </label>
3898
+ ${o?d`
3899
+ <button
3900
+ type="button"
3901
+ class="btn btn--sm btn--ghost"
3902
+ ?disabled=${e.assistantAvatarUploadBusy===!0}
3903
+ @click=${()=>{e.onAssistantAvatarClearOverride?.()}}
3904
+ >
3905
+ Clear override
3906
+ </button>
3907
+ `:i}
3908
+ </div>
3909
+ <div class="muted">
3910
+ Stores a Control UI override. Clear it to return to IDENTITY.md.
3911
+ </div>
3902
3912
  </div>
3903
- </div>
3904
- `:i}
3913
+ `:i}
3905
3914
  ${e.assistantAvatarUploadError?d`<div class="qs-identity-card__error">
3906
- ${e.assistantAvatarUploadError}
3907
- </div>`:i}
3915
+ ${e.assistantAvatarUploadError}
3916
+ </div>`:i}
3908
3917
  </div>
3909
3918
  </section>
3910
3919
  </div>
@@ -3917,9 +3926,7 @@ ${e}
3917
3926
  <span class="qs-profile-state__title"
3918
3927
  >${o?.label??`Custom`} is selected but not saved yet.</span
3919
3928
  >
3920
- <span class="qs-profile-state__copy"
3921
- >${v(`settings.profiles.saveVsApply`)}</span
3922
- >
3929
+ <span class="qs-profile-state__copy">${v(`settings.profiles.saveVsApply`)}</span>
3923
3930
  </div>
3924
3931
  </div>
3925
3932
  `:s?d`
@@ -3929,9 +3936,7 @@ ${e}
3929
3936
  <span class="qs-profile-state__title"
3930
3937
  >${s.label} is your current default.</span
3931
3938
  >
3932
- <span class="qs-profile-state__copy"
3933
- >${v(`settings.profiles.scope`)}</span
3934
- >
3939
+ <span class="qs-profile-state__copy">${v(`settings.profiles.scope`)}</span>
3935
3940
  </div>
3936
3941
  </div>
3937
3942
  `:d`
@@ -3939,21 +3944,16 @@ ${e}
3939
3944
  <span class="qs-status-dot"></span>
3940
3945
  <div class="qs-profile-state__text">
3941
3946
  <span class="qs-profile-state__title">Custom bootstrap settings are active.</span>
3942
- <span class="qs-profile-state__copy"
3943
- >${v(`settings.profiles.chooseBuiltin`)}</span
3944
- >
3947
+ <span class="qs-profile-state__copy">${v(`settings.profiles.chooseBuiltin`)}</span>
3945
3948
  </div>
3946
3949
  </div>
3947
- `,h=o?.label??v(`settings.quick.customConfig`),g=o?.detail??`This config does not currently match one of the built-in profiles.`,_=o?.impact??`Pick a profile to stage a focused change to bootstrap size and follow-up behavior.`,y=u?`Save Profile writes this as the default. Apply Now writes it and reloads the current session.`:`Other staged config edits are pending. Saving here will commit all staged config changes.`;return d`
3950
+ `,h=v(o?o.label:`settings.quick.customConfig`),g=v(o?o.detail:`settings.quick.presetNoMatchDetail`),_=v(o?o.impact:`settings.quick.presetNoMatchImpact`),y=v(u?`settings.quick.commitProfileSave`:`settings.quick.commitOtherPending`);return d`
3948
3951
  <div class="qs-card qs-card--span-all">
3949
- ${uL(q.zap,v(`settings.quick.contextProfile`),u?d`<span class="qs-badge qs-badge--warn">Pending</span>`:s?d`<span class="qs-badge qs-badge--ok">Saved</span>`:d`<span class="qs-badge">Custom</span>`)}
3952
+ ${uL(q.zap,v(`settings.quick.contextProfile`),u?d`<span class="qs-badge qs-badge--warn">${v(`settings.quick.pending`)}</span>`:s?d`<span class="qs-badge qs-badge--ok">${v(`settings.quick.saved`)}</span>`:d`<span class="qs-badge">${v(`settings.quick.custom`)}</span>`)}
3950
3953
  <div class="qs-card__body qs-profiles">
3951
3954
  <div class="qs-profiles__copy">
3952
- <div class="qs-profiles__eyebrow">Bootstrap Context</div>
3953
- <p class="qs-profiles__intro">
3954
- Choose how much workspace context FengMing injects into each run. These profiles do not
3955
- change your model, tools, channels, or theme.
3956
- </p>
3955
+ <div class="qs-profiles__eyebrow">${v(`settings.quick.bootstrapContext`)}</div>
3956
+ <p class="qs-profiles__intro">${v(`settings.quick.profileIntro`)}</p>
3957
3957
  ${m}
3958
3958
  <div class="qs-presets-grid">
3959
3959
  ${RI.map(t=>{let n=t.patch.agents?.defaults??{},o=n.contextInjection===`continuation-skip`?`continuation-skip`:`always`;return d`
@@ -3967,23 +3967,27 @@ ${e}
3967
3967
  <div class="qs-preset__identity">
3968
3968
  <span class="qs-preset__icon">${t.icon}</span>
3969
3969
  <div class="qs-preset__identity-copy">
3970
- <span class="qs-preset__label">${t.label}</span>
3971
- <span class="qs-preset__desc muted">${t.description}</span>
3970
+ <span class="qs-preset__label">${v(t.label)}</span>
3971
+ <span class="qs-preset__desc muted">${v(t.description)}</span>
3972
3972
  </div>
3973
3973
  </div>
3974
3974
  <div class="qs-preset__badges">
3975
- ${t.id===a?d`<span class="qs-badge qs-badge--ok">Current</span>`:i}
3976
- ${u&&t.id===r?d`<span class="qs-badge qs-badge--warn">Selected</span>`:i}
3975
+ ${t.id===a?d`<span class="qs-badge qs-badge--ok"
3976
+ >${v(`settings.quick.current`)}</span
3977
+ >`:i}
3978
+ ${u&&t.id===r?d`<span class="qs-badge qs-badge--warn"
3979
+ >${v(`settings.quick.selected`)}</span
3980
+ >`:i}
3977
3981
  </div>
3978
3982
  </div>
3979
3983
  <div class="qs-preset__meta">
3980
3984
  <span
3981
- >${oL(Number(n.bootstrapMaxChars??0))} per
3982
- file</span
3985
+ >${oL(Number(n.bootstrapMaxChars??0))}
3986
+ ${v(`settings.quick.perFile`)}</span
3983
3987
  >
3984
3988
  <span
3985
3989
  >${oL(Number(n.bootstrapTotalMaxChars??0))}
3986
- total</span
3990
+ ${v(`settings.quick.total`)}</span
3987
3991
  >
3988
3992
  <span>${sL(o)}</span>
3989
3993
  </div>
@@ -4001,9 +4005,9 @@ ${e}
4001
4005
  <div class="qs-profile-panel__impact">${_}</div>
4002
4006
 
4003
4007
  <div class="qs-profile-panel__stats">
4004
- ${lL({label:v(`settings.quick.bootstrapPerFile`),value:oL(c.bootstrapMaxChars),previousValue:oL(l.bootstrapMaxChars),note:`Maximum context injected from any single bootstrap file.`})}
4005
- ${lL({label:v(`settings.quick.bootstrapTotal`),value:oL(c.bootstrapTotalMaxChars),previousValue:oL(l.bootstrapTotalMaxChars),note:`Total combined context allowed across all bootstrap files.`})}
4006
- ${lL({label:`Follow-up Turns`,value:sL(c.contextInjection),previousValue:sL(l.contextInjection),note:cL(c.contextInjection)})}
4008
+ ${lL({label:v(`settings.quick.bootstrapPerFile`),value:oL(c.bootstrapMaxChars),previousValue:oL(l.bootstrapMaxChars),note:v(`settings.quick.bootstrapPerFileNote`)})}
4009
+ ${lL({label:v(`settings.quick.bootstrapTotal`),value:oL(c.bootstrapTotalMaxChars),previousValue:oL(l.bootstrapTotalMaxChars),note:v(`settings.quick.bootstrapTotalNote`)})}
4010
+ ${lL({label:v(`settings.quick.followupTurns`),value:sL(c.contextInjection),previousValue:sL(l.contextInjection),note:cL(c.contextInjection)})}
4007
4011
  </div>
4008
4012
 
4009
4013
  ${f?d`
@@ -4015,27 +4019,27 @@ ${e}
4015
4019
  ?disabled=${e.configSaving===!0||e.configApplying===!0}
4016
4020
  @click=${e.onResetConfig}
4017
4021
  >
4018
- Discard
4022
+ ${v(`settings.quick.discard`)}
4019
4023
  </button>
4020
4024
  <button
4021
4025
  class="btn btn--sm primary"
4022
4026
  ?disabled=${!p}
4023
4027
  @click=${e.onSaveConfig}
4024
4028
  >
4025
- ${e.configSaving===!0?`Saving…`:v(u?`settings.quick.saveProfile`:`common.save`)}
4029
+ ${e.configSaving===!0?v(`settings.quick.saving`):v(u?`settings.quick.saveProfile`:`common.save`)}
4026
4030
  </button>
4027
4031
  <button
4028
4032
  class="btn btn--sm"
4029
4033
  ?disabled=${!p}
4030
4034
  @click=${e.onApplyConfig}
4031
4035
  >
4032
- ${e.configApplying===!0?`Applying…`:`Apply Now`}
4036
+ ${e.configApplying===!0?v(`settings.quick.applying`):v(`settings.quick.applyNow`)}
4033
4037
  </button>
4034
4038
  </div>
4035
4039
  </div>
4036
4040
  `:d`
4037
4041
  <div class="qs-profile-panel__footer muted" aria-live="polite">
4038
- ${s?`Saved and ready. Choose another profile to stage a change.`:`Current values are custom. Choose a profile to stage a change.`}
4042
+ ${v(s?`settings.quick.savedReady`:`settings.quick.customCurrent`)}
4039
4043
  </div>
4040
4044
  `}
4041
4045
  </div>
@@ -4045,7 +4049,9 @@ ${e}
4045
4049
  <div class="qs-footer">
4046
4050
  <div class="qs-footer__row">
4047
4051
  <span class="qs-status-dot ${e.connected?`qs-status-dot--ok`:``}"></span>
4048
- <span class="muted">${e.connected?`Connected`:`Offline`}</span>
4052
+ <span class="muted"
4053
+ >${e.connected?v(`settings.quick.connected`):v(`settings.quick.offline`)}</span
4054
+ >
4049
4055
  ${e.assistantName?d`<span class="muted">· ${e.assistantName}</span>`:i}
4050
4056
  ${e.version?d`<span class="muted">· v${e.version}</span>`:i}
4051
4057
  </div>
@@ -4204,21 +4210,21 @@ ${e}
4204
4210
  <div class="cfg-field__label">${f}</div>
4205
4211
  <div class="cfg-field__error">Unsupported type: ${u}. Use Raw mode.</div>
4206
4212
  </div>
4207
- `}function zL(e){let{schema:t,value:n,path:r,hints:a,disabled:o,onPatch:s,inputType:c}=e,l=e.showLabel??!0,u=sn(r,a),{label:f,help:p,tags:m}=ML(r,t,a),h=DL({path:r,value:n,hints:a,revealSensitive:e.revealSensitive??!1,isSensitivePathRevealed:e.isSensitivePathRevealed}),g=typeof n==`object`&&!!n&&!Array.isArray(n),_=EL(n),v=e.rawAvailable??!0,y=h.isRedacted||_,b=y?_?v?`Structured value (SecretRef) - use Raw mode to edit`:`Structured value (SecretRef) - edit the config file directly`:fn:u?.placeholder??(t.default===void 0?``:`Default: ${gc(t.default)}`),x=y?``:g?SL(n):n??``,S=h.isSensitive&&!y?`text`:c;return d`
4213
+ `}function zL(e){let{schema:t,value:n,path:r,hints:a,disabled:o,onPatch:s,inputType:c}=e,l=e.showLabel??!0,u=sn(r,a),{label:f,help:p,tags:m}=ML(r,t,a),h=DL({path:r,value:n,hints:a,revealSensitive:e.revealSensitive??!1,isSensitivePathRevealed:e.isSensitivePathRevealed}),g=typeof n==`object`&&!!n&&!Array.isArray(n),_=EL(n),y=e.rawAvailable??!0,b=h.isRedacted||_,x=b?_?v(y?`configForm.secretRefUseRaw`:`configForm.secretRefEditFile`):fn:u?.placeholder??(t.default===void 0?``:`Default: ${gc(t.default)}`),S=b?``:g?SL(n):n??``,C=h.isSensitive&&!b?`text`:c;return d`
4208
4214
  <div class="cfg-field">
4209
4215
  ${l?d`<label class="cfg-field__label">${f}</label>`:i}
4210
4216
  ${p?d`<div class="cfg-field__help">${p}</div>`:i} ${LL(m)}
4211
4217
  <div class="cfg-input-wrap">
4212
4218
  <input
4213
- type=${S}
4214
- class="cfg-input${y?` cfg-input--redacted`:``}"
4215
- placeholder=${b}
4216
- .value=${gc(x)}
4219
+ type=${C}
4220
+ class="cfg-input${b?` cfg-input--redacted`:``}"
4221
+ placeholder=${x}
4222
+ .value=${gc(S)}
4217
4223
  ?disabled=${o}
4218
- ?readonly=${y}
4224
+ ?readonly=${b}
4219
4225
  @click=${()=>{h.isRedacted&&!_&&e.onToggleSensitivePath&&e.onToggleSensitivePath(r)}}
4220
- @input=${e=>{if(y)return;let t=e.target.value;if(c===`number`){if(t.trim()===``){s(r,void 0);return}let e=Number(t);s(r,Number.isNaN(e)?t:e);return}s(r,t)}}
4221
- @change=${e=>{if(c===`number`||y)return;let t=e.target.value;s(r,t.trim())}}
4226
+ @input=${e=>{if(b)return;let t=e.target.value;if(c===`number`){if(t.trim()===``){s(r,void 0);return}let e=Number(t);s(r,Number.isNaN(e)?t:e);return}s(r,t)}}
4227
+ @change=${e=>{if(c===`number`||b)return;let t=e.target.value;s(r,t.trim())}}
4222
4228
  />
4223
4229
  ${_?i:OL({path:r,state:h,disabled:o,onToggleSensitivePath:e.onToggleSensitivePath})}
4224
4230
  ${t.default===void 0?i:d`
@@ -4226,7 +4232,7 @@ ${e}
4226
4232
  type="button"
4227
4233
  class="cfg-input__reset"
4228
4234
  title=t("settings.actions.resetToDefault")
4229
- ?disabled=${o||y}
4235
+ ?disabled=${o||b}
4230
4236
  @click=${()=>s(r,t.default)}
4231
4237
  >
4232
4238
 
@@ -4403,20 +4409,20 @@ ${e}
4403
4409
  </div>
4404
4410
  <div class="cfg-map__item-value">
4405
4411
  ${h?d`
4406
- <div class="cfg-input-wrap">
4407
- <textarea
4408
- class="cfg-textarea cfg-textarea--sm${v.isRedacted?` cfg-textarea--redacted`:``}"
4409
- placeholder=${v.isRedacted?fn:`JSON value`}
4410
- rows="2"
4411
- .value=${v.isRedacted?``:_}
4412
- ?disabled=${s}
4413
- ?readonly=${v.isRedacted}
4414
- @click=${()=>{v.isRedacted&&m&&m(g)}}
4415
- @change=${e=>{if(v.isRedacted)return;let t=e.target,n=t.value.trim();if(!n){l(g,void 0);return}try{l(g,JSON.parse(n))}catch{t.value=_}}}
4416
- ></textarea>
4417
- ${OL({path:g,state:v,disabled:s,onToggleSensitivePath:m})}
4418
- </div>
4419
- `:RL({schema:t,value:c,path:g,hints:i,rawAvailable:a,unsupported:o,disabled:s,searchCriteria:u,showLabel:!1,revealSensitive:f,isSensitivePathRevealed:p,onToggleSensitivePath:m,onPatch:l})}
4412
+ <div class="cfg-input-wrap">
4413
+ <textarea
4414
+ class="cfg-textarea cfg-textarea--sm${v.isRedacted?` cfg-textarea--redacted`:``}"
4415
+ placeholder=${v.isRedacted?fn:`JSON value`}
4416
+ rows="2"
4417
+ .value=${v.isRedacted?``:_}
4418
+ ?disabled=${s}
4419
+ ?readonly=${v.isRedacted}
4420
+ @click=${()=>{v.isRedacted&&m&&m(g)}}
4421
+ @change=${e=>{if(v.isRedacted)return;let t=e.target,n=t.value.trim();if(!n){l(g,void 0);return}try{l(g,JSON.parse(n))}catch{t.value=_}}}
4422
+ ></textarea>
4423
+ ${OL({path:g,state:v,disabled:s,onToggleSensitivePath:m})}
4424
+ </div>
4425
+ `:RL({schema:t,value:c,path:g,hints:i,rawAvailable:a,unsupported:o,disabled:s,searchCriteria:u,showLabel:!1,revealSensitive:f,isSensitivePathRevealed:p,onToggleSensitivePath:m,onPatch:l})}
4420
4426
  </div>
4421
4427
  </div>
4422
4428
  `})}
@@ -4900,7 +4906,7 @@ ${e}
4900
4906
  <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
4901
4907
  <polyline points="14 2 14 8 20 8"></polyline>
4902
4908
  </svg>
4903
- `},dR=[{id:`core`,label:`Core`,sections:[{key:`env`,label:v(`settings.section.env`)},{key:`auth`,label:v(`settings.section.auth`)},{key:`update`,label:`Updates`},{key:`meta`,label:`Meta`},{key:`logging`,label:`Logging`},{key:`diagnostics`,label:v(`settings.section.diagnostics`)},{key:`cli`,label:`Cli`},{key:`secrets`,label:`Secrets`}]},{id:`ai`,label:`AI & Agents`,sections:[{key:`agents`,label:`Agents`},{key:`models`,label:`Models`},{key:`skills`,label:`Skills`},{key:`tools`,label:`Tools`},{key:`memory`,label:`Memory`},{key:`session`,label:`Session`}]},{id:`communication`,label:v(`settings.section.channels`),sections:[{key:`channels`,label:`Channels`},{key:`messages`,label:`Messages`},{key:`broadcast`,label:`Broadcast`},{key:`talk`,label:`Talk`},{key:`audio`,label:`Audio`}]},{id:`automation`,label:`Automation`,sections:[{key:`commands`,label:`Commands`},{key:`hooks`,label:`Hooks`},{key:`bindings`,label:`Bindings`},{key:`cron`,label:`Cron`},{key:`approvals`,label:`Approvals`},{key:`plugins`,label:`Plugins`}]},{id:`infrastructure`,label:v(`settings.section.web`),sections:[{key:`gateway`,label:`Gateway`},{key:`web`,label:`Web`},{key:`browser`,label:`Browser`},{key:`nodeHost`,label:`NodeHost`},{key:`canvasHost`,label:`CanvasHost`},{key:`discovery`,label:`Discovery`},{key:`media`,label:`Media`},{key:`acp`,label:`Acp`},{key:`mcp`,label:`Mcp`}]},{id:`appearance`,label:v(`tabs.appearance`),sections:[{key:`__appearance__`,label:`Theme`},{key:`ui`,label:`UI`},{key:`wizard`,label:v(`settings.section.wizard`)}]}],fR=new Set(dR.flatMap(e=>e.sections.map(e=>e.key)));function pR(e){return uR[e]??uR.default}function mR(e,t){if(!e||rn(e)!==`object`||!e.properties)return e;let n=t.include,r=t.exclude,i={};for(let t of Object.keys(e.properties))n&&n.size>0&&!n.has(t)||r&&r.size>0&&r.has(t)||(i[t]=e.properties[t]);return{...e,properties:i}}function hR(e){return!e||typeof e!=`object`||Array.isArray(e)?null:e}function gR(e,t){return qL[e]||{label:t?.title??cn(e),description:t?.description??``}}var _R=64,vR=2e4,yR=1e3,bR=2e3,xR=2e5,SR;function CR(e){return e.length>0?e.join(`.`):`<root>`}function wR(e,t){if(!e||!t)return[];let n=[],r=0;function i(e,t,r){n.length<yR&&n.push({path:e,from:t,to:r})}function a(e,t,n){if(e.length!==t.length||e.length>bR)return!0;for(let r=0;r<e.length;r+=1)if(s(e[r],t[r],n+1))return!0;return!1}function o(e,t,n){let r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!0;for(let i of r)if(!Object.prototype.hasOwnProperty.call(t,i)||s(e[i],t[i],n+1))return!0;return!1}function s(e,t,n){return r+=1,r>vR||n>_R?!0:e===t?!1:typeof e==typeof t?typeof e!=`object`||!e||t===null?e!==t:Array.isArray(e)||Array.isArray(t)?Array.isArray(e)&&Array.isArray(t)?a(e,t,n+1):!0:o(e,t,n+1):!0}function c(e,t,o,s){if(r+=1,r>vR||s>_R||n.length>=yR||e===t)return;if(typeof e!=typeof t){i(o,e,t);return}if(typeof e!=`object`||!e||t===null){e!==t&&i(o,e,t);return}if(Array.isArray(e)||Array.isArray(t)){(Array.isArray(e)&&Array.isArray(t)&&a(e,t,s+1)||!Array.isArray(e)||!Array.isArray(t))&&i(o,e,t);return}let l=e,u=t,d=new Set([...Object.keys(l),...Object.keys(u)]);for(let e of d)c(l[e],u[e],[...o,e],s+1)}return c(e,t,[],0),n}function TR(e,t){if(SR?.original===e&&SR.current===t)return SR.diff;if(e.length>xR||t.length>xR)return SR={original:e,current:t,diff:[]},SR.diff;try{let n=O.parse(e),r=O.parse(t);if(!n||!r||typeof n!=`object`||typeof r!=`object`||Array.isArray(n)||Array.isArray(r))return SR={original:e,current:t,diff:[]},[];let i=wR(n,r);return SR={original:e,current:t,diff:i},i}catch{return SR={original:e,current:t,diff:[]},[]}}function ER(e,t=40){if(Array.isArray(e))return`[${e.length} item${e.length===1?``:`s`}]`;let n;try{n=JSON.stringify(e)??String(e)}catch{n=String(e)}return n.length<=t?n:n.slice(0,t-3)+`...`}function DR(e,t,n){return vn(CR(e))&&t!=null&&ER(t).trim()!==``?fn:ER(t)}function OR(e,t){let n=e.split(`.`);return n.length===t.length?n.every((e,n)=>e===`*`||e===t[n]):!1}function kR(e,t){return Object.entries(t).some(([t,n])=>!!n.sensitive&&OR(t,e))}function AR(e,t){for(let n=1;n<=e.length;n+=1){let r=e.slice(0,n),i=CR(r);if((sn(r,t)?.sensitive??!1)||kR(r,t)||vn(i))return!0}return!1}function jR(e,t,n,r){let i=Cn(t,e,n)>0;return!r&&t!=null&&(AR(e,n)||i)?fn:ER(t)}var MR=[{id:`claw`,label:`Claw`,description:v(`common.theme`),icon:q.zap},{id:`knot`,label:`Knot`,description:`Black & red`,icon:q.link},{id:`dash`,label:`Dash`,description:v(`common.theme`),icon:q.barChart}];function NR(e){return e.hasCustomTheme&&e.customThemeLabel?e.customThemeLabel:v(`settings.actions.importTheme`)}function PR(){(typeof requestAnimationFrame==`function`?requestAnimationFrame:e=>window.setTimeout(()=>e(0),0))(()=>{let e=globalThis.document?.querySelector(`[data-custom-theme-import-input]`);e&&(typeof e.scrollIntoView==`function`&&e.scrollIntoView({block:`center`,behavior:`smooth`}),e.focus(),e.select())})}function FR(e){let t=e.webPush;if(!t)return d`
4909
+ `},dR=[{id:`core`,label:`Core`,sections:[{key:`env`,label:v(`settings.section.env`)},{key:`auth`,label:v(`settings.section.auth`)},{key:`update`,label:`Updates`},{key:`meta`,label:`Meta`},{key:`logging`,label:`Logging`},{key:`diagnostics`,label:v(`settings.section.diagnostics`)},{key:`cli`,label:`Cli`},{key:`secrets`,label:`Secrets`}]},{id:`ai`,label:`AI & Agents`,sections:[{key:`agents`,label:`Agents`},{key:`models`,label:`Models`},{key:`skills`,label:`Skills`},{key:`tools`,label:`Tools`},{key:`memory`,label:`Memory`},{key:`session`,label:`Session`}]},{id:`communication`,label:v(`settings.section.channels`),sections:[{key:`channels`,label:`Channels`},{key:`messages`,label:`Messages`},{key:`broadcast`,label:`Broadcast`},{key:`talk`,label:`Talk`},{key:`audio`,label:`Audio`}]},{id:`automation`,label:`Automation`,sections:[{key:`commands`,label:`Commands`},{key:`hooks`,label:`Hooks`},{key:`bindings`,label:`Bindings`},{key:`cron`,label:`Cron`},{key:`approvals`,label:`Approvals`},{key:`plugins`,label:`Plugins`}]},{id:`infrastructure`,label:v(`settings.section.web`),sections:[{key:`gateway`,label:`Gateway`},{key:`web`,label:`Web`},{key:`browser`,label:`Browser`},{key:`nodeHost`,label:`NodeHost`},{key:`canvasHost`,label:`CanvasHost`},{key:`discovery`,label:`Discovery`},{key:`media`,label:`Media`},{key:`acp`,label:`Acp`},{key:`mcp`,label:`Mcp`}]},{id:`appearance`,label:v(`tabs.appearance`),sections:[{key:`__appearance__`,label:`Theme`},{key:`ui`,label:`UI`},{key:`wizard`,label:v(`settings.section.wizard`)}]}],fR=new Set(dR.flatMap(e=>e.sections.map(e=>e.key)));function pR(e){return uR[e]??uR.default}function mR(e,t){if(!e||rn(e)!==`object`||!e.properties)return e;let n=t.include,r=t.exclude,i={};for(let t of Object.keys(e.properties))n&&n.size>0&&!n.has(t)||r&&r.size>0&&r.has(t)||(i[t]=e.properties[t]);return{...e,properties:i}}function hR(e){return!e||typeof e!=`object`||Array.isArray(e)?null:e}function gR(e,t){return qL[e]||{label:t?.title??cn(e),description:t?.description??``}}var _R=64,vR=2e4,yR=1e3,bR=2e3,xR=2e5,SR;function CR(e){return e.length>0?e.join(`.`):`<root>`}function wR(e,t){if(!e||!t)return[];let n=[],r=0;function i(e,t,r){n.length<yR&&n.push({path:e,from:t,to:r})}function a(e,t,n){if(e.length!==t.length||e.length>bR)return!0;for(let r=0;r<e.length;r+=1)if(s(e[r],t[r],n+1))return!0;return!1}function o(e,t,n){let r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!0;for(let i of r)if(!Object.prototype.hasOwnProperty.call(t,i)||s(e[i],t[i],n+1))return!0;return!1}function s(e,t,n){return r+=1,r>vR||n>_R?!0:e===t?!1:typeof e==typeof t?typeof e!=`object`||!e||t===null?e!==t:Array.isArray(e)||Array.isArray(t)?Array.isArray(e)&&Array.isArray(t)?a(e,t,n+1):!0:o(e,t,n+1):!0}function c(e,t,o,s){if(r+=1,r>vR||s>_R||n.length>=yR||e===t)return;if(typeof e!=typeof t){i(o,e,t);return}if(typeof e!=`object`||!e||t===null){e!==t&&i(o,e,t);return}if(Array.isArray(e)||Array.isArray(t)){(Array.isArray(e)&&Array.isArray(t)&&a(e,t,s+1)||!Array.isArray(e)||!Array.isArray(t))&&i(o,e,t);return}let l=e,u=t,d=new Set([...Object.keys(l),...Object.keys(u)]);for(let e of d)c(l[e],u[e],[...o,e],s+1)}return c(e,t,[],0),n}function TR(e,t){if(SR?.original===e&&SR.current===t)return SR.diff;if(e.length>xR||t.length>xR)return SR={original:e,current:t,diff:[]},SR.diff;try{let n=O.parse(e),r=O.parse(t);if(!n||!r||typeof n!=`object`||typeof r!=`object`||Array.isArray(n)||Array.isArray(r))return SR={original:e,current:t,diff:[]},[];let i=wR(n,r);return SR={original:e,current:t,diff:i},i}catch{return SR={original:e,current:t,diff:[]},[]}}function ER(e,t=40){if(Array.isArray(e))return`[${e.length} item${e.length===1?``:`s`}]`;let n;try{n=JSON.stringify(e)??String(e)}catch{n=String(e)}return n.length<=t?n:n.slice(0,t-3)+`...`}function DR(e,t,n){return vn(CR(e))&&t!=null&&ER(t).trim()!==``?fn:ER(t)}function OR(e,t){let n=e.split(`.`);return n.length===t.length?n.every((e,n)=>e===`*`||e===t[n]):!1}function kR(e,t){return Object.entries(t).some(([t,n])=>!!n.sensitive&&OR(t,e))}function AR(e,t){for(let n=1;n<=e.length;n+=1){let r=e.slice(0,n),i=CR(r);if((sn(r,t)?.sensitive??!1)||kR(r,t)||vn(i))return!0}return!1}function jR(e,t,n,r){let i=Cn(t,e,n)>0;return!r&&t!=null&&(AR(e,n)||i)?fn:ER(t)}var MR=[{id:`claw`,label:`Claw`,description:v(`common.theme`),icon:q.zap},{id:`knot`,label:`Knot`,description:v(`settings.themeBlackRed`),icon:q.link},{id:`dash`,label:`Dash`,description:v(`common.theme`),icon:q.barChart}];function NR(e){return e.hasCustomTheme&&e.customThemeLabel?e.customThemeLabel:v(`settings.actions.importTheme`)}function PR(){(typeof requestAnimationFrame==`function`?requestAnimationFrame:e=>window.setTimeout(()=>e(0),0))(()=>{let e=globalThis.document?.querySelector(`[data-custom-theme-import-input]`);e&&(typeof e.scrollIntoView==`function`&&e.scrollIntoView({block:`center`,behavior:`smooth`}),e.focus(),e.select())})}function FR(e){let t=e.webPush;if(!t)return d`
4904
4910
  <div class="settings-appearance">
4905
4911
  <div class="settings-appearance__section">
4906
4912
  <h3 class="settings-appearance__heading">${v(`settings.pushNotifications.title`)}</h3>
@@ -4917,13 +4923,17 @@ ${e}
4917
4923
 
4918
4924
  <div class="settings-info-grid">
4919
4925
  <div class="settings-info-row">
4920
- <span class="settings-info-row__label">${v(`settings.pushNotifications.browserSupport`)}</span>
4926
+ <span class="settings-info-row__label"
4927
+ >${v(`settings.pushNotifications.browserSupport`)}</span
4928
+ >
4921
4929
  <span class="settings-info-row__value"
4922
4930
  >${t.supported?`Available`:v(`settings.node.notSupported`)}</span
4923
4931
  >
4924
4932
  </div>
4925
4933
  <div class="settings-info-row">
4926
- <span class="settings-info-row__label">${v(`settings.pushNotifications.permission`)}</span>
4934
+ <span class="settings-info-row__label"
4935
+ >${v(`settings.pushNotifications.permission`)}</span
4936
+ >
4927
4937
  <span class="settings-info-row__value">${n}</span>
4928
4938
  </div>
4929
4939
  <div class="settings-info-row">
@@ -4974,7 +4984,7 @@ ${e}
4974
4984
  </div>
4975
4985
  `:i}
4976
4986
  </div>
4977
- `}function IR(e){let t=e.hasCustomTheme||e.customThemeImportExpanded===!0;t&&e.customThemeImportFocusToken!=null&&e.customThemeImportFocusToken!==Q.lastCustomThemeImportFocusToken&&(Q.lastCustomThemeImportFocusToken=e.customThemeImportFocusToken,PR());let n=NR(e),r=[...MR,{id:`custom`,label:e.hasCustomTheme?n:`Import`,description:e.hasCustomTheme?`Imported from tweakcn: ${n}`:`Import a tweakcn theme into this browser-local slot`,icon:q.spark}];return d`
4987
+ `}function IR(e){let t=e.hasCustomTheme||e.customThemeImportExpanded===!0;t&&e.customThemeImportFocusToken!=null&&e.customThemeImportFocusToken!==Q.lastCustomThemeImportFocusToken&&(Q.lastCustomThemeImportFocusToken=e.customThemeImportFocusToken,PR());let n=NR(e),r=[...MR,{id:`custom`,label:e.hasCustomTheme?n:`Import`,description:e.hasCustomTheme?`Imported from tweakcn: ${n}`:v(`settings.importTheme`),icon:q.spark}];return d`
4978
4988
  <div class="settings-appearance">
4979
4989
  <div class="settings-appearance__section">
4980
4990
  <h3 class="settings-appearance__heading">Theme</h3>
@@ -5195,7 +5205,7 @@ ${e}
5195
5205
  <button
5196
5206
  class="config-mode-toggle__btn ${f===`form`?`active`:``}"
5197
5207
  ?disabled=${e.schemaLoading||!e.schema}
5198
- title=${l?`Form view can't safely edit some fields`:``}
5208
+ title=${l?v(`settings.formViewWarning`):``}
5199
5209
  @click=${()=>e.onFormModeChange(`form`)}
5200
5210
  >
5201
5211
  Form
@@ -5203,7 +5213,7 @@ ${e}
5203
5213
  <button
5204
5214
  class="config-mode-toggle__btn ${f===`raw`?`active`:``}"
5205
5215
  ?disabled=${!u}
5206
- title=${u?`Edit raw JSON/JSON5 config`:v(`settings.status.rawUnavailable`)}
5216
+ title=${v(u?`settings.editRawConfig`:`settings.status.rawUnavailable`)}
5207
5217
  @click=${()=>e.onFormModeChange(`raw`)}
5208
5218
  >
5209
5219
  Raw
@@ -5340,9 +5350,7 @@ ${e}
5340
5350
  <line x1="12" y1="9" x2="12" y2="13"></line>
5341
5351
  <line x1="12" y1="17" x2="12.01" y2="17"></line>
5342
5352
  </svg>
5343
- <span class="config-validity-warning__text"
5344
- >${v(`settings.configInvalid`)}</span
5345
- >
5353
+ <span class="config-validity-warning__text">${v(`settings.configInvalid`)}</span>
5346
5354
  <button
5347
5355
  class="btn btn--sm"
5348
5356
  @click=${()=>{Q.validityDismissed=!0,p()}}
@@ -5873,7 +5881,7 @@ ${e}
5873
5881
 
5874
5882
  ${e.statusError?d`<div class="dreams__controls-error">${e.statusError}</div>`:i}
5875
5883
  </section>
5876
- `}function Vz(e,t,n){return t===n?`${e}:${t}`:`${e}:${t}-${n}`}function Hz(e){let t=Date.parse(e);return Number.isFinite(t)?new Date(t).toLocaleString([],{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`}):e}function Uz(e){return e.replace(/\\/g,`/`).split(`/`).findLast(Boolean)??e}function Wz(e){switch(e){case`entity`:return`entity`;case`concept`:return`concept`;case`source`:return`source`;case`synthesis`:return`synthesis`;case`report`:return`report`}return e}function Gz(e,t,n=`${t}s`){return`${e} ${e===1?t:n}`}var Kz=[`source`,`synthesis`,`report`,`entity`,`concept`];function qz(e){switch(e){case`source`:return`Sources`;case`synthesis`:return`Syntheses`;case`report`:return`Reports`;case`entity`:return`Entities`;case`concept`:return`Concepts`}return e}function Jz(e){let t=Kz.map(t=>{let n=e[t];return n>0?`${qz(t)} · ${Gz(n,`page`)}`:null}).filter(e=>e!==null);return t.length>0?t.join(`; `):v(`dreaming.noPagesYet`)}function Yz(e){let t=[`${e.label}: ${Gz(e.itemCount,`page`)}`];if(e.claimCount>0&&t.push(Gz(e.claimCount,`claim row`)),e.questionCount>0){let n=e.items.filter(e=>e.questionCount>0).length,r=n>0?` on ${Gz(n,`page`)}`:``;t.push(`${Gz(e.questionCount,`open question`)}${r}`)}return e.contradictionCount>0&&t.push(Gz(e.contradictionCount,`contradiction`)),t.join(` · `)}function Xz(e){if(e.digestStatus===`withheld`)return`needs review`;switch(e.riskLevel){case`low`:return`low risk`;case`medium`:return`medium risk`;case`high`:return`high risk`;case`unknown`:return`unknown risk`}return`unknown risk`}function Zz(e,t,n){e.has(t)?e.delete(t):e.add(t),n?.()}function Qz(e,t){if(e.kind===`report`){$z(e.pagePath,t);return}Zz(xz,e.pagePath,t.onRequestUpdate)}async function $z(e,t){Sz=!0,Cz=!0,wz=Uz(e),Tz=e,Ez=null,Dz=``,Oz=null,kz=!1,Az=null,t.onRequestUpdate?.();try{let n=await t.onOpenWikiPage(e);if(!n){Az=`No wiki page found for ${e}.`;return}wz=n.title,Tz=n.path,Ez=n.updatedAt??null,Dz=n.content,Oz=typeof n.totalLines==`number`?n.totalLines:null,kz=n.truncated===!0}catch(e){Az=String(e)}finally{Cz=!1,t.onRequestUpdate?.()}}function eB(e){Sz=!1,Cz=!1,wz=``,Tz=``,Ez=null,Dz=``,Oz=null,kz=!1,Az=null,e?.()}function tB(e){return Sz?d`
5884
+ `}function Vz(e,t,n){return t===n?`${e}:${t}`:`${e}:${t}-${n}`}function Hz(e){let t=Date.parse(e);return Number.isFinite(t)?new Date(t).toLocaleString([],{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`}):e}function Uz(e){return e.replace(/\\/g,`/`).split(`/`).findLast(Boolean)??e}function Wz(e){switch(e){case`entity`:return`entity`;case`concept`:return`concept`;case`source`:return`source`;case`synthesis`:return`synthesis`;case`report`:return`report`}return e}function Gz(e,t,n=`${t}s`){return`${e} ${e===1?t:n}`}var Kz=[`source`,`synthesis`,`report`,`entity`,`concept`];function qz(e){switch(e){case`source`:return v(`dreaming.memoryPalace.pageLabels.sources`);case`synthesis`:return v(`dreaming.memoryPalace.pageLabels.syntheses`);case`report`:return v(`dreaming.memoryPalace.pageLabels.reports`);case`entity`:return v(`dreaming.memoryPalace.pageLabels.entities`);case`concept`:return v(`dreaming.memoryPalace.pageLabels.concepts`)}return e}function Jz(e){let t=Kz.map(t=>{let n=e[t];return n>0?`${qz(t)} · ${Gz(n,`page`)}`:null}).filter(e=>e!==null);return t.length>0?t.join(`; `):v(`dreaming.noPagesYet`)}function Yz(e){let t=[`${e.label}: ${Gz(e.itemCount,`page`)}`];if(e.claimCount>0&&t.push(Gz(e.claimCount,`claim row`)),e.questionCount>0){let n=e.items.filter(e=>e.questionCount>0).length,r=n>0?` on ${Gz(n,`page`)}`:``;t.push(`${Gz(e.questionCount,`open question`)}${r}`)}return e.contradictionCount>0&&t.push(Gz(e.contradictionCount,`contradiction`)),t.join(` · `)}function Xz(e){if(e.digestStatus===`withheld`)return`needs review`;switch(e.riskLevel){case`low`:return`low risk`;case`medium`:return`medium risk`;case`high`:return`high risk`;case`unknown`:return`unknown risk`}return`unknown risk`}function Zz(e,t,n){e.has(t)?e.delete(t):e.add(t),n?.()}function Qz(e,t){if(e.kind===`report`){$z(e.pagePath,t);return}Zz(xz,e.pagePath,t.onRequestUpdate)}async function $z(e,t){Sz=!0,Cz=!0,wz=Uz(e),Tz=e,Ez=null,Dz=``,Oz=null,kz=!1,Az=null,t.onRequestUpdate?.();try{let n=await t.onOpenWikiPage(e);if(!n){Az=`No wiki page found for ${e}.`;return}wz=n.title,Tz=n.path,Ez=n.updatedAt??null,Dz=n.content,Oz=typeof n.totalLines==`number`?n.totalLines:null,kz=n.truncated===!0}catch(e){Az=String(e)}finally{Cz=!1,t.onRequestUpdate?.()}}function eB(e){Sz=!1,Cz=!1,wz=``,Tz=``,Ez=null,Dz=``,Oz=null,kz=!1,Az=null,e?.()}function tB(e){return Sz?d`
5877
5885
  <div
5878
5886
  class="dreams-diary__preview-backdrop"
5879
5887
  @click=${()=>eB(e.onRequestUpdate)}
@@ -5881,7 +5889,9 @@ ${e}
5881
5889
  <div class="dreams-diary__preview-panel" @click=${e=>e.stopPropagation()}>
5882
5890
  <div class="dreams-diary__preview-header">
5883
5891
  <div>
5884
- <div class="dreams-diary__preview-title">${wz||`Wiki page`}</div>
5892
+ <div class="dreams-diary__preview-title">
5893
+ ${wz||v(`dreaming.wikiPage`)}
5894
+ </div>
5885
5895
  <div class="dreams-diary__preview-meta">
5886
5896
  ${Tz} ${Ez?` · ${Ez}`:``}
5887
5897
  </div>
@@ -6157,13 +6167,13 @@ ${e}
6157
6167
  class="btn btn--subtle btn--sm"
6158
6168
  @click=${n=>{n.stopPropagation(),Zz(bz,t.pagePath,e.onRequestUpdate)}}
6159
6169
  >
6160
- ${n?`Hide details`:`Details`}
6170
+ ${v(n?`dreaming.toggle.hideDetails`:`dreaming.toggle.details`)}
6161
6171
  </button>
6162
6172
  <button
6163
6173
  class="btn btn--subtle btn--sm"
6164
6174
  @click=${n=>{n.stopPropagation(),$z(t.pagePath,e)}}
6165
6175
  >
6166
- Open source page
6176
+ ${v(`dreaming.insights.openSourcePage`)}
6167
6177
  </button>
6168
6178
  </div>
6169
6179
  </article>
@@ -6263,13 +6273,13 @@ ${e}
6263
6273
  class="btn btn--subtle btn--sm"
6264
6274
  @click=${n=>{n.stopPropagation(),Zz(xz,t.pagePath,e.onRequestUpdate)}}
6265
6275
  >
6266
- ${n?`Hide details`:`Details`}
6276
+ ${v(n?`dreaming.toggle.hideDetails`:`dreaming.toggle.details`)}
6267
6277
  </button>
6268
6278
  <button
6269
6279
  class="btn btn--subtle btn--sm"
6270
6280
  @click=${n=>{n.stopPropagation(),$z(t.pagePath,e)}}
6271
6281
  >
6272
- Open wiki page
6282
+ ${v(`dreaming.memoryPalace.openWikiPage`)}
6273
6283
  </button>
6274
6284
  </div>
6275
6285
  </article>
@@ -6346,7 +6356,7 @@ ${e}
6346
6356
  ?disabled=${t?!1:e.modeSaving||(vz===`dreams`?e.dreamDiaryLoading:vz===`insights`?e.wikiImportInsightsLoading:e.wikiMemoryPalaceLoading)}
6347
6357
  @click=${()=>{jz=0,t?e.onOpenConfig():vz===`dreams`?e.onRefreshDiary():vz===`insights`?e.onRefreshImports():e.onRefreshMemoryPalace()}}
6348
6358
  >
6349
- ${t?v(`dreaming.howToEnable`):vz===`dreams`?e.dreamDiaryLoading?v(`dreaming.diary.reloading`):v(`dreaming.diary.reload`):vz===`insights`?e.wikiImportInsightsLoading?`Reloading…`:`Reload`:e.wikiMemoryPalaceLoading?`Reloading…`:`Reload`}
6359
+ ${t?v(`dreaming.howToEnable`):vz===`dreams`?e.dreamDiaryLoading?v(`dreaming.diary.reloading`):v(`dreaming.diary.reload`):vz===`insights`?e.wikiImportInsightsLoading?v(`dreaming.diary.reloading`):v(`dreaming.diary.reload`):e.wikiMemoryPalaceLoading?v(`dreaming.diary.reloading`):v(`dreaming.diary.reload`)}
6350
6360
  </button>
6351
6361
  </div>
6352
6362
  ${nB()}
@@ -6981,7 +6991,7 @@ ${e.pluginDescription}</pre
6981
6991
  aria-label=${v(`sessions.sessionDetails.activeRun`)}
6982
6992
  ></span>`:i}
6983
6993
  </a>
6984
- `}var wV=dI(()=>hV(()=>import(`./agents-wUgG33N_.js`),__vite__mapDeps([0,1,2,3,4,5,6,7]),import.meta.url),_V),TV=dI(()=>hV(()=>import(`./activity-CQDZlvlv.js`),__vite__mapDeps([8,1,4,5]),import.meta.url),_V),EV=dI(()=>hV(()=>import(`./channels-DgmnVztj.js`),__vite__mapDeps([9,1,5,6]),import.meta.url),_V),DV=dI(()=>hV(()=>import(`./cron-D6RebRs_.js`),__vite__mapDeps([10,1,5]),import.meta.url),_V),OV=dI(()=>hV(()=>import(`./debug-DXlIrEz5.js`),__vite__mapDeps([11,1,5]),import.meta.url),_V),kV=dI(()=>hV(()=>import(`./instances-34XIx8zZ.js`),__vite__mapDeps([12,1,5]),import.meta.url),_V),AV=dI(()=>hV(()=>import(`./logs-FvE0QuC6.js`),__vite__mapDeps([13,1,4,5]),import.meta.url),_V),jV=dI(()=>hV(()=>import(`./nodes-BQqP_Fco.js`),__vite__mapDeps([14,1,4,5]),import.meta.url),_V),MV=dI(()=>hV(()=>import(`./sessions-BOQ1YpmX.js`),__vite__mapDeps([15,1,4,5]),import.meta.url),_V),NV=dI(()=>hV(()=>import(`./skills-BqKUfTXv.js`),__vite__mapDeps([16,1,4,5,7]),import.meta.url),_V),PV=dI(()=>hV(()=>import(`./workboard-bmN4DclT.js`),__vite__mapDeps([17,1,5]),import.meta.url),_V);function FV(e){return typeof e!=`number`||!Number.isFinite(e)?null:new Date(e).toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}function IV(e){if(!e?.phases)return null;let t;for(let n of Object.values(e.phases))!n.enabled||typeof n.nextRunAtMs!=`number`||(t===void 0||n.nextRunAtMs<t)&&(t=n.nextRunAtMs);return FV(t)}var LV=null,RV=`fengming:control-ui:update-banner-dismissed:v1`,zV=[`off`,`minimal`,`low`,`medium`,`high`],BV=[`UTC`,`America/Los_Angeles`,`America/Denver`,`America/Chicago`,`America/New_York`,`Europe/London`,`Europe/Berlin`,`Asia/Tokyo`];function VV(e){return/^https?:\/\//i.test(e.trim())}function HV(e){return typeof e==`string`?e.trim():``}function UV(e){let t=new Set,n=[];for(let r of e){let e=r.trim();if(!e)continue;let i=e.toLowerCase();t.has(i)||(t.add(i),n.push(e))}return n}function WV(){try{let e=et()?.getItem(RV);if(!e)return null;let t=JSON.parse(e);return!t||typeof t.latestVersion!=`string`?null:{latestVersion:t.latestVersion,channel:typeof t.channel==`string`?t.channel:null,dismissedAtMs:typeof t.dismissedAtMs==`number`?t.dismissedAtMs:Date.now()}}catch{return null}}function GV(e){let t=WV();if(!t)return!1;let n=e,r=n&&typeof n.latestVersion==`string`?n.latestVersion:null,i=n&&typeof n.channel==`string`?n.channel:null;return!!(r&&t.latestVersion===r&&t.channel===i)}function KV(e){let t=e,n=t&&typeof t.latestVersion==`string`?t.latestVersion:null;if(!n)return;let r={latestVersion:n,channel:t&&typeof t.channel==`string`?t.channel:null,dismissedAtMs:Date.now()};try{et()?.setItem(RV,JSON.stringify(r))}catch{}}var qV=[`messages`,`broadcast`,`__notifications__`,`talk`,`audio`,`channels`],JV=[`__appearance__`,`ui`,`wizard`],YV=[`commands`,`hooks`,`bindings`,`cron`,`approvals`,`plugins`],XV=[`gateway`,`web`,`browser`,`nodeHost`,`canvasHost`,`discovery`,`media`,`acp`,`mcp`],ZV=[`agents`,`models`,`skills`,`tools`,`memory`,`session`],QV=new Set([...qV,...JV,...YV,...XV,...ZV]);function $V(e,t){return e&&QV.has(e)?{activeSection:null,activeSubsection:null}:{activeSection:e,activeSubsection:t}}function eH(e,t,n){return e&&!n.includes(e)?{activeSection:null,activeSubsection:null}:{activeSection:e,activeSubsection:t}}function tH(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return 0;let r=e.properties;if(!r||typeof r!=`object`||Array.isArray(r))return 0;let i=t?.length?new Set(t):null,a=n?.length?new Set(n):null;return Object.keys(r).filter(e=>!(i&&!i.has(e)||a?.has(e))).length}function nH(e,t,n,r){let i=Qg(),a=r();return u_(e,t,{...n,durationMs:$g(Qg()-i)}),a}function rH(e){let t=e.agentsList?.agents??[],n=z(e.sessionKey)?.agentId??e.agentsList?.defaultId??`main`,r=t.find(e=>e.id===n)?.identity,i=r?.avatarUrl??r?.avatar;if(i&&va(i))return i}function iH(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e.ui;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t.assistant;return!n||typeof n!=`object`||Array.isArray(n)?null:T(n.avatar)??null}function aH(e,t){let n=fi(e??``),r=encodeURIComponent(t);return n?`${n}/avatar/${r}`:`/avatar/${r}`}var oH=[{id:`weixin`,label:`微信`},{id:`qqbot`,label:`QQ`},{id:`feishu`,label:`飞书`},{id:`webhooks`,label:`Webhooks`}];function sH(e){let t=e.trim();return t?t.split(/[-_]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `):`Unknown`}function cH(e){let t=e.configForm??e.configSnapshot?.config;if(!t||typeof t!=`object`)return[];let n=`channels`in t&&t.channels&&typeof t.channels==`object`?t.channels:{},r=Object.keys(n).filter(e=>e.trim().length>0),i=r.length>0?r.toSorted((e,t)=>e.localeCompare(t)):oH.map(({id:e})=>e),a=new Map(oH.map(({id:e,label:t})=>[e,t])),o=[];for(let e of i){let t=n[e],r=typeof t==`object`&&!!t&&Object.keys(t).length>0;o.push({id:e,label:a.get(e)??sH(e),connected:r,detail:r?`Configured`:void 0})}return o}function lH(e){let t=e.configForm??e.configSnapshot?.config;if(!t||typeof t!=`object`)return 0;let n=t.mcp;if(!n||typeof n!=`object`)return 0;let r=`servers`in n&&n.servers&&typeof n.servers==`object`?n.servers:{};return Object.keys(r).length}function uH(e){let t=e.configForm??e.configSnapshot?.config;if(!t||typeof t!=`object`)return{gatewayAuth:`unknown`,execPolicy:`unknown`,deviceAuth:!1,browserEnabled:!0,toolProfile:`full`};let n=t,r=`gateway`in n&&n.gateway&&typeof n.gateway==`object`?n.gateway:null,i=r&&`auth`in r&&r.auth&&typeof r.auth==`object`?r.auth:null,a=`unknown`;i&&(a=(typeof i.mode==`string`?i.mode.trim():``)||(i.password?`password`:i.token?`token`:i.trustedProxy?`trusted-proxy`:`none`));let o=`allowlist`,s=`full`,c=n.tools;if(c&&typeof c==`object`){let e=c.profile;if(typeof e==`string`){let t=e.trim();t&&(s=t)}let t=c.exec;if(t&&typeof t==`object`){let e=t.security;if(typeof e==`string`){let t=e.trim();t&&(o=t)}}}let l=!0,u=`browser`in n&&n.browser&&typeof n.browser==`object`?n.browser:null;u&&typeof u.enabled==`boolean`&&(l=u.enabled);let d=!0;return r&&(`controlUi`in r&&r.controlUi&&typeof r.controlUi==`object`?r.controlUi:null)?.dangerouslyDisableDeviceAuth===!0&&(d=!1),{gatewayAuth:a,execPolicy:o,deviceAuth:d,browserEnabled:l,toolProfile:s}}function dH(e){return e.sessionsResult?.sessions?.find(t=>t.key===e.sessionKey)}function fH(e,t){return nz({open:e.cronQuickCreateOpen,step:e.cronQuickCreateStep,draft:e.cronQuickCreateDraft??KR(),onDraftChange:n=>{e.cronQuickCreateDraft={...e.cronQuickCreateDraft??KR(),...n},t?.()},onStepChange:n=>{e.cronQuickCreateStep=n,t?.()},onCreate:()=>{let n=JR(e.cronQuickCreateDraft??KR());e.cronEditingJobId=null,e.cronForm={...hg,...n},t?.(),(async()=>{if(!await cv(e)){t?.();return}e.cronQuickCreateOpen=!1,e.cronQuickCreateStep=`what`,e.cronQuickCreateDraft=null,t?.()})()},onAdvancedCreate:()=>{let n=JR(e.cronQuickCreateDraft??KR());e.cronEditingJobId=null,e.cronForm=B_({...hg,...n}),e.cronFieldErrors=V_(e.cronForm),e.cronQuickCreateOpen=!1,e.cronQuickCreateStep=`what`,e.cronQuickCreateDraft=null,e.cronFormCollapsed=!1,t?.()},onCancel:()=>{e.cronQuickCreateOpen=!1,e.cronQuickCreateStep=`what`,e.cronQuickCreateDraft=null,t?.()}})}function pH(e){let t=e,n=typeof t.requestUpdate==`function`?()=>t.requestUpdate?.():void 0;if(gV=n,!e.connected)return d` ${HB(e)} ${kB(e)} `;let r=e.presenceEntries.length,a=e.sessionsResult?.count??null,o=e.cronStatus?.nextWakeAtMs??null,s=e.connected?null:v(`chat.disconnected`),c=e.tab===`chat`,u=c&&(e.settings.chatFocusMode||e.onboarding),f=c&&(u||e.chatHeaderControlsHidden),p=e.navDrawerOpen&&!u&&!e.onboarding,m=e.settings.navCollapsed&&!p,h=WN(e),g=e.onboarding?!1:e.settings.chatShowThinking,_=e.onboarding?!0:e.settings.chatShowToolCalls,y=T(Mo().avatar)??null,b=rH(e),x=y?`data`:e.chatAvatarStatus??e.assistantAvatarStatus??null,S=y?null:e.chatAvatarReason??e.assistantAvatarReason??null,C=x===`none`&&S===`missing`,w=y??(C?null:e.assistantAvatar),E=y??e.chatAvatarUrl??(C?null:b??null),D=y?`data`:e.assistantAvatarStatus??e.chatAvatarStatus??null,O=y?null:e.assistantAvatarReason??e.chatAvatarReason??null,ee=y??e.assistantAvatarSource??e.chatAvatarSource??null,k=D===`none`&&O===`missing`,te=y??(k||D===`local`?null:e.assistantAvatar),A=y??(D===`local`&&e.assistantAgentId?aH(e.basePath,e.assistantAgentId):e.chatAvatarUrl??(k?null:b??null)),j=e.configForm??e.configSnapshot?.config,M=zv(j),N=e.dreamingStatus?.enabled??M.enabled,P=IV(e.dreamingStatus),F=e.dreamingStatusLoading||e.dreamingModeSaving,ne=e.dreamingStatusLoading||e.dreamDiaryLoading,re=()=>{(async()=>{await Un(e),await Promise.all([ey(e),ty(e),ny(e),ry(e)])})()},ie=async t=>{if(!e.client||!e.connected)return null;let n=await e.client.request(`wiki.get`,{lookup:t,fromLine:1,lineCount:5e3}),r=typeof n?.title==`string`&&n.title.trim()?n.title.trim():t,i=typeof n?.path==`string`&&n.path.trim()?n.path.trim():t,a=typeof n?.content==`string`&&n.content.length>0?n.content:v(`wiki.noContent`),o=typeof n?.updatedAt==`string`&&n.updatedAt.trim()?n.updatedAt.trim():void 0,s=typeof n?.totalLines==`number`&&Number.isFinite(n.totalLines)?Math.max(0,Math.floor(n.totalLines)):void 0,c=n?.truncated===!0;return{title:r,path:i,content:a,...s===void 0?{}:{totalLines:s},...c?{truncated:c}:{},...o?{updatedAt:o}:{}}},ae=t=>{e.dreamingModeSaving||e.dreamingRestartConfirmLoading||e.dreamingRestartConfirmOpen||N===t||(e.dreamingPendingEnabled=t,e.dreamingRestartConfirmOpen=!0,e.dreamingStatusError=null)},oe=()=>{e.dreamingRestartConfirmLoading||(e.dreamingRestartConfirmOpen=!1,e.dreamingPendingEnabled=null,e.dreamingStatusError=null)},se=()=>{let t=e.dreamingPendingEnabled;t==null||e.dreamingRestartConfirmLoading||(async()=>{e.dreamingRestartConfirmLoading=!0,e.dreamingStatusError=null;try{if(!await hy(e,t)){e.dreamingStatusError||=v(`dreaming.restartConfirmation.failed`);return}await Un(e),await ey(e),e.dreamingRestartConfirmOpen=!1,e.dreamingPendingEnabled=null}finally{e.dreamingRestartConfirmLoading=!1}})()},ce=fi(e.basePath??``),le=()=>e.agentsSelectedId??e.agentsList?.defaultId??e.agentsList?.agents?.[0]?.id??null,I=le(),ue=Xc(e.sessionKey),de=!!(I&&ue&&I===ue),fe=()=>e.configForm??e.configSnapshot?.config,L=e=>fr(fe(),e),pe=t=>pr(e,t),me=(e,t)=>{let n=t?pe(e):L(e);return n>=0?[`agents`,`list`,n,`tools`]:null},he=e=>{let t=fe()?.agents?.list,n=Array.isArray(t)?t[e]?.model:void 0;return{basePath:[`agents`,`list`,e,`model`],existing:n}},ge=za(new Set([...e.agentsList?.agents?.map(e=>e.id.trim())??[],...e.cronJobs.map(e=>typeof e.agentId==`string`?e.agentId.trim():``).filter(Boolean)].filter(Boolean))),_e=za(new Set([...e.cronModelSuggestions,...Ba(j),...e.cronJobs.map(e=>{let t=F_(e);return t?.kind!==`agentTurn`||typeof t.model!=`string`?``:t.model.trim()}).filter(Boolean)].filter(Boolean))),ve=Y_(e),ye=e.cronForm.deliveryChannel&&e.cronForm.deliveryChannel.trim()?e.cronForm.deliveryChannel.trim():`last`,be=e.cronJobs.map(e=>HV(e.delivery?.to)).filter(Boolean),xe=(ye===`last`?Object.values(e.channelsSnapshot?.channelAccounts??{}).flat():e.channelsSnapshot?.channelAccounts?.[ye]??[]).flatMap(e=>[HV(e.accountId),HV(e.name)]).filter(Boolean),Se=UV([...be,...xe]),Ce=UV(xe),we=e.cronForm.deliveryMode===`webhook`?Se.filter(e=>VV(e)):Se,Te={raw:e.configRaw,originalRaw:e.configRawOriginal,valid:e.configValid,issues:e.configIssues,loading:e.configLoading,saving:e.configSaving,applying:e.configApplying,updating:e.updateRunning,connected:e.connected,schema:e.configSchema,schemaLoading:e.configSchemaLoading,uiHints:e.configUiHints,formValue:e.configForm,originalValue:e.configFormOriginal,onRawChange:t=>{cr(e,t)},onRequestUpdate:n,onFormPatch:(t,n)=>sr(e,t,n),onReload:()=>Un(e,{discardPendingChanges:!0}),onReset:()=>ur(e),onSave:()=>er(e),onApply:()=>tr(e),onUpdate:()=>nr(e),onOpenFile:()=>hr(e),version:e.hello?.server?.version??``,theme:e.theme,themeMode:e.themeMode,setTheme:(t,n)=>e.setTheme(t,n),setThemeMode:(t,n)=>e.setThemeMode(t,n),hasCustomTheme:!!e.settings.customTheme,customThemeLabel:e.settings.customTheme?.label??null,customThemeSourceUrl:e.settings.customTheme?.sourceUrl??null,customThemeImportUrl:e.customThemeImportUrl,customThemeImportBusy:e.customThemeImportBusy,customThemeImportMessage:e.customThemeImportMessage,customThemeImportExpanded:e.customThemeImportExpanded,customThemeImportFocusToken:e.customThemeImportFocusToken,onCustomThemeImportUrlChange:t=>e.setCustomThemeImportUrl(t),onOpenCustomThemeImport:()=>e.openCustomThemeImport(),onImportCustomTheme:()=>void e.importCustomTheme(),onClearCustomTheme:()=>e.clearCustomTheme(),borderRadius:e.settings.borderRadius,setBorderRadius:t=>e.setBorderRadius(t),textScale:e.settings.textScale??100,setTextScale:t=>e.setTextScale(t),gatewayUrl:e.settings.gatewayUrl,assistantName:e.assistantName,configPath:e.configSnapshot?.path??null,rawAvailable:typeof e.configSnapshot?.raw==`string`||!!e.configSnapshot?.config||!!e.configForm},Ee=t=>{let n=t.includeSections?.[0]??null,r=t.activeSection??n,i=t.showRootTab??!t.includeSections?.length;return nH(e,`config`,{tab:e.tab,formMode:t.formMode,activeSection:r,activeSubsection:t.activeSubsection,schemaSectionCount:tH(Te.schema,t.includeSections,t.excludeSections),hasSearch:!!t.searchQuery?.trim()},()=>UR({...Te,includeVirtualSections:!1,...t,activeSection:r,showRootTab:i}))},De=$V(e.configActiveSection,e.configActiveSubsection),Oe=eH(e.communicationsActiveSection,e.communicationsActiveSubsection,qV),ke=eH(e.appearanceActiveSection,e.appearanceActiveSubsection,JV),Ae=eH(e.automationActiveSection,e.automationActiveSubsection,YV),je=eH(e.infrastructureActiveSection,e.infrastructureActiveSubsection,XV),Me=eH(e.aiAgentsActiveSection,e.aiAgentsActiveSubsection,ZV),Ne=()=>{switch(e.tab){case`config`:if(e.configSettingsMode===`quick`){let t=e.configForm??e.configSnapshot?.config??{},r=y??iH(t),i=t.agents?.defaults??{},a=dH(e),o=typeof a?.model==`string`?a.model:typeof i.model==`string`?i.model:`default`,s=typeof a?.thinkingLevel==`string`?a.thinkingLevel:typeof i.thinkingLevel==`string`?i.thinkingLevel:`off`,c=typeof a?.fastMode==`boolean`?a.fastMode:i.fastMode===!0;return yL({currentModel:o,thinkingLevel:s,fastMode:c,onModelChange:()=>{e.configSettingsMode=`advanced`,e.aiAgentsActiveSection=`models`,e.setTab(`aiAgents`)},onThinkingChange:t=>{qm(e,e.sessionKey,{thinkingLevel:t}).then(()=>n?.())},onFastModeToggle:()=>{qm(e,e.sessionKey,{fastMode:!c}).then(()=>n?.())},channels:cH(e),onChannelConfigure:()=>{e.setTab(`channels`)},automation:{cronJobCount:e.cronJobs?.length??0,skillCount:e.skillsReport?.skills?.length??0,mcpServerCount:lH(e)},onManageCron:()=>{e.setTab(`cron`)},onBrowseSkills:()=>{e.setTab(`skills`)},onConfigureMcp:()=>{e.infrastructureActiveSection=`mcp`,e.setTab(`infrastructure`)},security:uH(e),onSecurityConfigure:()=>{e.configSettingsMode=`advanced`,e.configActiveSection=`auth`,n?.()},onBrowserEnabledToggle:t=>{sr(e,[`browser`,`enabled`],t),n?.()},onToolProfileChange:t=>{sr(e,[`tools`,`profile`],t),n?.()},theme:e.theme,themeMode:e.themeMode,hasCustomTheme:!!e.settings.customTheme,customThemeLabel:e.settings.customTheme?.label??null,borderRadius:e.settings.borderRadius,textScale:e.settings.textScale??100,setTheme:(t,n)=>e.setTheme(t,n),onOpenCustomThemeImport:()=>{e.setTab(`appearance`),e.appearanceFormMode=`form`,e.appearanceSearchQuery=``,e.appearanceActiveSection=`__appearance__`,e.appearanceActiveSubsection=null,e.openCustomThemeImport(),n?.()},setThemeMode:(t,n)=>e.setThemeMode(t,n),setBorderRadius:t=>e.setBorderRadius(t),setTextScale:t=>e.setTextScale(t),userAvatar:e.userAvatar??null,onUserAvatarChange:t=>e.applyLocalUserIdentity?.({avatar:t}),assistantAvatar:te,assistantAvatarUrl:A,assistantAvatarSource:ee,assistantAvatarStatus:D,assistantAvatarReason:O,assistantAvatarOverride:r,assistantAvatarUploadBusy:e.assistantAvatarUploadBusy,assistantAvatarUploadError:e.assistantAvatarUploadError,onAssistantAvatarOverrideChange:t=>{GA(e,t),e.chatAvatarUrl=t,e.chatAvatarSource=t,e.chatAvatarStatus=`data`,e.chatAvatarReason=null,e.assistantAvatarUploadError=null,n?.()},onAssistantAvatarClearOverride:()=>{GA(e,null),e.chatAvatarUrl=null,e.chatAvatarSource=null,e.chatAvatarStatus=null,e.chatAvatarReason=null,e.assistantAvatarUploadError=null,e.loadAssistantIdentity?.().finally(()=>n?.()),n?.()},basePath:e.basePath??``,configObject:t,savedConfigObject:e.configSnapshot?.config??{},configDirty:e.configFormDirty,configSaving:e.configSaving,configApplying:e.configApplying,configReady:!!e.configSnapshot?.hash,onSelectPreset:t=>{let r=zI(t);r&&(lr(e,r.patch),n?.())},onResetConfig:()=>ur(e),onSaveConfig:()=>er(e),onApplyConfig:()=>tr(e),onAdvancedSettings:()=>{e.configSettingsMode=`advanced`,n?.()},connected:e.connected,gatewayUrl:e.settings.gatewayUrl,assistantName:e.assistantName,version:e.hello?.server?.version??``})}return Ee({formMode:e.configFormMode,searchQuery:e.configSearchQuery,activeSection:De.activeSection,activeSubsection:De.activeSubsection,onFormModeChange:t=>e.configFormMode=t,onSearchChange:t=>e.configSearchQuery=t,onSectionChange:t=>{e.configActiveSection=t,e.configActiveSubsection=null},onSubsectionChange:t=>e.configActiveSubsection=t,showModeToggle:!0,settingsLayout:`accordion`,onBackToQuick:()=>{e.configSettingsMode=`quick`,n?.()},excludeSections:[...qV,...YV,...XV,...ZV,`ui`,`wizard`]});case`channels`:return pI(EV,t=>t.renderChannels({connected:e.connected,loading:e.channelsLoading,snapshot:e.channelsSnapshot,lastError:e.channelsError,lastSuccessAt:e.channelsLastSuccess,configSchema:e.configSchema,configSchemaLoading:e.configSchemaLoading,configForm:e.configForm,configUiHints:e.configUiHints,configSaving:e.configSaving,configFormDirty:e.configFormDirty,onRefresh:t=>Kt(e,t),onConfigPatch:(t,n)=>sr(e,t,n),onConfigSave:()=>e.handleChannelConfigSave(),onConfigReload:()=>e.handleChannelConfigReload()}));case`communications`:return Ee({formMode:e.communicationsFormMode,searchQuery:e.communicationsSearchQuery,activeSection:Oe.activeSection,activeSubsection:Oe.activeSubsection,onFormModeChange:t=>e.communicationsFormMode=t,onSearchChange:t=>e.communicationsSearchQuery=t,onSectionChange:t=>{e.communicationsActiveSection=t,e.communicationsActiveSubsection=null},onSubsectionChange:t=>e.communicationsActiveSubsection=t,navRootLabel:`Communication`,includeSections:[...qV],includeVirtualSections:!0,webPush:{supported:e.webPushSupported,permission:e.webPushPermission,subscribed:e.webPushSubscribed,loading:e.webPushLoading},onWebPushSubscribe:()=>e.handleWebPushSubscribe(),onWebPushUnsubscribe:()=>e.handleWebPushUnsubscribe(),onWebPushTest:()=>e.handleWebPushTest()});case`appearance`:return Ee({formMode:e.appearanceFormMode,searchQuery:e.appearanceSearchQuery,activeSection:ke.activeSection,activeSubsection:ke.activeSubsection,onFormModeChange:t=>e.appearanceFormMode=t,onSearchChange:t=>e.appearanceSearchQuery=t,onSectionChange:t=>{e.appearanceActiveSection=t,e.appearanceActiveSubsection=null},onSubsectionChange:t=>e.appearanceActiveSubsection=t,navRootLabel:v(`tabs.appearance`),includeSections:[...JV],includeVirtualSections:!0});case`automation`:return Ee({formMode:e.automationFormMode,searchQuery:e.automationSearchQuery,activeSection:Ae.activeSection,activeSubsection:Ae.activeSubsection,onFormModeChange:t=>e.automationFormMode=t,onSearchChange:t=>e.automationSearchQuery=t,onSectionChange:t=>{e.automationActiveSection=t,e.automationActiveSubsection=null},onSubsectionChange:t=>e.automationActiveSubsection=t,navRootLabel:`Automation`,includeSections:[...YV]});case`infrastructure`:return Ee({formMode:e.infrastructureFormMode,searchQuery:e.infrastructureSearchQuery,activeSection:je.activeSection,activeSubsection:je.activeSubsection,onFormModeChange:t=>e.infrastructureFormMode=t,onSearchChange:t=>e.infrastructureSearchQuery=t,onSectionChange:t=>{e.infrastructureActiveSection=t,e.infrastructureActiveSubsection=null},onSubsectionChange:t=>e.infrastructureActiveSubsection=t,navRootLabel:v(`settings.section.web`),includeSections:[...XV]});case`aiAgents`:return Ee({formMode:e.aiAgentsFormMode,searchQuery:e.aiAgentsSearchQuery,activeSection:Me.activeSection,activeSubsection:Me.activeSubsection,onFormModeChange:t=>e.aiAgentsFormMode=t,onSearchChange:t=>e.aiAgentsSearchQuery=t,onSectionChange:t=>{e.aiAgentsActiveSection=t,e.aiAgentsActiveSubsection=null},onSubsectionChange:t=>e.aiAgentsActiveSubsection=t,navRootLabel:`AI & Agents`,includeSections:[...ZV]});default:return i}},Pe=t=>{if(t)switch(e.agentsPanel){case`files`:__(e,t);return;case`skills`:S_(e,t);return;case`tools`:E_(e,t),A_(e);return;case`overview`:case`channels`:case`cron`:return}},Fe=t=>{if(t===`channels`){Kt(e,!1);return}t===`cron`&&e.loadCron()},Ie=(t=!1)=>{e.agentFilesList=null,e.agentFilesError=null,e.agentFileActive=null,e.agentFileContents={},e.agentFileDrafts={},t&&(e.agentFilesLoading=!1)},Le=()=>{Ie(!0),e.agentSkillsReport=null,e.agentSkillsError=null,e.agentSkillsAgentId=null,e.toolsCatalogResult=null,e.toolsCatalogError=null,e.toolsCatalogLoading=!1,O_(e)};return d`
6994
+ `}var wV=dI(()=>hV(()=>import(`./agents-DMcgU9w9.js`),__vite__mapDeps([0,1,2,3,4,5,6,7]),import.meta.url),_V),TV=dI(()=>hV(()=>import(`./activity-0AnFM1pt.js`),__vite__mapDeps([8,1,4,5]),import.meta.url),_V),EV=dI(()=>hV(()=>import(`./channels-BIjF291a.js`),__vite__mapDeps([9,1,5,6]),import.meta.url),_V),DV=dI(()=>hV(()=>import(`./cron-gyAzSB5C.js`),__vite__mapDeps([10,1,5]),import.meta.url),_V),OV=dI(()=>hV(()=>import(`./debug-CNnIMqYL.js`),__vite__mapDeps([11,1,5]),import.meta.url),_V),kV=dI(()=>hV(()=>import(`./instances-CcPo2WpS.js`),__vite__mapDeps([12,1,5]),import.meta.url),_V),AV=dI(()=>hV(()=>import(`./logs-D7YSLRvz.js`),__vite__mapDeps([13,1,4,5]),import.meta.url),_V),jV=dI(()=>hV(()=>import(`./nodes-8OSr5IQB.js`),__vite__mapDeps([14,1,4,5]),import.meta.url),_V),MV=dI(()=>hV(()=>import(`./sessions-CRXERFxi.js`),__vite__mapDeps([15,1,4,5]),import.meta.url),_V),NV=dI(()=>hV(()=>import(`./skills-DcnRqwFx.js`),__vite__mapDeps([16,1,4,5,7]),import.meta.url),_V),PV=dI(()=>hV(()=>import(`./workboard-QBQBDBPN.js`),__vite__mapDeps([17,1,5]),import.meta.url),_V);function FV(e){return typeof e!=`number`||!Number.isFinite(e)?null:new Date(e).toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}function IV(e){if(!e?.phases)return null;let t;for(let n of Object.values(e.phases))!n.enabled||typeof n.nextRunAtMs!=`number`||(t===void 0||n.nextRunAtMs<t)&&(t=n.nextRunAtMs);return FV(t)}var LV=null,RV=`fengming:control-ui:update-banner-dismissed:v1`,zV=[`off`,`minimal`,`low`,`medium`,`high`],BV=[`UTC`,`America/Los_Angeles`,`America/Denver`,`America/Chicago`,`America/New_York`,`Europe/London`,`Europe/Berlin`,`Asia/Tokyo`];function VV(e){return/^https?:\/\//i.test(e.trim())}function HV(e){return typeof e==`string`?e.trim():``}function UV(e){let t=new Set,n=[];for(let r of e){let e=r.trim();if(!e)continue;let i=e.toLowerCase();t.has(i)||(t.add(i),n.push(e))}return n}function WV(){try{let e=et()?.getItem(RV);if(!e)return null;let t=JSON.parse(e);return!t||typeof t.latestVersion!=`string`?null:{latestVersion:t.latestVersion,channel:typeof t.channel==`string`?t.channel:null,dismissedAtMs:typeof t.dismissedAtMs==`number`?t.dismissedAtMs:Date.now()}}catch{return null}}function GV(e){let t=WV();if(!t)return!1;let n=e,r=n&&typeof n.latestVersion==`string`?n.latestVersion:null,i=n&&typeof n.channel==`string`?n.channel:null;return!!(r&&t.latestVersion===r&&t.channel===i)}function KV(e){let t=e,n=t&&typeof t.latestVersion==`string`?t.latestVersion:null;if(!n)return;let r={latestVersion:n,channel:t&&typeof t.channel==`string`?t.channel:null,dismissedAtMs:Date.now()};try{et()?.setItem(RV,JSON.stringify(r))}catch{}}var qV=[`messages`,`broadcast`,`__notifications__`,`talk`,`audio`,`channels`],JV=[`__appearance__`,`ui`,`wizard`],YV=[`commands`,`hooks`,`bindings`,`cron`,`approvals`,`plugins`],XV=[`gateway`,`web`,`browser`,`nodeHost`,`canvasHost`,`discovery`,`media`,`acp`,`mcp`],ZV=[`agents`,`models`,`skills`,`tools`,`memory`,`session`],QV=new Set([...qV,...JV,...YV,...XV,...ZV]);function $V(e,t){return e&&QV.has(e)?{activeSection:null,activeSubsection:null}:{activeSection:e,activeSubsection:t}}function eH(e,t,n){return e&&!n.includes(e)?{activeSection:null,activeSubsection:null}:{activeSection:e,activeSubsection:t}}function tH(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return 0;let r=e.properties;if(!r||typeof r!=`object`||Array.isArray(r))return 0;let i=t?.length?new Set(t):null,a=n?.length?new Set(n):null;return Object.keys(r).filter(e=>!(i&&!i.has(e)||a?.has(e))).length}function nH(e,t,n,r){let i=Qg(),a=r();return u_(e,t,{...n,durationMs:$g(Qg()-i)}),a}function rH(e){let t=e.agentsList?.agents??[],n=z(e.sessionKey)?.agentId??e.agentsList?.defaultId??`main`,r=t.find(e=>e.id===n)?.identity,i=r?.avatarUrl??r?.avatar;if(i&&va(i))return i}function iH(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e.ui;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t.assistant;return!n||typeof n!=`object`||Array.isArray(n)?null:T(n.avatar)??null}function aH(e,t){let n=fi(e??``),r=encodeURIComponent(t);return n?`${n}/avatar/${r}`:`/avatar/${r}`}var oH=[{id:`weixin`,label:`微信`},{id:`qqbot`,label:`QQ`},{id:`feishu`,label:`飞书`},{id:`webhooks`,label:`Webhooks`}];function sH(e){let t=e.trim();return t?t.split(/[-_]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `):`Unknown`}function cH(e){let t=e.configForm??e.configSnapshot?.config;if(!t||typeof t!=`object`)return[];let n=`channels`in t&&t.channels&&typeof t.channels==`object`?t.channels:{},r=Object.keys(n).filter(e=>e.trim().length>0),i=r.length>0?r.toSorted((e,t)=>e.localeCompare(t)):oH.map(({id:e})=>e),a=new Map(oH.map(({id:e,label:t})=>[e,t])),o=[];for(let e of i){let t=n[e],r=typeof t==`object`&&!!t&&Object.keys(t).length>0;o.push({id:e,label:a.get(e)??sH(e),connected:r,detail:r?`Configured`:void 0})}return o}function lH(e){let t=e.configForm??e.configSnapshot?.config;if(!t||typeof t!=`object`)return 0;let n=t.mcp;if(!n||typeof n!=`object`)return 0;let r=`servers`in n&&n.servers&&typeof n.servers==`object`?n.servers:{};return Object.keys(r).length}function uH(e){let t=e.configForm??e.configSnapshot?.config;if(!t||typeof t!=`object`)return{gatewayAuth:`unknown`,execPolicy:`unknown`,deviceAuth:!1,browserEnabled:!0,toolProfile:`full`};let n=t,r=`gateway`in n&&n.gateway&&typeof n.gateway==`object`?n.gateway:null,i=r&&`auth`in r&&r.auth&&typeof r.auth==`object`?r.auth:null,a=`unknown`;i&&(a=(typeof i.mode==`string`?i.mode.trim():``)||(i.password?`password`:i.token?`token`:i.trustedProxy?`trusted-proxy`:`none`));let o=`allowlist`,s=`full`,c=n.tools;if(c&&typeof c==`object`){let e=c.profile;if(typeof e==`string`){let t=e.trim();t&&(s=t)}let t=c.exec;if(t&&typeof t==`object`){let e=t.security;if(typeof e==`string`){let t=e.trim();t&&(o=t)}}}let l=!0,u=`browser`in n&&n.browser&&typeof n.browser==`object`?n.browser:null;u&&typeof u.enabled==`boolean`&&(l=u.enabled);let d=!0;return r&&(`controlUi`in r&&r.controlUi&&typeof r.controlUi==`object`?r.controlUi:null)?.dangerouslyDisableDeviceAuth===!0&&(d=!1),{gatewayAuth:a,execPolicy:o,deviceAuth:d,browserEnabled:l,toolProfile:s}}function dH(e){return e.sessionsResult?.sessions?.find(t=>t.key===e.sessionKey)}function fH(e,t){return nz({open:e.cronQuickCreateOpen,step:e.cronQuickCreateStep,draft:e.cronQuickCreateDraft??KR(),onDraftChange:n=>{e.cronQuickCreateDraft={...e.cronQuickCreateDraft??KR(),...n},t?.()},onStepChange:n=>{e.cronQuickCreateStep=n,t?.()},onCreate:()=>{let n=JR(e.cronQuickCreateDraft??KR());e.cronEditingJobId=null,e.cronForm={...hg,...n},t?.(),(async()=>{if(!await cv(e)){t?.();return}e.cronQuickCreateOpen=!1,e.cronQuickCreateStep=`what`,e.cronQuickCreateDraft=null,t?.()})()},onAdvancedCreate:()=>{let n=JR(e.cronQuickCreateDraft??KR());e.cronEditingJobId=null,e.cronForm=B_({...hg,...n}),e.cronFieldErrors=V_(e.cronForm),e.cronQuickCreateOpen=!1,e.cronQuickCreateStep=`what`,e.cronQuickCreateDraft=null,e.cronFormCollapsed=!1,t?.()},onCancel:()=>{e.cronQuickCreateOpen=!1,e.cronQuickCreateStep=`what`,e.cronQuickCreateDraft=null,t?.()}})}function pH(e){let t=e,n=typeof t.requestUpdate==`function`?()=>t.requestUpdate?.():void 0;if(gV=n,!e.connected)return d` ${HB(e)} ${kB(e)} `;let r=e.presenceEntries.length,a=e.sessionsResult?.count??null,o=e.cronStatus?.nextWakeAtMs??null,s=e.connected?null:v(`chat.disconnected`),c=e.tab===`chat`,u=c&&(e.settings.chatFocusMode||e.onboarding),f=c&&(u||e.chatHeaderControlsHidden),p=e.navDrawerOpen&&!u&&!e.onboarding,m=e.settings.navCollapsed&&!p,h=WN(e),g=e.onboarding?!1:e.settings.chatShowThinking,_=e.onboarding?!0:e.settings.chatShowToolCalls,y=T(Mo().avatar)??null,b=rH(e),x=y?`data`:e.chatAvatarStatus??e.assistantAvatarStatus??null,S=y?null:e.chatAvatarReason??e.assistantAvatarReason??null,C=x===`none`&&S===`missing`,w=y??(C?null:e.assistantAvatar),E=y??e.chatAvatarUrl??(C?null:b??null),D=y?`data`:e.assistantAvatarStatus??e.chatAvatarStatus??null,O=y?null:e.assistantAvatarReason??e.chatAvatarReason??null,ee=y??e.assistantAvatarSource??e.chatAvatarSource??null,k=D===`none`&&O===`missing`,te=y??(k||D===`local`?null:e.assistantAvatar),A=y??(D===`local`&&e.assistantAgentId?aH(e.basePath,e.assistantAgentId):e.chatAvatarUrl??(k?null:b??null)),j=e.configForm??e.configSnapshot?.config,M=zv(j),N=e.dreamingStatus?.enabled??M.enabled,P=IV(e.dreamingStatus),F=e.dreamingStatusLoading||e.dreamingModeSaving,ne=e.dreamingStatusLoading||e.dreamDiaryLoading,re=()=>{(async()=>{await Un(e),await Promise.all([ey(e),ty(e),ny(e),ry(e)])})()},ie=async t=>{if(!e.client||!e.connected)return null;let n=await e.client.request(`wiki.get`,{lookup:t,fromLine:1,lineCount:5e3}),r=typeof n?.title==`string`&&n.title.trim()?n.title.trim():t,i=typeof n?.path==`string`&&n.path.trim()?n.path.trim():t,a=typeof n?.content==`string`&&n.content.length>0?n.content:v(`wiki.noContent`),o=typeof n?.updatedAt==`string`&&n.updatedAt.trim()?n.updatedAt.trim():void 0,s=typeof n?.totalLines==`number`&&Number.isFinite(n.totalLines)?Math.max(0,Math.floor(n.totalLines)):void 0,c=n?.truncated===!0;return{title:r,path:i,content:a,...s===void 0?{}:{totalLines:s},...c?{truncated:c}:{},...o?{updatedAt:o}:{}}},ae=t=>{e.dreamingModeSaving||e.dreamingRestartConfirmLoading||e.dreamingRestartConfirmOpen||N===t||(e.dreamingPendingEnabled=t,e.dreamingRestartConfirmOpen=!0,e.dreamingStatusError=null)},oe=()=>{e.dreamingRestartConfirmLoading||(e.dreamingRestartConfirmOpen=!1,e.dreamingPendingEnabled=null,e.dreamingStatusError=null)},se=()=>{let t=e.dreamingPendingEnabled;t==null||e.dreamingRestartConfirmLoading||(async()=>{e.dreamingRestartConfirmLoading=!0,e.dreamingStatusError=null;try{if(!await hy(e,t)){e.dreamingStatusError||=v(`dreaming.restartConfirmation.failed`);return}await Un(e),await ey(e),e.dreamingRestartConfirmOpen=!1,e.dreamingPendingEnabled=null}finally{e.dreamingRestartConfirmLoading=!1}})()},ce=fi(e.basePath??``),le=()=>e.agentsSelectedId??e.agentsList?.defaultId??e.agentsList?.agents?.[0]?.id??null,I=le(),ue=Xc(e.sessionKey),de=!!(I&&ue&&I===ue),fe=()=>e.configForm??e.configSnapshot?.config,L=e=>fr(fe(),e),pe=t=>pr(e,t),me=(e,t)=>{let n=t?pe(e):L(e);return n>=0?[`agents`,`list`,n,`tools`]:null},he=e=>{let t=fe()?.agents?.list,n=Array.isArray(t)?t[e]?.model:void 0;return{basePath:[`agents`,`list`,e,`model`],existing:n}},ge=za(new Set([...e.agentsList?.agents?.map(e=>e.id.trim())??[],...e.cronJobs.map(e=>typeof e.agentId==`string`?e.agentId.trim():``).filter(Boolean)].filter(Boolean))),_e=za(new Set([...e.cronModelSuggestions,...Ba(j),...e.cronJobs.map(e=>{let t=F_(e);return t?.kind!==`agentTurn`||typeof t.model!=`string`?``:t.model.trim()}).filter(Boolean)].filter(Boolean))),ve=Y_(e),ye=e.cronForm.deliveryChannel&&e.cronForm.deliveryChannel.trim()?e.cronForm.deliveryChannel.trim():`last`,be=e.cronJobs.map(e=>HV(e.delivery?.to)).filter(Boolean),xe=(ye===`last`?Object.values(e.channelsSnapshot?.channelAccounts??{}).flat():e.channelsSnapshot?.channelAccounts?.[ye]??[]).flatMap(e=>[HV(e.accountId),HV(e.name)]).filter(Boolean),Se=UV([...be,...xe]),Ce=UV(xe),we=e.cronForm.deliveryMode===`webhook`?Se.filter(e=>VV(e)):Se,Te={raw:e.configRaw,originalRaw:e.configRawOriginal,valid:e.configValid,issues:e.configIssues,loading:e.configLoading,saving:e.configSaving,applying:e.configApplying,updating:e.updateRunning,connected:e.connected,schema:e.configSchema,schemaLoading:e.configSchemaLoading,uiHints:e.configUiHints,formValue:e.configForm,originalValue:e.configFormOriginal,onRawChange:t=>{cr(e,t)},onRequestUpdate:n,onFormPatch:(t,n)=>sr(e,t,n),onReload:()=>Un(e,{discardPendingChanges:!0}),onReset:()=>ur(e),onSave:()=>er(e),onApply:()=>tr(e),onUpdate:()=>nr(e),onOpenFile:()=>hr(e),version:e.hello?.server?.version??``,theme:e.theme,themeMode:e.themeMode,setTheme:(t,n)=>e.setTheme(t,n),setThemeMode:(t,n)=>e.setThemeMode(t,n),hasCustomTheme:!!e.settings.customTheme,customThemeLabel:e.settings.customTheme?.label??null,customThemeSourceUrl:e.settings.customTheme?.sourceUrl??null,customThemeImportUrl:e.customThemeImportUrl,customThemeImportBusy:e.customThemeImportBusy,customThemeImportMessage:e.customThemeImportMessage,customThemeImportExpanded:e.customThemeImportExpanded,customThemeImportFocusToken:e.customThemeImportFocusToken,onCustomThemeImportUrlChange:t=>e.setCustomThemeImportUrl(t),onOpenCustomThemeImport:()=>e.openCustomThemeImport(),onImportCustomTheme:()=>void e.importCustomTheme(),onClearCustomTheme:()=>e.clearCustomTheme(),borderRadius:e.settings.borderRadius,setBorderRadius:t=>e.setBorderRadius(t),textScale:e.settings.textScale??100,setTextScale:t=>e.setTextScale(t),gatewayUrl:e.settings.gatewayUrl,assistantName:e.assistantName,configPath:e.configSnapshot?.path??null,rawAvailable:typeof e.configSnapshot?.raw==`string`||!!e.configSnapshot?.config||!!e.configForm},Ee=t=>{let n=t.includeSections?.[0]??null,r=t.activeSection??n,i=t.showRootTab??!t.includeSections?.length;return nH(e,`config`,{tab:e.tab,formMode:t.formMode,activeSection:r,activeSubsection:t.activeSubsection,schemaSectionCount:tH(Te.schema,t.includeSections,t.excludeSections),hasSearch:!!t.searchQuery?.trim()},()=>UR({...Te,includeVirtualSections:!1,...t,activeSection:r,showRootTab:i}))},De=$V(e.configActiveSection,e.configActiveSubsection),Oe=eH(e.communicationsActiveSection,e.communicationsActiveSubsection,qV),ke=eH(e.appearanceActiveSection,e.appearanceActiveSubsection,JV),Ae=eH(e.automationActiveSection,e.automationActiveSubsection,YV),je=eH(e.infrastructureActiveSection,e.infrastructureActiveSubsection,XV),Me=eH(e.aiAgentsActiveSection,e.aiAgentsActiveSubsection,ZV),Ne=()=>{switch(e.tab){case`config`:if(e.configSettingsMode===`quick`){let t=e.configForm??e.configSnapshot?.config??{},r=y??iH(t),i=t.agents?.defaults??{},a=dH(e),o=typeof a?.model==`string`?a.model:typeof i.model==`string`?i.model:`default`,s=typeof a?.thinkingLevel==`string`?a.thinkingLevel:typeof i.thinkingLevel==`string`?i.thinkingLevel:`off`,c=typeof a?.fastMode==`boolean`?a.fastMode:i.fastMode===!0;return yL({currentModel:o,thinkingLevel:s,fastMode:c,onModelChange:()=>{e.configSettingsMode=`advanced`,e.aiAgentsActiveSection=`models`,e.setTab(`aiAgents`)},onThinkingChange:t=>{qm(e,e.sessionKey,{thinkingLevel:t}).then(()=>n?.())},onFastModeToggle:()=>{qm(e,e.sessionKey,{fastMode:!c}).then(()=>n?.())},channels:cH(e),onChannelConfigure:()=>{e.setTab(`channels`)},automation:{cronJobCount:e.cronJobs?.length??0,skillCount:e.skillsReport?.skills?.length??0,mcpServerCount:lH(e)},onManageCron:()=>{e.setTab(`cron`)},onBrowseSkills:()=>{e.setTab(`skills`)},onConfigureMcp:()=>{e.infrastructureActiveSection=`mcp`,e.setTab(`infrastructure`)},security:uH(e),onSecurityConfigure:()=>{e.configSettingsMode=`advanced`,e.configActiveSection=`auth`,n?.()},onBrowserEnabledToggle:t=>{sr(e,[`browser`,`enabled`],t),n?.()},onToolProfileChange:t=>{sr(e,[`tools`,`profile`],t),n?.()},theme:e.theme,themeMode:e.themeMode,hasCustomTheme:!!e.settings.customTheme,customThemeLabel:e.settings.customTheme?.label??null,borderRadius:e.settings.borderRadius,textScale:e.settings.textScale??100,setTheme:(t,n)=>e.setTheme(t,n),onOpenCustomThemeImport:()=>{e.setTab(`appearance`),e.appearanceFormMode=`form`,e.appearanceSearchQuery=``,e.appearanceActiveSection=`__appearance__`,e.appearanceActiveSubsection=null,e.openCustomThemeImport(),n?.()},setThemeMode:(t,n)=>e.setThemeMode(t,n),setBorderRadius:t=>e.setBorderRadius(t),setTextScale:t=>e.setTextScale(t),userAvatar:e.userAvatar??null,onUserAvatarChange:t=>e.applyLocalUserIdentity?.({avatar:t}),assistantAvatar:te,assistantAvatarUrl:A,assistantAvatarSource:ee,assistantAvatarStatus:D,assistantAvatarReason:O,assistantAvatarOverride:r,assistantAvatarUploadBusy:e.assistantAvatarUploadBusy,assistantAvatarUploadError:e.assistantAvatarUploadError,onAssistantAvatarOverrideChange:t=>{GA(e,t),e.chatAvatarUrl=t,e.chatAvatarSource=t,e.chatAvatarStatus=`data`,e.chatAvatarReason=null,e.assistantAvatarUploadError=null,n?.()},onAssistantAvatarClearOverride:()=>{GA(e,null),e.chatAvatarUrl=null,e.chatAvatarSource=null,e.chatAvatarStatus=null,e.chatAvatarReason=null,e.assistantAvatarUploadError=null,e.loadAssistantIdentity?.().finally(()=>n?.()),n?.()},basePath:e.basePath??``,configObject:t,savedConfigObject:e.configSnapshot?.config??{},configDirty:e.configFormDirty,configSaving:e.configSaving,configApplying:e.configApplying,configReady:!!e.configSnapshot?.hash,onSelectPreset:t=>{let r=zI(t);r&&(lr(e,r.patch),n?.())},onResetConfig:()=>ur(e),onSaveConfig:()=>er(e),onApplyConfig:()=>tr(e),onAdvancedSettings:()=>{e.configSettingsMode=`advanced`,n?.()},connected:e.connected,gatewayUrl:e.settings.gatewayUrl,assistantName:e.assistantName,version:e.hello?.server?.version??``})}return Ee({formMode:e.configFormMode,searchQuery:e.configSearchQuery,activeSection:De.activeSection,activeSubsection:De.activeSubsection,onFormModeChange:t=>e.configFormMode=t,onSearchChange:t=>e.configSearchQuery=t,onSectionChange:t=>{e.configActiveSection=t,e.configActiveSubsection=null},onSubsectionChange:t=>e.configActiveSubsection=t,showModeToggle:!0,settingsLayout:`accordion`,onBackToQuick:()=>{e.configSettingsMode=`quick`,n?.()},excludeSections:[...qV,...YV,...XV,...ZV,`ui`,`wizard`]});case`channels`:return pI(EV,t=>t.renderChannels({connected:e.connected,loading:e.channelsLoading,snapshot:e.channelsSnapshot,lastError:e.channelsError,lastSuccessAt:e.channelsLastSuccess,configSchema:e.configSchema,configSchemaLoading:e.configSchemaLoading,configForm:e.configForm,configUiHints:e.configUiHints,configSaving:e.configSaving,configFormDirty:e.configFormDirty,onRefresh:t=>Kt(e,t),onConfigPatch:(t,n)=>sr(e,t,n),onConfigSave:()=>e.handleChannelConfigSave(),onConfigReload:()=>e.handleChannelConfigReload()}));case`communications`:return Ee({formMode:e.communicationsFormMode,searchQuery:e.communicationsSearchQuery,activeSection:Oe.activeSection,activeSubsection:Oe.activeSubsection,onFormModeChange:t=>e.communicationsFormMode=t,onSearchChange:t=>e.communicationsSearchQuery=t,onSectionChange:t=>{e.communicationsActiveSection=t,e.communicationsActiveSubsection=null},onSubsectionChange:t=>e.communicationsActiveSubsection=t,navRootLabel:`Communication`,includeSections:[...qV],includeVirtualSections:!0,webPush:{supported:e.webPushSupported,permission:e.webPushPermission,subscribed:e.webPushSubscribed,loading:e.webPushLoading},onWebPushSubscribe:()=>e.handleWebPushSubscribe(),onWebPushUnsubscribe:()=>e.handleWebPushUnsubscribe(),onWebPushTest:()=>e.handleWebPushTest()});case`appearance`:return Ee({formMode:e.appearanceFormMode,searchQuery:e.appearanceSearchQuery,activeSection:ke.activeSection,activeSubsection:ke.activeSubsection,onFormModeChange:t=>e.appearanceFormMode=t,onSearchChange:t=>e.appearanceSearchQuery=t,onSectionChange:t=>{e.appearanceActiveSection=t,e.appearanceActiveSubsection=null},onSubsectionChange:t=>e.appearanceActiveSubsection=t,navRootLabel:v(`tabs.appearance`),includeSections:[...JV],includeVirtualSections:!0});case`automation`:return Ee({formMode:e.automationFormMode,searchQuery:e.automationSearchQuery,activeSection:Ae.activeSection,activeSubsection:Ae.activeSubsection,onFormModeChange:t=>e.automationFormMode=t,onSearchChange:t=>e.automationSearchQuery=t,onSectionChange:t=>{e.automationActiveSection=t,e.automationActiveSubsection=null},onSubsectionChange:t=>e.automationActiveSubsection=t,navRootLabel:`Automation`,includeSections:[...YV]});case`infrastructure`:return Ee({formMode:e.infrastructureFormMode,searchQuery:e.infrastructureSearchQuery,activeSection:je.activeSection,activeSubsection:je.activeSubsection,onFormModeChange:t=>e.infrastructureFormMode=t,onSearchChange:t=>e.infrastructureSearchQuery=t,onSectionChange:t=>{e.infrastructureActiveSection=t,e.infrastructureActiveSubsection=null},onSubsectionChange:t=>e.infrastructureActiveSubsection=t,navRootLabel:v(`settings.section.web`),includeSections:[...XV]});case`aiAgents`:return Ee({formMode:e.aiAgentsFormMode,searchQuery:e.aiAgentsSearchQuery,activeSection:Me.activeSection,activeSubsection:Me.activeSubsection,onFormModeChange:t=>e.aiAgentsFormMode=t,onSearchChange:t=>e.aiAgentsSearchQuery=t,onSectionChange:t=>{e.aiAgentsActiveSection=t,e.aiAgentsActiveSubsection=null},onSubsectionChange:t=>e.aiAgentsActiveSubsection=t,navRootLabel:`AI & Agents`,includeSections:[...ZV]});default:return i}},Pe=t=>{if(t)switch(e.agentsPanel){case`files`:__(e,t);return;case`skills`:S_(e,t);return;case`tools`:E_(e,t),A_(e);return;case`overview`:case`channels`:case`cron`:return}},Fe=t=>{if(t===`channels`){Kt(e,!1);return}t===`cron`&&e.loadCron()},Ie=(t=!1)=>{e.agentFilesList=null,e.agentFilesError=null,e.agentFileActive=null,e.agentFileContents={},e.agentFileDrafts={},t&&(e.agentFilesLoading=!1)},Le=()=>{Ie(!0),e.agentSkillsReport=null,e.agentSkillsError=null,e.agentSkillsAgentId=null,e.toolsCatalogResult=null,e.toolsCatalogError=null,e.toolsCatalogLoading=!1,O_(e)};return d`
6985
6995
  ${LI({open:e.paletteOpen,query:e.paletteQuery,activeIndex:e.paletteActiveIndex,onToggle:()=>{e.paletteOpen=!e.paletteOpen},onQueryChange:t=>{e.paletteQuery=t},onActiveIndexChange:t=>{e.paletteActiveIndex=t},onNavigate:t=>{e.setTab(t)},onSlashCommand:t=>{e.setTab(`chat`),e.handleChatDraftChange(t.endsWith(` `)?t:`${t} `)}})}
6986
6996
  <div
6987
6997
  class="shell ${c?`shell--chat`:``} ${u?`shell--chat-focus`:``} ${m?`shell--nav-collapsed`:``} ${p?`shell--nav-drawer-open`:``} ${e.onboarding?`shell--onboarding`:``}"
@@ -7185,7 +7195,7 @@ ${e.pluginDescription}</pre
7185
7195
  `}var mH=1500;function hH(){return{entries:[],nextEntryId:1,userEntryId:null,userEntryAwaitingFinal:!1,userEntryAwaitingFinalStartedAtMs:null,assistantEntryId:null}}function gH(e,t){let n=t.text;if(t.final?n.trim()===``:n===``)return e;let r=t.nowMs??Date.now();if(t.role===`assistant`){let i=yH(e,`user`,r);return _H(i,t.role,i.assistantEntryId,n,t.final,r)}let i=e.userEntryId,a=i!==null&&bH(e,i,n,t.final,r),o=i===null||a?yH(e,`assistant`,r):e;return _H(a&&i!==null?{...yH(o,`user`,r),userEntryId:null,userEntryAwaitingFinal:!1,userEntryAwaitingFinalStartedAtMs:null}:o,t.role,a?null:i,n,t.final,r)}function _H(e,t,n,r,i,a){if(n===null){let n=`rt-${e.nextEntryId}`,o=[...e.entries,{id:n,role:t,text:r.trimStart(),isStreaming:!i}].slice(-60);return vH({...e,entries:o,nextEntryId:e.nextEntryId+1},t,n,i,a)}let o=e.entries.findIndex(e=>e.id===n);if(o===-1)return _H(e,t,null,r,i,a);let s=e.entries[o],c=xH(s.text,r,i),l=s.text===c&&s.isStreaming===!i?e.entries:e.entries.map((e,t)=>t===o?{...e,text:c,isStreaming:!i}:e);return vH({...e,entries:l},t,n,i,a)}function vH(e,t,n,r,i){return t===`user`?{...e,userEntryId:r?null:n,userEntryAwaitingFinal:!1,userEntryAwaitingFinalStartedAtMs:null}:{...e,assistantEntryId:r?null:n}}function yH(e,t,n=Date.now()){let r=t===`user`?e.userEntryId:e.assistantEntryId;if(r===null)return e;let i=e.entries.map(e=>e.id===r&&e.isStreaming?{...e,isStreaming:!1}:e);return t===`user`?{...e,entries:i,userEntryAwaitingFinal:!0,userEntryAwaitingFinalStartedAtMs:n}:{...e,entries:i,assistantEntryId:null}}function bH(e,t,n,r,i){let a=e.entries.find(e=>e.id===t);if(!a||a.isStreaming)return!1;let o=a.text;return!(o.trim()===``||n.trim()===``||n[0]&&/\s/.test(n[0])||n===o||n.startsWith(o)||o.endsWith(n)||r&&e.userEntryAwaitingFinal&&(e.userEntryAwaitingFinalStartedAtMs===null?1/0:i-e.userEntryAwaitingFinalStartedAtMs)<=mH&&SH(o,n))}function xH(e,t,n){if(e.trim()===``)return t.trimStart();if(t===``||t===e||e.endsWith(t))return e;if(t.startsWith(e))return t;if(t[0]&&/\s/.test(t[0]))return`${e}${t}`;if(n&&SH(e,t))return t;let r=EH(e,t),i=r>0?t.slice(r):t;return i===``?e:`${e}${r>0||!DH(e,i)?``:` `}${i}`}function SH(e,t){let n=CH(e),r=CH(t);if(n.length===0||r.length===0||n[0]!==r[0])return!1;if(n.length>1&&r.length>1&&n[1]===r[1])return!0;let i=wH(e),a=wH(t),o=TH(i,a),s=Math.min(i.length,a.length);return o>=6&&o/Math.max(1,s)>=.45}function CH(e){return[...e.toLowerCase().matchAll(/[\p{L}\p{N}]+/gu)].map(e=>e[0])}function wH(e){return e.toLowerCase().replace(/\s+/g,` `).trim()}function TH(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e[r]===t[r];)r+=1;return r}function EH(e,t){let n=e.toLowerCase(),r=t.toLowerCase(),i=Math.min(n.length,r.length);for(let e=i;e>=3;--e)if(n.endsWith(r.slice(0,e)))return e;return 0}function DH(e,t){let n=e.at(-1),r=t[0];return!n||!r||/\s/.test(n)||/\s/.test(r)?!1:/[\p{L}\p{N}.!?,:;)\]}"'’”]/u.test(n)&&/[\p{L}\p{N}]/u.test(r)}function OH(e){let t=T(e);if(t)return t===`webrtc-sdp`?`webrtc`:t===`json-pcm-websocket`?`provider-websocket`:t}function kH(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n){let i=e.subarray(r,r+n);t+=String.fromCharCode(...i)}return btoa(t)}function AH(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e+=1)n[e]=t.charCodeAt(e);return n}function jH(e){let t=new Uint8Array(e.length*2),n=new DataView(t.buffer);for(let t=0;t<e.length;t+=1){let r=Math.max(-1,Math.min(1,e[t]??0));n.setInt16(t*2,r<0?r*32768:r*32767,!0)}return t}function MH(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=new Float32Array(Math.floor(e.byteLength/2));for(let e=0;e<n.length;e+=1)n[e]=t.getInt16(e*2,!0)/32768;return n}var NH=class{constructor(){this.playhead=0,this.sources=new Set}get queuedUntil(){return this.playhead}get isPlaying(){return this.sources.size>0}play(e,t,n){if(!t)return;let r=MH(AH(e));if(r.length===0)return;let i=t.createBuffer(1,r.length,n);i.getChannelData(0).set(r);let a=t.createBufferSource();this.sources.add(a),a.addEventListener(`ended`,()=>this.sources.delete(a)),a.buffer=i,a.connect(t.destination);let o=Math.max(t.currentTime,this.playhead);a.start(o),this.playhead=o+i.duration}stop(e){for(let e of this.sources)try{e.stop()}catch{}this.sources.clear(),this.playhead=e?.currentTime??0}},PH=`fengming_agent_consult`,FH=[`status`,`steer`,`cancel`,`followup`];function IH(e){let t=w(e);return FH.includes(t)?t:void 0}var LH=[/^(?:(?:ok|okay|alright|all right)[,\s]+)?(?:please\s+)?(?:cancel|cancle|abort)(?:\s+(?:that|this|it|the\s+(?:check|run|task|work)))?(?:\s*[.!?])?$/,/^(?:(?:ok|okay|alright|all right)[,\s]+)?(?:please\s+)?(?:never mind|nevermind|forget it|kill it|end that)(?:\s*[.!?])?$/,/^(?:(?:ok|okay|alright|all right)[,\s]+)?(?:please\s+)?stop(?:\s+(?:that|this|it|the\s+(?:check|run|task|work)))?(?:\s*[.!?])?$/,/^(?:(?:ok|okay|alright|all right)[,\s]+)?(?:can|could|would)\s+you\s+(?:please\s+)?(?:cancel|cancle|stop|abort)(?:\s+(?:that|this|it|the\s+(?:check|run|task|work)))?(?:\s*[.!?])?$/,/^(?:(?:ok|okay|alright|all right|actually)[,\s]+)?(?:can|could|would)\s+(?:we|you)\s+(?:just\s+)?(?:cancel|cancle|stop|abort)(?:\s+(?:that|this|it|the\s+(?:check|run|task|work)))?(?:\s*[.!?])?$/,/\b(?:cancel|cancle|stop|abort)\s+(?:that|this|it|the\s+(?:check|run|task|work))\b/],RH=[/^(?:(?:ok|okay|alright|all right)[,\s]+)?(?:status|progress|update)(?:\s*[.!?])?$/,/^(?:(?:ok|okay|alright|all right)[,\s]+)?(?:give me|what'?s|any)\s+(?:an?\s+)?update(?:\s*[.!?])?$/,/^(?:(?:ok|okay|alright|all right)[,\s]+)?(where are we|what'?s happening|what (?:are you|is it) doing|what'?s it doing|how (?:is|are) (?:it|you|that|this) going|how'?s it going|are you still working|is it done|did it finish)(\b|[.!?])/],zH=[/^(after that|when you'?re done|when it'?s done|next|then|also|one more thing|follow up)(\b|[,.!?])/],BH=[/^(?:(?:ok|okay|alright|all right)[,\s]+)?(?:please\s+)?update\s+\S/,/^(?:actually|instead|change|switch|focus|use|try|prefer|make|do|check|look at|go with|redirect|steer|tell it to)\b/,/^(?:can|could|would)\s+you\s+(?:actually\s+)?(?:change|switch|focus|use|try|prefer|make|do|check|look at|go with|redirect|steer)\b/,/\b(?:instead|not that|rather than|change that|switch to|focus on|use the|try the|go with|tell it to)\b/],VH=[/^(?:(?:ok|okay|alright|all right)[,\s]+)?(?:please\s+)?stop\s+(?:using|doing|checking|looking at|focusing on|trying)\b/,/^(?:(?:ok|okay|alright|all right)[,\s]+)?(?:can|could|would)\s+(?:you|we)\s+(?:please\s+)?stop\s+(?:using|doing|checking|looking at|focusing on|trying)\b/,/^(?:(?:ok|okay|alright|all right)[,\s]+)?(?:please\s+)?stop\s+(?:that|this|it|the\s+(?:check|run|task|work))\s+from\b/];function HH(e,t){return t.some(t=>t.test(e))}function UH(e){return/\b(?:don'?t|do\s+not|not|never)\s+(?:please\s+)?(?:cancel|cancle|stop|abort|kill|end)\b/.test(e)||/\bstop\s+(?:it|that|this)\s+from\b/.test(e)}function WH(e){let t=IH(e.mode);if(t)return{mode:t,confidence:`high`,reason:`explicit_mode`,shouldAutoControl:!0};let n=e.text.trim().toLowerCase();return HH(n,VH)?{mode:`steer`,confidence:`medium`,reason:`steer_command`,shouldAutoControl:!0}:!UH(n)&&HH(n,LH)?{mode:`cancel`,confidence:`high`,reason:`cancel_safety`,shouldAutoControl:!0}:HH(n,RH)?{mode:`status`,confidence:`high`,reason:`status_query`,shouldAutoControl:!0}:HH(n,zH)?{mode:`followup`,confidence:`high`,reason:`followup_marker`,shouldAutoControl:!0}:HH(n,BH)?{mode:`steer`,confidence:`medium`,reason:`steer_command`,shouldAutoControl:!0}:{mode:`status`,confidence:`low`,reason:`safe_default`,shouldAutoControl:!1}}function GH(e){return WH({text:e}).shouldAutoControl}function KH(e){let t=qH(e),n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=T(n.text)??T(n.message)??T(n.request)??T(n.query);if(!r)throw Error(`文本是必需的`);return{text:r,mode:IH(n.mode)??WH({text:r}).mode}}function qH(e){if(typeof e!=`string`)return e;let t=e.trim();if(!t)return{};try{return JSON.parse(t)}catch{return{text:t}}}function JH(e){return[`Internal FengMing voice control result.`,`Do not call fengming_agent_consult or any other tool for this message.`,`Speak this exact FengMing status to the voice call, without adding, removing, or rephrasing words.`,`Status: ${JSON.stringify(e)}`].join(`
7186
7196
  `)}function YH(e=`Cancelled the active FengMing run.`){return{status:`cancelled`,message:e}}function XH(e,t){let n=0,r=0,i,a=QH(e,t);return r=>{if(!e.callbacks.onTalkEvent)return;let s=o(r);n+=1,e.callbacks.onTalkEvent({id:`${a}:${n}`,type:r.type,sessionId:a,turnId:s,captureId:r.captureId,seq:n,timestamp:new Date().toISOString(),mode:`realtime`,transport:t.transport,brain:`agent-consult`,provider:t.provider,final:r.final,callId:r.callId,itemId:r.itemId,parentId:r.parentId,payload:r.payload??null}),(r.type===`turn.ended`||r.type===`turn.cancelled`||r.type===`session.replaced`||r.type===`session.closed`)&&(i=void 0)};function o(e){return e.type===`turn.started`||ZH(e.type)?(i=e.turnId??i??`turn-${++r}`,i):e.turnId}}function ZH(e){return e===`turn.ended`||e===`turn.cancelled`||e.startsWith(`input.audio.`)||e.startsWith(`transcript.`)||e.startsWith(`output.`)||e.startsWith(`tool.`)}function QH(e,t){let n=t.sessionId;return typeof n==`string`&&n.trim()?n.trim():`relaySessionId`in t&&t.relaySessionId.trim()?t.relaySessionId:`${e.sessionKey}:${t.provider}:${t.transport}`}function $H(e){if(!e||typeof e!=`object`)return``;let t=e;return typeof t.text==`string`?t.text:(Array.isArray(t.content)?t.content:[]).map(e=>{if(!e||typeof e!=`object`)return``;let t=e;return t.type===`text`&&typeof t.text==`string`?t.text:``}).filter(Boolean).join(`
7187
7197
 
7188
- `).trim()}function eU(e){return new Promise((t,n)=>{if(e.signal?.aborted){n(new DOMException(`FengMing tool call aborted`,`AbortError`));return}let r=window.setTimeout(()=>{o(),n(Error(`FengMing tool call timed out`))},e.timeoutMs),i=()=>{o(),n(new DOMException(`FengMing tool call aborted`,`AbortError`))};e.signal?.addEventListener(`abort`,i,{once:!0});let a=()=>void 0;a=e.client.addEventListener(r=>{if(r.event!==`chat`)return;let i=r.payload;!i||i.runId!==e.runId||(tU(e.emitTalkEvent,i),i.state===`final`?(o(),t($H(i.message)||`FengMing finished with no text.`)):i.state===`aborted`?(o(),n(new DOMException(i.errorMessage??`FengMing tool call aborted`,`AbortError`))):i.state===`error`&&(o(),n(Error(i.errorMessage??`FengMing tool call failed`))))});function o(){window.clearTimeout(r),e.signal?.removeEventListener(`abort`,i),a()}})}function tU(e,t){if(!e||t.stream!==`tool`)return;let n=t.data&&typeof t.data==`object`?t.data:{},r=typeof n.phase==`string`?n.phase:void 0,i=typeof n.name==`string`?n.name:void 0;e({type:`tool.progress`,callId:typeof n.toolCallId==`string`?n.toolCallId:void 0,payload:{runId:t.runId,...i?{name:i}:{},...r?{phase:r}:{}}})}async function nU(e){let t=e.text.trim();if(!t)return;let n=e.sessionId&&e.sessionId.trim()?e.ctx.client.request(`talk.session.steer`,{sessionId:e.sessionId,sessionKey:e.ctx.sessionKey,text:t,...e.mode?{mode:e.mode}:{}}):e.ctx.client.request(`talk.client.steer`,{sessionKey:e.ctx.sessionKey,text:t,...e.mode?{mode:e.mode}:{}});try{let t=await n;e.onControlResult?.(t),iU(t,e.speakControlResult,e.suppressSpeechForModes),e.emitTalkEvent?.({type:`tool.progress`,payload:{name:`fengming_agent_control`,result:t},final:t&&typeof t==`object`&&`mode`in t?t.mode===`status`||t.mode===`cancel`:void 0})}catch(t){e.emitTalkEvent?.({type:`tool.error`,payload:{message:t instanceof Error?t.message:String(t)},final:!0})}}async function rU(e){try{let t=KH(e.args),n=e.sessionId&&e.sessionId.trim()?await e.ctx.client.request(`talk.session.steer`,{sessionId:e.sessionId,sessionKey:e.ctx.sessionKey,text:t.text,mode:t.mode}):await e.ctx.client.request(`talk.client.steer`,{sessionKey:e.ctx.sessionKey,text:t.text,mode:t.mode});e.emitTalkEvent?.({type:`tool.progress`,callId:e.callId,payload:{name:`fengming_agent_control`,result:n},final:n&&typeof n==`object`&&`mode`in n?n.mode===`status`||n.mode===`cancel`:void 0}),e.submit(e.callId,n)}catch(t){let n=t instanceof Error?t.message:String(t);e.emitTalkEvent?.({type:`tool.error`,callId:e.callId,payload:{message:n},final:!0}),e.submit(e.callId,{error:n})}}function iU(e,t,n){if(!t||!e||typeof e!=`object`)return;let r=e,i=typeof r.mode==`string`?r.mode:void 0;if(i&&n?.includes(i))return;let a=typeof r.message==`string`?r.message.trim():``;(r.speak===!0&&r.suppress!==!0||r.ok===!0&&i===`steer`&&r.suppress===!0)&&a&&t(JH(a))}async function aU(e){let{ctx:t,callId:n,submit:r}=e;t.callbacks.onStatus?.(`thinking`);let i,a=!1,o=!1,s=e=>{o||(o=!0,r(n,e))},c=()=>{e.submitAbortResult!==!1&&s(YH())},l=()=>{a=!0,i&&t.client.request(`chat.abort`,{sessionKey:t.sessionKey,runId:i})};if(e.signal?.aborted){c();return}e.signal?.addEventListener(`abort`,l,{once:!0});try{let r=typeof e.args==`string`?JSON.parse(e.args||`{}`):e.args??{},a=await t.client.request(`talk.client.toolCall`,{sessionKey:t.sessionKey,callId:n,name:PH,args:r,...e.relaySessionId?{relaySessionId:e.relaySessionId}:{}});if(i=a.runId??a.idempotencyKey,!i)throw Error(`FengMing realtime tool call did not return a run id`);if(e.signal?.aborted){l(),c();return}s({result:await eU({client:t.client,runId:i,timeoutMs:12e4,emitTalkEvent:e.emitTalkEvent,signal:e.signal})})}catch(t){if(a||e.signal?.aborted||oU(t)){c();return}s({error:t instanceof Error?t.message:String(t)})}finally{e.signal?.removeEventListener(`abort`,l),!a&&!e.signal?.aborted&&t.callbacks.onStatus?.(`listening`)}}function oU(e){return typeof DOMException<`u`&&e instanceof DOMException&&e.name===`AbortError`}var sU=.02,cU=.08,lU=2,uU=class{constructor(e,t){this.session=e,this.ctx=t,this.media=null,this.inputContext=null,this.outputContext=null,this.inputSource=null,this.inputProcessor=null,this.unsubscribe=null,this.closed=!1,this.outputQueue=new NH,this.consultAbortControllers=new Map,this.completedToolCalls=new Set,this.cancelRequestedForPlayback=!1,this.speechFramesDuringPlayback=0}async start(){if(!navigator.mediaDevices?.getUserMedia)throw Error(`实时通话需要浏览器麦克风访问`);if(this.session.audio.inputEncoding!==`pcm16`||this.session.audio.outputEncoding!==`pcm16`)throw Error(`网关中继实时通话目前需要 PCM16 音频`);this.closed=!1,this.unsubscribe=this.ctx.client.addEventListener(e=>{e.event===`talk.event`&&this.handleRelayEvent(e.payload)}),this.media=await navigator.mediaDevices.getUserMedia({audio:{autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0}}),this.inputContext=new AudioContext({sampleRate:this.session.audio.inputSampleRateHz}),this.outputContext=new AudioContext({sampleRate:this.session.audio.outputSampleRateHz}),this.startMicrophonePump()}stop(){let e=this.closed;this.stopLocal(),e||this.ctx.client.request(`talk.session.close`,{sessionId:this.session.relaySessionId}).catch(()=>void 0)}stopLocal(){this.closed=!0,this.unsubscribe?.(),this.unsubscribe=null,this.inputProcessor?.disconnect(),this.inputProcessor=null,this.inputSource?.disconnect(),this.inputSource=null,this.abortConsults(),this.media?.getTracks().forEach(e=>e.stop()),this.media=null,this.stopOutput(),this.inputContext?.close(),this.inputContext=null,this.outputContext?.close(),this.outputContext=null}startMicrophonePump(){!this.media||!this.inputContext||(this.inputSource=this.inputContext.createMediaStreamSource(this.media),this.inputProcessor=this.inputContext.createScriptProcessor(4096,1,1),this.inputProcessor.onaudioprocess=e=>{if(this.closed)return;let t=e.inputBuffer.getChannelData(0),n=jH(t);this.detectBargeInSpeech(t)&&this.cancelOutputForBargeIn(),this.ctx.client.request(`talk.session.appendAudio`,{sessionId:this.session.relaySessionId,audioBase64:kH(n),timestamp:Math.round((this.inputContext?.currentTime??0)*1e3)}).catch(e=>{this.closed||(this.ctx.callbacks.onStatus?.(`error`,e instanceof Error?e.message:String(e)),this.stop())})},this.inputSource.connect(this.inputProcessor),this.inputProcessor.connect(this.inputContext.destination))}handleRelayEvent(e){if(!(e.relaySessionId!==this.session.relaySessionId||this.closed))switch(e.talkEvent&&this.ctx.callbacks.onTalkEvent?.(e.talkEvent),e.type){case`ready`:this.ctx.callbacks.onStatus?.(`listening`);return;case`audio`:e.audioBase64&&(this.cancelRequestedForPlayback=!1,this.speechFramesDuringPlayback=0,this.playPcm16(e.audioBase64));return;case`clear`:this.stopOutput();return;case`mark`:this.scheduleMarkAck();return;case`transcript`:e.role&&e.text&&this.ctx.callbacks.onTranscript?.({role:e.role,text:e.text,final:e.final??!1});return;case`toolCall`:this.handleToolCall(e);return;case`toolResult`:this.isFinalToolResult(e)&&this.completeToolCall(e.callId);return;case`error`:this.lastRelayError=e.message??v(`chat.realtimeRelayFailed`),this.ctx.callbacks.onStatus?.(`error`,this.lastRelayError);return;case`close`:this.abortConsults(),this.closed||(this.ctx.callbacks.onStatus?.(e.reason===`error`?`error`:`idle`,e.reason===`error`?this.lastRelayError??v(`chat.realtimeRelayClosed`):void 0),this.stopLocal());return;default:return}}playPcm16(e){this.outputQueue.play(e,this.outputContext,this.session.audio.outputSampleRateHz)}stopOutput(){this.outputQueue.stop(this.outputContext),this.speechFramesDuringPlayback=0}scheduleMarkAck(){let e=Math.max(0,Math.ceil(((this.outputQueue.queuedUntil||this.outputContext?.currentTime||0)-(this.outputContext?.currentTime??0))*1e3));window.setTimeout(()=>{this.closed},e)}async handleToolCall(e){let t=e.callId?.trim(),n=e.name?.trim();if(!t||!n)return;if(n===`fengming_agent_control`){await rU({ctx:this.ctx,callId:t,args:e.args??{},sessionId:this.session.relaySessionId,submit:(e,t)=>this.submitToolResult(e,t)});return}if(n!==`fengming_agent_consult`){this.submitToolResult(t,{error:`Tool "${n}" not available in browser Talk`});return}let r=new AbortController;this.consultAbortControllers.set(t,r);try{e.forced&&this.submitToolResult(t,{status:`working`,tool:PH,message:`Tell the person briefly that you are checking, then wait for the final FengMing result before answering with the actual result.`},{willContinue:!0}),await aU({ctx:this.ctx,callId:t,args:e.args??{},relaySessionId:this.session.relaySessionId,signal:r.signal,submit:(e,t)=>this.submitToolResult(e,t)})}finally{this.consultAbortControllers.delete(t)}}submitToolResult(e,t,n){this.completedToolCalls.has(e)||this.ctx.client.request(`talk.session.submitToolResult`,{sessionId:this.session.relaySessionId,callId:e,result:t,...n?{options:n}:{}})}completeToolCall(e){let t=e?.trim();t&&(this.completedToolCalls.add(t),this.consultAbortControllers.get(t)?.abort(),this.consultAbortControllers.delete(t))}isFinalToolResult(e){let t=e.talkEvent;return!(t?.type===`tool.progress`||t?.type===`tool.result`&&t.final===!1)}cancelOutputForBargeIn(){!this.outputQueue.isPlaying||this.cancelRequestedForPlayback||(this.cancelRequestedForPlayback=!0,this.stopOutput(),this.ctx.client.request(`talk.session.cancelOutput`,{sessionId:this.session.relaySessionId,reason:`barge-in`}))}abortConsults(){for(let e of this.consultAbortControllers.values())e.abort();this.consultAbortControllers.clear()}detectBargeInSpeech(e){if(!this.outputQueue.isPlaying||this.cancelRequestedForPlayback||e.length===0)return this.speechFramesDuringPlayback=0,!1;let t=0,n=0;for(let r of e)n=Math.max(n,Math.abs(r)),t+=r*r;return Math.sqrt(t/e.length)>=sU&&n>=cU?this.speechFramesDuringPlayback+=1:this.speechFramesDuringPlayback=0,this.speechFramesDuringPlayback>=lU}},dU=class{constructor(e,t){this.session=e,this.ctx=t,this.peer=null,this.channel=null,this.media=null,this.audio=null,this.closed=!1,this.responseActive=!1,this.responseCreateInFlight=!1,this.responseCreatePending=!1,this.toolBuffers=new Map,this.consultAbortControllers=new Set,this.emitTalkEvent=XH(t,e)}async start(){if(!navigator.mediaDevices?.getUserMedia||typeof RTCPeerConnection>`u`)throw Error(`实时通话需要浏览器 WebRTC 和麦克风访问`);this.closed=!1,this.peer=new RTCPeerConnection,this.audio=document.createElement(`audio`),this.audio.autoplay=!0,this.audio.style.display=`none`,document.body.append(this.audio),this.peer.addEventListener(`track`,e=>{this.audio&&(this.audio.srcObject=e.streams[0])}),this.media=await navigator.mediaDevices.getUserMedia({audio:!0});for(let e of this.media.getAudioTracks())this.peer.addTrack(e,this.media);this.channel=this.peer.createDataChannel(`oai-events`),this.channel.addEventListener(`open`,()=>{this.ctx.callbacks.onStatus?.(`listening`),this.emitTalkEvent({type:`session.ready`})}),this.channel.addEventListener(`message`,e=>this.handleRealtimeEvent(e.data)),this.peer.addEventListener(`connectionstatechange`,()=>{this.closed||(this.peer?.connectionState===`failed`||this.peer?.connectionState===`closed`)&&this.ctx.callbacks.onStatus?.(`error`,v(`chat.realtimeConnectionClosed`))});let e=await this.peer.createOffer();await this.peer.setLocalDescription(e);let t=await fetch(this.session.offerUrl??`https://api.openai.com/v1/realtime/calls`,{method:`POST`,body:e.sdp,headers:{...this.session.offerHeaders,Authorization:`Bearer ${this.session.clientSecret}`,"Content-Type":`application/sdp`}});if(!t.ok)throw Error(`Realtime WebRTC setup failed (${t.status})`);await this.peer.setRemoteDescription({type:`answer`,sdp:await t.text()})}stop(){this.closed||this.emitTalkEvent({type:`session.closed`,final:!0}),this.closed=!0,this.channel?.close(),this.channel=null,this.peer?.close(),this.peer=null,this.media?.getTracks().forEach(e=>e.stop()),this.media=null,this.audio?.remove(),this.audio=null;for(let e of this.consultAbortControllers)e.abort();this.consultAbortControllers.clear(),this.toolBuffers.clear(),this.responseActive=!1,this.responseCreateInFlight=!1,this.responseCreatePending=!1}send(e){this.channel?.readyState===`open`&&this.channel.send(JSON.stringify(e))}handleRealtimeEvent(e){if(this.closed)return;let t;try{t=JSON.parse(String(e))}catch{return}switch(t.type){case`conversation.item.input_audio_transcription.completed`:t.transcript&&(this.ctx.callbacks.onTranscript?.({role:`user`,text:t.transcript,final:!0}),this.emitTalkEvent({type:`transcript.done`,final:!0,itemId:t.item_id,payload:{role:`user`,text:t.transcript}}),this.consultAbortControllers.size>0&&GH(t.transcript)&&nU({ctx:this.ctx,text:t.transcript,emitTalkEvent:this.emitTalkEvent,onControlResult:e=>this.interruptSuppressedControlResponse(e),speakControlResult:e=>this.sendControlSpeechMessage(e),suppressSpeechForModes:[`cancel`]}));return;case`response.audio_transcript.done`:t.transcript&&(this.ctx.callbacks.onTranscript?.({role:`assistant`,text:t.transcript,final:!0}),this.emitTalkEvent({type:`output.text.done`,final:!0,itemId:t.item_id,payload:{text:t.transcript}}));return;case`response.function_call_arguments.delta`:this.bufferToolDelta(t);return;case`response.function_call_arguments.done`:this.handleToolCall(t);return;case`input_audio_buffer.speech_started`:this.ctx.callbacks.onStatus?.(`listening`,`Speech detected`),this.emitTalkEvent({type:`turn.started`,payload:{source:t.type}});return;case`input_audio_buffer.speech_stopped`:this.ctx.callbacks.onStatus?.(`thinking`,`Processing speech`),this.emitTalkEvent({type:`input.audio.committed`,final:!0});return;case`response.created`:this.responseActive=!0,this.responseCreateInFlight=!1,this.ctx.callbacks.onStatus?.(`thinking`,`Generating response`);return;case`response.cancelled`:case`response.done`:this.responseActive=!1,this.responseCreateInFlight=!1,this.ctx.callbacks.onStatus?.(`listening`,this.extractResponseStatus(t)),this.emitTalkEvent({type:`turn.ended`,final:!0,payload:{status:t.response?.status??(t.type===`response.cancelled`?`cancelled`:`completed`)}}),this.flushPendingResponseCreate();return;case`error`:this.responseCreateInFlight=!1,this.ctx.callbacks.onStatus?.(`error`,this.extractErrorDetail(t.error)),this.emitTalkEvent({type:`session.error`,final:!0,payload:{message:this.extractErrorDetail(t.error)}});return;default:return}}extractResponseStatus(e){let t=e.response?.status;return t&&t!==`completed`?`Response ${t}`:void 0}extractErrorDetail(e){if(!e||typeof e!=`object`)return v(`chat.realtimeProviderError`);let t=e,n=typeof t.message==`string`?t.message.trim():``,r=typeof t.code==`string`?t.code.trim():``,i=typeof t.type==`string`?t.type.trim():``;return n||r||i||v(`chat.realtimeProviderError`)}bufferToolDelta(e){let t=e.item_id??`unknown`,n=this.toolBuffers.get(t);if(n){n.args+=e.delta??``;return}this.toolBuffers.set(t,{name:e.name??``,callId:e.call_id??``,args:e.delta??``})}async handleToolCall(e){let t=e.item_id??`unknown`,n=this.toolBuffers.get(t);this.toolBuffers.delete(t);let r=n?.name||e.name||``,i=n?.callId||e.call_id||``;if(!i)return;if(r===`fengming_agent_control`){await rU({ctx:this.ctx,callId:i,args:n?.args||e.arguments||`{}`,emitTalkEvent:this.emitTalkEvent,submit:(e,t)=>this.submitToolResult(e,t)});return}if(r!==`fengming_agent_consult`)return;this.emitTalkEvent({type:`tool.call`,callId:i,itemId:t,payload:{name:r,args:n?.args||e.arguments||`{}`}});let a=new AbortController;this.consultAbortControllers.add(a);try{await aU({ctx:this.ctx,callId:i,args:n?.args||e.arguments||`{}`,signal:a.signal,emitTalkEvent:this.emitTalkEvent,submit:(e,t)=>this.submitToolResult(e,t)})}finally{this.consultAbortControllers.delete(a)}}submitToolResult(e,t){this.send({type:`conversation.item.create`,item:{type:`function_call_output`,call_id:e,output:JSON.stringify(t)}}),this.requestResponseCreate()}sendControlSpeechMessage(e){this.responseActive&&this.send({type:`response.cancel`}),this.send({type:`conversation.item.create`,item:{type:`message`,role:`user`,content:[{type:`input_text`,text:e}]}}),this.requestResponseCreate()}interruptSuppressedControlResponse(e){if(!this.responseActive||!e||typeof e!=`object`)return;let t=e;t.ok===!0&&(t.mode===`cancel`||t.suppress===!0&&t.mode!==`steer`)&&this.send({type:`response.cancel`})}requestResponseCreate(){if(this.responseActive||this.responseCreateInFlight){this.responseCreatePending=!0;return}this.responseCreatePending=!1,this.responseCreateInFlight=!0,this.send({type:`response.create`})}flushPendingResponseCreate(){this.responseCreatePending&&(this.responseCreatePending=!1,this.requestResponseCreate())}};function fU(e,t){let n=pU(e);if(n===`webrtc`)return new dU(e,t);if(n===`gateway-relay`)return new uU(e,t);if(n===`managed-room`)throw Error(`托管房间实时通话会话在此界面中尚不可用`);let r=e.transport??`unknown`;throw Error(`Unsupported realtime Talk transport: ${r}`)}function pU(e){return OH(e.transport)??`webrtc`}function mU(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}var hU=class{constructor(e,t,n={},r={}){this.client=e,this.sessionKey=t,this.callbacks=n,this.options=r,this.transport=null,this.closed=!1}async start(){this.closed=!1,this.callbacks.onStatus?.(`connecting`);let e=await this.createSession();this.closed||(this.transport=fU(e,{client:this.client,sessionKey:this.sessionKey,callbacks:this.callbacks,consultThinkingLevel:e.consultThinkingLevel,consultFastMode:e.consultFastMode}),await this.transport.start())}async createSession(){try{return await this.client.request(`talk.client.create`,mU({sessionKey:this.sessionKey,...this.options}))}catch(e){if(this.options.transport&&this.options.transport!==`gateway-relay`)throw e;try{return await this.client.request(`talk.session.create`,mU({sessionKey:this.sessionKey,...this.options,mode:`realtime`,transport:this.options.transport??`gateway-relay`,brain:`agent-consult`}))}catch{throw e}}}stop(){this.closed=!0,this.callbacks.onStatus?.(`idle`),this.transport?.stop(),this.transport=null}},gU=Yi({}),_U=Ao();function vU(){if(!window.location.search)return!1;let e=new URLSearchParams(window.location.search).get(`onboarding`);if(!e)return!1;let t=e.trim().toLowerCase();return t===`1`||t===`true`||t===`yes`||t===`on`}var $=class extends r{constructor(){super(),this.i18nController=new y(this),this.clientInstanceId=yt(),this.connectGeneration=0,this.settings=Oo(),this.password=``,this.loginShowGatewayToken=!1,this.loginShowGatewayPassword=!1,this.tab=`chat`,this.onboarding=vU(),this.connected=!1,this.theme=this.settings.theme??`claw`,this.themeMode=this.settings.themeMode??`system`,this.themeResolved=`dark`,this.themeOrder=this.buildThemeOrder(this.theme),this.customThemeImportUrl=``,this.customThemeImportBusy=!1,this.customThemeImportMessage=null,this.customThemeImportExpanded=!1,this.customThemeImportFocusToken=0,this.customThemeImportSelectOnSuccess=!1,this.hello=null,this.lastError=null,this.lastErrorCode=null,this.eventLog=[],this.eventLogBuffer=[],this.toolStreamSyncTimer=null,this.sidebarCloseTimer=null,this.assistantName=gU.name,this.assistantAvatar=gU.avatar,this.assistantAvatarSource=gU.avatarSource??null,this.assistantAvatarStatus=gU.avatarStatus??null,this.assistantAvatarReason=gU.avatarReason??null,this.assistantAvatarUploadBusy=!1,this.assistantAvatarUploadError=null,this.assistantAgentId=gU.agentId??null,this.userName=_U.name,this.userAvatar=_U.avatar,this.localMediaPreviewRoots=[],this.embedSandboxMode=`scripts`,this.allowExternalEmbedUrls=!1,this.chatMessageMaxWidth=null,this.serverVersion=null,this.sessionKey=this.settings.sessionKey,this.chatSessionMessageSubscriptionKey=null,this.chatSessionMessageSubscriptionRequestedKey=null,this.currentSessionId=null,this.chatLoading=!1,this.chatSending=!1,this.chatMessage=``,this.chatMessages=[],this.chatToolMessages=[],this.activityEntries=[],this.activityFilterText=``,this.activityStatusFilters={running:!0,done:!0,error:!0},this.activityToolFilter=``,this.activityExpandedIds=new Set,this.activityAutoFollow=!0,this.activityAtBottom=!0,this.chatStreamSegments=[],this.chatStream=null,this.chatStreamStartedAt=null,this.chatRunId=null,this.chatSideResult=null,this.compactionStatus=null,this.fallbackStatus=null,this.chatRunStatus=null,this.chatRunStatusClearTimer=null,this.chatAvatarUrl=null,this.chatAvatarSource=null,this.chatAvatarStatus=null,this.chatAvatarReason=null,this.chatThinkingLevel=null,this.chatModelOverrides={},this.chatModelSwitchPromises={},this.chatModelsLoading=!1,this.chatModelCatalog=[],this.sessionSwitchNotice=null,this.sessionSwitchFlashKey=null,this.chatSessionPickerOpen=!1,this.chatSessionPickerSurface=null,this.chatSessionPickerQuery=``,this.chatSessionPickerAppliedQuery=``,this.chatSessionPickerLoading=!1,this.chatSessionPickerError=null,this.chatSessionPickerResult=null,this.sessionSwitchNoticeSeq=0,this.sessionSwitchNoticeTimer=null,this.sessionSwitchFlashTimer=null,this.chatQueue=[],this.chatQueueBySession={},this.chatAttachments=[],this.realtimeTalkActive=!1,this.realtimeTalkStatus=`idle`,this.realtimeTalkDetail=null,this.realtimeTalkTranscript=null,this.realtimeTalkConversation=[],this.realtimeTalkOptionsOpen=!1,this.realtimeTalkOptions={provider:``,model:``,voice:``,transport:``,vadThreshold:``,silenceDurationMs:``,prefixPaddingMs:``,reasoningEffort:``},this.realtimeTalkSession=null,this.realtimeTalkConversationState=hH(),this.nativeBridgeCleanup=null,this.chatManualRefreshInFlight=!1,this.chatHeaderControlsHidden=!1,this.chatMobileControlsOpen=!1,this.chatMobileControlsTrigger=null,this.navDrawerOpen=!1,this.chatLocalInputHistoryBySession={},this.chatInputHistorySessionKey=null,this.chatInputHistoryItems=null,this.chatInputHistoryIndex=-1,this.chatDraftBeforeHistory=null,this.sidebarOpen=!1,this.sidebarContent=null,this.sidebarError=null,this.splitRatio=this.settings.splitRatio,this.nodesLoading=!1,this.nodes=[],this.devicesLoading=!1,this.devicesError=null,this.devicesList=null,this.execApprovalsLoading=!1,this.execApprovalsSaving=!1,this.execApprovalsDirty=!1,this.execApprovalsSnapshot=null,this.execApprovalsForm=null,this.execApprovalsSelectedAgent=null,this.execApprovalsTarget=`gateway`,this.execApprovalsTargetNodeId=null,this.execApprovalQueue=[],this.execApprovalBusy=!1,this.execApprovalError=null,this.pendingGatewayUrl=null,this.pendingGatewayToken=null,this.configLoading=!1,this.configRaw=`{
7198
+ `).trim()}function eU(e){return new Promise((t,n)=>{if(e.signal?.aborted){n(new DOMException(`FengMing tool call aborted`,`AbortError`));return}let r=window.setTimeout(()=>{o(),n(Error(`FengMing tool call timed out`))},e.timeoutMs),i=()=>{o(),n(new DOMException(`FengMing tool call aborted`,`AbortError`))};e.signal?.addEventListener(`abort`,i,{once:!0});let a=()=>void 0;a=e.client.addEventListener(r=>{if(r.event!==`chat`)return;let i=r.payload;!i||i.runId!==e.runId||(tU(e.emitTalkEvent,i),i.state===`final`?(o(),t($H(i.message)||`FengMing finished with no text.`)):i.state===`aborted`?(o(),n(new DOMException(i.errorMessage??`FengMing tool call aborted`,`AbortError`))):i.state===`error`&&(o(),n(Error(i.errorMessage??`FengMing tool call failed`))))});function o(){window.clearTimeout(r),e.signal?.removeEventListener(`abort`,i),a()}})}function tU(e,t){if(!e||t.stream!==`tool`)return;let n=t.data&&typeof t.data==`object`?t.data:{},r=typeof n.phase==`string`?n.phase:void 0,i=typeof n.name==`string`?n.name:void 0;e({type:`tool.progress`,callId:typeof n.toolCallId==`string`?n.toolCallId:void 0,payload:{runId:t.runId,...i?{name:i}:{},...r?{phase:r}:{}}})}async function nU(e){let t=e.text.trim();if(!t)return;let n=e.sessionId&&e.sessionId.trim()?e.ctx.client.request(`talk.session.steer`,{sessionId:e.sessionId,sessionKey:e.ctx.sessionKey,text:t,...e.mode?{mode:e.mode}:{}}):e.ctx.client.request(`talk.client.steer`,{sessionKey:e.ctx.sessionKey,text:t,...e.mode?{mode:e.mode}:{}});try{let t=await n;e.onControlResult?.(t),iU(t,e.speakControlResult,e.suppressSpeechForModes),e.emitTalkEvent?.({type:`tool.progress`,payload:{name:`fengming_agent_control`,result:t},final:t&&typeof t==`object`&&`mode`in t?t.mode===`status`||t.mode===`cancel`:void 0})}catch(t){e.emitTalkEvent?.({type:`tool.error`,payload:{message:t instanceof Error?t.message:String(t)},final:!0})}}async function rU(e){try{let t=KH(e.args),n=e.sessionId&&e.sessionId.trim()?await e.ctx.client.request(`talk.session.steer`,{sessionId:e.sessionId,sessionKey:e.ctx.sessionKey,text:t.text,mode:t.mode}):await e.ctx.client.request(`talk.client.steer`,{sessionKey:e.ctx.sessionKey,text:t.text,mode:t.mode});e.emitTalkEvent?.({type:`tool.progress`,callId:e.callId,payload:{name:`fengming_agent_control`,result:n},final:n&&typeof n==`object`&&`mode`in n?n.mode===`status`||n.mode===`cancel`:void 0}),e.submit(e.callId,n)}catch(t){let n=t instanceof Error?t.message:String(t);e.emitTalkEvent?.({type:`tool.error`,callId:e.callId,payload:{message:n},final:!0}),e.submit(e.callId,{error:n})}}function iU(e,t,n){if(!t||!e||typeof e!=`object`)return;let r=e,i=typeof r.mode==`string`?r.mode:void 0;if(i&&n?.includes(i))return;let a=typeof r.message==`string`?r.message.trim():``;(r.speak===!0&&r.suppress!==!0||r.ok===!0&&i===`steer`&&r.suppress===!0)&&a&&t(JH(a))}async function aU(e){let{ctx:t,callId:n,submit:r}=e;t.callbacks.onStatus?.(`thinking`);let i,a=!1,o=!1,s=e=>{o||(o=!0,r(n,e))},c=()=>{e.submitAbortResult!==!1&&s(YH())},l=()=>{a=!0,i&&t.client.request(`chat.abort`,{sessionKey:t.sessionKey,runId:i})};if(e.signal?.aborted){c();return}e.signal?.addEventListener(`abort`,l,{once:!0});try{let r=typeof e.args==`string`?JSON.parse(e.args||`{}`):e.args??{},a=await t.client.request(`talk.client.toolCall`,{sessionKey:t.sessionKey,callId:n,name:PH,args:r,...e.relaySessionId?{relaySessionId:e.relaySessionId}:{}});if(i=a.runId??a.idempotencyKey,!i)throw Error(`FengMing realtime tool call did not return a run id`);if(e.signal?.aborted){l(),c();return}s({result:await eU({client:t.client,runId:i,timeoutMs:12e4,emitTalkEvent:e.emitTalkEvent,signal:e.signal})})}catch(t){if(a||e.signal?.aborted||oU(t)){c();return}s({error:t instanceof Error?t.message:String(t)})}finally{e.signal?.removeEventListener(`abort`,l),!a&&!e.signal?.aborted&&t.callbacks.onStatus?.(`listening`)}}function oU(e){return typeof DOMException<`u`&&e instanceof DOMException&&e.name===`AbortError`}var sU=.02,cU=.08,lU=2,uU=class{constructor(e,t){this.session=e,this.ctx=t,this.media=null,this.inputContext=null,this.outputContext=null,this.inputSource=null,this.inputProcessor=null,this.unsubscribe=null,this.closed=!1,this.outputQueue=new NH,this.consultAbortControllers=new Map,this.completedToolCalls=new Set,this.cancelRequestedForPlayback=!1,this.speechFramesDuringPlayback=0}async start(){if(!navigator.mediaDevices?.getUserMedia)throw Error(`实时通话需要浏览器麦克风访问`);if(this.session.audio.inputEncoding!==`pcm16`||this.session.audio.outputEncoding!==`pcm16`)throw Error(`网关中继实时通话目前需要 PCM16 音频`);this.closed=!1,this.unsubscribe=this.ctx.client.addEventListener(e=>{e.event===`talk.event`&&this.handleRelayEvent(e.payload)}),this.media=await navigator.mediaDevices.getUserMedia({audio:{autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0}}),this.inputContext=new AudioContext({sampleRate:this.session.audio.inputSampleRateHz}),this.outputContext=new AudioContext({sampleRate:this.session.audio.outputSampleRateHz}),this.startMicrophonePump()}stop(){let e=this.closed;this.stopLocal(),e||this.ctx.client.request(`talk.session.close`,{sessionId:this.session.relaySessionId}).catch(()=>void 0)}stopLocal(){this.closed=!0,this.unsubscribe?.(),this.unsubscribe=null,this.inputProcessor?.disconnect(),this.inputProcessor=null,this.inputSource?.disconnect(),this.inputSource=null,this.abortConsults(),this.media?.getTracks().forEach(e=>e.stop()),this.media=null,this.stopOutput(),this.inputContext?.close(),this.inputContext=null,this.outputContext?.close(),this.outputContext=null}startMicrophonePump(){!this.media||!this.inputContext||(this.inputSource=this.inputContext.createMediaStreamSource(this.media),this.inputProcessor=this.inputContext.createScriptProcessor(4096,1,1),this.inputProcessor.onaudioprocess=e=>{if(this.closed)return;let t=e.inputBuffer.getChannelData(0),n=jH(t);this.detectBargeInSpeech(t)&&this.cancelOutputForBargeIn(),this.ctx.client.request(`talk.session.appendAudio`,{sessionId:this.session.relaySessionId,audioBase64:kH(n),timestamp:Math.round((this.inputContext?.currentTime??0)*1e3)}).catch(e=>{this.closed||(this.ctx.callbacks.onStatus?.(`error`,e instanceof Error?e.message:String(e)),this.stop())})},this.inputSource.connect(this.inputProcessor),this.inputProcessor.connect(this.inputContext.destination))}handleRelayEvent(e){if(!(e.relaySessionId!==this.session.relaySessionId||this.closed))switch(e.talkEvent&&this.ctx.callbacks.onTalkEvent?.(e.talkEvent),e.type){case`ready`:this.ctx.callbacks.onStatus?.(`listening`);return;case`audio`:e.audioBase64&&(this.cancelRequestedForPlayback=!1,this.speechFramesDuringPlayback=0,this.playPcm16(e.audioBase64));return;case`clear`:this.stopOutput();return;case`mark`:this.scheduleMarkAck();return;case`transcript`:e.role&&e.text&&this.ctx.callbacks.onTranscript?.({role:e.role,text:e.text,final:e.final??!1});return;case`toolCall`:this.handleToolCall(e);return;case`toolResult`:this.isFinalToolResult(e)&&this.completeToolCall(e.callId);return;case`error`:this.lastRelayError=e.message??v(`chat.realtimeRelayFailed`),this.ctx.callbacks.onStatus?.(`error`,this.lastRelayError);return;case`close`:this.abortConsults(),this.closed||(this.ctx.callbacks.onStatus?.(e.reason===`error`?`error`:`idle`,e.reason===`error`?this.lastRelayError??v(`chat.realtimeRelayClosed`):void 0),this.stopLocal());return;default:return}}playPcm16(e){this.outputQueue.play(e,this.outputContext,this.session.audio.outputSampleRateHz)}stopOutput(){this.outputQueue.stop(this.outputContext),this.speechFramesDuringPlayback=0}scheduleMarkAck(){let e=Math.max(0,Math.ceil(((this.outputQueue.queuedUntil||this.outputContext?.currentTime||0)-(this.outputContext?.currentTime??0))*1e3));window.setTimeout(()=>{this.closed},e)}async handleToolCall(e){let t=e.callId?.trim(),n=e.name?.trim();if(!t||!n)return;if(n===`fengming_agent_control`){await rU({ctx:this.ctx,callId:t,args:e.args??{},sessionId:this.session.relaySessionId,submit:(e,t)=>this.submitToolResult(e,t)});return}if(n!==`fengming_agent_consult`){this.submitToolResult(t,{error:`Tool "${n}" not available in browser Talk`});return}let r=new AbortController;this.consultAbortControllers.set(t,r);try{e.forced&&this.submitToolResult(t,{status:`working`,tool:PH,message:`Tell the person briefly that you are checking, then wait for the final FengMing result before answering with the actual result.`},{willContinue:!0}),await aU({ctx:this.ctx,callId:t,args:e.args??{},relaySessionId:this.session.relaySessionId,signal:r.signal,submit:(e,t)=>this.submitToolResult(e,t)})}finally{this.consultAbortControllers.delete(t)}}submitToolResult(e,t,n){this.completedToolCalls.has(e)||this.ctx.client.request(`talk.session.submitToolResult`,{sessionId:this.session.relaySessionId,callId:e,result:t,...n?{options:n}:{}})}completeToolCall(e){let t=e?.trim();t&&(this.completedToolCalls.add(t),this.consultAbortControllers.get(t)?.abort(),this.consultAbortControllers.delete(t))}isFinalToolResult(e){let t=e.talkEvent;return!(t?.type===`tool.progress`||t?.type===`tool.result`&&t.final===!1)}cancelOutputForBargeIn(){!this.outputQueue.isPlaying||this.cancelRequestedForPlayback||(this.cancelRequestedForPlayback=!0,this.stopOutput(),this.ctx.client.request(`talk.session.cancelOutput`,{sessionId:this.session.relaySessionId,reason:`barge-in`}))}abortConsults(){for(let e of this.consultAbortControllers.values())e.abort();this.consultAbortControllers.clear()}detectBargeInSpeech(e){if(!this.outputQueue.isPlaying||this.cancelRequestedForPlayback||e.length===0)return this.speechFramesDuringPlayback=0,!1;let t=0,n=0;for(let r of e)n=Math.max(n,Math.abs(r)),t+=r*r;return Math.sqrt(t/e.length)>=sU&&n>=cU?this.speechFramesDuringPlayback+=1:this.speechFramesDuringPlayback=0,this.speechFramesDuringPlayback>=lU}},dU=class{constructor(e,t){this.session=e,this.ctx=t,this.peer=null,this.channel=null,this.media=null,this.audio=null,this.closed=!1,this.responseActive=!1,this.responseCreateInFlight=!1,this.responseCreatePending=!1,this.toolBuffers=new Map,this.consultAbortControllers=new Set,this.emitTalkEvent=XH(t,e)}async start(){if(!navigator.mediaDevices?.getUserMedia||typeof RTCPeerConnection>`u`)throw Error(`实时通话需要浏览器 WebRTC 和麦克风访问`);this.closed=!1,this.peer=new RTCPeerConnection,this.audio=document.createElement(`audio`),this.audio.autoplay=!0,this.audio.style.display=`none`,document.body.append(this.audio),this.peer.addEventListener(`track`,e=>{this.audio&&(this.audio.srcObject=e.streams[0])}),this.media=await navigator.mediaDevices.getUserMedia({audio:!0});for(let e of this.media.getAudioTracks())this.peer.addTrack(e,this.media);this.channel=this.peer.createDataChannel(`oai-events`),this.channel.addEventListener(`open`,()=>{this.ctx.callbacks.onStatus?.(`listening`),this.emitTalkEvent({type:`session.ready`})}),this.channel.addEventListener(`message`,e=>this.handleRealtimeEvent(e.data)),this.peer.addEventListener(`connectionstatechange`,()=>{this.closed||(this.peer?.connectionState===`failed`||this.peer?.connectionState===`closed`)&&this.ctx.callbacks.onStatus?.(`error`,v(`chat.realtimeConnectionClosed`))});let e=await this.peer.createOffer();await this.peer.setLocalDescription(e);let t=await fetch(this.session.offerUrl??`https://api.openai.com/v1/realtime/calls`,{method:`POST`,body:e.sdp,headers:{...this.session.offerHeaders,Authorization:`Bearer ${this.session.clientSecret}`,"Content-Type":`application/sdp`}});if(!t.ok)throw Error(`Realtime WebRTC setup failed (${t.status})`);await this.peer.setRemoteDescription({type:`answer`,sdp:await t.text()})}stop(){this.closed||this.emitTalkEvent({type:`session.closed`,final:!0}),this.closed=!0,this.channel?.close(),this.channel=null,this.peer?.close(),this.peer=null,this.media?.getTracks().forEach(e=>e.stop()),this.media=null,this.audio?.remove(),this.audio=null;for(let e of this.consultAbortControllers)e.abort();this.consultAbortControllers.clear(),this.toolBuffers.clear(),this.responseActive=!1,this.responseCreateInFlight=!1,this.responseCreatePending=!1}send(e){this.channel?.readyState===`open`&&this.channel.send(JSON.stringify(e))}handleRealtimeEvent(e){if(this.closed)return;let t;try{t=JSON.parse(String(e))}catch{return}switch(t.type){case`conversation.item.input_audio_transcription.completed`:t.transcript&&(this.ctx.callbacks.onTranscript?.({role:`user`,text:t.transcript,final:!0}),this.emitTalkEvent({type:`transcript.done`,final:!0,itemId:t.item_id,payload:{role:`user`,text:t.transcript}}),this.consultAbortControllers.size>0&&GH(t.transcript)&&nU({ctx:this.ctx,text:t.transcript,emitTalkEvent:this.emitTalkEvent,onControlResult:e=>this.interruptSuppressedControlResponse(e),speakControlResult:e=>this.sendControlSpeechMessage(e),suppressSpeechForModes:[`cancel`]}));return;case`response.audio_transcript.done`:t.transcript&&(this.ctx.callbacks.onTranscript?.({role:`assistant`,text:t.transcript,final:!0}),this.emitTalkEvent({type:`output.text.done`,final:!0,itemId:t.item_id,payload:{text:t.transcript}}));return;case`response.function_call_arguments.delta`:this.bufferToolDelta(t);return;case`response.function_call_arguments.done`:this.handleToolCall(t);return;case`input_audio_buffer.speech_started`:this.ctx.callbacks.onStatus?.(`listening`,v(`chat.speechDetected`)),this.emitTalkEvent({type:`turn.started`,payload:{source:t.type}});return;case`input_audio_buffer.speech_stopped`:this.ctx.callbacks.onStatus?.(`thinking`,v(`chat.processingSpeech`)),this.emitTalkEvent({type:`input.audio.committed`,final:!0});return;case`response.created`:this.responseActive=!0,this.responseCreateInFlight=!1,this.ctx.callbacks.onStatus?.(`thinking`,v(`chat.generatingResponse`));return;case`response.cancelled`:case`response.done`:this.responseActive=!1,this.responseCreateInFlight=!1,this.ctx.callbacks.onStatus?.(`listening`,this.extractResponseStatus(t)),this.emitTalkEvent({type:`turn.ended`,final:!0,payload:{status:t.response?.status??(t.type===`response.cancelled`?`cancelled`:`completed`)}}),this.flushPendingResponseCreate();return;case`error`:this.responseCreateInFlight=!1,this.ctx.callbacks.onStatus?.(`error`,this.extractErrorDetail(t.error)),this.emitTalkEvent({type:`session.error`,final:!0,payload:{message:this.extractErrorDetail(t.error)}});return;default:return}}extractResponseStatus(e){let t=e.response?.status;return t&&t!==`completed`?`Response ${t}`:void 0}extractErrorDetail(e){if(!e||typeof e!=`object`)return v(`chat.realtimeProviderError`);let t=e,n=typeof t.message==`string`?t.message.trim():``,r=typeof t.code==`string`?t.code.trim():``,i=typeof t.type==`string`?t.type.trim():``;return n||r||i||v(`chat.realtimeProviderError`)}bufferToolDelta(e){let t=e.item_id??`unknown`,n=this.toolBuffers.get(t);if(n){n.args+=e.delta??``;return}this.toolBuffers.set(t,{name:e.name??``,callId:e.call_id??``,args:e.delta??``})}async handleToolCall(e){let t=e.item_id??`unknown`,n=this.toolBuffers.get(t);this.toolBuffers.delete(t);let r=n?.name||e.name||``,i=n?.callId||e.call_id||``;if(!i)return;if(r===`fengming_agent_control`){await rU({ctx:this.ctx,callId:i,args:n?.args||e.arguments||`{}`,emitTalkEvent:this.emitTalkEvent,submit:(e,t)=>this.submitToolResult(e,t)});return}if(r!==`fengming_agent_consult`)return;this.emitTalkEvent({type:`tool.call`,callId:i,itemId:t,payload:{name:r,args:n?.args||e.arguments||`{}`}});let a=new AbortController;this.consultAbortControllers.add(a);try{await aU({ctx:this.ctx,callId:i,args:n?.args||e.arguments||`{}`,signal:a.signal,emitTalkEvent:this.emitTalkEvent,submit:(e,t)=>this.submitToolResult(e,t)})}finally{this.consultAbortControllers.delete(a)}}submitToolResult(e,t){this.send({type:`conversation.item.create`,item:{type:`function_call_output`,call_id:e,output:JSON.stringify(t)}}),this.requestResponseCreate()}sendControlSpeechMessage(e){this.responseActive&&this.send({type:`response.cancel`}),this.send({type:`conversation.item.create`,item:{type:`message`,role:`user`,content:[{type:`input_text`,text:e}]}}),this.requestResponseCreate()}interruptSuppressedControlResponse(e){if(!this.responseActive||!e||typeof e!=`object`)return;let t=e;t.ok===!0&&(t.mode===`cancel`||t.suppress===!0&&t.mode!==`steer`)&&this.send({type:`response.cancel`})}requestResponseCreate(){if(this.responseActive||this.responseCreateInFlight){this.responseCreatePending=!0;return}this.responseCreatePending=!1,this.responseCreateInFlight=!0,this.send({type:`response.create`})}flushPendingResponseCreate(){this.responseCreatePending&&(this.responseCreatePending=!1,this.requestResponseCreate())}};function fU(e,t){let n=pU(e);if(n===`webrtc`)return new dU(e,t);if(n===`gateway-relay`)return new uU(e,t);if(n===`managed-room`)throw Error(`托管房间实时通话会话在此界面中尚不可用`);let r=e.transport??`unknown`;throw Error(`Unsupported realtime Talk transport: ${r}`)}function pU(e){return OH(e.transport)??`webrtc`}function mU(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}var hU=class{constructor(e,t,n={},r={}){this.client=e,this.sessionKey=t,this.callbacks=n,this.options=r,this.transport=null,this.closed=!1}async start(){this.closed=!1,this.callbacks.onStatus?.(`connecting`);let e=await this.createSession();this.closed||(this.transport=fU(e,{client:this.client,sessionKey:this.sessionKey,callbacks:this.callbacks,consultThinkingLevel:e.consultThinkingLevel,consultFastMode:e.consultFastMode}),await this.transport.start())}async createSession(){try{return await this.client.request(`talk.client.create`,mU({sessionKey:this.sessionKey,...this.options}))}catch(e){if(this.options.transport&&this.options.transport!==`gateway-relay`)throw e;try{return await this.client.request(`talk.session.create`,mU({sessionKey:this.sessionKey,...this.options,mode:`realtime`,transport:this.options.transport??`gateway-relay`,brain:`agent-consult`}))}catch{throw e}}}stop(){this.closed=!0,this.callbacks.onStatus?.(`idle`),this.transport?.stop(),this.transport=null}},gU=Yi({}),_U=Ao();function vU(){if(!window.location.search)return!1;let e=new URLSearchParams(window.location.search).get(`onboarding`);if(!e)return!1;let t=e.trim().toLowerCase();return t===`1`||t===`true`||t===`yes`||t===`on`}var $=class extends r{constructor(){super(),this.i18nController=new y(this),this.clientInstanceId=yt(),this.connectGeneration=0,this.settings=Oo(),this.password=``,this.loginShowGatewayToken=!1,this.loginShowGatewayPassword=!1,this.tab=`chat`,this.onboarding=vU(),this.connected=!1,this.theme=this.settings.theme??`claw`,this.themeMode=this.settings.themeMode??`system`,this.themeResolved=`dark`,this.themeOrder=this.buildThemeOrder(this.theme),this.customThemeImportUrl=``,this.customThemeImportBusy=!1,this.customThemeImportMessage=null,this.customThemeImportExpanded=!1,this.customThemeImportFocusToken=0,this.customThemeImportSelectOnSuccess=!1,this.hello=null,this.lastError=null,this.lastErrorCode=null,this.eventLog=[],this.eventLogBuffer=[],this.toolStreamSyncTimer=null,this.sidebarCloseTimer=null,this.assistantName=gU.name,this.assistantAvatar=gU.avatar,this.assistantAvatarSource=gU.avatarSource??null,this.assistantAvatarStatus=gU.avatarStatus??null,this.assistantAvatarReason=gU.avatarReason??null,this.assistantAvatarUploadBusy=!1,this.assistantAvatarUploadError=null,this.assistantAgentId=gU.agentId??null,this.userName=_U.name,this.userAvatar=_U.avatar,this.localMediaPreviewRoots=[],this.embedSandboxMode=`scripts`,this.allowExternalEmbedUrls=!1,this.chatMessageMaxWidth=null,this.serverVersion=null,this.sessionKey=this.settings.sessionKey,this.chatSessionMessageSubscriptionKey=null,this.chatSessionMessageSubscriptionRequestedKey=null,this.currentSessionId=null,this.chatLoading=!1,this.chatSending=!1,this.chatMessage=``,this.chatMessages=[],this.chatToolMessages=[],this.activityEntries=[],this.activityFilterText=``,this.activityStatusFilters={running:!0,done:!0,error:!0},this.activityToolFilter=``,this.activityExpandedIds=new Set,this.activityAutoFollow=!0,this.activityAtBottom=!0,this.chatStreamSegments=[],this.chatStream=null,this.chatStreamStartedAt=null,this.chatRunId=null,this.chatSideResult=null,this.compactionStatus=null,this.fallbackStatus=null,this.chatRunStatus=null,this.chatRunStatusClearTimer=null,this.chatAvatarUrl=null,this.chatAvatarSource=null,this.chatAvatarStatus=null,this.chatAvatarReason=null,this.chatThinkingLevel=null,this.chatModelOverrides={},this.chatModelSwitchPromises={},this.chatModelsLoading=!1,this.chatModelCatalog=[],this.sessionSwitchNotice=null,this.sessionSwitchFlashKey=null,this.chatSessionPickerOpen=!1,this.chatSessionPickerSurface=null,this.chatSessionPickerQuery=``,this.chatSessionPickerAppliedQuery=``,this.chatSessionPickerLoading=!1,this.chatSessionPickerError=null,this.chatSessionPickerResult=null,this.sessionSwitchNoticeSeq=0,this.sessionSwitchNoticeTimer=null,this.sessionSwitchFlashTimer=null,this.chatQueue=[],this.chatQueueBySession={},this.chatAttachments=[],this.realtimeTalkActive=!1,this.realtimeTalkStatus=`idle`,this.realtimeTalkDetail=null,this.realtimeTalkTranscript=null,this.realtimeTalkConversation=[],this.realtimeTalkOptionsOpen=!1,this.realtimeTalkOptions={provider:``,model:``,voice:``,transport:``,vadThreshold:``,silenceDurationMs:``,prefixPaddingMs:``,reasoningEffort:``},this.realtimeTalkSession=null,this.realtimeTalkConversationState=hH(),this.nativeBridgeCleanup=null,this.chatManualRefreshInFlight=!1,this.chatHeaderControlsHidden=!1,this.chatMobileControlsOpen=!1,this.chatMobileControlsTrigger=null,this.navDrawerOpen=!1,this.chatLocalInputHistoryBySession={},this.chatInputHistorySessionKey=null,this.chatInputHistoryItems=null,this.chatInputHistoryIndex=-1,this.chatDraftBeforeHistory=null,this.sidebarOpen=!1,this.sidebarContent=null,this.sidebarError=null,this.splitRatio=this.settings.splitRatio,this.nodesLoading=!1,this.nodes=[],this.devicesLoading=!1,this.devicesError=null,this.devicesList=null,this.execApprovalsLoading=!1,this.execApprovalsSaving=!1,this.execApprovalsDirty=!1,this.execApprovalsSnapshot=null,this.execApprovalsForm=null,this.execApprovalsSelectedAgent=null,this.execApprovalsTarget=`gateway`,this.execApprovalsTargetNodeId=null,this.execApprovalQueue=[],this.execApprovalBusy=!1,this.execApprovalError=null,this.pendingGatewayUrl=null,this.pendingGatewayToken=null,this.configLoading=!1,this.configRaw=`{
7189
7199
  }
7190
- `,this.configRawOriginal=``,this.configValid=null,this.configIssues=[],this.configSaving=!1,this.configApplying=!1,this.updateRunning=!1,this.applySessionKey=this.settings.lastActiveSessionKey,this.configSnapshot=null,this.configSchema=null,this.configSchemaVersion=null,this.configSchemaLoading=!1,this.configUiHints={},this.configForm=null,this.configFormOriginal=null,this.dreamingStatusLoading=!1,this.dreamingStatusError=null,this.dreamingStatus=null,this.dreamingModeSaving=!1,this.dreamingRestartConfirmOpen=!1,this.dreamingRestartConfirmLoading=!1,this.dreamingPendingEnabled=null,this.dreamDiaryLoading=!1,this.dreamDiaryActionLoading=!1,this.dreamDiaryActionMessage=null,this.dreamDiaryActionArchivePath=null,this.dreamDiaryError=null,this.dreamDiaryPath=null,this.dreamDiaryContent=null,this.wikiImportInsightsLoading=!1,this.wikiImportInsightsError=null,this.wikiImportInsights=null,this.wikiMemoryPalaceLoading=!1,this.wikiMemoryPalaceError=null,this.wikiMemoryPalace=null,this.configFormDirty=!1,this.configSettingsMode=`quick`,this.configFormMode=`form`,this.configSearchQuery=``,this.configActiveSection=null,this.configActiveSubsection=null,this.pendingUpdateExpectedVersion=null,this.updateStatusBanner=null,this.communicationsFormMode=`form`,this.communicationsSearchQuery=``,this.communicationsActiveSection=null,this.communicationsActiveSubsection=null,this.appearanceFormMode=`form`,this.appearanceSearchQuery=``,this.appearanceActiveSection=null,this.appearanceActiveSubsection=null,this.automationFormMode=`form`,this.automationSearchQuery=``,this.automationActiveSection=null,this.automationActiveSubsection=null,this.infrastructureFormMode=`form`,this.infrastructureSearchQuery=``,this.infrastructureActiveSection=null,this.infrastructureActiveSubsection=null,this.aiAgentsFormMode=`form`,this.aiAgentsSearchQuery=``,this.aiAgentsActiveSection=null,this.aiAgentsActiveSubsection=null,this.channelsLoading=!1,this.channelsSnapshot=null,this.channelsError=null,this.channelsLastSuccess=null,this.presenceLoading=!1,this.presenceEntries=[],this.presenceError=null,this.presenceStatus=null,this.agentsLoading=!1,this.agentsList=null,this.agentsError=null,this.agentsSelectedId=null,this.toolsCatalogLoading=!1,this.toolsCatalogError=null,this.toolsCatalogResult=null,this.toolsEffectiveLoading=!1,this.toolsEffectiveLoadingKey=null,this.toolsEffectiveResultKey=null,this.toolsEffectiveError=null,this.toolsEffectiveResult=null,this.agentsPanel=`files`,this.agentFilesLoading=!1,this.agentFilesError=null,this.agentFilesList=null,this.agentFileContents={},this.agentFileDrafts={},this.agentFileActive=null,this.agentFileSaving=!1,this.agentIdentityLoading=!1,this.agentIdentityError=null,this.agentIdentityById={},this.agentSkillsLoading=!1,this.agentSkillsError=null,this.agentSkillsReport=null,this.agentSkillsAgentId=null,this.sessionsLoading=!1,this.sessionsResult=null,this.sessionsError=null,this.sessionsFilterActive=mg.activeMinutes,this.sessionsFilterLimit=mg.limit,this.sessionsIncludeGlobal=!0,this.sessionsIncludeUnknown=!1,this.sessionsShowArchived=!1,this.sessionsFiltersCollapsed=!1,this.sessionsHideCron=!0,this.sessionsSearchQuery=``,this.sessionsSortColumn=`updated`,this.sessionsSortDir=`desc`,this.sessionsPage=0,this.sessionsPageSize=25,this.sessionsSelectedKeys=new Set,this.sessionsExpandedCheckpointKey=null,this.sessionsCheckpointItemsByKey={},this.sessionsCheckpointLoadingKey=null,this.sessionsCheckpointBusyKey=null,this.sessionsCheckpointErrorByKey={},this.usageLoading=!1,this.usageResult=null,this.usageCostSummary=null,this.usageError=null,this.usageStartDate=(()=>{let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`})(),this.usageEndDate=(()=>{let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`})(),this.usageScope=`family`,this.usageAgentId=null,this.usageSelectedSessions=[],this.usageSelectedDays=[],this.usageSelectedHours=[],this.usageChartMode=`tokens`,this.usageDailyChartMode=`by-type`,this.usageTimeSeriesMode=`per-turn`,this.usageTimeSeriesBreakdownMode=`by-type`,this.usageTimeSeries=null,this.usageTimeSeriesLoading=!1,this.usageTimeSeriesCursorStart=null,this.usageTimeSeriesCursorEnd=null,this.usageSessionLogs=null,this.usageSessionLogsLoading=!1,this.usageSessionLogsExpanded=!1,this.usageQuery=``,this.usageQueryDraft=``,this.usageSessionSort=`recent`,this.usageSessionSortDir=`desc`,this.usageRecentSessions=[],this.usageTimeZone=`local`,this.usageContextExpanded=!1,this.usageHeaderPinned=!1,this.usageSessionsTab=`all`,this.usageVisibleColumns=[`channel`,`agent`,`provider`,`model`,`messages`,`tools`,`errors`,`duration`],this.usageLogFilterRoles=[],this.usageLogFilterTools=[],this.usageLogFilterHasTools=!1,this.usageLogFilterQuery=``,this.usageQueryDebounceTimer=null,this.cronLoading=!1,this.cronQuickCreateOpen=!1,this.cronQuickCreateStep=`what`,this.cronQuickCreateDraft=null,this.cronJobsLoadingMore=!1,this.cronJobsReloadPending=!1,this.cronJobsReloadPendingTableFilters=!1,this.cronJobs=[],this.cronJobsTotal=0,this.cronJobsHasMore=!1,this.cronJobsNextOffset=null,this.cronJobsLimit=50,this.cronJobsQuery=``,this.cronJobsEnabledFilter=`all`,this.cronJobsScheduleKindFilter=`all`,this.cronJobsLastStatusFilter=`all`,this.cronJobsSortBy=`nextRunAtMs`,this.cronJobsSortDir=`asc`,this.cronStatus=null,this.cronError=null,this.cronForm={...hg},this.cronFormCollapsed=!0,this.cronFieldErrors={},this.cronEditingJobId=null,this.cronRunsJobId=null,this.cronRunsLoadingMore=!1,this.cronRuns=[],this.cronRunsTotal=0,this.cronRunsHasMore=!1,this.cronRunsNextOffset=null,this.cronRunsLimit=50,this.cronRunsScope=`all`,this.cronRunsStatuses=[],this.cronRunsDeliveryStatuses=[],this.cronRunsStatusFilter=`all`,this.cronRunsQuery=``,this.cronRunsSortDir=`desc`,this.cronModelSuggestions=[],this.cronBusy=!1,this.updateAvailable=null,this.attentionItems=[],this.paletteOpen=!1,this.paletteQuery=``,this.paletteActiveIndex=0,this.overviewShowGatewayToken=!1,this.overviewShowGatewayPassword=!1,this.overviewLogLines=[],this.overviewLogCursor=0,this.skillsLoading=!1,this.skillsReport=null,this.skillsError=null,this.skillsFilter=``,this.skillsStatusFilter=`all`,this.skillEdits={},this.skillsBusyKey=null,this.skillMessages={},this.skillsDetailKey=null,this.skillsDetailTab=`overview`,this.clawhubSearchQuery=``,this.clawhubSearchResults=null,this.clawhubSearchLoading=!1,this.clawhubSearchError=null,this.clawhubDetail=null,this.clawhubDetailSlug=null,this.clawhubDetailLoading=!1,this.clawhubDetailError=null,this.clawhubInstallSlug=null,this.clawhubInstallMessage=null,this.clawhubVerdicts={},this.clawhubVerdictsLoading=!1,this.clawhubVerdictsError=null,this.skillCardContents={},this.skillCardContentKeys={},this.skillCardLoadingKey=null,this.skillCardErrors={},this.healthLoading=!1,this.healthResult=null,this.healthError=null,this.modelAuthStatusLoading=!1,this.modelAuthStatusResult=null,this.modelAuthStatusError=null,this.debugLoading=!1,this.debugStatus=null,this.debugHealth=null,this.debugModels=[],this.debugHeartbeat=null,this.debugCallMethod=``,this.debugCallParams=`{}`,this.debugCallResult=null,this.debugCallError=null,this.webPushSupported=!1,this.webPushPermission=`unsupported`,this.webPushSubscribed=!1,this.webPushLoading=!1,this.logsLoading=!1,this.logsError=null,this.logsFile=null,this.logsEntries=[],this.logsFilterText=``,this.logsLevelFilters={...pg},this.logsAutoFollow=!0,this.logsTruncated=!1,this.logsCursor=null,this.logsLastFetchAt=null,this.logsLimit=500,this.logsMaxBytes=25e4,this.logsAtBottom=!0,this.client=null,this.chatScrollFrame=null,this.chatScrollTimeout=null,this.chatLastScrollTop=0,this.chatHasAutoScrolled=!1,this.chatUserNearBottom=!0,this.chatIsProgrammaticScroll=!1,this.chatProgrammaticScrollTarget=0,this.chatNewMessagesBelow=!1,this.nodesPollInterval=null,this.logsPollInterval=null,this.debugPollInterval=null,this.sessionsChangedReloadTimer=null,this.logsScrollFrame=null,this.activityScrollFrame=null,this.controlUiResponsivenessObserver=null,this.toolStreamById=new Map,this.toolStreamOrder=[],this.refreshSessionsAfterChat=new Set,this.chatSideResultTerminalRuns=new Set,this.basePath=``,this.popStateHandler=()=>SA(this),this.topbarObserver=null,this.globalKeydownHandler=e=>{(e.metaKey||e.ctrlKey)&&!e.shiftKey&&e.key===`k`&&(e.preventDefault(),this.paletteOpen=!this.paletteOpen,this.paletteOpen&&(this.paletteQuery=``,this.paletteActiveIndex=0))},this.chatMobileControlsKeydownHandler=e=>{if(e.key===`Escape`){if(this.chatSessionPickerOpen){e.preventDefault(),this.chatSessionPickerOpen=!1,this.chatSessionPickerSurface=null;return}this.chatMobileControlsOpen&&(e.preventDefault(),this.setChatMobileControlsOpen(!1,{restoreFocus:!0}))}},this.chatMobileControlsPointerdownHandler=e=>{let t=e.composedPath();if(this.chatSessionPickerOpen&&(Array.from(this.querySelectorAll(`.chat-controls__session-picker`)).some(e=>t.includes(e))||(this.chatSessionPickerOpen=!1,this.chatSessionPickerSurface=null)),!this.chatMobileControlsOpen)return;let n=this.querySelector(`.chat-mobile-controls-wrapper`);n&&t.includes(n)||this.setChatMobileControlsOpen(!1)},h(this.settings.locale)&&_.setLocale(this.settings.locale)}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this.onSlashAction=async e=>{switch(e){case`new-session`:await lP(this);break;case`toggle-focus`:this.applySettings({...this.settings,chatFocusMode:!this.settings.chatFocusMode});break;case`export`:FE(this.chatMessages,this.assistantName);break;case`refresh-tools-effective`:await A_(this);break}},document.addEventListener(`keydown`,this.globalKeydownHandler),document.addEventListener(`keydown`,this.chatMobileControlsKeydownHandler),document.addEventListener(`pointerdown`,this.chatMobileControlsPointerdownHandler),dM(this),this.nativeBridgeCleanup=xM(this),this.initWebPushState()}firstUpdated(){fM(this)}disconnectedCallback(){document.removeEventListener(`keydown`,this.globalKeydownHandler),this.nativeBridgeCleanup?.(),this.nativeBridgeCleanup=null,document.removeEventListener(`keydown`,this.chatMobileControlsKeydownHandler),document.removeEventListener(`pointerdown`,this.chatMobileControlsPointerdownHandler),this.sessionSwitchNoticeTimer!==null&&(window.clearTimeout(this.sessionSwitchNoticeTimer),this.sessionSwitchNoticeTimer=null),this.sessionSwitchFlashTimer!==null&&(window.clearTimeout(this.sessionSwitchFlashTimer),this.sessionSwitchFlashTimer=null),this.chatMobileControlsTrigger=null,gM(this),super.disconnectedCallback()}updated(e){if(_M(this,e),e.has(`tab`)&&this.tab!==`chat`&&this.chatMobileControlsOpen&&this.setChatMobileControlsOpen(!1),!e.has(`sessionKey`)||this.agentsPanel!==`tools`)return;let t=Xc(this.sessionKey);if(this.agentsSelectedId&&this.agentsSelectedId===t){D_(this,{agentId:this.agentsSelectedId,sessionKey:this.sessionKey});return}this.toolsEffectiveResult=null,this.toolsEffectiveResultKey=null,this.toolsEffectiveError=null,this.toolsEffectiveLoading=!1,this.toolsEffectiveLoadingKey=null}connect(){tM(this)}handleChatScroll(e){Ho(this,e)}handleLogsScroll(e){Uo(this,e)}handleActivityScroll(e){Wo(this,e)}scheduleActivityScroll(e=!1){Vo(this,e)}exportLogs(e,t){Ko(e,t)}resetToolStream(){wl(this)}resetChatScroll(){Go(this)}scrollToBottom(e){Go(this),zo(this,!0,!!e?.smooth,{source:`manual`})}async loadAssistantIdentity(){await WA(this)}applySettings(e){eA(this,e)}applyLocalUserIdentity(e){tA(this,e)}setTab(e){oA(this,e),e!==`chat`&&this.setChatMobileControlsOpen(!1),this.navDrawerOpen=!1}setChatMobileControlsOpen(e,t){if(e){this.chatMobileControlsTrigger=t?.trigger??this.chatMobileControlsTrigger,this.chatMobileControlsOpen=!0;return}let n=t?.restoreFocus?this.chatMobileControlsTrigger:null;this.chatMobileControlsOpen=!1,this.chatSessionPickerSurface===`mobile`&&(this.chatSessionPickerOpen=!1,this.chatSessionPickerSurface=null),this.chatMobileControlsTrigger=null,!(!(n instanceof HTMLElement)||!n.isConnected)&&requestAnimationFrame(()=>{n.isConnected&&n.focus()})}setTheme(e,t){cA(this,e,t),this.themeOrder=this.buildThemeOrder(e)}setThemeMode(e,t){lA(this,e,t)}setCustomThemeImportUrl(e){this.customThemeImportUrl=e,this.customThemeImportMessage?.kind===`error`&&(this.customThemeImportMessage=null)}openCustomThemeImport(){this.customThemeImportExpanded=!0,this.customThemeImportFocusToken+=1,this.settings.customTheme||(this.customThemeImportSelectOnSuccess=!0)}async importCustomTheme(){if(!this.customThemeImportBusy){this.customThemeImportExpanded=!0,this.customThemeImportBusy=!0,this.customThemeImportMessage=null;try{let e=await ii(this.customThemeImportUrl),t=this.theme===`custom`||!this.settings.customTheme||this.customThemeImportSelectOnSuccess;eA(this,{...this.settings,theme:t?`custom`:this.settings.theme,customTheme:e}),this.themeOrder=this.buildThemeOrder(t?`custom`:this.theme),this.customThemeImportUrl=``,this.customThemeImportSelectOnSuccess=!1,this.customThemeImportMessage={kind:`success`,text:`Imported ${e.label}.`}}catch(e){this.customThemeImportMessage={kind:`error`,text:e instanceof Error?e.message:v(`settings.quick.importThemeFailed`)}}finally{this.customThemeImportBusy=!1}}}clearCustomTheme(){let e=this.theme===`custom`?`claw`:this.theme;this.customThemeImportExpanded=!0,this.customThemeImportSelectOnSuccess=!1,eA(this,{...this.settings,theme:e,customTheme:void 0}),this.themeOrder=this.buildThemeOrder(e),this.customThemeImportMessage={kind:`success`,text:v(`settings.quick.clearedTheme`)}}setBorderRadius(e){eA(this,{...this.settings,borderRadius:e}),this.requestUpdate()}setTextScale(e){eA(this,{...this.settings,textScale:e}),this.requestUpdate()}announceSessionSwitch(e,t){let n=++this.sessionSwitchNoticeSeq;this.sessionSwitchNoticeTimer!==null&&window.clearTimeout(this.sessionSwitchNoticeTimer),this.sessionSwitchFlashTimer!==null&&window.clearTimeout(this.sessionSwitchFlashTimer),this.sessionSwitchNotice={id:n,text:v(`chat.switchedSession`,{session:t})},this.sessionSwitchFlashKey=e,this.sessionSwitchFlashTimer=window.setTimeout(()=>{this.sessionSwitchNotice?.id===n&&(this.sessionSwitchFlashKey=null),this.sessionSwitchFlashTimer=null},200),this.sessionSwitchNoticeTimer=window.setTimeout(()=>{this.sessionSwitchNotice?.id===n&&(this.sessionSwitchNotice=null),this.sessionSwitchNoticeTimer=null},2800)}buildThemeOrder(e){return[e,...[...xi].filter(t=>t!==e)]}async loadOverview(e){await kA(this,e)}async loadCron(){await IA(this)}async handleAbortChat(e){await mh(this,e)}handleChatDraftChange(e){Wu(this,e)}handleChatInputHistoryKey(e){return Ju(this,e)}resetChatInputHistoryNavigation(){Uu(this)}removeQueuedMessage(e){Rh(this,e)}async retryQueuedChatMessage(e){await Wh(this,e)}async handleSendChat(e,t){await Gh(this,e,t)}updateRealtimeTalkOptions(e){this.realtimeTalkOptions={...this.realtimeTalkOptions,...e}}buildRealtimeTalkLaunchOptions(){let e=this.realtimeTalkOptions??{provider:``,model:``,voice:``,transport:``,vadThreshold:``,silenceDurationMs:``,prefixPaddingMs:``,reasoningEffort:``},t=e=>e.trim()||void 0,n=e=>{let t=e.trim();if(!t)return;let n=Number(t);return Number.isFinite(n)?n:void 0},r=t(e.transport);return{provider:t(e.provider),model:t(e.model),voice:t(e.voice),transport:r,vadThreshold:n(e.vadThreshold),silenceDurationMs:n(e.silenceDurationMs),prefixPaddingMs:n(e.prefixPaddingMs),reasoningEffort:t(e.reasoningEffort)}}async toggleRealtimeTalk(){if(this.realtimeTalkSession)if(this.realtimeTalkStatus===`error`)this.realtimeTalkSession.stop(),this.realtimeTalkSession=null;else{this.realtimeTalkSession.stop(),this.realtimeTalkSession=null,this.realtimeTalkActive=!1,this.realtimeTalkStatus=`idle`,this.realtimeTalkDetail=null,this.realtimeTalkTranscript=null,this.resetRealtimeTalkConversation();return}if(!this.client||!this.connected){this.lastError=v(`chat.gatewayNotConnected`);return}this.realtimeTalkActive=!0,this.realtimeTalkStatus=`connecting`,this.realtimeTalkDetail=null,this.realtimeTalkTranscript=null,this.resetRealtimeTalkConversation();let e=new hU(this.client,this.sessionKey,{onStatus:(e,t)=>{this.realtimeTalkStatus=e,this.realtimeTalkDetail=t??null,(e===`idle`||e===`error`)&&(this.realtimeTalkActive=e!==`idle`)},onTranscript:e=>{this.realtimeTalkTranscript=`${e.role===`user`?`You`:`FengMing`}: ${e.text}`,this.realtimeTalkConversationState=gH(this.realtimeTalkConversationState,e),this.realtimeTalkConversation=this.realtimeTalkConversationState.entries}},this.buildRealtimeTalkLaunchOptions());this.realtimeTalkSession=e;try{await e.start()}catch(t){e.stop(),this.realtimeTalkSession===e&&(this.realtimeTalkSession=null),this.realtimeTalkActive=!1,this.realtimeTalkStatus=`error`,this.realtimeTalkDetail=t instanceof Error?t.message:String(t),this.lastError=this.realtimeTalkDetail}}resetRealtimeTalkConversation(){this.realtimeTalkConversationState=hH(),this.realtimeTalkConversation=[]}async steerQueuedChatMessage(e){await Ih(this,e)}async handleChannelConfigSave(){await gr(this)}async handleChannelConfigReload(){await _r(this)}async handleExecApprovalDecision(e){let t=this.execApprovalQueue[0];if(!(!t||!this.client||this.execApprovalBusy)){this.execApprovalBusy=!0,this.execApprovalError=null;try{let n=t.kind===`plugin`?`plugin.approval.resolve`:`exec.approval.resolve`;await this.client.request(n,{id:t.id,decision:e}),yj(this,t.id)}catch(e){if(uj(e)){yj(this,t.id),await vj(this);return}if(!this.execApprovalQueue.some(e=>e.id===t.id))return;this.execApprovalError=`Approval failed: ${String(e)}`}finally{this.execApprovalBusy=!1}}}handleGatewayUrlConfirm(){let e=this.pendingGatewayUrl;if(!e)return;let t=this.pendingGatewayToken?.trim()||``;this.pendingGatewayUrl=null,this.pendingGatewayToken=null,eA(this,{...this.settings,gatewayUrl:e,token:t}),this.connect()}handleGatewayUrlCancel(){this.pendingGatewayUrl=null,this.pendingGatewayToken=null}handleOpenSidebar(e){this.sidebarCloseTimer!=null&&(window.clearTimeout(this.sidebarCloseTimer),this.sidebarCloseTimer=null),this.sidebarContent=e,this.sidebarError=null,this.sidebarOpen=!0}handleCloseSidebar(){this.sidebarOpen=!1,this.sidebarCloseTimer!=null&&window.clearTimeout(this.sidebarCloseTimer),this.sidebarCloseTimer=window.setTimeout(()=>{this.sidebarOpen||(this.sidebarContent=null,this.sidebarError=null,this.sidebarCloseTimer=null)},200)}handleSplitRatioChange(e){let t=Math.max(.4,Math.min(.7,e));this.splitRatio=t,this.applySettings({...this.settings,splitRatio:t})}async initWebPushState(){let e=`serviceWorker`in navigator&&`PushManager`in window&&`Notification`in window;if(this.webPushSupported=e,this.webPushPermission=e?Notification.permission:`unsupported`,e)try{let{getExistingSubscription:e}=await hV(async()=>{let{getExistingSubscription:e}=await import(`./push-subscription-D0l8kKQw.js`);return{getExistingSubscription:e}},__vite__mapDeps([18,5]),import.meta.url),t=await e();this.webPushSubscribed=t!==null}catch{}}async reconcileWebPushState(){if(this.client)try{let{getExistingSubscription:e}=await hV(async()=>{let{getExistingSubscription:e}=await import(`./push-subscription-D0l8kKQw.js`);return{getExistingSubscription:e}},__vite__mapDeps([18,5]),import.meta.url),t=await e();if(!t)return;this.webPushSubscribed=!0;let n=t.toJSON();n.endpoint&&n.keys?.p256dh&&n.keys?.auth&&await this.client.request(`push.web.subscribe`,{endpoint:n.endpoint,keys:{p256dh:n.keys.p256dh,auth:n.keys.auth}})}catch{}}async handleWebPushSubscribe(){if(!(!this.client||this.webPushLoading)){this.webPushLoading=!0;try{let{subscribeToWebPush:e}=await hV(async()=>{let{subscribeToWebPush:e}=await import(`./push-subscription-D0l8kKQw.js`);return{subscribeToWebPush:e}},__vite__mapDeps([18,5]),import.meta.url);await e(this.client),this.webPushSubscribed=!0,this.webPushPermission=Notification.permission}catch(e){this.lastError=String(e)}finally{this.webPushLoading=!1,`Notification`in window&&(this.webPushPermission=Notification.permission)}}}async handleWebPushUnsubscribe(){if(!(!this.client||this.webPushLoading)){this.webPushLoading=!0;try{let{unsubscribeFromWebPush:e}=await hV(async()=>{let{unsubscribeFromWebPush:e}=await import(`./push-subscription-D0l8kKQw.js`);return{unsubscribeFromWebPush:e}},__vite__mapDeps([18,5]),import.meta.url);await e(this.client),this.webPushSubscribed=!1}catch(e){this.lastError=String(e)}finally{this.webPushLoading=!1}}}async handleWebPushTest(){if(this.client)try{let{sendTestWebPush:e}=await hV(async()=>{let{sendTestWebPush:e}=await import(`./push-subscription-D0l8kKQw.js`);return{sendTestWebPush:e}},__vite__mapDeps([18,5]),import.meta.url);await e(this.client)}catch(e){this.lastError=String(e)}}render(){return pH(this)}};if(J([s()],$.prototype,`settings`,void 0),J([s()],$.prototype,`password`,void 0),J([s()],$.prototype,`loginShowGatewayToken`,void 0),J([s()],$.prototype,`loginShowGatewayPassword`,void 0),J([s()],$.prototype,`tab`,void 0),J([s()],$.prototype,`onboarding`,void 0),J([s()],$.prototype,`connected`,void 0),J([s()],$.prototype,`theme`,void 0),J([s()],$.prototype,`themeMode`,void 0),J([s()],$.prototype,`themeResolved`,void 0),J([s()],$.prototype,`themeOrder`,void 0),J([s()],$.prototype,`customThemeImportUrl`,void 0),J([s()],$.prototype,`customThemeImportBusy`,void 0),J([s()],$.prototype,`customThemeImportMessage`,void 0),J([s()],$.prototype,`customThemeImportExpanded`,void 0),J([s()],$.prototype,`customThemeImportFocusToken`,void 0),J([s()],$.prototype,`hello`,void 0),J([s()],$.prototype,`lastError`,void 0),J([s()],$.prototype,`lastErrorCode`,void 0),J([s()],$.prototype,`eventLog`,void 0),J([s()],$.prototype,`assistantName`,void 0),J([s()],$.prototype,`assistantAvatar`,void 0),J([s()],$.prototype,`assistantAvatarSource`,void 0),J([s()],$.prototype,`assistantAvatarStatus`,void 0),J([s()],$.prototype,`assistantAvatarReason`,void 0),J([s()],$.prototype,`assistantAvatarUploadBusy`,void 0),J([s()],$.prototype,`assistantAvatarUploadError`,void 0),J([s()],$.prototype,`assistantAgentId`,void 0),J([s()],$.prototype,`userName`,void 0),J([s()],$.prototype,`userAvatar`,void 0),J([s()],$.prototype,`localMediaPreviewRoots`,void 0),J([s()],$.prototype,`embedSandboxMode`,void 0),J([s()],$.prototype,`allowExternalEmbedUrls`,void 0),J([s()],$.prototype,`chatMessageMaxWidth`,void 0),J([s()],$.prototype,`serverVersion`,void 0),J([s()],$.prototype,`sessionKey`,void 0),J([s()],$.prototype,`chatLoading`,void 0),J([s()],$.prototype,`chatSending`,void 0),J([s()],$.prototype,`chatMessage`,void 0),J([s()],$.prototype,`chatMessages`,void 0),J([s()],$.prototype,`chatToolMessages`,void 0),J([s()],$.prototype,`activityEntries`,void 0),J([s()],$.prototype,`activityFilterText`,void 0),J([s()],$.prototype,`activityStatusFilters`,void 0),J([s()],$.prototype,`activityToolFilter`,void 0),J([s()],$.prototype,`activityExpandedIds`,void 0),J([s()],$.prototype,`activityAutoFollow`,void 0),J([s()],$.prototype,`activityAtBottom`,void 0),J([s()],$.prototype,`chatStreamSegments`,void 0),J([s()],$.prototype,`chatStream`,void 0),J([s()],$.prototype,`chatStreamStartedAt`,void 0),J([s()],$.prototype,`chatRunId`,void 0),J([s()],$.prototype,`chatSideResult`,void 0),J([s()],$.prototype,`compactionStatus`,void 0),J([s()],$.prototype,`fallbackStatus`,void 0),J([s()],$.prototype,`chatRunStatus`,void 0),J([s()],$.prototype,`chatAvatarUrl`,void 0),J([s()],$.prototype,`chatAvatarSource`,void 0),J([s()],$.prototype,`chatAvatarStatus`,void 0),J([s()],$.prototype,`chatAvatarReason`,void 0),J([s()],$.prototype,`chatThinkingLevel`,void 0),J([s()],$.prototype,`chatModelOverrides`,void 0),J([s()],$.prototype,`chatModelSwitchPromises`,void 0),J([s()],$.prototype,`chatModelsLoading`,void 0),J([s()],$.prototype,`chatModelCatalog`,void 0),J([s()],$.prototype,`sessionSwitchNotice`,void 0),J([s()],$.prototype,`sessionSwitchFlashKey`,void 0),J([s()],$.prototype,`chatSessionPickerOpen`,void 0),J([s()],$.prototype,`chatSessionPickerSurface`,void 0),J([s()],$.prototype,`chatSessionPickerQuery`,void 0),J([s()],$.prototype,`chatSessionPickerAppliedQuery`,void 0),J([s()],$.prototype,`chatSessionPickerLoading`,void 0),J([s()],$.prototype,`chatSessionPickerError`,void 0),J([s()],$.prototype,`chatSessionPickerResult`,void 0),J([s()],$.prototype,`chatQueue`,void 0),J([s()],$.prototype,`chatQueueBySession`,void 0),J([s()],$.prototype,`chatAttachments`,void 0),J([s()],$.prototype,`realtimeTalkActive`,void 0),J([s()],$.prototype,`realtimeTalkStatus`,void 0),J([s()],$.prototype,`realtimeTalkDetail`,void 0),J([s()],$.prototype,`realtimeTalkTranscript`,void 0),J([s()],$.prototype,`realtimeTalkConversation`,void 0),J([s()],$.prototype,`realtimeTalkOptionsOpen`,void 0),J([s()],$.prototype,`realtimeTalkOptions`,void 0),J([s()],$.prototype,`chatManualRefreshInFlight`,void 0),J([s()],$.prototype,`chatHeaderControlsHidden`,void 0),J([s()],$.prototype,`chatMobileControlsOpen`,void 0),J([s()],$.prototype,`navDrawerOpen`,void 0),J([s()],$.prototype,`chatInputHistoryIndex`,void 0),J([s()],$.prototype,`sidebarOpen`,void 0),J([s()],$.prototype,`sidebarContent`,void 0),J([s()],$.prototype,`sidebarError`,void 0),J([s()],$.prototype,`splitRatio`,void 0),J([s()],$.prototype,`nodesLoading`,void 0),J([s()],$.prototype,`nodes`,void 0),J([s()],$.prototype,`devicesLoading`,void 0),J([s()],$.prototype,`devicesError`,void 0),J([s()],$.prototype,`devicesList`,void 0),J([s()],$.prototype,`execApprovalsLoading`,void 0),J([s()],$.prototype,`execApprovalsSaving`,void 0),J([s()],$.prototype,`execApprovalsDirty`,void 0),J([s()],$.prototype,`execApprovalsSnapshot`,void 0),J([s()],$.prototype,`execApprovalsForm`,void 0),J([s()],$.prototype,`execApprovalsSelectedAgent`,void 0),J([s()],$.prototype,`execApprovalsTarget`,void 0),J([s()],$.prototype,`execApprovalsTargetNodeId`,void 0),J([s()],$.prototype,`execApprovalQueue`,void 0),J([s()],$.prototype,`execApprovalBusy`,void 0),J([s()],$.prototype,`execApprovalError`,void 0),J([s()],$.prototype,`pendingGatewayUrl`,void 0),J([s()],$.prototype,`configLoading`,void 0),J([s()],$.prototype,`configRaw`,void 0),J([s()],$.prototype,`configRawOriginal`,void 0),J([s()],$.prototype,`configValid`,void 0),J([s()],$.prototype,`configIssues`,void 0),J([s()],$.prototype,`configSaving`,void 0),J([s()],$.prototype,`configApplying`,void 0),J([s()],$.prototype,`updateRunning`,void 0),J([s()],$.prototype,`applySessionKey`,void 0),J([s()],$.prototype,`configSnapshot`,void 0),J([s()],$.prototype,`configSchema`,void 0),J([s()],$.prototype,`configSchemaVersion`,void 0),J([s()],$.prototype,`configSchemaLoading`,void 0),J([s()],$.prototype,`configUiHints`,void 0),J([s()],$.prototype,`configForm`,void 0),J([s()],$.prototype,`configFormOriginal`,void 0),J([s()],$.prototype,`dreamingStatusLoading`,void 0),J([s()],$.prototype,`dreamingStatusError`,void 0),J([s()],$.prototype,`dreamingStatus`,void 0),J([s()],$.prototype,`dreamingModeSaving`,void 0),J([s()],$.prototype,`dreamingRestartConfirmOpen`,void 0),J([s()],$.prototype,`dreamingRestartConfirmLoading`,void 0),J([s()],$.prototype,`dreamingPendingEnabled`,void 0),J([s()],$.prototype,`dreamDiaryLoading`,void 0),J([s()],$.prototype,`dreamDiaryActionLoading`,void 0),J([s()],$.prototype,`dreamDiaryActionMessage`,void 0),J([s()],$.prototype,`dreamDiaryActionArchivePath`,void 0),J([s()],$.prototype,`dreamDiaryError`,void 0),J([s()],$.prototype,`dreamDiaryPath`,void 0),J([s()],$.prototype,`dreamDiaryContent`,void 0),J([s()],$.prototype,`wikiImportInsightsLoading`,void 0),J([s()],$.prototype,`wikiImportInsightsError`,void 0),J([s()],$.prototype,`wikiImportInsights`,void 0),J([s()],$.prototype,`wikiMemoryPalaceLoading`,void 0),J([s()],$.prototype,`wikiMemoryPalaceError`,void 0),J([s()],$.prototype,`wikiMemoryPalace`,void 0),J([s()],$.prototype,`configFormDirty`,void 0),J([s()],$.prototype,`configSettingsMode`,void 0),J([s()],$.prototype,`configFormMode`,void 0),J([s()],$.prototype,`configSearchQuery`,void 0),J([s()],$.prototype,`configActiveSection`,void 0),J([s()],$.prototype,`configActiveSubsection`,void 0),J([s()],$.prototype,`pendingUpdateExpectedVersion`,void 0),J([s()],$.prototype,`updateStatusBanner`,void 0),J([s()],$.prototype,`communicationsFormMode`,void 0),J([s()],$.prototype,`communicationsSearchQuery`,void 0),J([s()],$.prototype,`communicationsActiveSection`,void 0),J([s()],$.prototype,`communicationsActiveSubsection`,void 0),J([s()],$.prototype,`appearanceFormMode`,void 0),J([s()],$.prototype,`appearanceSearchQuery`,void 0),J([s()],$.prototype,`appearanceActiveSection`,void 0),J([s()],$.prototype,`appearanceActiveSubsection`,void 0),J([s()],$.prototype,`automationFormMode`,void 0),J([s()],$.prototype,`automationSearchQuery`,void 0),J([s()],$.prototype,`automationActiveSection`,void 0),J([s()],$.prototype,`automationActiveSubsection`,void 0),J([s()],$.prototype,`infrastructureFormMode`,void 0),J([s()],$.prototype,`infrastructureSearchQuery`,void 0),J([s()],$.prototype,`infrastructureActiveSection`,void 0),J([s()],$.prototype,`infrastructureActiveSubsection`,void 0),J([s()],$.prototype,`aiAgentsFormMode`,void 0),J([s()],$.prototype,`aiAgentsSearchQuery`,void 0),J([s()],$.prototype,`aiAgentsActiveSection`,void 0),J([s()],$.prototype,`aiAgentsActiveSubsection`,void 0),J([s()],$.prototype,`channelsLoading`,void 0),J([s()],$.prototype,`channelsSnapshot`,void 0),J([s()],$.prototype,`channelsError`,void 0),J([s()],$.prototype,`channelsLastSuccess`,void 0),J([s()],$.prototype,`presenceLoading`,void 0),J([s()],$.prototype,`presenceEntries`,void 0),J([s()],$.prototype,`presenceError`,void 0),J([s()],$.prototype,`presenceStatus`,void 0),J([s()],$.prototype,`agentsLoading`,void 0),J([s()],$.prototype,`agentsList`,void 0),J([s()],$.prototype,`agentsError`,void 0),J([s()],$.prototype,`agentsSelectedId`,void 0),J([s()],$.prototype,`toolsCatalogLoading`,void 0),J([s()],$.prototype,`toolsCatalogError`,void 0),J([s()],$.prototype,`toolsCatalogResult`,void 0),J([s()],$.prototype,`toolsEffectiveLoading`,void 0),J([s()],$.prototype,`toolsEffectiveLoadingKey`,void 0),J([s()],$.prototype,`toolsEffectiveResultKey`,void 0),J([s()],$.prototype,`toolsEffectiveError`,void 0),J([s()],$.prototype,`toolsEffectiveResult`,void 0),J([s()],$.prototype,`agentsPanel`,void 0),J([s()],$.prototype,`agentFilesLoading`,void 0),J([s()],$.prototype,`agentFilesError`,void 0),J([s()],$.prototype,`agentFilesList`,void 0),J([s()],$.prototype,`agentFileContents`,void 0),J([s()],$.prototype,`agentFileDrafts`,void 0),J([s()],$.prototype,`agentFileActive`,void 0),J([s()],$.prototype,`agentFileSaving`,void 0),J([s()],$.prototype,`agentIdentityLoading`,void 0),J([s()],$.prototype,`agentIdentityError`,void 0),J([s()],$.prototype,`agentIdentityById`,void 0),J([s()],$.prototype,`agentSkillsLoading`,void 0),J([s()],$.prototype,`agentSkillsError`,void 0),J([s()],$.prototype,`agentSkillsReport`,void 0),J([s()],$.prototype,`agentSkillsAgentId`,void 0),J([s()],$.prototype,`sessionsLoading`,void 0),J([s()],$.prototype,`sessionsResult`,void 0),J([s()],$.prototype,`sessionsError`,void 0),J([s()],$.prototype,`sessionsFilterActive`,void 0),J([s()],$.prototype,`sessionsFilterLimit`,void 0),J([s()],$.prototype,`sessionsIncludeGlobal`,void 0),J([s()],$.prototype,`sessionsIncludeUnknown`,void 0),J([s()],$.prototype,`sessionsShowArchived`,void 0),J([s()],$.prototype,`sessionsFiltersCollapsed`,void 0),J([s()],$.prototype,`sessionsHideCron`,void 0),J([s()],$.prototype,`sessionsSearchQuery`,void 0),J([s()],$.prototype,`sessionsSortColumn`,void 0),J([s()],$.prototype,`sessionsSortDir`,void 0),J([s()],$.prototype,`sessionsPage`,void 0),J([s()],$.prototype,`sessionsPageSize`,void 0),J([s()],$.prototype,`sessionsSelectedKeys`,void 0),J([s()],$.prototype,`sessionsExpandedCheckpointKey`,void 0),J([s()],$.prototype,`sessionsCheckpointItemsByKey`,void 0),J([s()],$.prototype,`sessionsCheckpointLoadingKey`,void 0),J([s()],$.prototype,`sessionsCheckpointBusyKey`,void 0),J([s()],$.prototype,`sessionsCheckpointErrorByKey`,void 0),J([s()],$.prototype,`usageLoading`,void 0),J([s()],$.prototype,`usageResult`,void 0),J([s()],$.prototype,`usageCostSummary`,void 0),J([s()],$.prototype,`usageError`,void 0),J([s()],$.prototype,`usageStartDate`,void 0),J([s()],$.prototype,`usageEndDate`,void 0),J([s()],$.prototype,`usageScope`,void 0),J([s()],$.prototype,`usageAgentId`,void 0),J([s()],$.prototype,`usageSelectedSessions`,void 0),J([s()],$.prototype,`usageSelectedDays`,void 0),J([s()],$.prototype,`usageSelectedHours`,void 0),J([s()],$.prototype,`usageChartMode`,void 0),J([s()],$.prototype,`usageDailyChartMode`,void 0),J([s()],$.prototype,`usageTimeSeriesMode`,void 0),J([s()],$.prototype,`usageTimeSeriesBreakdownMode`,void 0),J([s()],$.prototype,`usageTimeSeries`,void 0),J([s()],$.prototype,`usageTimeSeriesLoading`,void 0),J([s()],$.prototype,`usageTimeSeriesCursorStart`,void 0),J([s()],$.prototype,`usageTimeSeriesCursorEnd`,void 0),J([s()],$.prototype,`usageSessionLogs`,void 0),J([s()],$.prototype,`usageSessionLogsLoading`,void 0),J([s()],$.prototype,`usageSessionLogsExpanded`,void 0),J([s()],$.prototype,`usageQuery`,void 0),J([s()],$.prototype,`usageQueryDraft`,void 0),J([s()],$.prototype,`usageSessionSort`,void 0),J([s()],$.prototype,`usageSessionSortDir`,void 0),J([s()],$.prototype,`usageRecentSessions`,void 0),J([s()],$.prototype,`usageTimeZone`,void 0),J([s()],$.prototype,`usageContextExpanded`,void 0),J([s()],$.prototype,`usageHeaderPinned`,void 0),J([s()],$.prototype,`usageSessionsTab`,void 0),J([s()],$.prototype,`usageVisibleColumns`,void 0),J([s()],$.prototype,`usageLogFilterRoles`,void 0),J([s()],$.prototype,`usageLogFilterTools`,void 0),J([s()],$.prototype,`usageLogFilterHasTools`,void 0),J([s()],$.prototype,`usageLogFilterQuery`,void 0),J([s()],$.prototype,`cronLoading`,void 0),J([s()],$.prototype,`cronQuickCreateOpen`,void 0),J([s()],$.prototype,`cronQuickCreateStep`,void 0),J([s()],$.prototype,`cronQuickCreateDraft`,void 0),J([s()],$.prototype,`cronJobsLoadingMore`,void 0),J([s()],$.prototype,`cronJobs`,void 0),J([s()],$.prototype,`cronJobsTotal`,void 0),J([s()],$.prototype,`cronJobsHasMore`,void 0),J([s()],$.prototype,`cronJobsNextOffset`,void 0),J([s()],$.prototype,`cronJobsLimit`,void 0),J([s()],$.prototype,`cronJobsQuery`,void 0),J([s()],$.prototype,`cronJobsEnabledFilter`,void 0),J([s()],$.prototype,`cronJobsScheduleKindFilter`,void 0),J([s()],$.prototype,`cronJobsLastStatusFilter`,void 0),J([s()],$.prototype,`cronJobsSortBy`,void 0),J([s()],$.prototype,`cronJobsSortDir`,void 0),J([s()],$.prototype,`cronStatus`,void 0),J([s()],$.prototype,`cronError`,void 0),J([s()],$.prototype,`cronForm`,void 0),J([s()],$.prototype,`cronFormCollapsed`,void 0),J([s()],$.prototype,`cronFieldErrors`,void 0),J([s()],$.prototype,`cronEditingJobId`,void 0),J([s()],$.prototype,`cronRunsJobId`,void 0),J([s()],$.prototype,`cronRunsLoadingMore`,void 0),J([s()],$.prototype,`cronRuns`,void 0),J([s()],$.prototype,`cronRunsTotal`,void 0),J([s()],$.prototype,`cronRunsHasMore`,void 0),J([s()],$.prototype,`cronRunsNextOffset`,void 0),J([s()],$.prototype,`cronRunsLimit`,void 0),J([s()],$.prototype,`cronRunsScope`,void 0),J([s()],$.prototype,`cronRunsStatuses`,void 0),J([s()],$.prototype,`cronRunsDeliveryStatuses`,void 0),J([s()],$.prototype,`cronRunsStatusFilter`,void 0),J([s()],$.prototype,`cronRunsQuery`,void 0),J([s()],$.prototype,`cronRunsSortDir`,void 0),J([s()],$.prototype,`cronModelSuggestions`,void 0),J([s()],$.prototype,`cronBusy`,void 0),J([s()],$.prototype,`updateAvailable`,void 0),J([s()],$.prototype,`attentionItems`,void 0),J([s()],$.prototype,`paletteOpen`,void 0),J([s()],$.prototype,`paletteQuery`,void 0),J([s()],$.prototype,`paletteActiveIndex`,void 0),J([s()],$.prototype,`overviewShowGatewayToken`,void 0),J([s()],$.prototype,`overviewShowGatewayPassword`,void 0),J([s()],$.prototype,`overviewLogLines`,void 0),J([s()],$.prototype,`overviewLogCursor`,void 0),J([s()],$.prototype,`skillsLoading`,void 0),J([s()],$.prototype,`skillsReport`,void 0),J([s()],$.prototype,`skillsError`,void 0),J([s()],$.prototype,`skillsFilter`,void 0),J([s()],$.prototype,`skillsStatusFilter`,void 0),J([s()],$.prototype,`skillEdits`,void 0),J([s()],$.prototype,`skillsBusyKey`,void 0),J([s()],$.prototype,`skillMessages`,void 0),J([s()],$.prototype,`skillsDetailKey`,void 0),J([s()],$.prototype,`skillsDetailTab`,void 0),J([s()],$.prototype,`clawhubSearchQuery`,void 0),J([s()],$.prototype,`clawhubSearchResults`,void 0),J([s()],$.prototype,`clawhubSearchLoading`,void 0),J([s()],$.prototype,`clawhubSearchError`,void 0),J([s()],$.prototype,`clawhubDetail`,void 0),J([s()],$.prototype,`clawhubDetailSlug`,void 0),J([s()],$.prototype,`clawhubDetailLoading`,void 0),J([s()],$.prototype,`clawhubDetailError`,void 0),J([s()],$.prototype,`clawhubInstallSlug`,void 0),J([s()],$.prototype,`clawhubInstallMessage`,void 0),J([s()],$.prototype,`clawhubVerdicts`,void 0),J([s()],$.prototype,`clawhubVerdictsLoading`,void 0),J([s()],$.prototype,`clawhubVerdictsError`,void 0),J([s()],$.prototype,`skillCardContents`,void 0),J([s()],$.prototype,`skillCardContentKeys`,void 0),J([s()],$.prototype,`skillCardLoadingKey`,void 0),J([s()],$.prototype,`skillCardErrors`,void 0),J([s()],$.prototype,`healthLoading`,void 0),J([s()],$.prototype,`healthResult`,void 0),J([s()],$.prototype,`healthError`,void 0),J([s()],$.prototype,`modelAuthStatusLoading`,void 0),J([s()],$.prototype,`modelAuthStatusResult`,void 0),J([s()],$.prototype,`modelAuthStatusError`,void 0),J([s()],$.prototype,`debugLoading`,void 0),J([s()],$.prototype,`debugStatus`,void 0),J([s()],$.prototype,`debugHealth`,void 0),J([s()],$.prototype,`debugModels`,void 0),J([s()],$.prototype,`debugHeartbeat`,void 0),J([s()],$.prototype,`debugCallMethod`,void 0),J([s()],$.prototype,`debugCallParams`,void 0),J([s()],$.prototype,`debugCallResult`,void 0),J([s()],$.prototype,`debugCallError`,void 0),J([s()],$.prototype,`webPushSupported`,void 0),J([s()],$.prototype,`webPushPermission`,void 0),J([s()],$.prototype,`webPushSubscribed`,void 0),J([s()],$.prototype,`webPushLoading`,void 0),J([s()],$.prototype,`logsLoading`,void 0),J([s()],$.prototype,`logsError`,void 0),J([s()],$.prototype,`logsFile`,void 0),J([s()],$.prototype,`logsEntries`,void 0),J([s()],$.prototype,`logsFilterText`,void 0),J([s()],$.prototype,`logsLevelFilters`,void 0),J([s()],$.prototype,`logsAutoFollow`,void 0),J([s()],$.prototype,`logsTruncated`,void 0),J([s()],$.prototype,`logsCursor`,void 0),J([s()],$.prototype,`logsLastFetchAt`,void 0),J([s()],$.prototype,`logsLimit`,void 0),J([s()],$.prototype,`logsMaxBytes`,void 0),J([s()],$.prototype,`logsAtBottom`,void 0),J([s()],$.prototype,`chatNewMessagesBelow`,void 0),customElements.get(`fengming-app`)||customElements.define(`fengming-app`,$),`serviceWorker`in navigator){let e=new URL(`./sw.js`,window.location.href);e.searchParams.set(`v`,`0.2.2-510c148491f0`),navigator.serviceWorker.register(e,{updateViaCache:`none`})}export{Pa as $,Hx as A,Da as B,Tx as C,Wx as D,Gx as E,yc as F,Ja as G,Ua as H,vc as I,Va as J,ga as K,_c as L,L_ as M,F_ as N,$x as O,Yu as P,Ma as Q,wc as R,tS as S,hx as T,Oa as U,Aa as V,qa as W,ja as X,ka as Y,Fa as Z,dD as _,ZB as a,rn as at,qx as b,XB as c,tn as ct,RM as d,Ya as et,zM as f,_D as g,sk as h,QB as i,mi as it,ky as j,eS as k,nR as l,Ue as lt,ck as m,eV as n,ma as nt,YB as o,$t as ot,LM as p,Na as q,$B as r,Li as rt,JB as s,nn as st,hV as t,ha as tt,RL as u,q as v,ix as w,Kx as x,Rb as y,Xo as z};
7191
- //# sourceMappingURL=index-Cai2STXi.js.map
7200
+ `,this.configRawOriginal=``,this.configValid=null,this.configIssues=[],this.configSaving=!1,this.configApplying=!1,this.updateRunning=!1,this.applySessionKey=this.settings.lastActiveSessionKey,this.configSnapshot=null,this.configSchema=null,this.configSchemaVersion=null,this.configSchemaLoading=!1,this.configUiHints={},this.configForm=null,this.configFormOriginal=null,this.dreamingStatusLoading=!1,this.dreamingStatusError=null,this.dreamingStatus=null,this.dreamingModeSaving=!1,this.dreamingRestartConfirmOpen=!1,this.dreamingRestartConfirmLoading=!1,this.dreamingPendingEnabled=null,this.dreamDiaryLoading=!1,this.dreamDiaryActionLoading=!1,this.dreamDiaryActionMessage=null,this.dreamDiaryActionArchivePath=null,this.dreamDiaryError=null,this.dreamDiaryPath=null,this.dreamDiaryContent=null,this.wikiImportInsightsLoading=!1,this.wikiImportInsightsError=null,this.wikiImportInsights=null,this.wikiMemoryPalaceLoading=!1,this.wikiMemoryPalaceError=null,this.wikiMemoryPalace=null,this.configFormDirty=!1,this.configSettingsMode=`quick`,this.configFormMode=`form`,this.configSearchQuery=``,this.configActiveSection=null,this.configActiveSubsection=null,this.pendingUpdateExpectedVersion=null,this.updateStatusBanner=null,this.communicationsFormMode=`form`,this.communicationsSearchQuery=``,this.communicationsActiveSection=null,this.communicationsActiveSubsection=null,this.appearanceFormMode=`form`,this.appearanceSearchQuery=``,this.appearanceActiveSection=null,this.appearanceActiveSubsection=null,this.automationFormMode=`form`,this.automationSearchQuery=``,this.automationActiveSection=null,this.automationActiveSubsection=null,this.infrastructureFormMode=`form`,this.infrastructureSearchQuery=``,this.infrastructureActiveSection=null,this.infrastructureActiveSubsection=null,this.aiAgentsFormMode=`form`,this.aiAgentsSearchQuery=``,this.aiAgentsActiveSection=null,this.aiAgentsActiveSubsection=null,this.channelsLoading=!1,this.channelsSnapshot=null,this.channelsError=null,this.channelsLastSuccess=null,this.presenceLoading=!1,this.presenceEntries=[],this.presenceError=null,this.presenceStatus=null,this.agentsLoading=!1,this.agentsList=null,this.agentsError=null,this.agentsSelectedId=null,this.toolsCatalogLoading=!1,this.toolsCatalogError=null,this.toolsCatalogResult=null,this.toolsEffectiveLoading=!1,this.toolsEffectiveLoadingKey=null,this.toolsEffectiveResultKey=null,this.toolsEffectiveError=null,this.toolsEffectiveResult=null,this.agentsPanel=`files`,this.agentFilesLoading=!1,this.agentFilesError=null,this.agentFilesList=null,this.agentFileContents={},this.agentFileDrafts={},this.agentFileActive=null,this.agentFileSaving=!1,this.agentIdentityLoading=!1,this.agentIdentityError=null,this.agentIdentityById={},this.agentSkillsLoading=!1,this.agentSkillsError=null,this.agentSkillsReport=null,this.agentSkillsAgentId=null,this.sessionsLoading=!1,this.sessionsResult=null,this.sessionsError=null,this.sessionsFilterActive=mg.activeMinutes,this.sessionsFilterLimit=mg.limit,this.sessionsIncludeGlobal=!0,this.sessionsIncludeUnknown=!1,this.sessionsShowArchived=!1,this.sessionsFiltersCollapsed=!1,this.sessionsHideCron=!0,this.sessionsSearchQuery=``,this.sessionsSortColumn=`updated`,this.sessionsSortDir=`desc`,this.sessionsPage=0,this.sessionsPageSize=25,this.sessionsSelectedKeys=new Set,this.sessionsExpandedCheckpointKey=null,this.sessionsCheckpointItemsByKey={},this.sessionsCheckpointLoadingKey=null,this.sessionsCheckpointBusyKey=null,this.sessionsCheckpointErrorByKey={},this.usageLoading=!1,this.usageResult=null,this.usageCostSummary=null,this.usageError=null,this.usageStartDate=(()=>{let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`})(),this.usageEndDate=(()=>{let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`})(),this.usageScope=`family`,this.usageAgentId=null,this.usageSelectedSessions=[],this.usageSelectedDays=[],this.usageSelectedHours=[],this.usageChartMode=`tokens`,this.usageDailyChartMode=`by-type`,this.usageTimeSeriesMode=`per-turn`,this.usageTimeSeriesBreakdownMode=`by-type`,this.usageTimeSeries=null,this.usageTimeSeriesLoading=!1,this.usageTimeSeriesCursorStart=null,this.usageTimeSeriesCursorEnd=null,this.usageSessionLogs=null,this.usageSessionLogsLoading=!1,this.usageSessionLogsExpanded=!1,this.usageQuery=``,this.usageQueryDraft=``,this.usageSessionSort=`recent`,this.usageSessionSortDir=`desc`,this.usageRecentSessions=[],this.usageTimeZone=`local`,this.usageContextExpanded=!1,this.usageHeaderPinned=!1,this.usageSessionsTab=`all`,this.usageVisibleColumns=[`channel`,`agent`,`provider`,`model`,`messages`,`tools`,`errors`,`duration`],this.usageLogFilterRoles=[],this.usageLogFilterTools=[],this.usageLogFilterHasTools=!1,this.usageLogFilterQuery=``,this.usageQueryDebounceTimer=null,this.cronLoading=!1,this.cronQuickCreateOpen=!1,this.cronQuickCreateStep=`what`,this.cronQuickCreateDraft=null,this.cronJobsLoadingMore=!1,this.cronJobsReloadPending=!1,this.cronJobsReloadPendingTableFilters=!1,this.cronJobs=[],this.cronJobsTotal=0,this.cronJobsHasMore=!1,this.cronJobsNextOffset=null,this.cronJobsLimit=50,this.cronJobsQuery=``,this.cronJobsEnabledFilter=`all`,this.cronJobsScheduleKindFilter=`all`,this.cronJobsLastStatusFilter=`all`,this.cronJobsSortBy=`nextRunAtMs`,this.cronJobsSortDir=`asc`,this.cronStatus=null,this.cronError=null,this.cronForm={...hg},this.cronFormCollapsed=!0,this.cronFieldErrors={},this.cronEditingJobId=null,this.cronRunsJobId=null,this.cronRunsLoadingMore=!1,this.cronRuns=[],this.cronRunsTotal=0,this.cronRunsHasMore=!1,this.cronRunsNextOffset=null,this.cronRunsLimit=50,this.cronRunsScope=`all`,this.cronRunsStatuses=[],this.cronRunsDeliveryStatuses=[],this.cronRunsStatusFilter=`all`,this.cronRunsQuery=``,this.cronRunsSortDir=`desc`,this.cronModelSuggestions=[],this.cronBusy=!1,this.updateAvailable=null,this.attentionItems=[],this.paletteOpen=!1,this.paletteQuery=``,this.paletteActiveIndex=0,this.overviewShowGatewayToken=!1,this.overviewShowGatewayPassword=!1,this.overviewLogLines=[],this.overviewLogCursor=0,this.skillsLoading=!1,this.skillsReport=null,this.skillsError=null,this.skillsFilter=``,this.skillsStatusFilter=`all`,this.skillEdits={},this.skillsBusyKey=null,this.skillMessages={},this.skillsDetailKey=null,this.skillsDetailTab=`overview`,this.clawhubSearchQuery=``,this.clawhubSearchResults=null,this.clawhubSearchLoading=!1,this.clawhubSearchError=null,this.clawhubDetail=null,this.clawhubDetailSlug=null,this.clawhubDetailLoading=!1,this.clawhubDetailError=null,this.clawhubInstallSlug=null,this.clawhubInstallMessage=null,this.clawhubVerdicts={},this.clawhubVerdictsLoading=!1,this.clawhubVerdictsError=null,this.skillCardContents={},this.skillCardContentKeys={},this.skillCardLoadingKey=null,this.skillCardErrors={},this.healthLoading=!1,this.healthResult=null,this.healthError=null,this.modelAuthStatusLoading=!1,this.modelAuthStatusResult=null,this.modelAuthStatusError=null,this.debugLoading=!1,this.debugStatus=null,this.debugHealth=null,this.debugModels=[],this.debugHeartbeat=null,this.debugCallMethod=``,this.debugCallParams=`{}`,this.debugCallResult=null,this.debugCallError=null,this.webPushSupported=!1,this.webPushPermission=`unsupported`,this.webPushSubscribed=!1,this.webPushLoading=!1,this.logsLoading=!1,this.logsError=null,this.logsFile=null,this.logsEntries=[],this.logsFilterText=``,this.logsLevelFilters={...pg},this.logsAutoFollow=!0,this.logsTruncated=!1,this.logsCursor=null,this.logsLastFetchAt=null,this.logsLimit=500,this.logsMaxBytes=25e4,this.logsAtBottom=!0,this.client=null,this.chatScrollFrame=null,this.chatScrollTimeout=null,this.chatLastScrollTop=0,this.chatHasAutoScrolled=!1,this.chatUserNearBottom=!0,this.chatIsProgrammaticScroll=!1,this.chatProgrammaticScrollTarget=0,this.chatNewMessagesBelow=!1,this.nodesPollInterval=null,this.logsPollInterval=null,this.debugPollInterval=null,this.sessionsChangedReloadTimer=null,this.logsScrollFrame=null,this.activityScrollFrame=null,this.controlUiResponsivenessObserver=null,this.toolStreamById=new Map,this.toolStreamOrder=[],this.refreshSessionsAfterChat=new Set,this.chatSideResultTerminalRuns=new Set,this.basePath=``,this.popStateHandler=()=>SA(this),this.topbarObserver=null,this.globalKeydownHandler=e=>{(e.metaKey||e.ctrlKey)&&!e.shiftKey&&e.key===`k`&&(e.preventDefault(),this.paletteOpen=!this.paletteOpen,this.paletteOpen&&(this.paletteQuery=``,this.paletteActiveIndex=0))},this.chatMobileControlsKeydownHandler=e=>{if(e.key===`Escape`){if(this.chatSessionPickerOpen){e.preventDefault(),this.chatSessionPickerOpen=!1,this.chatSessionPickerSurface=null;return}this.chatMobileControlsOpen&&(e.preventDefault(),this.setChatMobileControlsOpen(!1,{restoreFocus:!0}))}},this.chatMobileControlsPointerdownHandler=e=>{let t=e.composedPath();if(this.chatSessionPickerOpen&&(Array.from(this.querySelectorAll(`.chat-controls__session-picker`)).some(e=>t.includes(e))||(this.chatSessionPickerOpen=!1,this.chatSessionPickerSurface=null)),!this.chatMobileControlsOpen)return;let n=this.querySelector(`.chat-mobile-controls-wrapper`);n&&t.includes(n)||this.setChatMobileControlsOpen(!1)},h(this.settings.locale)&&_.setLocale(this.settings.locale)}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this.onSlashAction=async e=>{switch(e){case`new-session`:await lP(this);break;case`toggle-focus`:this.applySettings({...this.settings,chatFocusMode:!this.settings.chatFocusMode});break;case`export`:FE(this.chatMessages,this.assistantName);break;case`refresh-tools-effective`:await A_(this);break}},document.addEventListener(`keydown`,this.globalKeydownHandler),document.addEventListener(`keydown`,this.chatMobileControlsKeydownHandler),document.addEventListener(`pointerdown`,this.chatMobileControlsPointerdownHandler),dM(this),this.nativeBridgeCleanup=xM(this),this.initWebPushState()}firstUpdated(){fM(this)}disconnectedCallback(){document.removeEventListener(`keydown`,this.globalKeydownHandler),this.nativeBridgeCleanup?.(),this.nativeBridgeCleanup=null,document.removeEventListener(`keydown`,this.chatMobileControlsKeydownHandler),document.removeEventListener(`pointerdown`,this.chatMobileControlsPointerdownHandler),this.sessionSwitchNoticeTimer!==null&&(window.clearTimeout(this.sessionSwitchNoticeTimer),this.sessionSwitchNoticeTimer=null),this.sessionSwitchFlashTimer!==null&&(window.clearTimeout(this.sessionSwitchFlashTimer),this.sessionSwitchFlashTimer=null),this.chatMobileControlsTrigger=null,gM(this),super.disconnectedCallback()}updated(e){if(_M(this,e),e.has(`tab`)&&this.tab!==`chat`&&this.chatMobileControlsOpen&&this.setChatMobileControlsOpen(!1),!e.has(`sessionKey`)||this.agentsPanel!==`tools`)return;let t=Xc(this.sessionKey);if(this.agentsSelectedId&&this.agentsSelectedId===t){D_(this,{agentId:this.agentsSelectedId,sessionKey:this.sessionKey});return}this.toolsEffectiveResult=null,this.toolsEffectiveResultKey=null,this.toolsEffectiveError=null,this.toolsEffectiveLoading=!1,this.toolsEffectiveLoadingKey=null}connect(){tM(this)}handleChatScroll(e){Ho(this,e)}handleLogsScroll(e){Uo(this,e)}handleActivityScroll(e){Wo(this,e)}scheduleActivityScroll(e=!1){Vo(this,e)}exportLogs(e,t){Ko(e,t)}resetToolStream(){wl(this)}resetChatScroll(){Go(this)}scrollToBottom(e){Go(this),zo(this,!0,!!e?.smooth,{source:`manual`})}async loadAssistantIdentity(){await WA(this)}applySettings(e){eA(this,e)}applyLocalUserIdentity(e){tA(this,e)}setTab(e){oA(this,e),e!==`chat`&&this.setChatMobileControlsOpen(!1),this.navDrawerOpen=!1}setChatMobileControlsOpen(e,t){if(e){this.chatMobileControlsTrigger=t?.trigger??this.chatMobileControlsTrigger,this.chatMobileControlsOpen=!0;return}let n=t?.restoreFocus?this.chatMobileControlsTrigger:null;this.chatMobileControlsOpen=!1,this.chatSessionPickerSurface===`mobile`&&(this.chatSessionPickerOpen=!1,this.chatSessionPickerSurface=null),this.chatMobileControlsTrigger=null,!(!(n instanceof HTMLElement)||!n.isConnected)&&requestAnimationFrame(()=>{n.isConnected&&n.focus()})}setTheme(e,t){cA(this,e,t),this.themeOrder=this.buildThemeOrder(e)}setThemeMode(e,t){lA(this,e,t)}setCustomThemeImportUrl(e){this.customThemeImportUrl=e,this.customThemeImportMessage?.kind===`error`&&(this.customThemeImportMessage=null)}openCustomThemeImport(){this.customThemeImportExpanded=!0,this.customThemeImportFocusToken+=1,this.settings.customTheme||(this.customThemeImportSelectOnSuccess=!0)}async importCustomTheme(){if(!this.customThemeImportBusy){this.customThemeImportExpanded=!0,this.customThemeImportBusy=!0,this.customThemeImportMessage=null;try{let e=await ii(this.customThemeImportUrl),t=this.theme===`custom`||!this.settings.customTheme||this.customThemeImportSelectOnSuccess;eA(this,{...this.settings,theme:t?`custom`:this.settings.theme,customTheme:e}),this.themeOrder=this.buildThemeOrder(t?`custom`:this.theme),this.customThemeImportUrl=``,this.customThemeImportSelectOnSuccess=!1,this.customThemeImportMessage={kind:`success`,text:`Imported ${e.label}.`}}catch(e){this.customThemeImportMessage={kind:`error`,text:e instanceof Error?e.message:v(`settings.quick.importThemeFailed`)}}finally{this.customThemeImportBusy=!1}}}clearCustomTheme(){let e=this.theme===`custom`?`claw`:this.theme;this.customThemeImportExpanded=!0,this.customThemeImportSelectOnSuccess=!1,eA(this,{...this.settings,theme:e,customTheme:void 0}),this.themeOrder=this.buildThemeOrder(e),this.customThemeImportMessage={kind:`success`,text:v(`settings.quick.clearedTheme`)}}setBorderRadius(e){eA(this,{...this.settings,borderRadius:e}),this.requestUpdate()}setTextScale(e){eA(this,{...this.settings,textScale:e}),this.requestUpdate()}announceSessionSwitch(e,t){let n=++this.sessionSwitchNoticeSeq;this.sessionSwitchNoticeTimer!==null&&window.clearTimeout(this.sessionSwitchNoticeTimer),this.sessionSwitchFlashTimer!==null&&window.clearTimeout(this.sessionSwitchFlashTimer),this.sessionSwitchNotice={id:n,text:v(`chat.switchedSession`,{session:t})},this.sessionSwitchFlashKey=e,this.sessionSwitchFlashTimer=window.setTimeout(()=>{this.sessionSwitchNotice?.id===n&&(this.sessionSwitchFlashKey=null),this.sessionSwitchFlashTimer=null},200),this.sessionSwitchNoticeTimer=window.setTimeout(()=>{this.sessionSwitchNotice?.id===n&&(this.sessionSwitchNotice=null),this.sessionSwitchNoticeTimer=null},2800)}buildThemeOrder(e){return[e,...[...xi].filter(t=>t!==e)]}async loadOverview(e){await kA(this,e)}async loadCron(){await IA(this)}async handleAbortChat(e){await mh(this,e)}handleChatDraftChange(e){Wu(this,e)}handleChatInputHistoryKey(e){return Ju(this,e)}resetChatInputHistoryNavigation(){Uu(this)}removeQueuedMessage(e){Rh(this,e)}async retryQueuedChatMessage(e){await Wh(this,e)}async handleSendChat(e,t){await Gh(this,e,t)}updateRealtimeTalkOptions(e){this.realtimeTalkOptions={...this.realtimeTalkOptions,...e}}buildRealtimeTalkLaunchOptions(){let e=this.realtimeTalkOptions??{provider:``,model:``,voice:``,transport:``,vadThreshold:``,silenceDurationMs:``,prefixPaddingMs:``,reasoningEffort:``},t=e=>e.trim()||void 0,n=e=>{let t=e.trim();if(!t)return;let n=Number(t);return Number.isFinite(n)?n:void 0},r=t(e.transport);return{provider:t(e.provider),model:t(e.model),voice:t(e.voice),transport:r,vadThreshold:n(e.vadThreshold),silenceDurationMs:n(e.silenceDurationMs),prefixPaddingMs:n(e.prefixPaddingMs),reasoningEffort:t(e.reasoningEffort)}}async toggleRealtimeTalk(){if(this.realtimeTalkSession)if(this.realtimeTalkStatus===`error`)this.realtimeTalkSession.stop(),this.realtimeTalkSession=null;else{this.realtimeTalkSession.stop(),this.realtimeTalkSession=null,this.realtimeTalkActive=!1,this.realtimeTalkStatus=`idle`,this.realtimeTalkDetail=null,this.realtimeTalkTranscript=null,this.resetRealtimeTalkConversation();return}if(!this.client||!this.connected){this.lastError=v(`chat.gatewayNotConnected`);return}this.realtimeTalkActive=!0,this.realtimeTalkStatus=`connecting`,this.realtimeTalkDetail=null,this.realtimeTalkTranscript=null,this.resetRealtimeTalkConversation();let e=new hU(this.client,this.sessionKey,{onStatus:(e,t)=>{this.realtimeTalkStatus=e,this.realtimeTalkDetail=t??null,(e===`idle`||e===`error`)&&(this.realtimeTalkActive=e!==`idle`)},onTranscript:e=>{this.realtimeTalkTranscript=`${e.role===`user`?`You`:`FengMing`}: ${e.text}`,this.realtimeTalkConversationState=gH(this.realtimeTalkConversationState,e),this.realtimeTalkConversation=this.realtimeTalkConversationState.entries}},this.buildRealtimeTalkLaunchOptions());this.realtimeTalkSession=e;try{await e.start()}catch(t){e.stop(),this.realtimeTalkSession===e&&(this.realtimeTalkSession=null),this.realtimeTalkActive=!1,this.realtimeTalkStatus=`error`,this.realtimeTalkDetail=t instanceof Error?t.message:String(t),this.lastError=this.realtimeTalkDetail}}resetRealtimeTalkConversation(){this.realtimeTalkConversationState=hH(),this.realtimeTalkConversation=[]}async steerQueuedChatMessage(e){await Ih(this,e)}async handleChannelConfigSave(){await gr(this)}async handleChannelConfigReload(){await _r(this)}async handleExecApprovalDecision(e){let t=this.execApprovalQueue[0];if(!(!t||!this.client||this.execApprovalBusy)){this.execApprovalBusy=!0,this.execApprovalError=null;try{let n=t.kind===`plugin`?`plugin.approval.resolve`:`exec.approval.resolve`;await this.client.request(n,{id:t.id,decision:e}),yj(this,t.id)}catch(e){if(uj(e)){yj(this,t.id),await vj(this);return}if(!this.execApprovalQueue.some(e=>e.id===t.id))return;this.execApprovalError=`Approval failed: ${String(e)}`}finally{this.execApprovalBusy=!1}}}handleGatewayUrlConfirm(){let e=this.pendingGatewayUrl;if(!e)return;let t=this.pendingGatewayToken?.trim()||``;this.pendingGatewayUrl=null,this.pendingGatewayToken=null,eA(this,{...this.settings,gatewayUrl:e,token:t}),this.connect()}handleGatewayUrlCancel(){this.pendingGatewayUrl=null,this.pendingGatewayToken=null}handleOpenSidebar(e){this.sidebarCloseTimer!=null&&(window.clearTimeout(this.sidebarCloseTimer),this.sidebarCloseTimer=null),this.sidebarContent=e,this.sidebarError=null,this.sidebarOpen=!0}handleCloseSidebar(){this.sidebarOpen=!1,this.sidebarCloseTimer!=null&&window.clearTimeout(this.sidebarCloseTimer),this.sidebarCloseTimer=window.setTimeout(()=>{this.sidebarOpen||(this.sidebarContent=null,this.sidebarError=null,this.sidebarCloseTimer=null)},200)}handleSplitRatioChange(e){let t=Math.max(.4,Math.min(.7,e));this.splitRatio=t,this.applySettings({...this.settings,splitRatio:t})}async initWebPushState(){let e=`serviceWorker`in navigator&&`PushManager`in window&&`Notification`in window;if(this.webPushSupported=e,this.webPushPermission=e?Notification.permission:`unsupported`,e)try{let{getExistingSubscription:e}=await hV(async()=>{let{getExistingSubscription:e}=await import(`./push-subscription-SK4PlhIV.js`);return{getExistingSubscription:e}},__vite__mapDeps([18,5]),import.meta.url),t=await e();this.webPushSubscribed=t!==null}catch{}}async reconcileWebPushState(){if(this.client)try{let{getExistingSubscription:e}=await hV(async()=>{let{getExistingSubscription:e}=await import(`./push-subscription-SK4PlhIV.js`);return{getExistingSubscription:e}},__vite__mapDeps([18,5]),import.meta.url),t=await e();if(!t)return;this.webPushSubscribed=!0;let n=t.toJSON();n.endpoint&&n.keys?.p256dh&&n.keys?.auth&&await this.client.request(`push.web.subscribe`,{endpoint:n.endpoint,keys:{p256dh:n.keys.p256dh,auth:n.keys.auth}})}catch{}}async handleWebPushSubscribe(){if(!(!this.client||this.webPushLoading)){this.webPushLoading=!0;try{let{subscribeToWebPush:e}=await hV(async()=>{let{subscribeToWebPush:e}=await import(`./push-subscription-SK4PlhIV.js`);return{subscribeToWebPush:e}},__vite__mapDeps([18,5]),import.meta.url);await e(this.client),this.webPushSubscribed=!0,this.webPushPermission=Notification.permission}catch(e){this.lastError=String(e)}finally{this.webPushLoading=!1,`Notification`in window&&(this.webPushPermission=Notification.permission)}}}async handleWebPushUnsubscribe(){if(!(!this.client||this.webPushLoading)){this.webPushLoading=!0;try{let{unsubscribeFromWebPush:e}=await hV(async()=>{let{unsubscribeFromWebPush:e}=await import(`./push-subscription-SK4PlhIV.js`);return{unsubscribeFromWebPush:e}},__vite__mapDeps([18,5]),import.meta.url);await e(this.client),this.webPushSubscribed=!1}catch(e){this.lastError=String(e)}finally{this.webPushLoading=!1}}}async handleWebPushTest(){if(this.client)try{let{sendTestWebPush:e}=await hV(async()=>{let{sendTestWebPush:e}=await import(`./push-subscription-SK4PlhIV.js`);return{sendTestWebPush:e}},__vite__mapDeps([18,5]),import.meta.url);await e(this.client)}catch(e){this.lastError=String(e)}}render(){return pH(this)}};if(J([s()],$.prototype,`settings`,void 0),J([s()],$.prototype,`password`,void 0),J([s()],$.prototype,`loginShowGatewayToken`,void 0),J([s()],$.prototype,`loginShowGatewayPassword`,void 0),J([s()],$.prototype,`tab`,void 0),J([s()],$.prototype,`onboarding`,void 0),J([s()],$.prototype,`connected`,void 0),J([s()],$.prototype,`theme`,void 0),J([s()],$.prototype,`themeMode`,void 0),J([s()],$.prototype,`themeResolved`,void 0),J([s()],$.prototype,`themeOrder`,void 0),J([s()],$.prototype,`customThemeImportUrl`,void 0),J([s()],$.prototype,`customThemeImportBusy`,void 0),J([s()],$.prototype,`customThemeImportMessage`,void 0),J([s()],$.prototype,`customThemeImportExpanded`,void 0),J([s()],$.prototype,`customThemeImportFocusToken`,void 0),J([s()],$.prototype,`hello`,void 0),J([s()],$.prototype,`lastError`,void 0),J([s()],$.prototype,`lastErrorCode`,void 0),J([s()],$.prototype,`eventLog`,void 0),J([s()],$.prototype,`assistantName`,void 0),J([s()],$.prototype,`assistantAvatar`,void 0),J([s()],$.prototype,`assistantAvatarSource`,void 0),J([s()],$.prototype,`assistantAvatarStatus`,void 0),J([s()],$.prototype,`assistantAvatarReason`,void 0),J([s()],$.prototype,`assistantAvatarUploadBusy`,void 0),J([s()],$.prototype,`assistantAvatarUploadError`,void 0),J([s()],$.prototype,`assistantAgentId`,void 0),J([s()],$.prototype,`userName`,void 0),J([s()],$.prototype,`userAvatar`,void 0),J([s()],$.prototype,`localMediaPreviewRoots`,void 0),J([s()],$.prototype,`embedSandboxMode`,void 0),J([s()],$.prototype,`allowExternalEmbedUrls`,void 0),J([s()],$.prototype,`chatMessageMaxWidth`,void 0),J([s()],$.prototype,`serverVersion`,void 0),J([s()],$.prototype,`sessionKey`,void 0),J([s()],$.prototype,`chatLoading`,void 0),J([s()],$.prototype,`chatSending`,void 0),J([s()],$.prototype,`chatMessage`,void 0),J([s()],$.prototype,`chatMessages`,void 0),J([s()],$.prototype,`chatToolMessages`,void 0),J([s()],$.prototype,`activityEntries`,void 0),J([s()],$.prototype,`activityFilterText`,void 0),J([s()],$.prototype,`activityStatusFilters`,void 0),J([s()],$.prototype,`activityToolFilter`,void 0),J([s()],$.prototype,`activityExpandedIds`,void 0),J([s()],$.prototype,`activityAutoFollow`,void 0),J([s()],$.prototype,`activityAtBottom`,void 0),J([s()],$.prototype,`chatStreamSegments`,void 0),J([s()],$.prototype,`chatStream`,void 0),J([s()],$.prototype,`chatStreamStartedAt`,void 0),J([s()],$.prototype,`chatRunId`,void 0),J([s()],$.prototype,`chatSideResult`,void 0),J([s()],$.prototype,`compactionStatus`,void 0),J([s()],$.prototype,`fallbackStatus`,void 0),J([s()],$.prototype,`chatRunStatus`,void 0),J([s()],$.prototype,`chatAvatarUrl`,void 0),J([s()],$.prototype,`chatAvatarSource`,void 0),J([s()],$.prototype,`chatAvatarStatus`,void 0),J([s()],$.prototype,`chatAvatarReason`,void 0),J([s()],$.prototype,`chatThinkingLevel`,void 0),J([s()],$.prototype,`chatModelOverrides`,void 0),J([s()],$.prototype,`chatModelSwitchPromises`,void 0),J([s()],$.prototype,`chatModelsLoading`,void 0),J([s()],$.prototype,`chatModelCatalog`,void 0),J([s()],$.prototype,`sessionSwitchNotice`,void 0),J([s()],$.prototype,`sessionSwitchFlashKey`,void 0),J([s()],$.prototype,`chatSessionPickerOpen`,void 0),J([s()],$.prototype,`chatSessionPickerSurface`,void 0),J([s()],$.prototype,`chatSessionPickerQuery`,void 0),J([s()],$.prototype,`chatSessionPickerAppliedQuery`,void 0),J([s()],$.prototype,`chatSessionPickerLoading`,void 0),J([s()],$.prototype,`chatSessionPickerError`,void 0),J([s()],$.prototype,`chatSessionPickerResult`,void 0),J([s()],$.prototype,`chatQueue`,void 0),J([s()],$.prototype,`chatQueueBySession`,void 0),J([s()],$.prototype,`chatAttachments`,void 0),J([s()],$.prototype,`realtimeTalkActive`,void 0),J([s()],$.prototype,`realtimeTalkStatus`,void 0),J([s()],$.prototype,`realtimeTalkDetail`,void 0),J([s()],$.prototype,`realtimeTalkTranscript`,void 0),J([s()],$.prototype,`realtimeTalkConversation`,void 0),J([s()],$.prototype,`realtimeTalkOptionsOpen`,void 0),J([s()],$.prototype,`realtimeTalkOptions`,void 0),J([s()],$.prototype,`chatManualRefreshInFlight`,void 0),J([s()],$.prototype,`chatHeaderControlsHidden`,void 0),J([s()],$.prototype,`chatMobileControlsOpen`,void 0),J([s()],$.prototype,`navDrawerOpen`,void 0),J([s()],$.prototype,`chatInputHistoryIndex`,void 0),J([s()],$.prototype,`sidebarOpen`,void 0),J([s()],$.prototype,`sidebarContent`,void 0),J([s()],$.prototype,`sidebarError`,void 0),J([s()],$.prototype,`splitRatio`,void 0),J([s()],$.prototype,`nodesLoading`,void 0),J([s()],$.prototype,`nodes`,void 0),J([s()],$.prototype,`devicesLoading`,void 0),J([s()],$.prototype,`devicesError`,void 0),J([s()],$.prototype,`devicesList`,void 0),J([s()],$.prototype,`execApprovalsLoading`,void 0),J([s()],$.prototype,`execApprovalsSaving`,void 0),J([s()],$.prototype,`execApprovalsDirty`,void 0),J([s()],$.prototype,`execApprovalsSnapshot`,void 0),J([s()],$.prototype,`execApprovalsForm`,void 0),J([s()],$.prototype,`execApprovalsSelectedAgent`,void 0),J([s()],$.prototype,`execApprovalsTarget`,void 0),J([s()],$.prototype,`execApprovalsTargetNodeId`,void 0),J([s()],$.prototype,`execApprovalQueue`,void 0),J([s()],$.prototype,`execApprovalBusy`,void 0),J([s()],$.prototype,`execApprovalError`,void 0),J([s()],$.prototype,`pendingGatewayUrl`,void 0),J([s()],$.prototype,`configLoading`,void 0),J([s()],$.prototype,`configRaw`,void 0),J([s()],$.prototype,`configRawOriginal`,void 0),J([s()],$.prototype,`configValid`,void 0),J([s()],$.prototype,`configIssues`,void 0),J([s()],$.prototype,`configSaving`,void 0),J([s()],$.prototype,`configApplying`,void 0),J([s()],$.prototype,`updateRunning`,void 0),J([s()],$.prototype,`applySessionKey`,void 0),J([s()],$.prototype,`configSnapshot`,void 0),J([s()],$.prototype,`configSchema`,void 0),J([s()],$.prototype,`configSchemaVersion`,void 0),J([s()],$.prototype,`configSchemaLoading`,void 0),J([s()],$.prototype,`configUiHints`,void 0),J([s()],$.prototype,`configForm`,void 0),J([s()],$.prototype,`configFormOriginal`,void 0),J([s()],$.prototype,`dreamingStatusLoading`,void 0),J([s()],$.prototype,`dreamingStatusError`,void 0),J([s()],$.prototype,`dreamingStatus`,void 0),J([s()],$.prototype,`dreamingModeSaving`,void 0),J([s()],$.prototype,`dreamingRestartConfirmOpen`,void 0),J([s()],$.prototype,`dreamingRestartConfirmLoading`,void 0),J([s()],$.prototype,`dreamingPendingEnabled`,void 0),J([s()],$.prototype,`dreamDiaryLoading`,void 0),J([s()],$.prototype,`dreamDiaryActionLoading`,void 0),J([s()],$.prototype,`dreamDiaryActionMessage`,void 0),J([s()],$.prototype,`dreamDiaryActionArchivePath`,void 0),J([s()],$.prototype,`dreamDiaryError`,void 0),J([s()],$.prototype,`dreamDiaryPath`,void 0),J([s()],$.prototype,`dreamDiaryContent`,void 0),J([s()],$.prototype,`wikiImportInsightsLoading`,void 0),J([s()],$.prototype,`wikiImportInsightsError`,void 0),J([s()],$.prototype,`wikiImportInsights`,void 0),J([s()],$.prototype,`wikiMemoryPalaceLoading`,void 0),J([s()],$.prototype,`wikiMemoryPalaceError`,void 0),J([s()],$.prototype,`wikiMemoryPalace`,void 0),J([s()],$.prototype,`configFormDirty`,void 0),J([s()],$.prototype,`configSettingsMode`,void 0),J([s()],$.prototype,`configFormMode`,void 0),J([s()],$.prototype,`configSearchQuery`,void 0),J([s()],$.prototype,`configActiveSection`,void 0),J([s()],$.prototype,`configActiveSubsection`,void 0),J([s()],$.prototype,`pendingUpdateExpectedVersion`,void 0),J([s()],$.prototype,`updateStatusBanner`,void 0),J([s()],$.prototype,`communicationsFormMode`,void 0),J([s()],$.prototype,`communicationsSearchQuery`,void 0),J([s()],$.prototype,`communicationsActiveSection`,void 0),J([s()],$.prototype,`communicationsActiveSubsection`,void 0),J([s()],$.prototype,`appearanceFormMode`,void 0),J([s()],$.prototype,`appearanceSearchQuery`,void 0),J([s()],$.prototype,`appearanceActiveSection`,void 0),J([s()],$.prototype,`appearanceActiveSubsection`,void 0),J([s()],$.prototype,`automationFormMode`,void 0),J([s()],$.prototype,`automationSearchQuery`,void 0),J([s()],$.prototype,`automationActiveSection`,void 0),J([s()],$.prototype,`automationActiveSubsection`,void 0),J([s()],$.prototype,`infrastructureFormMode`,void 0),J([s()],$.prototype,`infrastructureSearchQuery`,void 0),J([s()],$.prototype,`infrastructureActiveSection`,void 0),J([s()],$.prototype,`infrastructureActiveSubsection`,void 0),J([s()],$.prototype,`aiAgentsFormMode`,void 0),J([s()],$.prototype,`aiAgentsSearchQuery`,void 0),J([s()],$.prototype,`aiAgentsActiveSection`,void 0),J([s()],$.prototype,`aiAgentsActiveSubsection`,void 0),J([s()],$.prototype,`channelsLoading`,void 0),J([s()],$.prototype,`channelsSnapshot`,void 0),J([s()],$.prototype,`channelsError`,void 0),J([s()],$.prototype,`channelsLastSuccess`,void 0),J([s()],$.prototype,`presenceLoading`,void 0),J([s()],$.prototype,`presenceEntries`,void 0),J([s()],$.prototype,`presenceError`,void 0),J([s()],$.prototype,`presenceStatus`,void 0),J([s()],$.prototype,`agentsLoading`,void 0),J([s()],$.prototype,`agentsList`,void 0),J([s()],$.prototype,`agentsError`,void 0),J([s()],$.prototype,`agentsSelectedId`,void 0),J([s()],$.prototype,`toolsCatalogLoading`,void 0),J([s()],$.prototype,`toolsCatalogError`,void 0),J([s()],$.prototype,`toolsCatalogResult`,void 0),J([s()],$.prototype,`toolsEffectiveLoading`,void 0),J([s()],$.prototype,`toolsEffectiveLoadingKey`,void 0),J([s()],$.prototype,`toolsEffectiveResultKey`,void 0),J([s()],$.prototype,`toolsEffectiveError`,void 0),J([s()],$.prototype,`toolsEffectiveResult`,void 0),J([s()],$.prototype,`agentsPanel`,void 0),J([s()],$.prototype,`agentFilesLoading`,void 0),J([s()],$.prototype,`agentFilesError`,void 0),J([s()],$.prototype,`agentFilesList`,void 0),J([s()],$.prototype,`agentFileContents`,void 0),J([s()],$.prototype,`agentFileDrafts`,void 0),J([s()],$.prototype,`agentFileActive`,void 0),J([s()],$.prototype,`agentFileSaving`,void 0),J([s()],$.prototype,`agentIdentityLoading`,void 0),J([s()],$.prototype,`agentIdentityError`,void 0),J([s()],$.prototype,`agentIdentityById`,void 0),J([s()],$.prototype,`agentSkillsLoading`,void 0),J([s()],$.prototype,`agentSkillsError`,void 0),J([s()],$.prototype,`agentSkillsReport`,void 0),J([s()],$.prototype,`agentSkillsAgentId`,void 0),J([s()],$.prototype,`sessionsLoading`,void 0),J([s()],$.prototype,`sessionsResult`,void 0),J([s()],$.prototype,`sessionsError`,void 0),J([s()],$.prototype,`sessionsFilterActive`,void 0),J([s()],$.prototype,`sessionsFilterLimit`,void 0),J([s()],$.prototype,`sessionsIncludeGlobal`,void 0),J([s()],$.prototype,`sessionsIncludeUnknown`,void 0),J([s()],$.prototype,`sessionsShowArchived`,void 0),J([s()],$.prototype,`sessionsFiltersCollapsed`,void 0),J([s()],$.prototype,`sessionsHideCron`,void 0),J([s()],$.prototype,`sessionsSearchQuery`,void 0),J([s()],$.prototype,`sessionsSortColumn`,void 0),J([s()],$.prototype,`sessionsSortDir`,void 0),J([s()],$.prototype,`sessionsPage`,void 0),J([s()],$.prototype,`sessionsPageSize`,void 0),J([s()],$.prototype,`sessionsSelectedKeys`,void 0),J([s()],$.prototype,`sessionsExpandedCheckpointKey`,void 0),J([s()],$.prototype,`sessionsCheckpointItemsByKey`,void 0),J([s()],$.prototype,`sessionsCheckpointLoadingKey`,void 0),J([s()],$.prototype,`sessionsCheckpointBusyKey`,void 0),J([s()],$.prototype,`sessionsCheckpointErrorByKey`,void 0),J([s()],$.prototype,`usageLoading`,void 0),J([s()],$.prototype,`usageResult`,void 0),J([s()],$.prototype,`usageCostSummary`,void 0),J([s()],$.prototype,`usageError`,void 0),J([s()],$.prototype,`usageStartDate`,void 0),J([s()],$.prototype,`usageEndDate`,void 0),J([s()],$.prototype,`usageScope`,void 0),J([s()],$.prototype,`usageAgentId`,void 0),J([s()],$.prototype,`usageSelectedSessions`,void 0),J([s()],$.prototype,`usageSelectedDays`,void 0),J([s()],$.prototype,`usageSelectedHours`,void 0),J([s()],$.prototype,`usageChartMode`,void 0),J([s()],$.prototype,`usageDailyChartMode`,void 0),J([s()],$.prototype,`usageTimeSeriesMode`,void 0),J([s()],$.prototype,`usageTimeSeriesBreakdownMode`,void 0),J([s()],$.prototype,`usageTimeSeries`,void 0),J([s()],$.prototype,`usageTimeSeriesLoading`,void 0),J([s()],$.prototype,`usageTimeSeriesCursorStart`,void 0),J([s()],$.prototype,`usageTimeSeriesCursorEnd`,void 0),J([s()],$.prototype,`usageSessionLogs`,void 0),J([s()],$.prototype,`usageSessionLogsLoading`,void 0),J([s()],$.prototype,`usageSessionLogsExpanded`,void 0),J([s()],$.prototype,`usageQuery`,void 0),J([s()],$.prototype,`usageQueryDraft`,void 0),J([s()],$.prototype,`usageSessionSort`,void 0),J([s()],$.prototype,`usageSessionSortDir`,void 0),J([s()],$.prototype,`usageRecentSessions`,void 0),J([s()],$.prototype,`usageTimeZone`,void 0),J([s()],$.prototype,`usageContextExpanded`,void 0),J([s()],$.prototype,`usageHeaderPinned`,void 0),J([s()],$.prototype,`usageSessionsTab`,void 0),J([s()],$.prototype,`usageVisibleColumns`,void 0),J([s()],$.prototype,`usageLogFilterRoles`,void 0),J([s()],$.prototype,`usageLogFilterTools`,void 0),J([s()],$.prototype,`usageLogFilterHasTools`,void 0),J([s()],$.prototype,`usageLogFilterQuery`,void 0),J([s()],$.prototype,`cronLoading`,void 0),J([s()],$.prototype,`cronQuickCreateOpen`,void 0),J([s()],$.prototype,`cronQuickCreateStep`,void 0),J([s()],$.prototype,`cronQuickCreateDraft`,void 0),J([s()],$.prototype,`cronJobsLoadingMore`,void 0),J([s()],$.prototype,`cronJobs`,void 0),J([s()],$.prototype,`cronJobsTotal`,void 0),J([s()],$.prototype,`cronJobsHasMore`,void 0),J([s()],$.prototype,`cronJobsNextOffset`,void 0),J([s()],$.prototype,`cronJobsLimit`,void 0),J([s()],$.prototype,`cronJobsQuery`,void 0),J([s()],$.prototype,`cronJobsEnabledFilter`,void 0),J([s()],$.prototype,`cronJobsScheduleKindFilter`,void 0),J([s()],$.prototype,`cronJobsLastStatusFilter`,void 0),J([s()],$.prototype,`cronJobsSortBy`,void 0),J([s()],$.prototype,`cronJobsSortDir`,void 0),J([s()],$.prototype,`cronStatus`,void 0),J([s()],$.prototype,`cronError`,void 0),J([s()],$.prototype,`cronForm`,void 0),J([s()],$.prototype,`cronFormCollapsed`,void 0),J([s()],$.prototype,`cronFieldErrors`,void 0),J([s()],$.prototype,`cronEditingJobId`,void 0),J([s()],$.prototype,`cronRunsJobId`,void 0),J([s()],$.prototype,`cronRunsLoadingMore`,void 0),J([s()],$.prototype,`cronRuns`,void 0),J([s()],$.prototype,`cronRunsTotal`,void 0),J([s()],$.prototype,`cronRunsHasMore`,void 0),J([s()],$.prototype,`cronRunsNextOffset`,void 0),J([s()],$.prototype,`cronRunsLimit`,void 0),J([s()],$.prototype,`cronRunsScope`,void 0),J([s()],$.prototype,`cronRunsStatuses`,void 0),J([s()],$.prototype,`cronRunsDeliveryStatuses`,void 0),J([s()],$.prototype,`cronRunsStatusFilter`,void 0),J([s()],$.prototype,`cronRunsQuery`,void 0),J([s()],$.prototype,`cronRunsSortDir`,void 0),J([s()],$.prototype,`cronModelSuggestions`,void 0),J([s()],$.prototype,`cronBusy`,void 0),J([s()],$.prototype,`updateAvailable`,void 0),J([s()],$.prototype,`attentionItems`,void 0),J([s()],$.prototype,`paletteOpen`,void 0),J([s()],$.prototype,`paletteQuery`,void 0),J([s()],$.prototype,`paletteActiveIndex`,void 0),J([s()],$.prototype,`overviewShowGatewayToken`,void 0),J([s()],$.prototype,`overviewShowGatewayPassword`,void 0),J([s()],$.prototype,`overviewLogLines`,void 0),J([s()],$.prototype,`overviewLogCursor`,void 0),J([s()],$.prototype,`skillsLoading`,void 0),J([s()],$.prototype,`skillsReport`,void 0),J([s()],$.prototype,`skillsError`,void 0),J([s()],$.prototype,`skillsFilter`,void 0),J([s()],$.prototype,`skillsStatusFilter`,void 0),J([s()],$.prototype,`skillEdits`,void 0),J([s()],$.prototype,`skillsBusyKey`,void 0),J([s()],$.prototype,`skillMessages`,void 0),J([s()],$.prototype,`skillsDetailKey`,void 0),J([s()],$.prototype,`skillsDetailTab`,void 0),J([s()],$.prototype,`clawhubSearchQuery`,void 0),J([s()],$.prototype,`clawhubSearchResults`,void 0),J([s()],$.prototype,`clawhubSearchLoading`,void 0),J([s()],$.prototype,`clawhubSearchError`,void 0),J([s()],$.prototype,`clawhubDetail`,void 0),J([s()],$.prototype,`clawhubDetailSlug`,void 0),J([s()],$.prototype,`clawhubDetailLoading`,void 0),J([s()],$.prototype,`clawhubDetailError`,void 0),J([s()],$.prototype,`clawhubInstallSlug`,void 0),J([s()],$.prototype,`clawhubInstallMessage`,void 0),J([s()],$.prototype,`clawhubVerdicts`,void 0),J([s()],$.prototype,`clawhubVerdictsLoading`,void 0),J([s()],$.prototype,`clawhubVerdictsError`,void 0),J([s()],$.prototype,`skillCardContents`,void 0),J([s()],$.prototype,`skillCardContentKeys`,void 0),J([s()],$.prototype,`skillCardLoadingKey`,void 0),J([s()],$.prototype,`skillCardErrors`,void 0),J([s()],$.prototype,`healthLoading`,void 0),J([s()],$.prototype,`healthResult`,void 0),J([s()],$.prototype,`healthError`,void 0),J([s()],$.prototype,`modelAuthStatusLoading`,void 0),J([s()],$.prototype,`modelAuthStatusResult`,void 0),J([s()],$.prototype,`modelAuthStatusError`,void 0),J([s()],$.prototype,`debugLoading`,void 0),J([s()],$.prototype,`debugStatus`,void 0),J([s()],$.prototype,`debugHealth`,void 0),J([s()],$.prototype,`debugModels`,void 0),J([s()],$.prototype,`debugHeartbeat`,void 0),J([s()],$.prototype,`debugCallMethod`,void 0),J([s()],$.prototype,`debugCallParams`,void 0),J([s()],$.prototype,`debugCallResult`,void 0),J([s()],$.prototype,`debugCallError`,void 0),J([s()],$.prototype,`webPushSupported`,void 0),J([s()],$.prototype,`webPushPermission`,void 0),J([s()],$.prototype,`webPushSubscribed`,void 0),J([s()],$.prototype,`webPushLoading`,void 0),J([s()],$.prototype,`logsLoading`,void 0),J([s()],$.prototype,`logsError`,void 0),J([s()],$.prototype,`logsFile`,void 0),J([s()],$.prototype,`logsEntries`,void 0),J([s()],$.prototype,`logsFilterText`,void 0),J([s()],$.prototype,`logsLevelFilters`,void 0),J([s()],$.prototype,`logsAutoFollow`,void 0),J([s()],$.prototype,`logsTruncated`,void 0),J([s()],$.prototype,`logsCursor`,void 0),J([s()],$.prototype,`logsLastFetchAt`,void 0),J([s()],$.prototype,`logsLimit`,void 0),J([s()],$.prototype,`logsMaxBytes`,void 0),J([s()],$.prototype,`logsAtBottom`,void 0),J([s()],$.prototype,`chatNewMessagesBelow`,void 0),customElements.get(`fengming-app`)||customElements.define(`fengming-app`,$),`serviceWorker`in navigator){let e=new URL(`./sw.js`,window.location.href);e.searchParams.set(`v`,`0.3.0-510c148491f0`),navigator.serviceWorker.register(e,{updateViaCache:`none`})}export{Pa as $,Hx as A,Da as B,Tx as C,Wx as D,Gx as E,yc as F,Ja as G,Ua as H,vc as I,Va as J,ga as K,_c as L,L_ as M,F_ as N,$x as O,Yu as P,Ma as Q,wc as R,tS as S,hx as T,Oa as U,Aa as V,qa as W,ja as X,ka as Y,Fa as Z,dD as _,ZB as a,rn as at,qx as b,XB as c,tn as ct,RM as d,Ya as et,zM as f,_D as g,sk as h,QB as i,mi as it,ky as j,eS as k,nR as l,Ue as lt,ck as m,eV as n,ma as nt,YB as o,$t as ot,LM as p,Na as q,$B as r,Li as rt,JB as s,nn as st,hV as t,ha as tt,RL as u,q as v,ix as w,Kx as x,Rb as y,Xo as z};
7201
+ //# sourceMappingURL=index-D5d_SwnF.js.map