wednesdayai 0.4.12-dev.719 → 0.4.12-dev.721

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 (487) hide show
  1. package/dist/{acp-cli-BYoOiK6T.js → acp-cli-BWtNp40J.js} +2 -2
  2. package/dist/{acp-cli-dvFCSROw.js → acp-cli-DXVeP5by.js} +2 -2
  3. package/dist/{agent-scope-DxKPMu8w.js → agent-scope-cbxkoURo.js} +3 -3
  4. package/dist/{agent-turn-enqueue-DEStltEg.js → agent-turn-enqueue-CsHMHVsf.js} +4 -4
  5. package/dist/{agent-turn-enqueue-DzWOPhgy.js → agent-turn-enqueue-QcHb-Wlq.js} +4 -4
  6. package/dist/{agent-turn-execute-CzOC4mHw.js → agent-turn-execute-pkDSwyuf.js} +41 -30
  7. package/dist/{agent-turn-recovery-adapter-DnvjgbK0.js → agent-turn-recovery-adapter-CL4IrGUo.js} +1 -1
  8. package/dist/{agent-turn-recovery-adapter-CdLD3DuI.js → agent-turn-recovery-adapter-Dw5-XbMI.js} +1 -1
  9. package/dist/{agent-turn-runner-BEvwtTis.js → agent-turn-runner-CUoz_Fkl.js} +1 -1
  10. package/dist/{agent-turn-runner-BsxQBFRB.js → agent-turn-runner-CXf6g-6f.js} +5 -5
  11. package/dist/{agent-turn-runner-DpICdamt.js → agent-turn-runner-DHNZdQJB.js} +3 -3
  12. package/dist/{agent-turn-runner-C1u8sVfA.js → agent-turn-runner-DoHGgNPh.js} +1 -1
  13. package/dist/{agents-C61lzbyw.js → agents-TOaKn6gk.js} +5 -5
  14. package/dist/{agents.config-DAh5Ah1J.js → agents.config-96ueVlOH.js} +1 -1
  15. package/dist/{agents.config-BcD-ZJ0N.js → agents.config-DWMgN4qH.js} +1 -1
  16. package/dist/{api-key-rotation-Br7_jaAV.js → api-key-rotation-BMnyfyGD.js} +2 -2
  17. package/dist/{artifacts-QHme-vnS.js → artifacts-DUhYSSmK.js} +4 -4
  18. package/dist/{audio-preflight-CehYz7wU.js → audio-preflight-CO3ozqOb.js} +6 -6
  19. package/dist/{audio-preflight-B_5sTSyb.js → audio-preflight-ifCgpG3c.js} +27 -27
  20. package/dist/{audio-preflight-uatGs8bC.js → audio-preflight-p84ph4C7.js} +6 -6
  21. package/dist/{audio-transcription-runner-BvZFFknx.js → audio-transcription-runner-CsQR8LpS.js} +1 -1
  22. package/dist/{audio-transcription-runner-CJ8YdMv-.js → audio-transcription-runner-Gr8vN3AS.js} +1 -1
  23. package/dist/{audio-transcription-runner-XFfvRPXl.js → audio-transcription-runner-ipSQoPp8.js} +11 -11
  24. package/dist/{audit-UMAK8rQC.js → audit-8O6sjQPv.js} +6 -6
  25. package/dist/{audit-C0WHA5BX.js → audit-CzREkjwC.js} +6 -6
  26. package/dist/{auth-choice-CHzuLxTp.js → auth-choice-DtRePxUx.js} +2 -2
  27. package/dist/{auth-choice-BHU_G3if.js → auth-choice-s0pWvSbn.js} +2 -2
  28. package/dist/{banner-BAtbMrrp.js → banner-BwICuMvl.js} +1 -1
  29. package/dist/{browser-cli-DvjIut0z.js → browser-cli-Ci3F1b7y.js} +3 -3
  30. package/dist/{browser-cli-FTpdxTqL.js → browser-cli-NV-pdj3F.js} +3 -3
  31. package/dist/build-info.json +3 -3
  32. package/dist/bundled/boot-md/handler.js +58 -58
  33. package/dist/bundled/bootstrap-extra-files/handler.js +6 -6
  34. package/dist/bundled/command-logger/handler.js +2 -2
  35. package/dist/bundled/session-journal/handler.js +58 -58
  36. package/dist/bundled/session-memory/handler.js +58 -58
  37. package/dist/{call-Cl6Q0T5z.js → call-DFhcVchO.js} +1 -1
  38. package/dist/{call-BIVg1gmJ.js → call-PE59cW0J.js} +1 -1
  39. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  40. package/dist/{channel-activity-DNq7LYjU.js → channel-activity-BJHm_pDV.js} +3 -3
  41. package/dist/{channel-options-CsgHOF5l.js → channel-options-BmfLwNE6.js} +1 -1
  42. package/dist/{channel-options-DRnowLFK.js → channel-options-CurDeT7Z.js} +1 -1
  43. package/dist/{channels-cli-Cn1IUfM3.js → channels-cli-CZqlXMjZ.js} +28 -28
  44. package/dist/{channels-cli-BN4oTmr6.js → channels-cli-D2PB80Ed.js} +28 -28
  45. package/dist/{chrome-FHxGdLnd.js → chrome-DTJprCGv.js} +15 -15
  46. package/dist/{chunk-BhntPUH_.js → chunk-eNEsWhab.js} +3 -3
  47. package/dist/{clawbot-cli-C-wEI2Wc.js → clawbot-cli-BL_gdm6D.js} +5 -5
  48. package/dist/{clawbot-cli-DWWHmqlt.js → clawbot-cli-C91sysrP.js} +5 -5
  49. package/dist/cli/daemon-cli.js +1 -1
  50. package/dist/{cli-CFIRmNaZ.js → cli-DJUeQG1g.js} +22 -22
  51. package/dist/{cli-BGAvAUiU.js → cli-YKA_HQlq.js} +22 -22
  52. package/dist/{client-BbpMX08n.js → client-D7IpaFCL.js} +2 -1
  53. package/dist/{client-BMkNNUux.js → client-DN-SMVBn.js} +2 -1
  54. package/dist/{client-profiles-DP8BWND2.js → client-profiles-DEoACLX5.js} +1 -1
  55. package/dist/{client-profiles-BNQu4_Z_.js → client-profiles-soWN7eGC.js} +1 -1
  56. package/dist/{command-queue-zXu22yak.js → command-queue-B3_VRNOr.js} +8 -2
  57. package/dist/{command-queue-CmpLmuvI.js → command-queue-Bjb4nYXi.js} +8 -2
  58. package/dist/{command-queue-DtybAhHH.js → command-queue-Bn2PHabT.js} +8 -2
  59. package/dist/{command-queue-SzKgkaS6.js → command-queue-smA8JaO_.js} +9 -3
  60. package/dist/{command-registry-DBfEAwIt.js → command-registry-Dok3-b8T.js} +12 -12
  61. package/dist/{command-secret-targets-DtDJB3vv.js → command-secret-targets-BAFcvtYe.js} +2 -2
  62. package/dist/{command-secret-targets-B54n8F_3.js → command-secret-targets-CJ1czw_Q.js} +2 -2
  63. package/dist/{commands-registry-DC0fovy_.js → commands-registry-DdQg21ct.js} +2 -2
  64. package/dist/{completion-cli-BfRsix3J.js → completion-cli-Ctg9QIDB.js} +2 -2
  65. package/dist/{completion-cli-L5YP0rxV.js → completion-cli-DzgbSYNf.js} +1 -1
  66. package/dist/{config-cli-dgRsXbD3.js → config-cli-BUrIABmo.js} +1 -1
  67. package/dist/{config-cli-D4Gxd0pm.js → config-cli-Bp3NVXJ8.js} +1 -1
  68. package/dist/config.js +9 -9
  69. package/dist/{configure-DtRyMLwO.js → configure-CAdfZJx3.js} +6 -6
  70. package/dist/{configure-BN-JNKf7.js → configure-CFjjPHas.js} +6 -6
  71. package/dist/{cron-cli-_Mwn7mzJ.js → cron-cli-BuVrA_FU.js} +3 -3
  72. package/dist/{cron-cli-BuO3qskK.js → cron-cli-CEOGOJUA.js} +3 -3
  73. package/dist/{daemon-cli-YmPcKhvo.js → daemon-cli-BTld-maF.js} +2 -2
  74. package/dist/{daemon-cli-CiPY543O.js → daemon-cli-D874Hxry.js} +2 -2
  75. package/dist/daemon-cli.js +2 -1
  76. package/dist/{deliver-Aw7d03gL.js → deliver-BLp1Q7uO.js} +1 -1
  77. package/dist/{deliver-CXqNQ8yi.js → deliver-CVWbwPkb.js} +24 -24
  78. package/dist/{deliver-D37woOwV.js → deliver-rLn-23ud.js} +1 -1
  79. package/dist/{devices-cli-HXNfviPB.js → devices-cli-CVrx_5o-.js} +2 -2
  80. package/dist/{devices-cli-CxSEOWZs.js → devices-cli-PIMtgiCQ.js} +2 -2
  81. package/dist/{diagnostic-Cid_Tw67.js → diagnostic-85mWzvQi.js} +1 -1
  82. package/dist/{diagnostic-Bbg-zObh.js → diagnostic-DI-K8155.js} +5 -5
  83. package/dist/{diagnostic-lG00b_zg.js → diagnostic-u64kcpDQ.js} +1 -1
  84. package/dist/{dm-policy-shared-BJNH9gNN.js → dm-policy-shared-CV1uWhMc.js} +1 -1
  85. package/dist/{doctor-completion-ChF4A40n.js → doctor-completion-Cfe2nTpN.js} +1 -1
  86. package/dist/{doctor-completion-DIFx6d6S.js → doctor-completion-CpGKbe63.js} +1 -1
  87. package/dist/entry.js +2 -2
  88. package/dist/{exec-approvals-cli-BAJ3sxzP.js → exec-approvals-cli-BShAvkW4.js} +4 -4
  89. package/dist/{exec-approvals-cli-DIUYxvM0.js → exec-approvals-cli-CABBuuEP.js} +4 -4
  90. package/dist/extensionAPI.js +3 -3
  91. package/dist/{fetch-BoHKSk-O.js → fetch-BzXaK9px.js} +8 -8
  92. package/dist/{fetch-guard-TJjLK0FV.js → fetch-guard-0mkjBgri.js} +3 -3
  93. package/dist/{frontmatter-saAwiKEb.js → frontmatter-PMByWrfP.js} +5 -5
  94. package/dist/{fs-safe-LRpYbPaA.js → fs-safe-DwICJjkN.js} +4 -4
  95. package/dist/{gateway-cli-BJ9wa3Hc.js → gateway-cli-3YUOWIal.js} +415 -169
  96. package/dist/{gateway-cli-CVnksdlt.js → gateway-cli-CDCwUJ0Z.js} +415 -169
  97. package/dist/{gateway-rpc-DNsG0xAN.js → gateway-rpc-Bs4EcgS4.js} +1 -1
  98. package/dist/{gateway-rpc-BeRn5nUX.js → gateway-rpc-DOfMq6W1.js} +1 -1
  99. package/dist/{github-copilot-token-zGOMIGSh.js → github-copilot-token-WSjo05vB.js} +7 -7
  100. package/dist/{health-Cxv6ou16.js → health-B5jHSu9i.js} +3 -3
  101. package/dist/{health-Q4hCJ8O2.js → health-BEgp6PEF.js} +3 -3
  102. package/dist/{hooks-cli-ChZY2urb.js → hooks-cli-D1_UuIh4.js} +24 -24
  103. package/dist/{hooks-cli-DOHX--ha.js → hooks-cli-Dy5LfGKt.js} +24 -24
  104. package/dist/{image-ops-D_fm2PuR.js → image-ops-O8pHxo7i.js} +1 -1
  105. package/dist/index.js +26 -26
  106. package/dist/{installs-Du8n8Do9.js → installs-4lGALZOo.js} +1 -1
  107. package/dist/{installs-78zhoWuO.js → installs-puN7yKHH.js} +1 -1
  108. package/dist/{ir-C4MMLUJr.js → ir-fzpdYPWw.js} +5 -5
  109. package/dist/{legacy-names-vLJrYADD.js → legacy-names-CLlrMq8r.js} +1 -1
  110. package/dist/llm-slug-generator.js +58 -58
  111. package/dist/{logger-a0-zAY5a.js → logger-DNehzD_s.js} +1 -1
  112. package/dist/{logs-cli-BrL9UDGB.js → logs-cli-CrUZySOS.js} +3 -3
  113. package/dist/{logs-cli-BdR6-Q3U.js → logs-cli-CwN6ZrMz.js} +3 -3
  114. package/dist/{manager-DdA_cy40.js → manager-DH-MILAU.js} +12 -12
  115. package/dist/{markdown-tables-Dd7jV1JF.js → markdown-tables-UWspJNAH.js} +2 -2
  116. package/dist/{memory-cli-DZyEfnsr.js → memory-cli-CqS6VXEu.js} +1 -1
  117. package/dist/{memory-cli-D_89Y9nb.js → memory-cli-DVqLwNhN.js} +1 -1
  118. package/dist/{model-selection-CdZITU0t.js → model-selection-9qbqwsOT.js} +86 -86
  119. package/dist/{models-BbhdUY5g.js → models-Kq9m-LfF.js} +3 -3
  120. package/dist/{models-cli-BekoSHw2.js → models-cli-B4wVcMjJ.js} +23 -23
  121. package/dist/{models-cli-BmL2dpSq.js → models-cli-dyUiDMqX.js} +22 -22
  122. package/dist/{node-cli-BVgH-DXq.js → node-cli-DGi3DELS.js} +4 -4
  123. package/dist/{node-cli-BTywy8AL.js → node-cli-Dm9lnwVF.js} +4 -4
  124. package/dist/{node-command-policy-B9A0wAU6.js → node-command-policy-6yjbNtx-.js} +1 -1
  125. package/dist/{node-command-policy-wwMY6dIH.js → node-command-policy-C1Fy9dcA.js} +1 -1
  126. package/dist/{nodes-cli-OzWTp207.js → nodes-cli-Bp2RePXd.js} +3 -3
  127. package/dist/{nodes-cli-D9vz6Yaa.js → nodes-cli-CLzaLC3L.js} +3 -3
  128. package/dist/{npm-pack-install-opyKYSmS.js → npm-pack-install-BgBpeTJk.js} +1 -1
  129. package/dist/{npm-pack-install-B-cOWuiF.js → npm-pack-install-Dlm0MIZy.js} +1 -1
  130. package/dist/{npm-resolution-6WKQ6nBu.js → npm-resolution-DWE5khjC.js} +2 -2
  131. package/dist/{npm-resolution-51BBOWpQ.js → npm-resolution-Ey8dK3VI.js} +2 -2
  132. package/dist/{onboard-CnRiqboN.js → onboard-CneU0GqJ.js} +3 -3
  133. package/dist/{onboard-channels-DAwHVQ1P.js → onboard-channels-B1oC1rop.js} +3 -3
  134. package/dist/{onboard-channels-DYRTySsa.js → onboard-channels-Bm2XVN3C.js} +3 -3
  135. package/dist/{onboard-helpers-ziqfw3UR.js → onboard-helpers-DLBTH9b_.js} +1 -1
  136. package/dist/{onboard-helpers-BgbRKH4z.js → onboard-helpers-DNbkQX5v.js} +1 -1
  137. package/dist/{onboard-remote-BsnRgDQj.js → onboard-remote-DUy7Ew-K.js} +1 -1
  138. package/dist/{onboard-remote-NW_cPnaV.js → onboard-remote-DsBkNMeO.js} +1 -1
  139. package/dist/{onboard-skills-DwbAJ4nt.js → onboard-skills-D3L4yX2A.js} +1 -1
  140. package/dist/{onboard-skills-DCYqOaTS.js → onboard-skills-DX_x-MfC.js} +1 -1
  141. package/dist/{onboard-Cj-sLY2K.js → onboard-trNO818c.js} +3 -3
  142. package/dist/{onboarding-CujUbWy2.js → onboarding-BKoaWOxQ.js} +7 -7
  143. package/dist/{onboarding-DidWWI3X.js → onboarding-R2m4j7Dp.js} +7 -7
  144. package/dist/{onboarding.finalize-CDE1nAu8.js → onboarding.finalize-B6K3hYJZ.js} +28 -28
  145. package/dist/{onboarding.finalize-DTqRxVZH.js → onboarding.finalize-C0X_xaHh.js} +27 -27
  146. package/dist/{onboarding.gateway-config-DOvEzkIo.js → onboarding.gateway-config-CFRbyVyW.js} +4 -4
  147. package/dist/{onboarding.gateway-config-SrBY4Yem.js → onboarding.gateway-config-DKLUe3Ul.js} +4 -4
  148. package/dist/{operator-commands-Ct0WXISe.js → operator-commands-BmGo9Ngv.js} +2 -2
  149. package/dist/{operator-commands-Bfd55UfE.js → operator-commands-EsKoI4yV.js} +2 -2
  150. package/dist/{outbound-attachment-CqtMGpsJ.js → outbound-attachment-DVKqk30B.js} +2 -2
  151. package/dist/{outbound-message-hooks-RBQbGzGm.js → outbound-message-hooks-S_VhlJs3.js} +4 -4
  152. package/dist/{path-alias-guards-Zj-NwKjV.js → path-alias-guards-Cd5yHmTq.js} +1 -1
  153. package/dist/{paths-C6TxBCvO.js → paths-Cvc9EM8Y.js} +5 -5
  154. package/dist/{pi-embedded-B6sr5IdC.js → pi-embedded-B7d9LrI1.js} +16 -4
  155. package/dist/{pi-embedded-helpers-BYLOFsUc.js → pi-embedded-helpers-5JApWu7A.js} +24 -24
  156. package/dist/{pi-embedded-helpers-BAjtRn7m.js → pi-embedded-helpers-C9XqX-Jq.js} +1 -1
  157. package/dist/{pi-embedded-helpers-CPorV-Mk.js → pi-embedded-helpers-DIUrv2Ua.js} +1 -1
  158. package/dist/{pi-embedded-B9bOSjfE.js → pi-embedded-maiK_yr9.js} +183 -171
  159. package/dist/{pi-embedded-recovery-adapter-Cs1EJElw.js → pi-embedded-recovery-adapter-8xq2SINa.js} +8 -8
  160. package/dist/{pi-embedded-recovery-adapter-B8Goyik3.js → pi-embedded-recovery-adapter-BHTdeEKa.js} +8 -8
  161. package/dist/{pi-embedded-recovery-adapter-swbNIWgT.js → pi-embedded-recovery-adapter-DPjgp8q4.js} +2 -2
  162. package/dist/{pi-embedded-recovery-adapter-ZPyX9YC1.js → pi-embedded-recovery-adapter-DytV4fjp.js} +2 -2
  163. package/dist/{pi-embedded-utils-CT_f_S3Y.js → pi-embedded-utils-BV_Dtzrw.js} +1 -1
  164. package/dist/{pi-embedded-utils-lp-U3XQ9.js → pi-embedded-utils-BetZbS6i.js} +1 -1
  165. package/dist/{pi-embedded-utils-DOtaZ7KV.js → pi-embedded-utils-kHMmP2Xh.js} +3 -3
  166. package/dist/{pi-model-discovery-B9KKtGuw.js → pi-model-discovery-CsC6yTDG.js} +7 -7
  167. package/dist/{pi-tools.policy-r9H_A-NQ.js → pi-tools.policy-B7YiM0PW.js} +1 -1
  168. package/dist/{plugin-registry-CwGfmKsn.js → plugin-registry-AEemJBCl.js} +1 -1
  169. package/dist/{plugin-registry-EHKfjAoe.js → plugin-registry-BjZ0q-dW.js} +1 -1
  170. package/dist/plugin-sdk/{agent-scope-BLF4nZUv.js → agent-scope-BYp_CjdU.js} +2 -2
  171. package/dist/plugin-sdk/{agent-turn-execute-BVPDW02i.js → agent-turn-execute-BRJa_EBt.js} +12 -12
  172. package/dist/plugin-sdk/agent-turn-execute-lFEMcNl2.js +61 -0
  173. package/dist/plugin-sdk/{agent-turn-runner-DDIT9POj.js → agent-turn-runner-CqIBwx4o.js} +3 -3
  174. package/dist/plugin-sdk/agent-turn-runner-LfHz7Qc1.js +11 -0
  175. package/dist/plugin-sdk/{agent-turn-runner-DjK-LdTA.js → agent-turn-runner-nXQCZaSU.js} +6 -6
  176. package/dist/plugin-sdk/{api-key-rotation-XDUKz2gd.js → api-key-rotation-CDNf_4cI.js} +2 -2
  177. package/dist/plugin-sdk/{artifacts-HAYpGlG1.js → artifacts-BMLMg3MG.js} +1 -1
  178. package/dist/plugin-sdk/{audio-preflight-Bi8RI9zM.js → audio-preflight-BVO3xBbT.js} +5 -5
  179. package/dist/plugin-sdk/{audio-preflight-BS29OWk3.js → audio-preflight-BmKL6FNP.js} +2 -2
  180. package/dist/plugin-sdk/audio-preflight-DlGohKMs.js +28 -0
  181. package/dist/plugin-sdk/{audio-transcription-runner-CGgNZVZv.js → audio-transcription-runner-DXiOiQMw.js} +1 -1
  182. package/dist/plugin-sdk/{audio-transcription-runner-BNafitZj.js → audio-transcription-runner-TBjJv_mZ.js} +10 -10
  183. package/dist/plugin-sdk/{auth-profiles-CCJQoedi.js → auth-profiles-DHZjW8Vk.js} +5 -5
  184. package/dist/plugin-sdk/{channel-activity-BKwRzYJb.js → channel-activity-Dr4PYej7.js} +3 -3
  185. package/dist/plugin-sdk/{chrome-D0eLSqkP.js → chrome-BDy1zYAr.js} +4 -4
  186. package/dist/plugin-sdk/{chrome-CT_6RvJg.js → chrome-DDIL8pIX.js} +8 -8
  187. package/dist/plugin-sdk/{chunk-DI-5pBck.js → chunk-BTSnO1wn.js} +6 -6
  188. package/dist/plugin-sdk/{chunk-CDvvv9SU.js → chunk-DGQdf0JN.js} +3 -3
  189. package/dist/plugin-sdk/{command-detection-WNHSrul-.js → command-detection-O-osZdkd.js} +99 -87
  190. package/dist/plugin-sdk/command-queue-BYvVRYdf.js +13 -0
  191. package/dist/plugin-sdk/{command-queue-DH8k55DC.js → command-queue-Cveon04f.js} +9 -3
  192. package/dist/plugin-sdk/{command-queue-CHiQj9Ji.js → command-queue-d5XPm8KU.js} +7 -2
  193. package/dist/plugin-sdk/{commands-registry-Do_g2It_.js → commands-registry-8sy0wsK_.js} +6 -6
  194. package/dist/plugin-sdk/{commands-registry-DpLk11E7.js → commands-registry-N6f_lsxF.js} +2 -2
  195. package/dist/plugin-sdk/{config-CQNfmIC8.js → config-Biusjzx-.js} +7 -7
  196. package/dist/plugin-sdk/{deliver-_UyigkEK.js → deliver-BD3gpFAY.js} +1 -1
  197. package/dist/plugin-sdk/{deliver-L6eu6zyG.js → deliver-BgHA8c9F.js} +11 -11
  198. package/dist/plugin-sdk/deliver-DBCz1GqU.js +32 -0
  199. package/dist/plugin-sdk/{deliver-DuDcszu1.js → deliver-DZoYhDxC.js} +3 -3
  200. package/dist/plugin-sdk/{diagnostic-Dk57KVjE.js → diagnostic-BhLorIrS.js} +1 -1
  201. package/dist/plugin-sdk/{diagnostic-DfxuMWHd.js → diagnostic-Bni_8VyY.js} +7 -7
  202. package/dist/plugin-sdk/{diagnostic-C7lPoqyv.js → diagnostic-D6hSjxiv.js} +5 -5
  203. package/dist/plugin-sdk/{fetch-guard-CZT8FU1i.js → fetch-guard-C1a1KfEb.js} +3 -3
  204. package/dist/plugin-sdk/{fs-safe-B0JgGdXa.js → fs-safe-CbZ6uRVv.js} +3 -3
  205. package/dist/plugin-sdk/{hook-runner-global-WRI53ibi.js → hook-runner-global-BvxlnAyu.js} +3 -3
  206. package/dist/plugin-sdk/{image-ops-kuILYHZv.js → image-ops-DY_SZfXk.js} +1 -1
  207. package/dist/plugin-sdk/index.js +54 -54
  208. package/dist/plugin-sdk/{ir-Bm7oqkwT.js → ir-BNohi6ZW.js} +5 -5
  209. package/dist/plugin-sdk/{local-roots-D-CHzVr1.js → local-roots-Bm7nDW20.js} +7 -7
  210. package/dist/plugin-sdk/{logger-BSK-0Yjx.js → logger-D6KsqbNW.js} +1 -1
  211. package/dist/plugin-sdk/{manager-D2jffdjH.js → manager-B_vK9MbM.js} +8 -8
  212. package/dist/plugin-sdk/manager-ByaW_O4Y.js +16 -0
  213. package/dist/plugin-sdk/{markdown-tables-DIWQQ2W1.js → markdown-tables-G4vK24xc.js} +2 -2
  214. package/dist/plugin-sdk/markdown-tables-J4hZ7eWU.js +10 -0
  215. package/dist/plugin-sdk/{outbound-attachment-CtKKNyms.js → outbound-attachment-Cw7T2Mrt.js} +2 -2
  216. package/dist/plugin-sdk/{path-alias-guards-CHfCMaeX.js → path-alias-guards-CVybi_GQ.js} +1 -1
  217. package/dist/plugin-sdk/{pi-embedded-helpers-BRymkO_1.js → pi-embedded-helpers-B_jgacW8.js} +11 -11
  218. package/dist/plugin-sdk/{pi-embedded-helpers-CELD3Ns3.js → pi-embedded-helpers-D74AHWBs.js} +3 -3
  219. package/dist/plugin-sdk/{pi-embedded-utils-BHmc3RVS.js → pi-embedded-utils-DOXEm_H8.js} +3 -3
  220. package/dist/plugin-sdk/{pi-embedded-utils-AFQ-oCFM.js → pi-embedded-utils-DQaOun1y.js} +1 -1
  221. package/dist/plugin-sdk/{pi-model-discovery-6BBajZds.js → pi-model-discovery-DWUrLRLg.js} +1 -1
  222. package/dist/plugin-sdk/{pi-model-discovery-4X7_2_nP.js → pi-model-discovery-DWw1ReX-.js} +6 -6
  223. package/dist/plugin-sdk/provider-dispatcher-CC6PgYPM.js +61 -0
  224. package/dist/plugin-sdk/{provider-dispatcher-D7UK3G8K.js → provider-dispatcher-NB8R-FyS.js} +12 -12
  225. package/dist/plugin-sdk/provider-image-B_dJDOl5.js +22 -0
  226. package/dist/plugin-sdk/{provider-image-DBye3Ln5.js → provider-image-CEQrHWYz.js} +5 -5
  227. package/dist/plugin-sdk/{provider-image-CbZOYl0b.js → provider-image-Cy9HRMER.js} +1 -1
  228. package/dist/plugin-sdk/{provider-image-Bumd1GBG.js → provider-image-g3vmjlkZ.js} +4 -4
  229. package/dist/plugin-sdk/provider-media-understanding.js +7 -7
  230. package/dist/plugin-sdk/{proxy-DJ2nskkh.js → proxy-BWc9guJs.js} +1 -1
  231. package/dist/plugin-sdk/proxy-DwbYzxBy.js +7 -0
  232. package/dist/plugin-sdk/{proxy-fetch-CuQpjpkI.js → proxy-fetch-BYkGxQnh.js} +1 -1
  233. package/dist/plugin-sdk/{pw-ai-BJrhPMHJ.js → pw-ai-DQv6Xhce.js} +10 -10
  234. package/dist/plugin-sdk/{pw-ai-hVucoF_I.js → pw-ai-DlM8D_uP.js} +1 -1
  235. package/dist/plugin-sdk/{qmd-manager-DhW_frb3.js → qmd-manager-CpV0SFnY.js} +8 -8
  236. package/dist/plugin-sdk/{query-expansion-NpBeKA8F.js → query-expansion-CwmHvvV_.js} +3 -3
  237. package/dist/plugin-sdk/{recorder-DdbAQ2HO.js → recorder-BXZMRSjO.js} +4 -4
  238. package/dist/plugin-sdk/{redact-CUjmZn2Y.js → redact-C88Ryyfs.js} +1 -1
  239. package/dist/plugin-sdk/replies-B9uDLFOE.js +25 -0
  240. package/dist/plugin-sdk/{replies-Dw3jvqpR.js → replies-l2hZAzbt.js} +4 -4
  241. package/dist/plugin-sdk/{reply-directives-BS8Ge06Z.js → reply-directives-BwxzQXmX.js} +2 -2
  242. package/dist/plugin-sdk/reply-prefix-BQMEQam1.js +7 -0
  243. package/dist/plugin-sdk/{reply-prefix-Dt1hESHJ.js → reply-prefix-qLQRxqrf.js} +1 -1
  244. package/dist/plugin-sdk/{resolve-route-BpLuk-wC.js → resolve-route-50KoArP9.js} +4 -4
  245. package/dist/plugin-sdk/{resolve-route-DiQTL1qI.js → resolve-route-6v1HVvWk.js} +6 -6
  246. package/dist/plugin-sdk/{runs-CPWQbljV.js → runs-B4G4Txj3.js} +3 -3
  247. package/dist/plugin-sdk/runs-BQhYekhr.js +25 -0
  248. package/dist/plugin-sdk/{runs-D6fAvItC.js → runs-CiohhBb8.js} +7 -7
  249. package/dist/plugin-sdk/{runs-B3DB63tB.js → runs-Dzlj-BO5.js} +5 -5
  250. package/dist/plugin-sdk/{send-CpXGZgrS.js → send-BMSqETcU.js} +6 -6
  251. package/dist/plugin-sdk/send-CeWqZTK0.js +23 -0
  252. package/dist/plugin-sdk/{send-BDwTyH6I.js → send-Cv2CGnsK.js} +8 -8
  253. package/dist/plugin-sdk/{send-Ce2XBaKF.js → send-Cx6gHjnA.js} +6 -6
  254. package/dist/plugin-sdk/send-CzcKgBBf.js +25 -0
  255. package/dist/plugin-sdk/{send-R0HB1-l-.js → send-DG4MQPPm.js} +13 -13
  256. package/dist/plugin-sdk/{send-C28pxKhC.js → send-DHNKlQPv.js} +2 -2
  257. package/dist/plugin-sdk/{send-CE_6VOiQ.js → send-DM6RpDCL.js} +7 -7
  258. package/dist/plugin-sdk/{send-GMYUhBtJ.js → send-DO0C4Uva.js} +19 -19
  259. package/dist/plugin-sdk/send-Dvna5ey-.js +27 -0
  260. package/dist/plugin-sdk/{send-DE9YP1gQ.js → send-Tg5PT6ci.js} +1 -1
  261. package/dist/plugin-sdk/send-xPV0QIjh.js +24 -0
  262. package/dist/plugin-sdk/{session-meta-BU2WXD0N.js → session-meta-CiqJP0pO.js} +2 -2
  263. package/dist/plugin-sdk/session-meta-n4SCcAbJ.js +10 -0
  264. package/dist/plugin-sdk/skill-commands-BOV3NIbU.js +14 -0
  265. package/dist/plugin-sdk/{skill-commands-BYfWIPfV.js → skill-commands-CE_SkRQk.js} +5 -5
  266. package/dist/plugin-sdk/{skills-BuJjEYto.js → skills-CjW6uGTa.js} +6 -6
  267. package/dist/plugin-sdk/src/auto-reply/reply/agent-runner-execution.d.ts +2 -0
  268. package/dist/plugin-sdk/src/config/talk.d.ts +0 -4
  269. package/dist/plugin-sdk/src/gateway/storage-startup-gate.d.ts +28 -8
  270. package/dist/plugin-sdk/src/process/command-queue.d.ts +3 -0
  271. package/dist/plugin-sdk/src/talk/realtime-transcription-provider-types.d.ts +4 -1
  272. package/dist/plugin-sdk/src/talk/streaming-speech-provider-types.d.ts +2 -0
  273. package/dist/plugin-sdk/{ssrf-DiAz1Z_z.js → ssrf-BUCEDxp5.js} +2 -2
  274. package/dist/plugin-sdk/{store-Bl3Yjf_w.js → store-yBNTHg3N.js} +2 -2
  275. package/dist/plugin-sdk/{subagent-registry-Bxwla-0-.js → subagent-registry-B5xaoVWq.js} +12 -12
  276. package/dist/plugin-sdk/subagent-registry-BiarU1g8.js +61 -0
  277. package/dist/plugin-sdk/{subsystem-B2x33s9h.js → subsystem-CUUKL6Fr.js} +4 -4
  278. package/dist/plugin-sdk/{tables-CTmQQyfU.js → tables-DKYi6grj.js} +1 -1
  279. package/dist/plugin-sdk/testing.js +12 -12
  280. package/dist/plugin-sdk/{tokens-DxJSOoJn.js → tokens-ysZUkYZZ.js} +1 -1
  281. package/dist/plugin-sdk/{tool-loop-detection-Buouaxew.js → tool-loop-detection-LsvZ1dIY.js} +1 -1
  282. package/dist/plugin-sdk/{tools-iyXmO6p1.js → tools-Sk-IqHBP.js} +46 -34
  283. package/dist/plugin-sdk/{user-run-recording-juCW_uQ-.js → user-run-recording-BMaK7jNR.js} +2 -2
  284. package/dist/plugin-sdk/user-run-recording-DiKcNdjn.js +11 -0
  285. package/dist/{plugins-cli-CmYpruM_.js → plugins-cli-CjgLVUxJ.js} +27 -27
  286. package/dist/{plugins-cli-B0I1Xkrz.js → plugins-cli-Di9VhU7J.js} +27 -27
  287. package/dist/{program-CA1rDqtK.js → program-Dus5j4vB.js} +28 -28
  288. package/dist/{program-context-BCo6By7P.js → program-context-CQrxOpXH.js} +36 -36
  289. package/dist/{prompt-select-styled-cL1dmYcO.js → prompt-select-styled-D1Kc5Amb.js} +9 -9
  290. package/dist/{prompt-select-styled-BAmwLkut.js → prompt-select-styled-D3Li9uy2.js} +9 -9
  291. package/dist/{provider-image-CIpRvhkS.js → provider-image-BICZzOki.js} +1 -1
  292. package/dist/{provider-image-D9B_J5Ys.js → provider-image-Bsivqxw8.js} +1 -1
  293. package/dist/{provider-image-BllyLBJM.js → provider-image-Cb4z6zUu.js} +5 -5
  294. package/dist/{proxy-fWL7CKDP.js → proxy-C9sq6M-h.js} +1 -1
  295. package/dist/{proxy-env-CzGKpJY_.js → proxy-env-i0jn5uxB.js} +2 -2
  296. package/dist/{proxy-fetch-DCI0KuH6.js → proxy-fetch-CK5AQAYw.js} +1 -1
  297. package/dist/{push-apns-Bhf8qK68.js → push-apns-BcZzA03X.js} +2 -2
  298. package/dist/{push-apns-BmrddV2R.js → push-apns-qUm5cL9P.js} +2 -2
  299. package/dist/{pw-ai-CKjrjwfw.js → pw-ai-Ci1kADkJ.js} +1 -1
  300. package/dist/{pw-ai-Cd08hlBj.js → pw-ai-DT3fj2Kt.js} +1 -1
  301. package/dist/{pw-ai-CXSJw34w.js → pw-ai-DziGw6Jy.js} +14 -14
  302. package/dist/{qmd-manager-BwZ0V5fL.js → qmd-manager-p036XU01.js} +10 -10
  303. package/dist/{qr-cli-BCIfpQUF.js → qr-cli-BE3QWMP3.js} +3 -3
  304. package/dist/{qr-cli-BTOCXqFJ.js → qr-cli-DhJ37DZK.js} +3 -3
  305. package/dist/{query-expansion-31VWpPCz.js → query-expansion-30x7RlZY.js} +5 -5
  306. package/dist/{reconcile-bundled-Bl6XpmI5.js → reconcile-bundled-CAKTvY-C.js} +1 -1
  307. package/dist/{reconcile-bundled-TswjG3xv.js → reconcile-bundled-DJKaKSgk.js} +1 -1
  308. package/dist/{recorder-DNRxe9C8.js → recorder-C_ViZLf1.js} +4 -4
  309. package/dist/{recovery-adapter-DyPV7syS.js → recovery-adapter-BT12fVyO.js} +8 -8
  310. package/dist/{recovery-adapter-DW0R_vFE.js → recovery-adapter-DF25-zSH.js} +1 -1
  311. package/dist/{recovery-adapter-DOizlZvv.js → recovery-adapter-Df87xZQp.js} +8 -8
  312. package/dist/{recovery-adapter-mi8jbyvy.js → recovery-adapter-okaOo6tO.js} +1 -1
  313. package/dist/{redact-DZne_lu8.js → redact-BOHmCPP_.js} +1 -1
  314. package/dist/{register.agent-B3BSgQcW.js → register.agent-BCNYDn8G.js} +27 -27
  315. package/dist/{register.agent-CSHtI9uN.js → register.agent-CqGVQ2N1.js} +28 -28
  316. package/dist/{register.configure-CYwDM9d3.js → register.configure-CPTDt8eL.js} +30 -30
  317. package/dist/{register.configure-Cu4CPpm4.js → register.configure-DxdNTBIk.js} +30 -30
  318. package/dist/{register.maintenance-BXiHFIyG.js → register.maintenance-BOCv2N1t.js} +28 -28
  319. package/dist/{register.maintenance-C6vjRY-I.js → register.maintenance-CFjB31Z5.js} +29 -29
  320. package/dist/{register.message-BsBClRov.js → register.message-CiT53tgD.js} +23 -23
  321. package/dist/{register.message-DNpBTvto.js → register.message-dqrK9EsG.js} +23 -23
  322. package/dist/{register.onboard-BKQLGJhh.js → register.onboard-BKoeYDAF.js} +5 -5
  323. package/dist/{register.onboard-t_7lOkRu.js → register.onboard-xtBBqce9.js} +5 -5
  324. package/dist/{register.setup-B7QHn0Qv.js → register.setup-qHCNX6LC.js} +5 -5
  325. package/dist/{register.setup-DEg7fSPZ.js → register.setup-xIVMlLYx.js} +5 -5
  326. package/dist/{register.status-health-sessions-7E-y6cw7.js → register.status-health-sessions-CaxJw1rr.js} +27 -27
  327. package/dist/{register.status-health-sessions-D9iuSOb8.js → register.status-health-sessions-D4hMq0I7.js} +27 -27
  328. package/dist/{register.subclis-R6keQnon.js → register.subclis-srwCZnD0.js} +25 -25
  329. package/dist/{replies-NkETqb6B.js → replies-BsctLhfp.js} +4 -4
  330. package/dist/{reply-B4TgvJrJ.js → reply-B_SiN91-.js} +41 -30
  331. package/dist/{reply-directives-DGITtNUL.js → reply-directives-D9wYtPPy.js} +2 -2
  332. package/dist/{reply-prefix-DVkNDBNe.js → reply-prefix-C7WlN3qm.js} +1 -1
  333. package/dist/{resolve-route-jDAjkfZE.js → resolve-route-BV8k5qjX.js} +5 -5
  334. package/dist/{rpc-B2GRFhpM.js → rpc-BgMIbqpb.js} +1 -1
  335. package/dist/{rpc-BljNUarN.js → rpc-htgXg_yf.js} +1 -1
  336. package/dist/{run-main-CMTfGYjG.js → run-main-BzfK-GcH.js} +36 -36
  337. package/dist/{runs-B0TxOQnF.js → runs-BW5fW5nB.js} +3 -3
  338. package/dist/{runs-BMp7jOLL.js → runs-BjLs5ozo.js} +3 -3
  339. package/dist/{runs-DGWNXyKA.js → runs-ucQd8Fc-.js} +8 -8
  340. package/dist/{sandbox-DbfWdQha.js → sandbox-7YCCMJoM.js} +1 -1
  341. package/dist/{sandbox-CQwpubTx.js → sandbox-BpdiWabc.js} +1 -1
  342. package/dist/{sandbox-cli-CSjghLhl.js → sandbox-cli-Dv0Viev8.js} +2 -2
  343. package/dist/{sandbox-cli-DwhgE7u4.js → sandbox-cli-UfXu5kvh.js} +2 -2
  344. package/dist/{secrets-cli-jj1RZiK2.js → secrets-cli-DD5pd5lU.js} +3 -3
  345. package/dist/{secrets-cli-mfGtyiPb.js → secrets-cli-DMX3vuhP.js} +3 -3
  346. package/dist/{security-cli-DSB1NLa6.js → security-cli-DCKCspHc.js} +7 -7
  347. package/dist/{security-cli-DlMcCXl1.js → security-cli-DRALCMFL.js} +7 -7
  348. package/dist/{send-Do1AlhD5.js → send-BGps2i_C.js} +8 -8
  349. package/dist/{send-ENMm5qbW.js → send-Ba3pDq6E.js} +7 -7
  350. package/dist/{send-Dq8ChBfS.js → send-BiDcVZSc.js} +6 -6
  351. package/dist/{send-l57G-s8y.js → send-CZsC4D3G.js} +1 -1
  352. package/dist/{send-DEFcgo-1.js → send-TscXeVY8.js} +27 -27
  353. package/dist/{send-CNLmncRW.js → send-Tx-ew59_.js} +6 -6
  354. package/dist/{send-DAYMV49d.js → send-s0RNLFLX.js} +1 -1
  355. package/dist/{server-BAGUd2MH.js → server-DWJmtex3.js} +4 -4
  356. package/dist/{server-context-BUX61Gwl.js → server-context-BEjWhzMi.js} +2 -2
  357. package/dist/{server-context-FPrSnBNG.js → server-context-CQQ6Q5Kp.js} +2 -2
  358. package/dist/{server-lifecycle-7QoL5fyb.js → server-lifecycle-B9IQKSom.js} +1 -1
  359. package/dist/{server-lifecycle-DXRap2AR.js → server-lifecycle-C3hCCbXm.js} +1 -1
  360. package/dist/{server-node-events-DSTI4JnV.js → server-node-events-8k0OLCvW.js} +23 -23
  361. package/dist/{server-node-events-MOX6FUiJ.js → server-node-events-BYTgaAay.js} +23 -23
  362. package/dist/{server-IDopagLT.js → server-y8WhCQvu.js} +4 -4
  363. package/dist/{session-meta-DuK_BrWT.js → session-meta-DH__PMKt.js} +2 -2
  364. package/dist/{sessions-Dcu0bdQ7.js → sessions-BlXxa7bM.js} +6 -6
  365. package/dist/{sessions-CgVN798h.js → sessions-DFDrcshi.js} +6 -6
  366. package/dist/{sessions-claims-status-D5th0G34.js → sessions-claims-status-BWkOZDb1.js} +2 -2
  367. package/dist/{sessions-claims-status-Bt9unG8h.js → sessions-claims-status-BzqTiwuz.js} +2 -2
  368. package/dist/{skill-commands-BhMQp_i8.js → skill-commands-CRZajtK_.js} +9 -9
  369. package/dist/{skills-ckuLxkyg.js → skills-DOc6uEd1.js} +21 -21
  370. package/dist/{status-B3eNMcE3.js → status-BacPIpt6.js} +8 -8
  371. package/dist/{status-C5pbfqhh.js → status-BsGjriqM.js} +8 -8
  372. package/dist/{store-gQ6FSjVk.js → store-xxN6qyAh.js} +2 -2
  373. package/dist/{subsystem-CPYnUTN4.js → subsystem-BCjklMkJ.js} +64 -64
  374. package/dist/{system-cli-B-THY8xp.js → system-cli-DaeSeaNj.js} +3 -3
  375. package/dist/{system-cli-BqCA8eq3.js → system-cli-LSxX4WjX.js} +3 -3
  376. package/dist/{tables-DEyD0zuy.js → tables-o3ZpyPWV.js} +1 -1
  377. package/dist/{task-pipeline-boot-BLEjtMkt.js → task-pipeline-boot-CM-3tH09.js} +23 -23
  378. package/dist/{task-pipeline-boot-DKqT4VdZ.js → task-pipeline-boot-Dihxq0Tg.js} +23 -23
  379. package/dist/{task-runlog-retention-cEBecqvb.js → task-runlog-retention-DCbMK2T8.js} +65 -10
  380. package/dist/{task-runlog-retention-BZrnJGL1.js → task-runlog-retention-GZu-QuBY.js} +65 -10
  381. package/dist/{tasks-DXPXCFmn.js → tasks-DCbYQt5N.js} +2 -2
  382. package/dist/{tasks-YUokA114.js → tasks-Dm1ljmuN.js} +2 -2
  383. package/dist/{tokens-9BPY4SaX.js → tokens-9Mla_HDp.js} +1 -1
  384. package/dist/{tool-loop-detection-C1fqyXXD.js → tool-loop-detection-8uvf8mSd.js} +2 -2
  385. package/dist/{tui-CetFSZIt.js → tui-DQwfx20_.js} +3 -3
  386. package/dist/{tui-5QhX2Lcm.js → tui-X8LP2ykY.js} +3 -3
  387. package/dist/{tui-cli-Bo-8qeoa.js → tui-cli-DFen3XYb.js} +6 -6
  388. package/dist/{tui-cli-DFak7s89.js → tui-cli-Dhj11694.js} +6 -6
  389. package/dist/{update-Dwt-MeRL.js → update-CYcHPlAS.js} +1 -1
  390. package/dist/{update-B3jJ2yVe.js → update-VuewNwzn.js} +1 -1
  391. package/dist/{update-cli-Dhxx3iie.js → update-cli-DE0ttohR.js} +32 -32
  392. package/dist/{update-cli-D5knJbn5.js → update-cli-DECVfh7L.js} +33 -33
  393. package/dist/{update-runner-18yD5NLo.js → update-runner-C8NxlRy7.js} +1 -1
  394. package/dist/{update-runner-DohE1D7D.js → update-runner-CBbs-iN_.js} +1 -1
  395. package/dist/{user-run-recording-B0XAAUwL.js → user-run-recording-CAk1Ketk.js} +2 -2
  396. package/dist/{validation-cli-Dfac8Duq.js → validation-cli-D8dTZ830.js} +23 -23
  397. package/dist/{validation-cli-CAge8d_F.js → validation-cli-Di7B-mhn.js} +23 -23
  398. package/dist/{with-timeout-DD5bV7yq.js → with-timeout-BfG7k9-4.js} +2 -2
  399. package/dist/{with-timeout-1SSQaGSz.js → with-timeout-CpZZ4mMw.js} +2 -2
  400. package/dist/{workspace-B707AGIc.js → workspace-Dbn4gFdH.js} +9 -9
  401. package/extensions/acpx/package.json +1 -1
  402. package/extensions/anthropic/package.json +1 -1
  403. package/extensions/bifrost/package.json +1 -1
  404. package/extensions/bluebubbles/package.json +1 -1
  405. package/extensions/copilot-proxy/package.json +1 -1
  406. package/extensions/deepgram/package.json +1 -1
  407. package/extensions/deepinfra/package.json +1 -1
  408. package/extensions/diagnostics-otel/package.json +1 -1
  409. package/extensions/diffs/package.json +1 -1
  410. package/extensions/discord/package.json +1 -1
  411. package/extensions/dream-cycle/package.json +1 -1
  412. package/extensions/elevenlabs/package.json +1 -1
  413. package/extensions/elevenlabs/src/realtime-transcription-provider-faults.test.ts +0 -39
  414. package/extensions/elevenlabs/src/realtime-transcription-provider.test.ts +34 -32
  415. package/extensions/elevenlabs/src/realtime-transcription-provider.ts +5 -34
  416. package/extensions/elevenlabs/src/streaming-speech-provider.ts +5 -0
  417. package/extensions/feishu/package.json +1 -1
  418. package/extensions/gemini-search/package.json +1 -1
  419. package/extensions/google/package.json +1 -1
  420. package/extensions/google-gemini-cli-auth/package.json +1 -1
  421. package/extensions/googlechat/package.json +1 -1
  422. package/extensions/grok-search/package.json +1 -1
  423. package/extensions/groq/package.json +1 -1
  424. package/extensions/imessage/package.json +1 -1
  425. package/extensions/irc/package.json +1 -1
  426. package/extensions/kimi-search/package.json +1 -1
  427. package/extensions/learning-core/package.json +1 -1
  428. package/extensions/line/package.json +1 -1
  429. package/extensions/llm-task/package.json +1 -1
  430. package/extensions/lobster/package.json +1 -1
  431. package/extensions/matrix/CHANGELOG.md +1 -1
  432. package/extensions/matrix/package.json +1 -1
  433. package/extensions/mattermost/package.json +1 -1
  434. package/extensions/memory-core/package.json +1 -1
  435. package/extensions/memory-lancedb/package.json +1 -1
  436. package/extensions/minimax/package.json +1 -1
  437. package/extensions/minimax-portal-auth/package.json +1 -1
  438. package/extensions/mistral/package.json +1 -1
  439. package/extensions/moonshot/package.json +1 -1
  440. package/extensions/msteams/CHANGELOG.md +1 -1
  441. package/extensions/msteams/package.json +1 -1
  442. package/extensions/nextcloud-talk/package.json +1 -1
  443. package/extensions/nostr/CHANGELOG.md +1 -1
  444. package/extensions/nostr/package.json +1 -1
  445. package/extensions/open-prose/package.json +1 -1
  446. package/extensions/openai/package.json +1 -1
  447. package/extensions/openai-realtime/package.json +1 -1
  448. package/extensions/openrouter/package.json +1 -1
  449. package/extensions/perplexity-search/package.json +1 -1
  450. package/extensions/searxng-search/package.json +1 -1
  451. package/extensions/signal/package.json +1 -1
  452. package/extensions/slack/package.json +1 -1
  453. package/extensions/synology-chat/package.json +1 -1
  454. package/extensions/telegram/package.json +1 -1
  455. package/extensions/tlon/package.json +1 -1
  456. package/extensions/twitch/CHANGELOG.md +1 -1
  457. package/extensions/twitch/package.json +1 -1
  458. package/extensions/voice-call/CHANGELOG.md +1 -1
  459. package/extensions/voice-call/package.json +1 -1
  460. package/extensions/whatsapp/package.json +1 -1
  461. package/extensions/zai/package.json +1 -1
  462. package/extensions/zalo/CHANGELOG.md +1 -1
  463. package/extensions/zalo/package.json +1 -1
  464. package/extensions/zalouser/CHANGELOG.md +1 -1
  465. package/extensions/zalouser/package.json +1 -1
  466. package/package.json +1 -1
  467. package/dist/plugin-sdk/agent-turn-execute-zuw0S_Lh.js +0 -61
  468. package/dist/plugin-sdk/agent-turn-runner-BcrkoR1M.js +0 -11
  469. package/dist/plugin-sdk/audio-preflight-DE04bi4M.js +0 -28
  470. package/dist/plugin-sdk/command-queue-BnJsJc_w.js +0 -13
  471. package/dist/plugin-sdk/deliver-D4fWK65M.js +0 -32
  472. package/dist/plugin-sdk/manager-BlYRVNJI.js +0 -16
  473. package/dist/plugin-sdk/markdown-tables-cZSKCBuW.js +0 -10
  474. package/dist/plugin-sdk/provider-dispatcher-B4PdTha5.js +0 -61
  475. package/dist/plugin-sdk/provider-image-CNlYbRab.js +0 -22
  476. package/dist/plugin-sdk/proxy-D2uiu68M.js +0 -7
  477. package/dist/plugin-sdk/replies-XUkqz_7S.js +0 -25
  478. package/dist/plugin-sdk/reply-prefix-MU3uY52y.js +0 -7
  479. package/dist/plugin-sdk/runs-R28wdt7j.js +0 -25
  480. package/dist/plugin-sdk/send-Cg2VXcO0.js +0 -27
  481. package/dist/plugin-sdk/send-DAs6FmWB.js +0 -23
  482. package/dist/plugin-sdk/send-UIQH_kN6.js +0 -25
  483. package/dist/plugin-sdk/send-tASIQF-Q.js +0 -24
  484. package/dist/plugin-sdk/session-meta-Dd1ZONel.js +0 -10
  485. package/dist/plugin-sdk/skill-commands-C7ZE3rKj.js +0 -14
  486. package/dist/plugin-sdk/subagent-registry-CTZBVVPF.js +0 -61
  487. package/dist/plugin-sdk/user-run-recording-BMikDBXR.js +0 -11
@@ -2,7 +2,7 @@ import { g as resolveStateDir, i as isNixMode, l as resolveGatewayLockDir, o as
2
2
  import { $ as readLoggingConfig, A as setVerbose, At as resolvePreferredOpenClawTmpDir, C as truncateUtf16Safe, F as isRich, I as theme, K as resolveFileLogProfile, L as getChildLogger, P as colorize, R as getLogger, W as appendFileLog, _t as isNotFoundPathError, c as ensureDir, dt as openVerifiedFileSync, ft as sameFileIdentity, g as resolveUserPath, lt as openBoundaryFile, t as CONFIG_DIR, ut as openBoundaryFileSync, vt as isPathInside, y as shortenHomePath, z as getResolvedLoggerSettings } from "./utils-CMEUUHmM.js";
3
3
  import { t as isPlainObject } from "./plain-object-DHRdTVMa.js";
4
4
  import { d as supportsXHighThinking, l as normalizeVerboseLevel, s as normalizeThinkLevel } from "./thinking-DDYFn78t.js";
5
- import { $n as setTtsProvider, A as resolveCronSession, An as ensureOutboundSessionEntry, Ar as resolveAgentTimeoutMs, At as takePendingActivationMigration, Bn as setTaskPipelineStatus, Bt as resolveAgentOutboundIdentity, C as startHeartbeatRunner, Cn as buildHistoryContextFromEntries, Cr as DEFAULT_INPUT_IMAGE_MIMES, Ct as persistBrowserProxyFiles, D as onHeartbeatEvent, Dn as createReplyDispatcher, Dr as extractImageContentFromSource, Dt as clearPluginRegistryCaches, E as getLastHeartbeatEvent, En as setDispatchInboundAdmissionRejectionFor, Er as extractFileContentFromSource, F as waitForPendingWrites, Fn as resolveOutboundChannelPlugin, Ft as loadProviderUsageSummary, Gn as isTtsEnabled, H as readLatestAssistantReply, Hn as resolveUserTimezone, Ht as handleSlackHttpRequest, J as loadCombinedSessionStoreForGateway, Jn as resolveTtsAutoMode, K as listAgentsForGateway, Kn as isTtsProviderConfigured, L as resolveExecConfig, Ln as resetDirectoryCache, M as runEmbeddedPiAgent, Mn as resolveHeartbeatDeliveryTarget, Mt as requestNudge, N as prepareSessionManagerForRun, Nn as resolveOutboundTarget, O as redactSensitiveHeartbeatEvent, On as getTotalPendingReplies, Or as normalizeMimeList, Ot as getLoadedAnalysisConcurrency, P as snapshotRunPendingWrites, Pn as resolveSessionDeliveryTarget, Q as resolveSessionModelRef, Qn as setTtsEnabled, R as applyToolPolicyPipeline, Rn as isAbortRequestText, S as setHeartbeatsEnabled, Sr as DEFAULT_INPUT_IMAGE_MAX_BYTES, St as applyBrowserProxyPaths, T as resolveHeartbeatVisibility, Tn as dispatchInboundMessage, Tr as DEFAULT_INPUT_TIMEOUT_MS, Tt as resolvePluginTools, U as resolveAnnounceTargetFromKey, Ut as readJsonBodyWithLimit, V as createOpenClawTools, Vn as DEFAULT_MAX_PARALLEL, W as canonicalizeSpawnedByForAgent, Wn as getTtsProvider, Wt as requestBodyErrorToText, X as pruneLegacyStoreKeys, Xn as resolveTtsPrefsPath, Xt as resolveAgentOutboundTarget, Y as loadSessionEntry, Yn as resolveTtsConfig, Yt as resolveAgentDeliveryPlan, Z as resolveGatewaySessionStoreTarget, Zn as resolveTtsProviderOrder, Zt as createOutboundSendDeps, _ as runMainAgentTurn, _r as ACP_SESSION_IDENTITY_RENDERER_VERSION, _t as normalizeCronJobPatch, an as runCliAgent, ar as removeQueuedFollowupRun, at as scheduleGatewaySigusr1Restart, b as runHeartbeatOnce, bn as getHookType, bt as hasLegacyDeliveryHints, cr as ToolInputError, ct as triggerOpenClawRestart, d as countActiveDescendantRuns, dn as computeBackoff, dt as formatRestartSentinelMessage, en as createDefaultDeps, er as textToSpeech, et as consumeGatewaySigusr1RestartAuthorization, f as initSubagentRegistry, fn as sleepWithAbort, gt as normalizeCronJobCreate, h as runSubagentAnnounceFlow, ht as writeRestartSentinel, in as setCliSessionId, ir as getExistingFollowupQueue, it as markGatewaySigusr1RestartHandled, j as resolveCronStyleNow, jn as resolveOutboundSessionRoute, jt as createPluginRuntime, k as isCronSystemEvent, kr as resolveInputFileLimits, kt as loadOpenClawPlugins, ln as lookupContextTokens, lr as enqueueSystemEvent, lt as consumeRestartSentinel, mn as resolveAgentAvatar, mr as requestHeartbeatNow, nn as runWithModelFallback, nr as OPENAI_TTS_VOICES, nt as emitGatewayRestart, o as resolveChannelAccountEnabled, or as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, ot as setGatewaySigusr1RestartPolicy, p as listDescendantRunsForRequester, pn as resolveSessionAuthProfileOverride, pt as summarizeRestartSentinel, qn as resolveTtsApiKey, qt as agentCommandFromIngress, rn as getCliSessionId, rr as clearSessionQueues, rt as isGatewaySigusr1RestartExternallyAllowed, s as BARE_SESSION_RESET_PROMPT, sr as stripHeartbeatToken, st as setPreRestartDeferralCheck, tn as createOutboundSendDeps$1, tr as OPENAI_TTS_MODELS, tt as deferGatewayRestartUntilIdle, ur as isSystemEventContextChanged, ut as formatDoctorNonInteractiveHint, v as resolveHeartbeatConfig, vn as buildSafeExternalPrompt, vr as getAcpSessionManager, vt as migrateLegacyCronPayload, w as runWakeGate, wr as DEFAULT_INPUT_MAX_REDIRECTS, wt as getPluginToolMeta, xn as isExternalHookSession, xr as resolveSendPolicy, xt as stripLegacyDeliveryFields, y as resolveHeartbeatSummaryForAgent, yn as detectSuspiciousPatterns, yr as resolveAgentSessionDirs, yt as buildDeliveryFromLegacyPayload, z as buildDefaultToolPolicyPipelineSteps } from "./reply-B4TgvJrJ.js";
5
+ import { $n as setTtsEnabled, A as resolveCronSession, An as ensureOutboundSessionEntry, Ar as resolveInputFileLimits, At as takePendingActivationMigration, Bt as resolveAgentOutboundIdentity, C as startHeartbeatRunner, Cn as buildHistoryContextFromEntries, Cr as DEFAULT_INPUT_IMAGE_MAX_BYTES, Ct as persistBrowserProxyFiles, D as onHeartbeatEvent, Dn as createReplyDispatcher, Dr as extractFileContentFromSource, Dt as clearPluginRegistryCaches, E as getLastHeartbeatEvent, En as setDispatchInboundAdmissionRejectionFor, Er as DEFAULT_INPUT_TIMEOUT_MS, F as waitForPendingWrites, Fn as resolveOutboundChannelPlugin, Ft as loadProviderUsageSummary, Gn as getTtsProvider, H as readLatestAssistantReply, Hn as DEFAULT_MAX_PARALLEL, Ht as handleSlackHttpRequest, J as loadCombinedSessionStoreForGateway, Jn as resolveTtsApiKey, K as listAgentsForGateway, Kn as isTtsEnabled, L as resolveExecConfig, Ln as resetDirectoryCache, M as runEmbeddedPiAgent, Mn as resolveHeartbeatDeliveryTarget, Mt as requestNudge, N as prepareSessionManagerForRun, Nn as resolveOutboundTarget, O as redactSensitiveHeartbeatEvent, On as getTotalPendingReplies, Or as extractImageContentFromSource, Ot as getLoadedAnalysisConcurrency, P as snapshotRunPendingWrites, Pn as resolveSessionDeliveryTarget, Q as resolveSessionModelRef, Qn as resolveTtsProviderOrder, R as applyToolPolicyPipeline, Rn as isAbortRequestText, S as setHeartbeatsEnabled, Sr as resolveSendPolicy, St as applyBrowserProxyPaths, T as resolveHeartbeatVisibility, Tn as dispatchInboundMessage, Tr as DEFAULT_INPUT_MAX_REDIRECTS, Tt as resolvePluginTools, U as resolveAnnounceTargetFromKey, Un as resolveUserTimezone, Ut as readJsonBodyWithLimit, V as createOpenClawTools, Vn as setTaskPipelineStatus, W as canonicalizeSpawnedByForAgent, Wt as requestBodyErrorToText, X as pruneLegacyStoreKeys, Xn as resolveTtsConfig, Xt as resolveAgentOutboundTarget, Y as loadSessionEntry, Yn as resolveTtsAutoMode, Yt as resolveAgentDeliveryPlan, Z as resolveGatewaySessionStoreTarget, Zn as resolveTtsPrefsPath, Zt as createOutboundSendDeps, _ as runMainAgentTurn, _t as normalizeCronJobPatch, an as runCliAgent, ar as getExistingFollowupQueue, at as scheduleGatewaySigusr1Restart, b as runHeartbeatOnce, bn as getHookType, br as resolveAgentSessionDirs, bt as hasLegacyDeliveryHints, cr as stripHeartbeatToken, ct as triggerOpenClawRestart, d as countActiveDescendantRuns, dn as computeBackoff, dr as isSystemEventContextChanged, dt as formatRestartSentinelMessage, en as createDefaultDeps, er as setTtsProvider, et as consumeGatewaySigusr1RestartAuthorization, f as initSubagentRegistry, fn as sleepWithAbort, gt as normalizeCronJobCreate, h as runSubagentAnnounceFlow, hr as requestHeartbeatNow, ht as writeRestartSentinel, in as setCliSessionId, ir as clearSessionQueues, it as markGatewaySigusr1RestartHandled, j as resolveCronStyleNow, jn as resolveOutboundSessionRoute, jr as resolveAgentTimeoutMs, jt as createPluginRuntime, k as isCronSystemEvent, kr as normalizeMimeList, kt as loadOpenClawPlugins, ln as lookupContextTokens, lr as ToolInputError, lt as consumeRestartSentinel, mn as resolveAgentAvatar, nn as runWithModelFallback, nr as OPENAI_TTS_MODELS, nt as emitGatewayRestart, o as resolveChannelAccountEnabled, or as removeQueuedFollowupRun, ot as setGatewaySigusr1RestartPolicy, p as listDescendantRunsForRequester, pn as resolveSessionAuthProfileOverride, pt as summarizeRestartSentinel, qn as isTtsProviderConfigured, qt as agentCommandFromIngress, rn as getCliSessionId, rr as OPENAI_TTS_VOICES, rt as isGatewaySigusr1RestartExternallyAllowed, s as BARE_SESSION_RESET_PROMPT, sr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, st as setPreRestartDeferralCheck, tn as createOutboundSendDeps$1, tr as textToSpeech, tt as deferGatewayRestartUntilIdle, ur as enqueueSystemEvent, ut as formatDoctorNonInteractiveHint, v as resolveHeartbeatConfig, vn as buildSafeExternalPrompt, vr as ACP_SESSION_IDENTITY_RENDERER_VERSION, vt as migrateLegacyCronPayload, w as runWakeGate, wr as DEFAULT_INPUT_IMAGE_MIMES, wt as getPluginToolMeta, xn as isExternalHookSession, xt as stripLegacyDeliveryFields, y as resolveHeartbeatSummaryForAgent, yn as detectSuspiciousPatterns, yr as getAcpSessionManager, yt as buildDeliveryFromLegacyPayload, z as buildDefaultToolPolicyPipelineSteps } from "./reply-B_SiN91-.js";
6
6
  import { A as resolveDefaultAgentWorkspaceDir, C as DEFAULT_SOUL_FILENAME, E as ensureAgentWorkspace, M as matchesSkillFilter, O as isWorkspaceOnboardingCompleted, S as DEFAULT_MEMORY_FILENAME, T as DEFAULT_USER_FILENAME, a as resolveAgentDir, b as DEFAULT_IDENTITY_FILENAME, c as resolveAgentModelFallbacksOverride, d as resolveDefaultAgentId, g as DEFAULT_AGENTS_FILENAME, i as resolveAgentConfig, j as resolveWorkspaceTemplateDir, l as resolveAgentSkillsFilter, m as resolveSessionAgentId, n as listAgentEntries, r as listAgentIds, u as resolveAgentWorkspaceDir, v as DEFAULT_BOOTSTRAP_FILENAME, w as DEFAULT_TOOLS_FILENAME, x as DEFAULT_MEMORY_ALT_FILENAME, y as DEFAULT_HEARTBEAT_FILENAME } from "./agent-scope-CWTkr4pS.js";
7
7
  import { m as defaultRuntime, n as runtimeForLogger, o as setConsoleSubsystemFilter, s as setConsoleTimestampPrefix, t as createSubsystemLogger } from "./subsystem-DDZBycwS.js";
8
8
  import { A as isCronRunSessionKey, M as isSubagentSessionKey, N as parseAgentSessionKey, S as normalizeAccountId$1, a as classifySessionKeyShape, b as toAgentStoreSessionKey, d as normalizeAgentId, f as normalizeMainKey, g as resolveLinkedPeerIdForChannel, h as resolveConfiguredCanonicalIdentity, p as resolveAgentIdFromSessionKey, r as buildAgentMainSessionKey, t as DEFAULT_AGENT_ID, x as DEFAULT_ACCOUNT_ID, y as toAgentRequestSessionKey } from "./session-key-B1wN38jV.js";
@@ -24,12 +24,12 @@ import { c as isDiagnosticsEnabled, l as onDiagnosticEvent, s as emitDiagnosticE
24
24
  import { n as USER_CLIENT_ID, o as buildUserClientRuntimeConfig, s as handleUserClientHttpRequest } from "./static-server-C-iTMRyz.js";
25
25
  import { n as assertNoPathAliasEscape } from "./path-alias-guards-BSmwo1rT.js";
26
26
  import { i as openFileWithinRoot, l as writeFileWithinRoot, s as readLocalFileSafely, t as SafeOpenError } from "./fs-safe-DD7KXuvI.js";
27
- import { D as normalizeMediaProviderId, E as listAutoDetectableProviders, T as getProviderDeclaredEnvVars, c as transcribeBufferedPcmWithMediaUnderstanding, g as registerUnhandledRejectionHandler, n as buildProviderRegistry, x as resolveModelEntries, y as resolveCapabilityConfig } from "./audio-transcription-runner-BvZFFknx.js";
27
+ import { D as normalizeMediaProviderId, E as listAutoDetectableProviders, T as getProviderDeclaredEnvVars, c as transcribeBufferedPcmWithMediaUnderstanding, g as registerUnhandledRejectionHandler, n as buildProviderRegistry, x as resolveModelEntries, y as resolveCapabilityConfig } from "./audio-transcription-runner-CsQR8LpS.js";
28
28
  import { t as fetchWithSsrFGuard } from "./fetch-guard-CjyGDRXN.js";
29
29
  import { t as SsrFBlockedError } from "./ssrf-B85AIIOO.js";
30
30
  import "./proxy-fetch-Czv8kxaL.js";
31
31
  import { t as resolveNetworkSsrFPolicy } from "./ssrf-config-BXebcnwh.js";
32
- import "./pi-embedded-helpers-CPorV-Mk.js";
32
+ import "./pi-embedded-helpers-DIUrv2Ua.js";
33
33
  import "./local-roots-_qt4-Ma5.js";
34
34
  import { c as detectMime } from "./image-ops-DcqCZEUY.js";
35
35
  import { a as testRegexWithBoundedInput, i as compileSafeRegex } from "./redact-CQtYLB4a.js";
@@ -37,10 +37,10 @@ import { i as formatErrorMessage, o as hasErrnoCode, s as isErrno } from "./erro
37
37
  import "./models-config-Burwt3mB.js";
38
38
  import { n as loadModelCatalog } from "./model-catalog-C7itJJDM.js";
39
39
  import "./api-key-rotation-BEt1ZchD.js";
40
- import "./provider-image-CIpRvhkS.js";
40
+ import "./provider-image-BICZzOki.js";
41
41
  import "./pi-model-discovery-CfUi22Es.js";
42
- import { h as extractTextFromChatContent } from "./pi-embedded-utils-lp-U3XQ9.js";
43
- import { C as resolveToolProfilePolicy, _ as collectExplicitAllowlist, y as mergeAlsoAllowPolicy } from "./sandbox-DbfWdQha.js";
42
+ import { h as extractTextFromChatContent } from "./pi-embedded-utils-BetZbS6i.js";
43
+ import { C as resolveToolProfilePolicy, _ as collectExplicitAllowlist, y as mergeAlsoAllowPolicy } from "./sandbox-7YCCMJoM.js";
44
44
  import { i as listCoreToolSections, n as PROFILE_OPTIONS, o as resolveCoreToolProfiles } from "./tool-catalog-B6wH7-iE.js";
45
45
  import { i as resolveRelayAuthTokenForPort, n as resolveGatewayRelayToken } from "./extension-relay-auth-C-1c9CZk.js";
46
46
  import { i as enableTailscaleServe, n as disableTailscaleServe, o as getTailnetHostname, r as enableTailscaleFunnel, t as disableTailscaleFunnel } from "./tailscale-DbsrfsUT.js";
@@ -48,7 +48,7 @@ import { t as safeEqualSecret } from "./secret-equal-DyYamV7h.js";
48
48
  import { n as pickPrimaryTailnetIPv4, r as pickPrimaryTailnetIPv6 } from "./tailnet-G5phL2pY.js";
49
49
  import { c as normalizeHostHeader, d as resolveGatewayBindHost, f as resolveGatewayListenHosts, i as isLoopbackHost, l as pickPrimaryLanIPv4, n as isLocalishHost, o as isTrustedProxyAddress, r as isLoopbackAddress, s as isValidIPv4, t as rawDataToString, u as resolveClientIp } from "./ws-BuVK_u9S.js";
50
50
  import { a as isDirectLoopbackProvenance, c as AUTH_RATE_LIMIT_SCOPE_BROWSER_EXTENSION, d as AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET, f as createAuthRateLimiter, i as captureTransportProvenance, l as AUTH_RATE_LIMIT_SCOPE_DEVICE_TOKEN, n as authorizeHttpGatewayConnect, o as isLocalDirectRequest, p as normalizeRateLimitClientIp, r as authorizeWsControlUiGatewayConnect, s as resolveGatewayAuth, t as assertGatewayAuthConfigured, u as AUTH_RATE_LIMIT_SCOPE_HOOK_AUTH } from "./auth-DeLQvx-N.js";
51
- import { o as ensureGatewayStartupAuth, s as mergeGatewayTailscaleConfig } from "./server-context-FPrSnBNG.js";
51
+ import { o as ensureGatewayStartupAuth, s as mergeGatewayTailscaleConfig } from "./server-context-CQQ6Q5Kp.js";
52
52
  import { d as hasBinary } from "./frontmatter-B8Zb_8go.js";
53
53
  import { i as loadWorkspaceSkillEntries, r as buildWorkspaceSkillSnapshot } from "./skills-Buc1RWDY.js";
54
54
  import "./store-DoqX9VsZ.js";
@@ -63,9 +63,9 @@ import { r as isRestartEnabled } from "./commands-tFdLuF5k.js";
63
63
  import "./commands-registry-BMswme6t.js";
64
64
  import { t as redactIdentifier } from "./redact-identifier-CSPL9LuH.js";
65
65
  import "./registry-D9ygkK-J.js";
66
- import { a as cancelDelayedAgentTurnWaiters, c as enqueueAgentTurn, i as agentTurnIdempotencyKey, l as isClaimableAgentTurnWorkId, r as AGENT_TURN_TOPIC, s as createRecoveryAgentTurnStager } from "./agent-turn-enqueue-DzWOPhgy.js";
67
- import { $ as validateNodeListParams, $t as validateTalkSessionCreateParams, A as validateCronRunParams, B as validateExecApprovalRequestParams, Bn as verifyDeviceToken, Bt as validateTalkConfigParams, C as validateConfigPatchParams, Cn as normalizeDeviceMetadataForAuth, D as validateCronAddParams, Dn as consumeDeviceBootstrapToken, E as validateConnectParams, En as approveDevicePairing, F as validateDevicePairListParams, Fn as revokeDeviceToken, Ft as validateSkillsBinsParams, G as validateExecApprovalsSetParams, Gt as validateTalkRealtimeSessionParams, H as validateExecApprovalsGetParams, Ht as validateTalkRealtimeAudioParams, I as validateDevicePairRejectParams, In as rotateDeviceToken, It as validateSkillsInstallParams, J as validateModelsListParams, Jt as validateTalkRealtimeToolResultParams, K as validateLogsTailParams, Kt as validateTalkRealtimeStatusParams, L as validateDevicePairRemoveParams, Ln as summarizeDeviceTokens, Lt as validateSkillsStatusParams, M as validateCronStatusParams, Mn as rejectDevicePairing, N as validateCronUpdateParams, Nn as removePairedDevice, Nt as validateSessionsTitlePrepareParams, O as validateCronListParams, On as ensureDeviceToken, P as validateDevicePairApproveParams, Pn as requestDevicePairing, Pt as validateSessionsUsageParams, Q as validateNodeInvokeResultParams, Qt as validateTalkSessionCloseParams, R as validateDeviceTokenRevokeParams, Rn as updatePairedDeviceMetadata, Rt as validateSkillsUpdateParams, S as validateConfigGetParams, Sn as buildDeviceAuthPayloadV3, T as validateConfigSetParams, Tn as approveBootstrapDevicePairing, U as validateExecApprovalsNodeGetParams, Un as operatorScopeSatisfied, Ut as validateTalkRealtimeBargeInParams, V as validateExecApprovalResolveParams, Vt as validateTalkModeParams, W as validateExecApprovalsNodeSetParams, Wn as roleScopesAllow, Wt as validateTalkRealtimeMarkParams, X as validateNodeEventParams, Xn as verifyDeviceSignature, Xt as validateTalkSessionBargeInParams, Y as validateNodeDescribeParams, Yn as normalizeDevicePublicKeyBase64Url, Yt as validateTalkSessionAppendAudioParams, Z as validateNodeInvokeParams, Zt as validateTalkSessionCancelTurnParams, _ as validateChatAbortParams, _n as ErrorCodes, a as validateAgentNudgeParams, an as validateToolsCatalogParams, at as validateNodeRenameParams, b as validateChatSendParams, c as validateAgentsCreateParams, cn as validateWebLoginStartParams, ct as validateRequestFrame, d as validateAgentsFilesListParams, dn as validateWizardNextParams, dt as validateSendParams, en as validateTalkSessionMarkParams, et as validateNodePairApproveParams, f as validateAgentsFilesSetParams, fn as validateWizardStartParams, ft as validateSessionsAbortParams, g as validateChannelsStatusParams, h as validateChannelsLogoutParams, hn as RUNS_INVALIDATED_EVENT, i as validateAgentIdentityParams, in as validateTasksRunsListParams, it as validateNodePairVerifyParams, j as validateCronRunsParams, jn as listDevicePairing, jt as validateSessionsSteerParams, k as validateCronRemoveParams, kn as getPairedDevice, l as validateAgentsDeleteParams, ln as validateWebLoginWaitParams, lt as validateSecretsResolveParams, m as validateAgentsUpdateParams, mn as PROTOCOL_VERSION, nn as validateTasksRunsEventsParams, nt as validateNodePairRejectParams, o as validateAgentParams, on as validateUpdateRunParams, ot as validatePollParams, p as validateAgentsListParams, pn as validateWizardStatusParams, q as validateModelsAuthStatusParams, qn as deriveDeviceIdFromPublicKey, qt as validateTalkRealtimeStopParams, r as formatValidationErrors, rn as validateTasksRunsGetParams, rt as validateNodePairRequestParams, s as validateAgentWaitParams, sn as validateWakeParams, st as validatePushTestParams, tn as validateTasksRunEventsParams, tt as validateNodePairListParams, u as validateAgentsFilesGetParams, un as validateWizardCancelParams, ut as validateSecretsResolveResult, v as validateChatHistoryParams, vn as errorShape, w as validateConfigSchemaParams, x as validateConfigApplyParams, xn as buildDeviceAuthPayload, y as validateChatInjectParams, z as validateDeviceTokenRotateParams, zn as verifyDeviceBootstrapToken, zt as validateTalkCatalogParams } from "./client-BbpMX08n.js";
68
- import { _ as hasNarrowSessionScope, d as APPROVALS_SCOPE, f as PAIRING_SCOPE, g as authorizeOperatorScopesForMethod, h as WRITE_SCOPE, m as SESSION_READ_SCOPE, n as callGateway, p as READ_SCOPE, u as ADMIN_SCOPE$1, v as isHealthProbeAllowedForScopes, x as loadGatewayTlsRuntime$1, y as isNodeRoleMethod } from "./call-Cl6Q0T5z.js";
66
+ import { a as cancelDelayedAgentTurnWaiters, c as enqueueAgentTurn, i as agentTurnIdempotencyKey, l as isClaimableAgentTurnWorkId, r as AGENT_TURN_TOPIC, s as createRecoveryAgentTurnStager } from "./agent-turn-enqueue-QcHb-Wlq.js";
67
+ import { $ as validateNodeListParams, $t as validateTalkSessionCreateParams, A as validateCronRunParams, B as validateExecApprovalRequestParams, Bn as verifyDeviceToken, Bt as validateTalkConfigParams, C as validateConfigPatchParams, Cn as normalizeDeviceMetadataForAuth, D as validateCronAddParams, Dn as consumeDeviceBootstrapToken, E as validateConnectParams, En as approveDevicePairing, F as validateDevicePairListParams, Fn as revokeDeviceToken, Ft as validateSkillsBinsParams, G as validateExecApprovalsSetParams, Gt as validateTalkRealtimeSessionParams, H as validateExecApprovalsGetParams, Ht as validateTalkRealtimeAudioParams, I as validateDevicePairRejectParams, In as rotateDeviceToken, It as validateSkillsInstallParams, J as validateModelsListParams, Jt as validateTalkRealtimeToolResultParams, K as validateLogsTailParams, Kt as validateTalkRealtimeStatusParams, L as validateDevicePairRemoveParams, Ln as summarizeDeviceTokens, Lt as validateSkillsStatusParams, M as validateCronStatusParams, Mn as rejectDevicePairing, N as validateCronUpdateParams, Nn as removePairedDevice, Nt as validateSessionsTitlePrepareParams, O as validateCronListParams, On as ensureDeviceToken, P as validateDevicePairApproveParams, Pn as requestDevicePairing, Pt as validateSessionsUsageParams, Q as validateNodeInvokeResultParams, Qt as validateTalkSessionCloseParams, R as validateDeviceTokenRevokeParams, Rn as updatePairedDeviceMetadata, Rt as validateSkillsUpdateParams, S as validateConfigGetParams, Sn as buildDeviceAuthPayloadV3, T as validateConfigSetParams, Tn as approveBootstrapDevicePairing, U as validateExecApprovalsNodeGetParams, Un as operatorScopeSatisfied, Ut as validateTalkRealtimeBargeInParams, V as validateExecApprovalResolveParams, Vt as validateTalkModeParams, W as validateExecApprovalsNodeSetParams, Wn as roleScopesAllow, Wt as validateTalkRealtimeMarkParams, X as validateNodeEventParams, Xn as verifyDeviceSignature, Xt as validateTalkSessionBargeInParams, Y as validateNodeDescribeParams, Yn as normalizeDevicePublicKeyBase64Url, Yt as validateTalkSessionAppendAudioParams, Z as validateNodeInvokeParams, Zt as validateTalkSessionCancelTurnParams, _ as validateChatAbortParams, _n as ErrorCodes, a as validateAgentNudgeParams, an as validateToolsCatalogParams, at as validateNodeRenameParams, b as validateChatSendParams, c as validateAgentsCreateParams, cn as validateWebLoginStartParams, ct as validateRequestFrame, d as validateAgentsFilesListParams, dn as validateWizardNextParams, dt as validateSendParams, en as validateTalkSessionMarkParams, et as validateNodePairApproveParams, f as validateAgentsFilesSetParams, fn as validateWizardStartParams, ft as validateSessionsAbortParams, g as validateChannelsStatusParams, h as validateChannelsLogoutParams, hn as RUNS_INVALIDATED_EVENT, i as validateAgentIdentityParams, in as validateTasksRunsListParams, it as validateNodePairVerifyParams, j as validateCronRunsParams, jn as listDevicePairing, jt as validateSessionsSteerParams, k as validateCronRemoveParams, kn as getPairedDevice, l as validateAgentsDeleteParams, ln as validateWebLoginWaitParams, lt as validateSecretsResolveParams, m as validateAgentsUpdateParams, mn as PROTOCOL_VERSION, nn as validateTasksRunsEventsParams, nt as validateNodePairRejectParams, o as validateAgentParams, on as validateUpdateRunParams, ot as validatePollParams, p as validateAgentsListParams, pn as validateWizardStatusParams, q as validateModelsAuthStatusParams, qn as deriveDeviceIdFromPublicKey, qt as validateTalkRealtimeStopParams, r as formatValidationErrors, rn as validateTasksRunsGetParams, rt as validateNodePairRequestParams, s as validateAgentWaitParams, sn as validateWakeParams, st as validatePushTestParams, tn as validateTasksRunEventsParams, tt as validateNodePairListParams, u as validateAgentsFilesGetParams, un as validateWizardCancelParams, ut as validateSecretsResolveResult, v as validateChatHistoryParams, vn as errorShape, w as validateConfigSchemaParams, x as validateConfigApplyParams, xn as buildDeviceAuthPayload, y as validateChatInjectParams, z as validateDeviceTokenRotateParams, zn as verifyDeviceBootstrapToken, zt as validateTalkCatalogParams } from "./client-D7IpaFCL.js";
68
+ import { _ as hasNarrowSessionScope, d as APPROVALS_SCOPE, f as PAIRING_SCOPE, g as authorizeOperatorScopesForMethod, h as WRITE_SCOPE, m as SESSION_READ_SCOPE, n as callGateway, p as READ_SCOPE, u as ADMIN_SCOPE$1, v as isHealthProbeAllowedForScopes, x as loadGatewayTlsRuntime$1, y as isNodeRoleMethod } from "./call-DFhcVchO.js";
69
69
  import "./pairing-token-A_0lRJCJ.js";
70
70
  import "./fetch-CY39qjQT.js";
71
71
  import { a as readChannelAllowFromStoreSync } from "./pairing-store-CQ7fjFFo.js";
@@ -75,14 +75,14 @@ import "./exec-safe-bin-runtime-policy-KSPaR73B.js";
75
75
  import { _ as matchSystemRunApprovalBinding, g as buildSystemRunApprovalBinding, h as resolveSystemRunApprovalRuntimeContext, m as resolveSystemRunApprovalRequestContext, v as missingSystemRunApprovalBinding, y as toSystemRunApprovalMismatchError } from "./nodes-screen-BRZLdw3g.js";
76
76
  import { r as resolveSystemRunCommand, t as canonicalizeLegacySystemRunParams } from "./system-run-command-AF8TLlEl.js";
77
77
  import { u as snapshotActiveRuns } from "./diagnostic-session-state-C6JXU3l4.js";
78
- import { A as setActiveRunProbe, M as stopDiagnosticHeartbeat, j as startDiagnosticHeartbeat, k as resolveStuckSessionWarnMs, t as clearActiveRunProbe } from "./diagnostic-Cid_Tw67.js";
78
+ import { A as setActiveRunProbe, M as stopDiagnosticHeartbeat, j as startDiagnosticHeartbeat, k as resolveStuckSessionWarnMs, t as clearActiveRunProbe } from "./diagnostic-85mWzvQi.js";
79
79
  import { t as CommandLane } from "./lanes-DA0g5tPR.js";
80
- import { D as onAgentEvent, E as getAgentRunContext, O as registerAgentRunContext, T as emitAgentEvent, a as getActiveEmbeddedRunCount, c as isEmbeddedPiRunInFlight, d as isInFlightVoiceAttempt, f as peekActiveEmbeddedRun, g as waitForEmbeddedPiRunEnd, l as isEmbeddedPiRunSteerable, o as getActiveEmbeddedRunOwner, r as clearActiveEmbeddedRun, s as isEmbeddedPiRunActive, t as abortEmbeddedPiRun, w as clearAgentRunContext } from "./runs-B0TxOQnF.js";
81
- import { a as getActiveTaskCount, c as getTotalQueueSize, d as setCommandLaneConcurrency, f as setGatewayDrainState, l as markGatewayDraining, p as waitForActiveTasks, u as resetAllLanes } from "./command-queue-DtybAhHH.js";
80
+ import { D as onAgentEvent, E as getAgentRunContext, O as registerAgentRunContext, T as emitAgentEvent, a as getActiveEmbeddedRunCount, c as isEmbeddedPiRunInFlight, d as isInFlightVoiceAttempt, f as peekActiveEmbeddedRun, g as waitForEmbeddedPiRunEnd, l as isEmbeddedPiRunSteerable, o as getActiveEmbeddedRunOwner, r as clearActiveEmbeddedRun, s as isEmbeddedPiRunActive, t as abortEmbeddedPiRun, w as clearAgentRunContext } from "./runs-BW5fW5nB.js";
81
+ import { a as getActiveTaskCount, c as getTotalQueueSize, d as resetAllLanes, f as setCommandLaneConcurrency, m as waitForActiveTasks, p as setGatewayDrainState, u as markGatewayDraining } from "./command-queue-Bn2PHabT.js";
82
82
  import { a as resolveAgentIdentity, t as createReplyPrefixOptions } from "./reply-prefix-D0xrt6Z-.js";
83
- import { o as normalizeReplyPayloadsForDelivery, t as deliverOutboundPayloads } from "./deliver-D37woOwV.js";
84
- import { a as getMachineDisplayName, i as startBrowserControlServiceFromConfig, n as createBrowserRouteDispatcher, r as createBrowserControlContext } from "./with-timeout-DD5bV7yq.js";
85
- import { T as collectTelegramDuplicatePollerDiagnostics, d as loadCronStore, f as resolveCronStorePath, p as saveCronStore } from "./send-DAYMV49d.js";
83
+ import { o as normalizeReplyPayloadsForDelivery, t as deliverOutboundPayloads } from "./deliver-rLn-23ud.js";
84
+ import { a as getMachineDisplayName, i as startBrowserControlServiceFromConfig, n as createBrowserRouteDispatcher, r as createBrowserControlContext } from "./with-timeout-BfG7k9-4.js";
85
+ import { T as collectTelegramDuplicatePollerDiagnostics, d as loadCronStore, f as resolveCronStorePath, p as saveCronStore } from "./send-s0RNLFLX.js";
86
86
  import { n as resolveModel } from "./model-BI6n6kVo.js";
87
87
  import "./session-consumer-agents-DWh7Mygv.js";
88
88
  import { n as formatTokenCount, r as formatUsd } from "./usage-format-F-4FwfCE.js";
@@ -99,7 +99,7 @@ import "./outbound-attachment-Bg7WvYcG.js";
99
99
  import "./delivery-queue-DhBE3s1K.js";
100
100
  import "./send-26KAC8EW.js";
101
101
  import "./resolve-route-DnhX9nWr.js";
102
- import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, r as resolveEffectiveToolPolicy } from "./pi-tools.policy-r9H_A-NQ.js";
102
+ import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, r as resolveEffectiveToolPolicy } from "./pi-tools.policy-B7YiM0PW.js";
103
103
  import "./tables-CzW-cMQN.js";
104
104
  import "./proxy-Df2WAHRA.js";
105
105
  import "./replies-DoejQAqN.js";
@@ -107,21 +107,21 @@ import { S as registerSkillsChangeListener, _ as requestNodePairing, c as record
107
107
  import { t as listAgentWorkspaceDirs } from "./workspace-dirs-_vJAsBIN.js";
108
108
  import "./user-run-recording-CTVI96gC.js";
109
109
  import { n as GATEWAY_AUTH_SURFACE_PATHS, p as isKnownSecretTargetId, r as evaluateGatewayAuthSurfaceStates } from "./runtime-config-collectors-B4N79pBu.js";
110
- import "./command-secret-targets-DtDJB3vv.js";
110
+ import "./command-secret-targets-BAFcvtYe.js";
111
111
  import { a as getGatewayInstanceId, o as resolveSessionRunStore, t as createSessionRunRecorder } from "./recorder-BntUAL0_.js";
112
- import { C as normalizeControlUiBasePath, S as buildControlUiAvatarUrl, c as handleReset, w as resolveAssistantAvatarUrl, x as CONTROL_UI_AVATAR_PREFIX } from "./onboard-helpers-ziqfw3UR.js";
112
+ import { C as normalizeControlUiBasePath, S as buildControlUiAvatarUrl, c as handleReset, w as resolveAssistantAvatarUrl, x as CONTROL_UI_AVATAR_PREFIX } from "./onboard-helpers-DLBTH9b_.js";
113
113
  import "./prompt-style-D0wRuIYC.js";
114
114
  import "./pairing-labels-CGUWaZ3f.js";
115
115
  import "./session-meta-DzjDKcgW.js";
116
- import { A as registerBeforeCreate, C as artifactTokenFor, D as markRemoved, E as markClientRemovedAcknowledged, M as buildVerificationEnvelope, N as redactVerificationProjection, O as markRetained, P as verificationEnvelopeFingerprint, S as accountSessionArtifactsAtTerminalSweep, T as listSessionArtifacts, _ as requireProcessBootIdentityPair, a as setAgentTurnRuntime, b as installGatewayRestartRecoveryRuntime, d as isSoakError, f as readTrustedBuildInfo, g as isBootIdentityError, h as deriveBootIdentityPair, i as getAgentTurnRuntime, j as VERIFICATION_CONFIG_SCENARIO, k as redactArtifactLogId, l as buildSoakDeploymentRecord, m as armBarrier, n as createAgentTurnRuntimeFromStorage, o as tryGetAgentTurnRuntime, p as acceptSuccessorExecution, r as getActiveAgentTurnCount, u as evaluateSoak, v as clearGatewayRestartRecoveryRuntimeIf, w as isArtifactRegistrationError, x as RETAINED_ARTIFACT_KIND, y as getGatewayRestartRecoveryRuntime } from "./agent-turn-runner-BEvwtTis.js";
117
- import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-DZyEfnsr.js";
116
+ import { A as registerBeforeCreate, C as artifactTokenFor, D as markRemoved, E as markClientRemovedAcknowledged, M as buildVerificationEnvelope, N as redactVerificationProjection, O as markRetained, P as verificationEnvelopeFingerprint, S as accountSessionArtifactsAtTerminalSweep, T as listSessionArtifacts, _ as requireProcessBootIdentityPair, a as setAgentTurnRuntime, b as installGatewayRestartRecoveryRuntime, d as isSoakError, f as readTrustedBuildInfo, g as isBootIdentityError, h as deriveBootIdentityPair, i as getAgentTurnRuntime, j as VERIFICATION_CONFIG_SCENARIO, k as redactArtifactLogId, l as buildSoakDeploymentRecord, m as armBarrier, n as createAgentTurnRuntimeFromStorage, o as tryGetAgentTurnRuntime, p as acceptSuccessorExecution, r as getActiveAgentTurnCount, u as evaluateSoak, v as clearGatewayRestartRecoveryRuntimeIf, w as isArtifactRegistrationError, x as RETAINED_ARTIFACT_KIND, y as getGatewayRestartRecoveryRuntime } from "./agent-turn-runner-CUoz_Fkl.js";
117
+ import { i as resolveMemoryBackendConfig, r as getMemorySearchManager } from "./memory-cli-CqS6VXEu.js";
118
118
  import { r as resolveMemorySearchConfig } from "./manager-DehDxi2A.js";
119
119
  import "./query-expansion-BD3CL_NZ.js";
120
120
  import { t as formatDocsLink } from "./links-BhLGjTwm.js";
121
121
  import { n as runCommandWithRuntime } from "./cli-utils-DWSfnwCw.js";
122
122
  import { t as formatHelpExamples } from "./help-format-DqpZruAs.js";
123
123
  import { n as withProgress } from "./progress-DRMfDm7h.js";
124
- import "./server-lifecycle-7QoL5fyb.js";
124
+ import "./server-lifecycle-B9IQKSom.js";
125
125
  import { i as parseAbsoluteTimeMs, r as resolveDefaultCronStaggerMs, t as normalizeCronStaggerMs } from "./stagger-BIZMWR_z.js";
126
126
  import { a as normalizeHttpWebhookUrl, l as normalizeOptionalText, o as inferLegacyName } from "./heartbeat-tick-CsyeD75h.js";
127
127
  import { a as buildBaseHints, i as applySensitiveHints, n as redactConfigSnapshot, o as mapSensitivePaths, r as restoreRedactedValues, s as applyDerivedTags, t as redactConfigObject } from "./redact-snapshot-Cm6wsMRx.js";
@@ -136,53 +136,53 @@ import { n as DEFAULT_GATEWAY_HTTP_TOOL_DENY } from "./dangerous-tools-gv_rp-w_.
136
136
  import { n as inheritOptionFromParent } from "./command-options-6wdtBBWB.js";
137
137
  import { t as WizardCancelledError } from "./prompts-m1IJwIAx.js";
138
138
  import { t as resolveChannelDefaultAccountId } from "./helpers-CU6_xh9V.js";
139
- import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-BcD-ZJ0N.js";
139
+ import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-DWMgN4qH.js";
140
140
  import { t as isWithinDir } from "./path-safety-DAKUyD-v.js";
141
141
  import "./install-safe-path-DjFYmzeb.js";
142
- import "./npm-pack-install-opyKYSmS.js";
142
+ import "./npm-pack-install-BgBpeTJk.js";
143
143
  import "./skill-scanner-BA3h34y0.js";
144
- import "./installs-78zhoWuO.js";
144
+ import "./installs-puN7yKHH.js";
145
145
  import { n as formatConfigIssueLines } from "./issue-format-D0G927lb.js";
146
146
  import { t as buildChannelAccountSnapshot } from "./status-B8TZsG0t.js";
147
147
  import "./channels-status-issues-C6LrjLpF.js";
148
- import { i as resolveGatewayClientProfile, t as WEB_CLIENT_ALLOWED_ORIGINS_CONFIG_KEY } from "./client-profiles-BNQu4_Z_.js";
148
+ import { i as resolveGatewayClientProfile, t as WEB_CLIENT_ALLOWED_ORIGINS_CONFIG_KEY } from "./client-profiles-soWN7eGC.js";
149
149
  import "./daemon-install-helpers-C8mJ0UpL.js";
150
150
  import "./service-C_LTJsJU.js";
151
151
  import "./systemd-D6tSdsgx.js";
152
152
  import "./lifecycle-core-M-5Z8Xml.js";
153
153
  import "./systemd-hints-DzBfweRH.js";
154
154
  import { t as parsePort$1 } from "./parse-port-p0PJP2nG.js";
155
- import { n as addGatewayServiceCommands } from "./daemon-cli-YmPcKhvo.js";
155
+ import { n as addGatewayServiceCommands } from "./daemon-cli-BTld-maF.js";
156
156
  import "./diagnostics-Ds3p_NPY.js";
157
157
  import "./table-DoIju7rh.js";
158
158
  import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } from "./widearea-dns-DgeeMUtJ.js";
159
159
  import { i as toOptionString, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-6Uo_6p6X.js";
160
- import { a as probeGateway, n as collectEnabledInsecureOrDangerousFlags } from "./audit-C0WHA5BX.js";
160
+ import { a as probeGateway, n as collectEnabledInsecureOrDangerousFlags } from "./audit-CzREkjwC.js";
161
161
  import { t as discoverGatewayBeacons } from "./bonjour-discovery-C517Q6gA.js";
162
- import { a as noteStorageReplayResult, i as getStorageV1Snapshot, n as getStatusSummary, o as noteStorageRestartRequired, r as createStorageSupervisor, s as pickGatewaySelfPresence } from "./status-C5pbfqhh.js";
163
- import { c as redactOwner, d as redactSensitiveHealthSummary, f as styleHealthChannelLine, n as getHealthSnapshot, t as formatHealthChannelLines } from "./health-Q4hCJ8O2.js";
162
+ import { a as noteStorageReplayResult, i as getStorageV1Snapshot, n as getStatusSummary, o as noteStorageRestartRequired, r as createStorageSupervisor, s as pickGatewaySelfPresence } from "./status-BsGjriqM.js";
163
+ import { c as redactOwner, d as redactSensitiveHealthSummary, f as styleHealthChannelLine, n as getHealthSnapshot, t as formatHealthChannelLines } from "./health-BEgp6PEF.js";
164
164
  import { a as readPostQuiesceTranscriptDelta, i as readBulkTranscriptLines, o as replaySource, r as mergeBulkTranscriptSnapshotAndDelta, t as ReplayRowConflictError } from "./replay-BHfUVVHN.js";
165
165
  import "./session-key-resolution-DDJD1XYy.js";
166
- import { c as waitForStopDrain, l as withTimeout, o as tasksHandlers, r as getTaskOperatorRegistry, s as retryDelayMs, t as DEFAULT_RETENTION_DAYS } from "./task-runlog-retention-BZrnJGL1.js";
166
+ import { a as respondTaskRegistryUnavailable, c as tasksHandlers, d as withTimeout, i as resolveTaskOperatorRegistry, l as retryDelayMs, r as getTaskOperatorRegistry, t as DEFAULT_RETENTION_DAYS, u as waitForStopDrain } from "./task-runlog-retention-GZu-QuBY.js";
167
167
  import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-DonecnKL.js";
168
168
  import { h as normalizeUpdateChannel, l as DEFAULT_PACKAGE_CHANNEL, n as checkUpdateStatus, o as resolveNpmChannelTag, r as compareSemverStrings } from "./channel-account-context-C9otZxLF.js";
169
- import { t as reconcileBundledInstalls } from "./reconcile-bundled-TswjG3xv.js";
169
+ import { t as reconcileBundledInstalls } from "./reconcile-bundled-DJKaKSgk.js";
170
170
  import { a as resolveCommandSecretsFromActiveRuntimeSnapshot, i as prepareSecretsRuntimeSnapshot, n as clearSecretsRuntimeSnapshot, r as getActiveSecretsRuntimeSnapshot, t as activateSecretsRuntimeSnapshot } from "./runtime-Ch9itsH4.js";
171
171
  import "./onboarding.secret-input-BCxy1JxD.js";
172
- import { t as runOnboardingWizard } from "./onboarding-CujUbWy2.js";
172
+ import { t as runOnboardingWizard } from "./onboarding-BKoaWOxQ.js";
173
173
  import { a as computeJobNextRunAtMs, c as findJobOrThrow, d as recomputeNextRuns, f as recomputeNextRunsForMaintenance, h as produceCronAgentTurn, i as applyJobPatch, l as isJobDue, m as resolveJobPayloadTextForMain, o as createJob, p as recordScheduleComputeError, r as resolveStaleClaimAdoptionMs, s as cronShapeSupportsIdentity, t as CRON_HEARTBEAT_ADAPTER_ID, u as nextWakeAtMs } from "./recovery-adapter-BF5ESanQ.js";
174
- import { a as sendApnsAlert, c as parseMessageWithAttachments, d as shouldLogWs, f as summarizeAgentEventForWsLog, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, p as setGatewayWsLogStyle, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration, u as logWs } from "./push-apns-BmrddV2R.js";
174
+ import { a as sendApnsAlert, c as parseMessageWithAttachments, d as shouldLogWs, f as summarizeAgentEventForWsLog, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, p as setGatewayWsLogStyle, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration, u as logWs } from "./push-apns-qUm5cL9P.js";
175
175
  import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-CRvbl5q3.js";
176
- import { a as readChatHistoryPage, c as unsubscribeSessionChanges, i as decodeHistoryCursor, l as assertValidParams, o as resolveDbLeafEntryId, r as InvalidHistoryCursorError, s as resolveDbMessageEntryById, t as sessionsHandlers } from "./sessions-Dcu0bdQ7.js";
177
- import { n as isNodeCommandAllowed, r as resolveNodeCommandAllowlist } from "./node-command-policy-B9A0wAU6.js";
176
+ import { a as readChatHistoryPage, c as unsubscribeSessionChanges, i as decodeHistoryCursor, l as assertValidParams, o as resolveDbLeafEntryId, r as InvalidHistoryCursorError, s as resolveDbMessageEntryById, t as sessionsHandlers } from "./sessions-BlXxa7bM.js";
177
+ import { n as isNodeCommandAllowed, r as resolveNodeCommandAllowlist } from "./node-command-policy-6yjbNtx-.js";
178
178
  import "./node-service-BnyKZNqa.js";
179
179
  import "./status.update-BOB92yBQ.js";
180
180
  import { i as resolveActiveLogFile, n as readLogSlice } from "./log-tail-BAg8b5Wq.js";
181
181
  import { t as installSkill } from "./skills-install-DqCRPwE1.js";
182
- import { r as runGatewayUpdate } from "./update-runner-DohE1D7D.js";
182
+ import { r as runGatewayUpdate } from "./update-runner-CBbs-iN_.js";
183
183
  import { n as resolveWebClientPackagedRootSync, t as WEB_CLIENT_BUNDLE_MISSING_MESSAGE } from "./web-client-assets-CJyKwFRS.js";
184
184
  import { i as shouldIncludeHook, r as resolveHookConfig, t as loadWorkspaceHookEntries } from "./workspace-CcKQx_l1.js";
185
- import { c as heartbeatProbeRunArtifactId, d as runIsolatedHeartbeatProbe, i as HEARTBEAT_PROBE_REASON, l as isHeartbeatProbeError, o as assertHeartbeatProbeDeliveryIsSafe, p as readValidationActivation, r as HEARTBEAT_PROBE_ALLOWED_TARGET, s as assertHeartbeatProbeParamsAreClosed, t as VALIDATION_ABORT_COMMAND, u as probeSessionKey$1 } from "./operator-commands-Bfd55UfE.js";
185
+ import { c as heartbeatProbeRunArtifactId, d as runIsolatedHeartbeatProbe, i as HEARTBEAT_PROBE_REASON, l as isHeartbeatProbeError, o as assertHeartbeatProbeDeliveryIsSafe, p as readValidationActivation, r as HEARTBEAT_PROBE_ALLOWED_TARGET, s as assertHeartbeatProbeParamsAreClosed, t as VALIDATION_ABORT_COMMAND, u as probeSessionKey$1 } from "./operator-commands-EsKoI4yV.js";
186
186
  import { createRequire } from "node:module";
187
187
  import { cpuUsage, memoryUsage, resourceUsage, uptime } from "node:process";
188
188
  import { fileURLToPath, pathToFileURL } from "node:url";
@@ -1082,7 +1082,7 @@ function resolveVerificationStore(params = {}) {
1082
1082
 
1083
1083
  //#endregion
1084
1084
  //#region src/infra/exec-approval-forwarder.ts
1085
- const log$29 = createSubsystemLogger("gateway/exec-approvals");
1085
+ const log$30 = createSubsystemLogger("gateway/exec-approvals");
1086
1086
  const DEFAULT_MODE = "session";
1087
1087
  function normalizeMode(mode) {
1088
1088
  return mode ?? DEFAULT_MODE;
@@ -1220,7 +1220,7 @@ async function deliverToTargets(params) {
1220
1220
  payloads: [{ text: params.text }]
1221
1221
  });
1222
1222
  } catch (err) {
1223
- log$29.error(`exec approvals: failed to deliver to ${channel}:${target.to}: ${String(err)}`);
1223
+ log$30.error(`exec approvals: failed to deliver to ${channel}:${target.to}: ${String(err)}`);
1224
1224
  }
1225
1225
  });
1226
1226
  await Promise.allSettled(deliveries);
@@ -1309,7 +1309,7 @@ function createExecApprovalForwarder(deps = {}) {
1309
1309
  deliver,
1310
1310
  shouldSend: () => pending.get(request.id) === pendingEntry
1311
1311
  }).catch((err) => {
1312
- log$29.error(`exec approvals: failed to deliver request ${request.id}: ${String(err)}`);
1312
+ log$30.error(`exec approvals: failed to deliver request ${request.id}: ${String(err)}`);
1313
1313
  });
1314
1314
  return true;
1315
1315
  };
@@ -1681,7 +1681,7 @@ function scheduleGatewayUpdateCheck(params) {
1681
1681
 
1682
1682
  //#endregion
1683
1683
  //#region src/sessions/session-runs/restart-transitions.ts
1684
- const log$28 = createSubsystemLogger("sessions/restart-transitions");
1684
+ const log$29 = createSubsystemLogger("sessions/restart-transitions");
1685
1685
  async function transition(input, recoveryEnabled) {
1686
1686
  const store = input.store ?? getConfiguredSessionStorageRuntime()?.runtime?.runs;
1687
1687
  if (!store) return [];
@@ -1692,14 +1692,14 @@ async function transition(input, recoveryEnabled) {
1692
1692
  recoveryReason: input.reason,
1693
1693
  recoveryEnabled
1694
1694
  });
1695
- if (transitioned.length > 0) log$28.info("transitioned active runs for restart", {
1695
+ if (transitioned.length > 0) log$29.info("transitioned active runs for restart", {
1696
1696
  count: transitioned.length,
1697
1697
  recoveryEnabled,
1698
1698
  reason: input.reason
1699
1699
  });
1700
1700
  return transitioned;
1701
1701
  } catch (err) {
1702
- log$28.warn("failed to transition active runs for restart", {
1702
+ log$29.warn("failed to transition active runs for restart", {
1703
1703
  recoveryEnabled,
1704
1704
  error: String(err)
1705
1705
  });
@@ -1768,7 +1768,7 @@ function resolveChannelRestartReason(snapshot, evaluation) {
1768
1768
 
1769
1769
  //#endregion
1770
1770
  //#region src/gateway/channel-health-monitor.ts
1771
- const log$27 = createSubsystemLogger("gateway/health-monitor");
1771
+ const log$28 = createSubsystemLogger("gateway/health-monitor");
1772
1772
  const DEFAULT_CHECK_INTERVAL_MS = 5 * 6e4;
1773
1773
  const DEFAULT_MONITOR_STARTUP_GRACE_MS = 6e4;
1774
1774
  const DEFAULT_COOLDOWN_CYCLES = 2;
@@ -1828,11 +1828,11 @@ function startChannelHealthMonitor(deps) {
1828
1828
  if (now - record.lastRestartAt <= cooldownMs) continue;
1829
1829
  pruneOldRestarts(record, now);
1830
1830
  if (record.restartsThisHour.length >= maxRestartsPerHour) {
1831
- log$27.warn?.(`[${channelId}:${accountId}] health-monitor: hit ${maxRestartsPerHour} restarts/hour limit, skipping`);
1831
+ log$28.warn?.(`[${channelId}:${accountId}] health-monitor: hit ${maxRestartsPerHour} restarts/hour limit, skipping`);
1832
1832
  continue;
1833
1833
  }
1834
1834
  const reason = resolveChannelRestartReason(status, health);
1835
- log$27.info?.(`[${channelId}:${accountId}] health-monitor: restarting (reason: ${reason})`);
1835
+ log$28.info?.(`[${channelId}:${accountId}] health-monitor: restarting (reason: ${reason})`);
1836
1836
  try {
1837
1837
  if (status.running) await channelManager.stopChannel(channelId, accountId);
1838
1838
  channelManager.resetRestartAttempts(channelId, accountId);
@@ -1841,7 +1841,7 @@ function startChannelHealthMonitor(deps) {
1841
1841
  record.restartsThisHour.push({ at: now });
1842
1842
  restartRecords.set(key, record);
1843
1843
  } catch (err) {
1844
- log$27.error?.(`[${channelId}:${accountId}] health-monitor: restart failed: ${String(err)}`);
1844
+ log$28.error?.(`[${channelId}:${accountId}] health-monitor: restart failed: ${String(err)}`);
1845
1845
  }
1846
1846
  }
1847
1847
  }
@@ -1861,7 +1861,7 @@ function startChannelHealthMonitor(deps) {
1861
1861
  abortSignal?.addEventListener("abort", stop, { once: true });
1862
1862
  timer = setInterval(() => void runCheck(), checkIntervalMs);
1863
1863
  if (typeof timer === "object" && "unref" in timer) timer.unref();
1864
- log$27.info?.(`started (interval: ${Math.round(checkIntervalMs / 1e3)}s, startup-grace: ${Math.round(timing.monitorStartupGraceMs / 1e3)}s, channel-connect-grace: ${Math.round(timing.channelConnectGraceMs / 1e3)}s)`);
1864
+ log$28.info?.(`started (interval: ${Math.round(checkIntervalMs / 1e3)}s, startup-grace: ${Math.round(timing.monitorStartupGraceMs / 1e3)}s, channel-connect-grace: ${Math.round(timing.channelConnectGraceMs / 1e3)}s)`);
1865
1865
  }
1866
1866
  return { stop };
1867
1867
  }
@@ -3067,10 +3067,10 @@ async function assembleFirstPartyAdapters(cfg, wiring) {
3067
3067
  const { getConfiguredSessionStorageRuntime } = await import("./model-selection-k68XU4oS.js").then((n) => n.hi);
3068
3068
  const runtime = getConfiguredSessionStorageRuntime()?.runtime;
3069
3069
  const gatewayInstanceId = getGatewayInstanceId();
3070
- const { tryGetAgentTurnRuntime } = await import("./agent-turn-runner-BEvwtTis.js").then((n) => n.t);
3070
+ const { tryGetAgentTurnRuntime } = await import("./agent-turn-runner-CUoz_Fkl.js").then((n) => n.t);
3071
3071
  const backbone = tryGetAgentTurnRuntime()?.backbone;
3072
3072
  const { createOutboundDeliveryRecoveryAdapter } = await import("./delivery-recovery-adapter-CXwijCdD.js");
3073
- const { deliverOutboundPayloads } = await import("./deliver-D37woOwV.js").then((n) => n.n);
3073
+ const { deliverOutboundPayloads } = await import("./deliver-rLn-23ud.js").then((n) => n.n);
3074
3074
  adapters.push(createOutboundDeliveryRecoveryAdapter({
3075
3075
  cfg,
3076
3076
  deliver: deliverOutboundPayloads,
@@ -3084,7 +3084,7 @@ async function assembleFirstPartyAdapters(cfg, wiring) {
3084
3084
  sessionRuns = void 0;
3085
3085
  }
3086
3086
  if (sessionRuns && wiring?.agentTurnStager) {
3087
- const { createSessionRunRecoveryAdapter } = await import("./recovery-adapter-DW0R_vFE.js");
3087
+ const { createSessionRunRecoveryAdapter } = await import("./recovery-adapter-DF25-zSH.js");
3088
3088
  adapters.push(createSessionRunRecoveryAdapter({
3089
3089
  store: sessionRuns,
3090
3090
  cfg,
@@ -3100,7 +3100,7 @@ async function assembleFirstPartyAdapters(cfg, wiring) {
3100
3100
  lease: wiring?.lease ? () => wiring.lease?.() ?? { isArmed: () => false } : void 0
3101
3101
  }));
3102
3102
  if (backbone && wiring?.agentTurnStager) {
3103
- const { createAgentTurnRecoveryAdapter } = await import("./agent-turn-recovery-adapter-DnvjgbK0.js");
3103
+ const { createAgentTurnRecoveryAdapter } = await import("./agent-turn-recovery-adapter-CL4IrGUo.js");
3104
3104
  adapters.push(createAgentTurnRecoveryAdapter({
3105
3105
  backbone,
3106
3106
  stager: wiring.agentTurnStager
@@ -3122,7 +3122,7 @@ async function assembleFirstPartyAdapters(cfg, wiring) {
3122
3122
  }));
3123
3123
  }
3124
3124
  if (sessionRuns) {
3125
- const { createEmbeddedPiRecoveryAdapter } = await import("./pi-embedded-recovery-adapter-B8Goyik3.js");
3125
+ const { createEmbeddedPiRecoveryAdapter } = await import("./pi-embedded-recovery-adapter-BHTdeEKa.js");
3126
3126
  adapters.push(createEmbeddedPiRecoveryAdapter({
3127
3127
  sessionRuns,
3128
3128
  cfg,
@@ -3130,7 +3130,7 @@ async function assembleFirstPartyAdapters(cfg, wiring) {
3130
3130
  stager: wiring?.agentTurnStager,
3131
3131
  isRunActive: isEmbeddedPiRunActive
3132
3132
  }));
3133
- const { createAcpRuntimeRecoveryAdapter } = await import("./recovery-adapter-DyPV7syS.js");
3133
+ const { createAcpRuntimeRecoveryAdapter } = await import("./recovery-adapter-BT12fVyO.js");
3134
3134
  adapters.push(createAcpRuntimeRecoveryAdapter({ sessionRuns }));
3135
3135
  }
3136
3136
  if (backbone) {
@@ -3771,7 +3771,7 @@ function createChannelManager(opts) {
3771
3771
 
3772
3772
  //#endregion
3773
3773
  //#region src/gateway/server-chat.ts
3774
- const log$26 = createSubsystemLogger("gateway/chat-final");
3774
+ const log$27 = createSubsystemLogger("gateway/chat-final");
3775
3775
  const CHAT_TERMINAL_DURABILITY_TIMEOUT_MS = 5e3;
3776
3776
  function resolveHeartbeatAckMaxChars$1() {
3777
3777
  try {
@@ -4013,14 +4013,14 @@ function createAgentEventHandler({ broadcast, broadcastToConnIds, nodeSendToSess
4013
4013
  const pending = pendingTerminalBySession.get(sessionKey);
4014
4014
  const durability = waitForPendingWrites(writes, CHAT_TERMINAL_DURABILITY_TIMEOUT_MS);
4015
4015
  const gate = (pending ?? Promise.resolve()).then(() => durability).then((outcome) => {
4016
- if (outcome === "timeout") log$26.warn("chat terminal broadcast before transcript durability (timeout)", {
4016
+ if (outcome === "timeout") log$27.warn("chat terminal broadcast before transcript durability (timeout)", {
4017
4017
  runId: sourceRunId,
4018
4018
  sessionKey,
4019
4019
  timeoutMs: CHAT_TERMINAL_DURABILITY_TIMEOUT_MS
4020
4020
  });
4021
4021
  sendChatTerminal(sessionKey, payload);
4022
4022
  }).catch((err) => {
4023
- log$26.warn("chat terminal broadcast failed while waiting for transcript durability", {
4023
+ log$27.warn("chat terminal broadcast failed while waiting for transcript durability", {
4024
4024
  runId: sourceRunId,
4025
4025
  sessionKey,
4026
4026
  err
@@ -4127,7 +4127,7 @@ function createAgentEventHandler({ broadcast, broadcastToConnIds, nodeSendToSess
4127
4127
  * Automatically starts `gog gmail watch serve` when the gateway starts,
4128
4128
  * if hooks.gmail is configured with an account.
4129
4129
  */
4130
- const log$25 = createSubsystemLogger("gmail-watcher");
4130
+ const log$26 = createSubsystemLogger("gmail-watcher");
4131
4131
  const ADDRESS_IN_USE_RE = /address already in use|EADDRINUSE/i;
4132
4132
  function isAddressInUseError(line) {
4133
4133
  return ADDRESS_IN_USE_RE.test(line);
@@ -4151,13 +4151,13 @@ async function startGmailWatch(cfg) {
4151
4151
  const result = await runCommandWithTimeout(args, { timeoutMs: 12e4 });
4152
4152
  if (result.code !== 0) {
4153
4153
  const message = result.stderr || result.stdout || "gog watch start failed";
4154
- log$25.error(`watch start failed: ${message}`);
4154
+ log$26.error(`watch start failed: ${message}`);
4155
4155
  return false;
4156
4156
  }
4157
- log$25.info(`watch started for ${cfg.account}`);
4157
+ log$26.info(`watch started for ${cfg.account}`);
4158
4158
  return true;
4159
4159
  } catch (err) {
4160
- log$25.error(`watch start error: ${String(err)}`);
4160
+ log$26.error(`watch start error: ${String(err)}`);
4161
4161
  return false;
4162
4162
  }
4163
4163
  }
@@ -4166,7 +4166,7 @@ async function startGmailWatch(cfg) {
4166
4166
  */
4167
4167
  function spawnGogServe(cfg) {
4168
4168
  const args = buildGogWatchServeArgs(cfg);
4169
- log$25.info(`starting gog ${args.join(" ")}`);
4169
+ log$26.info(`starting gog ${args.join(" ")}`);
4170
4170
  let addressInUse = false;
4171
4171
  const child = spawn("gog", args, {
4172
4172
  stdio: [
@@ -4178,25 +4178,25 @@ function spawnGogServe(cfg) {
4178
4178
  });
4179
4179
  child.stdout?.on("data", (data) => {
4180
4180
  const line = data.toString().trim();
4181
- if (line) log$25.info(`[gog] ${line}`);
4181
+ if (line) log$26.info(`[gog] ${line}`);
4182
4182
  });
4183
4183
  child.stderr?.on("data", (data) => {
4184
4184
  const line = data.toString().trim();
4185
4185
  if (!line) return;
4186
4186
  if (isAddressInUseError(line)) addressInUse = true;
4187
- log$25.warn(`[gog] ${line}`);
4187
+ log$26.warn(`[gog] ${line}`);
4188
4188
  });
4189
4189
  child.on("error", (err) => {
4190
- log$25.error(`gog process error: ${String(err)}`);
4190
+ log$26.error(`gog process error: ${String(err)}`);
4191
4191
  });
4192
4192
  child.on("exit", (code, signal) => {
4193
4193
  if (shuttingDown) return;
4194
4194
  if (addressInUse) {
4195
- log$25.warn("gog serve failed to bind (address already in use); stopping restarts. Another watcher is likely running. Set OPENCLAW_SKIP_GMAIL_WATCHER=1 or stop the other process.");
4195
+ log$26.warn("gog serve failed to bind (address already in use); stopping restarts. Another watcher is likely running. Set OPENCLAW_SKIP_GMAIL_WATCHER=1 or stop the other process.");
4196
4196
  watcherProcess = null;
4197
4197
  return;
4198
4198
  }
4199
- log$25.warn(`gog exited (code=${code}, signal=${signal}); restarting in 5s`);
4199
+ log$26.warn(`gog exited (code=${code}, signal=${signal}); restarting in 5s`);
4200
4200
  watcherProcess = null;
4201
4201
  setTimeout(() => {
4202
4202
  if (shuttingDown || !currentConfig) return;
@@ -4236,15 +4236,15 @@ async function startGmailWatcher(cfg) {
4236
4236
  port: runtimeConfig.serve.port,
4237
4237
  target: runtimeConfig.tailscale.target
4238
4238
  });
4239
- log$25.info(`tailscale ${runtimeConfig.tailscale.mode} configured for port ${runtimeConfig.serve.port}`);
4239
+ log$26.info(`tailscale ${runtimeConfig.tailscale.mode} configured for port ${runtimeConfig.serve.port}`);
4240
4240
  } catch (err) {
4241
- log$25.error(`tailscale setup failed: ${String(err)}`);
4241
+ log$26.error(`tailscale setup failed: ${String(err)}`);
4242
4242
  return {
4243
4243
  started: false,
4244
4244
  reason: `tailscale setup failed: ${String(err)}`
4245
4245
  };
4246
4246
  }
4247
- if (!await startGmailWatch(runtimeConfig)) log$25.warn("gmail watch start failed, but continuing with serve");
4247
+ if (!await startGmailWatch(runtimeConfig)) log$26.warn("gmail watch start failed, but continuing with serve");
4248
4248
  shuttingDown = false;
4249
4249
  watcherProcess = spawnGogServe(runtimeConfig);
4250
4250
  const renewMs = runtimeConfig.renewEveryMinutes * 6e4;
@@ -4252,7 +4252,7 @@ async function startGmailWatcher(cfg) {
4252
4252
  if (shuttingDown) return;
4253
4253
  startGmailWatch(runtimeConfig);
4254
4254
  }, renewMs);
4255
- log$25.info(`gmail watcher started for ${runtimeConfig.account} (renew every ${runtimeConfig.renewEveryMinutes}m)`);
4255
+ log$26.info(`gmail watcher started for ${runtimeConfig.account} (renew every ${runtimeConfig.renewEveryMinutes}m)`);
4256
4256
  return { started: true };
4257
4257
  }
4258
4258
  /**
@@ -4265,7 +4265,7 @@ async function stopGmailWatcher() {
4265
4265
  renewInterval = null;
4266
4266
  }
4267
4267
  if (watcherProcess) {
4268
- log$25.info("stopping gmail watcher");
4268
+ log$26.info("stopping gmail watcher");
4269
4269
  watcherProcess.kill("SIGTERM");
4270
4270
  await new Promise((resolve) => {
4271
4271
  const timeout = setTimeout(() => {
@@ -4280,7 +4280,7 @@ async function stopGmailWatcher() {
4280
4280
  watcherProcess = null;
4281
4281
  }
4282
4282
  currentConfig = null;
4283
- log$25.info("gmail watcher stopped");
4283
+ log$26.info("gmail watcher stopped");
4284
4284
  }
4285
4285
 
4286
4286
  //#endregion
@@ -5656,7 +5656,7 @@ async function runCronIsolatedAgentTurn(params) {
5656
5656
 
5657
5657
  //#endregion
5658
5658
  //#region src/cron/run-log.ts
5659
- const log$24 = createSubsystemLogger("cron/run-log");
5659
+ const log$25 = createSubsystemLogger("cron/run-log");
5660
5660
  function assertSafeCronRunLogJobId(jobId) {
5661
5661
  const trimmed = jobId.trim();
5662
5662
  if (!trimmed) throw new Error("invalid cron run log job id");
@@ -5698,7 +5698,7 @@ async function pruneIfNeeded(filePath, opts) {
5698
5698
  const stat = await fs$1.stat(filePath).catch(() => null);
5699
5699
  if (!stat || stat.size <= opts.maxBytes) return;
5700
5700
  const raw = await fs$1.readFile(filePath, "utf-8").catch((err) => {
5701
- log$24.warn("cron run-log: prune skipped (read failed)", {
5701
+ log$25.warn("cron run-log: prune skipped (read failed)", {
5702
5702
  filePath,
5703
5703
  err: String(err)
5704
5704
  });
@@ -11741,9 +11741,6 @@ const VOICE_INTERRUPTED_MARKER = " [interrupted]";
11741
11741
  const CHAT_HISTORY_TEXT_MAX_CHARS = 12e3;
11742
11742
  const CHAT_HISTORY_MAX_SINGLE_MESSAGE_BYTES = 128 * 1024;
11743
11743
  const CHAT_HISTORY_OVERSIZED_PLACEHOLDER = "[chat.history omitted: message too large]";
11744
- /** Twice the default storage probe timeout: how long chat.history waits for a booting gateway's session storage before it answers UNAVAILABLE. */
11745
- const CHAT_HISTORY_STORAGE_START_WAIT_MS = 1e4;
11746
- const CHAT_HISTORY_STORAGE_START_RETRY_AFTER_MS = 1e3;
11747
11744
  let chatHistoryPlaceholderEmitCount = 0;
11748
11745
  function stripDisallowedChatControlChars(message) {
11749
11746
  let output = "";
@@ -12545,13 +12542,6 @@ const chatHandlers = {
12545
12542
  return;
12546
12543
  }
12547
12544
  const { sessionKey, limit, maxChars, before } = params;
12548
- if (!(await context.storageStartup?.whenReleased(CHAT_HISTORY_STORAGE_START_WAIT_MS) ?? true)) {
12549
- respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, "session storage is still starting", {
12550
- retryable: true,
12551
- retryAfterMs: CHAT_HISTORY_STORAGE_START_RETRY_AFTER_MS
12552
- }));
12553
- return;
12554
- }
12555
12545
  const { cfg, storePath, entry } = loadSessionEntry(sessionKey);
12556
12546
  const sessionId = entry?.sessionId;
12557
12547
  const sessionAgentId = resolveSessionAgentId({
@@ -14742,7 +14732,7 @@ async function replayApproval(ctx) {
14742
14732
 
14743
14733
  //#endregion
14744
14734
  //#region src/infra/exec-audit.ts
14745
- const log$23 = createSubsystemLogger("infra/exec-audit");
14735
+ const log$24 = createSubsystemLogger("infra/exec-audit");
14746
14736
  function emitAuditRecord(request, decision) {
14747
14737
  const inv = request.invocation;
14748
14738
  const argvSummary = inv.mode === "argv" ? `${inv.executable} ${redactArgvForAudit(inv.args).join(" ")}` : inv.mode === "shell" ? redactCommandText(inv.command) : inv.mode === "approved-script" ? inv.scriptId : `${inv.serverId}/${inv.toolName}`;
@@ -14773,7 +14763,7 @@ function emitAuditRecord(request, decision) {
14773
14763
  timeoutMs: request.timeoutMs,
14774
14764
  stdinPresent: request.stdin === "present-redacted"
14775
14765
  };
14776
- if (record.outcome === "deny") log$23.warn("exec-audit deny", {
14766
+ if (record.outcome === "deny") log$24.warn("exec-audit deny", {
14777
14767
  effect: record.effect,
14778
14768
  sourceRule: record.sourceRule,
14779
14769
  reason: record.reason,
@@ -14782,7 +14772,7 @@ function emitAuditRecord(request, decision) {
14782
14772
  normalizedArgv: record.normalizedArgv,
14783
14773
  policyId: record.policyId
14784
14774
  });
14785
- else log$23.info("exec-audit", {
14775
+ else log$24.info("exec-audit", {
14786
14776
  effect: record.effect,
14787
14777
  sourceRule: record.sourceRule,
14788
14778
  outcome: record.outcome,
@@ -15130,7 +15120,7 @@ function reEvaluatePoliciesForPath(reResolvedRequest, envSanitization, policies
15130
15120
 
15131
15121
  //#endregion
15132
15122
  //#region src/infra/load-policies-for-request.ts
15133
- const log$22 = createSubsystemLogger("infra/load-policies-for-request");
15123
+ const log$23 = createSubsystemLogger("infra/load-policies-for-request");
15134
15124
  /**
15135
15125
  * User-scoped policy source backed by the v2 exec-approvals store
15136
15126
  * (`~/.openclaw/exec-approvals.json`). The store is migrated v1→v2 on load
@@ -15149,7 +15139,7 @@ function createUserPolicySource() {
15149
15139
  try {
15150
15140
  return (await loadExecApprovalsV2()).policies;
15151
15141
  } catch (error) {
15152
- log$22.warn("user policy store load failed; user policies will not apply", { error });
15142
+ log$23.warn("user policy store load failed; user policies will not apply", { error });
15153
15143
  return [];
15154
15144
  }
15155
15145
  } };
@@ -16294,7 +16284,7 @@ const nodeHandlers = {
16294
16284
  const p = params;
16295
16285
  const payloadJSON = typeof p.payloadJSON === "string" ? p.payloadJSON : p.payload !== void 0 ? JSON.stringify(p.payload) : null;
16296
16286
  await respondUnavailableOnThrow(respond, async () => {
16297
- const { handleNodeEvent } = await import("./server-node-events-MOX6FUiJ.js");
16287
+ const { handleNodeEvent } = await import("./server-node-events-BYTgaAay.js");
16298
16288
  const nodeId = client?.connect?.device?.id ?? client?.connect?.client?.id ?? "node";
16299
16289
  await handleNodeEvent({
16300
16290
  deps: context.deps,
@@ -17091,7 +17081,7 @@ function resolveSteerResult(params) {
17091
17081
 
17092
17082
  //#endregion
17093
17083
  //#region src/gateway/session-title-completion.ts
17094
- const log$21 = createSubsystemLogger("gateway/session-title-completion");
17084
+ const log$22 = createSubsystemLogger("gateway/session-title-completion");
17095
17085
  const SESSION_TITLE_COMPLETION_TIMEOUT_MS = 15e3;
17096
17086
  const SESSION_TITLE_MAX_CHARS = 60;
17097
17087
  /** Upstream openclaw's dashboard-session-title prompt wording (ADR 0084 s5, mission M4). */
@@ -17142,7 +17132,7 @@ async function generateSessionTitleCompletion(req, overrides) {
17142
17132
  try {
17143
17133
  const resolved = deps.resolveModel(provider, model, agentDir, cfg);
17144
17134
  if (!resolved.model) {
17145
- log$21.warn("session title model unresolved", {
17135
+ log$22.warn("session title model unresolved", {
17146
17136
  ...logFields,
17147
17137
  error: resolved.error
17148
17138
  });
@@ -17156,7 +17146,7 @@ async function generateSessionTitleCompletion(req, overrides) {
17156
17146
  let apiKey;
17157
17147
  if (!auth.apiKey) {
17158
17148
  if (auth.mode !== "aws-sdk") {
17159
- log$21.warn("session title no api key resolved", {
17149
+ log$22.warn("session title no api key resolved", {
17160
17150
  ...logFields,
17161
17151
  mode: auth.mode
17162
17152
  });
@@ -17171,7 +17161,7 @@ async function generateSessionTitleCompletion(req, overrides) {
17171
17161
  })).token;
17172
17162
  else apiKey = auth.apiKey;
17173
17163
  if (controller.signal.aborted) {
17174
- log$21.warn("session title generation timed out before dispatch", logFields);
17164
+ log$22.warn("session title generation timed out before dispatch", logFields);
17175
17165
  return null;
17176
17166
  }
17177
17167
  const response = await deps.completeSimple(resolved.model, {
@@ -17188,11 +17178,11 @@ async function generateSessionTitleCompletion(req, overrides) {
17188
17178
  signal: controller.signal
17189
17179
  });
17190
17180
  if (response.stopReason === "aborted") {
17191
- log$21.warn("session title generation timed out", logFields);
17181
+ log$22.warn("session title generation timed out", logFields);
17192
17182
  return null;
17193
17183
  }
17194
17184
  if (response.stopReason === "error") {
17195
- log$21.warn("session title generation provider error", {
17185
+ log$22.warn("session title generation provider error", {
17196
17186
  ...logFields,
17197
17187
  error: response.errorMessage
17198
17188
  });
@@ -17202,7 +17192,7 @@ async function generateSessionTitleCompletion(req, overrides) {
17202
17192
  if (!text) return null;
17203
17193
  return normalizeSessionTitle(text);
17204
17194
  } catch (error) {
17205
- log$21.warn("session title generation failed", {
17195
+ log$22.warn("session title generation failed", {
17206
17196
  ...logFields,
17207
17197
  error: error instanceof Error ? error.message : String(error)
17208
17198
  });
@@ -17383,6 +17373,218 @@ const skillsHandlers = {
17383
17373
  }
17384
17374
  };
17385
17375
 
17376
+ //#endregion
17377
+ //#region src/gateway/storage-method-policy.ts
17378
+ const STORAGE_METHOD_POLICY_REQUIRED = [
17379
+ "chat.history",
17380
+ "sessions.claims.status",
17381
+ "sessions.runHistory",
17382
+ "sessions.runs.cancel",
17383
+ "sessions.runs.continue",
17384
+ "sessions.runs.events",
17385
+ "sessions.runs.get",
17386
+ "sessions.runs.list",
17387
+ "tasks.resetBudget",
17388
+ "tasks.rollback",
17389
+ "tasks.runDryRun",
17390
+ "tasks.runEvents",
17391
+ "tasks.runs.get",
17392
+ "tasks.runs.events",
17393
+ "tasks.runs.list",
17394
+ "tasks.status"
17395
+ ];
17396
+ const STORAGE_METHOD_POLICY_BOOT_WRITE = [
17397
+ "chat.inject",
17398
+ "sessions.compact",
17399
+ "sessions.create",
17400
+ "sessions.delete",
17401
+ "sessions.patch",
17402
+ "sessions.reset"
17403
+ ];
17404
+ const STORAGE_METHOD_POLICY_NONE = [
17405
+ "connect",
17406
+ "health",
17407
+ "status",
17408
+ "logs.tail",
17409
+ "voicewake.get",
17410
+ "voicewake.set",
17411
+ "channels.status",
17412
+ "channels.logout",
17413
+ "chat.abort",
17414
+ "chat.send",
17415
+ "sessions.abort",
17416
+ "wake",
17417
+ "cron.list",
17418
+ "cron.status",
17419
+ "cron.add",
17420
+ "cron.update",
17421
+ "cron.remove",
17422
+ "cron.run",
17423
+ "cron.runs",
17424
+ "device.pair.list",
17425
+ "device.pair.approve",
17426
+ "device.pair.reject",
17427
+ "device.pair.remove",
17428
+ "device.token.rotate",
17429
+ "device.token.revoke",
17430
+ "diagnostics.runtime.snapshot",
17431
+ "diagnostics.capture.cpu",
17432
+ "diagnostics.capture.heap",
17433
+ "diagnostics.capture.report",
17434
+ "diagnostics.profiling.start",
17435
+ "diagnostics.profiling.stop",
17436
+ "doctor.memory.status",
17437
+ "doctor.recovery.inspect",
17438
+ "doctor.recovery.plan",
17439
+ "doctor.recovery.apply",
17440
+ "exec.approvals.get",
17441
+ "exec.approvals.set",
17442
+ "exec.approvals.node.get",
17443
+ "exec.approvals.node.set",
17444
+ "web.login.start",
17445
+ "web.login.wait",
17446
+ "models.authStatus",
17447
+ "models.list",
17448
+ "config.get",
17449
+ "config.schema",
17450
+ "config.set",
17451
+ "config.patch",
17452
+ "config.apply",
17453
+ "wizard.start",
17454
+ "wizard.next",
17455
+ "wizard.cancel",
17456
+ "wizard.status",
17457
+ "talk.config",
17458
+ "talk.mode",
17459
+ "talk.catalog",
17460
+ "talk.session.create",
17461
+ "talk.session.appendAudio",
17462
+ "talk.session.close",
17463
+ "talk.session.cancelTurn",
17464
+ "talk.session.mark",
17465
+ "talk.session.bargeIn",
17466
+ "talk.realtime.session",
17467
+ "talk.realtime.audio",
17468
+ "talk.realtime.mark",
17469
+ "talk.realtime.toolResult",
17470
+ "talk.realtime.bargeIn",
17471
+ "talk.realtime.stop",
17472
+ "talk.realtime.status",
17473
+ "talk.metrics",
17474
+ "tools.catalog",
17475
+ "tts.status",
17476
+ "tts.enable",
17477
+ "tts.disable",
17478
+ "tts.convert",
17479
+ "tts.setProvider",
17480
+ "tts.providers",
17481
+ "skills.status",
17482
+ "skills.bins",
17483
+ "skills.install",
17484
+ "skills.update",
17485
+ "sessions.subscribe",
17486
+ "sessions.list",
17487
+ "sessions.describe",
17488
+ "sessions.compaction.list",
17489
+ "sessions.runs",
17490
+ "sessions.thresholds",
17491
+ "sessions.interrupt",
17492
+ "sessions.preview",
17493
+ "sessions.resolve",
17494
+ "sessions.title.prepare",
17495
+ "sessions.steer",
17496
+ "last-heartbeat",
17497
+ "set-heartbeats",
17498
+ "system-presence",
17499
+ "system-event",
17500
+ "update.run",
17501
+ "node.pair.request",
17502
+ "node.pair.list",
17503
+ "node.pair.approve",
17504
+ "node.pair.reject",
17505
+ "node.pair.verify",
17506
+ "node.rename",
17507
+ "node.list",
17508
+ "node.describe",
17509
+ "node.canvas.capability.refresh",
17510
+ "node.invoke",
17511
+ "node.invoke.result",
17512
+ "node.event",
17513
+ "plugins/health",
17514
+ "push.test",
17515
+ "send",
17516
+ "poll",
17517
+ "usage.status",
17518
+ "usage.cost",
17519
+ "sessions.usage",
17520
+ "sessions.usage.timeseries",
17521
+ "sessions.usage.logs",
17522
+ "agent",
17523
+ "agent.identity.get",
17524
+ "agent.wait",
17525
+ "agent.nudge",
17526
+ "agents.list",
17527
+ "agents.create",
17528
+ "agents.update",
17529
+ "agents.delete",
17530
+ "agents.files.list",
17531
+ "agents.files.get",
17532
+ "agents.files.set",
17533
+ "browser.request"
17534
+ ];
17535
+ const STORAGE_METHOD_POLICY = Object.freeze({
17536
+ ...Object.fromEntries(STORAGE_METHOD_POLICY_REQUIRED.map((method) => [method, "required"])),
17537
+ ...Object.fromEntries(STORAGE_METHOD_POLICY_BOOT_WRITE.map((method) => [method, "boot-write"])),
17538
+ ...Object.fromEntries(STORAGE_METHOD_POLICY_NONE.map((method) => [method, "none"]))
17539
+ });
17540
+
17541
+ //#endregion
17542
+ //#region src/gateway/server-methods/storage-fence.ts
17543
+ const STORAGE_START_WAIT_MS = 1e4;
17544
+ const log$21 = createSubsystemLogger("gateway/storage-fence");
17545
+ const warnedGates = /* @__PURE__ */ new WeakSet();
17546
+ /**
17547
+ * Returns true when this call has been answered by the fence (held out, or answered a typed
17548
+ * error), so dispatch must not run the handler. Runs after authorization and the method-set
17549
+ * rate limits, so an unauthorized caller never learns storage readiness. Absent context gate or
17550
+ * `none`/missing classification means no storage decision applies to the method.
17551
+ */
17552
+ async function guardStorageRpc(method, context, respond) {
17553
+ const policy = Object.hasOwn(STORAGE_METHOD_POLICY, method) ? STORAGE_METHOD_POLICY[method] : void 0;
17554
+ const gate = context.storageStartup;
17555
+ if (policy === void 0 || policy === "none" || !gate) return false;
17556
+ let state = gate.state();
17557
+ if (state.phase === "ready") return false;
17558
+ state = await gate.whenSettled(STORAGE_START_WAIT_MS);
17559
+ if (state.phase === "ready") return false;
17560
+ if (state.phase === "failed") {
17561
+ if (policy === "boot-write") return false;
17562
+ respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, "session storage failed to start", {
17563
+ retryable: false,
17564
+ details: {
17565
+ code: "storage_start_failed",
17566
+ reasonCodes: state.reasonCodes
17567
+ }
17568
+ }));
17569
+ return true;
17570
+ }
17571
+ if (state.phase === "starting" && !warnedGates.has(gate)) {
17572
+ warnedGates.add(gate);
17573
+ log$21.warn("session storage still starting after 10000ms; storage-backed methods answer RECOVERY_NOT_READY");
17574
+ }
17575
+ const stopping = state.phase === "stopping";
17576
+ respond(false, void 0, errorShape(ErrorCodes.RECOVERY_NOT_READY, stopping ? "gateway is stopping" : "session storage is still starting", {
17577
+ retryable: true,
17578
+ retryAfterMs: 500,
17579
+ details: {
17580
+ producer: "session-storage",
17581
+ phase: state.phase,
17582
+ reasonCodes: [stopping ? "storage_stopping" : "storage_starting"]
17583
+ }
17584
+ }));
17585
+ return true;
17586
+ }
17587
+
17386
17588
  //#endregion
17387
17589
  //#region src/gateway/server/presence-events.ts
17388
17590
  function broadcastPresenceSnapshot(params) {
@@ -19308,10 +19510,6 @@ function createSttTtsTurnController(params) {
19308
19510
  const sm = new SttTtsLoopStateMachine();
19309
19511
  let sessionClosed = false;
19310
19512
  let currentTurn;
19311
- /** The utterance text whose eager end-of-turn produced (or last resumed) the current turn.
19312
- * Lives only as long as that turn does: retireTurn() clears it, so a later identical
19313
- * utterance is a genuine new turn, never a swallowed stale confirmation. */
19314
- let eagerUtterance;
19315
19513
  /** VAL-LOOP-001: every state transition is logged (never the wire — these never carry
19316
19514
  * transcript/audio content, only the state names and a short reason tag). */
19317
19515
  function transitionState(to, reason) {
@@ -19426,10 +19624,7 @@ function createSttTtsTurnController(params) {
19426
19624
  turn.unsubscribeAgentEvents();
19427
19625
  sm.resetTurn();
19428
19626
  transitionState("listening", "turn-settled");
19429
- if (currentTurn === turn) {
19430
- currentTurn = void 0;
19431
- eagerUtterance = void 0;
19432
- }
19627
+ if (currentTurn === turn) currentTurn = void 0;
19433
19628
  }
19434
19629
  function emitTurnCancelled(turn, reason) {
19435
19630
  if (turn.fillerPlayed || turn.fillerTimer) broadcast(sequencer.next({
@@ -19577,6 +19772,15 @@ function createSttTtsTurnController(params) {
19577
19772
  text
19578
19773
  });
19579
19774
  }
19775
+ function resumeCandidate(turn, text) {
19776
+ if (turn.cancelled || turn.finished) return false;
19777
+ if (text === turn.userText) return false;
19778
+ if (turn.sawTtsAudio) {
19779
+ turnBargeIn.evaluateCandidateText(turn, text);
19780
+ return false;
19781
+ }
19782
+ return wordCount(text) >= 1;
19783
+ }
19580
19784
  function handleEndOfTurn(result) {
19581
19785
  if (sessionClosed) return;
19582
19786
  const text = result.text.trim();
@@ -19584,29 +19788,25 @@ function createSttTtsTurnController(params) {
19584
19788
  if (text) startNewTurn(text);
19585
19789
  return;
19586
19790
  }
19587
- handlePossibleResume(text);
19791
+ if (resumeCandidate(currentTurn, text)) {
19792
+ teardownTurnForCancel(currentTurn, "turn-resumed");
19793
+ startNewTurn(text);
19794
+ }
19588
19795
  }
19589
- /** VAL-LOOP-006: a partial/second-EOT with >=1 word, arriving after end-of-turn but before the
19590
- * first real assistant audio, cancels the in-flight run (turn-resumed) and starts a fresh turn
19591
- * from the new text. Once real audio has started, further speech is a barge-in concern — out
19592
- * of scope here (the dedicated turn-taking task owns it) — so this never fires past that point. */
19796
+ /** VAL-LOOP-006 (ADR 0087 section 4.5): a worded partial/transcript arriving after
19797
+ * end-of-turn but before the first real assistant audio only cancels the in-flight run
19798
+ * (turn-resumed); it never starts a turn itself - the continuation's own end-of-turn starts
19799
+ * it. Once real audio has started, further speech is a barge-in concern - out of scope here
19800
+ * (the dedicated turn-taking task owns it) - so this never fires past that point. */
19593
19801
  function handlePossibleResume(text) {
19594
19802
  if (sessionClosed) return;
19595
19803
  const turn = currentTurn;
19596
- if (!turn || turn.cancelled || turn.finished) return;
19597
- if (eagerUtterance !== void 0 && text === eagerUtterance) return;
19598
- if (turn.sawTtsAudio) {
19599
- turnBargeIn.evaluateCandidateText(turn, text);
19600
- return;
19601
- }
19602
- if (wordCount(text) < 1) return;
19603
- teardownTurnForCancel(turn, "turn-resumed");
19604
- startNewTurn(text);
19804
+ if (!turn) return;
19805
+ if (resumeCandidate(turn, text.trim())) teardownTurnForCancel(turn, "turn-resumed");
19605
19806
  }
19606
- /** ADR 0087 section 5: a provider-native resume signal carries no text, so unlike
19607
- * handlePossibleResume this only cancels - the continuation's own onPartial/onTranscript/
19608
- * onEndOfTurn (routed through handlePossibleResume/handleEndOfTurn as usual) is what actually
19609
- * starts the next turn, once it arrives with real text. */
19807
+ /** ADR 0087 section 5: a provider-native resume signal carries no text. Like
19808
+ * handlePossibleResume, this only cancels; the continuation's own end-of-turn (routed through
19809
+ * handleEndOfTurn) starts the next turn once it arrives with real text. */
19610
19810
  function handleProviderTurnResumed() {
19611
19811
  if (sessionClosed) return;
19612
19812
  const turn = currentTurn;
@@ -19618,15 +19818,6 @@ function createSttTtsTurnController(params) {
19618
19818
  if (sessionClosed) return;
19619
19819
  bargeInSurface.handleBargeIn(speechDetectedAt, playbackPausedAt);
19620
19820
  }
19621
- /** A fused-detection provider's early, not-yet-committed end-of-turn: handled exactly like a
19622
- * committed one, then the utterance is remembered so its committed confirmation (the matching
19623
- * onTranscript/onEndOfTurn pair) does not re-enter the resume path. Set AFTER handling so this
19624
- * very event starts/resumes the turn instead of consuming itself. */
19625
- function handleEagerEndOfTurn(result) {
19626
- if (sessionClosed) return;
19627
- handleEndOfTurn(result);
19628
- eagerUtterance = result.text.trim() || void 0;
19629
- }
19630
19821
  /** Monotonic: a stale/out-of-order mark ack can only hold or advance `heardChars`, never move
19631
19822
  * it backward. */
19632
19823
  function acknowledgeMark(markName, timestamp) {
@@ -19636,7 +19827,6 @@ function createSttTtsTurnController(params) {
19636
19827
  }
19637
19828
  return {
19638
19829
  handleEndOfTurn,
19639
- handleEagerEndOfTurn,
19640
19830
  handlePossibleResume,
19641
19831
  handleProviderTurnResumed,
19642
19832
  cancelActiveTurn,
@@ -19762,7 +19952,7 @@ function createSttTtsLoopSession(params) {
19762
19952
  },
19763
19953
  onEagerEndOfTurn: (result) => {
19764
19954
  clearSpeechCapTimer();
19765
- turnController.handleEagerEndOfTurn(result);
19955
+ turnController.handleEndOfTurn(result);
19766
19956
  },
19767
19957
  onTurnResumed: () => {
19768
19958
  clearSpeechCapTimer();
@@ -20890,6 +21080,9 @@ async function buildTalkCatalogStreamingTranscriptionSection(params) {
20890
21080
  rows
20891
21081
  };
20892
21082
  }
21083
+ function resolveSpeechVoiceId(provider, config) {
21084
+ return config?.voiceId?.trim() || provider.defaultVoiceId?.trim() || void 0;
21085
+ }
20893
21086
  async function buildTalkCatalogSpeechSection(params) {
20894
21087
  const providers = getRegisteredStreamingSpeechProviders();
20895
21088
  const configuredId = params.configuredTtsProviderId?.trim();
@@ -20901,11 +21094,12 @@ async function buildTalkCatalogSpeechSection(params) {
20901
21094
  cfg: params.cfg,
20902
21095
  apiKey: providerConfig?.apiKey
20903
21096
  });
21097
+ const voiceMissing = status.configured && !resolveSpeechVoiceId(provider, providerConfig);
20904
21098
  rows.push({
20905
21099
  id: provider.id,
20906
21100
  label: provider.label,
20907
- configured: status.configured,
20908
- ...status.diagnostic ? { diagnostic: status.diagnostic } : {},
21101
+ configured: status.configured && !voiceMissing,
21102
+ ...status.diagnostic ? { diagnostic: status.diagnostic } : voiceMissing ? { diagnostic: "missing-voice-id" } : {},
20909
21103
  modes: ["streaming"],
20910
21104
  transports: ["gateway-relay"]
20911
21105
  });
@@ -21074,9 +21268,10 @@ const talkHandlers = {
21074
21268
  if (p.mode === "stt-tts") {
21075
21269
  const sttCandidateId = conversationConfig.sttProvider.trim().toLowerCase();
21076
21270
  const sttProvider = getRegisteredRealtimeTranscriptionProviders().find((candidate) => candidate.id.trim().toLowerCase() === sttCandidateId);
21077
- const { provider: ttsProviderId, config: ttsConfig } = resolveActiveTalkProviderConfig(snapshot.config.talk);
21271
+ const { provider: ttsProviderId, config: ttsEntry } = resolveActiveTalkProviderConfig(snapshot.config.talk);
21272
+ const ttsConfig = ttsEntry ?? {};
21078
21273
  const ttsProvider = ttsProviderId ? getRegisteredStreamingSpeechProviders().find((candidate) => candidate.id.trim().toLowerCase() === ttsProviderId.trim().toLowerCase()) : void 0;
21079
- if (!sttProvider || !ttsProvider || !ttsConfig?.voiceId) {
21274
+ if (!sttProvider || !ttsProvider) {
21080
21275
  respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, "stt-tts requires a configured STT and TTS provider"));
21081
21276
  return;
21082
21277
  }
@@ -21088,14 +21283,26 @@ const talkHandlers = {
21088
21283
  cfg: snapshot.config,
21089
21284
  providerConfig: ttsConfig
21090
21285
  });
21091
- if (!sttProvider.isConfigured({
21286
+ const unconfigured = !sttProvider.isConfigured({
21092
21287
  cfg: snapshot.config,
21093
21288
  providerConfig: resolvedSttProviderConfig
21094
- }) || !ttsProvider.isConfigured({
21289
+ }) ? {
21290
+ seam: "transcription",
21291
+ id: sttProvider.id
21292
+ } : !ttsProvider.isConfigured({
21095
21293
  cfg: snapshot.config,
21096
21294
  providerConfig: resolvedTtsProviderConfig
21097
- })) {
21098
- respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, "stt-tts requires a configured STT and TTS provider"));
21295
+ }) ? {
21296
+ seam: "speech",
21297
+ id: ttsProviderId
21298
+ } : void 0;
21299
+ if (unconfigured) {
21300
+ respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, `stt-tts requires a configured STT and TTS provider: ${unconfigured.seam} provider "${unconfigured.id}" is not configured; check talk.providers.${unconfigured.id}.apiKey`));
21301
+ return;
21302
+ }
21303
+ const voiceId = resolveSpeechVoiceId(ttsProvider, ttsConfig);
21304
+ if (!voiceId) {
21305
+ respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, `stt-tts requires talk.providers.${ttsProviderId}.voiceId: speech provider "${ttsProvider.id}" has no default voice`));
21099
21306
  return;
21100
21307
  }
21101
21308
  const rawSessionKey = p.sessionKey;
@@ -21118,7 +21325,7 @@ const talkHandlers = {
21118
21325
  },
21119
21326
  ttsProvider,
21120
21327
  ttsProviderConfig: resolvedTtsProviderConfig,
21121
- voiceId: ttsConfig.voiceId,
21328
+ voiceId,
21122
21329
  modelId: ttsConfig.modelId ?? DEFAULT_TALK_CONVERSATION_MODEL_ID,
21123
21330
  outputFormat: ttsConfig.outputFormat ?? "pcm_24000",
21124
21331
  locale: conversationConfig.locale,
@@ -22231,9 +22438,9 @@ function toRedactedEvent(event) {
22231
22438
  };
22232
22439
  }
22233
22440
  async function listQueuedView(params, runtime, respond) {
22234
- const registry = getTaskOperatorRegistry();
22441
+ const registry = await resolveTaskOperatorRegistry();
22235
22442
  if (!registry) {
22236
- respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, "task_registry_unavailable", { details: { code: "task_registry_unavailable" } }));
22443
+ respondTaskRegistryUnavailable(respond);
22237
22444
  return;
22238
22445
  }
22239
22446
  const busWork = runtime.busWork;
@@ -23909,6 +24116,7 @@ async function handleGatewayRequest(opts) {
23909
24116
  return;
23910
24117
  }
23911
24118
  }
24119
+ if (await guardStorageRpc(req.method, context, respond)) return;
23912
24120
  await handler({
23913
24121
  req,
23914
24122
  params: req.params ?? {},
@@ -24853,7 +25061,7 @@ function normalizeAgentPayload(payload) {
24853
25061
  async function startBrowserControlServerIfEnabled() {
24854
25062
  if (isTruthyEnvValue(process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER)) return null;
24855
25063
  const override = process.env.OPENCLAW_BROWSER_CONTROL_MODULE?.trim();
24856
- const mod = override ? await import(override) : await import("./server-BAGUd2MH.js");
25064
+ const mod = override ? await import(override) : await import("./server-DWJmtex3.js");
24857
25065
  const start = typeof mod.startBrowserControlServiceFromConfig === "function" ? mod.startBrowserControlServiceFromConfig : mod.startBrowserControlServerFromConfig;
24858
25066
  const stop = typeof mod.stopBrowserControlService === "function" ? mod.stopBrowserControlService : mod.stopBrowserControlServer;
24859
25067
  if (!start) return null;
@@ -31211,29 +31419,56 @@ function createStorageRecoveryContainment(deps) {
31211
31419
  //#endregion
31212
31420
  //#region src/gateway/storage-startup-gate.ts
31213
31421
  function createStorageStartupGate() {
31422
+ let phase = { phase: "ready" };
31214
31423
  let held = false;
31215
31424
  const waiters = /* @__PURE__ */ new Set();
31425
+ const wakeAll = () => {
31426
+ for (const wake of waiters) wake();
31427
+ };
31216
31428
  return {
31217
31429
  hold() {
31218
- held = true;
31430
+ if (!held && phase.phase === "ready") {
31431
+ held = true;
31432
+ phase = { phase: "starting" };
31433
+ }
31219
31434
  },
31220
- release() {
31221
- held = false;
31222
- for (const wake of waiters) wake();
31435
+ markReady() {
31436
+ if (phase.phase === "starting") {
31437
+ phase = { phase: "ready" };
31438
+ wakeAll();
31439
+ }
31223
31440
  },
31224
- whenReleased(timeoutMs) {
31225
- if (!held) return Promise.resolve(true);
31226
- return new Promise((resolve) => {
31227
- const wake = () => {
31228
- clearTimeout(timer);
31229
- waiters.delete(wake);
31230
- resolve(true);
31441
+ markFailed(reasonCodes) {
31442
+ if (phase.phase === "starting") {
31443
+ phase = {
31444
+ phase: "failed",
31445
+ reasonCodes: [...reasonCodes]
31231
31446
  };
31447
+ wakeAll();
31448
+ }
31449
+ },
31450
+ markStopping() {
31451
+ if (phase.phase !== "stopping") {
31452
+ phase = { phase: "stopping" };
31453
+ wakeAll();
31454
+ }
31455
+ },
31456
+ state() {
31457
+ return phase;
31458
+ },
31459
+ whenSettled(timeoutMs) {
31460
+ if (phase.phase !== "starting" && phase.phase !== "stopping") return Promise.resolve(phase);
31461
+ return new Promise((resolve) => {
31232
31462
  const timer = setTimeout(() => {
31233
31463
  waiters.delete(wake);
31234
- resolve(false);
31464
+ resolve(phase);
31235
31465
  }, timeoutMs);
31236
31466
  timer.unref?.();
31467
+ const wake = () => {
31468
+ clearTimeout(timer);
31469
+ waiters.delete(wake);
31470
+ resolve(phase);
31471
+ };
31237
31472
  waiters.add(wake);
31238
31473
  });
31239
31474
  }
@@ -35178,7 +35413,12 @@ async function bootGatewayServer(port, opts) {
35178
35413
  };
35179
35414
  fencedStorageSupervisorStart = async () => {
35180
35415
  await supervisor.start();
35181
- storageStartup.release();
35416
+ if (supervisor.getState() !== "healthy" && !params.resolved.fallbackToJsonlOnError) {
35417
+ await storageSupervisorStop?.();
35418
+ storageSupervisorStop = null;
35419
+ throw new FatalConfiguredStorageStartError();
35420
+ }
35421
+ storageStartup.markReady();
35182
35422
  try {
35183
35423
  const { installIncidentAsset } = await import("./incident-install-cGBLZhud.js");
35184
35424
  await installIncidentAsset({
@@ -35211,11 +35451,6 @@ async function bootGatewayServer(port, opts) {
35211
35451
  noteStorageRestartRequired("session-run-startup-recovery");
35212
35452
  noteStorageRestartRequired("shutdown-run-reconciliation");
35213
35453
  }
35214
- if (supervisor.getState() !== "healthy" && !params.resolved.fallbackToJsonlOnError) {
35215
- await storageSupervisorStop?.();
35216
- storageSupervisorStop = null;
35217
- throw new FatalConfiguredStorageStartError();
35218
- }
35219
35454
  };
35220
35455
  if (params.bootImmediately) await fencedStorageSupervisorStart();
35221
35456
  else storageStartup.hold();
@@ -35577,7 +35812,7 @@ async function bootGatewayServer(port, opts) {
35577
35812
  const sweepLog = log.child("session-consumer-claim-sweep");
35578
35813
  const { createDiagnosticRingBuffer } = await import("./session-consumer-diagnostics-UbdxGCz8.js");
35579
35814
  const diagnostics = createDiagnosticRingBuffer();
35580
- const { setDiagnostics } = await import("./sessions-Dcu0bdQ7.js").then((n) => n.n);
35815
+ const { setDiagnostics } = await import("./sessions-BlXxa7bM.js").then((n) => n.n);
35581
35816
  if (sessionConsumerClaimSweepCancelled) return;
35582
35817
  setDiagnostics(diagnostics);
35583
35818
  const lastKnownEnabledState = /* @__PURE__ */ new Map();
@@ -35616,7 +35851,7 @@ async function bootGatewayServer(port, opts) {
35616
35851
  lastKnownEnabledState,
35617
35852
  cfg: loadConfig()
35618
35853
  });
35619
- const { setLastSweepTimestamp } = await import("./sessions-Dcu0bdQ7.js").then((n) => n.n);
35854
+ const { setLastSweepTimestamp } = await import("./sessions-BlXxa7bM.js").then((n) => n.n);
35620
35855
  setLastSweepTimestamp(Date.now());
35621
35856
  } catch (err) {
35622
35857
  sweepLog.warn(`session consumer-claim sweep failed: ${String(err)}`);
@@ -35638,7 +35873,7 @@ async function bootGatewayServer(port, opts) {
35638
35873
  prepare: () => {
35639
35874
  taskPipelineBoot = (async () => {
35640
35875
  const { getConfiguredSessionStorageRuntime } = await import("./model-selection-k68XU4oS.js").then((n) => n.hi);
35641
- const { startTaskPipeline } = await import("./task-pipeline-boot-DKqT4VdZ.js");
35876
+ const { startTaskPipeline } = await import("./task-pipeline-boot-Dihxq0Tg.js");
35642
35877
  const pipeline = startTaskPipeline({
35643
35878
  getConfigured: getConfiguredSessionStorageRuntime,
35644
35879
  cfg: cfgAtStart,
@@ -35807,7 +36042,17 @@ async function bootGatewayServer(port, opts) {
35807
36042
  });
35808
36043
  try {
35809
36044
  recoveryRuntime = await Promise.race([ownInstalled, recoveryStarted]) ?? null;
36045
+ if (storageStartup.state().phase === "starting") {
36046
+ let codes = [];
36047
+ try {
36048
+ codes = recoveryRuntime?.snapshot().reasonCodes ?? [];
36049
+ } catch {
36050
+ codes = [];
36051
+ }
36052
+ storageStartup.markFailed(codes.length > 0 ? codes : ["recovery_start_failed"]);
36053
+ }
35810
36054
  } catch (err) {
36055
+ if (storageStartup.state().phase === "starting") storageStartup.markFailed(["recovery_start_failed"]);
35811
36056
  if (skillsRefreshTimer) {
35812
36057
  clearTimeout(skillsRefreshTimer);
35813
36058
  skillsRefreshTimer = null;
@@ -36018,6 +36263,7 @@ async function bootGatewayServer(port, opts) {
36018
36263
  startDiagnosticHeartbeat();
36019
36264
  }
36020
36265
  return { close: async (opts) => {
36266
+ storageStartup.markStopping();
36021
36267
  recoveryAdmission.closeAdmission();
36022
36268
  await runGlobalGatewayStopSafely({
36023
36269
  event: { reason: opts?.reason ?? "gateway stopping" },