@gguf/claw 2026.2.9 → 2026.2.13

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 (715) hide show
  1. package/CHANGELOG.md +159 -0
  2. package/LICENSE +1 -1
  3. package/dist/{accounts-MyAvfCVH.js → accounts-54zZMYCo.js} +5 -2
  4. package/dist/{accounts-DbzMEfKN.js → accounts-Bvh0DFxS.js} +5 -2
  5. package/dist/{acp-cli-MZ3h1E1n.js → acp-cli-BslcOPdx.js} +146 -25
  6. package/dist/{acp-cli-DKJRTfwB.js → acp-cli-D6rk5cOh.js} +145 -24
  7. package/dist/{agent-whSJT2Lk.js → agent-C0yL70cy.js} +26 -20
  8. package/dist/{agent-c1QNeDmV.js → agent-DjZxytiC.js} +26 -20
  9. package/dist/{agent-scope-D3me2AZa.js → agent-scope-Bkr9fZtl.js} +31 -14
  10. package/dist/{agent-scope-Dp8sREli.js → agent-scope-DASgjz2_.js} +199 -14
  11. package/dist/{agent-scope-DnyDZ5RH.js → agent-scope-GYIs5dyU.js} +30 -13
  12. package/dist/{agent-scope-Dpav7C-i.js → agent-scope-okUOVjE5.js} +32 -11
  13. package/dist/audio-preflight-B0kLz-Ma.js +60 -0
  14. package/dist/audio-preflight-BCs_J33s.js +60 -0
  15. package/dist/audio-preflight-CTl2RCyF.js +71 -0
  16. package/dist/audio-preflight-MhF6YlAY.js +74 -0
  17. package/dist/{audit-BFYy1qSw.js → audit-BYfhZ7LA.js} +454 -31
  18. package/dist/{audit-Dn2cBl2x.js → audit-CfPZ_5Id.js} +452 -29
  19. package/dist/auth-9nTeB2Je.js +602 -0
  20. package/dist/auth-CLhyWwAU.js +593 -0
  21. package/dist/{auth-health-Cx5exPMV.js → auth-health-CWiLyzSr.js} +1 -1
  22. package/dist/{auth-health-DjT4fUpw.js → auth-health-qD4RND47.js} +1 -1
  23. package/dist/{auth-profiles-FJ3VY25a.js → auth-profiles-Cp9MtUdM.js} +353 -33
  24. package/dist/build-info.json +2 -2
  25. package/dist/bundled/boot-md/handler.js +33 -25
  26. package/dist/bundled/session-memory/handler.js +33 -22
  27. package/dist/{call-CD2IZCHT.js → call-CjEdFGAf.js} +7 -7
  28. package/dist/{call-CM25qgxz.js → call-DAfkvtVq.js} +6 -6
  29. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  30. package/dist/canvas-host/a2ui/a2ui.bundle.js +7 -1
  31. package/dist/{channel-options-CremuJyh.js → channel-options-B8dPzlyO.js} +4 -4
  32. package/dist/{channel-options-D-JnJ4Ft.js → channel-options-Bq5IC5Tv.js} +12 -7
  33. package/dist/{channel-selection-DAHCVAX4.js → channel-selection-BaW1xXEa.js} +2 -2
  34. package/dist/{channel-selection-DPV9hvY8.js → channel-selection-dR0jCgTn.js} +2 -2
  35. package/dist/{channels-cli-6deHFr9t.js → channels-cli-hPo28hWS.js} +61 -56
  36. package/dist/{channels-cli-D3tKmhlt.js → channels-cli-zi3rO0jq.js} +62 -57
  37. package/dist/{channels-status-issues-BN1ICfdy.js → channels-status-issues-kb-M2Fi0.js} +1 -1
  38. package/dist/{channels-status-issues-DFhI_u0p.js → channels-status-issues-ketdwZun.js} +1 -1
  39. package/dist/{chrome-B2UjqY-9.js → chrome--Fe8F5Kf.js} +24 -12
  40. package/dist/{chrome-COabMr6f.js → chrome-BWeMtFGf.js} +24 -12
  41. package/dist/{chrome-CQd_MVOA.js → chrome-Bx24uq7B.js} +27 -15
  42. package/dist/{chrome-CxRJz4ZD.js → chrome-n_3rtK2c.js} +22 -11
  43. package/dist/{clack-prompter-BkNZ4Xdw.js → clack-prompter-B-tJmODa.js} +5 -5
  44. package/dist/{clack-prompter-DuBVnTKy.js → clack-prompter-DpuKn_Uy.js} +5 -5
  45. package/dist/cli/daemon-cli.js +8 -1
  46. package/dist/cli-9lwO6Ttx.js +94 -0
  47. package/dist/cli-CNNdyxPO.js +91 -0
  48. package/dist/{client-DMloFP_O.js → client-BhZjzrH2.js} +73 -9
  49. package/dist/{client-C0gQ7hrj.js → client-DyAxKXKY.js} +73 -9
  50. package/dist/{command-format-ayFsmwwz.js → command-format-Bxe0mWee.js} +1 -1
  51. package/dist/{command-options-BQdH6qnK.js → command-options-BDV7Xgs-.js} +9 -4
  52. package/dist/{commands-BWHYcc83.js → commands-gOiRcfoU.js} +4 -4
  53. package/dist/{tui-formatters-BDP_71Xt.js → commands-registry-6NUFrejL.js} +6 -114
  54. package/dist/{tui-formatters-CIx4sCQO.js → commands-registry-DGgkLQ7A.js} +6 -114
  55. package/dist/{completion-cli-DEJia0V1.js → completion-cli-B1kHKJZX.js} +30 -30
  56. package/dist/{completion-cli-D_0fx2O6.js → completion-cli-Drks7xRK.js} +3 -3
  57. package/dist/{config-CQt4vGxI.js → config-7NCznPmF.js} +336 -97
  58. package/dist/{config-fCnPoWjU.js → config-B8v0zg48.js} +295 -99
  59. package/dist/{config-Bj2eDa02.js → config-CeWMHOiQ.js} +295 -99
  60. package/dist/{config-ethqi73X.js → config-D8pgDSNo.js} +358 -99
  61. package/dist/{config-guard-BJuqQvng.js → config-guard-RbHxYc9j.js} +212 -63
  62. package/dist/{configure-skrLiSwW.js → configure-DLp2Xz7L.js} +59 -40
  63. package/dist/{configure-C-pYuYg_.js → configure-Su1S0gi-.js} +58 -39
  64. package/dist/control-auth-BlWU-jBl.js +54 -0
  65. package/dist/control-auth-C8rIqEdA.js +54 -0
  66. package/dist/{control-service-BDgF-FZ0.js → control-service-BNDthc1N.js} +11 -5
  67. package/dist/{control-service-Djd_WI3_.js → control-service-COF59GQe.js} +10 -4
  68. package/dist/control-ui/assets/{index-CnB9IO4a.js → index-BECn2L1T.js} +369 -368
  69. package/dist/control-ui/assets/index-BECn2L1T.js.map +1 -0
  70. package/dist/control-ui/assets/index-DRPcd1Z4.css +1 -0
  71. package/dist/control-ui/index.html +2 -2
  72. package/dist/{cron-cli-CB6CufAb.js → cron-cli-CSy4-JGS.js} +20 -20
  73. package/dist/{cron-cli-Db6fardJ.js → cron-cli-Db3uCDIT.js} +21 -21
  74. package/dist/{daemon-cli-Xe22v7lZ.js → daemon-cli-BLbzcTuD.js} +61 -22
  75. package/dist/{daemon-cli-BlHK0ly2.js → daemon-cli-DR0D35MO.js} +60 -21
  76. package/dist/{daemon-runtime-CMqH8BUE.js → daemon-runtime-ZWXvLDxx.js} +3 -3
  77. package/dist/{daemon-runtime-DwQFvDXZ.js → daemon-runtime-pVcZ2KDE.js} +3 -3
  78. package/dist/{deliver-CD7-BhYD.js → deliver-BHNoC9Yk.js} +396 -290
  79. package/dist/{deliver-BdGjIcTC.js → deliver-C_5eGQrX.js} +392 -286
  80. package/dist/{deliver-nTKaXF--.js → deliver-DPHZlWgr.js} +392 -287
  81. package/dist/{deliver-CDMGxRoW.js → deliver-geVWJ52I.js} +394 -288
  82. package/dist/{deps-BDQ_K8zf.js → deps-CP0dcOgD.js} +2 -2
  83. package/dist/{deps-D60FbgTP.js → deps-DW5r2IEk.js} +2 -2
  84. package/dist/{devices-cli-N559801X.js → devices-cli-BViqX5pl.js} +15 -15
  85. package/dist/{devices-cli-IxmPLIk8.js → devices-cli-DpYaY-iM.js} +14 -14
  86. package/dist/{directory-cli-Caq-OYk8.js → directory-cli-BWD1DdKf.js} +16 -16
  87. package/dist/{directory-cli-ClrdmQL-.js → directory-cli-BcvZfkfo.js} +17 -17
  88. package/dist/{dispatcher-BfXtm4Dl.js → dispatcher-4Qn951N3.js} +5 -3
  89. package/dist/{dns-cli-DgVO0Pkw.js → dns-cli-_Ych2tu9.js} +12 -12
  90. package/dist/{dns-cli-BTNZkWHs.js → dns-cli-gQCxUXgU.js} +13 -13
  91. package/dist/{docs-cli-9Xan7C6D.js → docs-cli-Bseiau7J.js} +7 -7
  92. package/dist/{docs-cli-DZULc91f.js → docs-cli-DzBTlWQE.js} +8 -8
  93. package/dist/{doctor-D39rZvNH.js → doctor-BNkYYahD.js} +37 -36
  94. package/dist/{doctor-Dq1YeYdH.js → doctor-DzIgdPx1.js} +37 -36
  95. package/dist/entry.js +77 -21
  96. package/dist/{env-B5YXooWp.js → env-BUuSkE19.js} +1 -1
  97. package/dist/{exec-DFOtZbI0.js → exec-BPQSKwGa.js} +5 -3
  98. package/dist/{exec-B8JKbXKW.js → exec-DqZFMawz.js} +5 -3
  99. package/dist/{exec-Bas1hoSJ.js → exec-EKUaAU91.js} +57 -18
  100. package/dist/{exec-CiH_vkWn.js → exec-_PSUrMP8.js} +528 -19
  101. package/dist/{exec-approvals-DGPTjO0N.js → exec-approvals-Bqk-tIxY.js} +134 -51
  102. package/dist/{exec-approvals-C9InMoAB.js → exec-approvals-C67V-ljH.js} +134 -51
  103. package/dist/{exec-approvals-cli-EASbqFd-.js → exec-approvals-cli-D6vfSqQu.js} +22 -22
  104. package/dist/{exec-approvals-cli-DPHItoxG.js → exec-approvals-cli-DAdoki_R.js} +21 -21
  105. package/dist/extensionAPI.js +8518 -9140
  106. package/dist/fetch-Bz1WxfzV.js +285 -0
  107. package/dist/fetch-D2O8s8I1.js +285 -0
  108. package/dist/fetch-Dm-nCwa_.js +285 -0
  109. package/dist/fetch-wuOZDzdT.js +285 -0
  110. package/dist/{gateway-cli-BFqUIif8.js → gateway-cli-C-k7JPlr.js} +1868 -1072
  111. package/dist/{gateway-cli-v4kSPsLE.js → gateway-cli-DIIJ9Z0Y.js} +1870 -1074
  112. package/dist/{gateway-rpc-D6LrkcSA.js → gateway-rpc-D6jLh81b.js} +3 -3
  113. package/dist/{gateway-rpc-dHFK02Kk.js → gateway-rpc-aqysUyf5.js} +3 -3
  114. package/dist/{github-copilot-auth-CQIWc0hC.js → github-copilot-auth-BUqfX7hG.js} +316 -52
  115. package/dist/{github-copilot-auth-D2jfnapd.js → github-copilot-auth-By-nyRb6.js} +316 -52
  116. package/dist/{github-copilot-token-SLWintYd.js → github-copilot-token-C9W4SY9o.js} +7 -4
  117. package/dist/{github-copilot-token-BW-SEg7E.js → github-copilot-token-CiF5Iyi2.js} +6 -3
  118. package/dist/{github-copilot-token-C9IJh2Pn.js → github-copilot-token-DatTe1w-.js} +6 -3
  119. package/dist/{github-copilot-token-wCk9Fg_E.js → github-copilot-token-c9Igt3ZH.js} +6 -3
  120. package/dist/{gmail-setup-utils-CVNgLkXL.js → gmail-setup-utils-HvKMdooP.js} +4 -4
  121. package/dist/{gmail-setup-utils-CAM1vbUS.js → gmail-setup-utils-c-iF00aL.js} +3 -3
  122. package/dist/{health-format-C77hrjEQ.js → health-format-BORnJOeS.js} +106 -44
  123. package/dist/{health-format-DDYtlkB9.js → health-format-Nd0jcoqM.js} +105 -43
  124. package/dist/{help-format-CUnac_bT.js → help-format-Cd5PLwXe.js} +1 -1
  125. package/dist/{help-format-aiW76js8.js → help-format-DYBEvMOX.js} +1 -1
  126. package/dist/{hooks-cli-DsflBRxX.js → hooks-cli-3KdsbdRi.js} +53 -47
  127. package/dist/{hooks-cli-C7kctMuZ.js → hooks-cli-BThja6wK.js} +53 -47
  128. package/dist/{hooks-status-DRAVHSPg.js → hooks-status-BbIz0zmm.js} +6 -5
  129. package/dist/{hooks-status-lHWrY64E.js → hooks-status-DPJORMB6.js} +6 -5
  130. package/dist/{image--gbzucyh.js → image-BaJKrmCs.js} +12 -8
  131. package/dist/{image-ORs4LLwg.js → image-D-5pUELC.js} +13 -9
  132. package/dist/{image-DMnjYGdA.js → image-TvL5YI_W.js} +13 -9
  133. package/dist/{image-BVNytEIn.js → image-bodq5cUH.js} +13 -9
  134. package/dist/index.js +261 -109
  135. package/dist/{installs-CXGV291R.js → installs-BrOMqREO.js} +7 -6
  136. package/dist/{installs-89zeUsVn.js → installs-z69au9Te.js} +7 -6
  137. package/dist/{links-Dg90NTyF.js → links-AVB88xxH.js} +1 -1
  138. package/dist/{links-7M-j83As.js → links-DpxpaKe1.js} +1 -1
  139. package/dist/llm-slug-generator.js +18 -19
  140. package/dist/{loader-BnzQyT31.js → loader-CS-5lMQa.js} +3694 -4531
  141. package/dist/{logging-DuK6YXuK.js → logging-B3KnAryz.js} +2 -2
  142. package/dist/{logging-CNq0UUgf.js → logging-DEPo2hji.js} +1 -1
  143. package/dist/{login-qr-CJ__cE3-.js → login-qr--28WL1TN.js} +11 -5
  144. package/dist/{login-qr-BVeOFfNW.js → login-qr-4o2aC2UE.js} +9 -4
  145. package/dist/{login-qr-BJChByHH.js → login-qr-BUdeu1Sl.js} +8 -2
  146. package/dist/{login-qr-KUOtNJaQ.js → login-qr-BsYM2E1y.js} +12 -6
  147. package/dist/{logs-cli-Cm7AiarR.js → logs-cli-DDMD5w5_.js} +38 -22
  148. package/dist/{logs-cli-BWmtAsjp.js → logs-cli-DvPoVKCN.js} +38 -22
  149. package/dist/{manager-C-jXr9ks.js → manager-CXo1uqmO.js} +102 -86
  150. package/dist/{manager-CMFBuvVd.js → manager-ChW0jk7T.js} +101 -85
  151. package/dist/{manager-D2Ndphg3.js → manager-DUOe7ud6.js} +100 -85
  152. package/dist/{manager-BsdlwsL5.js → manager-PoxUqdN_.js} +98 -82
  153. package/dist/{manifest-registry-D5SiA3xq.js → manifest-registry-CVsqjgX0.js} +40 -2
  154. package/dist/{manifest-registry-DyMRD3rY.js → manifest-registry-jeAPx6AW.js} +40 -2
  155. package/dist/{message-channel-CHRYQtAM.js → message-channel-CTtrEkmW.js} +1 -1
  156. package/dist/{message-channel-BlgPSDAh.js → message-channel-DWcu72r7.js} +1 -1
  157. package/dist/{model-auth-BqjMkNFs.js → model-auth-BvODRbV0.js} +362 -35
  158. package/dist/{model-selection-DbsbOAoh.js → model-selection-B53OvWCf.js} +353 -33
  159. package/dist/{model-selection-DlV6wnTr.js → model-selection-vC82fEiP.js} +331 -30
  160. package/dist/{models-cli-DIFBrK4W.js → models-cli-DqsKsOgd.js} +66 -55
  161. package/dist/{models-cli-0XhQQbMW.js → models-cli-NV0bnh8l.js} +66 -55
  162. package/dist/{node-cli-BMUfVCSq.js → node-cli-C7YleuBk.js} +54 -44
  163. package/dist/{node-cli-DY4lzhDA.js → node-cli-CxwoHnZ6.js} +54 -44
  164. package/dist/{node-service-DQ-tiSie.js → node-service-C7f_uvx9.js} +2 -2
  165. package/dist/{node-service-u8g85nD3.js → node-service-De_WkxJe.js} +2 -2
  166. package/dist/{nodes-cli-BX6oWnLC.js → nodes-cli-BxrMVI9V.js} +25 -23
  167. package/dist/{nodes-cli-CVHzcQo2.js → nodes-cli-Clb0ocwB.js} +24 -22
  168. package/dist/{nodes-screen-DGlNPbk4.js → nodes-screen-CVL9363A.js} +48 -6
  169. package/dist/{nodes-screen-lykd2cny.js → nodes-screen-DsHJIN2I.js} +47 -5
  170. package/dist/{note-Ci08TSbV.js → note-Duiadw1g.js} +1 -1
  171. package/dist/{note-DVO1KLaW.js → note-uC6iDp4y.js} +2 -2
  172. package/dist/{onboard-channels-DTkFFbzS.js → onboard-channels-C5Iaafwb.js} +10 -10
  173. package/dist/{onboard-channels-CtDnwaF5.js → onboard-channels-C5uL3i8d.js} +11 -11
  174. package/dist/{onboard-skills-BnAcpzfX.js → onboard-skills-BFxdI1Y1.js} +1143 -112
  175. package/dist/{onboard-skills-DuoDzEmI.js → onboard-skills-DUG8Y0se.js} +1142 -111
  176. package/dist/{onboarding-DvhiiHh0.js → onboarding-ClzElK4D.js} +56 -48
  177. package/dist/{openclaw-root-93W6UrUK.js → openclaw-root-BKsZvO6K.js} +6 -2
  178. package/dist/{openclaw-root-9ILYSmJ9.js → openclaw-root-CEnmuBUN.js} +6 -2
  179. package/dist/{pairing-cli-BKJHBxwT.js → pairing-cli-BWWFZF7Q.js} +16 -16
  180. package/dist/{pairing-cli-DJHjPBwu.js → pairing-cli-BrFLxnug.js} +16 -16
  181. package/dist/{pairing-labels-xImhiJax.js → pairing-labels-C8KULWNH.js} +1 -1
  182. package/dist/{pairing-labels-CHxlh3tT.js → pairing-labels-Dt2vXyI7.js} +1 -1
  183. package/dist/{pairing-store-CO6umWFP.js → pairing-store-Dz-ArTQS.js} +3 -3
  184. package/dist/{pairing-store-BpPUNzmB.js → pairing-store-gQdv7Ruh.js} +2 -2
  185. package/dist/{path-env-Nq83EHH9.js → path-env-BRKerjt1.js} +2 -2
  186. package/dist/{path-env-CXWUFfFv.js → path-env-OJAyUeWW.js} +1 -1
  187. package/dist/paths-BZK4Ct0I.js +81 -0
  188. package/dist/paths-DWYi0R_2.js +78 -0
  189. package/dist/{paths-Bkhd_qY8.js → paths-DdKf4lHp.js} +35 -5
  190. package/dist/paths-SFzVNGbc.js +78 -0
  191. package/dist/pi-auth-json-D7hGObyW.js +12 -0
  192. package/dist/pi-auth-json-DgvHjfJy.js +8 -0
  193. package/dist/pi-auth-json-la6lnAzY.js +79 -0
  194. package/dist/pi-auth-json-p3vsMR7W.js +79 -0
  195. package/dist/{pi-embedded-C1qKCgDT.js → pi-embedded-De6SeAPs.js} +9518 -9968
  196. package/dist/{pi-embedded-helpers-DtPn5RC8.js → pi-embedded-helpers-BrUBxrE2.js} +70 -10
  197. package/dist/{pi-embedded-helpers-DhEkdWB1.js → pi-embedded-helpers-D0mqOwwq.js} +821 -128
  198. package/dist/{pi-embedded-helpers-7AjuNiiJ.js → pi-embedded-helpers-DpJb0kUk.js} +69 -9
  199. package/dist/{pi-embedded-helpers-BTkXgwJ7.js → pi-embedded-helpers-ZI1UCSRM.js} +927 -136
  200. package/dist/{pi-tools.policy-gG96mWwA.js → pi-tools.policy-z5Wd_2WN.js} +4 -4
  201. package/dist/{plugin-auto-enable-D5ye7QnB.js → plugin-auto-enable-B8mX3rX3.js} +14 -5
  202. package/dist/{plugin-auto-enable-BROgMZcf.js → plugin-auto-enable-OO0eDINB.js} +14 -5
  203. package/dist/plugin-sdk/agents/apply-patch-update.d.ts +3 -1
  204. package/dist/plugin-sdk/agents/apply-patch.d.ts +11 -3
  205. package/dist/plugin-sdk/agents/auth-profiles/profiles.d.ts +5 -0
  206. package/dist/plugin-sdk/agents/auth-profiles.d.ts +1 -1
  207. package/dist/plugin-sdk/agents/bash-process-registry.d.ts +1 -0
  208. package/dist/plugin-sdk/agents/bash-tools.exec.d.ts +26 -0
  209. package/dist/plugin-sdk/agents/current-time.d.ts +17 -0
  210. package/dist/plugin-sdk/agents/huggingface-models.d.ts +17 -0
  211. package/dist/plugin-sdk/agents/models-config.providers.d.ts +10 -0
  212. package/dist/plugin-sdk/agents/openclaw-tools.d.ts +2 -0
  213. package/dist/plugin-sdk/agents/pi-auth-json.d.ts +14 -0
  214. package/dist/plugin-sdk/agents/pi-embedded-helpers/errors.d.ts +5 -1
  215. package/dist/plugin-sdk/agents/pi-embedded-helpers.d.ts +1 -1
  216. package/dist/plugin-sdk/agents/pi-embedded-runner/google.d.ts +1 -0
  217. package/dist/plugin-sdk/agents/pi-embedded-runner/run/images.d.ts +9 -4
  218. package/dist/plugin-sdk/agents/pi-embedded-runner/run/params.d.ts +2 -0
  219. package/dist/plugin-sdk/agents/pi-embedded-runner/run/payloads.d.ts +1 -0
  220. package/dist/plugin-sdk/agents/pi-embedded-runner/run/types.d.ts +2 -0
  221. package/dist/plugin-sdk/agents/pi-embedded-runner/types.d.ts +15 -0
  222. package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.tools.d.ts +1 -1
  223. package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.types.d.ts +2 -0
  224. package/dist/plugin-sdk/agents/pi-embedded-subscribe.types.d.ts +2 -0
  225. package/dist/plugin-sdk/agents/pi-tools.read.d.ts +8 -3
  226. package/dist/plugin-sdk/agents/sandbox/constants.d.ts +1 -1
  227. package/dist/plugin-sdk/agents/sandbox/docker.d.ts +14 -3
  228. package/dist/plugin-sdk/agents/sandbox/fs-bridge.d.ts +56 -0
  229. package/dist/plugin-sdk/agents/sandbox/types.d.ts +2 -0
  230. package/dist/plugin-sdk/agents/session-tool-result-guard-wrapper.d.ts +2 -0
  231. package/dist/plugin-sdk/agents/session-tool-result-guard.d.ts +4 -0
  232. package/dist/plugin-sdk/agents/subagent-registry.d.ts +3 -1
  233. package/dist/plugin-sdk/agents/tools/agent-step.d.ts +3 -0
  234. package/dist/plugin-sdk/agents/tools/browser-tool.schema.d.ts +2 -2
  235. package/dist/plugin-sdk/agents/tools/common.d.ts +4 -0
  236. package/dist/plugin-sdk/agents/tools/image-tool.d.ts +9 -1
  237. package/dist/plugin-sdk/agents/tools/web-search.d.ts +10 -1
  238. package/dist/plugin-sdk/agents/usage.d.ts +1 -0
  239. package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +1 -0
  240. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -0
  241. package/dist/plugin-sdk/auto-reply/reply/memory-flush.d.ts +2 -2
  242. package/dist/plugin-sdk/auto-reply/reply/mentions.d.ts +1 -0
  243. package/dist/plugin-sdk/auto-reply/reply/model-selection.d.ts +3 -0
  244. package/dist/plugin-sdk/auto-reply/reply/reply-reference.d.ts +1 -1
  245. package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +11 -0
  246. package/dist/plugin-sdk/auto-reply/reply/session-usage.d.ts +8 -0
  247. package/dist/plugin-sdk/auto-reply/status.d.ts +2 -0
  248. package/dist/plugin-sdk/auto-reply/templating.d.ts +3 -0
  249. package/dist/plugin-sdk/auto-reply/thinking.d.ts +1 -1
  250. package/dist/plugin-sdk/auto-reply/types.d.ts +2 -0
  251. package/dist/plugin-sdk/browser/cdp.helpers.d.ts +2 -1
  252. package/dist/plugin-sdk/browser/client-actions-core.d.ts +1 -0
  253. package/dist/plugin-sdk/browser/control-auth.d.ts +13 -0
  254. package/dist/plugin-sdk/browser/pw-ai.d.ts +1 -1
  255. package/dist/plugin-sdk/browser/pw-session.d.ts +25 -0
  256. package/dist/plugin-sdk/browser/pw-tools-core.interactions.d.ts +2 -0
  257. package/dist/plugin-sdk/browser/routes/dispatcher.d.ts +1 -0
  258. package/dist/plugin-sdk/browser/routes/types.d.ts +5 -0
  259. package/dist/plugin-sdk/channels/plugins/onboarding/signal.d.ts +1 -0
  260. package/dist/plugin-sdk/channels/registry.d.ts +2 -2
  261. package/dist/plugin-sdk/cli/nodes-camera.d.ts +8 -2
  262. package/dist/plugin-sdk/cli/prompt.d.ts +1 -0
  263. package/dist/plugin-sdk/commands/agent/types.d.ts +2 -0
  264. package/dist/plugin-sdk/commands/onboard-helpers.d.ts +1 -0
  265. package/dist/plugin-sdk/commands/onboard-types.d.ts +9 -1
  266. package/dist/plugin-sdk/commands/signal-install.d.ts +20 -0
  267. package/dist/plugin-sdk/config/config.d.ts +1 -1
  268. package/dist/plugin-sdk/config/group-policy.d.ts +3 -0
  269. package/dist/plugin-sdk/config/merge-patch.d.ts +1 -0
  270. package/dist/plugin-sdk/config/sessions/paths.d.ts +14 -4
  271. package/dist/plugin-sdk/config/sessions/store.d.ts +8 -0
  272. package/dist/plugin-sdk/config/sessions/types.d.ts +8 -0
  273. package/dist/plugin-sdk/config/types.agents.d.ts +2 -0
  274. package/dist/plugin-sdk/config/types.channels.d.ts +2 -0
  275. package/dist/plugin-sdk/config/types.d.ts +1 -0
  276. package/dist/plugin-sdk/config/types.discord.d.ts +5 -0
  277. package/dist/plugin-sdk/config/types.gateway.d.ts +35 -0
  278. package/dist/plugin-sdk/config/types.hooks.d.ts +23 -1
  279. package/dist/plugin-sdk/config/types.irc.d.ts +96 -0
  280. package/dist/plugin-sdk/config/types.memory.d.ts +2 -0
  281. package/dist/plugin-sdk/config/types.openclaw.d.ts +6 -0
  282. package/dist/plugin-sdk/config/types.queue.d.ts +1 -0
  283. package/dist/plugin-sdk/config/types.slack.d.ts +2 -0
  284. package/dist/plugin-sdk/config/types.telegram.d.ts +2 -0
  285. package/dist/plugin-sdk/config/validation.d.ts +20 -0
  286. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +1 -0
  287. package/dist/plugin-sdk/config/zod-schema.core.d.ts +2 -0
  288. package/dist/plugin-sdk/config/zod-schema.d.ts +193 -2
  289. package/dist/plugin-sdk/config/zod-schema.hooks.d.ts +3 -2
  290. package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +378 -0
  291. package/dist/plugin-sdk/config/zod-schema.providers.d.ts +176 -0
  292. package/dist/plugin-sdk/config/zod-schema.sensitive.d.ts +2 -0
  293. package/dist/plugin-sdk/config/zod-schema.session.d.ts +1 -0
  294. package/dist/plugin-sdk/cron/service/jobs.d.ts +8 -0
  295. package/dist/plugin-sdk/cron/service/state.d.ts +1 -0
  296. package/dist/plugin-sdk/cron/types.d.ts +2 -0
  297. package/dist/plugin-sdk/discord/monitor/allow-list.d.ts +15 -0
  298. package/dist/plugin-sdk/discord/send.types.d.ts +5 -0
  299. package/dist/plugin-sdk/gateway/auth-rate-limit.d.ts +59 -0
  300. package/dist/plugin-sdk/gateway/auth.d.ts +47 -0
  301. package/dist/plugin-sdk/gateway/net.d.ts +5 -0
  302. package/dist/plugin-sdk/gateway/protocol/index.d.ts +7 -7
  303. package/dist/plugin-sdk/gateway/protocol/schema/agent.d.ts +7 -1
  304. package/dist/plugin-sdk/gateway/protocol/schema/channels.d.ts +21 -0
  305. package/dist/plugin-sdk/gateway/protocol/schema/types.d.ts +3 -1
  306. package/dist/plugin-sdk/gateway/session-utils.fs.d.ts +3 -1
  307. package/dist/plugin-sdk/gateway/session-utils.types.d.ts +1 -0
  308. package/dist/plugin-sdk/imessage/send.d.ts +12 -0
  309. package/dist/plugin-sdk/index.js +2147 -900
  310. package/dist/plugin-sdk/infra/binaries.d.ts +3 -0
  311. package/dist/plugin-sdk/infra/brew.d.ts +8 -0
  312. package/dist/plugin-sdk/infra/heartbeat-active-hours.d.ts +5 -0
  313. package/dist/plugin-sdk/infra/heartbeat-runner.d.ts +1 -0
  314. package/dist/plugin-sdk/infra/heartbeat-wake.d.ts +8 -1
  315. package/dist/plugin-sdk/infra/net/fetch-guard.d.ts +1 -0
  316. package/dist/plugin-sdk/infra/net/ssrf.d.ts +1 -0
  317. package/dist/plugin-sdk/infra/outbound/message.d.ts +2 -0
  318. package/dist/plugin-sdk/infra/outbound/outbound-send-service.d.ts +2 -0
  319. package/dist/plugin-sdk/infra/session-cost-usage.d.ts +3 -0
  320. package/dist/plugin-sdk/infra/tailscale.d.ts +34 -0
  321. package/dist/plugin-sdk/infra/tmp-openclaw-dir.d.ts +10 -0
  322. package/dist/plugin-sdk/logging/console.d.ts +4 -0
  323. package/dist/plugin-sdk/logging/logger.d.ts +1 -1
  324. package/dist/plugin-sdk/logging/state.d.ts +1 -0
  325. package/dist/plugin-sdk/logging.d.ts +2 -2
  326. package/dist/plugin-sdk/markdown/ir.d.ts +1 -1
  327. package/dist/plugin-sdk/markdown/whatsapp.d.ts +14 -0
  328. package/dist/plugin-sdk/media/input-files.d.ts +5 -0
  329. package/dist/plugin-sdk/media/store.d.ts +10 -0
  330. package/dist/plugin-sdk/media-understanding/audio-preflight.d.ts +16 -0
  331. package/dist/plugin-sdk/media-understanding/types.d.ts +1 -0
  332. package/dist/plugin-sdk/memory/backend-config.d.ts +2 -1
  333. package/dist/plugin-sdk/memory/embedding-chunk-limits.d.ts +3 -0
  334. package/dist/plugin-sdk/memory/embedding-input-limits.d.ts +2 -0
  335. package/dist/plugin-sdk/memory/embedding-model-limits.d.ts +2 -0
  336. package/dist/plugin-sdk/memory/embeddings.d.ts +1 -0
  337. package/dist/plugin-sdk/memory/internal.d.ts +11 -0
  338. package/dist/plugin-sdk/memory/manager.d.ts +0 -6
  339. package/dist/plugin-sdk/memory/qmd-manager.d.ts +2 -0
  340. package/dist/plugin-sdk/memory/qmd-query-parser.d.ts +8 -0
  341. package/dist/plugin-sdk/memory/session-files.d.ts +2 -0
  342. package/dist/plugin-sdk/process/command-queue.d.ts +16 -0
  343. package/dist/plugin-sdk/providers/github-copilot-token.d.ts +3 -0
  344. package/dist/plugin-sdk/routing/resolve-route.d.ts +3 -1
  345. package/dist/plugin-sdk/security/external-content.d.ts +1 -1
  346. package/dist/plugin-sdk/security/secret-equal.d.ts +1 -0
  347. package/dist/plugin-sdk/sessions/input-provenance.d.ts +16 -0
  348. package/dist/plugin-sdk/signal/monitor/event-handler.types.d.ts +8 -0
  349. package/dist/plugin-sdk/signal/monitor/mentions.d.ts +2 -0
  350. package/dist/plugin-sdk/slack/monitor/commands.d.ts +5 -0
  351. package/dist/plugin-sdk/slack/monitor/media.d.ts +21 -0
  352. package/dist/plugin-sdk/slack/types.d.ts +1 -0
  353. package/dist/plugin-sdk/telegram/bot-message-context.d.ts +2 -1
  354. package/dist/plugin-sdk/telegram/fetch.d.ts +1 -0
  355. package/dist/plugin-sdk/telegram/monitor.d.ts +1 -0
  356. package/dist/plugin-sdk/telegram/send.d.ts +3 -0
  357. package/dist/plugin-sdk/tts/tts.d.ts +2 -2
  358. package/dist/plugin-sdk/utils/fetch-timeout.d.ts +2 -0
  359. package/dist/plugin-sdk/web/media.d.ts +12 -2
  360. package/dist/{plugins-CQw3z3Nw.js → plugins-CTjLu-z-.js} +4 -4
  361. package/dist/{plugins-B7F0Ly9G.js → plugins-CxrdL_IZ.js} +3 -3
  362. package/dist/{plugins-cli-CJ74eHvr.js → plugins-cli-CbX97Kvt.js} +259 -49
  363. package/dist/{plugins-cli-ubDwUAzK.js → plugins-cli-Dn9OeO53.js} +257 -47
  364. package/dist/{ports-kYsTYQdA.js → ports-C8YYHVlc.js} +2 -2
  365. package/dist/{program-1bQ15ivo.js → program-D-mNC0It.js} +86 -83
  366. package/dist/{progress-Da1ehW-x.js → progress-COHv-uNT.js} +1 -1
  367. package/dist/{progress-COzt9PNY.js → progress-DZb6yPcJ.js} +1 -1
  368. package/dist/{prompt-style-Dc0C5HC9.js → prompt-style-Cf1r1L6k.js} +1 -1
  369. package/dist/{prompt-style-DjZDxcFg.js → prompt-style-lSlXMhsd.js} +1 -1
  370. package/dist/{pw-ai-CQ4-gUNR.js → pw-ai-6GzTgK5g.js} +205 -32
  371. package/dist/{pw-ai-1NN0FrJb.js → pw-ai-C8YhJRaI.js} +207 -32
  372. package/dist/{pw-ai-qEMUq5Mt.js → pw-ai-CKGenizV.js} +203 -29
  373. package/dist/{pw-ai-IOqEXO1O.js → pw-ai-D7devT89.js} +206 -32
  374. package/dist/{qmd-manager-CEwp3el1.js → qmd-manager-CQzWovq-.js} +71 -90
  375. package/dist/{qmd-manager-D6N3qvQ5.js → qmd-manager-Cs8RJVQp.js} +73 -90
  376. package/dist/{qmd-manager-C48QzrRe.js → qmd-manager-DdgrQ2kc.js} +71 -88
  377. package/dist/{qmd-manager-DaUqCKB_.js → qmd-manager-dyIoOvKl.js} +73 -90
  378. package/dist/{register.subclis-Cm-VJ5nP.js → register.subclis-ifHtmF3e.js} +29 -29
  379. package/dist/{reply-CBs4e9Rm.js → reply-VIHqsQ-k.js} +7906 -8743
  380. package/dist/{routes-9ygR0GOk.js → routes-CaCvio4Q.js} +36 -15
  381. package/dist/{routes-BrWrBk2R.js → routes-Cpfxk96k.js} +36 -14
  382. package/dist/{rpc-Cjuz2Gv1.js → rpc-BhB01Bhj.js} +3 -3
  383. package/dist/{rpc-DhkLVY5H.js → rpc-C5WsS_Ne.js} +3 -3
  384. package/dist/{run-main-BlZ5l-X9.js → run-main-DVy6KJTe.js} +88 -85
  385. package/dist/runner-B7CKBC80.js +1800 -0
  386. package/dist/runner-BEy5ZGFv.js +1901 -0
  387. package/dist/runner-Bv0BmJPF.js +1800 -0
  388. package/dist/runner-ChqVEgPx.js +1901 -0
  389. package/dist/{sandbox-qt49csTr.js → sandbox-BAChxjC5.js} +627 -157
  390. package/dist/{sandbox-CPZiaKcS.js → sandbox-DNHDwHw8.js} +628 -158
  391. package/dist/{sandbox-cli-C6_iNuqO.js → sandbox-cli-9oq67QEg.js} +22 -22
  392. package/dist/{sandbox-cli-C_wK-KAE.js → sandbox-cli-BiNq9yUe.js} +22 -22
  393. package/dist/{security-cli-CTTD1vms.js → security-cli-CRg03hvq.js} +28 -28
  394. package/dist/{security-cli-DRpGF2Yc.js → security-cli-LmBBHnmh.js} +28 -28
  395. package/dist/{server-context-lyNcqJYD.js → server-context-FwqBRH3K.js} +10 -10
  396. package/dist/{server-context-39mkstUs.js → server-context-RY7lRaxl.js} +9 -9
  397. package/dist/{server-node-events-V_G9BRRw.js → server-node-events-BbHOZX3O.js} +48 -43
  398. package/dist/{server-node-events-o9G18PaE.js → server-node-events-CngNLVL-.js} +50 -45
  399. package/dist/{service-DOlJdIqe.js → service-BnqdBTAK.js} +8 -4
  400. package/dist/{service-DDPRbf8a.js → service-DZN7KRok.js} +8 -4
  401. package/dist/{service-audit-VDRrWefh.js → service-audit-0Eil3ISN.js} +4 -4
  402. package/dist/{service-audit-CVy00Ze_.js → service-audit-B8KIOe8A.js} +4 -4
  403. package/dist/{session-cost-usage-CcCEQNuc.js → session-cost-usage-B-tyjp76.js} +14 -14
  404. package/dist/{session-cost-usage-PvyVZz-g.js → session-cost-usage-BYUb7fov.js} +14 -14
  405. package/dist/{shared-BnpC3wMU.js → shared-BCdNboU1.js} +3 -3
  406. package/dist/{shared-CagUDdmp.js → shared-CsAwU6-q.js} +3 -3
  407. package/dist/{shared-BDk_zC9p.js → shared-Csn6DLBA.js} +5 -5
  408. package/dist/{shared-C92wo-6f.js → shared-DEanAgja.js} +4 -4
  409. package/dist/{skill-scanner-C_fQzVDu.js → skill-scanner-BrGkh5K7.js} +1 -1
  410. package/dist/{skill-scanner-DrVEHfC6.js → skill-scanner-CucvxYhu.js} +1 -1
  411. package/dist/{skills-Ccsv3IQq.js → skills-CE7by2IF.js} +151 -8
  412. package/dist/{skills-_eKGrw9z.js → skills-Dz15dAM4.js} +152 -9
  413. package/dist/{skills-cli-DqvLjooh.js → skills-cli-B5b75pDK.js} +13 -13
  414. package/dist/{skills-cli-DUncybht.js → skills-cli-CbCDrYwp.js} +13 -13
  415. package/dist/{skills-status-Cp2ZFhIx.js → skills-status-B99Us6yS.js} +2 -2
  416. package/dist/{skills-status-Ck0CCFZG.js → skills-status-ChM7JE47.js} +3 -3
  417. package/dist/{sqlite-DODNHWJb.js → sqlite-2UsPaJz5.js} +97 -2
  418. package/dist/{sqlite-cSdsHVEw.js → sqlite-CASnHrgX.js} +97 -1
  419. package/dist/{sqlite-Bwo2rASR.js → sqlite-CVWiMkGu.js} +97 -1
  420. package/dist/{sqlite-CpqIbY4-.js → sqlite-CcIWkGaM.js} +97 -1
  421. package/dist/{status-Bmx9_1C7.js → status-CKuX1-zb.js} +3 -3
  422. package/dist/{status-CBGgwlTW.js → status-Cm4q6o-I.js} +57 -49
  423. package/dist/{status-DkJgtvSz.js → status-DD2iqGc9.js} +4 -4
  424. package/dist/{subsystem-DPnkvS73.js → subsystem-DHfJG4gk.js} +73 -20
  425. package/dist/{system-cli-9fQ1uLiz.js → system-cli-BVJDR474.js} +87 -15
  426. package/dist/{system-cli-Gq8OWHFg.js → system-cli-C3Y_9VpI.js} +88 -16
  427. package/dist/{systemd-Pa7LURHB.js → systemd-DxddcFsa.js} +3 -3
  428. package/dist/{systemd-hints-zi4ohCOY.js → systemd-hints-BVLopJ9O.js} +1 -1
  429. package/dist/{systemd-linger-CDo2UbHM.js → systemd-linger-BThjV1Sr.js} +2 -2
  430. package/dist/{systemd-linger-6_naJcJp.js → systemd-linger-D3Va1Cv7.js} +2 -2
  431. package/dist/{systemd-BEWwfwn0.js → systemd-s3S2HVog.js} +3 -3
  432. package/dist/{table-Bb9gAVIp.js → table-BIk8Aan_.js} +2 -2
  433. package/dist/{table-cCoGqLsk.js → table-Bvka_vkc.js} +1 -1
  434. package/dist/{tool-display-DUVhO36P.js → tool-display-DbdMQFZx.js} +2 -2
  435. package/dist/{tool-display-DNOVCI6J.js → tool-display-kpW5Hg2z.js} +2 -2
  436. package/dist/{tui-DDVqLwqT.js → tui-B40Z2jMa.js} +120 -14
  437. package/dist/{tui-cli-CurbazQf.js → tui-cli-Bwa6K7xR.js} +28 -28
  438. package/dist/{tui-cli-BeN2K38I.js → tui-cli-DD6g7uZb.js} +27 -27
  439. package/dist/{tui-B9zLJxf6.js → tui-lFMZUnx6.js} +121 -13
  440. package/dist/{update-Ct9sqJC_.js → update-Bos8PPCG.js} +3 -3
  441. package/dist/{update--i077azM.js → update-Cg8MtrEr.js} +3 -3
  442. package/dist/{update-cli-CT5W0kpw.js → update-cli-CC-wTeje.js} +92 -73
  443. package/dist/{update-cli-C87lNK1S.js → update-cli-CULnXFL_.js} +91 -72
  444. package/dist/{update-runner-BIttRDyV.js → update-runner-BaLsla0c.js} +11 -11
  445. package/dist/{update-runner-xbeVkAD9.js → update-runner-Dbsdl5AU.js} +10 -10
  446. package/dist/{utils-Dk86IbEs.js → utils-BLJAc3ZV.js} +1 -1
  447. package/dist/{utils-BTaR--Ln.js → utils-BtIMES3N.js} +1 -1
  448. package/dist/{webhooks-cli-Db3zyJaw.js → webhooks-cli-ClHLUu_j.js} +21 -13
  449. package/dist/{webhooks-cli-DUUa8gVY.js → webhooks-cli-DVXr2uyN.js} +21 -13
  450. package/dist/{widearea-dns-BgYasW6m.js → widearea-dns-C4RnIR9O.js} +3 -3
  451. package/dist/{widearea-dns-CMIG6-74.js → widearea-dns-Ypwgjpsr.js} +3 -3
  452. package/dist/{ws-C0k_dhCP.js → ws-BcJt4pcg.js} +24 -2
  453. package/dist/{ws-DtDKpbLR.js → ws-MC-rTJLe.js} +24 -2
  454. package/dist/{ws-log-cMNgAyLy.js → ws-log-WrJ4QYu7.js} +1 -1
  455. package/dist/{ws-log-C6vm_XMA.js → ws-log-lip4ETlm.js} +2 -2
  456. package/dist/{wsl-rfIr_Sde.js → wsl-BvTIzy-8.js} +5 -3
  457. package/docs/assets/install-script.svg +1 -0
  458. package/docs/automation/hooks.md +1 -38
  459. package/docs/automation/webhook.md +52 -2
  460. package/docs/channels/discord.md +389 -381
  461. package/docs/channels/grammy.md +1 -1
  462. package/docs/channels/imessage.md +229 -218
  463. package/docs/channels/index.md +1 -0
  464. package/docs/channels/irc.md +234 -0
  465. package/docs/channels/msteams.md +2 -0
  466. package/docs/channels/pairing.md +1 -1
  467. package/docs/channels/slack.md +295 -415
  468. package/docs/channels/telegram.md +397 -460
  469. package/docs/channels/whatsapp.md +338 -310
  470. package/docs/ci.md +0 -12
  471. package/docs/cli/hooks.md +1 -14
  472. package/docs/cli/index.md +6 -1
  473. package/docs/cli/logs.md +4 -0
  474. package/docs/cli/onboard.md +33 -0
  475. package/docs/cli/plugins.md +20 -1
  476. package/docs/cli/security.md +2 -0
  477. package/docs/concepts/architecture.md +0 -16
  478. package/docs/concepts/memory.md +7 -4
  479. package/docs/concepts/model-providers.md +27 -0
  480. package/docs/concepts/session-tool.md +1 -0
  481. package/docs/concepts/system-prompt.md +13 -0
  482. package/docs/docs.json +18 -12
  483. package/docs/experiments/plans/browser-evaluate-cdp-refactor.md +229 -0
  484. package/docs/gateway/configuration-examples.md +9 -2
  485. package/docs/gateway/configuration-reference.md +2345 -0
  486. package/docs/gateway/configuration.md +338 -3297
  487. package/docs/gateway/index.md +162 -238
  488. package/docs/gateway/openai-http-api.md +1 -0
  489. package/docs/gateway/openresponses-http-api.md +16 -0
  490. package/docs/gateway/remote-gateway-readme.md +0 -16
  491. package/docs/gateway/security/index.md +4 -16
  492. package/docs/gateway/tools-invoke-http-api.md +26 -1
  493. package/docs/help/faq.md +9 -0
  494. package/docs/help/testing.md +11 -0
  495. package/docs/install/docker.md +18 -0
  496. package/docs/install/hetzner.md +21 -0
  497. package/docs/install/installer.md +20 -0
  498. package/docs/nodes/audio.md +19 -0
  499. package/docs/platforms/mac/release.md +7 -7
  500. package/docs/providers/glm.md +3 -3
  501. package/docs/providers/huggingface.md +209 -0
  502. package/docs/providers/index.md +3 -0
  503. package/docs/providers/litellm.md +153 -0
  504. package/docs/providers/together.md +2 -2
  505. package/docs/providers/vllm.md +92 -0
  506. package/docs/providers/zai.md +2 -2
  507. package/docs/reference/credits.md +4 -28
  508. package/docs/reference/test.md +2 -1
  509. package/docs/reference/token-use.md +1 -1
  510. package/docs/reference/transcript-hygiene.md +18 -0
  511. package/docs/start/getting-started.md +5 -0
  512. package/docs/start/onboarding-overview.md +51 -0
  513. package/docs/start/onboarding.md +1 -0
  514. package/docs/start/openclaw.md +0 -16
  515. package/docs/start/wizard-cli-automation.md +17 -0
  516. package/docs/start/wizard-cli-reference.md +12 -0
  517. package/docs/start/wizard.md +3 -1
  518. package/docs/tools/browser.md +6 -0
  519. package/docs/zh-CN/automation/hooks.md +1 -38
  520. package/docs/zh-CN/cli/hooks.md +1 -14
  521. package/extensions/bluebubbles/package.json +1 -1
  522. package/extensions/bluebubbles/src/monitor.test.ts +40 -28
  523. package/extensions/bluebubbles/src/monitor.ts +0 -4
  524. package/extensions/copilot-proxy/package.json +1 -1
  525. package/extensions/diagnostics-otel/package.json +10 -10
  526. package/extensions/discord/package.json +1 -1
  527. package/extensions/feishu/package.json +2 -5
  528. package/extensions/feishu/src/bot.checkBotMentioned.test.ts +64 -0
  529. package/extensions/feishu/src/bot.test.ts +265 -0
  530. package/extensions/feishu/src/bot.ts +73 -18
  531. package/extensions/feishu/src/channel.test.ts +48 -0
  532. package/extensions/feishu/src/channel.ts +1 -3
  533. package/extensions/feishu/src/config-schema.ts +6 -0
  534. package/extensions/feishu/src/docx.ts +14 -4
  535. package/extensions/feishu/src/media.test.ts +151 -0
  536. package/extensions/feishu/src/media.ts +27 -13
  537. package/extensions/feishu/src/reply-dispatcher.test.ts +116 -0
  538. package/extensions/feishu/src/reply-dispatcher.ts +124 -67
  539. package/extensions/feishu/src/streaming-card.ts +223 -0
  540. package/extensions/feishu/src/targets.test.ts +16 -0
  541. package/extensions/feishu/src/targets.ts +1 -1
  542. package/extensions/google-antigravity-auth/package.json +1 -1
  543. package/extensions/google-gemini-cli-auth/oauth.test.ts +4 -1
  544. package/extensions/google-gemini-cli-auth/package.json +1 -1
  545. package/extensions/googlechat/package.json +1 -1
  546. package/extensions/googlechat/src/channel.ts +3 -20
  547. package/extensions/googlechat/src/resolve-target.test.ts +138 -0
  548. package/extensions/imessage/package.json +1 -1
  549. package/extensions/irc/index.ts +17 -0
  550. package/extensions/irc/openclaw.plugin.json +9 -0
  551. package/extensions/irc/package.json +14 -0
  552. package/extensions/irc/src/accounts.ts +268 -0
  553. package/extensions/irc/src/channel.ts +367 -0
  554. package/extensions/irc/src/client.test.ts +43 -0
  555. package/extensions/irc/src/client.ts +439 -0
  556. package/extensions/irc/src/config-schema.test.ts +27 -0
  557. package/extensions/irc/src/config-schema.ts +97 -0
  558. package/extensions/irc/src/control-chars.ts +22 -0
  559. package/extensions/irc/src/inbound.ts +334 -0
  560. package/extensions/irc/src/monitor.test.ts +43 -0
  561. package/extensions/irc/src/monitor.ts +158 -0
  562. package/extensions/irc/src/normalize.test.ts +46 -0
  563. package/extensions/irc/src/normalize.ts +117 -0
  564. package/extensions/irc/src/onboarding.test.ts +118 -0
  565. package/extensions/irc/src/onboarding.ts +479 -0
  566. package/extensions/irc/src/policy.test.ts +132 -0
  567. package/extensions/irc/src/policy.ts +157 -0
  568. package/extensions/irc/src/probe.ts +64 -0
  569. package/extensions/irc/src/protocol.test.ts +44 -0
  570. package/extensions/irc/src/protocol.ts +169 -0
  571. package/extensions/irc/src/runtime.ts +14 -0
  572. package/extensions/irc/src/send.ts +99 -0
  573. package/extensions/irc/src/types.ts +94 -0
  574. package/extensions/line/package.json +1 -1
  575. package/extensions/llm-task/package.json +1 -1
  576. package/extensions/lobster/package.json +1 -1
  577. package/extensions/matrix/CHANGELOG.md +6 -0
  578. package/extensions/matrix/node_modules/.bin/markdown-it +2 -2
  579. package/extensions/matrix/node_modules/.bin/markdown-it.CMD +2 -2
  580. package/extensions/matrix/node_modules/.bin/markdown-it.ps1 +2 -2
  581. package/extensions/matrix/package.json +2 -2
  582. package/extensions/matrix/src/matrix/monitor/media.ts +4 -2
  583. package/extensions/mattermost/package.json +1 -1
  584. package/extensions/memory-core/package.json +1 -1
  585. package/extensions/memory-lancedb/index.ts +6 -2
  586. package/extensions/memory-lancedb/node_modules/.bin/openai +2 -2
  587. package/extensions/memory-lancedb/node_modules/.bin/openai.CMD +2 -2
  588. package/extensions/memory-lancedb/node_modules/.bin/openai.ps1 +2 -2
  589. package/extensions/memory-lancedb/package.json +2 -2
  590. package/extensions/minimax-portal-auth/index.ts +7 -5
  591. package/extensions/minimax-portal-auth/package.json +1 -1
  592. package/extensions/msteams/CHANGELOG.md +6 -0
  593. package/extensions/msteams/package.json +1 -1
  594. package/extensions/msteams/src/media-helpers.test.ts +9 -0
  595. package/extensions/msteams/src/media-helpers.ts +15 -1
  596. package/extensions/msteams/src/mentions.test.ts +235 -0
  597. package/extensions/msteams/src/mentions.ts +114 -0
  598. package/extensions/msteams/src/messenger.test.ts +81 -1
  599. package/extensions/msteams/src/messenger.ts +11 -2
  600. package/extensions/nextcloud-talk/package.json +1 -1
  601. package/extensions/nostr/CHANGELOG.md +6 -0
  602. package/extensions/nostr/package.json +2 -2
  603. package/extensions/open-prose/package.json +1 -1
  604. package/extensions/signal/package.json +1 -1
  605. package/extensions/slack/package.json +1 -1
  606. package/extensions/telegram/package.json +1 -1
  607. package/extensions/telegram/src/channel.ts +1 -0
  608. package/extensions/tlon/package.json +1 -1
  609. package/extensions/twitch/CHANGELOG.md +6 -0
  610. package/extensions/twitch/package.json +1 -1
  611. package/extensions/twitch/src/onboarding.test.ts +5 -0
  612. package/extensions/twitch/src/outbound.test.ts +17 -6
  613. package/extensions/twitch/src/outbound.ts +12 -10
  614. package/extensions/voice-call/CHANGELOG.md +6 -0
  615. package/extensions/voice-call/package.json +1 -1
  616. package/extensions/voice-call/src/media-stream.ts +7 -1
  617. package/extensions/voice-call/src/providers/twilio.test.ts +5 -3
  618. package/extensions/voice-call/src/providers/twilio.ts +12 -1
  619. package/extensions/whatsapp/package.json +1 -1
  620. package/extensions/whatsapp/src/channel.ts +6 -16
  621. package/extensions/whatsapp/src/resolve-target.test.ts +154 -0
  622. package/extensions/zalo/CHANGELOG.md +6 -0
  623. package/extensions/zalo/package.json +1 -1
  624. package/extensions/zalouser/CHANGELOG.md +6 -0
  625. package/extensions/zalouser/package.json +1 -1
  626. package/package.json +26 -22
  627. package/dist/auth-BcNHFK-i.js +0 -184
  628. package/dist/auth-DkjJ3pm-.js +0 -184
  629. package/dist/boolean-M-esQJt6.js +0 -30
  630. package/dist/bundled/soul-evil/HOOK.md +0 -71
  631. package/dist/bundled/soul-evil/handler.js +0 -194
  632. package/dist/cli-B631__JU.js +0 -89
  633. package/dist/cli-DVhCVZZ6.js +0 -86
  634. package/dist/config-CI7EpvlP.js +0 -15
  635. package/dist/constants-DuoCkWRh.js +0 -65
  636. package/dist/control-ui/assets/index-CnB9IO4a.js.map +0 -1
  637. package/dist/control-ui/assets/index-DWhx-9JL.css +0 -1
  638. package/dist/date-time-c6HTX6IW.js +0 -187
  639. package/dist/frontmatter-xwTm0734.js +0 -105
  640. package/dist/parse-DqAvJRIf.js +0 -23
  641. package/dist/parse-duration-De_tAQSe.js +0 -24
  642. package/dist/parse-timeout-DV8NQQWk.js +0 -16
  643. package/dist/paths-IivnSNkP.js +0 -51
  644. package/dist/paths-MnZaxqPw.js +0 -48
  645. package/dist/paths-uoGO2aiO.js +0 -48
  646. package/dist/pi-model-discovery-DzFOAbQt.js +0 -20
  647. package/dist/plugin-sdk/tui/tui-formatters.d.ts +0 -31
  648. package/dist/session-key-nXYQSv-a.js +0 -167
  649. package/dist/tailscale-DU6DgqVy.js +0 -225
  650. package/dist/tailscale-DzJUWmKf.js +0 -252
  651. package/dist/utils-dp_OM900.js +0 -476
  652. package/docs/hooks/soul-evil.md +0 -69
  653. package/docs/zh-CN/hooks/soul-evil.md +0 -72
  654. package/skills/local-places/SERVER_README.md +0 -101
  655. package/skills/local-places/SKILL.md +0 -102
  656. package/skills/local-places/pyproject.toml +0 -21
  657. package/skills/local-places/src/local_places/__init__.py +0 -2
  658. package/skills/local-places/src/local_places/google_places.py +0 -314
  659. package/skills/local-places/src/local_places/main.py +0 -65
  660. package/skills/local-places/src/local_places/schemas.py +0 -107
  661. /package/dist/{archive-CXhvR9nU.js → archive-aSMUcOc6.js} +0 -0
  662. /package/dist/{archive-D0z3LZDK.js → archive-beaSfAzA.js} +0 -0
  663. /package/dist/{brew-BIrWdDps.js → brew-DlQQMJ3n.js} +0 -0
  664. /package/dist/{brew-B7YK4ZoL.js → brew-ROHf0-Xp.js} +0 -0
  665. /package/dist/{cli-utils-PlLcDZlM.js → cli-utils-CRhVAaLV.js} +0 -0
  666. /package/dist/{cli-utils-R-ECs5cY.js → cli-utils-CodyYLHe.js} +0 -0
  667. /package/dist/{command-format-BUxhT1xL.js → command-format-qUVxzqYm.js} +0 -0
  668. /package/dist/{constants-CNTiY-ZN.js → constants-BvQ6S8j5.js} +0 -0
  669. /package/dist/{errors-D3tYRJWG.js → errors-B91HIDPD.js} +0 -0
  670. /package/dist/{errors-B0eT3jVv.js → errors-Bv81hF2P.js} +0 -0
  671. /package/dist/{errors-x4NYs-1P.js → errors-Cojm0Kl7.js} +0 -0
  672. /package/dist/{format-CaxeRcue.js → format-CL8VOhxX.js} +0 -0
  673. /package/dist/{format-DLOJPZmo.js → format-DcfK-dwd.js} +0 -0
  674. /package/dist/{format-duration-CEmFWLyX.js → format-duration--hQihAvf.js} +0 -0
  675. /package/dist/{format-duration-DCXJx2ba.js → format-duration-84n6_DgO.js} +0 -0
  676. /package/dist/{format-relative-79_Y1n2Y.js → format-relative-Cywx6ldk.js} +0 -0
  677. /package/dist/{format-relative-Db7eqEu8.js → format-relative-cegC_FF5.js} +0 -0
  678. /package/dist/{helpers-CQI-5xS9.js → helpers-8O7IVGO-.js} +0 -0
  679. /package/dist/{helpers-DdwqKAAS.js → helpers-ByYj2Aq5.js} +0 -0
  680. /package/dist/{helpers-CRzoyyXS.js → helpers-CUVSCDJV.js} +0 -0
  681. /package/dist/{helpers-C89IG08W.js → helpers-HyeZXsnu.js} +0 -0
  682. /package/dist/{is-main-qJ675wPV.js → is-main-B9A8S9YC.js} +0 -0
  683. /package/dist/{is-main-WWuz28Ip.js → is-main-BWoXGz7p.js} +0 -0
  684. /package/dist/{logging-BzvBIA3Y.js → logging-D-Jq2wIo.js} +0 -0
  685. /package/dist/{logging-CfEk_PnX.js → logging-fywhKCmE.js} +0 -0
  686. /package/dist/{parse-Cjiudy6x.js → parse-Bw0oH-rT.js} +0 -0
  687. /package/dist/{parse-log-line-CUrpqe1w.js → parse-log-line-BuRiE-Ij.js} +0 -0
  688. /package/dist/{parse-log-line-D2UGw0wR.js → parse-log-line-CfVgwy6x.js} +0 -0
  689. /package/dist/{parse-timeout-DFSPLxpY.js → parse-timeout-D1XX_zN_.js} +0 -0
  690. /package/dist/{pi-model-discovery-CV2V1HHz.js → pi-model-discovery-DqgqUyAv.js} +0 -0
  691. /package/dist/{pi-model-discovery-DzEIEgHL.js → pi-model-discovery-EwKVHlZB.js} +0 -0
  692. /package/dist/{prompts--d-6l5Ln.js → prompts-Bg96reub.js} +0 -0
  693. /package/dist/{prompts-CXLLIBwP.js → prompts-Dszjy1n_.js} +0 -0
  694. /package/dist/{redact-BRmQPYDR.js → redact-BIMJ3ntQ.js} +0 -0
  695. /package/dist/{redact-BHmk44DI.js → redact-BRsnXqwD.js} +0 -0
  696. /package/dist/{redact-DAKeu7PA.js → redact-UvkXqguc.js} +0 -0
  697. /package/dist/{status-Cv36yYdi.js → status-C_dMhoE0.js} +0 -0
  698. /package/dist/{status-Drziap9H.js → status-DCkF_L3U.js} +0 -0
  699. /package/dist/{systemd-hints-CH4pbCFD.js → systemd-hints-CXNtLw9Q.js} +0 -0
  700. /package/dist/{tailnet-CL5GtL7t.js → tailnet-DATIFSsY.js} +0 -0
  701. /package/dist/{tailnet-DGRSvYuQ.js → tailnet-uoFvUSsw.js} +0 -0
  702. /package/dist/{transcript-events-BlIONGVn.js → transcript-events-BHS7QoRl.js} +0 -0
  703. /package/dist/{transcript-events-C1hdue6u.js → transcript-events-Bp7fGnwv.js} +0 -0
  704. /package/dist/{transcript-events-CZ8CG4ht.js → transcript-events-Ch7wLX-j.js} +0 -0
  705. /package/dist/{usage-format-6Uar63S0.js → usage-format-Bhl_WCWP.js} +0 -0
  706. /package/dist/{usage-format-hd37en6b.js → usage-format-CpORtVCG.js} +0 -0
  707. /package/extensions/{feishu → irc}/node_modules/.bin/claw +0 -0
  708. /package/extensions/{feishu → irc}/node_modules/.bin/claw.CMD +0 -0
  709. /package/extensions/{feishu → irc}/node_modules/.bin/claw.ps1 +0 -0
  710. /package/extensions/{feishu → irc}/node_modules/.bin/moltbot +0 -0
  711. /package/extensions/{feishu → irc}/node_modules/.bin/moltbot.CMD +0 -0
  712. /package/extensions/{feishu → irc}/node_modules/.bin/moltbot.ps1 +0 -0
  713. /package/extensions/{feishu → irc}/node_modules/.bin/pigbot +0 -0
  714. /package/extensions/{feishu → irc}/node_modules/.bin/pigbot.CMD +0 -0
  715. /package/extensions/{feishu → irc}/node_modules/.bin/pigbot.ps1 +0 -0
@@ -1,13 +1,14 @@
1
1
  import { a as resolveOAuthDir, n as resolveConfigPath, r as resolveDefaultConfigCandidates, s as resolveStateDir, u as resolveRequiredHomeDir } from "./paths-rb94mUrR.js";
2
- import { M as normalizeAgentId, T as DEFAULT_AGENT_ID, c as resolveDefaultAgentId, j as normalizeAccountId, s as resolveAgentWorkspaceDir, w as DEFAULT_ACCOUNT_ID } from "./agent-scope-Dpav7C-i.js";
3
- import { A as isPlainObject, I as resolveConfigDir, N as jidToE164, R as resolveUserPath, Z as success, j as isRecord, m as CHANNEL_IDS, nt as getChildLogger, q as info, u as defaultRuntime, y as normalizeChatChannelId } from "./exec-Bas1hoSJ.js";
4
- import { D as shouldEnableShellEnvFallback, E as shouldDeferShellEnvFallback, T as resolveShellEnvFallbackTimeoutMs, U as DEFAULT_CONTEXT_TOKENS, s as parseModelRef, w as loadShellEnvFallback } from "./model-selection-DlV6wnTr.js";
2
+ import { M as normalizeAgentId, T as DEFAULT_AGENT_ID, c as resolveDefaultAgentId, j as normalizeAccountId, s as resolveAgentWorkspaceDir, w as DEFAULT_ACCOUNT_ID } from "./agent-scope-okUOVjE5.js";
3
+ import { A as isPlainObject$1, I as resolveConfigDir, N as jidToE164, R as resolveUserPath, Z as success, j as isRecord, m as CHANNEL_IDS, nt as getChildLogger, q as info, u as defaultRuntime, y as normalizeChatChannelId } from "./exec-EKUaAU91.js";
4
+ import { D as shouldEnableShellEnvFallback, E as shouldDeferShellEnvFallback, T as resolveShellEnvFallbackTimeoutMs, U as DEFAULT_CONTEXT_TOKENS, s as parseModelRef, w as loadShellEnvFallback } from "./model-selection-vC82fEiP.js";
5
5
  import { createRequire } from "node:module";
6
6
  import path from "node:path";
7
7
  import fs from "node:fs";
8
8
  import os from "node:os";
9
9
  import JSON5 from "json5";
10
10
  import fs$1 from "node:fs/promises";
11
+ import { isDeepStrictEqual } from "node:util";
11
12
  import { fileURLToPath } from "node:url";
12
13
  import crypto from "node:crypto";
13
14
  import dotenv from "dotenv";
@@ -49,6 +50,9 @@ function maybeRestoreCredsFromBackup(authDir) {
49
50
  if (!backupRaw) return;
50
51
  JSON.parse(backupRaw);
51
52
  fs.copyFileSync(backupPath, credsPath);
53
+ try {
54
+ fs.chmodSync(credsPath, 384);
55
+ } catch {}
52
56
  logger.warn({ credsPath }, "restored corrupted WhatsApp creds.json from backup");
53
57
  } catch {}
54
58
  }
@@ -765,7 +769,7 @@ function substituteString(value, env, configPath) {
765
769
  function substituteAny(value, env, path) {
766
770
  if (typeof value === "string") return substituteString(value, env, path);
767
771
  if (Array.isArray(value)) return value.map((item, index) => substituteAny(item, env, `${path}[${index}]`));
768
- if (isPlainObject(value)) {
772
+ if (isPlainObject$1(value)) {
769
773
  const result = {};
770
774
  for (const [key, val] of Object.entries(value)) result[key] = substituteAny(val, env, path ? `${path}.${key}` : key);
771
775
  return result;
@@ -835,7 +839,7 @@ var CircularIncludeError = class extends ConfigIncludeError {
835
839
  /** Deep merge: arrays concatenate, objects merge recursively, primitives: source wins */
836
840
  function deepMerge(target, source) {
837
841
  if (Array.isArray(target) && Array.isArray(source)) return [...target, ...source];
838
- if (isPlainObject(target) && isPlainObject(source)) {
842
+ if (isPlainObject$1(target) && isPlainObject$1(source)) {
839
843
  const result = { ...target };
840
844
  for (const key of Object.keys(source)) result[key] = key in result ? deepMerge(result[key], source[key]) : source[key];
841
845
  return result;
@@ -852,7 +856,7 @@ var IncludeProcessor = class IncludeProcessor {
852
856
  }
853
857
  process(obj) {
854
858
  if (Array.isArray(obj)) return obj.map((item) => this.process(item));
855
- if (!isPlainObject(obj)) return obj;
859
+ if (!isPlainObject$1(obj)) return obj;
856
860
  if (!(INCLUDE_KEY in obj)) return this.processObject(obj);
857
861
  return this.processInclude(obj);
858
862
  }
@@ -866,7 +870,7 @@ var IncludeProcessor = class IncludeProcessor {
866
870
  const otherKeys = Object.keys(obj).filter((k) => k !== INCLUDE_KEY);
867
871
  const included = this.resolveInclude(includeValue);
868
872
  if (otherKeys.length === 0) return included;
869
- if (!isPlainObject(included)) throw new ConfigIncludeError("Sibling keys require included content to be an object", typeof includeValue === "string" ? includeValue : INCLUDE_KEY);
873
+ if (!isPlainObject$1(included)) throw new ConfigIncludeError("Sibling keys require included content to be an object", typeof includeValue === "string" ? includeValue : INCLUDE_KEY);
870
874
  const rest = {};
871
875
  for (const key of otherKeys) rest[key] = this.process(obj[key]);
872
876
  return deepMerge(included, rest);
@@ -929,6 +933,30 @@ function resolveConfigIncludes(obj, configPath, resolver = defaultResolver) {
929
933
  return new IncludeProcessor(configPath, resolver).process(obj);
930
934
  }
931
935
 
936
+ //#endregion
937
+ //#region src/infra/exec-safety.ts
938
+ const SHELL_METACHARS = /[;&|`$<>]/;
939
+ const CONTROL_CHARS = /[\r\n]/;
940
+ const QUOTE_CHARS = /["']/;
941
+ const BARE_NAME_PATTERN = /^[A-Za-z0-9._+-]+$/;
942
+ function isLikelyPath(value) {
943
+ if (value.startsWith(".") || value.startsWith("~")) return true;
944
+ if (value.includes("/") || value.includes("\\")) return true;
945
+ return /^[A-Za-z]:[\\/]/.test(value);
946
+ }
947
+ function isSafeExecutableValue(value) {
948
+ if (!value) return false;
949
+ const trimmed = value.trim();
950
+ if (!trimmed) return false;
951
+ if (trimmed.includes("\0")) return false;
952
+ if (CONTROL_CHARS.test(trimmed)) return false;
953
+ if (SHELL_METACHARS.test(trimmed)) return false;
954
+ if (QUOTE_CHARS.test(trimmed)) return false;
955
+ if (isLikelyPath(trimmed)) return true;
956
+ if (trimmed.startsWith("-")) return false;
957
+ return BARE_NAME_PATTERN.test(trimmed);
958
+ }
959
+
932
960
  //#endregion
933
961
  //#region src/config/legacy.shared.ts
934
962
  const getRecord = (value) => isRecord(value) ? value : null;
@@ -950,16 +978,16 @@ const mergeMissing = (target, source) => {
950
978
  if (isRecord(existing) && isRecord(value)) mergeMissing(existing, value);
951
979
  }
952
980
  };
953
- const AUDIO_TRANSCRIPTION_CLI_ALLOWLIST = new Set(["whisper"]);
954
981
  const mapLegacyAudioTranscription = (value) => {
955
982
  const transcriber = getRecord(value);
956
983
  const command = Array.isArray(transcriber?.command) ? transcriber?.command : null;
957
984
  if (!command || command.length === 0) return null;
958
- const rawExecutable = String(command[0] ?? "").trim();
985
+ if (typeof command[0] !== "string") return null;
986
+ if (!command.every((part) => typeof part === "string")) return null;
987
+ const rawExecutable = command[0].trim();
959
988
  if (!rawExecutable) return null;
960
- const executableName = rawExecutable.split(/[\\/]/).pop() ?? rawExecutable;
961
- if (!AUDIO_TRANSCRIPTION_CLI_ALLOWLIST.has(executableName)) return null;
962
- const args = command.slice(1).map((part) => String(part));
989
+ if (!isSafeExecutableValue(rawExecutable)) return null;
990
+ const args = command.slice(1);
963
991
  const timeoutSeconds = typeof transcriber?.timeoutSeconds === "number" ? transcriber?.timeoutSeconds : void 0;
964
992
  const result = {
965
993
  command: rawExecutable,
@@ -1423,30 +1451,35 @@ const LEGACY_CONFIG_MIGRATIONS_PART_2 = [
1423
1451
  mediaAudio.models = [mapped];
1424
1452
  changes.push("Moved routing.transcribeAudio → tools.media.audio.models.");
1425
1453
  } else changes.push("Removed routing.transcribeAudio (tools.media.audio.models already set).");
1426
- } else changes.push("Removed routing.transcribeAudio (unsupported transcription CLI).");
1454
+ } else changes.push("Removed routing.transcribeAudio (invalid or empty command).");
1427
1455
  delete routing.transcribeAudio;
1428
1456
  }
1457
+ if (Object.keys(routing).length === 0) delete raw.routing;
1458
+ }
1459
+ },
1460
+ {
1461
+ id: "audio.transcription-v2",
1462
+ describe: "Move audio.transcription to tools.media.audio.models",
1463
+ apply: (raw, changes) => {
1429
1464
  const audio = getRecord(raw.audio);
1430
- if (audio?.transcription !== void 0) {
1431
- const mapped = mapLegacyAudioTranscription(audio.transcription);
1432
- if (mapped) {
1433
- const mediaAudio = ensureRecord(ensureRecord(ensureRecord(raw, "tools"), "media"), "audio");
1434
- if ((Array.isArray(mediaAudio.models) ? mediaAudio.models : []).length === 0) {
1435
- mediaAudio.enabled = true;
1436
- mediaAudio.models = [mapped];
1437
- changes.push("Moved audio.transcription → tools.media.audio.models.");
1438
- } else changes.push("Removed audio.transcription (tools.media.audio.models already set).");
1439
- delete audio.transcription;
1440
- if (Object.keys(audio).length === 0) delete raw.audio;
1441
- else raw.audio = audio;
1442
- } else {
1443
- delete audio.transcription;
1444
- changes.push("Removed audio.transcription (unsupported transcription CLI).");
1445
- if (Object.keys(audio).length === 0) delete raw.audio;
1446
- else raw.audio = audio;
1447
- }
1465
+ if (audio?.transcription === void 0) return;
1466
+ const mapped = mapLegacyAudioTranscription(audio.transcription);
1467
+ if (mapped) {
1468
+ const mediaAudio = ensureRecord(ensureRecord(ensureRecord(raw, "tools"), "media"), "audio");
1469
+ if ((Array.isArray(mediaAudio.models) ? mediaAudio.models : []).length === 0) {
1470
+ mediaAudio.enabled = true;
1471
+ mediaAudio.models = [mapped];
1472
+ changes.push("Moved audio.transcription → tools.media.audio.models.");
1473
+ } else changes.push("Removed audio.transcription (tools.media.audio.models already set).");
1474
+ delete audio.transcription;
1475
+ if (Object.keys(audio).length === 0) delete raw.audio;
1476
+ else raw.audio = audio;
1477
+ } else {
1478
+ delete audio.transcription;
1479
+ changes.push("Removed audio.transcription (invalid or empty command).");
1480
+ if (Object.keys(audio).length === 0) delete raw.audio;
1481
+ else raw.audio = audio;
1448
1482
  }
1449
- if (Object.keys(routing).length === 0) delete raw.routing;
1450
1483
  }
1451
1484
  }
1452
1485
  ];
@@ -1771,6 +1804,26 @@ function findLegacyConfigIssues(raw) {
1771
1804
  return issues;
1772
1805
  }
1773
1806
 
1807
+ //#endregion
1808
+ //#region src/config/merge-patch.ts
1809
+ function applyMergePatch(base, patch) {
1810
+ if (!isPlainObject$1(patch)) return patch;
1811
+ const result = isPlainObject$1(base) ? { ...base } : {};
1812
+ for (const [key, value] of Object.entries(patch)) {
1813
+ if (value === null) {
1814
+ delete result[key];
1815
+ continue;
1816
+ }
1817
+ if (isPlainObject$1(value)) {
1818
+ const baseValue = result[key];
1819
+ result[key] = applyMergePatch(isPlainObject$1(baseValue) ? baseValue : {}, value);
1820
+ continue;
1821
+ }
1822
+ result[key] = value;
1823
+ }
1824
+ return result;
1825
+ }
1826
+
1774
1827
  //#endregion
1775
1828
  //#region src/config/normalize-paths.ts
1776
1829
  const PATH_VALUE_RE = /^~(?=$|[\\/])/;
@@ -1789,11 +1842,11 @@ function normalizeAny(key, value) {
1789
1842
  return value.map((entry) => {
1790
1843
  if (typeof entry === "string") return normalizeChildren ? normalizeStringValue(key, entry) : entry;
1791
1844
  if (Array.isArray(entry)) return normalizeAny(void 0, entry);
1792
- if (isPlainObject(entry)) return normalizeAny(void 0, entry);
1845
+ if (isPlainObject$1(entry)) return normalizeAny(void 0, entry);
1793
1846
  return entry;
1794
1847
  });
1795
1848
  }
1796
- if (!isPlainObject(value)) return value;
1849
+ if (!isPlainObject$1(value)) return value;
1797
1850
  for (const [childKey, childValue] of Object.entries(value)) {
1798
1851
  const next = normalizeAny(childKey, childValue);
1799
1852
  if (next !== childValue) value[childKey] = next;
@@ -1844,7 +1897,7 @@ function setConfigValueAtPath(root, path, value) {
1844
1897
  for (let idx = 0; idx < path.length - 1; idx += 1) {
1845
1898
  const key = path[idx];
1846
1899
  const next = cursor[key];
1847
- if (!isPlainObject(next)) cursor[key] = {};
1900
+ if (!isPlainObject$1(next)) cursor[key] = {};
1848
1901
  cursor = cursor[key];
1849
1902
  }
1850
1903
  cursor[path[path.length - 1]] = value;
@@ -1855,7 +1908,7 @@ function unsetConfigValueAtPath(root, path) {
1855
1908
  for (let idx = 0; idx < path.length - 1; idx += 1) {
1856
1909
  const key = path[idx];
1857
1910
  const next = cursor[key];
1858
- if (!isPlainObject(next)) return false;
1911
+ if (!isPlainObject$1(next)) return false;
1859
1912
  stack.push({
1860
1913
  node: cursor,
1861
1914
  key
@@ -1868,7 +1921,7 @@ function unsetConfigValueAtPath(root, path) {
1868
1921
  for (let idx = stack.length - 1; idx >= 0; idx -= 1) {
1869
1922
  const { node, key } = stack[idx];
1870
1923
  const child = node[key];
1871
- if (isPlainObject(child) && Object.keys(child).length === 0) delete node[key];
1924
+ if (isPlainObject$1(child) && Object.keys(child).length === 0) delete node[key];
1872
1925
  else break;
1873
1926
  }
1874
1927
  return true;
@@ -1876,7 +1929,7 @@ function unsetConfigValueAtPath(root, path) {
1876
1929
  function getConfigValueAtPath(root, path) {
1877
1930
  let cursor = root;
1878
1931
  for (const key of path) {
1879
- if (!isPlainObject(cursor)) return;
1932
+ if (!isPlainObject$1(cursor)) return;
1880
1933
  cursor = cursor[key];
1881
1934
  }
1882
1935
  return cursor;
@@ -1886,7 +1939,7 @@ function getConfigValueAtPath(root, path) {
1886
1939
  //#region src/config/runtime-overrides.ts
1887
1940
  let overrides = {};
1888
1941
  function mergeOverrides(base, override) {
1889
- if (!isPlainObject(base) || !isPlainObject(override)) return override;
1942
+ if (!isPlainObject$1(base) || !isPlainObject$1(override)) return override;
1890
1943
  const next = { ...base };
1891
1944
  for (const [key, value] of Object.entries(override)) {
1892
1945
  if (value === void 0) continue;
@@ -1979,6 +2032,46 @@ const normalizePluginsConfig = (config) => {
1979
2032
  entries: normalizePluginEntries(config?.entries)
1980
2033
  };
1981
2034
  };
2035
+ const hasExplicitMemorySlot = (plugins) => Boolean(plugins?.slots && Object.prototype.hasOwnProperty.call(plugins.slots, "memory"));
2036
+ const hasExplicitMemoryEntry = (plugins) => Boolean(plugins?.entries && Object.prototype.hasOwnProperty.call(plugins.entries, "memory-core"));
2037
+ const hasExplicitPluginConfig = (plugins) => {
2038
+ if (!plugins) return false;
2039
+ if (typeof plugins.enabled === "boolean") return true;
2040
+ if (Array.isArray(plugins.allow) && plugins.allow.length > 0) return true;
2041
+ if (Array.isArray(plugins.deny) && plugins.deny.length > 0) return true;
2042
+ if (plugins.load?.paths && Array.isArray(plugins.load.paths) && plugins.load.paths.length > 0) return true;
2043
+ if (plugins.slots && Object.keys(plugins.slots).length > 0) return true;
2044
+ if (plugins.entries && Object.keys(plugins.entries).length > 0) return true;
2045
+ return false;
2046
+ };
2047
+ function applyTestPluginDefaults(cfg, env = process.env) {
2048
+ if (!env.VITEST) return cfg;
2049
+ const plugins = cfg.plugins;
2050
+ if (hasExplicitPluginConfig(plugins)) {
2051
+ if (hasExplicitMemorySlot(plugins) || hasExplicitMemoryEntry(plugins)) return cfg;
2052
+ return {
2053
+ ...cfg,
2054
+ plugins: {
2055
+ ...plugins,
2056
+ slots: {
2057
+ ...plugins?.slots,
2058
+ memory: "none"
2059
+ }
2060
+ }
2061
+ };
2062
+ }
2063
+ return {
2064
+ ...cfg,
2065
+ plugins: {
2066
+ ...plugins,
2067
+ enabled: false,
2068
+ slots: {
2069
+ ...plugins?.slots,
2070
+ memory: "none"
2071
+ }
2072
+ }
2073
+ };
2074
+ }
1982
2075
  function resolveEnableState(id, origin, config) {
1983
2076
  if (!config.enabled) return {
1984
2077
  enabled: false,
@@ -2574,28 +2667,8 @@ function parseDurationMs(raw, opts) {
2574
2667
  }
2575
2668
 
2576
2669
  //#endregion
2577
- //#region src/infra/exec-safety.ts
2578
- const SHELL_METACHARS = /[;&|`$<>]/;
2579
- const CONTROL_CHARS = /[\r\n]/;
2580
- const QUOTE_CHARS = /["']/;
2581
- const BARE_NAME_PATTERN = /^[A-Za-z0-9._+-]+$/;
2582
- function isLikelyPath(value) {
2583
- if (value.startsWith(".") || value.startsWith("~")) return true;
2584
- if (value.includes("/") || value.includes("\\")) return true;
2585
- return /^[A-Za-z]:[\\/]/.test(value);
2586
- }
2587
- function isSafeExecutableValue(value) {
2588
- if (!value) return false;
2589
- const trimmed = value.trim();
2590
- if (!trimmed) return false;
2591
- if (trimmed.includes("\0")) return false;
2592
- if (CONTROL_CHARS.test(trimmed)) return false;
2593
- if (SHELL_METACHARS.test(trimmed)) return false;
2594
- if (QUOTE_CHARS.test(trimmed)) return false;
2595
- if (isLikelyPath(trimmed)) return true;
2596
- if (trimmed.startsWith("-")) return false;
2597
- return BARE_NAME_PATTERN.test(trimmed);
2598
- }
2670
+ //#region src/config/zod-schema.sensitive.ts
2671
+ const sensitive = z.registry();
2599
2672
 
2600
2673
  //#endregion
2601
2674
  //#region src/config/zod-schema.core.ts
@@ -2632,7 +2705,7 @@ const ModelDefinitionSchema = z.object({
2632
2705
  }).strict();
2633
2706
  const ModelProviderSchema = z.object({
2634
2707
  baseUrl: z.string().min(1),
2635
- apiKey: z.string().optional(),
2708
+ apiKey: z.string().optional().register(sensitive),
2636
2709
  auth: z.union([
2637
2710
  z.literal("api-key"),
2638
2711
  z.literal("aws-sdk"),
@@ -2747,7 +2820,7 @@ const TtsConfigSchema = z.object({
2747
2820
  allowSeed: z.boolean().optional()
2748
2821
  }).strict().optional(),
2749
2822
  elevenlabs: z.object({
2750
- apiKey: z.string().optional(),
2823
+ apiKey: z.string().optional().register(sensitive),
2751
2824
  baseUrl: z.string().optional(),
2752
2825
  voiceId: z.string().optional(),
2753
2826
  modelId: z.string().optional(),
@@ -2767,7 +2840,7 @@ const TtsConfigSchema = z.object({
2767
2840
  }).strict().optional()
2768
2841
  }).strict().optional(),
2769
2842
  openai: z.object({
2770
- apiKey: z.string().optional(),
2843
+ apiKey: z.string().optional().register(sensitive),
2771
2844
  model: z.string().optional(),
2772
2845
  voice: z.string().optional()
2773
2846
  }).strict().optional(),
@@ -2856,6 +2929,7 @@ const QueueModeBySurfaceSchema = z.object({
2856
2929
  whatsapp: QueueModeSchema.optional(),
2857
2930
  telegram: QueueModeSchema.optional(),
2858
2931
  discord: QueueModeSchema.optional(),
2932
+ irc: QueueModeSchema.optional(),
2859
2933
  slack: QueueModeSchema.optional(),
2860
2934
  mattermost: QueueModeSchema.optional(),
2861
2935
  signal: QueueModeSchema.optional(),
@@ -3115,17 +3189,17 @@ const ToolsWebSearchSchema = z.object({
3115
3189
  z.literal("perplexity"),
3116
3190
  z.literal("grok")
3117
3191
  ]).optional(),
3118
- apiKey: z.string().optional(),
3192
+ apiKey: z.string().optional().register(sensitive),
3119
3193
  maxResults: z.number().int().positive().optional(),
3120
3194
  timeoutSeconds: z.number().int().positive().optional(),
3121
3195
  cacheTtlMinutes: z.number().nonnegative().optional(),
3122
3196
  perplexity: z.object({
3123
- apiKey: z.string().optional(),
3197
+ apiKey: z.string().optional().register(sensitive),
3124
3198
  baseUrl: z.string().optional(),
3125
3199
  model: z.string().optional()
3126
3200
  }).strict().optional(),
3127
3201
  grok: z.object({
3128
- apiKey: z.string().optional(),
3202
+ apiKey: z.string().optional().register(sensitive),
3129
3203
  model: z.string().optional(),
3130
3204
  inlineCitations: z.boolean().optional()
3131
3205
  }).strict().optional()
@@ -3243,7 +3317,7 @@ const MemorySearchSchema = z.object({
3243
3317
  ]).optional(),
3244
3318
  remote: z.object({
3245
3319
  baseUrl: z.string().optional(),
3246
- apiKey: z.string().optional(),
3320
+ apiKey: z.string().optional().register(sensitive),
3247
3321
  headers: z.record(z.string(), z.string()).optional(),
3248
3322
  batch: z.object({
3249
3323
  enabled: z.boolean().optional(),
@@ -3552,7 +3626,8 @@ const BindingsSchema = z.array(z.object({
3552
3626
  id: z.string()
3553
3627
  }).strict().optional(),
3554
3628
  guildId: z.string().optional(),
3555
- teamId: z.string().optional()
3629
+ teamId: z.string().optional(),
3630
+ roles: z.array(z.string()).optional()
3556
3631
  }).strict()
3557
3632
  }).strict()).optional();
3558
3633
  const BroadcastStrategySchema = z.enum(["parallel", "sequential"]);
@@ -3591,7 +3666,8 @@ const HookMappingSchema = z.object({
3591
3666
  action: z.union([z.literal("wake"), z.literal("agent")]).optional(),
3592
3667
  wakeMode: z.union([z.literal("now"), z.literal("next-heartbeat")]).optional(),
3593
3668
  name: z.string().optional(),
3594
- sessionKey: z.string().optional(),
3669
+ agentId: z.string().optional(),
3670
+ sessionKey: z.string().optional().register(sensitive),
3595
3671
  messageTemplate: z.string().optional(),
3596
3672
  textTemplate: z.string().optional(),
3597
3673
  deliver: z.boolean().optional(),
@@ -3601,6 +3677,7 @@ const HookMappingSchema = z.object({
3601
3677
  z.literal("whatsapp"),
3602
3678
  z.literal("telegram"),
3603
3679
  z.literal("discord"),
3680
+ z.literal("irc"),
3604
3681
  z.literal("slack"),
3605
3682
  z.literal("signal"),
3606
3683
  z.literal("imessage"),
@@ -3623,7 +3700,7 @@ const InternalHookHandlerSchema = z.object({
3623
3700
  const HookConfigSchema = z.object({
3624
3701
  enabled: z.boolean().optional(),
3625
3702
  env: z.record(z.string(), z.string()).optional()
3626
- }).strict();
3703
+ }).passthrough();
3627
3704
  const HookInstallRecordSchema = z.object({
3628
3705
  source: z.union([
3629
3706
  z.literal("npm"),
@@ -3649,7 +3726,7 @@ const HooksGmailSchema = z.object({
3649
3726
  label: z.string().optional(),
3650
3727
  topic: z.string().optional(),
3651
3728
  subscription: z.string().optional(),
3652
- pushToken: z.string().optional(),
3729
+ pushToken: z.string().optional().register(sensitive),
3653
3730
  hookUrl: z.string().optional(),
3654
3731
  includeBody: z.boolean().optional(),
3655
3732
  maxBytes: z.number().int().positive().optional(),
@@ -3822,7 +3899,7 @@ const TelegramAccountSchemaBase = z.object({
3822
3899
  customCommands: z.array(TelegramCustomCommandSchema).optional(),
3823
3900
  configWrites: z.boolean().optional(),
3824
3901
  dmPolicy: DmPolicySchema.optional().default("pairing"),
3825
- botToken: z.string().optional(),
3902
+ botToken: z.string().optional().register(sensitive),
3826
3903
  tokenFile: z.string().optional(),
3827
3904
  replyToMode: ReplyToModeSchema.optional(),
3828
3905
  groups: z.record(z.string(), TelegramGroupSchema.optional()).optional(),
@@ -3848,8 +3925,9 @@ const TelegramAccountSchemaBase = z.object({
3848
3925
  network: z.object({ autoSelectFamily: z.boolean().optional() }).strict().optional(),
3849
3926
  proxy: z.string().optional(),
3850
3927
  webhookUrl: z.string().optional(),
3851
- webhookSecret: z.string().optional(),
3928
+ webhookSecret: z.string().optional().register(sensitive),
3852
3929
  webhookPath: z.string().optional(),
3930
+ webhookHost: z.string().optional(),
3853
3931
  actions: z.object({
3854
3932
  reactions: z.boolean().optional(),
3855
3933
  sendMessage: z.boolean().optional(),
@@ -3936,6 +4014,7 @@ const DiscordGuildChannelSchema = z.object({
3936
4014
  skills: z.array(z.string()).optional(),
3937
4015
  enabled: z.boolean().optional(),
3938
4016
  users: z.array(z.union([z.string(), z.number()])).optional(),
4017
+ roles: z.array(z.union([z.string(), z.number()])).optional(),
3939
4018
  systemPrompt: z.string().optional(),
3940
4019
  includeThreadStarter: z.boolean().optional(),
3941
4020
  autoThread: z.boolean().optional()
@@ -3952,6 +4031,7 @@ const DiscordGuildSchema = z.object({
3952
4031
  "allowlist"
3953
4032
  ]).optional(),
3954
4033
  users: z.array(z.union([z.string(), z.number()])).optional(),
4034
+ roles: z.array(z.union([z.string(), z.number()])).optional(),
3955
4035
  channels: z.record(z.string(), DiscordGuildChannelSchema.optional()).optional()
3956
4036
  }).strict();
3957
4037
  const DiscordAccountSchema = z.object({
@@ -3961,7 +4041,7 @@ const DiscordAccountSchema = z.object({
3961
4041
  enabled: z.boolean().optional(),
3962
4042
  commands: ProviderCommandsSchema,
3963
4043
  configWrites: z.boolean().optional(),
3964
- token: z.string().optional(),
4044
+ token: z.string().optional().register(sensitive),
3965
4045
  allowBots: z.boolean().optional(),
3966
4046
  groupPolicy: GroupPolicySchema.optional().default("allowlist"),
3967
4047
  historyLimit: z.number().int().min(0).optional(),
@@ -4012,7 +4092,7 @@ const DiscordAccountSchema = z.object({
4012
4092
  }).strict().optional(),
4013
4093
  pluralkit: z.object({
4014
4094
  enabled: z.boolean().optional(),
4015
- token: z.string().optional()
4095
+ token: z.string().optional().register(sensitive)
4016
4096
  }).strict().optional(),
4017
4097
  responsePrefix: z.string().optional()
4018
4098
  }).strict();
@@ -4105,7 +4185,8 @@ const SlackChannelSchema = z.object({
4105
4185
  }).strict();
4106
4186
  const SlackThreadSchema = z.object({
4107
4187
  historyScope: z.enum(["thread", "channel"]).optional(),
4108
- inheritParent: z.boolean().optional()
4188
+ inheritParent: z.boolean().optional(),
4189
+ initialHistoryLimit: z.number().int().min(0).optional()
4109
4190
  }).strict();
4110
4191
  const SlackReplyToModeByChatTypeSchema = z.object({
4111
4192
  direct: ReplyToModeSchema.optional(),
@@ -4115,16 +4196,16 @@ const SlackReplyToModeByChatTypeSchema = z.object({
4115
4196
  const SlackAccountSchema = z.object({
4116
4197
  name: z.string().optional(),
4117
4198
  mode: z.enum(["socket", "http"]).optional(),
4118
- signingSecret: z.string().optional(),
4199
+ signingSecret: z.string().optional().register(sensitive),
4119
4200
  webhookPath: z.string().optional(),
4120
4201
  capabilities: z.array(z.string()).optional(),
4121
4202
  markdown: MarkdownConfigSchema,
4122
4203
  enabled: z.boolean().optional(),
4123
4204
  commands: ProviderCommandsSchema,
4124
4205
  configWrites: z.boolean().optional(),
4125
- botToken: z.string().optional(),
4126
- appToken: z.string().optional(),
4127
- userToken: z.string().optional(),
4206
+ botToken: z.string().optional().register(sensitive),
4207
+ appToken: z.string().optional().register(sensitive),
4208
+ userToken: z.string().optional().register(sensitive),
4128
4209
  userTokenReadOnly: z.boolean().optional().default(true),
4129
4210
  allowBots: z.boolean().optional(),
4130
4211
  requireMention: z.boolean().optional(),
@@ -4170,7 +4251,7 @@ const SlackAccountSchema = z.object({
4170
4251
  }).strict();
4171
4252
  const SlackConfigSchema = SlackAccountSchema.extend({
4172
4253
  mode: z.enum(["socket", "http"]).optional().default("socket"),
4173
- signingSecret: z.string().optional(),
4254
+ signingSecret: z.string().optional().register(sensitive),
4174
4255
  webhookPath: z.string().optional().default("/slack/events"),
4175
4256
  accounts: z.record(z.string(), SlackAccountSchema.optional()).optional()
4176
4257
  }).superRefine((value, ctx) => {
@@ -4260,6 +4341,84 @@ const SignalConfigSchema = SignalAccountSchemaBase.extend({ accounts: z.record(z
4260
4341
  message: "channels.signal.dmPolicy=\"open\" requires channels.signal.allowFrom to include \"*\""
4261
4342
  });
4262
4343
  });
4344
+ const IrcGroupSchema = z.object({
4345
+ requireMention: z.boolean().optional(),
4346
+ tools: ToolPolicySchema,
4347
+ toolsBySender: ToolPolicyBySenderSchema$1,
4348
+ skills: z.array(z.string()).optional(),
4349
+ enabled: z.boolean().optional(),
4350
+ allowFrom: z.array(z.union([z.string(), z.number()])).optional(),
4351
+ systemPrompt: z.string().optional()
4352
+ }).strict();
4353
+ const IrcNickServSchema = z.object({
4354
+ enabled: z.boolean().optional(),
4355
+ service: z.string().optional(),
4356
+ password: z.string().optional().register(sensitive),
4357
+ passwordFile: z.string().optional(),
4358
+ register: z.boolean().optional(),
4359
+ registerEmail: z.string().optional()
4360
+ }).strict();
4361
+ const IrcAccountSchemaBase = z.object({
4362
+ name: z.string().optional(),
4363
+ capabilities: z.array(z.string()).optional(),
4364
+ markdown: MarkdownConfigSchema,
4365
+ enabled: z.boolean().optional(),
4366
+ configWrites: z.boolean().optional(),
4367
+ host: z.string().optional(),
4368
+ port: z.number().int().min(1).max(65535).optional(),
4369
+ tls: z.boolean().optional(),
4370
+ nick: z.string().optional(),
4371
+ username: z.string().optional(),
4372
+ realname: z.string().optional(),
4373
+ password: z.string().optional().register(sensitive),
4374
+ passwordFile: z.string().optional(),
4375
+ nickserv: IrcNickServSchema.optional(),
4376
+ channels: z.array(z.string()).optional(),
4377
+ dmPolicy: DmPolicySchema.optional().default("pairing"),
4378
+ allowFrom: z.array(z.union([z.string(), z.number()])).optional(),
4379
+ groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(),
4380
+ groupPolicy: GroupPolicySchema.optional().default("allowlist"),
4381
+ groups: z.record(z.string(), IrcGroupSchema.optional()).optional(),
4382
+ mentionPatterns: z.array(z.string()).optional(),
4383
+ historyLimit: z.number().int().min(0).optional(),
4384
+ dmHistoryLimit: z.number().int().min(0).optional(),
4385
+ dms: z.record(z.string(), DmConfigSchema.optional()).optional(),
4386
+ textChunkLimit: z.number().int().positive().optional(),
4387
+ chunkMode: z.enum(["length", "newline"]).optional(),
4388
+ blockStreaming: z.boolean().optional(),
4389
+ blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(),
4390
+ mediaMaxMb: z.number().positive().optional(),
4391
+ heartbeat: ChannelHeartbeatVisibilitySchema,
4392
+ responsePrefix: z.string().optional()
4393
+ }).strict();
4394
+ const IrcAccountSchema = IrcAccountSchemaBase.superRefine((value, ctx) => {
4395
+ requireOpenAllowFrom({
4396
+ policy: value.dmPolicy,
4397
+ allowFrom: value.allowFrom,
4398
+ ctx,
4399
+ path: ["allowFrom"],
4400
+ message: "channels.irc.dmPolicy=\"open\" requires channels.irc.allowFrom to include \"*\""
4401
+ });
4402
+ if (value.nickserv?.register && !value.nickserv.registerEmail?.trim()) ctx.addIssue({
4403
+ code: z.ZodIssueCode.custom,
4404
+ path: ["nickserv", "registerEmail"],
4405
+ message: "channels.irc.nickserv.register=true requires channels.irc.nickserv.registerEmail"
4406
+ });
4407
+ });
4408
+ const IrcConfigSchema = IrcAccountSchemaBase.extend({ accounts: z.record(z.string(), IrcAccountSchema.optional()).optional() }).superRefine((value, ctx) => {
4409
+ requireOpenAllowFrom({
4410
+ policy: value.dmPolicy,
4411
+ allowFrom: value.allowFrom,
4412
+ ctx,
4413
+ path: ["allowFrom"],
4414
+ message: "channels.irc.dmPolicy=\"open\" requires channels.irc.allowFrom to include \"*\""
4415
+ });
4416
+ if (value.nickserv?.register && !value.nickserv.registerEmail?.trim()) ctx.addIssue({
4417
+ code: z.ZodIssueCode.custom,
4418
+ path: ["nickserv", "registerEmail"],
4419
+ message: "channels.irc.nickserv.register=true requires channels.irc.nickserv.registerEmail"
4420
+ });
4421
+ });
4263
4422
  const IMessageAccountSchemaBase = z.object({
4264
4423
  name: z.string().optional(),
4265
4424
  capabilities: z.array(z.string()).optional(),
@@ -4340,7 +4499,7 @@ const BlueBubblesAccountSchemaBase = z.object({
4340
4499
  configWrites: z.boolean().optional(),
4341
4500
  enabled: z.boolean().optional(),
4342
4501
  serverUrl: z.string().optional(),
4343
- password: z.string().optional(),
4502
+ password: z.string().optional().register(sensitive),
4344
4503
  webhookPath: z.string().optional(),
4345
4504
  dmPolicy: DmPolicySchema.optional().default("pairing"),
4346
4505
  allowFrom: z.array(BlueBubblesAllowFromEntry).optional(),
@@ -4399,7 +4558,7 @@ const MSTeamsConfigSchema = z.object({
4399
4558
  markdown: MarkdownConfigSchema,
4400
4559
  configWrites: z.boolean().optional(),
4401
4560
  appId: z.string().optional(),
4402
- appPassword: z.string().optional(),
4561
+ appPassword: z.string().optional().register(sensitive),
4403
4562
  tenantId: z.string().optional(),
4404
4563
  webhook: z.object({
4405
4564
  port: z.number().int().positive().optional(),
@@ -4547,6 +4706,7 @@ const ChannelsSchema = z.object({
4547
4706
  whatsapp: WhatsAppConfigSchema.optional(),
4548
4707
  telegram: TelegramConfigSchema.optional(),
4549
4708
  discord: DiscordConfigSchema.optional(),
4709
+ irc: IrcConfigSchema.optional(),
4550
4710
  googlechat: GoogleChatConfigSchema.optional(),
4551
4711
  slack: SlackConfigSchema.optional(),
4552
4712
  signal: SignalConfigSchema.optional(),
@@ -4730,6 +4890,11 @@ const MemoryQmdLimitsSchema = z.object({
4730
4890
  }).strict();
4731
4891
  const MemoryQmdSchema = z.object({
4732
4892
  command: z.string().optional(),
4893
+ searchMode: z.union([
4894
+ z.literal("query"),
4895
+ z.literal("search"),
4896
+ z.literal("vsearch")
4897
+ ]).optional(),
4733
4898
  includeDefaultMemory: z.boolean().optional(),
4734
4899
  paths: z.array(MemoryQmdPathSchema).optional(),
4735
4900
  sessions: MemoryQmdSessionSchema.optional(),
@@ -4890,7 +5055,11 @@ const OpenClawSchema = z.object({
4890
5055
  hooks: z.object({
4891
5056
  enabled: z.boolean().optional(),
4892
5057
  path: z.string().optional(),
4893
- token: z.string().optional(),
5058
+ token: z.string().optional().register(sensitive),
5059
+ defaultSessionKey: z.string().optional(),
5060
+ allowRequestSessionKey: z.boolean().optional(),
5061
+ allowedSessionKeyPrefixes: z.array(z.string()).optional(),
5062
+ allowedAgentIds: z.array(z.string()).optional(),
4894
5063
  maxBodyBytes: z.number().int().positive().optional(),
4895
5064
  presets: z.array(z.string()).optional(),
4896
5065
  transformsDir: z.string().optional(),
@@ -4929,7 +5098,7 @@ const OpenClawSchema = z.object({
4929
5098
  voiceAliases: z.record(z.string(), z.string()).optional(),
4930
5099
  modelId: z.string().optional(),
4931
5100
  outputFormat: z.string().optional(),
4932
- apiKey: z.string().optional(),
5101
+ apiKey: z.string().optional().register(sensitive),
4933
5102
  interruptOnSpeech: z.boolean().optional()
4934
5103
  }).strict().optional(),
4935
5104
  gateway: z.object({
@@ -4952,11 +5121,15 @@ const OpenClawSchema = z.object({
4952
5121
  }).strict().optional(),
4953
5122
  auth: z.object({
4954
5123
  mode: z.union([z.literal("token"), z.literal("password")]).optional(),
4955
- token: z.string().optional(),
4956
- password: z.string().optional(),
5124
+ token: z.string().optional().register(sensitive),
5125
+ password: z.string().optional().register(sensitive),
4957
5126
  allowTailscale: z.boolean().optional()
4958
5127
  }).strict().optional(),
4959
5128
  trustedProxies: z.array(z.string()).optional(),
5129
+ tools: z.object({
5130
+ deny: z.array(z.string()).optional(),
5131
+ allow: z.array(z.string()).optional()
5132
+ }).strict().optional(),
4960
5133
  tailscale: z.object({
4961
5134
  mode: z.union([
4962
5135
  z.literal("off"),
@@ -4968,8 +5141,8 @@ const OpenClawSchema = z.object({
4968
5141
  remote: z.object({
4969
5142
  url: z.string().optional(),
4970
5143
  transport: z.union([z.literal("ssh"), z.literal("direct")]).optional(),
4971
- token: z.string().optional(),
4972
- password: z.string().optional(),
5144
+ token: z.string().optional().register(sensitive),
5145
+ password: z.string().optional().register(sensitive),
4973
5146
  tlsFingerprint: z.string().optional(),
4974
5147
  sshTarget: z.string().optional(),
4975
5148
  sshIdentity: z.string().optional()
@@ -4995,8 +5168,10 @@ const OpenClawSchema = z.object({
4995
5168
  responses: z.object({
4996
5169
  enabled: z.boolean().optional(),
4997
5170
  maxBodyBytes: z.number().int().positive().optional(),
5171
+ maxUrlParts: z.number().int().nonnegative().optional(),
4998
5172
  files: z.object({
4999
5173
  allowUrl: z.boolean().optional(),
5174
+ urlAllowlist: z.array(z.string()).optional(),
5000
5175
  allowedMimes: z.array(z.string()).optional(),
5001
5176
  maxBytes: z.number().int().positive().optional(),
5002
5177
  maxChars: z.number().int().positive().optional(),
@@ -5010,6 +5185,7 @@ const OpenClawSchema = z.object({
5010
5185
  }).strict().optional(),
5011
5186
  images: z.object({
5012
5187
  allowUrl: z.boolean().optional(),
5188
+ urlAllowlist: z.array(z.string()).optional(),
5013
5189
  allowedMimes: z.array(z.string()).optional(),
5014
5190
  maxBytes: z.number().int().positive().optional(),
5015
5191
  maxRedirects: z.number().int().nonnegative().optional(),
@@ -5049,7 +5225,7 @@ const OpenClawSchema = z.object({
5049
5225
  }).strict().optional(),
5050
5226
  entries: z.record(z.string(), z.object({
5051
5227
  enabled: z.boolean().optional(),
5052
- apiKey: z.string().optional(),
5228
+ apiKey: z.string().optional().register(sensitive),
5053
5229
  env: z.record(z.string(), z.string()).optional(),
5054
5230
  config: z.record(z.string(), z.unknown()).optional()
5055
5231
  }).strict()).optional()
@@ -5147,7 +5323,11 @@ function validateIdentityAvatar(config) {
5147
5323
  }
5148
5324
  return issues;
5149
5325
  }
5150
- function validateConfigObject(raw) {
5326
+ /**
5327
+ * Validates config without applying runtime defaults.
5328
+ * Use this when you need the raw validated config (e.g., for writing back to file).
5329
+ */
5330
+ function validateConfigObjectRaw(raw) {
5151
5331
  const legacyIssues = findLegacyConfigIssues(raw);
5152
5332
  if (legacyIssues.length > 0) return {
5153
5333
  ok: false,
@@ -5179,11 +5359,25 @@ function validateConfigObject(raw) {
5179
5359
  };
5180
5360
  return {
5181
5361
  ok: true,
5182
- config: applyModelDefaults(applyAgentDefaults(applySessionDefaults(validated.data)))
5362
+ config: validated.data
5363
+ };
5364
+ }
5365
+ function validateConfigObject(raw) {
5366
+ const result = validateConfigObjectRaw(raw);
5367
+ if (!result.ok) return result;
5368
+ return {
5369
+ ok: true,
5370
+ config: applyModelDefaults(applyAgentDefaults(applySessionDefaults(result.config)))
5183
5371
  };
5184
5372
  }
5185
5373
  function validateConfigObjectWithPlugins(raw) {
5186
- const base = validateConfigObject(raw);
5374
+ return validateConfigObjectWithPluginsBase(raw, { applyDefaults: true });
5375
+ }
5376
+ function validateConfigObjectRawWithPlugins(raw) {
5377
+ return validateConfigObjectWithPluginsBase(raw, { applyDefaults: false });
5378
+ }
5379
+ function validateConfigObjectWithPluginsBase(raw, opts) {
5380
+ const base = opts.applyDefaults ? validateConfigObject(raw) : validateConfigObjectRaw(raw);
5187
5381
  if (!base.ok) return {
5188
5382
  ok: false,
5189
5383
  issues: base.issues,
@@ -5395,6 +5589,38 @@ function coerceConfig(value) {
5395
5589
  if (!value || typeof value !== "object" || Array.isArray(value)) return {};
5396
5590
  return value;
5397
5591
  }
5592
+ function isPlainObject(value) {
5593
+ return typeof value === "object" && value !== null && !Array.isArray(value);
5594
+ }
5595
+ function cloneUnknown(value) {
5596
+ return structuredClone(value);
5597
+ }
5598
+ function createMergePatch(base, target) {
5599
+ if (!isPlainObject(base) || !isPlainObject(target)) return cloneUnknown(target);
5600
+ const patch = {};
5601
+ const keys = new Set([...Object.keys(base), ...Object.keys(target)]);
5602
+ for (const key of keys) {
5603
+ const hasBase = key in base;
5604
+ if (!(key in target)) {
5605
+ patch[key] = null;
5606
+ continue;
5607
+ }
5608
+ const targetValue = target[key];
5609
+ if (!hasBase) {
5610
+ patch[key] = cloneUnknown(targetValue);
5611
+ continue;
5612
+ }
5613
+ const baseValue = base[key];
5614
+ if (isPlainObject(baseValue) && isPlainObject(targetValue)) {
5615
+ const childPatch = createMergePatch(baseValue, targetValue);
5616
+ if (isPlainObject(childPatch) && Object.keys(childPatch).length === 0) continue;
5617
+ patch[key] = childPatch;
5618
+ continue;
5619
+ }
5620
+ if (!isDeepStrictEqual(baseValue, targetValue)) patch[key] = cloneUnknown(targetValue);
5621
+ }
5622
+ return patch;
5623
+ }
5398
5624
  async function rotateConfigBackups(configPath, ioFs) {
5399
5625
  if (CONFIG_BACKUP_COUNT <= 1) return;
5400
5626
  const backupBase = `${configPath}.bak`;
@@ -5548,6 +5774,7 @@ function createConfigIO(overrides = {}) {
5548
5774
  exists: false,
5549
5775
  raw: null,
5550
5776
  parsed: {},
5777
+ resolved: {},
5551
5778
  valid: true,
5552
5779
  config: applyTalkApiKey(applyModelDefaults(applyCompactionDefaults(applyContextPruningDefaults(applyAgentDefaults(applySessionDefaults(applyMessageDefaults({}))))))),
5553
5780
  hash,
@@ -5565,6 +5792,7 @@ function createConfigIO(overrides = {}) {
5565
5792
  exists: true,
5566
5793
  raw,
5567
5794
  parsed: {},
5795
+ resolved: {},
5568
5796
  valid: false,
5569
5797
  config: {},
5570
5798
  hash,
@@ -5588,6 +5816,7 @@ function createConfigIO(overrides = {}) {
5588
5816
  exists: true,
5589
5817
  raw,
5590
5818
  parsed: parsedRes.parsed,
5819
+ resolved: coerceConfig(parsedRes.parsed),
5591
5820
  valid: false,
5592
5821
  config: coerceConfig(parsedRes.parsed),
5593
5822
  hash,
@@ -5610,6 +5839,7 @@ function createConfigIO(overrides = {}) {
5610
5839
  exists: true,
5611
5840
  raw,
5612
5841
  parsed: parsedRes.parsed,
5842
+ resolved: coerceConfig(resolved),
5613
5843
  valid: false,
5614
5844
  config: coerceConfig(resolved),
5615
5845
  hash,
@@ -5629,6 +5859,7 @@ function createConfigIO(overrides = {}) {
5629
5859
  exists: true,
5630
5860
  raw,
5631
5861
  parsed: parsedRes.parsed,
5862
+ resolved: coerceConfig(resolvedConfigRaw),
5632
5863
  valid: false,
5633
5864
  config: coerceConfig(resolvedConfigRaw),
5634
5865
  hash,
@@ -5642,6 +5873,7 @@ function createConfigIO(overrides = {}) {
5642
5873
  exists: true,
5643
5874
  raw,
5644
5875
  parsed: parsedRes.parsed,
5876
+ resolved: coerceConfig(resolvedConfigRaw),
5645
5877
  valid: true,
5646
5878
  config: normalizeConfigPaths(applyTalkApiKey(applyModelDefaults(applyAgentDefaults(applySessionDefaults(applyLoggingDefaults(applyMessageDefaults(validated.config))))))),
5647
5879
  hash,
@@ -5655,6 +5887,7 @@ function createConfigIO(overrides = {}) {
5655
5887
  exists: true,
5656
5888
  raw: null,
5657
5889
  parsed: {},
5890
+ resolved: {},
5658
5891
  valid: false,
5659
5892
  config: {},
5660
5893
  hash: hashConfigRaw(null),
@@ -5669,7 +5902,13 @@ function createConfigIO(overrides = {}) {
5669
5902
  }
5670
5903
  async function writeConfigFile(cfg) {
5671
5904
  clearConfigCache();
5672
- const validated = validateConfigObjectWithPlugins(cfg);
5905
+ let persistCandidate = cfg;
5906
+ const snapshot = await readConfigFileSnapshot();
5907
+ if (snapshot.valid && snapshot.exists) {
5908
+ const patch = createMergePatch(snapshot.config, cfg);
5909
+ persistCandidate = applyMergePatch(snapshot.resolved, patch);
5910
+ }
5911
+ const validated = validateConfigObjectRawWithPlugins(persistCandidate);
5673
5912
  if (!validated.ok) {
5674
5913
  const issue = validated.issues[0];
5675
5914
  const pathLabel = issue?.path ? issue.path : "<root>";
@@ -5684,7 +5923,7 @@ function createConfigIO(overrides = {}) {
5684
5923
  recursive: true,
5685
5924
  mode: 448
5686
5925
  });
5687
- const json = JSON.stringify(applyModelDefaults(stampConfigVersion(cfg)), null, 2).trimEnd().concat("\n");
5926
+ const json = JSON.stringify(stampConfigVersion(validated.config), null, 2).trimEnd().concat("\n");
5688
5927
  const tmp = path.join(dir, `${path.basename(configPath)}.${process.pid}.${crypto.randomUUID()}.tmp`);
5689
5928
  await deps.fs.promises.writeFile(tmp, json, {
5690
5929
  encoding: "utf-8",
@@ -5760,4 +5999,4 @@ async function writeConfigFile(cfg) {
5760
5999
  }
5761
6000
 
5762
6001
  //#endregion
5763
- export { resolveWhatsAppAccount as A, unsetConfigOverride as C, unsetConfigValueAtPath as D, setConfigValueAtPath as E, readWebSelfId as F, resolveDefaultWebAuthDir as I, resolveWebCredsBackupPath as L, logWebSelfId as M, logoutWeb as N, resolveAgentMaxConcurrent as O, maybeRestoreCredsFromBackup as P, resolveWebCredsPath as R, setConfigOverride as S, parseConfigPath as T, normalizePluginsConfig as _, validateConfigObjectWithPlugins as a, getConfigOverrides as b, normalizeTelegramCommandName as c, parseDurationMs as d, validateJsonSchemaValue as f, MANIFEST_KEY as g, LEGACY_MANIFEST_KEYS as h, writeConfigFile as i, getWebAuthAgeMs as j, VERSION as k, resolveTelegramCustomCommands as l, discoverOpenClawPlugins as m, readConfigFileSnapshot as n, parseByteSize as o, loadPluginManifestRegistry as p, resolveConfigSnapshotHash as r, TELEGRAM_COMMAND_NAME_PATTERN as s, loadConfig as t, isSafeExecutableValue as u, resolveEnableState as v, getConfigValueAtPath as w, resetConfigOverrides as x, resolveMemorySlotDecision as y, webAuthExists as z };
6002
+ export { VERSION as A, webAuthExists as B, unsetConfigOverride as C, unsetConfigValueAtPath as D, setConfigValueAtPath as E, maybeRestoreCredsFromBackup as F, readWebSelfId as I, resolveDefaultWebAuthDir as L, getWebAuthAgeMs as M, logWebSelfId as N, isSafeExecutableValue as O, logoutWeb as P, resolveWebCredsBackupPath as R, setConfigOverride as S, parseConfigPath as T, normalizePluginsConfig as _, validateConfigObjectWithPlugins as a, getConfigOverrides as b, normalizeTelegramCommandName as c, validateJsonSchemaValue as d, loadPluginManifestRegistry as f, applyTestPluginDefaults as g, MANIFEST_KEY as h, writeConfigFile as i, resolveWhatsAppAccount as j, resolveAgentMaxConcurrent as k, resolveTelegramCustomCommands as l, LEGACY_MANIFEST_KEYS as m, readConfigFileSnapshot as n, parseByteSize as o, discoverOpenClawPlugins as p, resolveConfigSnapshotHash as r, TELEGRAM_COMMAND_NAME_PATTERN as s, loadConfig as t, parseDurationMs as u, resolveEnableState as v, getConfigValueAtPath as w, resetConfigOverrides as x, resolveMemorySlotDecision as y, resolveWebCredsPath as z };