fengming 0.2.3 → 0.3.1

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 (1280) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/LICENSE +0 -0
  3. package/README.md +15 -15
  4. package/THIRD_PARTY_NOTICES.md +0 -0
  5. package/dist/{abort-CpkDwXYm.js → abort-CR0u3VsG.js} +1 -1
  6. package/dist/{abort.runtime-CmSJIa_C.js → abort.runtime-CXUxanGg.js} +1 -1
  7. package/dist/abort.runtime.js +1 -1
  8. package/dist/{acp-spawn-D9DmlQgL.js → acp-spawn-2elSoS0E.js} +1 -1
  9. package/dist/{acp-spawn-CQc8a8ii.js → acp-spawn-DtKOHNO1.js} +1 -1
  10. package/dist/{acp-stateful-target-driver-CsEYOYtL.js → acp-stateful-target-driver-BqeA5j0h.js} +1 -1
  11. package/dist/{active-tool-schema-warnings-DMVx2HUr.js → active-tool-schema-warnings-C8vGj5FX.js} +1 -1
  12. package/dist/{active-tool-schema-warnings-DOuh7mx8.js → active-tool-schema-warnings-CVeFJuWI.js} +1 -1
  13. package/dist/{agent-CRt75Zj-.js → agent-BgEaDMdp.js} +8 -8
  14. package/dist/agent-_V5GbziF.js +2 -0
  15. package/dist/{agent-command-Dx2Q8CiH.js → agent-command-CMJdGr16.js} +4 -4
  16. package/dist/{agent-harness-runtime-CHiGWWJI.js → agent-harness-runtime-BKSW2E1O.js} +4 -4
  17. package/dist/{agent-runner-utils-CnFJSoYH.js → agent-runner-utils-DXNDhwkI.js} +1 -1
  18. package/dist/{agent-runner.runtime-Dh7WTlPu.js → agent-runner.runtime-Cym4Odfd.js} +7 -7
  19. package/dist/agent-runner.runtime.js +1 -1
  20. package/dist/{agent-runtime-Bj1VrRks.js → agent-runtime-BkbhevY3.js} +1 -1
  21. package/dist/{agent-tools-DTyXHQit.js → agent-tools-Nwh8BlKX.js} +1 -1
  22. package/dist/{agent-BLMDUAti.js → agent-u5NDWrw9.js} +2 -2
  23. package/dist/{agent-via-gateway-7tWxcxPN.js → agent-via-gateway-DMtOMwZa.js} +1 -1
  24. package/dist/{agent-wait-dedupe-BiG-iK1m.js → agent-wait-dedupe-CLuKbI_7.js} +1 -1
  25. package/dist/api-BiXhdPle.js +3 -0
  26. package/dist/{api-DIXXIWn3.js → api-Cptkjys5.js} +1 -1
  27. package/dist/api-D3vT4ZVi.js +2 -0
  28. package/dist/{assistant-DDxsJwnW.js → assistant-ClfI8Kho.js} +2 -2
  29. package/dist/{attachment-normalize-oQxv6lmZ.js → attachment-normalize-DAW86mZY.js} +1 -1
  30. package/dist/{attempt-execution-CQ17ibMg.js → attempt-execution-DTi2UfET.js} +4 -4
  31. package/dist/{attempt-execution.runtime-z2dO3RBD.js → attempt-execution.runtime-BCmAxwGy.js} +1 -1
  32. package/dist/attempt-execution.runtime.js +1 -1
  33. package/dist/{attempt.prompt-helpers-BPxuP45g.js → attempt.prompt-helpers-BE6kGRtT.js} +2 -2
  34. package/dist/auto-reply/reply/export-html/template.css +0 -0
  35. package/dist/auto-reply/reply/export-html/template.html +0 -0
  36. package/dist/auto-reply/reply/export-html/template.js +0 -0
  37. package/dist/auto-reply/reply/export-html/vendor/highlight.min.js +0 -0
  38. package/dist/auto-reply/reply/export-html/vendor/marked.min.js +0 -0
  39. package/dist/{binding-routing-apjjPgC8.js → binding-routing-BbtHmU_l.js} +1 -1
  40. package/dist/{binding-targets-jBk2HXak.js → binding-targets-DSNv3-QA.js} +1 -1
  41. package/dist/{bridge-server-NeTmIWVS.js → bridge-server-v1-XPnAZ.js} +1 -1
  42. package/dist/{browser-cli-CF-8pAPW.js → browser-cli-CnpuO4KR.js} +7 -7
  43. package/dist/browser-cli-DPbIn8SK.js +2 -0
  44. package/dist/{browser-cli-actions-input-U1wOGrbZ.js → browser-cli-actions-input-DoGR6LI-.js} +5 -5
  45. package/dist/{browser-cli-actions-observe-DiFW1hQc.js → browser-cli-actions-observe-CYMpgmtF.js} +3 -3
  46. package/dist/{browser-cli-debug-DArWNyQm.js → browser-cli-debug-ChJjSq-h.js} +3 -3
  47. package/dist/{browser-cli-inspect-g-FNJO8j.js → browser-cli-inspect-Bbci-WPG.js} +2 -2
  48. package/dist/{browser-cli-manage-DFE6Gr33.js → browser-cli-manage-Bnscjb7b.js} +3 -3
  49. package/dist/{browser-cli-resize-L1e99SAn.js → browser-cli-resize-D1MJdvZI.js} +2 -2
  50. package/dist/{browser-cli-shared-DgJdqUPe.js → browser-cli-shared-BCQwqz51.js} +1 -1
  51. package/dist/{browser-cli-state-DjxHrclc.js → browser-cli-state-BWkPsvUg.js} +5 -5
  52. package/dist/browser-control-auth-CEP_ExeC.js +2 -0
  53. package/dist/browser-profiles-SvnqnHVN.js +2 -0
  54. package/dist/{browser-runtime-DKYWZwKR.js → browser-runtime-0mRxjFpp.js} +11 -11
  55. package/dist/{build-Dg-zGuX4.js → build-DiRmljCi.js} +1 -1
  56. package/dist/build-info.json +2 -2
  57. package/dist/bundled/boot-md/HOOK.md +0 -0
  58. package/dist/bundled/boot-md/handler.js +2 -2
  59. package/dist/bundled/bootstrap-extra-files/HOOK.md +0 -0
  60. package/dist/bundled/command-logger/HOOK.md +0 -0
  61. package/dist/bundled/compaction-notifier/HOOK.md +0 -0
  62. package/dist/bundled/session-memory/HOOK.md +0 -0
  63. package/dist/bundled/session-memory/handler.js +1 -1
  64. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  65. package/dist/canvas-host/a2ui/a2ui.bundle.js +0 -0
  66. package/dist/canvas-host/a2ui/index.html +0 -0
  67. package/dist/{capability-cli-DDOZwhgV.js → capability-cli-ATfwTYFe.js} +1 -1
  68. package/dist/{channel-iHYkmowM.js → channel-CzTD2ouI.js} +4 -4
  69. package/dist/{channel-core-CQgrsdA-.js → channel-core-XMZJ-ZGF.js} +1 -1
  70. package/dist/{channel-inbound-BFc43yKu.js → channel-inbound-DvqkKmiH.js} +1 -1
  71. package/dist/{channel-message-DUbuTMAm.js → channel-message-CnJ4vUyt.js} +1 -1
  72. package/dist/{channel.runtime-BH_PV5n6.js → channel.runtime-By5T5eGw.js} +1 -1
  73. package/dist/channel.runtime.js +1 -1
  74. package/dist/{chat-CitUr4Rq.js → chat-BTMPilpx.js} +4 -4
  75. package/dist/{chat--NCOSCo6.js → chat-DnC7XCWK.js} +1 -1
  76. package/dist/{chrome-BYpeU3EW.js → chrome-C3_dN9jE.js} +1 -1
  77. package/dist/cli/run-main.js +5 -5
  78. package/dist/{cli-compaction-BYLSW4q1.js → cli-compaction-Bh0oMwUa.js} +4 -4
  79. package/dist/{cli-runner-DpOgTRUK.js → cli-runner-BfSrIn-9.js} +3 -3
  80. package/dist/cli-runner-D_FAjNbR.js +2 -0
  81. package/dist/{cli-runner.runtime-Cdskbg3K.js → cli-runner.runtime-BJetQDu1.js} +1 -1
  82. package/dist/{cli-runner.runtime-DW4x1FmR.js → cli-runner.runtime-BKJQkc7C.js} +2 -2
  83. package/dist/cli-runner.runtime.js +1 -1
  84. package/dist/cli-startup-metadata.json +8 -8
  85. package/dist/{command-registry-CZjefvIA.js → command-registry-CbpdQKmu.js} +2 -2
  86. package/dist/{command-registry-DOYfwdIM.js → command-registry-Dw-XC_Zk.js} +2 -2
  87. package/dist/{command-registry-core-DZxhLTiM.js → command-registry-core-rvEDki6p.js} +4 -4
  88. package/dist/{command-status.runtime-DJ9OB-XY.js → command-status.runtime-C2x4yMRd.js} +2 -2
  89. package/dist/command-status.runtime.js +1 -1
  90. package/dist/{commands-compact.runtime-Dmfx_m-S.js → commands-compact.runtime-BTMQfx1k.js} +1 -1
  91. package/dist/commands-compact.runtime.js +1 -1
  92. package/dist/{commands-handlers.runtime-DHW-piAE.js → commands-handlers.runtime-DyNuPOmY.js} +8 -8
  93. package/dist/commands-handlers.runtime.js +1 -1
  94. package/dist/{commands-status-VTIa9cYz.js → commands-status-BRJMba4h.js} +1 -1
  95. package/dist/commands-status-DCXEwlSF.js +3 -0
  96. package/dist/commands-status.runtime-DCXEwlSF.js +3 -0
  97. package/dist/commands-status.runtime.js +1 -1
  98. package/dist/{commands-subagents-control.runtime-BYTez8NE.js → commands-subagents-control.runtime-CduLQJFD.js} +1 -1
  99. package/dist/commands-subagents-control.runtime.js +1 -1
  100. package/dist/{commands-system-prompt-CubAWrwV.js → commands-system-prompt-B3LD8CDs.js} +1 -1
  101. package/dist/{commands-system-prompt-Csd8cDwP.js → commands-system-prompt-DPsXTqOQ.js} +1 -1
  102. package/dist/{commands.runtime-ekYpVZo3.js → commands.runtime-3sVz8Qgo.js} +2 -2
  103. package/dist/commands.runtime.js +1 -1
  104. package/dist/commitments/runtime.js +1 -1
  105. package/dist/{compact-PKi9FMMv.js → compact-DxU_9XEc.js} +4 -4
  106. package/dist/{compact.runtime-QXqoSFxf.js → compact.runtime-CqQTypVl.js} +1 -1
  107. package/dist/compact.runtime.js +1 -1
  108. package/dist/{completion-cli-TmMByYLG.js → completion-cli-CiKl5HhI.js} +2 -2
  109. package/dist/{config-CMUza7AA.js → config--yllOaSC.js} +1 -1
  110. package/dist/{config-mutations-DWizcNgU.js → config-mutations-Cg04LH_S.js} +1 -1
  111. package/dist/{context-engine-host-compat-CXSvninq.js → context-engine-host-compat-C_eflvRw.js} +1 -1
  112. package/dist/{context-engine-host-compat-B4geBuM7.js → context-engine-host-compat-s15Pu845.js} +1 -1
  113. package/dist/{context-engine-lifecycle-9nkZMHjQ.js → context-engine-lifecycle-COHFLnj4.js} +2 -2
  114. package/dist/{control-auth-DsBF120U.js → control-auth-CQJpLoIb.js} +2 -2
  115. package/dist/{control-service-BiwDjGuB.js → control-service-BFSgA0Py.js} +4 -4
  116. package/dist/{control-service-Clj2c-KV.js → control-service-D7GZv-GS.js} +2 -2
  117. package/dist/control-ui/apple-touch-icon.png +0 -0
  118. package/dist/control-ui/assets/{activity-CQDZlvlv.js → activity-164wVojz.js} +2 -2
  119. package/dist/control-ui/assets/{agents-wUgG33N_.js → agents-B2f8TYRm.js} +39 -33
  120. package/dist/control-ui/assets/{channel-config-extras-DEnhuQfF.js → channel-config-extras-Cnty6sJP.js} +2 -2
  121. package/dist/control-ui/assets/{channels-DgmnVztj.js → channels-DoO-OrjQ.js} +2 -2
  122. package/dist/control-ui/assets/{cron-D6RebRs_.js → cron-DTyzT3TV.js} +9 -9
  123. package/dist/control-ui/assets/{debug-DXlIrEz5.js → debug-DmFMvLdY.js} +2 -2
  124. package/dist/control-ui/assets/i18n-COx0mMoe.js +2 -0
  125. package/dist/control-ui/assets/{index-Cai2STXi.js → index-nC-y5600.js} +166 -156
  126. package/dist/control-ui/assets/{instances-34XIx8zZ.js → instances-DWljwzyf.js} +2 -2
  127. package/dist/control-ui/assets/{logs-FvE0QuC6.js → logs-D7YSLRvz.js} +3 -3
  128. package/dist/control-ui/assets/{nodes-BQqP_Fco.js → nodes-D1vIdMC3.js} +37 -37
  129. package/dist/control-ui/assets/{push-subscription-D0l8kKQw.js → push-subscription-SK4PlhIV.js} +2 -2
  130. package/dist/control-ui/assets/{sessions-BOQ1YpmX.js → sessions-BqzDZWTD.js} +3 -3
  131. package/dist/control-ui/assets/{skills-BqKUfTXv.js → skills-CAvbfEkF.js} +27 -27
  132. package/dist/control-ui/assets/skills-shared-KvN3lpfP.js +11 -0
  133. package/dist/control-ui/assets/{workboard-bmN4DclT.js → workboard-DsePRAcc.js} +2 -2
  134. package/dist/control-ui/favicon-32.png +0 -0
  135. package/dist/control-ui/favicon.ico +0 -0
  136. package/dist/control-ui/favicon.svg +0 -0
  137. package/dist/control-ui/index.html +2 -2
  138. package/dist/control-ui/manifest.webmanifest +0 -0
  139. package/dist/control-ui/sw.js +1 -1
  140. package/dist/{conversation-runtime-DP1U-ua_.js → conversation-runtime-B7oAN9Tq.js} +2 -2
  141. package/dist/core-api-CBD0dvTQ.js +5 -0
  142. package/dist/core-api-ClCm_yM8.js +2 -0
  143. package/dist/{core-ByMbhy8s.js → core-wuoxL08a.js} +1 -1
  144. package/dist/crestodian/crestodian.js +1 -1
  145. package/dist/crestodian/rescue-message.js +1 -1
  146. package/dist/{crestodian-S1CStpBm.js → crestodian--iYeGB8u.js} +3 -3
  147. package/dist/{dialogue-C5dQ2aUs.js → dialogue-C0VnTMMn.js} +2 -2
  148. package/dist/{directive-handling.fast-lane-tbnJl1to.js → directive-handling.fast-lane-BemYRfPn.js} +1 -1
  149. package/dist/{directive-handling.impl-XX13n1XZ.js → directive-handling.impl-BMVh1pMh.js} +3 -3
  150. package/dist/{directive-handling.impl-DoUvn60O.js → directive-handling.impl-vr4MsYbt.js} +1 -1
  151. package/dist/{directive-handling.model-selection-kV-iOUuJ.js → directive-handling.model-selection-DegP9exp.js} +1 -1
  152. package/dist/{directive-handling.persist.runtime-BkTHw-ia.js → directive-handling.persist.runtime-BUdU6_zm.js} +4 -4
  153. package/dist/directive-handling.persist.runtime.js +1 -1
  154. package/dist/{dispatch-D3nPCBqV.js → dispatch-Ck2tvRYH.js} +3 -3
  155. package/dist/{dispatch-acp-transcript.runtime-DTYvFOtM.js → dispatch-acp-transcript.runtime-CsJZGhnu.js} +1 -1
  156. package/dist/dispatch-acp-transcript.runtime.js +1 -1
  157. package/dist/{dispatch-acp.runtime-ndozTvlZ.js → dispatch-acp.runtime-C_u7sGcQ.js} +1 -1
  158. package/dist/dispatch-acp.runtime.js +1 -1
  159. package/dist/{dispatcher-UyAOyrP_.js → dispatcher-GtuYO6Ni.js} +2 -2
  160. package/dist/{doctor-DITiLXO7.js → doctor-D9wCez5t.js} +1 -1
  161. package/dist/{doctor-config-flow-MVRehVDg.js → doctor-config-flow-0kxzjUjK.js} +2 -2
  162. package/dist/{doctor-core-checks-YwHiLmgG.js → doctor-core-checks-C_g9REOd.js} +1 -1
  163. package/dist/{doctor-core-checks-BNegY1LG.js → doctor-core-checks-CahzmM1L.js} +1 -1
  164. package/dist/{doctor-core-checks.runtime-CWgXiQ7P.js → doctor-core-checks.runtime-Bi_oTiTZ.js} +1 -1
  165. package/dist/doctor-core-checks.runtime.js +1 -1
  166. package/dist/{doctor-health-CriwjT58.js → doctor-health-C69GVfMl.js} +2 -2
  167. package/dist/{doctor-health-contributions-Dw33C0xB.js → doctor-health-contributions-Bz19QhI4.js} +5 -5
  168. package/dist/{doctor-lint-CmP2DMya.js → doctor-lint-BVW4E6Qf.js} +1 -1
  169. package/dist/{doctor-state-integrity-Db5l4SqS.js → doctor-state-integrity-DuJIszQj.js} +1 -1
  170. package/dist/{embedded-agent-DXLRXDxE.js → embedded-agent-CGULn3lb.js} +1 -1
  171. package/dist/{embedded-agent-CCYLZpO-.js → embedded-agent-DZTa1YiK.js} +8 -8
  172. package/dist/{embedded-agent.runtime-D2z4ywDZ.js → embedded-agent.runtime-TfBgXcUV.js} +1 -1
  173. package/dist/embedded-agent.runtime.js +1 -1
  174. package/dist/{embedded-backend-CkXnHdrz.js → embedded-backend-BAaFwayA.js} +5 -5
  175. package/dist/{embedded-gateway-stub.runtime-zjlklDyV.js → embedded-gateway-stub.runtime-CNyrjvgT.js} +2 -2
  176. package/dist/embedded-gateway-stub.runtime.js +1 -1
  177. package/dist/entry.js +0 -0
  178. package/dist/extensionAPI.js +1 -1
  179. package/dist/extensions/active-memory/index.js +1 -1
  180. package/dist/extensions/admin-http-rpc/index.js +1 -1
  181. package/dist/extensions/browser/browser-bridge.js +1 -1
  182. package/dist/extensions/browser/browser-config.js +4 -4
  183. package/dist/extensions/browser/browser-control-auth.js +2 -2
  184. package/dist/extensions/browser/browser-doctor.js +2 -2
  185. package/dist/extensions/browser/browser-maintenance.js +1 -1
  186. package/dist/extensions/browser/browser-profiles.js +2 -2
  187. package/dist/extensions/browser/browser-runtime-api.js +12 -12
  188. package/dist/extensions/browser/cli-metadata.js +1 -1
  189. package/dist/extensions/browser/index.js +1 -1
  190. package/dist/extensions/browser/plugin-registration.js +1 -1
  191. package/dist/extensions/browser/register.runtime.js +4 -4
  192. package/dist/extensions/browser/runtime-api.js +14 -14
  193. package/dist/extensions/browser/skills/browser-automation/SKILL.md +0 -0
  194. package/dist/extensions/canvas/index.js +1 -1
  195. package/dist/extensions/device-pair/api.js +1 -1
  196. package/dist/extensions/device-pair/pair-command-approve.js +1 -1
  197. package/dist/extensions/memory-core/cli-metadata.js +1 -1
  198. package/dist/extensions/skill-workshop/api.js +1 -1
  199. package/dist/extensions/skill-workshop/index.js +2 -2
  200. package/dist/extensions/webhooks/api.js +1 -1
  201. package/dist/extensions/webhooks/index.js +1 -1
  202. package/dist/extensions/workboard/index.js +1 -1
  203. package/dist/{fengming-tools-CFCB-bYQ.js → fengming-tools-MvRSt0JA.js} +7 -7
  204. package/dist/{gateway-cli-CH3L-EJJ.js → gateway-cli-B8bXBd_L.js} +1 -1
  205. package/dist/{gateway-method-runtime-Cy2K2JiD.js → gateway-method-runtime-ueZTz7WH.js} +1 -1
  206. package/dist/{get-reply-BwOY79yz.js → get-reply-DUuaxcBz.js} +9 -9
  207. package/dist/get-reply-from-config.runtime-B4Dgs3Hg.js +2 -0
  208. package/dist/get-reply-from-config.runtime.js +1 -1
  209. package/dist/{heartbeat-runner-Dt3vlZRv.js → heartbeat-runner-Bq7A_Cjm.js} +1 -1
  210. package/dist/{heartbeat-runner.runtime-ZQNownE6.js → heartbeat-runner.runtime-DQ2NPXMD.js} +1 -1
  211. package/dist/heartbeat-runner.runtime.js +1 -1
  212. package/dist/{hooks-Ck6iU6gn.js → hooks-Bv-otcl7.js} +1 -1
  213. package/dist/inbound-reply-dispatch-DglobJ8j.js +2 -0
  214. package/dist/{inbound-reply-dispatch-CY26lyO7.js → inbound-reply-dispatch-QKOgNx-m.js} +1 -1
  215. package/dist/index.js +1 -1
  216. package/dist/{init-CWvPgwad.js → init-poVZDCAM.js} +1 -1
  217. package/dist/{isolated-agent-CHJ6d3y1.js → isolated-agent-CNw6E3F0.js} +3 -3
  218. package/dist/{isolated-agent-pitmLC0b.js → isolated-agent-DjkHhEyR.js} +1 -1
  219. package/dist/{lifecycle-Bqfm4vcO.js → lifecycle-B-5gEZ7O.js} +1 -1
  220. package/dist/{list.probe-Dw1wwopk.js → list.probe-CY6lxq51.js} +1 -1
  221. package/dist/{list.probe-_JnCpaMr.js → list.probe-DPuE1GOH.js} +1 -1
  222. package/dist/{list.status-command-CUxdNbeu.js → list.status-command-BXCnEq8Q.js} +2 -2
  223. package/dist/{llm-slug-generator-CzRqka-9.js → llm-slug-generator-6o8RXL11.js} +1 -1
  224. package/dist/llm-slug-generator.js +1 -1
  225. package/dist/{local-dispatch.runtime-CdBa6kYb.js → local-dispatch.runtime-21liE3rA.js} +3 -3
  226. package/dist/local-dispatch.runtime.js +1 -1
  227. package/dist/{mcp-http-6DvkRsjA.js → mcp-http-BaJoPKF9.js} +1 -1
  228. package/dist/mcp-http-CpEaJIGJ.js +2 -0
  229. package/dist/{message-handler-DC1Bksh_.js → message-handler-CHDS_NF-.js} +5 -1
  230. package/dist/{model-selection-YiPs6yAt.js → model-selection-jDYEo0WI.js} +1 -1
  231. package/dist/{models-cli-D7iLFM6E.js → models-cli-DUt4uiMH.js} +2 -2
  232. package/dist/{monitor-CsmDdXu9.js → monitor-7tD_FE_5.js} +1 -1
  233. package/dist/{monitor.account-V90peFYr.js → monitor.account-D0F9tnWD.js} +6 -6
  234. package/dist/{nodes-SZSG5OPB.js → nodes-DnWH_15m.js} +1 -1
  235. package/dist/{nodes-BRGlj-_Y.js → nodes-RkB4ZmP6.js} +1 -1
  236. package/dist/{nodes-pending-CjzZ211I.js → nodes-pending--sojaxpI.js} +1 -1
  237. package/dist/{openai-compat-errors-CR3Z1zmU.js → openai-compat-errors-VR4SN1MV.js} +1 -1
  238. package/dist/{openai-http-XURs2rem.js → openai-http-DV95ynPi.js} +4 -4
  239. package/dist/{openresponses-http-Dg1BYTdP.js → openresponses-http-DPchx8IC.js} +3 -3
  240. package/dist/{operations-C50WRZys.js → operations-f9R8j-r9.js} +3 -3
  241. package/dist/{plugin-enabled-DJjL2y-h.js → plugin-enabled-CqsBObeO.js} +5 -5
  242. package/dist/{plugin-registration-BHLgDb-G.js → plugin-registration-Dy58ncPf.js} +2 -2
  243. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  244. package/dist/plugin-sdk/acp-runtime-backend.js +1 -1
  245. package/dist/plugin-sdk/acp-runtime.js +1 -1
  246. package/dist/plugin-sdk/agent-config-primitives.d.ts +1 -1
  247. package/dist/plugin-sdk/{agent-harness-runtime-CgQiThzm.d.ts → agent-harness-runtime-Bkrjji63.d.ts} +2 -2
  248. package/dist/plugin-sdk/agent-harness-runtime.d.ts +4 -4
  249. package/dist/plugin-sdk/agent-harness-runtime.js +5 -5
  250. package/dist/plugin-sdk/agent-harness-task-runtime.d.ts +1 -1
  251. package/dist/plugin-sdk/agent-harness-task-runtime.js +1 -1
  252. package/dist/plugin-sdk/agent-harness.d.ts +4 -4
  253. package/dist/plugin-sdk/agent-harness.js +6 -6
  254. package/dist/plugin-sdk/agent-runtime.d.ts +1 -1
  255. package/dist/plugin-sdk/agent-runtime.js +2 -2
  256. package/dist/plugin-sdk/{bundled-channel-config-schema-CEdFwQa3.d.ts → bundled-channel-config-schema-DcGjByUV.d.ts} +42 -42
  257. package/dist/plugin-sdk/bundled-channel-config-schema.d.ts +3 -3
  258. package/dist/plugin-sdk/channel-config-primitives.d.ts +2 -2
  259. package/dist/plugin-sdk/channel-config-schema-legacy.d.ts +3 -3
  260. package/dist/plugin-sdk/channel-config-schema.d.ts +2 -2
  261. package/dist/plugin-sdk/channel-core.d.ts +3 -3
  262. package/dist/plugin-sdk/channel-core.js +2 -2
  263. package/dist/plugin-sdk/channel-entry-contract.d.ts +1 -1
  264. package/dist/plugin-sdk/channel-envelope.js +1 -1
  265. package/dist/plugin-sdk/channel-inbound-roots.js +1 -1
  266. package/dist/plugin-sdk/channel-inbound.js +2 -2
  267. package/dist/plugin-sdk/channel-location.js +1 -1
  268. package/dist/plugin-sdk/channel-message-runtime.js +3 -3
  269. package/dist/plugin-sdk/channel-message.js +2 -2
  270. package/dist/plugin-sdk/{channel-pairing-CX6ncj1r.d.ts → channel-pairing-CzsPAHgH.d.ts} +1 -1
  271. package/dist/plugin-sdk/channel-pairing.d.ts +1 -1
  272. package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
  273. package/dist/plugin-sdk/cli-backend.d.ts +1 -1
  274. package/dist/plugin-sdk/command-status-runtime.js +1 -1
  275. package/dist/plugin-sdk/compat.d.ts +6 -6
  276. package/dist/plugin-sdk/compat.js +1 -1
  277. package/dist/plugin-sdk/{config-schema-D7cABQ6o.d.ts → config-schema-DUddICQM.d.ts} +1 -1
  278. package/dist/plugin-sdk/{config-schema-DuJUjn6k.d.ts → config-schema-N64y7n8C.d.ts} +1 -1
  279. package/dist/plugin-sdk/config-schema.d.ts +11 -11
  280. package/dist/plugin-sdk/conversation-binding-runtime.js +1 -1
  281. package/dist/plugin-sdk/conversation-runtime.js +3 -3
  282. package/dist/plugin-sdk/{core-CPtu2Ftl.d.ts → core-BWZB2hNB.d.ts} +1 -1
  283. package/dist/plugin-sdk/core.d.ts +8 -8
  284. package/dist/plugin-sdk/core.js +2 -2
  285. package/dist/plugin-sdk/{delegate-uk6vAMkc.d.ts → delegate-o5xckIuc.d.ts} +1 -1
  286. package/dist/plugin-sdk/discord.d.ts +4 -4
  287. package/dist/plugin-sdk/{fengming-runtime-Dt2ZEVYX.d.ts → fengming-runtime-abXAXyq2.d.ts} +1 -1
  288. package/dist/plugin-sdk/gateway-method-runtime.js +1 -1
  289. package/dist/plugin-sdk/gateway-runtime.d.ts +1 -1
  290. package/dist/plugin-sdk/health.js +1 -1
  291. package/dist/plugin-sdk/{host-compat-CM0h9ODw.d.ts → host-compat-D2Ky8seZ.d.ts} +1 -1
  292. package/dist/plugin-sdk/{http-registry-BniL_epL.d.ts → http-registry-oxJbX3E-.d.ts} +2 -2
  293. package/dist/plugin-sdk/image-generation-core.d.ts +4 -4
  294. package/dist/plugin-sdk/image-generation-runtime.d.ts +3 -3
  295. package/dist/plugin-sdk/inbound-reply-dispatch.js +2 -2
  296. package/dist/plugin-sdk/index.d.ts +4 -4
  297. package/dist/plugin-sdk/index.js +1 -1
  298. package/dist/plugin-sdk/lmstudio.d.ts +1 -1
  299. package/dist/plugin-sdk/{loader-aELh60PE.d.ts → loader-CgJhYjxT.d.ts} +3 -3
  300. package/dist/plugin-sdk/{logger-BpB3--7Z.d.ts → logger-CyDIBtoX.d.ts} +1 -1
  301. package/dist/plugin-sdk/logging-core.d.ts +3 -3
  302. package/dist/plugin-sdk/memory-core-host-engine-embeddings.d.ts +2 -2
  303. package/dist/plugin-sdk/memory-core-host-engine-foundation.d.ts +3 -3
  304. package/dist/plugin-sdk/{memory-core-host-engine-storage-DYPjOQCg.d.ts → memory-core-host-engine-storage-DfW7ZqD0.d.ts} +1 -1
  305. package/dist/plugin-sdk/memory-core-host-engine-storage.d.ts +1 -1
  306. package/dist/plugin-sdk/memory-core-host-runtime-cli.d.ts +1 -1
  307. package/dist/plugin-sdk/memory-core-host-runtime-core.d.ts +3 -3
  308. package/dist/plugin-sdk/memory-core.d.ts +3 -3
  309. package/dist/plugin-sdk/memory-host-core.d.ts +3 -3
  310. package/dist/plugin-sdk/migration-runtime.d.ts +1 -1
  311. package/dist/plugin-sdk/migration.d.ts +1 -1
  312. package/dist/plugin-sdk/music-generation-core.d.ts +2 -2
  313. package/dist/plugin-sdk/{plugin-entry-DO9kQeTr.d.ts → plugin-entry-C9xM-ZA9.d.ts} +1 -1
  314. package/dist/plugin-sdk/plugin-entry.d.ts +3 -3
  315. package/dist/plugin-sdk/plugin-runtime.d.ts +3 -3
  316. package/dist/plugin-sdk/{provider-api-key-auth-DvIiojS6.d.ts → provider-api-key-auth-DOmYPTC2.d.ts} +1 -1
  317. package/dist/plugin-sdk/provider-auth-api-key.d.ts +4 -4
  318. package/dist/plugin-sdk/{provider-auth-helpers-CYkWZ0vq.d.ts → provider-auth-helpers-pqDNrZTd.d.ts} +1 -1
  319. package/dist/plugin-sdk/{provider-auth-input-DUV6ZTw4.d.ts → provider-auth-input-Ckt-cU4H.d.ts} +1 -1
  320. package/dist/plugin-sdk/provider-auth-result.d.ts +1 -1
  321. package/dist/plugin-sdk/provider-auth-runtime.d.ts +1 -1
  322. package/dist/plugin-sdk/provider-auth.d.ts +5 -5
  323. package/dist/plugin-sdk/provider-catalog-runtime.d.ts +2 -2
  324. package/dist/plugin-sdk/{provider-catalog-shared-Cm3SyFfL.d.ts → provider-catalog-shared-QvOT8Wz1.d.ts} +1 -1
  325. package/dist/plugin-sdk/provider-catalog-shared.d.ts +2 -2
  326. package/dist/plugin-sdk/provider-entry.d.ts +3 -3
  327. package/dist/plugin-sdk/{provider-model-shared-D5rgn7Gb.d.ts → provider-model-shared-Bnc8IMx5.d.ts} +1 -1
  328. package/dist/plugin-sdk/provider-model-shared.d.ts +2 -2
  329. package/dist/plugin-sdk/{provider-registry-DxdZT9UN.d.ts → provider-registry-Ba1nNfhA.d.ts} +1 -1
  330. package/dist/plugin-sdk/{provider-registry-DiKX35tc.d.ts → provider-registry-CqB5bSAD.d.ts} +1 -1
  331. package/dist/plugin-sdk/{provider-registry-D0vmhPWL.d.ts → provider-registry-CxdVib8g.d.ts} +1 -1
  332. package/dist/plugin-sdk/{provider-self-hosted-setup-BPx7JMDC.d.ts → provider-self-hosted-setup-eMoeVPnF.d.ts} +1 -1
  333. package/dist/plugin-sdk/provider-setup.d.ts +2 -2
  334. package/dist/plugin-sdk/{provider-stream-DcC2vn_N.d.ts → provider-stream-CGaLae9n.d.ts} +1 -1
  335. package/dist/plugin-sdk/provider-stream-family.d.ts +2 -2
  336. package/dist/plugin-sdk/{provider-stream-shared-ByDv3QKm.d.ts → provider-stream-shared-u5mt-8_i.d.ts} +1 -1
  337. package/dist/plugin-sdk/provider-stream-shared.d.ts +1 -1
  338. package/dist/plugin-sdk/provider-stream.d.ts +2 -2
  339. package/dist/plugin-sdk/provider-tools.d.ts +1 -1
  340. package/dist/plugin-sdk/provider-web-fetch-contract.d.ts +1 -1
  341. package/dist/plugin-sdk/provider-web-fetch.d.ts +1 -1
  342. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
  343. package/dist/plugin-sdk/{provider-web-search-contract-fields-CY4v8kS-.d.ts → provider-web-search-contract-fields-BiWOSs_d.d.ts} +1 -1
  344. package/dist/plugin-sdk/provider-web-search-contract.d.ts +2 -2
  345. package/dist/plugin-sdk/provider-web-search.d.ts +1 -1
  346. package/dist/plugin-sdk/realtime-transcription.d.ts +1 -1
  347. package/dist/plugin-sdk/realtime-voice.d.ts +1 -1
  348. package/dist/plugin-sdk/{redact-identifier-CVwkabcI.d.ts → redact-identifier-CVqsKaEK.d.ts} +1 -1
  349. package/dist/plugin-sdk/{registry-CzaGoAKH.d.ts → registry-Gq9OFlb3.d.ts} +2 -2
  350. package/dist/plugin-sdk/{registry-types-DN1yiH3F.d.ts → registry-types-DyBkef1H.d.ts} +2 -2
  351. package/dist/plugin-sdk/reply-runtime.d.ts +1 -1
  352. package/dist/plugin-sdk/reply-runtime.js +4 -4
  353. package/dist/plugin-sdk/runtime-env.d.ts +3 -3
  354. package/dist/plugin-sdk/runtime-store.d.ts +1 -1
  355. package/dist/plugin-sdk/runtime.d.ts +3 -3
  356. package/dist/plugin-sdk/self-hosted-provider-setup.d.ts +2 -2
  357. package/dist/plugin-sdk/simple-completion-runtime.d.ts +1 -1
  358. package/dist/plugin-sdk/speech-core.d.ts +2 -2
  359. package/dist/plugin-sdk/speech.d.ts +2 -2
  360. package/dist/plugin-sdk/{subsystem-n4Y4vCcQ.d.ts → subsystem-Boo2DQIV.d.ts} +1 -1
  361. package/dist/plugin-sdk/text-runtime.d.ts +2 -2
  362. package/dist/plugin-sdk/tool-plugin.d.ts +2 -2
  363. package/dist/plugin-sdk/tts-runtime.d.ts +1 -1
  364. package/dist/plugin-sdk/{types-BI8R-vGd.d.ts → types-DGF1KeaJ.d.ts} +2 -2
  365. package/dist/plugin-sdk/{types-CsqNt0j8.d.ts → types-DpaN54PS.d.ts} +1 -1
  366. package/dist/plugin-sdk/{unhandled-rejections-D9eBl3hT.d.ts → unhandled-rejections-Bez6JG0y.d.ts} +2 -2
  367. package/dist/plugin-sdk/video-generation-core.d.ts +3 -3
  368. package/dist/plugin-sdk/video-generation-runtime.d.ts +3 -3
  369. package/dist/plugin-sdk/webhook-ingress.d.ts +1 -1
  370. package/dist/plugin-sdk/webhook-targets.d.ts +1 -1
  371. package/dist/plugin-sdk/{zod-schema.core-CwBNqcXp.d.ts → zod-schema.core-B4_b2R5K.d.ts} +1 -1
  372. package/dist/{plugin-service-DfzZprhq.js → plugin-service-sKF4gWFm.js} +11 -11
  373. package/dist/plugins/runtime/index.js +6 -6
  374. package/dist/postinstall-inventory.json +295 -295
  375. package/dist/{prepare.runtime-C3s1JUFS.js → prepare.runtime-COZaHg5E.js} +3 -3
  376. package/dist/prepare.runtime.js +1 -1
  377. package/dist/{preview-warnings-Cf9qzdRW.js → preview-warnings-L4VuEOyB.js} +2 -2
  378. package/dist/{program-CJV0naTI.js → program-B-4C7bC-.js} +1 -1
  379. package/dist/{provider-dispatcher-yTjSHjF8.js → provider-dispatcher-CtKWj3r-.js} +1 -1
  380. package/dist/provider-dispatcher.runtime.js +1 -1
  381. package/dist/{pw-ai-D4JW5bHw.js → pw-ai-DlSSqerW.js} +3 -3
  382. package/dist/{register.agent-B2GlkbiS.js → register.agent-JLsb-giw.js} +1 -1
  383. package/dist/{register.crestodian-DkeAwoFB.js → register.crestodian-CBXyXEix.js} +1 -1
  384. package/dist/{register.maintenance-DRupvKZA.js → register.maintenance-DGIPQ2Vo.js} +2 -2
  385. package/dist/register.subclis-86Md7P0P.js +3 -0
  386. package/dist/{register.subclis-D8FAAAu8.js → register.subclis-CTVI8zvZ.js} +2 -2
  387. package/dist/{register.subclis-core-D08p-W8Q.js → register.subclis-core-Cy4AnRCu.js} +5 -5
  388. package/dist/{repair-sequencing-C9Npm1NE.js → repair-sequencing-SHADYdcA.js} +2 -2
  389. package/dist/{reply-turn-admission-CqxWnMNz.js → reply-turn-admission-nEW5QbY5.js} +5 -5
  390. package/dist/reply.runtime-B4Dgs3Hg.js +2 -0
  391. package/dist/reply.runtime.js +1 -1
  392. package/dist/{result-fallback-classifier-CGZy9QZ6.js → result-fallback-classifier-BqsFUDvP.js} +1 -1
  393. package/dist/{route-BnGbHjD_.js → route-B3R-uzFG.js} +1 -1
  394. package/dist/{routes-CqCFrRSq.js → routes-ChXmJocl.js} +6 -6
  395. package/dist/routes-D-ZF4AdA.js +2 -0
  396. package/dist/{run-CKb9eBnP.js → run-ClmVDTET.js} +1 -1
  397. package/dist/run-command-CqZJQ0Im.js +2 -0
  398. package/dist/{run-command-XPGVu-8n.js → run-command-GClW75NL.js} +1 -1
  399. package/dist/{run-context-HhTc88WM.js → run-context-BOdGeRg5.js} +1 -1
  400. package/dist/{run-embedded.runtime-BKM5zxlN.js → run-embedded.runtime-e1K4Bt1_.js} +1 -1
  401. package/dist/run-embedded.runtime.js +1 -1
  402. package/dist/{run-execution-cli.runtime-Csi7ldKI.js → run-execution-cli.runtime-Cjrgt4cV.js} +2 -2
  403. package/dist/run-execution-cli.runtime.js +1 -1
  404. package/dist/{run-executor.runtime-BDBgOdOe.js → run-executor.runtime-C2JE6JGb.js} +1 -1
  405. package/dist/run-executor.runtime.js +1 -1
  406. package/dist/{run-subagent-registry.runtime-Bfb3wZP_.js → run-subagent-registry.runtime-Dl_lXi6y.js} +1 -1
  407. package/dist/run-subagent-registry.runtime.js +1 -1
  408. package/dist/{runtime-D9sfiEbE.js → runtime-DX2ClrP-.js} +1 -1
  409. package/dist/{runtime-api-WJIn5lnK.js → runtime-api-B0F0JsV1.js} +1 -1
  410. package/dist/{runtime-channel-Bl1jLKuZ.js → runtime-channel-BmD4hoCR.js} +2 -2
  411. package/dist/runtime-channel-BsebQSPL.js +2 -0
  412. package/dist/runtime-embedded-agent.runtime-A4r23Bn8.js +2 -0
  413. package/dist/runtime-embedded-agent.runtime.js +1 -1
  414. package/dist/{sdk-setup-tools-0_TQr_D4.js → sdk-setup-tools-DaYT6_jD.js} +1 -1
  415. package/dist/{selection-D5PCsLIx.js → selection-BNwLQzqJ.js} +1 -1
  416. package/dist/{selection-C5afPJXg.js → selection-Cj-l80pO.js} +6 -6
  417. package/dist/{server--is1Ai5m.js → server-CMtA1S09.js} +1 -1
  418. package/dist/{server-DIJwDYDg.js → server-DIRaYiiH.js} +5 -5
  419. package/dist/server-close.runtime.js +1 -1
  420. package/dist/{server-context-7ZjbpoVW.js → server-context-DWOSX34k.js} +1 -1
  421. package/dist/{server-context-Dmok_RxN.js → server-context-R7MFLFdI.js} +3 -3
  422. package/dist/server-cron-2FuFg2j8.js +2 -0
  423. package/dist/{server-cron-mrf2zUzy.js → server-cron-ChPAVQtg.js} +3 -3
  424. package/dist/{server-methods-D7oJYCXQ.js → server-methods-DSbhPK3k.js} +10 -10
  425. package/dist/{server-node-events-C2TX4P4m.js → server-node-events-tNWJnXQM.js} +3 -3
  426. package/dist/{server-plugin-bootstrap-BrO0xAHP.js → server-plugin-bootstrap-Ccu97zi8.js} +1 -1
  427. package/dist/{server-plugins-BzLXiR4c.js → server-plugins-ByXwKPnj.js} +1 -1
  428. package/dist/{server-reload-handlers-DjWclAzj.js → server-reload-handlers-ConGiT9Q.js} +2 -2
  429. package/dist/{server-restart-sentinel-DafRA-PQ.js → server-restart-sentinel-mPHo61LL.js} +1 -1
  430. package/dist/{server-runtime-services-DDB9bOSH.js → server-runtime-services-BR1icaUW.js} +1 -1
  431. package/dist/{server-runtime-services-Cfcr17CM.js → server-runtime-services-Bx8n34dj.js} +2 -2
  432. package/dist/{server-startup-plugins-CmqAtLZL.js → server-startup-plugins-CaBj0Nt2.js} +2 -2
  433. package/dist/{server-startup-post-attach-TBSWFD6u.js → server-startup-post-attach-B7TcxkmO.js} +3 -3
  434. package/dist/{server-ws-runtime-ObSEXKBU.js → server-ws-runtime-Cxk_CqMr.js} +1 -1
  435. package/dist/{server.impl-CO8zD6ti.js → server.impl-CQ6dnx43.js} +18 -18
  436. package/dist/{session-kill-http-Bt1Eg23Z.js → session-kill-http-CKkxZhhd.js} +2 -2
  437. package/dist/{session-reset-service-DvIeIhCu.js → session-reset-service-SE0aK4cw.js} +2 -2
  438. package/dist/session-status.runtime-Df89I7Fk.js +2 -0
  439. package/dist/session-status.runtime.js +1 -1
  440. package/dist/{session-subagent-reactivation.runtime-CrGNY-U4.js → session-subagent-reactivation.runtime-BhGUZG1Z.js} +1 -1
  441. package/dist/session-subagent-reactivation.runtime.js +1 -1
  442. package/dist/{session-tab-registry-Sxq9SrWt.js → session-tab-registry-9rSuQ0Yz.js} +3 -3
  443. package/dist/{sessions-CuSCFaqJ.js → sessions-6b9a00Tl.js} +7 -7
  444. package/dist/{sessions-history-http-f5J4LENH.js → sessions-history-http-BjJEfjJa.js} +1 -1
  445. package/dist/{sessions-patch-CkhlXPqx.js → sessions-patch-PwG5sknc.js} +1 -1
  446. package/dist/{sessions-resolve-BAKee1iR.js → sessions-resolve-CSIrd_fi.js} +1 -1
  447. package/dist/{sessions.runtime-BmqL_bIs.js → sessions.runtime-BYHMD0M7.js} +1 -1
  448. package/dist/sessions.runtime.js +1 -1
  449. package/dist/{skills-BlyQQNtI.js → skills-BOkzt4Py.js} +7 -0
  450. package/dist/{snapshot-urls-BmqdFOUT.js → snapshot-urls-C1KjRQD5.js} +1 -1
  451. package/dist/{startup-context-CN9-3gZt.js → startup-context-DY7C4riM.js} +2 -2
  452. package/dist/{status-subagents.runtime-BYKmJgoC.js → status-subagents.runtime-tsCCe4Ny.js} +2 -2
  453. package/dist/status-subagents.runtime.js +1 -1
  454. package/dist/{status-text-BfsGAjcK.js → status-text-Bkeyg8Bf.js} +1 -1
  455. package/dist/{subagent-announce-ClHbl1OX.js → subagent-announce-D244Q4w2.js} +3 -3
  456. package/dist/{subagent-announce-delivery-CMDyGvAO.js → subagent-announce-delivery-qKZfF7Bs.js} +1 -1
  457. package/dist/{subagent-control-DSIHVS2j.js → subagent-control-c87mVGUE.js} +1 -1
  458. package/dist/{subagent-hooks-CUKZNxhl.js → subagent-hooks-B_UW5Len.js} +1 -1
  459. package/dist/{subagent-hooks-Da7DxSxJ.js → subagent-hooks-CYvFWt_r.js} +1 -1
  460. package/dist/{subagent-hooks-api-DawO-J8c.js → subagent-hooks-api-DZgaJf19.js} +2 -2
  461. package/dist/{subagent-registry-CYpFIhh5.js → subagent-registry-BlcoCggo.js} +2 -2
  462. package/dist/{subagent-registry-BFR0oUGh.js → subagent-registry-CuObhNeO.js} +1 -1
  463. package/dist/subagent-registry.runtime.js +1 -1
  464. package/dist/{subagent-session-cleanup-DsYhrksb.js → subagent-session-cleanup-hFF8Z34s.js} +1 -1
  465. package/dist/{system-BAEcbAtP.js → system-CN_Knfqq.js} +1 -1
  466. package/dist/{talk-WkjU20JA.js → talk-DrjGczYs.js} +2 -2
  467. package/dist/{target-id-iEidxa0h.js → target-id-BNpbyWkq.js} +1 -1
  468. package/dist/task-registry-control.runtime.js +1 -1
  469. package/dist/{thread-bindings-BkY8Vx3t.js → thread-bindings-BWxpUE9U.js} +1 -1
  470. package/dist/{tool-7Gdxp8fB.js → tool-DhJbbm91.js} +1 -1
  471. package/dist/{tool-dispatch-EQkzyxzY.js → tool-dispatch-CpFUfblu.js} +1 -1
  472. package/dist/{tool-resolution-Q5U6yugY.js → tool-resolution-oW8Cbamd.js} +1 -1
  473. package/dist/{tools-effective-DMnKBSE1.js → tools-effective-CGvzyIL2.js} +1 -1
  474. package/dist/{tools-effective-inventory-Da4rnkhq.js → tools-effective-inventory-GI5N5Q9v.js} +1 -1
  475. package/dist/{tools-invoke-CwBEJxyu.js → tools-invoke-CU2U0hNH.js} +1 -1
  476. package/dist/{tools-invoke-http-DxFzrWe_.js → tools-invoke-http-8s3FiUy4.js} +1 -1
  477. package/dist/{tools-invoke-shared-vdcr0sTZ.js → tools-invoke-shared-DIETrEY7.js} +2 -2
  478. package/dist/{tui-DcIQS8RR.js → tui-B0CdNmCz.js} +1 -1
  479. package/dist/tui-ByRcXM3Z.js +2 -0
  480. package/dist/{tui-backend-DUoI7c5C.js → tui-backend-C52BUoZI.js} +3 -3
  481. package/dist/{tui-cli-C6A-Q2Ne.js → tui-cli-BQHpZ4n0.js} +1 -1
  482. package/docs/.i18n/README.md +0 -0
  483. package/docs/.i18n/ar-navigation.json +0 -0
  484. package/docs/.i18n/de-navigation.json +0 -0
  485. package/docs/.i18n/es-navigation.json +0 -0
  486. package/docs/.i18n/fr-navigation.json +0 -0
  487. package/docs/.i18n/glossary.ar.json +0 -0
  488. package/docs/.i18n/glossary.de.json +0 -0
  489. package/docs/.i18n/glossary.es.json +0 -0
  490. package/docs/.i18n/glossary.fa.json +0 -0
  491. package/docs/.i18n/glossary.fr.json +0 -0
  492. package/docs/.i18n/glossary.id.json +0 -0
  493. package/docs/.i18n/glossary.it.json +0 -0
  494. package/docs/.i18n/glossary.ja-JP.json +0 -0
  495. package/docs/.i18n/glossary.ko.json +0 -0
  496. package/docs/.i18n/glossary.nl.json +0 -0
  497. package/docs/.i18n/glossary.pl.json +0 -0
  498. package/docs/.i18n/glossary.pt-BR.json +0 -0
  499. package/docs/.i18n/glossary.th.json +0 -0
  500. package/docs/.i18n/glossary.tr.json +0 -0
  501. package/docs/.i18n/glossary.uk.json +0 -0
  502. package/docs/.i18n/glossary.vi.json +0 -0
  503. package/docs/.i18n/glossary.zh-CN.json +0 -0
  504. package/docs/.i18n/glossary.zh-TW.json +0 -0
  505. package/docs/.i18n/id-navigation.json +0 -0
  506. package/docs/.i18n/it-navigation.json +0 -0
  507. package/docs/.i18n/ja-navigation.json +0 -0
  508. package/docs/.i18n/ko-navigation.json +0 -0
  509. package/docs/.i18n/pl-navigation.json +0 -0
  510. package/docs/.i18n/pt-BR-navigation.json +0 -0
  511. package/docs/.i18n/tr-navigation.json +0 -0
  512. package/docs/.i18n/translation-workflow.md +0 -0
  513. package/docs/.i18n/zh-Hans-navigation.json +0 -0
  514. package/docs/AGENTS.md +0 -0
  515. package/docs/CLAUDE.md +0 -0
  516. package/docs/agent-runtime-architecture.md +0 -0
  517. package/docs/announcements/bluebubbles-imessage.md +0 -0
  518. package/docs/auth-credential-semantics.md +0 -0
  519. package/docs/automation/auth-monitoring.md +0 -0
  520. package/docs/automation/clawflow.md +0 -0
  521. package/docs/automation/cron-jobs.md +0 -0
  522. package/docs/automation/cron-vs-heartbeat.md +0 -0
  523. package/docs/automation/gmail-pubsub.md +0 -0
  524. package/docs/automation/hooks.md +0 -0
  525. package/docs/automation/index.md +0 -0
  526. package/docs/automation/poll.md +0 -0
  527. package/docs/automation/standing-orders.md +0 -0
  528. package/docs/automation/taskflow.md +0 -0
  529. package/docs/automation/tasks.md +0 -0
  530. package/docs/automation/troubleshooting.md +0 -0
  531. package/docs/automation/webhook.md +0 -0
  532. package/docs/brave-search.md +0 -0
  533. package/docs/channels/access-groups.md +0 -0
  534. package/docs/channels/ambient-room-events.md +0 -0
  535. package/docs/channels/bot-loop-protection.md +0 -0
  536. package/docs/channels/broadcast-groups.md +0 -0
  537. package/docs/channels/channel-routing.md +0 -0
  538. package/docs/channels/clickclack.md +0 -0
  539. package/docs/channels/discord.md +0 -0
  540. package/docs/channels/feishu.md +0 -0
  541. package/docs/channels/googlechat.md +0 -0
  542. package/docs/channels/group-messages.md +0 -0
  543. package/docs/channels/groups.md +0 -0
  544. package/docs/channels/imessage-from-bluebubbles.md +0 -0
  545. package/docs/channels/imessage.md +0 -0
  546. package/docs/channels/index.md +0 -0
  547. package/docs/channels/irc.md +0 -0
  548. package/docs/channels/line.md +0 -0
  549. package/docs/channels/location.md +0 -0
  550. package/docs/channels/matrix-migration.md +0 -0
  551. package/docs/channels/matrix-presentation.md +0 -0
  552. package/docs/channels/matrix-push-rules.md +0 -0
  553. package/docs/channels/matrix.md +0 -0
  554. package/docs/channels/mattermost.md +0 -0
  555. package/docs/channels/msteams.md +0 -0
  556. package/docs/channels/nextcloud-talk.md +0 -0
  557. package/docs/channels/nostr.md +0 -0
  558. package/docs/channels/pairing.md +0 -0
  559. package/docs/channels/qqbot.md +0 -0
  560. package/docs/channels/signal.md +0 -0
  561. package/docs/channels/slack.md +0 -0
  562. package/docs/channels/synology-chat.md +0 -0
  563. package/docs/channels/telegram.md +0 -0
  564. package/docs/channels/tlon.md +0 -0
  565. package/docs/channels/troubleshooting.md +0 -0
  566. package/docs/channels/twitch.md +0 -0
  567. package/docs/channels/wechat.md +0 -0
  568. package/docs/channels/whatsapp.md +0 -0
  569. package/docs/channels/yuanbao.md +0 -0
  570. package/docs/channels/zalo.md +0 -0
  571. package/docs/channels/zalouser.md +0 -0
  572. package/docs/ci.md +0 -0
  573. package/docs/clawhub/publishing.md +0 -0
  574. package/docs/cli/acp.md +0 -0
  575. package/docs/cli/agent.md +0 -0
  576. package/docs/cli/agents.md +0 -0
  577. package/docs/cli/approvals.md +0 -0
  578. package/docs/cli/backup.md +0 -0
  579. package/docs/cli/browser.md +0 -0
  580. package/docs/cli/channels.md +0 -0
  581. package/docs/cli/clawbot.md +0 -0
  582. package/docs/cli/commitments.md +0 -0
  583. package/docs/cli/completion.md +0 -0
  584. package/docs/cli/config.md +0 -0
  585. package/docs/cli/configure.md +0 -0
  586. package/docs/cli/crestodian.md +0 -0
  587. package/docs/cli/cron.md +0 -0
  588. package/docs/cli/daemon.md +0 -0
  589. package/docs/cli/dashboard.md +0 -0
  590. package/docs/cli/devices.md +0 -0
  591. package/docs/cli/directory.md +0 -0
  592. package/docs/cli/dns.md +0 -0
  593. package/docs/cli/docs.md +0 -0
  594. package/docs/cli/doctor.md +0 -0
  595. package/docs/cli/flows.md +0 -0
  596. package/docs/cli/gateway.md +0 -0
  597. package/docs/cli/health.md +0 -0
  598. package/docs/cli/hooks.md +0 -0
  599. package/docs/cli/index.md +0 -0
  600. package/docs/cli/infer.md +0 -0
  601. package/docs/cli/logs.md +0 -0
  602. package/docs/cli/mcp.md +0 -0
  603. package/docs/cli/memory.md +0 -0
  604. package/docs/cli/message.md +0 -0
  605. package/docs/cli/migrate.md +0 -0
  606. package/docs/cli/models.md +0 -0
  607. package/docs/cli/node.md +0 -0
  608. package/docs/cli/nodes.md +0 -0
  609. package/docs/cli/onboard.md +0 -0
  610. package/docs/cli/pairing.md +0 -0
  611. package/docs/cli/path.md +0 -0
  612. package/docs/cli/plugins.md +0 -0
  613. package/docs/cli/policy.md +0 -0
  614. package/docs/cli/proxy.md +0 -0
  615. package/docs/cli/qr.md +0 -0
  616. package/docs/cli/reset.md +0 -0
  617. package/docs/cli/sandbox.md +0 -0
  618. package/docs/cli/secrets.md +0 -0
  619. package/docs/cli/security.md +0 -0
  620. package/docs/cli/sessions.md +0 -0
  621. package/docs/cli/setup.md +0 -0
  622. package/docs/cli/skills.md +0 -0
  623. package/docs/cli/status.md +0 -0
  624. package/docs/cli/system.md +0 -0
  625. package/docs/cli/tasks.md +0 -0
  626. package/docs/cli/transcripts.md +0 -0
  627. package/docs/cli/tui.md +0 -0
  628. package/docs/cli/uninstall.md +0 -0
  629. package/docs/cli/update.md +0 -0
  630. package/docs/cli/voicecall.md +0 -0
  631. package/docs/cli/webhooks.md +0 -0
  632. package/docs/cli/wiki.md +0 -0
  633. package/docs/concepts/active-memory.md +0 -0
  634. package/docs/concepts/agent-loop.md +0 -0
  635. package/docs/concepts/agent-runtimes.md +0 -0
  636. package/docs/concepts/agent-workspace.md +0 -0
  637. package/docs/concepts/agent.md +0 -0
  638. package/docs/concepts/architecture.md +0 -0
  639. package/docs/concepts/channel-docking.md +0 -0
  640. package/docs/concepts/commitments.md +0 -0
  641. package/docs/concepts/compaction.md +0 -0
  642. package/docs/concepts/context-engine.md +0 -0
  643. package/docs/concepts/context.md +0 -0
  644. package/docs/concepts/delegate-architecture.md +0 -0
  645. package/docs/concepts/dreaming.md +0 -0
  646. package/docs/concepts/experimental-features.md +0 -0
  647. package/docs/concepts/features.md +0 -0
  648. package/docs/concepts/fengming-sdk.md +0 -0
  649. package/docs/concepts/mantis-slack-desktop-runbook.md +0 -0
  650. package/docs/concepts/mantis.md +0 -0
  651. package/docs/concepts/markdown-formatting.md +0 -0
  652. package/docs/concepts/memory-builtin.md +0 -0
  653. package/docs/concepts/memory-honcho.md +0 -0
  654. package/docs/concepts/memory-qmd.md +0 -0
  655. package/docs/concepts/memory-search.md +0 -0
  656. package/docs/concepts/memory.md +0 -0
  657. package/docs/concepts/message-lifecycle-refactor.md +0 -0
  658. package/docs/concepts/messages.md +0 -0
  659. package/docs/concepts/model-failover.md +0 -0
  660. package/docs/concepts/model-providers.md +0 -0
  661. package/docs/concepts/models.md +0 -0
  662. package/docs/concepts/multi-agent.md +0 -0
  663. package/docs/concepts/oauth.md +0 -0
  664. package/docs/concepts/parallel-specialist-lanes.md +0 -0
  665. package/docs/concepts/personal-agent-benchmark-pack.md +0 -0
  666. package/docs/concepts/presence.md +0 -0
  667. package/docs/concepts/progress-drafts.md +0 -0
  668. package/docs/concepts/qa-e2e-automation.md +0 -0
  669. package/docs/concepts/qa-matrix.md +0 -0
  670. package/docs/concepts/queue-steering.md +0 -0
  671. package/docs/concepts/queue.md +0 -0
  672. package/docs/concepts/retry.md +0 -0
  673. package/docs/concepts/session-pruning.md +0 -0
  674. package/docs/concepts/session-tool.md +0 -0
  675. package/docs/concepts/session.md +0 -0
  676. package/docs/concepts/soul.md +0 -0
  677. package/docs/concepts/streaming.md +0 -0
  678. package/docs/concepts/system-prompt.md +0 -0
  679. package/docs/concepts/timezone.md +0 -0
  680. package/docs/concepts/typebox.md +0 -0
  681. package/docs/concepts/typing-indicators.md +0 -0
  682. package/docs/concepts/usage-tracking.md +0 -0
  683. package/docs/date-time.md +0 -0
  684. package/docs/debug/node-issue.md +0 -0
  685. package/docs/diagnostics/flags.md +0 -0
  686. package/docs/docs.json +0 -0
  687. package/docs/fengming-agent-runtime.md +0 -0
  688. package/docs/gateway/authentication.md +0 -0
  689. package/docs/gateway/background-process.md +0 -0
  690. package/docs/gateway/bonjour.md +0 -0
  691. package/docs/gateway/bridge-protocol.md +0 -0
  692. package/docs/gateway/cli-backends.md +0 -0
  693. package/docs/gateway/config-agents.md +0 -0
  694. package/docs/gateway/config-channels.md +0 -0
  695. package/docs/gateway/config-tools.md +0 -0
  696. package/docs/gateway/configuration-examples.md +0 -0
  697. package/docs/gateway/configuration-reference.md +0 -0
  698. package/docs/gateway/configuration.md +0 -0
  699. package/docs/gateway/diagnostics.md +0 -0
  700. package/docs/gateway/discovery.md +0 -0
  701. package/docs/gateway/doctor.md +0 -0
  702. package/docs/gateway/gateway-lock.md +0 -0
  703. package/docs/gateway/health.md +0 -0
  704. package/docs/gateway/heartbeat.md +0 -0
  705. package/docs/gateway/index.md +0 -0
  706. package/docs/gateway/local-model-services.md +0 -0
  707. package/docs/gateway/local-models.md +0 -0
  708. package/docs/gateway/logging.md +0 -0
  709. package/docs/gateway/multiple-gateways.md +0 -0
  710. package/docs/gateway/network-model.md +0 -0
  711. package/docs/gateway/openai-http-api.md +0 -0
  712. package/docs/gateway/openresponses-http-api.md +0 -0
  713. package/docs/gateway/openshell.md +0 -0
  714. package/docs/gateway/opentelemetry.md +0 -0
  715. package/docs/gateway/operator-scopes.md +0 -0
  716. package/docs/gateway/pairing.md +0 -0
  717. package/docs/gateway/prometheus.md +0 -0
  718. package/docs/gateway/protocol.md +0 -0
  719. package/docs/gateway/remote-gateway-readme.md +0 -0
  720. package/docs/gateway/remote.md +0 -0
  721. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -0
  722. package/docs/gateway/sandboxing.md +0 -0
  723. package/docs/gateway/secrets-plan-contract.md +0 -0
  724. package/docs/gateway/secrets.md +0 -0
  725. package/docs/gateway/security/audit-checks.md +0 -0
  726. package/docs/gateway/security/exposure-runbook.md +0 -0
  727. package/docs/gateway/security/index.md +0 -0
  728. package/docs/gateway/security/secure-file-operations.md +0 -0
  729. package/docs/gateway/security/shrinkwrap.md +0 -0
  730. package/docs/gateway/tailscale.md +0 -0
  731. package/docs/gateway/tools-invoke-http-api.md +0 -0
  732. package/docs/gateway/troubleshooting.md +0 -0
  733. package/docs/gateway/trusted-proxy-auth.md +0 -0
  734. package/docs/help/debugging.md +0 -0
  735. package/docs/help/environment.md +0 -0
  736. package/docs/help/faq-first-run.md +0 -0
  737. package/docs/help/faq-models.md +0 -0
  738. package/docs/help/faq.md +0 -0
  739. package/docs/help/index.md +0 -0
  740. package/docs/help/scripts.md +0 -0
  741. package/docs/help/testing-live.md +0 -0
  742. package/docs/help/testing-updates-plugins.md +0 -0
  743. package/docs/help/testing.md +0 -0
  744. package/docs/help/troubleshooting.md +0 -0
  745. package/docs/index.md +0 -0
  746. package/docs/install/ansible.md +0 -0
  747. package/docs/install/azure.md +0 -0
  748. package/docs/install/bun.md +0 -0
  749. package/docs/install/clawdock.md +0 -0
  750. package/docs/install/development-channels.md +0 -0
  751. package/docs/install/digitalocean.md +0 -0
  752. package/docs/install/docker-vm-runtime.md +0 -0
  753. package/docs/install/docker.md +0 -0
  754. package/docs/install/exe-dev.md +0 -0
  755. package/docs/install/fly.md +0 -0
  756. package/docs/install/gcp.md +0 -0
  757. package/docs/install/hetzner.md +0 -0
  758. package/docs/install/hostinger.md +0 -0
  759. package/docs/install/index.md +0 -0
  760. package/docs/install/installer.md +0 -0
  761. package/docs/install/kubernetes.md +0 -0
  762. package/docs/install/macos-vm.md +0 -0
  763. package/docs/install/migrating-claude.md +0 -0
  764. package/docs/install/migrating-hermes.md +0 -0
  765. package/docs/install/migrating.md +0 -0
  766. package/docs/install/nix.md +0 -0
  767. package/docs/install/node.md +0 -0
  768. package/docs/install/northflank.mdx +0 -0
  769. package/docs/install/oracle.md +0 -0
  770. package/docs/install/podman.md +0 -0
  771. package/docs/install/railway.mdx +0 -0
  772. package/docs/install/raspberry-pi.md +0 -0
  773. package/docs/install/render.mdx +0 -0
  774. package/docs/install/uninstall.md +0 -0
  775. package/docs/install/updating.md +0 -0
  776. package/docs/install/upstash.md +0 -0
  777. package/docs/logging.md +0 -0
  778. package/docs/nav-tabs-underline.js +0 -0
  779. package/docs/network.md +0 -0
  780. package/docs/nodes/audio.md +0 -0
  781. package/docs/nodes/camera.md +0 -0
  782. package/docs/nodes/images.md +0 -0
  783. package/docs/nodes/index.md +0 -0
  784. package/docs/nodes/location-command.md +0 -0
  785. package/docs/nodes/media-understanding.md +0 -0
  786. package/docs/nodes/talk.md +0 -0
  787. package/docs/nodes/troubleshooting.md +0 -0
  788. package/docs/nodes/voicewake.md +0 -0
  789. package/docs/perplexity.md +0 -0
  790. package/docs/plan/codex-context-engine-harness.md +0 -0
  791. package/docs/plan/ui-channels.md +0 -0
  792. package/docs/platforms/digitalocean.md +0 -0
  793. package/docs/platforms/easyrunner.md +0 -0
  794. package/docs/platforms/index.md +0 -0
  795. package/docs/platforms/linux.md +0 -0
  796. package/docs/platforms/mac/bundled-gateway.md +0 -0
  797. package/docs/platforms/mac/canvas.md +0 -0
  798. package/docs/platforms/mac/child-process.md +0 -0
  799. package/docs/platforms/mac/dev-setup.md +0 -0
  800. package/docs/platforms/mac/health.md +0 -0
  801. package/docs/platforms/mac/icon.md +0 -0
  802. package/docs/platforms/mac/logging.md +0 -0
  803. package/docs/platforms/mac/menu-bar.md +0 -0
  804. package/docs/platforms/mac/peekaboo.md +0 -0
  805. package/docs/platforms/mac/permissions.md +0 -0
  806. package/docs/platforms/mac/remote.md +0 -0
  807. package/docs/platforms/mac/signing.md +0 -0
  808. package/docs/platforms/mac/skills.md +0 -0
  809. package/docs/platforms/mac/voice-overlay.md +0 -0
  810. package/docs/platforms/mac/voicewake.md +0 -0
  811. package/docs/platforms/mac/webchat.md +0 -0
  812. package/docs/platforms/mac/xpc.md +0 -0
  813. package/docs/platforms/oracle.md +0 -0
  814. package/docs/platforms/raspberry-pi.md +0 -0
  815. package/docs/platforms/windows.md +0 -0
  816. package/docs/plugins/adding-capabilities.md +0 -0
  817. package/docs/plugins/admin-http-rpc.md +0 -0
  818. package/docs/plugins/agent-tools.md +0 -0
  819. package/docs/plugins/architecture-internals.md +0 -0
  820. package/docs/plugins/architecture.md +0 -0
  821. package/docs/plugins/building-extensions.md +0 -0
  822. package/docs/plugins/building-plugins.md +0 -0
  823. package/docs/plugins/bundles.md +0 -0
  824. package/docs/plugins/cli-backend-plugins.md +0 -0
  825. package/docs/plugins/codex-computer-use.md +0 -0
  826. package/docs/plugins/codex-harness-reference.md +0 -0
  827. package/docs/plugins/codex-harness-runtime.md +0 -0
  828. package/docs/plugins/codex-harness.md +0 -0
  829. package/docs/plugins/codex-native-plugins.md +0 -0
  830. package/docs/plugins/community.md +0 -0
  831. package/docs/plugins/compatibility.md +0 -0
  832. package/docs/plugins/copilot.md +0 -0
  833. package/docs/plugins/dependency-resolution.md +0 -0
  834. package/docs/plugins/google-meet.md +0 -0
  835. package/docs/plugins/hooks.md +0 -0
  836. package/docs/plugins/install-overrides.md +0 -0
  837. package/docs/plugins/manage-plugins.md +0 -0
  838. package/docs/plugins/manifest.md +0 -0
  839. package/docs/plugins/memory-lancedb.md +0 -0
  840. package/docs/plugins/memory-wiki.md +0 -0
  841. package/docs/plugins/message-presentation.md +0 -0
  842. package/docs/plugins/oc-path.md +0 -0
  843. package/docs/plugins/plugin-inventory.md +0 -0
  844. package/docs/plugins/plugin-permission-requests.md +0 -0
  845. package/docs/plugins/reference/acpx.md +0 -0
  846. package/docs/plugins/reference/admin-http-rpc.md +0 -0
  847. package/docs/plugins/reference/alibaba.md +0 -0
  848. package/docs/plugins/reference/amazon-bedrock-mantle.md +0 -0
  849. package/docs/plugins/reference/amazon-bedrock.md +0 -0
  850. package/docs/plugins/reference/anthropic-vertex.md +0 -0
  851. package/docs/plugins/reference/anthropic.md +0 -0
  852. package/docs/plugins/reference/arcee.md +0 -0
  853. package/docs/plugins/reference/azure-speech.md +0 -0
  854. package/docs/plugins/reference/bonjour.md +0 -0
  855. package/docs/plugins/reference/brave.md +0 -0
  856. package/docs/plugins/reference/browser.md +0 -0
  857. package/docs/plugins/reference/byteplus.md +0 -0
  858. package/docs/plugins/reference/canvas.md +0 -0
  859. package/docs/plugins/reference/cerebras.md +0 -0
  860. package/docs/plugins/reference/chutes.md +0 -0
  861. package/docs/plugins/reference/clickclack.md +0 -0
  862. package/docs/plugins/reference/cloudflare-ai-gateway.md +0 -0
  863. package/docs/plugins/reference/codex-supervisor.md +0 -0
  864. package/docs/plugins/reference/codex.md +0 -0
  865. package/docs/plugins/reference/comfy.md +0 -0
  866. package/docs/plugins/reference/copilot-proxy.md +0 -0
  867. package/docs/plugins/reference/copilot.md +0 -0
  868. package/docs/plugins/reference/deepgram.md +0 -0
  869. package/docs/plugins/reference/deepinfra.md +0 -0
  870. package/docs/plugins/reference/deepseek.md +0 -0
  871. package/docs/plugins/reference/diagnostics-otel.md +0 -0
  872. package/docs/plugins/reference/diagnostics-prometheus.md +0 -0
  873. package/docs/plugins/reference/diffs-language-pack.md +0 -0
  874. package/docs/plugins/reference/diffs.md +0 -0
  875. package/docs/plugins/reference/discord.md +0 -0
  876. package/docs/plugins/reference/document-extract.md +0 -0
  877. package/docs/plugins/reference/duckduckgo.md +0 -0
  878. package/docs/plugins/reference/elevenlabs.md +0 -0
  879. package/docs/plugins/reference/exa.md +0 -0
  880. package/docs/plugins/reference/fal.md +0 -0
  881. package/docs/plugins/reference/feishu.md +0 -0
  882. package/docs/plugins/reference/file-transfer.md +0 -0
  883. package/docs/plugins/reference/firecrawl.md +0 -0
  884. package/docs/plugins/reference/fireworks.md +0 -0
  885. package/docs/plugins/reference/github-copilot.md +0 -0
  886. package/docs/plugins/reference/gmi.md +0 -0
  887. package/docs/plugins/reference/google-meet.md +0 -0
  888. package/docs/plugins/reference/google.md +0 -0
  889. package/docs/plugins/reference/googlechat.md +0 -0
  890. package/docs/plugins/reference/gradium.md +0 -0
  891. package/docs/plugins/reference/groq.md +0 -0
  892. package/docs/plugins/reference/huggingface.md +0 -0
  893. package/docs/plugins/reference/imessage.md +0 -0
  894. package/docs/plugins/reference/inworld.md +0 -0
  895. package/docs/plugins/reference/irc.md +0 -0
  896. package/docs/plugins/reference/kilocode.md +0 -0
  897. package/docs/plugins/reference/kimi.md +0 -0
  898. package/docs/plugins/reference/line.md +0 -0
  899. package/docs/plugins/reference/litellm.md +0 -0
  900. package/docs/plugins/reference/llm-task.md +0 -0
  901. package/docs/plugins/reference/lmstudio.md +0 -0
  902. package/docs/plugins/reference/lobster.md +0 -0
  903. package/docs/plugins/reference/matrix.md +0 -0
  904. package/docs/plugins/reference/mattermost.md +0 -0
  905. package/docs/plugins/reference/memory-core.md +0 -0
  906. package/docs/plugins/reference/memory-lancedb.md +0 -0
  907. package/docs/plugins/reference/memory-wiki.md +0 -0
  908. package/docs/plugins/reference/microsoft-foundry.md +0 -0
  909. package/docs/plugins/reference/microsoft.md +0 -0
  910. package/docs/plugins/reference/migrate-claude.md +0 -0
  911. package/docs/plugins/reference/migrate-hermes.md +0 -0
  912. package/docs/plugins/reference/minimax.md +0 -0
  913. package/docs/plugins/reference/mistral.md +0 -0
  914. package/docs/plugins/reference/moonshot.md +0 -0
  915. package/docs/plugins/reference/msteams.md +0 -0
  916. package/docs/plugins/reference/nextcloud-talk.md +0 -0
  917. package/docs/plugins/reference/nostr.md +0 -0
  918. package/docs/plugins/reference/novita.md +0 -0
  919. package/docs/plugins/reference/nvidia.md +0 -0
  920. package/docs/plugins/reference/oc-path.md +0 -0
  921. package/docs/plugins/reference/ollama.md +0 -0
  922. package/docs/plugins/reference/open-prose.md +0 -0
  923. package/docs/plugins/reference/openai.md +0 -0
  924. package/docs/plugins/reference/opencode-go.md +0 -0
  925. package/docs/plugins/reference/opencode.md +0 -0
  926. package/docs/plugins/reference/openrouter.md +0 -0
  927. package/docs/plugins/reference/openshell.md +0 -0
  928. package/docs/plugins/reference/perplexity.md +0 -0
  929. package/docs/plugins/reference/pixverse.md +0 -0
  930. package/docs/plugins/reference/policy.md +0 -0
  931. package/docs/plugins/reference/qa-channel.md +0 -0
  932. package/docs/plugins/reference/qa-lab.md +0 -0
  933. package/docs/plugins/reference/qa-matrix.md +0 -0
  934. package/docs/plugins/reference/qianfan.md +0 -0
  935. package/docs/plugins/reference/qqbot.md +0 -0
  936. package/docs/plugins/reference/qwen.md +0 -0
  937. package/docs/plugins/reference/runway.md +0 -0
  938. package/docs/plugins/reference/searxng.md +0 -0
  939. package/docs/plugins/reference/senseaudio.md +0 -0
  940. package/docs/plugins/reference/sglang.md +0 -0
  941. package/docs/plugins/reference/signal.md +0 -0
  942. package/docs/plugins/reference/skill-workshop.md +0 -0
  943. package/docs/plugins/reference/slack.md +0 -0
  944. package/docs/plugins/reference/stepfun.md +0 -0
  945. package/docs/plugins/reference/synology-chat.md +0 -0
  946. package/docs/plugins/reference/synthetic.md +0 -0
  947. package/docs/plugins/reference/tavily.md +0 -0
  948. package/docs/plugins/reference/telegram.md +0 -0
  949. package/docs/plugins/reference/tencent.md +0 -0
  950. package/docs/plugins/reference/tlon.md +0 -0
  951. package/docs/plugins/reference/together.md +0 -0
  952. package/docs/plugins/reference/tokenjuice.md +0 -0
  953. package/docs/plugins/reference/tts-local-cli.md +0 -0
  954. package/docs/plugins/reference/twitch.md +0 -0
  955. package/docs/plugins/reference/venice.md +0 -0
  956. package/docs/plugins/reference/vercel-ai-gateway.md +0 -0
  957. package/docs/plugins/reference/vllm.md +0 -0
  958. package/docs/plugins/reference/voice-call.md +0 -0
  959. package/docs/plugins/reference/volcengine.md +0 -0
  960. package/docs/plugins/reference/voyage.md +0 -0
  961. package/docs/plugins/reference/vydra.md +0 -0
  962. package/docs/plugins/reference/web-readability.md +0 -0
  963. package/docs/plugins/reference/webhooks.md +0 -0
  964. package/docs/plugins/reference/whatsapp.md +0 -0
  965. package/docs/plugins/reference/workboard.md +0 -0
  966. package/docs/plugins/reference/xai.md +0 -0
  967. package/docs/plugins/reference/xiaomi.md +0 -0
  968. package/docs/plugins/reference/zai.md +0 -0
  969. package/docs/plugins/reference/zalo.md +0 -0
  970. package/docs/plugins/reference/zalouser.md +0 -0
  971. package/docs/plugins/reference.md +0 -0
  972. package/docs/plugins/sdk-agent-harness.md +0 -0
  973. package/docs/plugins/sdk-channel-inbound.md +0 -0
  974. package/docs/plugins/sdk-channel-ingress.md +0 -0
  975. package/docs/plugins/sdk-channel-message.md +0 -0
  976. package/docs/plugins/sdk-channel-outbound.md +0 -0
  977. package/docs/plugins/sdk-channel-plugins.md +0 -0
  978. package/docs/plugins/sdk-channel-turn.md +0 -0
  979. package/docs/plugins/sdk-entrypoints.md +0 -0
  980. package/docs/plugins/sdk-migration.md +0 -0
  981. package/docs/plugins/sdk-overview.md +0 -0
  982. package/docs/plugins/sdk-provider-plugins.md +0 -0
  983. package/docs/plugins/sdk-runtime.md +0 -0
  984. package/docs/plugins/sdk-setup.md +0 -0
  985. package/docs/plugins/sdk-subpaths.md +0 -0
  986. package/docs/plugins/sdk-testing.md +0 -0
  987. package/docs/plugins/skill-workshop.md +0 -0
  988. package/docs/plugins/tool-plugins.md +0 -0
  989. package/docs/plugins/voice-call.md +0 -0
  990. package/docs/plugins/webhooks.md +0 -0
  991. package/docs/plugins/workboard.md +0 -0
  992. package/docs/plugins/zalouser.md +0 -0
  993. package/docs/prose.md +0 -0
  994. package/docs/providers/alibaba.md +0 -0
  995. package/docs/providers/anthropic.md +0 -0
  996. package/docs/providers/arcee.md +0 -0
  997. package/docs/providers/azure-speech.md +0 -0
  998. package/docs/providers/bedrock-mantle.md +0 -0
  999. package/docs/providers/bedrock.md +0 -0
  1000. package/docs/providers/cerebras.md +0 -0
  1001. package/docs/providers/chutes.md +0 -0
  1002. package/docs/providers/claude-max-api-proxy.md +0 -0
  1003. package/docs/providers/cloudflare-ai-gateway.md +0 -0
  1004. package/docs/providers/comfy.md +0 -0
  1005. package/docs/providers/deepgram.md +0 -0
  1006. package/docs/providers/deepinfra.md +0 -0
  1007. package/docs/providers/deepseek.md +0 -0
  1008. package/docs/providers/ds4.md +0 -0
  1009. package/docs/providers/elevenlabs.md +0 -0
  1010. package/docs/providers/fal.md +0 -0
  1011. package/docs/providers/fireworks.md +0 -0
  1012. package/docs/providers/github-copilot.md +0 -0
  1013. package/docs/providers/gmi.md +0 -0
  1014. package/docs/providers/google.md +0 -0
  1015. package/docs/providers/gradium.md +0 -0
  1016. package/docs/providers/groq.md +0 -0
  1017. package/docs/providers/huggingface.md +0 -0
  1018. package/docs/providers/index.md +0 -0
  1019. package/docs/providers/inferrs.md +0 -0
  1020. package/docs/providers/inworld.md +0 -0
  1021. package/docs/providers/kilocode.md +0 -0
  1022. package/docs/providers/litellm.md +0 -0
  1023. package/docs/providers/lmstudio.md +0 -0
  1024. package/docs/providers/minimax.md +0 -0
  1025. package/docs/providers/mistral.md +0 -0
  1026. package/docs/providers/models.md +0 -0
  1027. package/docs/providers/moonshot.md +0 -0
  1028. package/docs/providers/novita.md +0 -0
  1029. package/docs/providers/nvidia.md +0 -0
  1030. package/docs/providers/ollama-cloud.md +0 -0
  1031. package/docs/providers/ollama.md +0 -0
  1032. package/docs/providers/openai.md +0 -0
  1033. package/docs/providers/opencode-go.md +0 -0
  1034. package/docs/providers/opencode.md +0 -0
  1035. package/docs/providers/openrouter.md +0 -0
  1036. package/docs/providers/perplexity-provider.md +0 -0
  1037. package/docs/providers/pixverse.md +0 -0
  1038. package/docs/providers/qianfan.md +0 -0
  1039. package/docs/providers/qwen-oauth.md +0 -0
  1040. package/docs/providers/qwen.md +0 -0
  1041. package/docs/providers/runway.md +0 -0
  1042. package/docs/providers/senseaudio.md +0 -0
  1043. package/docs/providers/sglang.md +0 -0
  1044. package/docs/providers/stepfun.md +0 -0
  1045. package/docs/providers/synthetic.md +0 -0
  1046. package/docs/providers/tencent.md +0 -0
  1047. package/docs/providers/together.md +0 -0
  1048. package/docs/providers/venice.md +0 -0
  1049. package/docs/providers/vercel-ai-gateway.md +0 -0
  1050. package/docs/providers/vllm.md +0 -0
  1051. package/docs/providers/volcengine.md +0 -0
  1052. package/docs/providers/vydra.md +0 -0
  1053. package/docs/providers/xai.md +0 -0
  1054. package/docs/providers/xiaomi.md +0 -0
  1055. package/docs/providers/zai.md +0 -0
  1056. package/docs/refactor/access.md +0 -0
  1057. package/docs/refactor/acp.md +0 -0
  1058. package/docs/refactor/canvas.md +0 -0
  1059. package/docs/refactor/database-first.md +0 -0
  1060. package/docs/refactor/ingress-core.md +0 -0
  1061. package/docs/reference/AGENTS.default.md +0 -0
  1062. package/docs/reference/RELEASING.md +0 -0
  1063. package/docs/reference/api-usage-costs.md +0 -0
  1064. package/docs/reference/application-modernization-plan.md +0 -0
  1065. package/docs/reference/code-mode.md +0 -0
  1066. package/docs/reference/credits.md +0 -0
  1067. package/docs/reference/device-models.md +0 -0
  1068. package/docs/reference/fengming-sdk-api-design.md +0 -0
  1069. package/docs/reference/full-release-validation.md +0 -0
  1070. package/docs/reference/memory-config.md +0 -0
  1071. package/docs/reference/prompt-caching.md +0 -0
  1072. package/docs/reference/release-performance-sweep.md +0 -0
  1073. package/docs/reference/rich-output-protocol.md +0 -0
  1074. package/docs/reference/rpc.md +0 -0
  1075. package/docs/reference/secret-placeholder-conventions.md +0 -0
  1076. package/docs/reference/secretref-credential-surface.md +0 -0
  1077. package/docs/reference/secretref-user-supplied-credentials-matrix.json +0 -0
  1078. package/docs/reference/session-management-compaction.md +0 -0
  1079. package/docs/reference/templates/AGENTS.dev.md +0 -0
  1080. package/docs/reference/templates/AGENTS.md +0 -0
  1081. package/docs/reference/templates/BOOT.md +0 -0
  1082. package/docs/reference/templates/BOOTSTRAP.md +0 -0
  1083. package/docs/reference/templates/CLAUDE.md +0 -0
  1084. package/docs/reference/templates/HEARTBEAT.md +0 -0
  1085. package/docs/reference/templates/IDENTITY.dev.md +0 -0
  1086. package/docs/reference/templates/IDENTITY.md +0 -0
  1087. package/docs/reference/templates/SOUL.dev.md +0 -0
  1088. package/docs/reference/templates/SOUL.md +0 -0
  1089. package/docs/reference/templates/TOOLS.dev.md +0 -0
  1090. package/docs/reference/templates/TOOLS.md +0 -0
  1091. package/docs/reference/templates/USER.dev.md +0 -0
  1092. package/docs/reference/templates/USER.md +0 -0
  1093. package/docs/reference/test.md +0 -0
  1094. package/docs/reference/token-use.md +0 -0
  1095. package/docs/reference/transcript-hygiene.md +0 -0
  1096. package/docs/reference/wizard.md +0 -0
  1097. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -0
  1098. package/docs/security/THREAT-MODEL-ATLAS.md +0 -0
  1099. package/docs/security/formal-verification.md +0 -0
  1100. package/docs/security/incident-response.md +0 -0
  1101. package/docs/security/network-proxy.md +0 -0
  1102. package/docs/snippets/plugin-publish/minimal-fengming.plugin.json +0 -0
  1103. package/docs/snippets/plugin-publish/minimal-package.json +0 -0
  1104. package/docs/specs/claw-supervisor.md +0 -0
  1105. package/docs/start/bootstrapping.md +0 -0
  1106. package/docs/start/docs-directory.md +0 -0
  1107. package/docs/start/fengming.md +0 -0
  1108. package/docs/start/getting-started.md +0 -0
  1109. package/docs/start/hubs.md +0 -0
  1110. package/docs/start/lore.md +0 -0
  1111. package/docs/start/onboarding-overview.md +0 -0
  1112. package/docs/start/onboarding.md +0 -0
  1113. package/docs/start/quickstart.md +0 -0
  1114. package/docs/start/setup.md +0 -0
  1115. package/docs/start/showcase.md +0 -0
  1116. package/docs/start/wizard-cli-automation.md +0 -0
  1117. package/docs/start/wizard-cli-reference.md +0 -0
  1118. package/docs/start/wizard.md +0 -0
  1119. package/docs/style.css +0 -0
  1120. package/docs/superpowers/specs/2026-04-22-tweakcn-custom-theme-import-design.md +0 -0
  1121. package/docs/tools/acp-agents-setup.md +0 -0
  1122. package/docs/tools/acp-agents.md +0 -0
  1123. package/docs/tools/agent-send.md +0 -0
  1124. package/docs/tools/apply-patch.md +0 -0
  1125. package/docs/tools/brave-search.md +0 -0
  1126. package/docs/tools/browser-control.md +0 -0
  1127. package/docs/tools/browser-linux-troubleshooting.md +0 -0
  1128. package/docs/tools/browser-login.md +0 -0
  1129. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +0 -0
  1130. package/docs/tools/browser.md +0 -0
  1131. package/docs/tools/btw.md +0 -0
  1132. package/docs/tools/capability-cookbook.md +0 -0
  1133. package/docs/tools/clawhub.md +0 -0
  1134. package/docs/tools/code-execution.md +0 -0
  1135. package/docs/tools/creating-skills.md +0 -0
  1136. package/docs/tools/diffs.md +0 -0
  1137. package/docs/tools/duckduckgo-search.md +0 -0
  1138. package/docs/tools/elevated.md +0 -0
  1139. package/docs/tools/exa-search.md +0 -0
  1140. package/docs/tools/exec-approvals-advanced.md +0 -0
  1141. package/docs/tools/exec-approvals.md +0 -0
  1142. package/docs/tools/exec.md +0 -0
  1143. package/docs/tools/firecrawl.md +0 -0
  1144. package/docs/tools/gemini-search.md +0 -0
  1145. package/docs/tools/goal.md +0 -0
  1146. package/docs/tools/grok-search.md +0 -0
  1147. package/docs/tools/image-generation.md +0 -0
  1148. package/docs/tools/index.md +0 -0
  1149. package/docs/tools/kimi-search.md +0 -0
  1150. package/docs/tools/llm-task.md +0 -0
  1151. package/docs/tools/lobster.md +0 -0
  1152. package/docs/tools/loop-detection.md +0 -0
  1153. package/docs/tools/media-overview.md +0 -0
  1154. package/docs/tools/minimax-search.md +0 -0
  1155. package/docs/tools/multi-agent-sandbox-tools.md +0 -0
  1156. package/docs/tools/music-generation.md +0 -0
  1157. package/docs/tools/ollama-search.md +0 -0
  1158. package/docs/tools/pdf.md +0 -0
  1159. package/docs/tools/perplexity-search.md +0 -0
  1160. package/docs/tools/plugin.md +0 -0
  1161. package/docs/tools/reactions.md +0 -0
  1162. package/docs/tools/searxng-search.md +0 -0
  1163. package/docs/tools/skills-config.md +0 -0
  1164. package/docs/tools/skills.md +0 -0
  1165. package/docs/tools/slash-commands.md +0 -0
  1166. package/docs/tools/steer.md +0 -0
  1167. package/docs/tools/subagents.md +0 -0
  1168. package/docs/tools/tavily.md +0 -0
  1169. package/docs/tools/thinking.md +0 -0
  1170. package/docs/tools/tokenjuice.md +0 -0
  1171. package/docs/tools/tool-search.md +0 -0
  1172. package/docs/tools/trajectory.md +0 -0
  1173. package/docs/tools/tts.md +0 -0
  1174. package/docs/tools/video-generation.md +0 -0
  1175. package/docs/tools/web-fetch.md +0 -0
  1176. package/docs/tools/web.md +0 -0
  1177. package/docs/tts.md +0 -0
  1178. package/docs/vps.md +0 -0
  1179. package/docs/web/control-ui.md +0 -0
  1180. package/docs/web/dashboard.md +0 -0
  1181. package/docs/web/index.md +0 -0
  1182. package/docs/web/tui.md +0 -0
  1183. package/docs/web/webchat.md +0 -0
  1184. package/npm-shrinkwrap.json +0 -0
  1185. package/package.json +2 -1
  1186. package/patches/.gitkeep +0 -0
  1187. package/patches/@agentclientprotocol__claude-agent-acp@0.37.0.patch +0 -0
  1188. package/pnpm-workspace.yaml +0 -0
  1189. package/scripts/crabbox-wrapper.mjs +0 -0
  1190. package/scripts/lib/official-external-channel-catalog.json +0 -0
  1191. package/scripts/lib/official-external-plugin-catalog.json +0 -0
  1192. package/scripts/lib/official-external-provider-catalog.json +0 -0
  1193. package/scripts/lib/package-dist-imports.mjs +0 -0
  1194. package/scripts/npm-runner.mjs +0 -0
  1195. package/scripts/postinstall-bundled-plugins.mjs +0 -0
  1196. package/scripts/preinstall-package-manager-warning.mjs +0 -0
  1197. package/scripts/prepare-git-hooks.mjs +0 -0
  1198. package/scripts/windows-cmd-helpers.mjs +0 -0
  1199. package/skills/canvas/SKILL.md +0 -0
  1200. package/skills/clawhub/SKILL.md +0 -0
  1201. package/skills/coding-agent/SKILL.md +0 -0
  1202. package/skills/diagram-maker/SKILL.md +0 -0
  1203. package/skills/diagram-maker/references/excalidraw-patterns.md +0 -0
  1204. package/skills/diagram-maker/references/svg-template.md +0 -0
  1205. package/skills/gemini/SKILL.md +0 -0
  1206. package/skills/gh-issues/SKILL.md +0 -0
  1207. package/skills/gifgrep/SKILL.md +0 -0
  1208. package/skills/github/SKILL.md +0 -0
  1209. package/skills/healthcheck/SKILL.md +0 -0
  1210. package/skills/mcporter/SKILL.md +0 -0
  1211. package/skills/meme-maker/SKILL.md +0 -0
  1212. package/skills/meme-maker/references/templates.json +0 -0
  1213. package/skills/meme-maker/scripts/meme.mjs +0 -0
  1214. package/skills/model-usage/SKILL.md +0 -0
  1215. package/skills/model-usage/references/codexbar-cli.md +0 -0
  1216. package/skills/model-usage/scripts/model_usage.py +0 -0
  1217. package/skills/model-usage/scripts/test_model_usage.py +0 -0
  1218. package/skills/nano-pdf/SKILL.md +0 -0
  1219. package/skills/node-connect/SKILL.md +0 -0
  1220. package/skills/node-inspect-debugger/SKILL.md +0 -0
  1221. package/skills/openai-whisper/SKILL.md +0 -0
  1222. package/skills/openai-whisper-api/SKILL.md +0 -0
  1223. package/skills/openai-whisper-api/scripts/transcribe.sh +0 -0
  1224. package/skills/oracle/SKILL.md +0 -0
  1225. package/skills/pyproject.toml +0 -0
  1226. package/skills/python-debugpy/SKILL.md +0 -0
  1227. package/skills/sag/SKILL.md +0 -0
  1228. package/skills/session-logs/SKILL.md +0 -0
  1229. package/skills/sherpa-onnx-tts/SKILL.md +0 -0
  1230. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +0 -0
  1231. package/skills/skill-creator/SKILL.md +0 -0
  1232. package/skills/skill-creator/license.txt +0 -0
  1233. package/skills/skill-creator/scripts/init_skill.py +0 -0
  1234. package/skills/skill-creator/scripts/package_skill.py +0 -0
  1235. package/skills/skill-creator/scripts/quick_validate.py +0 -0
  1236. package/skills/skill-creator/scripts/test_package_skill.py +0 -0
  1237. package/skills/skill-creator/scripts/test_quick_validate.py +0 -0
  1238. package/skills/spike/SKILL.md +0 -0
  1239. package/skills/summarize/SKILL.md +0 -0
  1240. package/skills/taskflow/SKILL.md +0 -0
  1241. package/skills/taskflow/examples/inbox-triage.lobster +0 -0
  1242. package/skills/taskflow/examples/pr-intake.lobster +0 -0
  1243. package/skills/taskflow-inbox-triage/SKILL.md +0 -0
  1244. package/skills/video-frames/SKILL.md +0 -0
  1245. package/skills/video-frames/scripts/frame.sh +0 -0
  1246. package/skills/voice-call/SKILL.md +0 -0
  1247. package/skills/weather/SKILL.md +0 -0
  1248. package/src/agents/templates/HEARTBEAT.md +0 -0
  1249. package/dist/agent-CWkIH3v1.js +0 -2
  1250. package/dist/api-DCUFwcas.js +0 -2
  1251. package/dist/api-DSeD5B7z.js +0 -3
  1252. package/dist/browser-cli-BxrEWwvH.js +0 -2
  1253. package/dist/browser-control-auth-BBaRGEk3.js +0 -2
  1254. package/dist/browser-profiles-H3Xe7NEC.js +0 -2
  1255. package/dist/cli-runner-CvssXH2O.js +0 -2
  1256. package/dist/commands-status-C5u5HskV.js +0 -3
  1257. package/dist/commands-status.runtime-C5u5HskV.js +0 -3
  1258. package/dist/control-ui/assets/i18n-BTde16Gb.js +0 -2
  1259. package/dist/control-ui/assets/skills-shared-C_ebnwLL.js +0 -11
  1260. package/dist/core-api-BkogMVij.js +0 -5
  1261. package/dist/core-api-CIJa6j2o.js +0 -2
  1262. package/dist/get-reply-from-config.runtime-BVdhrMjk.js +0 -2
  1263. package/dist/inbound-reply-dispatch-SvNWdZex.js +0 -2
  1264. package/dist/mcp-http-8cStZ_ms.js +0 -2
  1265. package/dist/register.subclis-BacAIeBl.js +0 -3
  1266. package/dist/reply.runtime-BVdhrMjk.js +0 -2
  1267. package/dist/routes-9RYPhQYJ.js +0 -2
  1268. package/dist/run-command-BAUjsRjg.js +0 -2
  1269. package/dist/runtime-channel-C1d5krpn.js +0 -2
  1270. package/dist/runtime-embedded-agent.runtime-DIvbnDcN.js +0 -2
  1271. package/dist/server-cron-Qh9Cr1TY.js +0 -2
  1272. package/dist/session-status.runtime-_xoS5n__.js +0 -2
  1273. package/dist/tui-43OCd_u0.js +0 -2
  1274. /package/dist/{acp-runtime-backend-DVjLQRXB.js → acp-runtime-backend-CHZtaM6t.js} +0 -0
  1275. /package/dist/{delegate-CTRmeStk.js → delegate-Dkj_5OvH.js} +0 -0
  1276. /package/dist/{dispatch-acp-45xWJUGs.js → dispatch-acp-GdaHNdvf.js} +0 -0
  1277. /package/dist/{heartbeat-runner-DKhQuw0b.js → heartbeat-runner-DVwbVyft.js} +0 -0
  1278. /package/dist/{library-Co1N3Z6B.js → library-B-1EZjtY.js} +0 -0
  1279. /package/dist/{run-session-state-BQjjRJ3A.js → run-session-state-C5YdQs7o.js} +0 -0
  1280. /package/dist/{session-subagent-reactivation-Sx6DAE6-.js → session-subagent-reactivation-H5Rdwkyy.js} +0 -0
@@ -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-B2f8TYRm.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-164wVojz.js","./channels-DoO-OrjQ.js","./cron-DTyzT3TV.js","./debug-DmFMvLdY.js","./instances-DWljwzyf.js","./logs-D7YSLRvz.js","./nodes-D1vIdMC3.js","./sessions-BqzDZWTD.js","./skills-CAvbfEkF.js","./workboard-DsePRAcc.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-B2f8TYRm.js`),__vite__mapDeps([0,1,2,3,4,5,6,7]),import.meta.url),_V),TV=dI(()=>hV(()=>import(`./activity-164wVojz.js`),__vite__mapDeps([8,1,4,5]),import.meta.url),_V),EV=dI(()=>hV(()=>import(`./channels-DoO-OrjQ.js`),__vite__mapDeps([9,1,5,6]),import.meta.url),_V),DV=dI(()=>hV(()=>import(`./cron-DTyzT3TV.js`),__vite__mapDeps([10,1,5]),import.meta.url),_V),OV=dI(()=>hV(()=>import(`./debug-DmFMvLdY.js`),__vite__mapDeps([11,1,5]),import.meta.url),_V),kV=dI(()=>hV(()=>import(`./instances-DWljwzyf.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-D1vIdMC3.js`),__vite__mapDeps([14,1,4,5]),import.meta.url),_V),MV=dI(()=>hV(()=>import(`./sessions-BqzDZWTD.js`),__vite__mapDeps([15,1,4,5]),import.meta.url),_V),NV=dI(()=>hV(()=>import(`./skills-CAvbfEkF.js`),__vite__mapDeps([16,1,4,5,7]),import.meta.url),_V),PV=dI(()=>hV(()=>import(`./workboard-DsePRAcc.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.1-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-nC-y5600.js.map