remoteclaw 0.1.0-next.da482d8 → 0.1.0-next.db8a792

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 (1020) hide show
  1. package/dist/accounts-BZ2kR_Ij.js +47 -0
  2. package/dist/accounts-Bi4rFQG5.js +272 -0
  3. package/dist/accounts-Bpk-loA6.js +47 -0
  4. package/dist/accounts-D1CBpsaa.js +32 -0
  5. package/dist/accounts-DAdUdbPk.js +36 -0
  6. package/dist/accounts-WYyfAiie.js +270 -0
  7. package/dist/accounts-zQKMwnvt.js +36 -0
  8. package/dist/ack-reactions-B1l-vKPr.js +621 -0
  9. package/dist/ack-reactions-BnG0DLMu.js +621 -0
  10. package/dist/acp-cli-Btx71t69.js +1319 -0
  11. package/dist/acp-cli-DVQMjl0p.js +1324 -0
  12. package/dist/active-listener-BfN4RKlA.js +37 -0
  13. package/dist/active-listener-Bq7ckjOV.js +37 -0
  14. package/dist/agent-D2IwuL6g.js +688 -0
  15. package/dist/agent-WaE2mXI1.js +687 -0
  16. package/dist/agent-helpers-BcaiJFiG.js +400 -0
  17. package/dist/agent-scope-DVvX_nkQ.js +116 -0
  18. package/dist/agents-BwnT7jca.js +760 -0
  19. package/dist/agents.config-Dorm30BQ.js +116 -0
  20. package/dist/audio-B1lTyRqS.js +43 -0
  21. package/dist/audio-e0dFnrn8.js +43 -0
  22. package/dist/audit-DZvqycbG.js +3150 -0
  23. package/dist/audit-Mit73dYD.js +3150 -0
  24. package/dist/auth-C-XX0Tdt.js +314 -0
  25. package/dist/auth-D8--b01l.js +315 -0
  26. package/dist/auth-DJ7XEBDO.js +448 -0
  27. package/dist/auth-otyjXf9l.js +448 -0
  28. package/dist/banner-DSE-i7gH.js +294 -0
  29. package/dist/binaries-BSjilwX-.js +13 -0
  30. package/dist/bindings-DFTxQj8x.js +69 -0
  31. package/dist/bonjour-discovery-BnxTMHRd.js +378 -0
  32. package/dist/bonjour-discovery-CVJYHT3g.js +378 -0
  33. package/dist/boot/handler.js +28 -44
  34. package/dist/browser-cli-BR2pZWTC.js +1694 -0
  35. package/dist/browser-cli-I0kfR7FV.js +1690 -0
  36. package/dist/build-info.json +3 -3
  37. package/dist/call-Ck7ysmEl.js +517 -0
  38. package/dist/call-MN6mCJEB.js +518 -0
  39. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  40. package/dist/catalog-Bt9EM4sK.js +185 -0
  41. package/dist/catalog-BtUvWKd9.js +185 -0
  42. package/dist/channel-account-context-BLQq9NKz.js +133 -0
  43. package/dist/channel-account-context-CaCzVa76.js +133 -0
  44. package/dist/channel-activity-BatlvP_U.js +292 -0
  45. package/dist/channel-activity-DHVMMb2x.js +94 -0
  46. package/dist/channel-activity-DtRx3b0W.js +94 -0
  47. package/dist/channel-options-C6kT3nXB.js +32 -0
  48. package/dist/channel-options-CbgR_vsp.js +33 -0
  49. package/dist/channel-selection-CzbrpDPd.js +51 -0
  50. package/dist/channel-selection-Xv5UFxOx.js +51 -0
  51. package/dist/channel-web-DfDokU69.js +2134 -0
  52. package/dist/channel-web-DtvksSuY.js +2132 -0
  53. package/dist/channels-cli-BmdCVX6O.js +1435 -0
  54. package/dist/channels-cli-CrAZpaiN.js +1439 -0
  55. package/dist/channels-status-issues-B77y-TLr.js +18 -0
  56. package/dist/channels-status-issues-COECL8nx.js +18 -0
  57. package/dist/chrome-Cr5wmMk8.js +1733 -0
  58. package/dist/chrome-YBrnJN-g.js +1732 -0
  59. package/dist/chunk-CrfQ_O--.js +341 -0
  60. package/dist/chunk-DFBUmlXU.js +341 -0
  61. package/dist/clack-prompter-CFNKgQXx.js +122 -0
  62. package/dist/clack-prompter-DDlR2e34.js +121 -0
  63. package/dist/cli/daemon-cli.js +1 -1
  64. package/dist/cli-BbOinSy6.js +130 -0
  65. package/dist/cli-DuvHXQ5h.js +134 -0
  66. package/dist/client-BZeatr3g.js +2316 -0
  67. package/dist/client-Bc9JFAwL.js +2316 -0
  68. package/dist/clipboard-Com-8GBg.js +31 -0
  69. package/dist/clipboard-J_9AABIu.js +31 -0
  70. package/dist/command-format-CMAQa4dB.js +32 -0
  71. package/dist/command-format-KkslAzwV.js +18 -0
  72. package/dist/command-logger/handler.js +1 -1
  73. package/dist/command-registry-BJnVtHo0.js +215 -0
  74. package/dist/commands-ijxtne0J.js +41 -0
  75. package/dist/commands-kZtQfqDl.js +41 -0
  76. package/dist/commands-registry-BrBtH2_B.js +891 -0
  77. package/dist/commands-registry-xZoSouba.js +892 -0
  78. package/dist/common-6D7nhDP-.js +156 -0
  79. package/dist/common-B4cjsvqP.js +156 -0
  80. package/dist/completion-cli-CpUq9QC3.js +452 -0
  81. package/dist/completion-cli-De4umD_N.js +452 -0
  82. package/dist/config-C_WcTz_O.js +4231 -0
  83. package/dist/config-DfcqHTH-.js +4229 -0
  84. package/dist/config-cli-C7rq2n_m.js +243 -0
  85. package/dist/config-cli-VToCKln2.js +247 -0
  86. package/dist/config-guard-BlAcGEao.js +75 -0
  87. package/dist/config-guard-C-h_KIeI.js +99 -0
  88. package/dist/config-validation-C0YXR2dY.js +18 -0
  89. package/dist/config-validation-DDYBTmxT.js +18 -0
  90. package/dist/configure-Bkre1zEB.js +891 -0
  91. package/dist/configure-ifuEamRQ.js +889 -0
  92. package/dist/control-auth-DK6cIBzl.js +397 -0
  93. package/dist/control-auth-DQ8bfDMk.js +397 -0
  94. package/dist/control-ui-assets-DLEWfed6.js +186 -0
  95. package/dist/control-ui-assets-DVhkAyhv.js +186 -0
  96. package/dist/conversation-label-HuHoShPF.js +36 -0
  97. package/dist/conversation-label-L0QTtKji.js +36 -0
  98. package/dist/cron-cli-DnxnTi83.js +498 -0
  99. package/dist/cron-cli-yqcBkqZT.js +494 -0
  100. package/dist/daemon-cli-CmQYq8uO.js +735 -0
  101. package/dist/daemon-cli-_OIRoswC.js +737 -0
  102. package/dist/daemon-cli.js +34 -69
  103. package/dist/daemon-install-BEgffqDj.js +56 -0
  104. package/dist/daemon-install-DAorzotp.js +60 -0
  105. package/dist/daemon-install-helpers-B82uvJjJ.js +504 -0
  106. package/dist/daemon-install-helpers-BhL2Gh4l.js +504 -0
  107. package/dist/deliver-CCvDBk5c.js +481 -0
  108. package/dist/deliver-CqKw0wFi.js +481 -0
  109. package/dist/delivery-queue-CK7VnUJf.js +244 -0
  110. package/dist/delivery-queue-DMeQchpT.js +244 -0
  111. package/dist/devices-cli-C6UAfRV_.js +323 -0
  112. package/dist/devices-cli-Le-isdZB.js +319 -0
  113. package/dist/diagnostics-BhFwk6F3.js +35 -0
  114. package/dist/diagnostics-BtaQtaVR.js +35 -0
  115. package/dist/directory-cli-BqMfX5og.js +220 -0
  116. package/dist/directory-cli-DD72TTD4.js +224 -0
  117. package/dist/dispatcher-BLC2WYZv.js +173 -0
  118. package/dist/dispatcher-Cm2FAG_D.js +174 -0
  119. package/dist/dm-policy-shared-DOzpxMHC.js +22 -0
  120. package/dist/dm-policy-shared-DZY0f1bR.js +22 -0
  121. package/dist/dns-cli-BgsNg-bn.js +203 -0
  122. package/dist/dns-cli-CdMU5yuG.js +199 -0
  123. package/dist/dock-ByrYnLiz.js +929 -0
  124. package/dist/dock-CpNmmysM.js +928 -0
  125. package/dist/doctor-completion-BPeaRbmd.js +92 -0
  126. package/dist/doctor-completion-CfOyGJd3.js +92 -0
  127. package/dist/doctor-config-flow-DMyTycn7.js +1935 -0
  128. package/dist/doctor-config-flow-DoMu-pTm.js +1934 -0
  129. package/dist/enable-D5KetMo7.js +59 -0
  130. package/dist/entry.js +61 -1
  131. package/dist/env-BJ36dSrx.js +60 -0
  132. package/dist/errors-BfONuT95.js +35 -0
  133. package/dist/errors-_DSePI1C.js +35 -0
  134. package/dist/exec-DkFE7lqU.js +164 -0
  135. package/dist/exec-mY96dhIg.js +164 -0
  136. package/dist/extensionAPI.js +112 -76
  137. package/dist/fetch-B3EQXbTa.js +67 -0
  138. package/dist/fetch-BPeSHPvr.js +281 -0
  139. package/dist/fetch-BQ7HvRwe.js +67 -0
  140. package/dist/fetch-CbGTzJ8L.js +281 -0
  141. package/dist/fetch-CfIaWynF.js +67 -0
  142. package/dist/file-lock-BHfqppLm.js +107 -0
  143. package/dist/file-lock-CCBpdPM_.js +107 -0
  144. package/dist/fs-safe-BcEpbVjc.js +88 -0
  145. package/dist/fs-safe-S3Zvbabd.js +98 -0
  146. package/dist/gateway-cli-BXipRcsU.js +24602 -0
  147. package/dist/gateway-cli-Bv2K3rXx.js +24606 -0
  148. package/dist/gateway-rpc-BHnd7P1q.js +28 -0
  149. package/dist/gateway-rpc-COEQDswS.js +28 -0
  150. package/dist/gmail-setup-utils-BpdKFe3P.js +423 -0
  151. package/dist/gmail-setup-utils-CqbWr0Kq.js +422 -0
  152. package/dist/health-1ero5j64.js +1414 -0
  153. package/dist/health-ioP2au7j.js +1417 -0
  154. package/dist/heartbeat-visibility-C88L-_f2.js +125 -0
  155. package/dist/heartbeat-visibility-Dk_Q02qX.js +125 -0
  156. package/dist/hook-runner-global-BztoD8lu.js +527 -0
  157. package/dist/hooks-cli-B8D9DzRR.js +1226 -0
  158. package/dist/hooks-cli-rZ3GOXag.js +1222 -0
  159. package/dist/image-ops-Cx1ym2Hi.js +354 -0
  160. package/dist/image-ops-DWytvdh_.js +354 -0
  161. package/dist/import-CTUBsy7D.js +604 -0
  162. package/dist/import-cBp4f62k.js +606 -0
  163. package/dist/inbound-context-COwswi8z.js +68 -0
  164. package/dist/inbound-context-ChcNR30g.js +68 -0
  165. package/dist/index.js +127 -102
  166. package/dist/inspect-BsS3_z-x.js +286 -0
  167. package/dist/inspect-drfsUSIW.js +286 -0
  168. package/dist/installs-BFmmM5Zd.js +325 -0
  169. package/dist/installs-DA7SG0Tx.js +325 -0
  170. package/dist/ipv4-BZGSwnH4.js +46 -0
  171. package/dist/ipv4-DsOgHE0B.js +46 -0
  172. package/dist/ir-R3Pk8Cv8.js +972 -0
  173. package/dist/lifecycle-core-BZMeOT7u.js +474 -0
  174. package/dist/lifecycle-core-C6-_Gts0.js +476 -0
  175. package/dist/loader-CJ2UHqV7.js +22414 -0
  176. package/dist/loader-dEFvmwXu.js +22411 -0
  177. package/dist/logger-9I2fg5mr.js +49 -0
  178. package/dist/login-D9uJTyEv.js +62 -0
  179. package/dist/login-DTh702_w.js +61 -0
  180. package/dist/login-qr-BKsmW6XI.js +325 -0
  181. package/dist/login-qr-SOXdIR58.js +329 -0
  182. package/dist/logs-cli-BshJBHZQ.js +236 -0
  183. package/dist/logs-cli-Ckh-BBTT.js +240 -0
  184. package/dist/markdown-tables-Cfz7zDXI.js +29 -0
  185. package/dist/markdown-tables-DeFSK6aY.js +29 -0
  186. package/dist/media-BD2cZGXT.js +971 -0
  187. package/dist/media-CjvpnJmQ.js +10388 -0
  188. package/dist/message-action-names-CZHrHMRE.js +2520 -0
  189. package/dist/message-action-names-CiZ-0Smk.js +2520 -0
  190. package/dist/message-channel-EMCYRaxk.js +91 -0
  191. package/dist/mime-1E7nn9IU.js +146 -0
  192. package/dist/mime-mSgQeDnC.js +146 -0
  193. package/dist/net-Cg8AQeke.js +225 -0
  194. package/dist/net-DMh1m8AZ.js +225 -0
  195. package/dist/node-cli-BJ5CCbqx.js +1462 -0
  196. package/dist/node-cli-wYYhAs8x.js +1458 -0
  197. package/dist/node-service-CkwVlcey.js +67 -0
  198. package/dist/node-service-DTVW9YJh.js +67 -0
  199. package/dist/nodes-cli-CMFYLD1o.js +1346 -0
  200. package/dist/nodes-cli-DC2zUx3f.js +1350 -0
  201. package/dist/nodes-screen-6pXv1lYa.js +250 -0
  202. package/dist/nodes-screen-CTIZKksn.js +250 -0
  203. package/dist/note-CMELkPJN.js +92 -0
  204. package/dist/npm-registry-spec-BiJI7Rkr.js +786 -0
  205. package/dist/npm-registry-spec-Dza35Ig4.js +786 -0
  206. package/dist/npm-resolution-CUQGDty4.js +86 -0
  207. package/dist/npm-resolution-CwbZK9AI.js +86 -0
  208. package/dist/onboard-8Qd9lU8x.js +649 -0
  209. package/dist/onboard-Q3cY65m8.js +647 -0
  210. package/dist/onboard-auth-BUzYDEqf.js +211 -0
  211. package/dist/onboard-auth-DcVXyd-Z.js +207 -0
  212. package/dist/onboard-channels-BFHuA-AU.js +2548 -0
  213. package/dist/onboard-channels-DVrPP_ie.js +2547 -0
  214. package/dist/onboard-helpers-B-bBSsyR.js +363 -0
  215. package/dist/onboard-helpers-YsCa-sAt.js +364 -0
  216. package/dist/onboard-remote-BWFcuEOD.js +127 -0
  217. package/dist/onboard-remote-C0THuDTK.js +127 -0
  218. package/dist/onboarding-B31lnOPp.js +586 -0
  219. package/dist/onboarding-DmN_qC8e.js +588 -0
  220. package/dist/onboarding.finalize-DGD0PA-D.js +402 -0
  221. package/dist/onboarding.finalize-DNIb3meE.js +404 -0
  222. package/dist/onboarding.gateway-config-BaeIuA62.js +195 -0
  223. package/dist/onboarding.gateway-config-DMV2Odzr.js +201 -0
  224. package/dist/outbound-BdxBHDax.js +220 -0
  225. package/dist/outbound-D-Y9rMgB.js +221 -0
  226. package/dist/outbound-attachment-CvZ04r5k.js +18 -0
  227. package/dist/outbound-attachment-DYa1asB5.js +18 -0
  228. package/dist/outbound-attachment-DgUpk7Uh.js +18 -0
  229. package/dist/pairing-cli-BxTv78V7.js +125 -0
  230. package/dist/pairing-cli-CxUCzNUc.js +129 -0
  231. package/dist/pairing-labels-DVO6NJr0.js +9 -0
  232. package/dist/pairing-labels-D_pD8Cag.js +9 -0
  233. package/dist/pairing-store-Bu9pVlkO.js +459 -0
  234. package/dist/pairing-store-CWaGbAGi.js +460 -0
  235. package/dist/path-env-RsuO6yO-.js +89 -0
  236. package/dist/path-env-_my-d_iR.js +89 -0
  237. package/dist/path-safety-CfiVyVz7.js +14 -0
  238. package/dist/path-safety-D-wLK4pV.js +14 -0
  239. package/dist/plugin-auto-enable-CW01H36W.js +301 -0
  240. package/dist/plugin-auto-enable-CeHhBLCU.js +302 -0
  241. package/dist/plugin-registry-CWL37HnB.js +33 -0
  242. package/dist/plugin-registry-ELliiumZ.js +33 -0
  243. package/dist/plugin-sdk/auth/provider-auth.d.ts +0 -6
  244. package/dist/plugin-sdk/auto-reply/reply/agent-runner-utils.d.ts +9 -29
  245. package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +0 -2
  246. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/shared.d.ts +1 -1
  247. package/dist/plugin-sdk/auto-reply/reply/queue/types.d.ts +0 -2
  248. package/dist/plugin-sdk/auto-reply/status.d.ts +0 -4
  249. package/dist/plugin-sdk/auto-reply/templating.d.ts +0 -4
  250. package/dist/plugin-sdk/config/sessions/types.d.ts +0 -2
  251. package/dist/plugin-sdk/config/types.tools.d.ts +1 -59
  252. package/dist/plugin-sdk/config/types.tts.d.ts +2 -1
  253. package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +0 -177
  254. package/dist/plugin-sdk/config/zod-schema.core.d.ts +2 -230
  255. package/dist/plugin-sdk/config/zod-schema.d.ts +3 -192
  256. package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +3 -15
  257. package/dist/plugin-sdk/config/zod-schema.providers.d.ts +2 -10
  258. package/dist/plugin-sdk/config/zod-schema.session.d.ts +1 -5
  259. package/dist/plugin-sdk/gateway/protocol/index.d.ts +5 -5
  260. package/dist/plugin-sdk/index.js +72 -142
  261. package/dist/plugin-sdk/middleware/cli-runtime-base.d.ts +6 -0
  262. package/dist/plugin-sdk/middleware/runtimes/claude.d.ts +6 -0
  263. package/dist/plugin-sdk/middleware/runtimes/codex.d.ts +2 -2
  264. package/dist/plugin-sdk/plugin-sdk/index.d.ts +2 -0
  265. package/dist/plugin-sdk/plugins/manifest-registry.d.ts +2 -0
  266. package/dist/plugin-sdk/plugins/manifest.d.ts +2 -0
  267. package/dist/plugin-sdk/plugins/registry.d.ts +18 -0
  268. package/dist/plugin-sdk/plugins/types.d.ts +4 -0
  269. package/dist/plugin-sdk/stt/preflight.d.ts +2 -4
  270. package/dist/plugin-sdk/stt/providers/index.d.ts +1 -1
  271. package/dist/plugin-sdk/stt/providers/shared.d.ts +20 -1
  272. package/dist/plugin-sdk/tts/providers/edge.d.ts +2 -0
  273. package/dist/plugin-sdk/tts/providers/elevenlabs.d.ts +2 -0
  274. package/dist/plugin-sdk/tts/providers/index.d.ts +4 -0
  275. package/dist/plugin-sdk/tts/providers/openai.d.ts +2 -0
  276. package/dist/plugin-sdk/tts/tts.d.ts +13 -5
  277. package/dist/plugin-sdk/tts/types.d.ts +21 -0
  278. package/dist/plugins-DExsdlTp.js +455 -0
  279. package/dist/plugins-DdMgSc_b.js +453 -0
  280. package/dist/plugins-cli-DqBWiT_G.js +806 -0
  281. package/dist/plugins-cli-KQEzhU6P.js +802 -0
  282. package/dist/ports-CL0pXAXO.js +96 -0
  283. package/dist/ports-CRI-HSZx.js +370 -0
  284. package/dist/ports-DiQFcKUB.js +316 -0
  285. package/dist/ports-HRurfPIr.js +96 -0
  286. package/dist/preflight-6QRqxWh7.js +667 -0
  287. package/dist/preflight-DDZjr5KD.js +667 -0
  288. package/dist/program-DmhbOJj3.js +249 -0
  289. package/dist/program-context-PPMzZ6Gu.js +474 -0
  290. package/dist/prompt-select-styled-CmSWunD8.js +1669 -0
  291. package/dist/prompt-select-styled-PfxT9zl9.js +1672 -0
  292. package/dist/provider-auth-CfdnLqh3.js +187 -0
  293. package/dist/provider-auth-gpHOMUBP.js +187 -0
  294. package/dist/provider-dispatcher-D4eY8LZW.js +659 -0
  295. package/dist/provider-dispatcher-D5Q7M15D.js +660 -0
  296. package/dist/push-apns-BNwVMXX9.js +713 -0
  297. package/dist/push-apns-BszVkcZK.js +711 -0
  298. package/dist/pw-ai-Bdb3zrBM.js +1911 -0
  299. package/dist/pw-ai-BvcvEdGs.js +1908 -0
  300. package/dist/qr-cli-BBgk2ci1.js +349 -0
  301. package/dist/qr-cli-BLzVrhia.js +353 -0
  302. package/dist/redact-snapshot-CyBDcb_a.js +1966 -0
  303. package/dist/redact-snapshot-D9oPMqA-.js +1966 -0
  304. package/dist/register.agent-CAhKX3Ft.js +1019 -0
  305. package/dist/register.agent-RKHXtLLm.js +291 -0
  306. package/dist/register.configure-CW6XRGxV.js +129 -0
  307. package/dist/register.configure-dvrKc0j7.js +134 -0
  308. package/dist/register.import-CRLOolHv.js +31 -0
  309. package/dist/register.import-dhDEj7Om.js +29 -0
  310. package/dist/register.maintenance-EAhr1tJ9.js +500 -0
  311. package/dist/register.maintenance-lWz4v90u.js +502 -0
  312. package/dist/register.message-DyWkwUIU.js +690 -0
  313. package/dist/register.message-bl2Khz6c.js +686 -0
  314. package/dist/register.onboard-BAozmeei.js +97 -0
  315. package/dist/register.onboard-Da9hWQR1.js +93 -0
  316. package/dist/register.setup-DVrQWLoF.js +117 -0
  317. package/dist/register.setup-DbiLuuqg.js +113 -0
  318. package/dist/register.status-health-sessions-CA8ApUkH.js +668 -0
  319. package/dist/register.status-health-sessions-lGszs-NJ.js +428 -0
  320. package/dist/register.subclis-C-lqMygb.js +267 -0
  321. package/dist/replies-BTC1z8j0.js +136 -0
  322. package/dist/replies-BhlnuFp0.js +136 -0
  323. package/dist/reply-DZMooMoq.js +12880 -0
  324. package/dist/reply-directives-C0-hYyAt.js +182 -0
  325. package/dist/reply-directives-C_CGXLBJ.js +182 -0
  326. package/dist/reply-payloads-BospFSPI.js +527 -0
  327. package/dist/reply-prefix-DDgh77yy.js +37 -0
  328. package/dist/reply-prefix-DwKZPZyG.js +37 -0
  329. package/dist/reply-yGEQ0UW4.js +12877 -0
  330. package/dist/resolve-route-B73QhBIl.js +249 -0
  331. package/dist/resolve-route-DckdRbW8.js +249 -0
  332. package/dist/response-prefix-template-x5RBQnEy.js +134 -0
  333. package/dist/retry-CDrH81GP.js +77 -0
  334. package/dist/run-main-D869n5qf.js +307 -0
  335. package/dist/secure-random-CxzxAnMS.js +44 -0
  336. package/dist/security-cli-CfqosyUf.js +487 -0
  337. package/dist/security-cli-DMZun6gO.js +482 -0
  338. package/dist/send-3wvngctD.js +547 -0
  339. package/dist/send-AY7Fs5ky.js +374 -0
  340. package/dist/send-BSWD4Kr_.js +2245 -0
  341. package/dist/send-BT4HhTLm.js +349 -0
  342. package/dist/send-BvuxToC8.js +2245 -0
  343. package/dist/send-CaUxFvu0.js +492 -0
  344. package/dist/send-CiBRE4OY.js +1178 -0
  345. package/dist/send-Cidd4lQn.js +11 -0
  346. package/dist/send-Cq_Db9wG.js +1779 -0
  347. package/dist/send-DBFcxDPm.js +1776 -0
  348. package/dist/send-DUha0nIz.js +492 -0
  349. package/dist/send-DgYBI05s.js +332 -0
  350. package/dist/send-Dnf5bISH.js +426 -0
  351. package/dist/send-NcQk6UH1.js +547 -0
  352. package/dist/send-Og0-IMee.js +29 -0
  353. package/dist/send-oCN80Pl2.js +349 -0
  354. package/dist/server-DoGGLeP3.js +202 -0
  355. package/dist/server-V7G9FG2A.js +206 -0
  356. package/dist/server-lifecycle-CSWpSlvn.js +2437 -0
  357. package/dist/server-lifecycle-Cal8hBP1.js +2437 -0
  358. package/dist/server-node-events-DSee6jSG.js +394 -0
  359. package/dist/server-node-events-DbQWkU3M.js +390 -0
  360. package/dist/service-Duw0xMJX.js +670 -0
  361. package/dist/service-SRcnA1Am.js +670 -0
  362. package/dist/session-BLcfWX5_.js +170 -0
  363. package/dist/session-CQwkaAs-.js +170 -0
  364. package/dist/session-cost-usage-C-UcrvL4.js +627 -0
  365. package/dist/session-cost-usage-Dg3dzS0E.js +627 -0
  366. package/dist/session-dirs-D6mFEF90.js +318 -0
  367. package/dist/session-dirs-DVsG6e7L.js +318 -0
  368. package/dist/session-utils-C6522g3D.js +622 -0
  369. package/dist/session-utils-Dq2BJyVy.js +622 -0
  370. package/dist/sessions-CNkj4Eq8.js +247 -0
  371. package/dist/sessions-DDIoP7Rl.js +2569 -0
  372. package/dist/shell-env-D8nXPDbP.js +163 -0
  373. package/dist/ssrf-7I3FUHpm.js +183 -0
  374. package/dist/ssrf-DZi4qw5c.js +183 -0
  375. package/dist/status-CrAe8ZYt.js +1983 -0
  376. package/dist/status-DetRJxvZ.js +1979 -0
  377. package/dist/status.update-DquSK3p7.js +449 -0
  378. package/dist/status.update-iABAY3iW.js +449 -0
  379. package/dist/store-Bnm6zwaq.js +2571 -0
  380. package/dist/store-CVkGKjWm.js +64 -0
  381. package/dist/store-D_gpBpAW.js +64 -0
  382. package/dist/store-mxh63FBa.js +53 -0
  383. package/dist/subagent-registry-DNAz7Heu.js +4856 -0
  384. package/dist/subagent-registry-Dhz6HC4Z.js +4854 -0
  385. package/dist/subsystem-DGSHVL8I.js +1081 -0
  386. package/dist/subsystem-m7RSGQoR.js +1196 -0
  387. package/dist/system-cli-ByVDF6p8.js +77 -0
  388. package/dist/system-cli-CERb89Bl.js +73 -0
  389. package/dist/systemd-CSUtfsJx.js +547 -0
  390. package/dist/systemd-hints-BCxkQemJ.js +278 -0
  391. package/dist/systemd-hints-ef7m-7ZH.js +278 -0
  392. package/dist/systemd-linger-CWLgT0Wr.js +75 -0
  393. package/dist/systemd-linger-DT0E7YET.js +75 -0
  394. package/dist/systemd-tS61V4ao.js +547 -0
  395. package/dist/tables-DED01JNI.js +55 -0
  396. package/dist/tables-K3rOiGaJ.js +55 -0
  397. package/dist/tables-NcsXz3r_.js +55 -0
  398. package/dist/tailnet-CEudzG0i.js +40 -0
  399. package/dist/tailnet-D66Y5zC7.js +40 -0
  400. package/dist/tailscale-DjSRjPA-.js +230 -0
  401. package/dist/tailscale-DngZHD9L.js +230 -0
  402. package/dist/targets-BOpYPsGM.js +2545 -0
  403. package/dist/targets-BVsxzQh1.js +220 -0
  404. package/dist/targets-C99szk_e.js +114 -0
  405. package/dist/targets-CA4zx5G4.js +650 -0
  406. package/dist/targets-CTNm3bJ8.js +2544 -0
  407. package/dist/targets-DpmQjetK.js +53 -0
  408. package/dist/targets-Q-YGeAqu.js +650 -0
  409. package/dist/targets-rdWlC6Y-.js +53 -0
  410. package/dist/tool-display-Br6mwaJc.js +785 -0
  411. package/dist/tool-display-CLBf5cRa.js +785 -0
  412. package/dist/tool-images-DB4f57XK.js +263 -0
  413. package/dist/tool-images-kloBqxqK.js +263 -0
  414. package/dist/trash-B32LfX0l.js +125 -0
  415. package/dist/trash-SlUJxKO7.js +125 -0
  416. package/dist/tui-CHOtFK6k.js +3282 -0
  417. package/dist/tui-D4yiSpop.js +3282 -0
  418. package/dist/tui-cli-CzrjmAMZ.js +66 -0
  419. package/dist/tui-cli-Dpbs2QW_.js +62 -0
  420. package/dist/update-B5nYVxpc.js +349 -0
  421. package/dist/update-Bs3HhSnE.js +349 -0
  422. package/dist/update-cli-D_yz9Kyz.js +1147 -0
  423. package/dist/update-cli-DdfwNAsA.js +1149 -0
  424. package/dist/usage-BVyabt5E.js +5421 -0
  425. package/dist/voice-credentials-CI4VgB6u.js +46 -0
  426. package/dist/voice-credentials-l_d_gZiG.js +46 -0
  427. package/dist/web-B5xSAAH2.js +74 -0
  428. package/dist/web-Cc4tDVO9.js +3067 -0
  429. package/dist/web-Cdp9_IUk.js +79 -0
  430. package/dist/webhooks-cli-BDPcBkZL.js +330 -0
  431. package/dist/webhooks-cli-sRfsNesg.js +334 -0
  432. package/dist/whatsapp-actions-BGZXdWiP.js +125 -0
  433. package/dist/whatsapp-actions-HdmZu8oU.js +130 -0
  434. package/dist/workspace-D5LAl41l.js +449 -0
  435. package/dist/workspace-DRYGbrDM.js +447 -0
  436. package/dist/zod-schema-C8gEV0uz.js +2739 -0
  437. package/dist/zod-schema-CCUbW_Si.js +2739 -0
  438. package/package.json +1 -1
  439. package/dist/accounts-Aqbb2_Fn.js +0 -270
  440. package/dist/accounts-Bo2bX8jP.js +0 -272
  441. package/dist/accounts-D3fAPVzU.js +0 -36
  442. package/dist/accounts-DUEDngp6.js +0 -32
  443. package/dist/accounts-DZmv4bXS.js +0 -47
  444. package/dist/accounts-DmB4SVPK.js +0 -47
  445. package/dist/accounts-DtkyfvwR.js +0 -36
  446. package/dist/ack-reactions-Bvfy17SM.js +0 -446
  447. package/dist/ack-reactions-DYU8uhcz.js +0 -446
  448. package/dist/acp-cli-DVXhDMc6.js +0 -1324
  449. package/dist/acp-cli-QBL4_qcW.js +0 -1319
  450. package/dist/active-listener-CwxZ24bZ.js +0 -37
  451. package/dist/active-listener-v2sItamh.js +0 -37
  452. package/dist/agent-BisC5WZ6.js +0 -704
  453. package/dist/agent-Bqdrc0AK.js +0 -703
  454. package/dist/agent-helpers-BSGqeJr-.js +0 -400
  455. package/dist/agent-scope-_ND_-bJy.js +0 -116
  456. package/dist/agents-khSbraAA.js +0 -760
  457. package/dist/agents.config-D8gLHPWo.js +0 -116
  458. package/dist/audio-BIvUsncf.js +0 -43
  459. package/dist/audio-CQ8TfmVN.js +0 -43
  460. package/dist/audit-C0x7Cm6K.js +0 -3150
  461. package/dist/audit-CAY-uzWP.js +0 -3150
  462. package/dist/auth-DGqCLaQq.js +0 -448
  463. package/dist/auth-DLTRySEi.js +0 -314
  464. package/dist/auth-Drf91ntw.js +0 -315
  465. package/dist/auth-ku2khJyQ.js +0 -448
  466. package/dist/banner-txHC40UW.js +0 -294
  467. package/dist/binaries-BTvHIrCr.js +0 -13
  468. package/dist/bindings-DsWJQVKh.js +0 -69
  469. package/dist/bonjour-discovery-BElR62fH.js +0 -378
  470. package/dist/bonjour-discovery-C8XyVsjb.js +0 -378
  471. package/dist/browser-cli-DxJew43l.js +0 -1694
  472. package/dist/browser-cli-p0nakrjO.js +0 -1690
  473. package/dist/call-BrTmlOx3.js +0 -518
  474. package/dist/call-ChdUdwb4.js +0 -517
  475. package/dist/catalog-DTlcfTT9.js +0 -185
  476. package/dist/catalog-PixZqhZK.js +0 -185
  477. package/dist/channel-account-context-BO245Tcn.js +0 -133
  478. package/dist/channel-account-context-BgK0hm-I.js +0 -133
  479. package/dist/channel-activity-B0qlUR5e.js +0 -292
  480. package/dist/channel-activity-C-L6rDrQ.js +0 -94
  481. package/dist/channel-activity-DdgLBZ7M.js +0 -94
  482. package/dist/channel-options-CjlvAHSH.js +0 -32
  483. package/dist/channel-options-DpjP7qQf.js +0 -33
  484. package/dist/channel-selection-DW21dXB1.js +0 -51
  485. package/dist/channel-selection-wK_6S2Ku.js +0 -51
  486. package/dist/channel-web-COTkzJBt.js +0 -2136
  487. package/dist/channel-web-DUz5bn9h.js +0 -2134
  488. package/dist/channels-cli-D8RS8g2Q.js +0 -1438
  489. package/dist/channels-cli-X_8rENR6.js +0 -1434
  490. package/dist/channels-status-issues-B6I2l7Sm.js +0 -18
  491. package/dist/channels-status-issues-DhDH2fWp.js +0 -18
  492. package/dist/chrome-Dqtq7zCc.js +0 -1733
  493. package/dist/chrome-XeSY99Z_.js +0 -1732
  494. package/dist/chunk-CWD_zrz_.js +0 -341
  495. package/dist/chunk-LUabyS9k.js +0 -341
  496. package/dist/clack-prompter-fAgbvPW4.js +0 -122
  497. package/dist/clack-prompter-kf9qTN5p.js +0 -121
  498. package/dist/cli-BjPLpuZR.js +0 -133
  499. package/dist/cli-fFyOTtkD.js +0 -129
  500. package/dist/client-B9u3JdT_.js +0 -2316
  501. package/dist/client-DEEOhx0w.js +0 -2316
  502. package/dist/clipboard-B2nstLx7.js +0 -31
  503. package/dist/clipboard-C8QI9fes.js +0 -31
  504. package/dist/command-format-D0vKipG9.js +0 -32
  505. package/dist/command-format-LFmgWzKJ.js +0 -18
  506. package/dist/command-registry-BsPaMI53.js +0 -215
  507. package/dist/commands-BAYwlS3d.js +0 -41
  508. package/dist/commands-D842kCjj.js +0 -41
  509. package/dist/commands-registry-Cg2GTT2J.js +0 -892
  510. package/dist/commands-registry-Yz-uV5oG.js +0 -891
  511. package/dist/common-B67cBSew.js +0 -156
  512. package/dist/common-DEoiTqOr.js +0 -156
  513. package/dist/completion-cli-BO5mIPLa.js +0 -452
  514. package/dist/completion-cli-z9a6MVgr.js +0 -452
  515. package/dist/config-CAa0rZSx.js +0 -4225
  516. package/dist/config-W0w-gi2j.js +0 -4223
  517. package/dist/config-cli-DdRue35G.js +0 -243
  518. package/dist/config-cli-uOwxu5AC.js +0 -247
  519. package/dist/config-guard-BI85dxHR.js +0 -99
  520. package/dist/config-guard-DQqnigKh.js +0 -75
  521. package/dist/config-validation-D-h4LHyA.js +0 -18
  522. package/dist/config-validation-Df_kroIQ.js +0 -18
  523. package/dist/configure-B7ChPbXv.js +0 -891
  524. package/dist/configure-QspkIXME.js +0 -889
  525. package/dist/control-auth-BrBr2xb8.js +0 -397
  526. package/dist/control-auth-CehjYKnL.js +0 -397
  527. package/dist/control-ui-assets-D8F383Mo.js +0 -186
  528. package/dist/control-ui-assets-DYKtRIm0.js +0 -186
  529. package/dist/conversation-label-Bn5j3lUT.js +0 -36
  530. package/dist/conversation-label-CDH4rKMG.js +0 -36
  531. package/dist/cron-cli-DVzDHzAX.js +0 -494
  532. package/dist/cron-cli-gkH2qKM4.js +0 -498
  533. package/dist/daemon-cli-BTdNO1vH.js +0 -737
  534. package/dist/daemon-cli-DNNqI2LD.js +0 -735
  535. package/dist/daemon-install-CaEHG92p.js +0 -56
  536. package/dist/daemon-install-DbpDSDfW.js +0 -60
  537. package/dist/daemon-install-helpers-DjE_WnlY.js +0 -504
  538. package/dist/daemon-install-helpers-DocTUxqQ.js +0 -504
  539. package/dist/deliver-CDcL8ok6.js +0 -481
  540. package/dist/deliver-CS8JsevV.js +0 -481
  541. package/dist/delivery-queue-CTaYZQ_8.js +0 -244
  542. package/dist/delivery-queue-DMZ7mH8P.js +0 -244
  543. package/dist/devices-cli-BBJ4His-.js +0 -319
  544. package/dist/devices-cli-DHSJSFW1.js +0 -323
  545. package/dist/diagnostics-BSvCaLNs.js +0 -35
  546. package/dist/diagnostics-mWFAsFeo.js +0 -35
  547. package/dist/directory-cli-C-oHD_XE.js +0 -224
  548. package/dist/directory-cli-Cw99VGvr.js +0 -220
  549. package/dist/dispatcher-C8d1NNLZ.js +0 -174
  550. package/dist/dispatcher-DY6Ga60j.js +0 -173
  551. package/dist/dm-policy-shared-CRQ-Wr5g.js +0 -22
  552. package/dist/dm-policy-shared-CXXf2ltd.js +0 -22
  553. package/dist/dns-cli-BOqx9qo1.js +0 -199
  554. package/dist/dns-cli-WfqSC3JU.js +0 -203
  555. package/dist/dock-Big-J2VN.js +0 -929
  556. package/dist/dock-Cj4PKiUh.js +0 -928
  557. package/dist/doctor-completion-hYqcZ7IE.js +0 -92
  558. package/dist/doctor-completion-nxQQ5bEw.js +0 -92
  559. package/dist/doctor-config-flow-BUuADMDa.js +0 -1935
  560. package/dist/doctor-config-flow-yOUpQC2B.js +0 -1934
  561. package/dist/enable-DC9V0nTO.js +0 -59
  562. package/dist/env-B3zr72vQ.js +0 -60
  563. package/dist/errors-CdmXrBic.js +0 -35
  564. package/dist/errors-Cr_NbOb4.js +0 -35
  565. package/dist/exec-D_s-zAtY.js +0 -164
  566. package/dist/exec-Zz6eJ6YU.js +0 -164
  567. package/dist/fetch-BIZkXB5i.js +0 -67
  568. package/dist/fetch-DRVdxxEj.js +0 -67
  569. package/dist/fetch-DTR2MlOk.js +0 -67
  570. package/dist/file-lock-6NXMPZTT.js +0 -107
  571. package/dist/file-lock-C_KRlR7M.js +0 -107
  572. package/dist/fs-safe-DZHpH7TI.js +0 -98
  573. package/dist/fs-safe-vm3JMUkq.js +0 -88
  574. package/dist/gateway-cli-DEW-Ukmc.js +0 -24351
  575. package/dist/gateway-cli-DQYcZCOV.js +0 -24347
  576. package/dist/gateway-rpc-BCFkQPa2.js +0 -28
  577. package/dist/gateway-rpc-DOgYbsOG.js +0 -28
  578. package/dist/gmail-setup-utils-DMeA1UM1.js +0 -423
  579. package/dist/gmail-setup-utils-FHWSAur3.js +0 -422
  580. package/dist/health-BrLNGkZV.js +0 -1414
  581. package/dist/health-C8p9mnfl.js +0 -1417
  582. package/dist/heartbeat-visibility-CJVdaMZF.js +0 -125
  583. package/dist/heartbeat-visibility-DwK1UL0t.js +0 -125
  584. package/dist/hook-runner-global-C0DFQmQw.js +0 -527
  585. package/dist/hooks-cli-DEKi-tbA.js +0 -1221
  586. package/dist/hooks-cli-FndXPMD3.js +0 -1225
  587. package/dist/image-ops-B9ofmzSq.js +0 -354
  588. package/dist/image-ops-CMuvRsMY.js +0 -354
  589. package/dist/import-BH13F5mT.js +0 -606
  590. package/dist/import-D8HVcDqO.js +0 -604
  591. package/dist/inbound-context-BLy-G2Eq.js +0 -68
  592. package/dist/inbound-context-CmmmT8IP.js +0 -68
  593. package/dist/inbound-path-policy-BdmTOUka.js +0 -90
  594. package/dist/inbound-path-policy-BurOAu44.js +0 -90
  595. package/dist/inspect-nW8LAukU.js +0 -286
  596. package/dist/inspect-xy2EHy8G.js +0 -286
  597. package/dist/installs-CpfHmKY1.js +0 -325
  598. package/dist/installs-DebiMrGj.js +0 -325
  599. package/dist/ipv4-ysiNGssl.js +0 -46
  600. package/dist/ipv4-zc_Hfvbp.js +0 -46
  601. package/dist/ir-CaxTklDC.js +0 -940
  602. package/dist/lifecycle-core-Z5SScMlU.js +0 -476
  603. package/dist/lifecycle-core-pPwYSt7m.js +0 -474
  604. package/dist/loader-BapIdJyx.js +0 -22404
  605. package/dist/loader-BdAToyDH.js +0 -22401
  606. package/dist/local-roots-CrJ_Jv_G.js +0 -314
  607. package/dist/local-roots-n_Y4iYwb.js +0 -313
  608. package/dist/logger-B8yHnzPl.js +0 -49
  609. package/dist/login-C99fsB0N.js +0 -61
  610. package/dist/login-cLvGPjeO.js +0 -62
  611. package/dist/login-qr-CGqRFwgl.js +0 -329
  612. package/dist/login-qr-dnY5DC2C.js +0 -325
  613. package/dist/logs-cli-Bda7xY4N.js +0 -236
  614. package/dist/logs-cli-HzR-vnpD.js +0 -240
  615. package/dist/markdown-tables-58Hq__7K.js +0 -29
  616. package/dist/markdown-tables-GFEX0OR6.js +0 -29
  617. package/dist/media-CFsyXs3H.js +0 -940
  618. package/dist/media-Du5SHtnp.js +0 -10452
  619. package/dist/message-action-names-BfuEvR6j.js +0 -2521
  620. package/dist/message-action-names-CVBkpOLt.js +0 -2521
  621. package/dist/message-channel-FMNRI5Ax.js +0 -91
  622. package/dist/mime-AuIDUZPG.js +0 -149
  623. package/dist/mime-Cqg1jjia.js +0 -149
  624. package/dist/net-BEFkF-nI.js +0 -225
  625. package/dist/net-CNsUGiSw.js +0 -225
  626. package/dist/node-cli-Bu-InsO9.js +0 -1462
  627. package/dist/node-cli-DE7Pm7Fr.js +0 -1458
  628. package/dist/node-service-CumFZc9L.js +0 -67
  629. package/dist/node-service-DY1gG06I.js +0 -67
  630. package/dist/nodes-cli-B5aAExN0.js +0 -1350
  631. package/dist/nodes-cli-eKRqlKuO.js +0 -1346
  632. package/dist/nodes-screen-B3Sij1uT.js +0 -250
  633. package/dist/nodes-screen-DEvpoFmH.js +0 -250
  634. package/dist/note-CPFJCWJJ.js +0 -92
  635. package/dist/npm-registry-spec-BgMtTHvq.js +0 -786
  636. package/dist/npm-registry-spec-Dz3z1Zpd.js +0 -786
  637. package/dist/npm-resolution-Buio63BQ.js +0 -86
  638. package/dist/npm-resolution-gH1zHW2a.js +0 -86
  639. package/dist/onboard-BSf6qJWk.js +0 -647
  640. package/dist/onboard-V-SsZRk-.js +0 -649
  641. package/dist/onboard-auth-C_wHkop1.js +0 -207
  642. package/dist/onboard-auth-CkCBLvTg.js +0 -211
  643. package/dist/onboard-channels-DQTGPC18.js +0 -2548
  644. package/dist/onboard-channels-DSDQfR0u.js +0 -2547
  645. package/dist/onboard-helpers-Q7M6vdzh.js +0 -363
  646. package/dist/onboard-helpers-SCO3k5Y8.js +0 -364
  647. package/dist/onboard-remote-Co2hv1AD.js +0 -127
  648. package/dist/onboard-remote-Dl3BFSg2.js +0 -127
  649. package/dist/onboarding-B0bJfZ20.js +0 -588
  650. package/dist/onboarding-CeBR9OBi.js +0 -586
  651. package/dist/onboarding.finalize-BPgfWPB9.js +0 -404
  652. package/dist/onboarding.finalize-BmfLvNPJ.js +0 -402
  653. package/dist/onboarding.gateway-config-BL0Q7Wpg.js +0 -201
  654. package/dist/onboarding.gateway-config-D2QsXMYO.js +0 -195
  655. package/dist/outbound-CcaPcetn.js +0 -220
  656. package/dist/outbound-CeiW8z3a.js +0 -221
  657. package/dist/outbound-attachment-BIvFb3Is.js +0 -18
  658. package/dist/outbound-attachment-Bfm5-JYe.js +0 -18
  659. package/dist/outbound-attachment-CZ7zoYxB.js +0 -18
  660. package/dist/pairing-cli-CgX79ujL.js +0 -125
  661. package/dist/pairing-cli-DvbbXFgC.js +0 -129
  662. package/dist/pairing-labels-3wDxaApH.js +0 -9
  663. package/dist/pairing-labels-DCbWnbWk.js +0 -9
  664. package/dist/pairing-store-CdY7iRS0.js +0 -459
  665. package/dist/pairing-store-DykkYpQ7.js +0 -460
  666. package/dist/path-env-Cqo5LZmw.js +0 -89
  667. package/dist/path-env-GTM4HXCN.js +0 -89
  668. package/dist/path-safety-CXKAVpMp.js +0 -14
  669. package/dist/path-safety-DGB91qBk.js +0 -14
  670. package/dist/plugin-auto-enable-C6FPGg_-.js +0 -301
  671. package/dist/plugin-auto-enable-L8eOc8iC.js +0 -302
  672. package/dist/plugin-registry-CHlaWZD7.js +0 -33
  673. package/dist/plugin-registry-DQdMze4z.js +0 -33
  674. package/dist/plugin-sdk/auth/session-override.d.ts +0 -17
  675. package/dist/plugin-sdk/auto-reply/reply/directive-handling.auth.d.ts +0 -18
  676. package/dist/plugin-sdk/link-understanding/apply.d.ts +0 -10
  677. package/dist/plugin-sdk/link-understanding/defaults.d.ts +0 -2
  678. package/dist/plugin-sdk/link-understanding/detect.d.ts +0 -3
  679. package/dist/plugin-sdk/link-understanding/format.d.ts +0 -4
  680. package/dist/plugin-sdk/link-understanding/runner.d.ts +0 -11
  681. package/dist/plugin-sdk/media/input-files.d.ts +0 -95
  682. package/dist/plugin-sdk/media-understanding/apply.d.ts +0 -19
  683. package/dist/plugin-sdk/media-understanding/attachments.d.ts +0 -49
  684. package/dist/plugin-sdk/media-understanding/concurrency.d.ts +0 -1
  685. package/dist/plugin-sdk/media-understanding/defaults.d.ts +0 -11
  686. package/dist/plugin-sdk/media-understanding/errors.d.ts +0 -6
  687. package/dist/plugin-sdk/media-understanding/format.d.ts +0 -7
  688. package/dist/plugin-sdk/media-understanding/fs.d.ts +0 -1
  689. package/dist/plugin-sdk/media-understanding/output-extract.d.ts +0 -2
  690. package/dist/plugin-sdk/media-understanding/providers/anthropic/index.d.ts +0 -2
  691. package/dist/plugin-sdk/media-understanding/providers/deepgram/audio.d.ts +0 -1
  692. package/dist/plugin-sdk/media-understanding/providers/deepgram/index.d.ts +0 -2
  693. package/dist/plugin-sdk/media-understanding/providers/google/audio.d.ts +0 -1
  694. package/dist/plugin-sdk/media-understanding/providers/google/index.d.ts +0 -2
  695. package/dist/plugin-sdk/media-understanding/providers/google/video.d.ts +0 -3
  696. package/dist/plugin-sdk/media-understanding/providers/groq/index.d.ts +0 -2
  697. package/dist/plugin-sdk/media-understanding/providers/index.d.ts +0 -4
  698. package/dist/plugin-sdk/media-understanding/providers/minimax/index.d.ts +0 -2
  699. package/dist/plugin-sdk/media-understanding/providers/mistral/index.d.ts +0 -2
  700. package/dist/plugin-sdk/media-understanding/providers/moonshot/index.d.ts +0 -2
  701. package/dist/plugin-sdk/media-understanding/providers/moonshot/video.d.ts +0 -3
  702. package/dist/plugin-sdk/media-understanding/providers/openai/audio.d.ts +0 -1
  703. package/dist/plugin-sdk/media-understanding/providers/openai/index.d.ts +0 -2
  704. package/dist/plugin-sdk/media-understanding/providers/shared.d.ts +0 -20
  705. package/dist/plugin-sdk/media-understanding/providers/zai/index.d.ts +0 -2
  706. package/dist/plugin-sdk/media-understanding/resolve.d.ts +0 -44
  707. package/dist/plugin-sdk/media-understanding/runner.d.ts +0 -34
  708. package/dist/plugin-sdk/media-understanding/runner.entries.d.ts +0 -33
  709. package/dist/plugin-sdk/media-understanding/scope.d.ts +0 -9
  710. package/dist/plugin-sdk/media-understanding/types.d.ts +0 -59
  711. package/dist/plugin-sdk/media-understanding/video.d.ts +0 -2
  712. package/dist/plugin-sdk/utils/mask-api-key.d.ts +0 -1
  713. package/dist/plugin-sdk/utils/run-with-concurrency.d.ts +0 -11
  714. package/dist/plugins-7B167wIj.js +0 -453
  715. package/dist/plugins-BRHOfy1Z.js +0 -455
  716. package/dist/plugins-cli--I43zIaS.js +0 -797
  717. package/dist/plugins-cli-DIxMbY9I.js +0 -801
  718. package/dist/ports-BS8kQkd9.js +0 -96
  719. package/dist/ports-CAqyeQYZ.js +0 -316
  720. package/dist/ports-CTUgXF2d.js +0 -96
  721. package/dist/ports-DqfnVnCw.js +0 -370
  722. package/dist/preflight-CaRJtknt.js +0 -64
  723. package/dist/preflight-DeDRKMx4.js +0 -68
  724. package/dist/program-context-9dv7ClZz.js +0 -474
  725. package/dist/program-wVSvyiD-.js +0 -248
  726. package/dist/prompt-select-styled-BE_4W66Z.js +0 -1672
  727. package/dist/prompt-select-styled-BTPf06Os.js +0 -1669
  728. package/dist/provider-dispatcher-VZWITjmt.js +0 -660
  729. package/dist/provider-dispatcher-zYYGo00g.js +0 -659
  730. package/dist/push-apns-Cj0Ryn18.js +0 -713
  731. package/dist/push-apns-fFfYCqda.js +0 -711
  732. package/dist/pw-ai-CnN2sITD.js +0 -1908
  733. package/dist/pw-ai-fnX3cecw.js +0 -1911
  734. package/dist/qr-cli-CriPg41m.js +0 -349
  735. package/dist/qr-cli-DSURqD0D.js +0 -353
  736. package/dist/redact-snapshot-BecRL_h6.js +0 -2016
  737. package/dist/redact-snapshot-pTdzSrex.js +0 -2016
  738. package/dist/register.agent-B5_1XatO.js +0 -290
  739. package/dist/register.agent-Dba3CYyo.js +0 -1018
  740. package/dist/register.configure-DmwHGsPG.js +0 -128
  741. package/dist/register.configure-DrPlgBqB.js +0 -133
  742. package/dist/register.import-CPQqqdje.js +0 -31
  743. package/dist/register.import-D1UaH1QV.js +0 -29
  744. package/dist/register.maintenance-D76tiF4W.js +0 -501
  745. package/dist/register.maintenance-hUriFBfi.js +0 -499
  746. package/dist/register.message--VzmF3u4.js +0 -685
  747. package/dist/register.message-itNWUdvP.js +0 -689
  748. package/dist/register.onboard-Co8D908b.js +0 -93
  749. package/dist/register.onboard-q8JzWtuv.js +0 -97
  750. package/dist/register.setup-Djc6jZTc.js +0 -113
  751. package/dist/register.setup-hhPii4O7.js +0 -117
  752. package/dist/register.status-health-sessions-C1FhACQB.js +0 -668
  753. package/dist/register.status-health-sessions-DcUegHcH.js +0 -428
  754. package/dist/register.subclis-DAfihpBz.js +0 -267
  755. package/dist/replies-IpiCq1Ht.js +0 -136
  756. package/dist/replies-LSx_XhsP.js +0 -136
  757. package/dist/reply-D0CLqcBY.js +0 -13718
  758. package/dist/reply-Djq8ghfI.js +0 -13715
  759. package/dist/reply-directives-Cz7622Qx.js +0 -182
  760. package/dist/reply-directives-ssnaPNiU.js +0 -182
  761. package/dist/reply-payloads-CQMtrphw.js +0 -527
  762. package/dist/reply-prefix-CWcAZKhE.js +0 -37
  763. package/dist/reply-prefix-Drq7Pf3A.js +0 -37
  764. package/dist/resolve-route-B8uIc2H3.js +0 -249
  765. package/dist/resolve-route-C8ooNlI4.js +0 -249
  766. package/dist/response-prefix-template-DPOggmPO.js +0 -134
  767. package/dist/retry-BdhJlZQI.js +0 -77
  768. package/dist/run-main-B-Cb62fC.js +0 -306
  769. package/dist/runner-DUnmgjJ8.js +0 -2394
  770. package/dist/runner-EobZIrDt.js +0 -2394
  771. package/dist/secure-random-B5qmFc3N.js +0 -44
  772. package/dist/security-cli-05blEYyC.js +0 -482
  773. package/dist/security-cli-DYbt8duB.js +0 -487
  774. package/dist/send-7O3-bRtl.js +0 -547
  775. package/dist/send-9Huf62k3.js +0 -2245
  776. package/dist/send-B9mIJdUo.js +0 -547
  777. package/dist/send-Bj0RXr-a.js +0 -492
  778. package/dist/send-BzkAsn7K.js +0 -29
  779. package/dist/send-CXFhFLP9.js +0 -11
  780. package/dist/send-Ce_BDa8P.js +0 -349
  781. package/dist/send-ChvasRSh.js +0 -1779
  782. package/dist/send-Cl5BhbnF.js +0 -426
  783. package/dist/send-CpebTvM6.js +0 -374
  784. package/dist/send-DWf7BCPe.js +0 -492
  785. package/dist/send-DX8QSuSI.js +0 -1174
  786. package/dist/send-DZRn6PT2.js +0 -332
  787. package/dist/send-Dd2_MykI.js +0 -2245
  788. package/dist/send-IJaUAa8H.js +0 -1776
  789. package/dist/send-vvZXksNU.js +0 -349
  790. package/dist/server-BrzR9JmX.js +0 -206
  791. package/dist/server-_h27-uP_.js +0 -202
  792. package/dist/server-lifecycle-CUdA6Far.js +0 -2437
  793. package/dist/server-lifecycle-DQZWL8iP.js +0 -2437
  794. package/dist/server-node-events-DgB1z2Cx.js +0 -392
  795. package/dist/server-node-events-DtvPfM1I.js +0 -396
  796. package/dist/service-9le8AnC-.js +0 -670
  797. package/dist/service-Drb0kx6I.js +0 -670
  798. package/dist/session-BIAOl5QR.js +0 -170
  799. package/dist/session-Wu00pCn_.js +0 -170
  800. package/dist/session-cost-usage-7plmOKbs.js +0 -627
  801. package/dist/session-cost-usage-CPFxBFUg.js +0 -627
  802. package/dist/session-dirs-CfIrIJxG.js +0 -318
  803. package/dist/session-dirs-DlPpWt5Q.js +0 -318
  804. package/dist/session-utils-Sd9w4vc1.js +0 -622
  805. package/dist/session-utils-iL47hYmZ.js +0 -622
  806. package/dist/sessions-6pKQ3gN3.js +0 -247
  807. package/dist/sessions-ZRmCDdj1.js +0 -2569
  808. package/dist/shell-env-DYZq9PqC.js +0 -163
  809. package/dist/ssrf-B-rF_tZB.js +0 -183
  810. package/dist/ssrf-DJW14Wkh.js +0 -183
  811. package/dist/status-CTRQCXRj.js +0 -1979
  812. package/dist/status-Y67xsH93.js +0 -1983
  813. package/dist/status.update-DlBReI5-.js +0 -449
  814. package/dist/status.update-v7fEQ7R9.js +0 -449
  815. package/dist/store-B5989JkX.js +0 -64
  816. package/dist/store-BgtgYJoX.js +0 -53
  817. package/dist/store-DCrrxHyS.js +0 -2571
  818. package/dist/store-Ql6vAcsg.js +0 -64
  819. package/dist/subagent-registry-BGknZEUI.js +0 -4856
  820. package/dist/subagent-registry-CWeRBjfn.js +0 -4854
  821. package/dist/subsystem-Ct6qOOqZ.js +0 -1079
  822. package/dist/subsystem-PQ64_nsu.js +0 -1136
  823. package/dist/system-cli-CmO-4Rju.js +0 -77
  824. package/dist/system-cli-VBsa18K6.js +0 -73
  825. package/dist/systemd-CqFpK30Y.js +0 -547
  826. package/dist/systemd-fK9AV5bP.js +0 -547
  827. package/dist/systemd-hints-D3rr0j14.js +0 -278
  828. package/dist/systemd-hints-DNOSRaqA.js +0 -278
  829. package/dist/systemd-linger-B907NVVy.js +0 -75
  830. package/dist/systemd-linger-wYksBbM7.js +0 -75
  831. package/dist/tables-Boxa9MJH.js +0 -55
  832. package/dist/tables-CO_kxD0e.js +0 -55
  833. package/dist/tables-WZp8Vt9n.js +0 -55
  834. package/dist/tailnet-CfZhpSnt.js +0 -40
  835. package/dist/tailnet-D0NV0tRJ.js +0 -40
  836. package/dist/tailscale-B__xvMjA.js +0 -230
  837. package/dist/tailscale-q_ZrxUCc.js +0 -230
  838. package/dist/targets-B4rMyQFJ.js +0 -53
  839. package/dist/targets-BHYLCv06.js +0 -2534
  840. package/dist/targets-BjWhDMJM.js +0 -650
  841. package/dist/targets-BnpMZZC_.js +0 -120
  842. package/dist/targets-CHwGDIgO.js +0 -650
  843. package/dist/targets-DIDKlfKI.js +0 -220
  844. package/dist/targets-bqjVeCnF.js +0 -2535
  845. package/dist/targets-mqj9GNg1.js +0 -53
  846. package/dist/tool-display-C0hpLmkw.js +0 -785
  847. package/dist/tool-display-CQTRHo3Z.js +0 -785
  848. package/dist/tool-images-BYY11Gw3.js +0 -263
  849. package/dist/tool-images-CnJ0R8Fo.js +0 -263
  850. package/dist/trash-C0mjnHuW.js +0 -125
  851. package/dist/trash-Cgwc9mLD.js +0 -125
  852. package/dist/tui-9cJnR1dN.js +0 -3282
  853. package/dist/tui-BR3egaFJ.js +0 -3282
  854. package/dist/tui-cli-BYpkhE6J.js +0 -66
  855. package/dist/tui-cli-DndeZyup.js +0 -62
  856. package/dist/update-BJVdkzk7.js +0 -349
  857. package/dist/update-DjI6KTA5.js +0 -349
  858. package/dist/update-cli-B7Rl2Qr2.js +0 -1146
  859. package/dist/update-cli-CFk_jqUm.js +0 -1148
  860. package/dist/usage-CFv4a1Nf.js +0 -5448
  861. package/dist/voice-credentials-D59RcLbl.js +0 -45
  862. package/dist/voice-credentials-fjA7GShF.js +0 -45
  863. package/dist/web-Bs1td8Qw.js +0 -79
  864. package/dist/web-CSiw--Px.js +0 -3070
  865. package/dist/web-jRTtDiNf.js +0 -74
  866. package/dist/webhooks-cli-0yQha2yj.js +0 -334
  867. package/dist/webhooks-cli-ula0bTX-.js +0 -330
  868. package/dist/whatsapp-actions-3NdzsNg1.js +0 -130
  869. package/dist/whatsapp-actions-y_1vjkYY.js +0 -125
  870. package/dist/workspace-BT3X-qCZ.js +0 -449
  871. package/dist/workspace-D5hHXubL.js +0 -447
  872. package/dist/zod-schema-CbqZAIYy.js +0 -2696
  873. package/dist/zod-schema-YGQJEcnj.js +0 -2696
  874. /package/dist/{account-lookup-BOCzCnir.js → account-lookup-CIY_RKhi.js} +0 -0
  875. /package/dist/{account-lookup-C0ndrpt-.js → account-lookup-DGscKBsr.js} +0 -0
  876. /package/dist/{agent-helpers-eEHy5uX2.js → agent-helpers-D83kfcF9.js} +0 -0
  877. /package/dist/{agents.config-BgDBcY4h.js → agents.config-BPe_hkMn.js} +0 -0
  878. /package/dist/{api-Cd_7aESj.js → api-D8QQo5bc.js} +0 -0
  879. /package/dist/{api-DJ_oWYus.js → api-GywrnwRm.js} +0 -0
  880. /package/dist/{argv-BY8EVMTP.js → argv-DW4MYBdJ.js} +0 -0
  881. /package/dist/{bindings-Dr0bGRst.js → bindings-BpL4pISF.js} +0 -0
  882. /package/dist/{brew-CmTYeZk1.js → brew-CBsS-Vq1.js} +0 -0
  883. /package/dist/{brew-V4lMBeE3.js → brew-Clw9vXhE.js} +0 -0
  884. /package/dist/{chat-envelope-CrM0X4sl.js → chat-envelope-CY1yvCc-.js} +0 -0
  885. /package/dist/{chat-envelope-BIujl9Cj.js → chat-envelope-DUMcMMB2.js} +0 -0
  886. /package/dist/{chat-type-CH3W-zKy.js → chat-type-BKe459rw.js} +0 -0
  887. /package/dist/{chat-type-DyovJwCt.js → chat-type-CE6cJOyt.js} +0 -0
  888. /package/dist/{cleanup-utils-CNwlTKyR.js → cleanup-utils-365rf8YN.js} +0 -0
  889. /package/dist/{cleanup-utils-gNzIs9yk.js → cleanup-utils-rqUXvR3Z.js} +0 -0
  890. /package/dist/{cli-name-3MdfbvIR.js → cli-name-7Gb97Vyl.js} +0 -0
  891. /package/dist/{cli-name-CRLBidNP.js → cli-name-Yv30OygA.js} +0 -0
  892. /package/dist/{cli-utils-5ZIfXAfM.js → cli-utils-5W6ugvN5.js} +0 -0
  893. /package/dist/{cli-utils-BUOtyfnU.js → cli-utils-CZJacPS2.js} +0 -0
  894. /package/dist/{client-D5m46AuY.js → client-DQ-Nh-rV.js} +0 -0
  895. /package/dist/{client-DFyI5I0n.js → client-Fi2k2G9Z.js} +0 -0
  896. /package/dist/{command-options-Cn2fc1Of.js → command-options-CXHYeogR.js} +0 -0
  897. /package/dist/{command-options-D2nN4AXX.js → command-options-Cx6evn0x.js} +0 -0
  898. /package/dist/{config-eval-CU2G7a83.js → config-eval-DU_v_3lY.js} +0 -0
  899. /package/dist/{config-eval-BCKpAS_K.js → config-eval-V26Gl6eZ.js} +0 -0
  900. /package/dist/{constants-CRGAZ2ow.js → constants-C7gkSGRE.js} +0 -0
  901. /package/dist/{constants-BAZuhSRm.js → constants-DAiBiWlI.js} +0 -0
  902. /package/dist/{constants-DoYLsBmv.js → constants-DOnQraOP.js} +0 -0
  903. /package/dist/{constants-BBVTjb1j.js → constants-DQxqJVLu.js} +0 -0
  904. /package/dist/{credentials-DMAWNZdV.js → credentials-BHWUBHMd.js} +0 -0
  905. /package/dist/{credentials-Dmc3H-jd.js → credentials-DG0tD6-e.js} +0 -0
  906. /package/dist/{daemon-runtime-CzFI2dPw.js → daemon-runtime-B7Tmba31.js} +0 -0
  907. /package/dist/{daemon-runtime-aQhinwSL.js → daemon-runtime-KyXiP2ib.js} +0 -0
  908. /package/dist/{dangerous-name-matching-BlTBBZns.js → dangerous-name-matching-B4MRPcn-.js} +0 -0
  909. /package/dist/{dangerous-tools-BRmbBvRf.js → dangerous-tools-CIPZZJoN.js} +0 -0
  910. /package/dist/{dangerous-tools-E1i3IoxZ.js → dangerous-tools-D-GNbdpV.js} +0 -0
  911. /package/dist/{fetch-timeout-DBRRPNBi.js → fetch-timeout-CPe2rPLq.js} +0 -0
  912. /package/dist/{fetch-timeout-l_6RdoMw.js → fetch-timeout-DkT3EnRA.js} +0 -0
  913. /package/dist/{file-identity-BnGA6wyc.js → file-identity-C8MIb5lb.js} +0 -0
  914. /package/dist/{format-duration-B-Uv5nOi.js → format-duration-Cd7SCued.js} +0 -0
  915. /package/dist/{format-duration-D1M3Zxu6.js → format-duration-Oj8pTbYL.js} +0 -0
  916. /package/dist/{format-relative-Cywx6ldk.js → format-relative-8dpVUfzZ.js} +0 -0
  917. /package/dist/{format-relative-DcQZUAYl.js → format-relative-BMNeqaxW.js} +0 -0
  918. /package/dist/{health-format-CL2Xq92A.js → health-format-CwLlmYSK.js} +0 -0
  919. /package/dist/{health-format-CVgQD-z9.js → health-format-CycFH5Sj.js} +0 -0
  920. /package/dist/{heartbeat-wake-DLxQm6-U.js → heartbeat-wake-D6Lt5YUk.js} +0 -0
  921. /package/dist/{heartbeat-wake-DjsTDzF3.js → heartbeat-wake-uZkAP-tP.js} +0 -0
  922. /package/dist/{help-format-DM6-OBt-.js → help-format-B0YIbosn.js} +0 -0
  923. /package/dist/{help-format-CJQ7APRn.js → help-format-GeOPYD_A.js} +0 -0
  924. /package/dist/{helpers-BER76F_2.js → helpers-6_MYSJEW.js} +0 -0
  925. /package/dist/{helpers-DSMIGYx2.js → helpers-703bXVlF.js} +0 -0
  926. /package/dist/{helpers-D-r6yhnI.js → helpers-p_u0Gnj_.js} +0 -0
  927. /package/dist/{input-provenance-BgfeDgck.js → input-provenance-C4nlFv5Y.js} +0 -0
  928. /package/dist/{input-provenance-xUsSMOsz.js → input-provenance-duDehu0D.js} +0 -0
  929. /package/dist/{ip-BAhS4rY2.js → ip-BFJnbRh9.js} +0 -0
  930. /package/dist/{ip-BUhsZdJu.js → ip-D0zgNmBV.js} +0 -0
  931. /package/dist/{is-main-BmHYGRhd.js → is-main-BE1Jih91.js} +0 -0
  932. /package/dist/{json-file-B5WEJJye.js → json-file-CsV03dh-.js} +0 -0
  933. /package/dist/{json-file-Dbg7nZg1.js → json-file-CtQKYRLl.js} +0 -0
  934. /package/dist/{json-files-BFGbyEzL.js → json-files-B2yMsppu.js} +0 -0
  935. /package/dist/{json-files-CfhnuGaC.js → json-files-BYH8U7Mx.js} +0 -0
  936. /package/dist/{lanes-4FoQemog.js → lanes-BWL_LwXG.js} +0 -0
  937. /package/dist/{lanes-BhdzrAIa.js → lanes-cHJ5arWg.js} +0 -0
  938. /package/dist/{links-CwTlzaPe.js → links-BFtUmGLH.js} +0 -0
  939. /package/dist/{links-D5vtq30Q.js → links-BNjLUJ9U.js} +0 -0
  940. /package/dist/{location-50gaJF5Z.js → location-BC45kOxc.js} +0 -0
  941. /package/dist/{location-Qo8Ii1zo.js → location-BUhzov-a.js} +0 -0
  942. /package/dist/{logger-IA_Dr_BT.js → logger-1QWMF9Hc.js} +0 -0
  943. /package/dist/{logger-nEdVxm5D.js → logger-BWMPnILd.js} +0 -0
  944. /package/dist/{logger-O6JX52kK.js → logger-Liu31nEU.js} +0 -0
  945. /package/dist/{logging-FctZEleJ.js → logging-CtbzyUjs.js} +0 -0
  946. /package/dist/{logging-BiuZwq5D.js → logging-DJFQvfGD.js} +0 -0
  947. /package/dist/{logging-Bs1VqVFL.js → logging-JiRrQn2_.js} +0 -0
  948. /package/dist/{logging-JZEg5nDp.js → logging-kuFzZMsG.js} +0 -0
  949. /package/dist/{message-channel-tuc9CdEw.js → message-channel-DOyKgFu8.js} +0 -0
  950. /package/dist/{mutable-allowlist-detectors-CtKavajp.js → mutable-allowlist-detectors-4m-Kc8Kn.js} +0 -0
  951. /package/dist/{mutable-allowlist-detectors-TCG6mnbz.js → mutable-allowlist-detectors-BECxOoKX.js} +0 -0
  952. /package/dist/{onboard-config-BxfgUqk6.js → onboard-config-C9so5ggC.js} +0 -0
  953. /package/dist/{onboard-config-DNzlo8Cg.js → onboard-config-oXID97rS.js} +0 -0
  954. /package/dist/{parse-log-line-CT0H1-oQ.js → parse-log-line-BtFI563v.js} +0 -0
  955. /package/dist/{parse-log-line-pij_xhtE.js → parse-log-line-COptqka7.js} +0 -0
  956. /package/dist/{parse-timeout-CvODy9RC.js → parse-timeout-BpphuwYl.js} +0 -0
  957. /package/dist/{path-guards-DOpzcMXz.js → path-guards-DJteVA0d.js} +0 -0
  958. /package/dist/{path-guards-DipYoPVw.js → path-guards-DVRUJZVN.js} +0 -0
  959. /package/dist/plugin-sdk/{media-understanding → stt}/providers/google/inline-data.d.ts +0 -0
  960. /package/dist/{plugins-allowlist-Bcqe9Gd8.js → plugins-allowlist-Clt6dsY6.js} +0 -0
  961. /package/dist/{polls-DQrR-qT3.js → polls-C5xr-8pM.js} +0 -0
  962. /package/dist/{polls-ybwcqkWt.js → polls-DXd67TD8.js} +0 -0
  963. /package/dist/{ports-lsof-CDyv5GJd.js → ports-lsof-xWMTWvMQ.js} +0 -0
  964. /package/dist/{process-scoped-map-BwUkYFQV.js → process-scoped-map-C7KeadUK.js} +0 -0
  965. /package/dist/{process-scoped-map-_zxf_kLz.js → process-scoped-map-CQ1C5MbT.js} +0 -0
  966. /package/dist/{program-context-CG-t6Yp-.js → program-context-LuBAPt4y.js} +0 -0
  967. /package/dist/{progress-DRLmcFiG.js → progress-C-hTn2yV.js} +0 -0
  968. /package/dist/{progress-BOdRbOHD.js → progress-ChmZpgvt.js} +0 -0
  969. /package/dist/{prompt-WEkXwIMT.js → prompt-BXeXEH0o.js} +0 -0
  970. /package/dist/{prompt-BRGfic91.js → prompt-C31r0R5I.js} +0 -0
  971. /package/dist/{prompt-style-B4Cq4PyQ.js → prompt-style-BcM-VSMx.js} +0 -0
  972. /package/dist/{proxy-BMJL0Qog.js → proxy-dRhp8Ykw.js} +0 -0
  973. /package/dist/{pw-ai-state-CwXeO5d0.js → pw-ai-state-CjfcKQoO.js} +0 -0
  974. /package/dist/{pw-ai-state-DaISdsXY.js → pw-ai-state-DfjyEttO.js} +0 -0
  975. /package/dist/{redact-gXuh8MFk.js → redact-D975G-N6.js} +0 -0
  976. /package/dist/{redact-CqWx9rpK.js → redact-Dx1Fue21.js} +0 -0
  977. /package/dist/{redact-identifier-BJOQDEj0.js → redact-identifier-Bqj_YiPd.js} +0 -0
  978. /package/dist/{redact-identifier-DR54qsoT.js → redact-identifier-HyK89Sod.js} +0 -0
  979. /package/dist/{remoteclaw-root-CgNyrbxc.js → remoteclaw-root-B1iQBmbi.js} +0 -0
  980. /package/dist/{remoteclaw-root-u8dAeHID.js → remoteclaw-root-BmYwCzQN.js} +0 -0
  981. /package/dist/{render-CDCvpfhh.js → render-BvFSFJZW.js} +0 -0
  982. /package/dist/{render-CJl4GK1B.js → render-flG67HhW.js} +0 -0
  983. /package/dist/{response-prefix-template-D3ZcJP4E.js → response-prefix-template-DDvbVpx6.js} +0 -0
  984. /package/dist/{retry-cXXk2j6_.js → retry-CByUYDAZ.js} +0 -0
  985. /package/dist/{retry-B19gMxS7.js → retry-oNE3cBeG.js} +0 -0
  986. /package/dist/{runtime-guard-BS55uiSW.js → runtime-guard-CqNug-FG.js} +0 -0
  987. /package/dist/{runtime-guard-CK80eucm.js → runtime-guard-DAHXelsb.js} +0 -0
  988. /package/dist/{runtime-status-BhW7hP_U.js → runtime-status-CM4rzyfO.js} +0 -0
  989. /package/dist/{runtime-status-hFVEC3wO.js → runtime-status-DJYthOLz.js} +0 -0
  990. /package/dist/{secret-equal-CJzes24Z.js → secret-equal-1-dwi8DL.js} +0 -0
  991. /package/dist/{secret-equal-CQAmGfGc.js → secret-equal-CXJEZiWb.js} +0 -0
  992. /package/dist/{secure-random-B3f7Ri2X.js → secure-random-Ba4Y5xG5.js} +0 -0
  993. /package/dist/{secure-random-BkZFG9cd.js → secure-random-C6AVByhV.js} +0 -0
  994. /package/dist/{stagger-B-_Wnofy.js → stagger-CjeisVRF.js} +0 -0
  995. /package/dist/{stagger-B2ORDHsP.js → stagger-vkvpUmOz.js} +0 -0
  996. /package/dist/{status-C6YNwimj.js → status-DNLnVQZ4.js} +0 -0
  997. /package/dist/{status-yrDGXYZM.js → status-DZhl73dM.js} +0 -0
  998. /package/dist/{strip-inbound-meta-0cvL6itU.js → strip-inbound-meta-C3Cwe_ZO.js} +0 -0
  999. /package/dist/{strip-inbound-meta-DjKcSFaW.js → strip-inbound-meta-DuDjnGjC.js} +0 -0
  1000. /package/dist/{table-ByMyHTh_.js → table-B9zSN_7D.js} +0 -0
  1001. /package/dist/{table-C-dba-5-.js → table-j8Ayarot.js} +0 -0
  1002. /package/dist/{target-errors-DJVRKFcU.js → target-errors-ChjvOMuV.js} +0 -0
  1003. /package/dist/{target-errors-GZXDqlUu.js → target-errors-Dn4aykSV.js} +0 -0
  1004. /package/dist/{targets-B_d_1z3N.js → targets-BtGRUQMa.js} +0 -0
  1005. /package/dist/{targets-DOJXjN1U.js → targets-CE4AYRI9.js} +0 -0
  1006. /package/dist/{targets-D01MJGnh.js → targets-DlufWCmy.js} +0 -0
  1007. /package/dist/{targets-WSwPflb6.js → targets-akvAerZF.js} +0 -0
  1008. /package/dist/{text-format-DarxU3JH.js → text-format-VSogn9Yq.js} +0 -0
  1009. /package/dist/{text-format-mr5bZq0f.js → text-format-xeHt9ywT.js} +0 -0
  1010. /package/dist/{thinking-BqJmU6Zp.js → thinking-B171Rc3-.js} +0 -0
  1011. /package/dist/{tokens-C8yGxAcR.js → tokens-B-jmvNR9.js} +0 -0
  1012. /package/dist/{tokens-DAFBx5qr.js → tokens-kTLGxaAF.js} +0 -0
  1013. /package/dist/{usage-BXi79Rq6.js → usage-CRJFqYf8.js} +0 -0
  1014. /package/dist/{usage-C1lHaofV.js → usage-Txvb0Iq2.js} +0 -0
  1015. /package/dist/{usage-format-CD5jsZY1.js → usage-format-70DvrseE.js} +0 -0
  1016. /package/dist/{usage-format-CRVpDVj1.js → usage-format-Bs8DkQtr.js} +0 -0
  1017. /package/dist/{widearea-dns-C-0P7TRi.js → widearea-dns-BOgHvO4O.js} +0 -0
  1018. /package/dist/{widearea-dns-DFZMcfLf.js → widearea-dns-CGhfClCr.js} +0 -0
  1019. /package/dist/{workspace-BJCKO8Ns.js → workspace-DhUqtMK_.js} +0 -0
  1020. /package/dist/{wsl-kFaeW76c.js → wsl-Cs-gowFJ.js} +0 -0
@@ -0,0 +1,1935 @@
1
+ import { f as resolveLegacyStateDirs, h as resolveStateDir, m as resolveOAuthDir, p as resolveNewStateDir, t as CONFIG_PATH } from "./paths-BTaH3rLn.js";
2
+ import { h as resolveHomeDir } from "./utils-C5daYcFn.js";
3
+ import { m as DEFAULT_ACCOUNT_ID, n as DEFAULT_MAIN_KEY, r as buildAgentMainSessionKey, s as normalizeAgentId } from "./session-key-CgKWfjoZ.js";
4
+ import { c as resolveDefaultAgentId } from "./agent-scope-DVvX_nkQ.js";
5
+ import { n as migrateLegacyConfig, o as readConfigFileSnapshot } from "./config-C_WcTz_O.js";
6
+ import { _ as resolveTelegramPreviewStreamMode, g as resolveSlackStreamingMode, h as resolveSlackNativeStreaming, m as resolveDiscordPreviewStreamMode, t as RemoteClawSchema } from "./zod-schema-CCUbW_Si.js";
7
+ import { f as parseToolsBySenderTypedKey } from "./dock-ByrYnLiz.js";
8
+ import { d as resolveTelegramAccount, l as listTelegramAccountIds } from "./plugins-DExsdlTp.js";
9
+ import { t as formatCliCommand } from "./command-format-CMAQa4dB.js";
10
+ import { K as canonicalizeMainSessionAlias, s as saveSessionStore } from "./store-Bnm6zwaq.js";
11
+ import { t as collectProviderDangerousNameMatchingScopes } from "./dangerous-name-matching-B4MRPcn-.js";
12
+ import { t as note } from "./note-CMELkPJN.js";
13
+ import { t as applyPluginAutoEnable } from "./plugin-auto-enable-CeHhBLCU.js";
14
+ import { t as isWithinDir } from "./path-safety-CfiVyVz7.js";
15
+ import { t as fetchTelegramChatId } from "./api-GywrnwRm.js";
16
+ import { a as isMattermostMutableAllowEntry, c as normalizeTelegramAllowFromEntry, i as isMSTeamsMutableAllowEntry, n as isGoogleChatMutableAllowEntry, o as isSlackMutableAllowEntry, r as isIrcMutableAllowEntry, s as isNumericTelegramUserId, t as isDiscordMutableAllowEntry } from "./mutable-allowlist-detectors-BECxOoKX.js";
17
+ import fs from "node:fs";
18
+ import os from "node:os";
19
+ import path from "node:path";
20
+ import JSON5 from "json5";
21
+ import fs$1 from "node:fs/promises";
22
+
23
+ //#region src/commands/doctor-legacy-config.ts
24
+ function normalizeLegacyConfigValues(cfg) {
25
+ const changes = [];
26
+ let next = cfg;
27
+ const isRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
28
+ const normalizeDmAliases = (params) => {
29
+ let changed = false;
30
+ let updated = params.entry;
31
+ const rawDm = updated.dm;
32
+ const dm = isRecord(rawDm) ? structuredClone(rawDm) : null;
33
+ let dmChanged = false;
34
+ const allowFromEqual = (a, b) => {
35
+ if (!Array.isArray(a) || !Array.isArray(b)) return false;
36
+ const na = a.map((v) => String(v).trim()).filter(Boolean);
37
+ const nb = b.map((v) => String(v).trim()).filter(Boolean);
38
+ if (na.length !== nb.length) return false;
39
+ return na.every((v, i) => v === nb[i]);
40
+ };
41
+ const topDmPolicy = updated.dmPolicy;
42
+ const legacyDmPolicy = dm?.policy;
43
+ if (topDmPolicy === void 0 && legacyDmPolicy !== void 0) {
44
+ updated = {
45
+ ...updated,
46
+ dmPolicy: legacyDmPolicy
47
+ };
48
+ changed = true;
49
+ if (dm) {
50
+ delete dm.policy;
51
+ dmChanged = true;
52
+ }
53
+ changes.push(`Moved ${params.pathPrefix}.dm.policy → ${params.pathPrefix}.dmPolicy.`);
54
+ } else if (topDmPolicy !== void 0 && legacyDmPolicy !== void 0) {
55
+ if (topDmPolicy === legacyDmPolicy) {
56
+ if (dm) {
57
+ delete dm.policy;
58
+ dmChanged = true;
59
+ changes.push(`Removed ${params.pathPrefix}.dm.policy (dmPolicy already set).`);
60
+ }
61
+ }
62
+ }
63
+ const topAllowFrom = updated.allowFrom;
64
+ const legacyAllowFrom = dm?.allowFrom;
65
+ if (topAllowFrom === void 0 && legacyAllowFrom !== void 0) {
66
+ updated = {
67
+ ...updated,
68
+ allowFrom: legacyAllowFrom
69
+ };
70
+ changed = true;
71
+ if (dm) {
72
+ delete dm.allowFrom;
73
+ dmChanged = true;
74
+ }
75
+ changes.push(`Moved ${params.pathPrefix}.dm.allowFrom → ${params.pathPrefix}.allowFrom.`);
76
+ } else if (topAllowFrom !== void 0 && legacyAllowFrom !== void 0) {
77
+ if (allowFromEqual(topAllowFrom, legacyAllowFrom)) {
78
+ if (dm) {
79
+ delete dm.allowFrom;
80
+ dmChanged = true;
81
+ changes.push(`Removed ${params.pathPrefix}.dm.allowFrom (allowFrom already set).`);
82
+ }
83
+ }
84
+ }
85
+ if (dm && isRecord(rawDm) && dmChanged) if (Object.keys(dm).length === 0) {
86
+ if (updated.dm !== void 0) {
87
+ const { dm: _ignored, ...rest } = updated;
88
+ updated = rest;
89
+ changed = true;
90
+ changes.push(`Removed empty ${params.pathPrefix}.dm after migration.`);
91
+ }
92
+ } else {
93
+ updated = {
94
+ ...updated,
95
+ dm
96
+ };
97
+ changed = true;
98
+ }
99
+ return {
100
+ entry: updated,
101
+ changed
102
+ };
103
+ };
104
+ const normalizePreviewStreamingAliases = (params) => {
105
+ let updated = params.entry;
106
+ const hadLegacyStreamMode = updated.streamMode !== void 0;
107
+ const beforeStreaming = updated.streaming;
108
+ const resolved = params.resolveStreaming(updated);
109
+ if (!(hadLegacyStreamMode || typeof beforeStreaming === "boolean" || typeof beforeStreaming === "string" && beforeStreaming !== resolved)) return {
110
+ entry: updated,
111
+ changed: false
112
+ };
113
+ let changed = false;
114
+ if (beforeStreaming !== resolved) {
115
+ updated = {
116
+ ...updated,
117
+ streaming: resolved
118
+ };
119
+ changed = true;
120
+ }
121
+ if (hadLegacyStreamMode) {
122
+ const { streamMode: _ignored, ...rest } = updated;
123
+ updated = rest;
124
+ changed = true;
125
+ changes.push(`Moved ${params.pathPrefix}.streamMode → ${params.pathPrefix}.streaming (${resolved}).`);
126
+ }
127
+ if (typeof beforeStreaming === "boolean") changes.push(`Normalized ${params.pathPrefix}.streaming boolean → enum (${resolved}).`);
128
+ else if (typeof beforeStreaming === "string" && beforeStreaming !== resolved) changes.push(`Normalized ${params.pathPrefix}.streaming (${beforeStreaming}) → (${resolved}).`);
129
+ return {
130
+ entry: updated,
131
+ changed
132
+ };
133
+ };
134
+ const normalizeSlackStreamingAliases = (params) => {
135
+ let updated = params.entry;
136
+ const hadLegacyStreamMode = updated.streamMode !== void 0;
137
+ const legacyStreaming = updated.streaming;
138
+ const beforeStreaming = updated.streaming;
139
+ const beforeNativeStreaming = updated.nativeStreaming;
140
+ const resolvedStreaming = resolveSlackStreamingMode(updated);
141
+ const resolvedNativeStreaming = resolveSlackNativeStreaming(updated);
142
+ if (!(hadLegacyStreamMode || typeof legacyStreaming === "boolean" || typeof legacyStreaming === "string" && legacyStreaming !== resolvedStreaming)) return {
143
+ entry: updated,
144
+ changed: false
145
+ };
146
+ let changed = false;
147
+ if (beforeStreaming !== resolvedStreaming) {
148
+ updated = {
149
+ ...updated,
150
+ streaming: resolvedStreaming
151
+ };
152
+ changed = true;
153
+ }
154
+ if (typeof beforeNativeStreaming !== "boolean" || beforeNativeStreaming !== resolvedNativeStreaming) {
155
+ updated = {
156
+ ...updated,
157
+ nativeStreaming: resolvedNativeStreaming
158
+ };
159
+ changed = true;
160
+ }
161
+ if (hadLegacyStreamMode) {
162
+ const { streamMode: _ignored, ...rest } = updated;
163
+ updated = rest;
164
+ changed = true;
165
+ changes.push(`Moved ${params.pathPrefix}.streamMode → ${params.pathPrefix}.streaming (${resolvedStreaming}).`);
166
+ }
167
+ if (typeof legacyStreaming === "boolean") changes.push(`Moved ${params.pathPrefix}.streaming (boolean) → ${params.pathPrefix}.nativeStreaming (${resolvedNativeStreaming}).`);
168
+ else if (typeof legacyStreaming === "string" && legacyStreaming !== resolvedStreaming) changes.push(`Normalized ${params.pathPrefix}.streaming (${legacyStreaming}) → (${resolvedStreaming}).`);
169
+ return {
170
+ entry: updated,
171
+ changed
172
+ };
173
+ };
174
+ const normalizeStreamingAliasesForProvider = (params) => {
175
+ if (params.provider === "telegram") return normalizePreviewStreamingAliases({
176
+ entry: params.entry,
177
+ pathPrefix: params.pathPrefix,
178
+ resolveStreaming: resolveTelegramPreviewStreamMode
179
+ });
180
+ if (params.provider === "discord") return normalizePreviewStreamingAliases({
181
+ entry: params.entry,
182
+ pathPrefix: params.pathPrefix,
183
+ resolveStreaming: resolveDiscordPreviewStreamMode
184
+ });
185
+ return normalizeSlackStreamingAliases({
186
+ entry: params.entry,
187
+ pathPrefix: params.pathPrefix
188
+ });
189
+ };
190
+ const normalizeProvider = (provider) => {
191
+ const rawEntry = next.channels?.[provider];
192
+ if (!isRecord(rawEntry)) return;
193
+ let updated = rawEntry;
194
+ let changed = false;
195
+ if (provider !== "telegram") {
196
+ const base = normalizeDmAliases({
197
+ provider,
198
+ entry: rawEntry,
199
+ pathPrefix: `channels.${provider}`
200
+ });
201
+ updated = base.entry;
202
+ changed = base.changed;
203
+ }
204
+ const providerStreaming = normalizeStreamingAliasesForProvider({
205
+ provider,
206
+ entry: updated,
207
+ pathPrefix: `channels.${provider}`
208
+ });
209
+ updated = providerStreaming.entry;
210
+ changed = changed || providerStreaming.changed;
211
+ const rawAccounts = updated.accounts;
212
+ if (isRecord(rawAccounts)) {
213
+ let accountsChanged = false;
214
+ const accounts = { ...rawAccounts };
215
+ for (const [accountId, rawAccount] of Object.entries(rawAccounts)) {
216
+ if (!isRecord(rawAccount)) continue;
217
+ let accountEntry = rawAccount;
218
+ let accountChanged = false;
219
+ if (provider !== "telegram") {
220
+ const res = normalizeDmAliases({
221
+ provider,
222
+ entry: rawAccount,
223
+ pathPrefix: `channels.${provider}.accounts.${accountId}`
224
+ });
225
+ accountEntry = res.entry;
226
+ accountChanged = res.changed;
227
+ }
228
+ const accountStreaming = normalizeStreamingAliasesForProvider({
229
+ provider,
230
+ entry: accountEntry,
231
+ pathPrefix: `channels.${provider}.accounts.${accountId}`
232
+ });
233
+ accountEntry = accountStreaming.entry;
234
+ accountChanged = accountChanged || accountStreaming.changed;
235
+ if (accountChanged) {
236
+ accounts[accountId] = accountEntry;
237
+ accountsChanged = true;
238
+ }
239
+ }
240
+ if (accountsChanged) {
241
+ updated = {
242
+ ...updated,
243
+ accounts
244
+ };
245
+ changed = true;
246
+ }
247
+ }
248
+ if (changed) next = {
249
+ ...next,
250
+ channels: {
251
+ ...next.channels,
252
+ [provider]: updated
253
+ }
254
+ };
255
+ };
256
+ normalizeProvider("telegram");
257
+ normalizeProvider("slack");
258
+ normalizeProvider("discord");
259
+ const normalizeBrowserSsrFPolicyAlias = () => {
260
+ const rawBrowser = next.browser;
261
+ if (!isRecord(rawBrowser)) return;
262
+ const rawSsrFPolicy = rawBrowser.ssrfPolicy;
263
+ if (!isRecord(rawSsrFPolicy) || !("allowPrivateNetwork" in rawSsrFPolicy)) return;
264
+ const legacyAllowPrivateNetwork = rawSsrFPolicy.allowPrivateNetwork;
265
+ const currentDangerousAllowPrivateNetwork = rawSsrFPolicy.dangerouslyAllowPrivateNetwork;
266
+ let resolvedDangerousAllowPrivateNetwork = currentDangerousAllowPrivateNetwork;
267
+ if (typeof legacyAllowPrivateNetwork === "boolean" || typeof currentDangerousAllowPrivateNetwork === "boolean") resolvedDangerousAllowPrivateNetwork = legacyAllowPrivateNetwork === true || currentDangerousAllowPrivateNetwork === true;
268
+ else if (currentDangerousAllowPrivateNetwork === void 0) resolvedDangerousAllowPrivateNetwork = legacyAllowPrivateNetwork;
269
+ const nextSsrFPolicy = { ...rawSsrFPolicy };
270
+ delete nextSsrFPolicy.allowPrivateNetwork;
271
+ if (resolvedDangerousAllowPrivateNetwork !== void 0) nextSsrFPolicy.dangerouslyAllowPrivateNetwork = resolvedDangerousAllowPrivateNetwork;
272
+ const migratedBrowser = { ...next.browser };
273
+ migratedBrowser.ssrfPolicy = nextSsrFPolicy;
274
+ next = {
275
+ ...next,
276
+ browser: migratedBrowser
277
+ };
278
+ changes.push(`Moved browser.ssrfPolicy.allowPrivateNetwork → browser.ssrfPolicy.dangerouslyAllowPrivateNetwork (${String(resolvedDangerousAllowPrivateNetwork)}).`);
279
+ };
280
+ normalizeBrowserSsrFPolicyAlias();
281
+ const legacyAckReaction = cfg.messages?.ackReaction?.trim();
282
+ const hasWhatsAppConfig = cfg.channels?.whatsapp !== void 0;
283
+ if (legacyAckReaction && hasWhatsAppConfig) {
284
+ if (!(cfg.channels?.whatsapp?.ackReaction !== void 0)) {
285
+ const legacyScope = cfg.messages?.ackReactionScope ?? "group-mentions";
286
+ let direct = true;
287
+ let group = "mentions";
288
+ if (legacyScope === "all") {
289
+ direct = true;
290
+ group = "always";
291
+ } else if (legacyScope === "direct") {
292
+ direct = true;
293
+ group = "never";
294
+ } else if (legacyScope === "group-all") {
295
+ direct = false;
296
+ group = "always";
297
+ } else if (legacyScope === "group-mentions") {
298
+ direct = false;
299
+ group = "mentions";
300
+ }
301
+ next = {
302
+ ...next,
303
+ channels: {
304
+ ...next.channels,
305
+ whatsapp: {
306
+ ...next.channels?.whatsapp,
307
+ ackReaction: {
308
+ emoji: legacyAckReaction,
309
+ direct,
310
+ group
311
+ }
312
+ }
313
+ }
314
+ };
315
+ changes.push(`Copied messages.ackReaction → channels.whatsapp.ackReaction (scope: ${legacyScope}).`);
316
+ }
317
+ }
318
+ return {
319
+ config: next,
320
+ changes
321
+ };
322
+ }
323
+
324
+ //#endregion
325
+ //#region src/infra/state-migrations.fs.ts
326
+ function safeReadDir(dir) {
327
+ try {
328
+ return fs.readdirSync(dir, { withFileTypes: true });
329
+ } catch {
330
+ return [];
331
+ }
332
+ }
333
+ function existsDir(dir) {
334
+ try {
335
+ return fs.existsSync(dir) && fs.statSync(dir).isDirectory();
336
+ } catch {
337
+ return false;
338
+ }
339
+ }
340
+ function ensureDir(dir) {
341
+ fs.mkdirSync(dir, { recursive: true });
342
+ }
343
+ function fileExists(p) {
344
+ try {
345
+ return fs.existsSync(p) && fs.statSync(p).isFile();
346
+ } catch {
347
+ return false;
348
+ }
349
+ }
350
+ function isLegacyWhatsAppAuthFile(name) {
351
+ if (name === "creds.json" || name === "creds.json.bak") return true;
352
+ if (!name.endsWith(".json")) return false;
353
+ return /^(app-state-sync|session|sender-key|pre-key)-/.test(name);
354
+ }
355
+ function readSessionStoreJson5(storePath) {
356
+ try {
357
+ const raw = fs.readFileSync(storePath, "utf-8");
358
+ const parsed = JSON5.parse(raw);
359
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) return {
360
+ store: parsed,
361
+ ok: true
362
+ };
363
+ } catch {}
364
+ return {
365
+ store: {},
366
+ ok: false
367
+ };
368
+ }
369
+
370
+ //#endregion
371
+ //#region src/infra/state-migrations.ts
372
+ let autoMigrateStateDirChecked = false;
373
+ function isSurfaceGroupKey(key) {
374
+ return key.includes(":group:") || key.includes(":channel:");
375
+ }
376
+ function isLegacyGroupKey(key) {
377
+ const trimmed = key.trim();
378
+ if (!trimmed) return false;
379
+ if (trimmed.startsWith("group:")) return true;
380
+ const lower = trimmed.toLowerCase();
381
+ if (!lower.includes("@g.us")) return false;
382
+ if (!trimmed.includes(":")) return true;
383
+ if (lower.startsWith("whatsapp:") && !trimmed.includes(":group:")) return true;
384
+ return false;
385
+ }
386
+ function canonicalizeSessionKeyForAgent(params) {
387
+ const agentId = normalizeAgentId(params.agentId);
388
+ const raw = params.key.trim();
389
+ if (!raw) return raw;
390
+ if (raw.toLowerCase() === "global" || raw.toLowerCase() === "unknown") return raw.toLowerCase();
391
+ const canonicalMain = canonicalizeMainSessionAlias({
392
+ cfg: { session: {
393
+ scope: params.scope,
394
+ mainKey: params.mainKey
395
+ } },
396
+ agentId,
397
+ sessionKey: raw
398
+ });
399
+ if (canonicalMain !== raw) return canonicalMain.toLowerCase();
400
+ if (raw.toLowerCase().startsWith("agent:")) return raw.toLowerCase();
401
+ if (raw.toLowerCase().startsWith("subagent:")) return `agent:${agentId}:subagent:${raw.slice(9)}`.toLowerCase();
402
+ if (raw.startsWith("group:")) {
403
+ const id = raw.slice(6).trim();
404
+ if (!id) return raw;
405
+ return `agent:${agentId}:${id.toLowerCase().includes("@g.us") ? "whatsapp" : "unknown"}:group:${id}`.toLowerCase();
406
+ }
407
+ if (!raw.includes(":") && raw.toLowerCase().includes("@g.us")) return `agent:${agentId}:whatsapp:group:${raw}`.toLowerCase();
408
+ if (raw.toLowerCase().startsWith("whatsapp:") && raw.toLowerCase().includes("@g.us")) {
409
+ const cleaned = raw.slice(9).trim().replace(/^group:/i, "").trim();
410
+ if (cleaned && !isSurfaceGroupKey(raw)) return `agent:${agentId}:whatsapp:group:${cleaned}`.toLowerCase();
411
+ }
412
+ if (isSurfaceGroupKey(raw)) return `agent:${agentId}:${raw}`.toLowerCase();
413
+ return `agent:${agentId}:${raw}`.toLowerCase();
414
+ }
415
+ function pickLatestLegacyDirectEntry(store) {
416
+ let best = null;
417
+ let bestUpdated = -1;
418
+ for (const [key, entry] of Object.entries(store)) {
419
+ if (!entry || typeof entry !== "object") continue;
420
+ const normalized = key.trim();
421
+ if (!normalized) continue;
422
+ if (normalized === "global") continue;
423
+ if (normalized.startsWith("agent:")) continue;
424
+ if (normalized.toLowerCase().startsWith("subagent:")) continue;
425
+ if (isLegacyGroupKey(normalized) || isSurfaceGroupKey(normalized)) continue;
426
+ const updatedAt = typeof entry.updatedAt === "number" ? entry.updatedAt : 0;
427
+ if (updatedAt > bestUpdated) {
428
+ bestUpdated = updatedAt;
429
+ best = entry;
430
+ }
431
+ }
432
+ return best;
433
+ }
434
+ function normalizeSessionEntry(entry) {
435
+ const sessionId = typeof entry.sessionId === "string" ? entry.sessionId : null;
436
+ if (!sessionId) return null;
437
+ const updatedAt = typeof entry.updatedAt === "number" && Number.isFinite(entry.updatedAt) ? entry.updatedAt : Date.now();
438
+ const normalized = {
439
+ ...entry,
440
+ sessionId,
441
+ updatedAt
442
+ };
443
+ const rec = normalized;
444
+ if (typeof rec.groupChannel !== "string" && typeof rec.room === "string") rec.groupChannel = rec.room;
445
+ delete rec.room;
446
+ return normalized;
447
+ }
448
+ function resolveUpdatedAt(entry) {
449
+ return typeof entry.updatedAt === "number" && Number.isFinite(entry.updatedAt) ? entry.updatedAt : 0;
450
+ }
451
+ function mergeSessionEntry(params) {
452
+ if (!params.existing) return params.incoming;
453
+ const existingUpdated = resolveUpdatedAt(params.existing);
454
+ const incomingUpdated = resolveUpdatedAt(params.incoming);
455
+ if (incomingUpdated > existingUpdated) return params.incoming;
456
+ if (incomingUpdated < existingUpdated) return params.existing;
457
+ return params.preferIncomingOnTie ? params.incoming : params.existing;
458
+ }
459
+ function canonicalizeSessionStore(params) {
460
+ const canonical = {};
461
+ const meta = /* @__PURE__ */ new Map();
462
+ const legacyKeys = [];
463
+ for (const [key, entry] of Object.entries(params.store)) {
464
+ if (!entry || typeof entry !== "object") continue;
465
+ const canonicalKey = canonicalizeSessionKeyForAgent({
466
+ key,
467
+ agentId: params.agentId,
468
+ mainKey: params.mainKey,
469
+ scope: params.scope
470
+ });
471
+ const isCanonical = canonicalKey === key;
472
+ if (!isCanonical) legacyKeys.push(key);
473
+ const existing = canonical[canonicalKey];
474
+ if (!existing) {
475
+ canonical[canonicalKey] = entry;
476
+ meta.set(canonicalKey, {
477
+ isCanonical,
478
+ updatedAt: resolveUpdatedAt(entry)
479
+ });
480
+ continue;
481
+ }
482
+ const existingMeta = meta.get(canonicalKey);
483
+ const incomingUpdated = resolveUpdatedAt(entry);
484
+ const existingUpdated = existingMeta?.updatedAt ?? resolveUpdatedAt(existing);
485
+ if (incomingUpdated > existingUpdated) {
486
+ canonical[canonicalKey] = entry;
487
+ meta.set(canonicalKey, {
488
+ isCanonical,
489
+ updatedAt: incomingUpdated
490
+ });
491
+ continue;
492
+ }
493
+ if (incomingUpdated < existingUpdated) continue;
494
+ if (existingMeta?.isCanonical && !isCanonical) continue;
495
+ if (!existingMeta?.isCanonical && isCanonical) {
496
+ canonical[canonicalKey] = entry;
497
+ meta.set(canonicalKey, {
498
+ isCanonical,
499
+ updatedAt: incomingUpdated
500
+ });
501
+ continue;
502
+ }
503
+ }
504
+ return {
505
+ store: canonical,
506
+ legacyKeys
507
+ };
508
+ }
509
+ function listLegacySessionKeys(params) {
510
+ const legacy = [];
511
+ for (const key of Object.keys(params.store)) if (canonicalizeSessionKeyForAgent({
512
+ key,
513
+ agentId: params.agentId,
514
+ mainKey: params.mainKey,
515
+ scope: params.scope
516
+ }) !== key) legacy.push(key);
517
+ return legacy;
518
+ }
519
+ function emptyDirOrMissing(dir) {
520
+ if (!existsDir(dir)) return true;
521
+ return safeReadDir(dir).length === 0;
522
+ }
523
+ function removeDirIfEmpty(dir) {
524
+ if (!existsDir(dir)) return;
525
+ if (!emptyDirOrMissing(dir)) return;
526
+ try {
527
+ fs.rmdirSync(dir);
528
+ } catch {}
529
+ }
530
+ function resolveSymlinkTarget(linkPath) {
531
+ try {
532
+ const target = fs.readlinkSync(linkPath);
533
+ return path.resolve(path.dirname(linkPath), target);
534
+ } catch {
535
+ return null;
536
+ }
537
+ }
538
+ function formatStateDirMigration(legacyDir, targetDir) {
539
+ return `State dir: ${legacyDir} → ${targetDir} (legacy path now symlinked)`;
540
+ }
541
+ function isDirPath(filePath) {
542
+ try {
543
+ return fs.statSync(filePath).isDirectory();
544
+ } catch {
545
+ return false;
546
+ }
547
+ }
548
+ function isLegacyTreeSymlinkMirror(currentDir, realTargetDir) {
549
+ let entries;
550
+ try {
551
+ entries = fs.readdirSync(currentDir, { withFileTypes: true });
552
+ } catch {
553
+ return false;
554
+ }
555
+ if (entries.length === 0) return false;
556
+ for (const entry of entries) {
557
+ const entryPath = path.join(currentDir, entry.name);
558
+ let stat;
559
+ try {
560
+ stat = fs.lstatSync(entryPath);
561
+ } catch {
562
+ return false;
563
+ }
564
+ if (stat.isSymbolicLink()) {
565
+ const resolvedTarget = resolveSymlinkTarget(entryPath);
566
+ if (!resolvedTarget) return false;
567
+ let resolvedRealTarget;
568
+ try {
569
+ resolvedRealTarget = fs.realpathSync(resolvedTarget);
570
+ } catch {
571
+ return false;
572
+ }
573
+ if (!isWithinDir(realTargetDir, resolvedRealTarget)) return false;
574
+ continue;
575
+ }
576
+ if (stat.isDirectory()) {
577
+ if (!isLegacyTreeSymlinkMirror(entryPath, realTargetDir)) return false;
578
+ continue;
579
+ }
580
+ return false;
581
+ }
582
+ return true;
583
+ }
584
+ function isLegacyDirSymlinkMirror(legacyDir, targetDir) {
585
+ let realTargetDir;
586
+ try {
587
+ realTargetDir = fs.realpathSync(targetDir);
588
+ } catch {
589
+ return false;
590
+ }
591
+ return isLegacyTreeSymlinkMirror(legacyDir, realTargetDir);
592
+ }
593
+ async function autoMigrateLegacyStateDir(params) {
594
+ if (autoMigrateStateDirChecked) return {
595
+ migrated: false,
596
+ skipped: true,
597
+ changes: [],
598
+ warnings: []
599
+ };
600
+ autoMigrateStateDirChecked = true;
601
+ if ((params.env ?? process.env).REMOTECLAW_STATE_DIR?.trim()) return {
602
+ migrated: false,
603
+ skipped: true,
604
+ changes: [],
605
+ warnings: []
606
+ };
607
+ const homedir = params.homedir ?? os.homedir;
608
+ const targetDir = resolveNewStateDir(homedir);
609
+ const legacyDirs = resolveLegacyStateDirs(homedir);
610
+ let legacyDir = legacyDirs.find((dir) => {
611
+ try {
612
+ return fs.existsSync(dir);
613
+ } catch {
614
+ return false;
615
+ }
616
+ });
617
+ const warnings = [];
618
+ const changes = [];
619
+ let legacyStat = null;
620
+ try {
621
+ legacyStat = legacyDir ? fs.lstatSync(legacyDir) : null;
622
+ } catch {
623
+ legacyStat = null;
624
+ }
625
+ if (!legacyStat) return {
626
+ migrated: false,
627
+ skipped: false,
628
+ changes,
629
+ warnings
630
+ };
631
+ if (!legacyStat.isDirectory() && !legacyStat.isSymbolicLink()) {
632
+ warnings.push(`Legacy state path is not a directory: ${legacyDir}`);
633
+ return {
634
+ migrated: false,
635
+ skipped: false,
636
+ changes,
637
+ warnings
638
+ };
639
+ }
640
+ let symlinkDepth = 0;
641
+ while (legacyStat.isSymbolicLink()) {
642
+ const legacyTarget = legacyDir ? resolveSymlinkTarget(legacyDir) : null;
643
+ if (!legacyTarget) {
644
+ warnings.push(`Legacy state dir is a symlink (${legacyDir ?? "unknown"}); could not resolve target.`);
645
+ return {
646
+ migrated: false,
647
+ skipped: false,
648
+ changes,
649
+ warnings
650
+ };
651
+ }
652
+ if (path.resolve(legacyTarget) === path.resolve(targetDir)) return {
653
+ migrated: false,
654
+ skipped: false,
655
+ changes,
656
+ warnings
657
+ };
658
+ if (legacyDirs.some((dir) => path.resolve(dir) === path.resolve(legacyTarget))) {
659
+ legacyDir = legacyTarget;
660
+ try {
661
+ legacyStat = fs.lstatSync(legacyDir);
662
+ } catch {
663
+ legacyStat = null;
664
+ }
665
+ if (!legacyStat) {
666
+ warnings.push(`Legacy state dir missing after symlink resolution: ${legacyDir}`);
667
+ return {
668
+ migrated: false,
669
+ skipped: false,
670
+ changes,
671
+ warnings
672
+ };
673
+ }
674
+ if (!legacyStat.isDirectory() && !legacyStat.isSymbolicLink()) {
675
+ warnings.push(`Legacy state path is not a directory: ${legacyDir}`);
676
+ return {
677
+ migrated: false,
678
+ skipped: false,
679
+ changes,
680
+ warnings
681
+ };
682
+ }
683
+ symlinkDepth += 1;
684
+ if (symlinkDepth > 2) {
685
+ warnings.push(`Legacy state dir symlink chain too deep: ${legacyDir}`);
686
+ return {
687
+ migrated: false,
688
+ skipped: false,
689
+ changes,
690
+ warnings
691
+ };
692
+ }
693
+ continue;
694
+ }
695
+ warnings.push(`Legacy state dir is a symlink (${legacyDir ?? "unknown"} → ${legacyTarget}); skipping auto-migration.`);
696
+ return {
697
+ migrated: false,
698
+ skipped: false,
699
+ changes,
700
+ warnings
701
+ };
702
+ }
703
+ if (isDirPath(targetDir)) {
704
+ if (legacyDir && isLegacyDirSymlinkMirror(legacyDir, targetDir)) return {
705
+ migrated: false,
706
+ skipped: false,
707
+ changes,
708
+ warnings
709
+ };
710
+ warnings.push(`State dir migration skipped: target already exists (${targetDir}). Remove or merge manually.`);
711
+ return {
712
+ migrated: false,
713
+ skipped: false,
714
+ changes,
715
+ warnings
716
+ };
717
+ }
718
+ try {
719
+ if (!legacyDir) throw new Error("Legacy state dir not found");
720
+ fs.renameSync(legacyDir, targetDir);
721
+ } catch (err) {
722
+ warnings.push(`Failed to move legacy state dir (${legacyDir ?? "unknown"} → ${targetDir}): ${String(err)}`);
723
+ return {
724
+ migrated: false,
725
+ skipped: false,
726
+ changes,
727
+ warnings
728
+ };
729
+ }
730
+ try {
731
+ if (!legacyDir) throw new Error("Legacy state dir not found");
732
+ fs.symlinkSync(targetDir, legacyDir, "dir");
733
+ changes.push(formatStateDirMigration(legacyDir, targetDir));
734
+ } catch (err) {
735
+ try {
736
+ if (process.platform === "win32") {
737
+ if (!legacyDir) throw new Error("Legacy state dir not found", { cause: err });
738
+ fs.symlinkSync(targetDir, legacyDir, "junction");
739
+ changes.push(formatStateDirMigration(legacyDir, targetDir));
740
+ } else throw err;
741
+ } catch (fallbackErr) {
742
+ try {
743
+ if (!legacyDir) throw new Error("Legacy state dir not found", { cause: fallbackErr });
744
+ fs.renameSync(targetDir, legacyDir);
745
+ warnings.push(`State dir migration rolled back (failed to link legacy path): ${String(fallbackErr)}`);
746
+ return {
747
+ migrated: false,
748
+ skipped: false,
749
+ changes: [],
750
+ warnings
751
+ };
752
+ } catch (rollbackErr) {
753
+ warnings.push(`State dir moved but failed to link legacy path (${legacyDir ?? "unknown"} → ${targetDir}): ${String(fallbackErr)}`);
754
+ warnings.push(`Rollback failed; set REMOTECLAW_STATE_DIR=${targetDir} to avoid split state: ${String(rollbackErr)}`);
755
+ changes.push(`State dir: ${legacyDir ?? "unknown"} → ${targetDir}`);
756
+ }
757
+ }
758
+ }
759
+ return {
760
+ migrated: changes.length > 0,
761
+ skipped: false,
762
+ changes,
763
+ warnings
764
+ };
765
+ }
766
+ async function detectLegacyStateMigrations(params) {
767
+ const env = params.env ?? process.env;
768
+ const stateDir = resolveStateDir(env, params.homedir ?? os.homedir);
769
+ const oauthDir = resolveOAuthDir(env, stateDir);
770
+ const targetAgentId = normalizeAgentId(resolveDefaultAgentId(params.cfg));
771
+ const rawMainKey = params.cfg.session?.mainKey;
772
+ const targetMainKey = typeof rawMainKey === "string" && rawMainKey.trim().length > 0 ? rawMainKey.trim() : DEFAULT_MAIN_KEY;
773
+ const targetScope = params.cfg.session?.scope;
774
+ const sessionsLegacyDir = path.join(stateDir, "sessions");
775
+ const sessionsLegacyStorePath = path.join(sessionsLegacyDir, "sessions.json");
776
+ const sessionsTargetDir = path.join(stateDir, "agents", targetAgentId, "sessions");
777
+ const sessionsTargetStorePath = path.join(sessionsTargetDir, "sessions.json");
778
+ const legacySessionEntries = safeReadDir(sessionsLegacyDir);
779
+ const hasLegacySessions = fileExists(sessionsLegacyStorePath) || legacySessionEntries.some((e) => e.isFile() && e.name.endsWith(".jsonl"));
780
+ const targetSessionParsed = fileExists(sessionsTargetStorePath) ? readSessionStoreJson5(sessionsTargetStorePath) : {
781
+ store: {},
782
+ ok: true
783
+ };
784
+ const legacyKeys = targetSessionParsed.ok ? listLegacySessionKeys({
785
+ store: targetSessionParsed.store,
786
+ agentId: targetAgentId,
787
+ mainKey: targetMainKey,
788
+ scope: targetScope
789
+ }) : [];
790
+ const legacyAgentDir = path.join(stateDir, "agent");
791
+ const targetAgentDir = path.join(stateDir, "agents", targetAgentId, "agent");
792
+ const hasLegacyAgentDir = existsDir(legacyAgentDir);
793
+ const targetWhatsAppAuthDir = path.join(oauthDir, "whatsapp", DEFAULT_ACCOUNT_ID);
794
+ const hasLegacyWhatsAppAuth = fileExists(path.join(oauthDir, "creds.json")) && !fileExists(path.join(targetWhatsAppAuthDir, "creds.json"));
795
+ const legacyTelegramAllowFromPath = path.join(oauthDir, "telegram-allowFrom.json");
796
+ const targetTelegramAllowFromPath = path.join(oauthDir, `telegram-${DEFAULT_ACCOUNT_ID}-allowFrom.json`);
797
+ const hasLegacyTelegramAllowFrom = fileExists(legacyTelegramAllowFromPath) && !fileExists(targetTelegramAllowFromPath);
798
+ const preview = [];
799
+ if (hasLegacySessions) preview.push(`- Sessions: ${sessionsLegacyDir} → ${sessionsTargetDir}`);
800
+ if (legacyKeys.length > 0) preview.push(`- Sessions: canonicalize legacy keys in ${sessionsTargetStorePath}`);
801
+ if (hasLegacyAgentDir) preview.push(`- Agent dir: ${legacyAgentDir} → ${targetAgentDir}`);
802
+ if (hasLegacyWhatsAppAuth) preview.push(`- WhatsApp auth: ${oauthDir} → ${targetWhatsAppAuthDir} (keep oauth.json)`);
803
+ if (hasLegacyTelegramAllowFrom) preview.push(`- Telegram pairing allowFrom: ${legacyTelegramAllowFromPath} → ${targetTelegramAllowFromPath}`);
804
+ return {
805
+ targetAgentId,
806
+ targetMainKey,
807
+ targetScope,
808
+ stateDir,
809
+ oauthDir,
810
+ sessions: {
811
+ legacyDir: sessionsLegacyDir,
812
+ legacyStorePath: sessionsLegacyStorePath,
813
+ targetDir: sessionsTargetDir,
814
+ targetStorePath: sessionsTargetStorePath,
815
+ hasLegacy: hasLegacySessions || legacyKeys.length > 0,
816
+ legacyKeys
817
+ },
818
+ agentDir: {
819
+ legacyDir: legacyAgentDir,
820
+ targetDir: targetAgentDir,
821
+ hasLegacy: hasLegacyAgentDir
822
+ },
823
+ whatsappAuth: {
824
+ legacyDir: oauthDir,
825
+ targetDir: targetWhatsAppAuthDir,
826
+ hasLegacy: hasLegacyWhatsAppAuth
827
+ },
828
+ pairingAllowFrom: {
829
+ legacyTelegramPath: legacyTelegramAllowFromPath,
830
+ targetTelegramPath: targetTelegramAllowFromPath,
831
+ hasLegacyTelegram: hasLegacyTelegramAllowFrom
832
+ },
833
+ preview
834
+ };
835
+ }
836
+ async function migrateLegacySessions(detected, now) {
837
+ const changes = [];
838
+ const warnings = [];
839
+ if (!detected.sessions.hasLegacy) return {
840
+ changes,
841
+ warnings
842
+ };
843
+ ensureDir(detected.sessions.targetDir);
844
+ const legacyParsed = fileExists(detected.sessions.legacyStorePath) ? readSessionStoreJson5(detected.sessions.legacyStorePath) : {
845
+ store: {},
846
+ ok: true
847
+ };
848
+ const targetParsed = fileExists(detected.sessions.targetStorePath) ? readSessionStoreJson5(detected.sessions.targetStorePath) : {
849
+ store: {},
850
+ ok: true
851
+ };
852
+ const legacyStore = legacyParsed.store;
853
+ const targetStore = targetParsed.store;
854
+ const canonicalizedTarget = canonicalizeSessionStore({
855
+ store: targetStore,
856
+ agentId: detected.targetAgentId,
857
+ mainKey: detected.targetMainKey,
858
+ scope: detected.targetScope
859
+ });
860
+ const canonicalizedLegacy = canonicalizeSessionStore({
861
+ store: legacyStore,
862
+ agentId: detected.targetAgentId,
863
+ mainKey: detected.targetMainKey,
864
+ scope: detected.targetScope
865
+ });
866
+ const merged = { ...canonicalizedTarget.store };
867
+ for (const [key, entry] of Object.entries(canonicalizedLegacy.store)) merged[key] = mergeSessionEntry({
868
+ existing: merged[key],
869
+ incoming: entry,
870
+ preferIncomingOnTie: false
871
+ });
872
+ const mainKey = buildAgentMainSessionKey({
873
+ agentId: detected.targetAgentId,
874
+ mainKey: detected.targetMainKey
875
+ });
876
+ if (!merged[mainKey]) {
877
+ const latest = pickLatestLegacyDirectEntry(legacyStore);
878
+ if (latest?.sessionId) {
879
+ merged[mainKey] = latest;
880
+ changes.push(`Migrated latest direct-chat session → ${mainKey}`);
881
+ }
882
+ }
883
+ if (!legacyParsed.ok) warnings.push(`Legacy sessions store unreadable; left in place at ${detected.sessions.legacyStorePath}`);
884
+ if ((legacyParsed.ok || targetParsed.ok) && (Object.keys(legacyStore).length > 0 || Object.keys(targetStore).length > 0)) {
885
+ const normalized = {};
886
+ for (const [key, entry] of Object.entries(merged)) {
887
+ const normalizedEntry = normalizeSessionEntry(entry);
888
+ if (!normalizedEntry) continue;
889
+ normalized[key] = normalizedEntry;
890
+ }
891
+ await saveSessionStore(detected.sessions.targetStorePath, normalized, { skipMaintenance: true });
892
+ changes.push(`Merged sessions store → ${detected.sessions.targetStorePath}`);
893
+ if (canonicalizedTarget.legacyKeys.length > 0) changes.push(`Canonicalized ${canonicalizedTarget.legacyKeys.length} legacy session key(s)`);
894
+ }
895
+ const entries = safeReadDir(detected.sessions.legacyDir);
896
+ for (const entry of entries) {
897
+ if (!entry.isFile()) continue;
898
+ if (entry.name === "sessions.json") continue;
899
+ const from = path.join(detected.sessions.legacyDir, entry.name);
900
+ const to = path.join(detected.sessions.targetDir, entry.name);
901
+ if (fileExists(to)) continue;
902
+ try {
903
+ fs.renameSync(from, to);
904
+ changes.push(`Moved ${entry.name} → agents/${detected.targetAgentId}/sessions`);
905
+ } catch (err) {
906
+ warnings.push(`Failed moving ${from}: ${String(err)}`);
907
+ }
908
+ }
909
+ if (legacyParsed.ok) try {
910
+ if (fileExists(detected.sessions.legacyStorePath)) fs.rmSync(detected.sessions.legacyStorePath, { force: true });
911
+ } catch {}
912
+ removeDirIfEmpty(detected.sessions.legacyDir);
913
+ if (safeReadDir(detected.sessions.legacyDir).filter((e) => e.isFile()).length > 0) {
914
+ const backupDir = `${detected.sessions.legacyDir}.legacy-${now()}`;
915
+ try {
916
+ fs.renameSync(detected.sessions.legacyDir, backupDir);
917
+ warnings.push(`Left legacy sessions at ${backupDir}`);
918
+ } catch {}
919
+ }
920
+ return {
921
+ changes,
922
+ warnings
923
+ };
924
+ }
925
+ async function migrateLegacyAgentDir(detected, now) {
926
+ const changes = [];
927
+ const warnings = [];
928
+ if (!detected.agentDir.hasLegacy) return {
929
+ changes,
930
+ warnings
931
+ };
932
+ ensureDir(detected.agentDir.targetDir);
933
+ const entries = safeReadDir(detected.agentDir.legacyDir);
934
+ for (const entry of entries) {
935
+ const from = path.join(detected.agentDir.legacyDir, entry.name);
936
+ const to = path.join(detected.agentDir.targetDir, entry.name);
937
+ if (fs.existsSync(to)) continue;
938
+ try {
939
+ fs.renameSync(from, to);
940
+ changes.push(`Moved agent file ${entry.name} → agents/${detected.targetAgentId}/agent`);
941
+ } catch (err) {
942
+ warnings.push(`Failed moving ${from}: ${String(err)}`);
943
+ }
944
+ }
945
+ removeDirIfEmpty(detected.agentDir.legacyDir);
946
+ if (!emptyDirOrMissing(detected.agentDir.legacyDir)) {
947
+ const backupDir = path.join(detected.stateDir, "agents", detected.targetAgentId, `agent.legacy-${now()}`);
948
+ try {
949
+ fs.renameSync(detected.agentDir.legacyDir, backupDir);
950
+ warnings.push(`Left legacy agent dir at ${backupDir}`);
951
+ } catch (err) {
952
+ warnings.push(`Failed relocating legacy agent dir: ${String(err)}`);
953
+ }
954
+ }
955
+ return {
956
+ changes,
957
+ warnings
958
+ };
959
+ }
960
+ async function migrateLegacyWhatsAppAuth(detected) {
961
+ const changes = [];
962
+ const warnings = [];
963
+ if (!detected.whatsappAuth.hasLegacy) return {
964
+ changes,
965
+ warnings
966
+ };
967
+ ensureDir(detected.whatsappAuth.targetDir);
968
+ const entries = safeReadDir(detected.whatsappAuth.legacyDir);
969
+ for (const entry of entries) {
970
+ if (!entry.isFile()) continue;
971
+ if (entry.name === "oauth.json") continue;
972
+ if (!isLegacyWhatsAppAuthFile(entry.name)) continue;
973
+ const from = path.join(detected.whatsappAuth.legacyDir, entry.name);
974
+ const to = path.join(detected.whatsappAuth.targetDir, entry.name);
975
+ if (fileExists(to)) continue;
976
+ try {
977
+ fs.renameSync(from, to);
978
+ changes.push(`Moved WhatsApp auth ${entry.name} → whatsapp/default`);
979
+ } catch (err) {
980
+ warnings.push(`Failed moving ${from}: ${String(err)}`);
981
+ }
982
+ }
983
+ return {
984
+ changes,
985
+ warnings
986
+ };
987
+ }
988
+ async function migrateLegacyTelegramPairingAllowFrom(detected) {
989
+ const changes = [];
990
+ const warnings = [];
991
+ if (!detected.pairingAllowFrom.hasLegacyTelegram) return {
992
+ changes,
993
+ warnings
994
+ };
995
+ const legacyPath = detected.pairingAllowFrom.legacyTelegramPath;
996
+ const targetPath = detected.pairingAllowFrom.targetTelegramPath;
997
+ try {
998
+ ensureDir(path.dirname(targetPath));
999
+ fs.copyFileSync(legacyPath, targetPath);
1000
+ changes.push(`Copied Telegram pairing allowFrom → ${targetPath}`);
1001
+ } catch (err) {
1002
+ warnings.push(`Failed migrating Telegram pairing allowFrom (${legacyPath}): ${String(err)}`);
1003
+ }
1004
+ return {
1005
+ changes,
1006
+ warnings
1007
+ };
1008
+ }
1009
+ async function runLegacyStateMigrations(params) {
1010
+ const now = params.now ?? (() => Date.now());
1011
+ const detected = params.detected;
1012
+ const sessions = await migrateLegacySessions(detected, now);
1013
+ const agentDir = await migrateLegacyAgentDir(detected, now);
1014
+ const whatsappAuth = await migrateLegacyWhatsAppAuth(detected);
1015
+ const telegramPairingAllowFrom = await migrateLegacyTelegramPairingAllowFrom(detected);
1016
+ return {
1017
+ changes: [
1018
+ ...sessions.changes,
1019
+ ...agentDir.changes,
1020
+ ...whatsappAuth.changes,
1021
+ ...telegramPairingAllowFrom.changes
1022
+ ],
1023
+ warnings: [
1024
+ ...sessions.warnings,
1025
+ ...agentDir.warnings,
1026
+ ...whatsappAuth.warnings,
1027
+ ...telegramPairingAllowFrom.warnings
1028
+ ]
1029
+ };
1030
+ }
1031
+
1032
+ //#endregion
1033
+ //#region src/commands/doctor-config-flow.ts
1034
+ function normalizeIssuePath(path) {
1035
+ return path.filter((part) => typeof part !== "symbol");
1036
+ }
1037
+ function isUnrecognizedKeysIssue(issue) {
1038
+ return issue.code === "unrecognized_keys";
1039
+ }
1040
+ function formatPath(parts) {
1041
+ if (parts.length === 0) return "<root>";
1042
+ let out = "";
1043
+ for (const part of parts) {
1044
+ if (typeof part === "number") {
1045
+ out += `[${part}]`;
1046
+ continue;
1047
+ }
1048
+ out = out ? `${out}.${part}` : part;
1049
+ }
1050
+ return out || "<root>";
1051
+ }
1052
+ function resolvePathTarget(root, path) {
1053
+ let current = root;
1054
+ for (const part of path) {
1055
+ if (typeof part === "number") {
1056
+ if (!Array.isArray(current)) return null;
1057
+ if (part < 0 || part >= current.length) return null;
1058
+ current = current[part];
1059
+ continue;
1060
+ }
1061
+ if (!current || typeof current !== "object" || Array.isArray(current)) return null;
1062
+ const record = current;
1063
+ if (!(part in record)) return null;
1064
+ current = record[part];
1065
+ }
1066
+ return current;
1067
+ }
1068
+ function stripUnknownConfigKeys(config) {
1069
+ const parsed = RemoteClawSchema.safeParse(config);
1070
+ if (parsed.success) return {
1071
+ config,
1072
+ removed: []
1073
+ };
1074
+ const next = structuredClone(config);
1075
+ const removed = [];
1076
+ for (const issue of parsed.error.issues) {
1077
+ if (!isUnrecognizedKeysIssue(issue)) continue;
1078
+ const path = normalizeIssuePath(issue.path);
1079
+ const target = resolvePathTarget(next, path);
1080
+ if (!target || typeof target !== "object" || Array.isArray(target)) continue;
1081
+ const record = target;
1082
+ for (const key of issue.keys) {
1083
+ if (typeof key !== "string") continue;
1084
+ if (!(key in record)) continue;
1085
+ delete record[key];
1086
+ removed.push(formatPath([...path, key]));
1087
+ }
1088
+ }
1089
+ return {
1090
+ config: next,
1091
+ removed
1092
+ };
1093
+ }
1094
+ function noteOpencodeProviderOverrides(_cfg) {}
1095
+ function noteIncludeConfinementWarning(snapshot) {
1096
+ const includeIssue = (snapshot.issues ?? []).find((issue) => issue.message.includes("Include path escapes config directory") || issue.message.includes("Include path resolves outside config directory"));
1097
+ if (!includeIssue) return;
1098
+ note([
1099
+ `- $include paths must stay under: ${path.dirname(snapshot.path ?? CONFIG_PATH)}`,
1100
+ "- Move shared include files under that directory and update to relative paths like \"./shared/common.json\".",
1101
+ `- Error: ${includeIssue.message}`
1102
+ ].join("\n"), "Doctor warnings");
1103
+ }
1104
+ function asObjectRecord(value) {
1105
+ if (!value || typeof value !== "object" || Array.isArray(value)) return null;
1106
+ return value;
1107
+ }
1108
+ function collectTelegramAccountScopes(cfg) {
1109
+ const scopes = [];
1110
+ const telegram = asObjectRecord(cfg.channels?.telegram);
1111
+ if (!telegram) return scopes;
1112
+ scopes.push({
1113
+ prefix: "channels.telegram",
1114
+ account: telegram
1115
+ });
1116
+ const accounts = asObjectRecord(telegram.accounts);
1117
+ if (!accounts) return scopes;
1118
+ for (const key of Object.keys(accounts)) {
1119
+ const account = asObjectRecord(accounts[key]);
1120
+ if (!account) continue;
1121
+ scopes.push({
1122
+ prefix: `channels.telegram.accounts.${key}`,
1123
+ account
1124
+ });
1125
+ }
1126
+ return scopes;
1127
+ }
1128
+ function collectTelegramAllowFromLists(prefix, account) {
1129
+ const refs = [{
1130
+ pathLabel: `${prefix}.allowFrom`,
1131
+ holder: account,
1132
+ key: "allowFrom"
1133
+ }, {
1134
+ pathLabel: `${prefix}.groupAllowFrom`,
1135
+ holder: account,
1136
+ key: "groupAllowFrom"
1137
+ }];
1138
+ const groups = asObjectRecord(account.groups);
1139
+ if (!groups) return refs;
1140
+ for (const groupId of Object.keys(groups)) {
1141
+ const group = asObjectRecord(groups[groupId]);
1142
+ if (!group) continue;
1143
+ refs.push({
1144
+ pathLabel: `${prefix}.groups.${groupId}.allowFrom`,
1145
+ holder: group,
1146
+ key: "allowFrom"
1147
+ });
1148
+ const topics = asObjectRecord(group.topics);
1149
+ if (!topics) continue;
1150
+ for (const topicId of Object.keys(topics)) {
1151
+ const topic = asObjectRecord(topics[topicId]);
1152
+ if (!topic) continue;
1153
+ refs.push({
1154
+ pathLabel: `${prefix}.groups.${groupId}.topics.${topicId}.allowFrom`,
1155
+ holder: topic,
1156
+ key: "allowFrom"
1157
+ });
1158
+ }
1159
+ }
1160
+ return refs;
1161
+ }
1162
+ function scanTelegramAllowFromUsernameEntries(cfg) {
1163
+ const hits = [];
1164
+ const scanList = (pathLabel, list) => {
1165
+ if (!Array.isArray(list)) return;
1166
+ for (const entry of list) {
1167
+ const normalized = normalizeTelegramAllowFromEntry(entry);
1168
+ if (!normalized || normalized === "*") continue;
1169
+ if (isNumericTelegramUserId(normalized)) continue;
1170
+ hits.push({
1171
+ path: pathLabel,
1172
+ entry: String(entry).trim()
1173
+ });
1174
+ }
1175
+ };
1176
+ for (const scope of collectTelegramAccountScopes(cfg)) for (const ref of collectTelegramAllowFromLists(scope.prefix, scope.account)) scanList(ref.pathLabel, ref.holder[ref.key]);
1177
+ return hits;
1178
+ }
1179
+ async function maybeRepairTelegramAllowFromUsernames(cfg) {
1180
+ if (scanTelegramAllowFromUsernameEntries(cfg).length === 0) return {
1181
+ config: cfg,
1182
+ changes: []
1183
+ };
1184
+ const tokens = Array.from(new Set(listTelegramAccountIds(cfg).map((accountId) => resolveTelegramAccount({
1185
+ cfg,
1186
+ accountId
1187
+ })).map((account) => account.tokenSource === "none" ? "" : account.token).map((token) => token.trim()).filter(Boolean)));
1188
+ if (tokens.length === 0) return {
1189
+ config: cfg,
1190
+ changes: [`- Telegram allowFrom contains @username entries, but no Telegram bot token is configured; cannot auto-resolve (run onboarding or replace with numeric sender IDs).`]
1191
+ };
1192
+ const resolveUserId = async (raw) => {
1193
+ const trimmed = raw.trim();
1194
+ if (!trimmed) return null;
1195
+ const stripped = normalizeTelegramAllowFromEntry(trimmed);
1196
+ if (!stripped || stripped === "*") return null;
1197
+ if (isNumericTelegramUserId(stripped)) return stripped;
1198
+ if (/\s/.test(stripped)) return null;
1199
+ const username = stripped.startsWith("@") ? stripped : `@${stripped}`;
1200
+ for (const token of tokens) {
1201
+ const controller = new AbortController();
1202
+ const timeout = setTimeout(() => controller.abort(), 4e3);
1203
+ try {
1204
+ const id = await fetchTelegramChatId({
1205
+ token,
1206
+ chatId: username,
1207
+ signal: controller.signal
1208
+ });
1209
+ if (id) return id;
1210
+ } catch {} finally {
1211
+ clearTimeout(timeout);
1212
+ }
1213
+ }
1214
+ return null;
1215
+ };
1216
+ const changes = [];
1217
+ const next = structuredClone(cfg);
1218
+ const repairList = async (pathLabel, holder, key) => {
1219
+ const raw = holder[key];
1220
+ if (!Array.isArray(raw)) return;
1221
+ const out = [];
1222
+ const replaced = [];
1223
+ for (const entry of raw) {
1224
+ const normalized = normalizeTelegramAllowFromEntry(entry);
1225
+ if (!normalized) continue;
1226
+ if (normalized === "*") {
1227
+ out.push("*");
1228
+ continue;
1229
+ }
1230
+ if (isNumericTelegramUserId(normalized)) {
1231
+ out.push(normalized);
1232
+ continue;
1233
+ }
1234
+ const resolved = await resolveUserId(String(entry));
1235
+ if (resolved) {
1236
+ out.push(resolved);
1237
+ replaced.push({
1238
+ from: String(entry).trim(),
1239
+ to: resolved
1240
+ });
1241
+ } else out.push(String(entry).trim());
1242
+ }
1243
+ const deduped = [];
1244
+ const seen = /* @__PURE__ */ new Set();
1245
+ for (const entry of out) {
1246
+ const k = String(entry).trim();
1247
+ if (!k || seen.has(k)) continue;
1248
+ seen.add(k);
1249
+ deduped.push(entry);
1250
+ }
1251
+ holder[key] = deduped;
1252
+ if (replaced.length > 0) {
1253
+ for (const rep of replaced.slice(0, 5)) changes.push(`- ${pathLabel}: resolved ${rep.from} -> ${rep.to}`);
1254
+ if (replaced.length > 5) changes.push(`- ${pathLabel}: resolved ${replaced.length - 5} more @username entries`);
1255
+ }
1256
+ };
1257
+ const repairAccount = async (prefix, account) => {
1258
+ for (const ref of collectTelegramAllowFromLists(prefix, account)) await repairList(ref.pathLabel, ref.holder, ref.key);
1259
+ };
1260
+ for (const scope of collectTelegramAccountScopes(next)) await repairAccount(scope.prefix, scope.account);
1261
+ if (changes.length === 0) return {
1262
+ config: cfg,
1263
+ changes: []
1264
+ };
1265
+ return {
1266
+ config: next,
1267
+ changes
1268
+ };
1269
+ }
1270
+ function collectDiscordAccountScopes(cfg) {
1271
+ const scopes = [];
1272
+ const discord = asObjectRecord(cfg.channels?.discord);
1273
+ if (!discord) return scopes;
1274
+ scopes.push({
1275
+ prefix: "channels.discord",
1276
+ account: discord
1277
+ });
1278
+ const accounts = asObjectRecord(discord.accounts);
1279
+ if (!accounts) return scopes;
1280
+ for (const key of Object.keys(accounts)) {
1281
+ const account = asObjectRecord(accounts[key]);
1282
+ if (!account) continue;
1283
+ scopes.push({
1284
+ prefix: `channels.discord.accounts.${key}`,
1285
+ account
1286
+ });
1287
+ }
1288
+ return scopes;
1289
+ }
1290
+ function collectDiscordIdLists(prefix, account) {
1291
+ const refs = [{
1292
+ pathLabel: `${prefix}.allowFrom`,
1293
+ holder: account,
1294
+ key: "allowFrom"
1295
+ }];
1296
+ const dm = asObjectRecord(account.dm);
1297
+ if (dm) {
1298
+ refs.push({
1299
+ pathLabel: `${prefix}.dm.allowFrom`,
1300
+ holder: dm,
1301
+ key: "allowFrom"
1302
+ });
1303
+ refs.push({
1304
+ pathLabel: `${prefix}.dm.groupChannels`,
1305
+ holder: dm,
1306
+ key: "groupChannels"
1307
+ });
1308
+ }
1309
+ const execApprovals = asObjectRecord(account.execApprovals);
1310
+ if (execApprovals) refs.push({
1311
+ pathLabel: `${prefix}.execApprovals.approvers`,
1312
+ holder: execApprovals,
1313
+ key: "approvers"
1314
+ });
1315
+ const guilds = asObjectRecord(account.guilds);
1316
+ if (!guilds) return refs;
1317
+ for (const guildId of Object.keys(guilds)) {
1318
+ const guild = asObjectRecord(guilds[guildId]);
1319
+ if (!guild) continue;
1320
+ refs.push({
1321
+ pathLabel: `${prefix}.guilds.${guildId}.users`,
1322
+ holder: guild,
1323
+ key: "users"
1324
+ });
1325
+ refs.push({
1326
+ pathLabel: `${prefix}.guilds.${guildId}.roles`,
1327
+ holder: guild,
1328
+ key: "roles"
1329
+ });
1330
+ const channels = asObjectRecord(guild.channels);
1331
+ if (!channels) continue;
1332
+ for (const channelId of Object.keys(channels)) {
1333
+ const channel = asObjectRecord(channels[channelId]);
1334
+ if (!channel) continue;
1335
+ refs.push({
1336
+ pathLabel: `${prefix}.guilds.${guildId}.channels.${channelId}.users`,
1337
+ holder: channel,
1338
+ key: "users"
1339
+ });
1340
+ refs.push({
1341
+ pathLabel: `${prefix}.guilds.${guildId}.channels.${channelId}.roles`,
1342
+ holder: channel,
1343
+ key: "roles"
1344
+ });
1345
+ }
1346
+ }
1347
+ return refs;
1348
+ }
1349
+ function scanDiscordNumericIdEntries(cfg) {
1350
+ const hits = [];
1351
+ const scanList = (pathLabel, list) => {
1352
+ if (!Array.isArray(list)) return;
1353
+ for (const [index, entry] of list.entries()) {
1354
+ if (typeof entry !== "number") continue;
1355
+ hits.push({
1356
+ path: `${pathLabel}[${index}]`,
1357
+ entry
1358
+ });
1359
+ }
1360
+ };
1361
+ for (const scope of collectDiscordAccountScopes(cfg)) for (const ref of collectDiscordIdLists(scope.prefix, scope.account)) scanList(ref.pathLabel, ref.holder[ref.key]);
1362
+ return hits;
1363
+ }
1364
+ function maybeRepairDiscordNumericIds(cfg) {
1365
+ if (scanDiscordNumericIdEntries(cfg).length === 0) return {
1366
+ config: cfg,
1367
+ changes: []
1368
+ };
1369
+ const next = structuredClone(cfg);
1370
+ const changes = [];
1371
+ const repairList = (pathLabel, holder, key) => {
1372
+ const raw = holder[key];
1373
+ if (!Array.isArray(raw)) return;
1374
+ let converted = 0;
1375
+ const updated = raw.map((entry) => {
1376
+ if (typeof entry === "number") {
1377
+ converted += 1;
1378
+ return String(entry);
1379
+ }
1380
+ return entry;
1381
+ });
1382
+ if (converted === 0) return;
1383
+ holder[key] = updated;
1384
+ changes.push(`- ${pathLabel}: converted ${converted} numeric ${converted === 1 ? "entry" : "entries"} to strings`);
1385
+ };
1386
+ for (const scope of collectDiscordAccountScopes(next)) for (const ref of collectDiscordIdLists(scope.prefix, scope.account)) repairList(ref.pathLabel, ref.holder, ref.key);
1387
+ if (changes.length === 0) return {
1388
+ config: cfg,
1389
+ changes: []
1390
+ };
1391
+ return {
1392
+ config: next,
1393
+ changes
1394
+ };
1395
+ }
1396
+ function addMutableAllowlistHits(params) {
1397
+ if (!Array.isArray(params.list)) return;
1398
+ for (const entry of params.list) {
1399
+ const text = String(entry).trim();
1400
+ if (!text || text === "*") continue;
1401
+ if (!params.detector(text)) continue;
1402
+ params.hits.push({
1403
+ channel: params.channel,
1404
+ path: params.pathLabel,
1405
+ entry: text,
1406
+ dangerousFlagPath: params.dangerousFlagPath
1407
+ });
1408
+ }
1409
+ }
1410
+ function scanMutableAllowlistEntries(cfg) {
1411
+ const hits = [];
1412
+ for (const scope of collectProviderDangerousNameMatchingScopes(cfg, "discord")) {
1413
+ if (scope.dangerousNameMatchingEnabled) continue;
1414
+ addMutableAllowlistHits({
1415
+ hits,
1416
+ pathLabel: `${scope.prefix}.allowFrom`,
1417
+ list: scope.account.allowFrom,
1418
+ detector: isDiscordMutableAllowEntry,
1419
+ channel: "discord",
1420
+ dangerousFlagPath: scope.dangerousFlagPath
1421
+ });
1422
+ const dm = asObjectRecord(scope.account.dm);
1423
+ if (dm) addMutableAllowlistHits({
1424
+ hits,
1425
+ pathLabel: `${scope.prefix}.dm.allowFrom`,
1426
+ list: dm.allowFrom,
1427
+ detector: isDiscordMutableAllowEntry,
1428
+ channel: "discord",
1429
+ dangerousFlagPath: scope.dangerousFlagPath
1430
+ });
1431
+ const guilds = asObjectRecord(scope.account.guilds);
1432
+ if (!guilds) continue;
1433
+ for (const [guildId, guildRaw] of Object.entries(guilds)) {
1434
+ const guild = asObjectRecord(guildRaw);
1435
+ if (!guild) continue;
1436
+ addMutableAllowlistHits({
1437
+ hits,
1438
+ pathLabel: `${scope.prefix}.guilds.${guildId}.users`,
1439
+ list: guild.users,
1440
+ detector: isDiscordMutableAllowEntry,
1441
+ channel: "discord",
1442
+ dangerousFlagPath: scope.dangerousFlagPath
1443
+ });
1444
+ const channels = asObjectRecord(guild.channels);
1445
+ if (!channels) continue;
1446
+ for (const [channelId, channelRaw] of Object.entries(channels)) {
1447
+ const channel = asObjectRecord(channelRaw);
1448
+ if (!channel) continue;
1449
+ addMutableAllowlistHits({
1450
+ hits,
1451
+ pathLabel: `${scope.prefix}.guilds.${guildId}.channels.${channelId}.users`,
1452
+ list: channel.users,
1453
+ detector: isDiscordMutableAllowEntry,
1454
+ channel: "discord",
1455
+ dangerousFlagPath: scope.dangerousFlagPath
1456
+ });
1457
+ }
1458
+ }
1459
+ }
1460
+ for (const scope of collectProviderDangerousNameMatchingScopes(cfg, "slack")) {
1461
+ if (scope.dangerousNameMatchingEnabled) continue;
1462
+ addMutableAllowlistHits({
1463
+ hits,
1464
+ pathLabel: `${scope.prefix}.allowFrom`,
1465
+ list: scope.account.allowFrom,
1466
+ detector: isSlackMutableAllowEntry,
1467
+ channel: "slack",
1468
+ dangerousFlagPath: scope.dangerousFlagPath
1469
+ });
1470
+ const dm = asObjectRecord(scope.account.dm);
1471
+ if (dm) addMutableAllowlistHits({
1472
+ hits,
1473
+ pathLabel: `${scope.prefix}.dm.allowFrom`,
1474
+ list: dm.allowFrom,
1475
+ detector: isSlackMutableAllowEntry,
1476
+ channel: "slack",
1477
+ dangerousFlagPath: scope.dangerousFlagPath
1478
+ });
1479
+ const channels = asObjectRecord(scope.account.channels);
1480
+ if (!channels) continue;
1481
+ for (const [channelKey, channelRaw] of Object.entries(channels)) {
1482
+ const channel = asObjectRecord(channelRaw);
1483
+ if (!channel) continue;
1484
+ addMutableAllowlistHits({
1485
+ hits,
1486
+ pathLabel: `${scope.prefix}.channels.${channelKey}.users`,
1487
+ list: channel.users,
1488
+ detector: isSlackMutableAllowEntry,
1489
+ channel: "slack",
1490
+ dangerousFlagPath: scope.dangerousFlagPath
1491
+ });
1492
+ }
1493
+ }
1494
+ for (const scope of collectProviderDangerousNameMatchingScopes(cfg, "googlechat")) {
1495
+ if (scope.dangerousNameMatchingEnabled) continue;
1496
+ addMutableAllowlistHits({
1497
+ hits,
1498
+ pathLabel: `${scope.prefix}.groupAllowFrom`,
1499
+ list: scope.account.groupAllowFrom,
1500
+ detector: isGoogleChatMutableAllowEntry,
1501
+ channel: "googlechat",
1502
+ dangerousFlagPath: scope.dangerousFlagPath
1503
+ });
1504
+ const dm = asObjectRecord(scope.account.dm);
1505
+ if (dm) addMutableAllowlistHits({
1506
+ hits,
1507
+ pathLabel: `${scope.prefix}.dm.allowFrom`,
1508
+ list: dm.allowFrom,
1509
+ detector: isGoogleChatMutableAllowEntry,
1510
+ channel: "googlechat",
1511
+ dangerousFlagPath: scope.dangerousFlagPath
1512
+ });
1513
+ const groups = asObjectRecord(scope.account.groups);
1514
+ if (!groups) continue;
1515
+ for (const [groupKey, groupRaw] of Object.entries(groups)) {
1516
+ const group = asObjectRecord(groupRaw);
1517
+ if (!group) continue;
1518
+ addMutableAllowlistHits({
1519
+ hits,
1520
+ pathLabel: `${scope.prefix}.groups.${groupKey}.users`,
1521
+ list: group.users,
1522
+ detector: isGoogleChatMutableAllowEntry,
1523
+ channel: "googlechat",
1524
+ dangerousFlagPath: scope.dangerousFlagPath
1525
+ });
1526
+ }
1527
+ }
1528
+ for (const scope of collectProviderDangerousNameMatchingScopes(cfg, "msteams")) {
1529
+ if (scope.dangerousNameMatchingEnabled) continue;
1530
+ addMutableAllowlistHits({
1531
+ hits,
1532
+ pathLabel: `${scope.prefix}.allowFrom`,
1533
+ list: scope.account.allowFrom,
1534
+ detector: isMSTeamsMutableAllowEntry,
1535
+ channel: "msteams",
1536
+ dangerousFlagPath: scope.dangerousFlagPath
1537
+ });
1538
+ addMutableAllowlistHits({
1539
+ hits,
1540
+ pathLabel: `${scope.prefix}.groupAllowFrom`,
1541
+ list: scope.account.groupAllowFrom,
1542
+ detector: isMSTeamsMutableAllowEntry,
1543
+ channel: "msteams",
1544
+ dangerousFlagPath: scope.dangerousFlagPath
1545
+ });
1546
+ }
1547
+ for (const scope of collectProviderDangerousNameMatchingScopes(cfg, "mattermost")) {
1548
+ if (scope.dangerousNameMatchingEnabled) continue;
1549
+ addMutableAllowlistHits({
1550
+ hits,
1551
+ pathLabel: `${scope.prefix}.allowFrom`,
1552
+ list: scope.account.allowFrom,
1553
+ detector: isMattermostMutableAllowEntry,
1554
+ channel: "mattermost",
1555
+ dangerousFlagPath: scope.dangerousFlagPath
1556
+ });
1557
+ addMutableAllowlistHits({
1558
+ hits,
1559
+ pathLabel: `${scope.prefix}.groupAllowFrom`,
1560
+ list: scope.account.groupAllowFrom,
1561
+ detector: isMattermostMutableAllowEntry,
1562
+ channel: "mattermost",
1563
+ dangerousFlagPath: scope.dangerousFlagPath
1564
+ });
1565
+ }
1566
+ for (const scope of collectProviderDangerousNameMatchingScopes(cfg, "irc")) {
1567
+ if (scope.dangerousNameMatchingEnabled) continue;
1568
+ addMutableAllowlistHits({
1569
+ hits,
1570
+ pathLabel: `${scope.prefix}.allowFrom`,
1571
+ list: scope.account.allowFrom,
1572
+ detector: isIrcMutableAllowEntry,
1573
+ channel: "irc",
1574
+ dangerousFlagPath: scope.dangerousFlagPath
1575
+ });
1576
+ addMutableAllowlistHits({
1577
+ hits,
1578
+ pathLabel: `${scope.prefix}.groupAllowFrom`,
1579
+ list: scope.account.groupAllowFrom,
1580
+ detector: isIrcMutableAllowEntry,
1581
+ channel: "irc",
1582
+ dangerousFlagPath: scope.dangerousFlagPath
1583
+ });
1584
+ const groups = asObjectRecord(scope.account.groups);
1585
+ if (!groups) continue;
1586
+ for (const [groupKey, groupRaw] of Object.entries(groups)) {
1587
+ const group = asObjectRecord(groupRaw);
1588
+ if (!group) continue;
1589
+ addMutableAllowlistHits({
1590
+ hits,
1591
+ pathLabel: `${scope.prefix}.groups.${groupKey}.allowFrom`,
1592
+ list: group.allowFrom,
1593
+ detector: isIrcMutableAllowEntry,
1594
+ channel: "irc",
1595
+ dangerousFlagPath: scope.dangerousFlagPath
1596
+ });
1597
+ }
1598
+ }
1599
+ return hits;
1600
+ }
1601
+ /**
1602
+ * Scan all channel configs for dmPolicy="open" without allowFrom including "*".
1603
+ * This configuration is rejected by the schema validator but can easily occur when
1604
+ * users (or integrations) set dmPolicy to "open" without realising that an explicit
1605
+ * allowFrom wildcard is also required.
1606
+ */
1607
+ function maybeRepairOpenPolicyAllowFrom(cfg) {
1608
+ const channels = cfg.channels;
1609
+ if (!channels || typeof channels !== "object") return {
1610
+ config: cfg,
1611
+ changes: []
1612
+ };
1613
+ const next = structuredClone(cfg);
1614
+ const changes = [];
1615
+ const resolveAllowFromMode = (channelName) => {
1616
+ if (channelName === "googlechat") return "nestedOnly";
1617
+ if (channelName === "discord" || channelName === "slack") return "topOrNested";
1618
+ return "topOnly";
1619
+ };
1620
+ const hasWildcard = (list) => list?.some((v) => String(v).trim() === "*") ?? false;
1621
+ const ensureWildcard = (account, prefix, mode) => {
1622
+ const dmEntry = account.dm;
1623
+ const dm = dmEntry && typeof dmEntry === "object" && !Array.isArray(dmEntry) ? dmEntry : void 0;
1624
+ if ((account.dmPolicy ?? dm?.policy ?? void 0) !== "open") return;
1625
+ const topAllowFrom = account.allowFrom;
1626
+ const nestedAllowFrom = dm?.allowFrom;
1627
+ if (mode === "nestedOnly") {
1628
+ if (hasWildcard(nestedAllowFrom)) return;
1629
+ if (Array.isArray(nestedAllowFrom)) {
1630
+ nestedAllowFrom.push("*");
1631
+ changes.push(`- ${prefix}.dm.allowFrom: added "*" (required by dmPolicy="open")`);
1632
+ return;
1633
+ }
1634
+ const nextDm = dm ?? {};
1635
+ nextDm.allowFrom = ["*"];
1636
+ account.dm = nextDm;
1637
+ changes.push(`- ${prefix}.dm.allowFrom: set to ["*"] (required by dmPolicy="open")`);
1638
+ return;
1639
+ }
1640
+ if (mode === "topOrNested") {
1641
+ if (hasWildcard(topAllowFrom) || hasWildcard(nestedAllowFrom)) return;
1642
+ if (Array.isArray(topAllowFrom)) {
1643
+ topAllowFrom.push("*");
1644
+ changes.push(`- ${prefix}.allowFrom: added "*" (required by dmPolicy="open")`);
1645
+ } else if (Array.isArray(nestedAllowFrom)) {
1646
+ nestedAllowFrom.push("*");
1647
+ changes.push(`- ${prefix}.dm.allowFrom: added "*" (required by dmPolicy="open")`);
1648
+ } else {
1649
+ account.allowFrom = ["*"];
1650
+ changes.push(`- ${prefix}.allowFrom: set to ["*"] (required by dmPolicy="open")`);
1651
+ }
1652
+ return;
1653
+ }
1654
+ if (hasWildcard(topAllowFrom)) return;
1655
+ if (Array.isArray(topAllowFrom)) {
1656
+ topAllowFrom.push("*");
1657
+ changes.push(`- ${prefix}.allowFrom: added "*" (required by dmPolicy="open")`);
1658
+ } else {
1659
+ account.allowFrom = ["*"];
1660
+ changes.push(`- ${prefix}.allowFrom: set to ["*"] (required by dmPolicy="open")`);
1661
+ }
1662
+ };
1663
+ const nextChannels = next.channels;
1664
+ for (const [channelName, channelConfig] of Object.entries(nextChannels)) {
1665
+ if (!channelConfig || typeof channelConfig !== "object") continue;
1666
+ const allowFromMode = resolveAllowFromMode(channelName);
1667
+ ensureWildcard(channelConfig, `channels.${channelName}`, allowFromMode);
1668
+ const accounts = channelConfig.accounts;
1669
+ if (accounts && typeof accounts === "object") {
1670
+ for (const [accountName, accountConfig] of Object.entries(accounts)) if (accountConfig && typeof accountConfig === "object") ensureWildcard(accountConfig, `channels.${channelName}.accounts.${accountName}`, allowFromMode);
1671
+ }
1672
+ }
1673
+ if (changes.length === 0) return {
1674
+ config: cfg,
1675
+ changes: []
1676
+ };
1677
+ return {
1678
+ config: next,
1679
+ changes
1680
+ };
1681
+ }
1682
+ function collectLegacyToolsBySenderKeyHits(value, pathParts, hits) {
1683
+ if (Array.isArray(value)) {
1684
+ for (const [index, entry] of value.entries()) collectLegacyToolsBySenderKeyHits(entry, [...pathParts, index], hits);
1685
+ return;
1686
+ }
1687
+ const record = asObjectRecord(value);
1688
+ if (!record) return;
1689
+ const toolsBySender = asObjectRecord(record.toolsBySender);
1690
+ if (toolsBySender) {
1691
+ const path = [...pathParts, "toolsBySender"];
1692
+ const pathLabel = formatPath(path);
1693
+ for (const rawKey of Object.keys(toolsBySender)) {
1694
+ const trimmed = rawKey.trim();
1695
+ if (!trimmed || trimmed === "*" || parseToolsBySenderTypedKey(trimmed)) continue;
1696
+ hits.push({
1697
+ toolsBySenderPath: path,
1698
+ pathLabel,
1699
+ key: rawKey,
1700
+ targetKey: `id:${trimmed}`
1701
+ });
1702
+ }
1703
+ }
1704
+ for (const [key, nested] of Object.entries(record)) {
1705
+ if (key === "toolsBySender") continue;
1706
+ collectLegacyToolsBySenderKeyHits(nested, [...pathParts, key], hits);
1707
+ }
1708
+ }
1709
+ function scanLegacyToolsBySenderKeys(cfg) {
1710
+ const hits = [];
1711
+ collectLegacyToolsBySenderKeyHits(cfg, [], hits);
1712
+ return hits;
1713
+ }
1714
+ function maybeRepairLegacyToolsBySenderKeys(cfg) {
1715
+ const next = structuredClone(cfg);
1716
+ const hits = scanLegacyToolsBySenderKeys(next);
1717
+ if (hits.length === 0) return {
1718
+ config: cfg,
1719
+ changes: []
1720
+ };
1721
+ const summary = /* @__PURE__ */ new Map();
1722
+ let changed = false;
1723
+ for (const hit of hits) {
1724
+ const toolsBySender = asObjectRecord(resolvePathTarget(next, hit.toolsBySenderPath));
1725
+ if (!toolsBySender || !(hit.key in toolsBySender)) continue;
1726
+ const row = summary.get(hit.pathLabel) ?? {
1727
+ migrated: 0,
1728
+ dropped: 0,
1729
+ examples: []
1730
+ };
1731
+ if (toolsBySender[hit.targetKey] === void 0) {
1732
+ toolsBySender[hit.targetKey] = toolsBySender[hit.key];
1733
+ row.migrated++;
1734
+ if (row.examples.length < 3) row.examples.push(`${hit.key} -> ${hit.targetKey}`);
1735
+ } else {
1736
+ row.dropped++;
1737
+ if (row.examples.length < 3) row.examples.push(`${hit.key} (kept existing ${hit.targetKey})`);
1738
+ }
1739
+ delete toolsBySender[hit.key];
1740
+ summary.set(hit.pathLabel, row);
1741
+ changed = true;
1742
+ }
1743
+ if (!changed) return {
1744
+ config: cfg,
1745
+ changes: []
1746
+ };
1747
+ const changes = [];
1748
+ for (const [pathLabel, row] of summary) {
1749
+ if (row.migrated > 0) {
1750
+ const suffix = row.examples.length > 0 ? ` (${row.examples.join(", ")})` : "";
1751
+ changes.push(`- ${pathLabel}: migrated ${row.migrated} legacy key${row.migrated === 1 ? "" : "s"} to typed id: entries${suffix}.`);
1752
+ }
1753
+ if (row.dropped > 0) changes.push(`- ${pathLabel}: removed ${row.dropped} legacy key${row.dropped === 1 ? "" : "s"} where typed id: entries already existed.`);
1754
+ }
1755
+ return {
1756
+ config: next,
1757
+ changes
1758
+ };
1759
+ }
1760
+ async function maybeMigrateLegacyConfig() {
1761
+ const changes = [];
1762
+ const home = resolveHomeDir();
1763
+ if (!home) return changes;
1764
+ const targetDir = path.join(home, ".remoteclaw");
1765
+ const targetPath = path.join(targetDir, "remoteclaw.json");
1766
+ try {
1767
+ await fs$1.access(targetPath);
1768
+ return changes;
1769
+ } catch {}
1770
+ const legacyCandidates = [
1771
+ path.join(home, ".clawdbot", "clawdbot.json"),
1772
+ path.join(home, ".moldbot", "moldbot.json"),
1773
+ path.join(home, ".moltbot", "moltbot.json")
1774
+ ];
1775
+ let legacyPath = null;
1776
+ for (const candidate of legacyCandidates) try {
1777
+ await fs$1.access(candidate);
1778
+ legacyPath = candidate;
1779
+ break;
1780
+ } catch {}
1781
+ if (!legacyPath) return changes;
1782
+ await fs$1.mkdir(targetDir, { recursive: true });
1783
+ try {
1784
+ await fs$1.copyFile(legacyPath, targetPath, fs$1.constants.COPYFILE_EXCL);
1785
+ changes.push(`Migrated legacy config: ${legacyPath} -> ${targetPath}`);
1786
+ } catch {}
1787
+ return changes;
1788
+ }
1789
+ async function loadAndMaybeMigrateDoctorConfig(params) {
1790
+ const shouldRepair = params.options.repair === true || params.options.yes === true;
1791
+ const stateDirResult = await autoMigrateLegacyStateDir({ env: process.env });
1792
+ if (stateDirResult.changes.length > 0) note(stateDirResult.changes.map((entry) => `- ${entry}`).join("\n"), "Doctor changes");
1793
+ if (stateDirResult.warnings.length > 0) note(stateDirResult.warnings.map((entry) => `- ${entry}`).join("\n"), "Doctor warnings");
1794
+ const legacyConfigChanges = await maybeMigrateLegacyConfig();
1795
+ if (legacyConfigChanges.length > 0) note(legacyConfigChanges.map((entry) => `- ${entry}`).join("\n"), "Doctor changes");
1796
+ let snapshot = await readConfigFileSnapshot();
1797
+ const baseCfg = snapshot.config ?? {};
1798
+ let cfg = baseCfg;
1799
+ let candidate = structuredClone(baseCfg);
1800
+ let pendingChanges = false;
1801
+ let shouldWriteConfig = false;
1802
+ const fixHints = [];
1803
+ if (snapshot.exists && !snapshot.valid && snapshot.legacyIssues.length === 0) {
1804
+ note("Config invalid; doctor will run with best-effort config.", "Config");
1805
+ noteIncludeConfinementWarning(snapshot);
1806
+ }
1807
+ const warnings = snapshot.warnings ?? [];
1808
+ if (warnings.length > 0) note(warnings.map((issue) => `- ${issue.path}: ${issue.message}`).join("\n"), "Config warnings");
1809
+ if (snapshot.legacyIssues.length > 0) {
1810
+ note(snapshot.legacyIssues.map((issue) => `- ${issue.path}: ${issue.message}`).join("\n"), "Legacy config keys detected");
1811
+ const { config: migrated, changes } = migrateLegacyConfig(snapshot.parsed);
1812
+ if (changes.length > 0) note(changes.join("\n"), "Doctor changes");
1813
+ if (migrated) {
1814
+ candidate = migrated;
1815
+ pendingChanges = pendingChanges || changes.length > 0;
1816
+ }
1817
+ if (shouldRepair) {
1818
+ if (migrated) cfg = migrated;
1819
+ } else fixHints.push(`Run "${formatCliCommand("remoteclaw doctor --fix")}" to apply legacy migrations.`);
1820
+ }
1821
+ const normalized = normalizeLegacyConfigValues(candidate);
1822
+ if (normalized.changes.length > 0) {
1823
+ note(normalized.changes.join("\n"), "Doctor changes");
1824
+ candidate = normalized.config;
1825
+ pendingChanges = true;
1826
+ if (shouldRepair) cfg = normalized.config;
1827
+ else fixHints.push(`Run "${formatCliCommand("remoteclaw doctor --fix")}" to apply these changes.`);
1828
+ }
1829
+ const autoEnable = applyPluginAutoEnable({
1830
+ config: candidate,
1831
+ env: process.env
1832
+ });
1833
+ if (autoEnable.changes.length > 0) {
1834
+ note(autoEnable.changes.join("\n"), "Doctor changes");
1835
+ candidate = autoEnable.config;
1836
+ pendingChanges = true;
1837
+ if (shouldRepair) cfg = autoEnable.config;
1838
+ else fixHints.push(`Run "${formatCliCommand("remoteclaw doctor --fix")}" to apply these changes.`);
1839
+ }
1840
+ if (shouldRepair) {
1841
+ const repair = await maybeRepairTelegramAllowFromUsernames(candidate);
1842
+ if (repair.changes.length > 0) {
1843
+ note(repair.changes.join("\n"), "Doctor changes");
1844
+ candidate = repair.config;
1845
+ pendingChanges = true;
1846
+ cfg = repair.config;
1847
+ }
1848
+ const discordRepair = maybeRepairDiscordNumericIds(candidate);
1849
+ if (discordRepair.changes.length > 0) {
1850
+ note(discordRepair.changes.join("\n"), "Doctor changes");
1851
+ candidate = discordRepair.config;
1852
+ pendingChanges = true;
1853
+ cfg = discordRepair.config;
1854
+ }
1855
+ const allowFromRepair = maybeRepairOpenPolicyAllowFrom(candidate);
1856
+ if (allowFromRepair.changes.length > 0) {
1857
+ note(allowFromRepair.changes.join("\n"), "Doctor changes");
1858
+ candidate = allowFromRepair.config;
1859
+ pendingChanges = true;
1860
+ cfg = allowFromRepair.config;
1861
+ }
1862
+ const toolsBySenderRepair = maybeRepairLegacyToolsBySenderKeys(candidate);
1863
+ if (toolsBySenderRepair.changes.length > 0) {
1864
+ note(toolsBySenderRepair.changes.join("\n"), "Doctor changes");
1865
+ candidate = toolsBySenderRepair.config;
1866
+ pendingChanges = true;
1867
+ cfg = toolsBySenderRepair.config;
1868
+ }
1869
+ } else {
1870
+ const hits = scanTelegramAllowFromUsernameEntries(candidate);
1871
+ if (hits.length > 0) note([`- Telegram allowFrom contains ${hits.length} non-numeric entries (e.g. ${hits[0]?.entry ?? "@"}); Telegram authorization requires numeric sender IDs.`, `- Run "${formatCliCommand("remoteclaw doctor --fix")}" to auto-resolve @username entries to numeric IDs (requires a Telegram bot token).`].join("\n"), "Doctor warnings");
1872
+ const discordHits = scanDiscordNumericIdEntries(candidate);
1873
+ if (discordHits.length > 0) note([`- Discord allowlists contain ${discordHits.length} numeric entries (e.g. ${discordHits[0]?.path}=${discordHits[0]?.entry}).`, `- Discord IDs must be strings; run "${formatCliCommand("remoteclaw doctor --fix")}" to convert numeric IDs to quoted strings.`].join("\n"), "Doctor warnings");
1874
+ const allowFromScan = maybeRepairOpenPolicyAllowFrom(candidate);
1875
+ if (allowFromScan.changes.length > 0) note([...allowFromScan.changes, `- Run "${formatCliCommand("remoteclaw doctor --fix")}" to add missing allowFrom wildcards.`].join("\n"), "Doctor warnings");
1876
+ const toolsBySenderHits = scanLegacyToolsBySenderKeys(candidate);
1877
+ if (toolsBySenderHits.length > 0) {
1878
+ const sample = toolsBySenderHits[0];
1879
+ const sampleLabel = sample ? `${sample.pathLabel}.${sample.key}` : "toolsBySender";
1880
+ note([
1881
+ `- Found ${toolsBySenderHits.length} legacy untyped toolsBySender key${toolsBySenderHits.length === 1 ? "" : "s"} (for example ${sampleLabel}).`,
1882
+ "- Untyped sender keys are deprecated; use explicit prefixes (id:, e164:, username:, name:).",
1883
+ `- Run "${formatCliCommand("remoteclaw doctor --fix")}" to migrate legacy keys to typed id: entries.`
1884
+ ].join("\n"), "Doctor warnings");
1885
+ }
1886
+ }
1887
+ const mutableAllowlistHits = scanMutableAllowlistEntries(candidate);
1888
+ if (mutableAllowlistHits.length > 0) {
1889
+ const channels = Array.from(new Set(mutableAllowlistHits.map((hit) => hit.channel))).toSorted();
1890
+ const exampleLines = mutableAllowlistHits.slice(0, 8).map((hit) => `- ${hit.path}: ${hit.entry}`).join("\n");
1891
+ const remaining = mutableAllowlistHits.length > 8 ? `- +${mutableAllowlistHits.length - 8} more mutable allowlist entries.` : null;
1892
+ const flagPaths = Array.from(new Set(mutableAllowlistHits.map((hit) => hit.dangerousFlagPath)));
1893
+ const flagHint = flagPaths.length === 1 ? flagPaths[0] : `${flagPaths[0]} (and ${flagPaths.length - 1} other scope flags)`;
1894
+ note([
1895
+ `- Found ${mutableAllowlistHits.length} mutable allowlist ${mutableAllowlistHits.length === 1 ? "entry" : "entries"} across ${channels.join(", ")} while name matching is disabled by default.`,
1896
+ exampleLines,
1897
+ ...remaining ? [remaining] : [],
1898
+ `- Option A (break-glass): enable ${flagHint}=true to keep name/email/nick matching.`,
1899
+ "- Option B (recommended): resolve names/emails/nicks to stable sender IDs and rewrite the allowlist entries."
1900
+ ].join("\n"), "Doctor warnings");
1901
+ }
1902
+ const unknown = stripUnknownConfigKeys(candidate);
1903
+ if (unknown.removed.length > 0) {
1904
+ const lines = unknown.removed.map((path) => `- ${path}`).join("\n");
1905
+ candidate = unknown.config;
1906
+ pendingChanges = true;
1907
+ if (shouldRepair) {
1908
+ cfg = unknown.config;
1909
+ note(lines, "Doctor changes");
1910
+ } else {
1911
+ note(lines, "Unknown config keys");
1912
+ fixHints.push("Run \"remoteclaw doctor --fix\" to remove these keys.");
1913
+ }
1914
+ }
1915
+ if (!shouldRepair && pendingChanges) {
1916
+ if (await params.confirm({
1917
+ message: "Apply recommended config repairs now?",
1918
+ initialValue: true
1919
+ })) {
1920
+ cfg = candidate;
1921
+ shouldWriteConfig = true;
1922
+ } else if (fixHints.length > 0) note(fixHints.join("\n"), "Doctor");
1923
+ }
1924
+ if (shouldRepair && pendingChanges) shouldWriteConfig = true;
1925
+ noteOpencodeProviderOverrides(cfg);
1926
+ return {
1927
+ cfg,
1928
+ path: snapshot.path ?? CONFIG_PATH,
1929
+ shouldWriteConfig,
1930
+ sourceConfigValid: snapshot.valid
1931
+ };
1932
+ }
1933
+
1934
+ //#endregion
1935
+ export { detectLegacyStateMigrations as n, runLegacyStateMigrations as r, loadAndMaybeMigrateDoctorConfig as t };