@termix-it/cryptoclaw 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1222) hide show
  1. package/CHANGELOG.md +1615 -0
  2. package/LICENSE +21 -0
  3. package/README-header.png +0 -0
  4. package/README.md +331 -0
  5. package/assets/avatar-placeholder.svg +19 -0
  6. package/assets/chrome-extension/README.md +22 -0
  7. package/assets/chrome-extension/background.js +438 -0
  8. package/assets/chrome-extension/icons/icon128.png +0 -0
  9. package/assets/chrome-extension/icons/icon16.png +0 -0
  10. package/assets/chrome-extension/icons/icon32.png +0 -0
  11. package/assets/chrome-extension/icons/icon48.png +0 -0
  12. package/assets/chrome-extension/manifest.json +25 -0
  13. package/assets/chrome-extension/options.html +196 -0
  14. package/assets/chrome-extension/options.js +59 -0
  15. package/assets/dmg-background-small.png +0 -0
  16. package/assets/dmg-background.png +0 -0
  17. package/cryptoclaw.mjs +14 -0
  18. package/dist/accounts-BPjR5SyC.js +251 -0
  19. package/dist/accounts-CIGHxE7R.js +251 -0
  20. package/dist/acp-cli-DBWmJpUJ.js +924 -0
  21. package/dist/acp-cli-DG9nygBk.js +926 -0
  22. package/dist/agent-3MZVCC-N.js +702 -0
  23. package/dist/agent-IDE9krld.js +702 -0
  24. package/dist/agent-scope-DBl1We79.js +370 -0
  25. package/dist/agent-scope-DLfFOxP6.js +370 -0
  26. package/dist/agent-scope-e_oNRhGi.js +606 -0
  27. package/dist/archive-Dy3Ezb-5.js +85 -0
  28. package/dist/archive-iT9wNsml.js +85 -0
  29. package/dist/audit-Bj_dxNaD.js +1853 -0
  30. package/dist/audit-jaTyyQX1.js +1853 -0
  31. package/dist/auth-RTEHx2eI.js +192 -0
  32. package/dist/auth-health-BlspzqyF.js +149 -0
  33. package/dist/auth-health-CCM6Z3vK.js +149 -0
  34. package/dist/auth-phxCaFNX.js +192 -0
  35. package/dist/auth-profiles-DoD7YxsD.js +2939 -0
  36. package/dist/boolean-BsqeuxE6.js +30 -0
  37. package/dist/brew-CAcErcKz.js +46 -0
  38. package/dist/brew-CqnNFIkD.js +46 -0
  39. package/dist/build-info.json +5 -0
  40. package/dist/call-D2DXG0AC.js +278 -0
  41. package/dist/call-DqxlETxE.js +278 -0
  42. package/dist/canvas-host/a2ui/.bundle.hash +1 -0
  43. package/dist/canvas-host/a2ui/a2ui.bundle.js +17765 -0
  44. package/dist/canvas-host/a2ui/index.html +307 -0
  45. package/dist/channel-options-BHpXOBuP.js +32 -0
  46. package/dist/channel-options-DUkxROTo.js +62 -0
  47. package/dist/channel-selection-BdigfMZZ.js +51 -0
  48. package/dist/channel-selection-D7jFTFec.js +51 -0
  49. package/dist/channel-summary-CobMoKN6.js +1120 -0
  50. package/dist/channel-summary-DS0kcHm2.js +1120 -0
  51. package/dist/channels-cli-D7ZNRrq7.js +1414 -0
  52. package/dist/channels-cli-DBwffwqw.js +1413 -0
  53. package/dist/channels-status-issues-C2UGSPvH.js +18 -0
  54. package/dist/channels-status-issues-Dxmd7zYk.js +18 -0
  55. package/dist/chrome-CwbWzmh4.js +1973 -0
  56. package/dist/chrome-SVqOMFxA.js +1953 -0
  57. package/dist/clack-prompter-k_egRADS.js +92 -0
  58. package/dist/clack-prompter-nSmn5cZ2.js +92 -0
  59. package/dist/cli/daemon-cli.js +2 -0
  60. package/dist/cli-C9xiWnx9.js +86 -0
  61. package/dist/cli-D6C9z94O.js +88 -0
  62. package/dist/cli-utils-B7iQwCY5.js +43 -0
  63. package/dist/cli-utils-CgOu3WAB.js +43 -0
  64. package/dist/client-BaTYzXOU.js +1617 -0
  65. package/dist/client-N6zH1neq.js +1617 -0
  66. package/dist/command-format-9IsYy-9N.js +52 -0
  67. package/dist/command-format-B0bnyrEA.js +38 -0
  68. package/dist/command-format-n_udBm8l.js +52 -0
  69. package/dist/command-options-DL1PhuUF.js +33 -0
  70. package/dist/commands-Dpeoos11.js +230 -0
  71. package/dist/completion-cli-B5nR7jt8.js +434 -0
  72. package/dist/completion-cli-CZ8zPqPs.js +773 -0
  73. package/dist/config-DSpb2aMV.js +4916 -0
  74. package/dist/config-IwiWafT3.js +5657 -0
  75. package/dist/config-dQK4rbfx.js +4916 -0
  76. package/dist/config-guard-DwIb5Y-v.js +5719 -0
  77. package/dist/configure-7M9mLC4o.js +896 -0
  78. package/dist/configure-CivCcvkA.js +896 -0
  79. package/dist/constants-C2T4hQIk.js +65 -0
  80. package/dist/constants-DBvu3LzZ.js +65 -0
  81. package/dist/control-service-BXC31sNw.js +61 -0
  82. package/dist/control-service-lVzEzp9f.js +61 -0
  83. package/dist/control-ui/apple-touch-icon.png +0 -0
  84. package/dist/control-ui/assets/index-DQ-7PWhX.js +7553 -0
  85. package/dist/control-ui/assets/index-DQ-7PWhX.js.map +1 -0
  86. package/dist/control-ui/assets/index-nlpH70Eh.css +1 -0
  87. package/dist/control-ui/favicon-32.png +0 -0
  88. package/dist/control-ui/favicon.ico +0 -0
  89. package/dist/control-ui/favicon.svg +22 -0
  90. package/dist/control-ui/index.html +17 -0
  91. package/dist/cron-cli-DS8ytfYQ.js +455 -0
  92. package/dist/cron-cli-Djb3HUdz.js +457 -0
  93. package/dist/daemon-cli-KoaJ2nJX.js +758 -0
  94. package/dist/daemon-cli-ZQIKLvAO.js +758 -0
  95. package/dist/daemon-runtime-CHWbAfKs.js +517 -0
  96. package/dist/daemon-runtime-DEjUQVjL.js +517 -0
  97. package/dist/deliver-DVRzRmNN.js +2557 -0
  98. package/dist/deliver-OfX6bSYR.js +2587 -0
  99. package/dist/deliver-sPBfRlXT.js +2587 -0
  100. package/dist/deps-BSdWD2wF.js +27 -0
  101. package/dist/deps-CZOfeWEp.js +27 -0
  102. package/dist/devices-cli-DHSpDnCS.js +207 -0
  103. package/dist/devices-cli-b9iF_uOi.js +205 -0
  104. package/dist/directory-cli-D0dTuAem.js +247 -0
  105. package/dist/directory-cli-qniSxsHo.js +245 -0
  106. package/dist/dispatcher-DA3u3CwV.js +160 -0
  107. package/dist/dns-cli-C0JUNb9O.js +201 -0
  108. package/dist/dns-cli-DwwMpMuN.js +199 -0
  109. package/dist/docs-cli-BlFHCHDz.js +161 -0
  110. package/dist/docs-cli-BpSPrY3Y.js +160 -0
  111. package/dist/doctor-Da1XgFcW.js +2584 -0
  112. package/dist/doctor-qrtookj-.js +2585 -0
  113. package/dist/entry.js +1156 -0
  114. package/dist/env-B2Cd_6IS.js +32 -0
  115. package/dist/errors--S5IAxQx.js +1952 -0
  116. package/dist/exec-CLQSz0CI.js +246 -0
  117. package/dist/exec-CW_QjkBi.js +246 -0
  118. package/dist/exec-D7I5LU33.js +1099 -0
  119. package/dist/exec-approvals-CuXem6Li.js +1043 -0
  120. package/dist/exec-approvals-P7vwSw4O.js +1043 -0
  121. package/dist/exec-approvals-cli-Csgqkksl.js +386 -0
  122. package/dist/exec-approvals-cli-Dk4yHE2L.js +388 -0
  123. package/dist/extensionAPI.js +64497 -0
  124. package/dist/format-B7OjpGnt.js +34 -0
  125. package/dist/format-Dv1wz41T.js +34 -0
  126. package/dist/gateway-cli-CJ7H2DgV.js +17352 -0
  127. package/dist/gateway-cli-CrKl-bIH.js +17352 -0
  128. package/dist/gateway-rpc--CH0NWWR.js +28 -0
  129. package/dist/gateway-rpc-BPfCU2Vi.js +28 -0
  130. package/dist/github-copilot-auth-CcPEEb3Q.js +1190 -0
  131. package/dist/github-copilot-auth-h3beCc_l.js +1190 -0
  132. package/dist/github-copilot-token-C1sArkX4.js +103 -0
  133. package/dist/github-copilot-token-DL6Pou2p.js +103 -0
  134. package/dist/github-copilot-token-hMl1wyZp.js +103 -0
  135. package/dist/gmail-setup-utils-CnVYPhaQ.js +428 -0
  136. package/dist/gmail-setup-utils-pZ9NnOvB.js +428 -0
  137. package/dist/health-format-BcsR5dtU.js +1211 -0
  138. package/dist/health-format-Pl8qK65t.js +1212 -0
  139. package/dist/help-format-BzWwbeSF.js +17 -0
  140. package/dist/help-format-CUnac_bT.js +17 -0
  141. package/dist/helpers-5yebzF4C.js +25 -0
  142. package/dist/helpers-CQI-5xS9.js +25 -0
  143. package/dist/helpers-CzQjTUbz.js +10 -0
  144. package/dist/helpers-OUt4hxkS.js +10 -0
  145. package/dist/hooks/bundled/boot-md/HOOK.md +19 -0
  146. package/dist/hooks/bundled/command-logger/HOOK.md +122 -0
  147. package/dist/hooks/bundled/session-memory/HOOK.md +109 -0
  148. package/dist/hooks/bundled/soul-evil/HOOK.md +71 -0
  149. package/dist/hooks-cli-BKHTdsn4.js +1058 -0
  150. package/dist/hooks-cli-zkLY25DX.js +1060 -0
  151. package/dist/hooks-status-BETsyuUR.js +443 -0
  152. package/dist/hooks-status-nPgxLL-x.js +443 -0
  153. package/dist/image-BFNcQzKp.js +629 -0
  154. package/dist/image-CC_YKDB-.js +1421 -0
  155. package/dist/image-DAsWVn7Q.js +629 -0
  156. package/dist/index.js +5900 -0
  157. package/dist/installs-Byb3s_8P.js +425 -0
  158. package/dist/installs-CELeuogN.js +425 -0
  159. package/dist/is-main-B6kCyqsv.js +25 -0
  160. package/dist/is-main-CBExsRNQ.js +25 -0
  161. package/dist/links-Brcj2Oc-.js +15 -0
  162. package/dist/links-cf9h8BXu.js +15 -0
  163. package/dist/loader-CU4bkeKe.js +61131 -0
  164. package/dist/logging-5MtSkLpb.js +1 -0
  165. package/dist/logging-BJRQDTME.js +15 -0
  166. package/dist/logging-CD55MXc7.js +15 -0
  167. package/dist/logging-kuFzZMsG.js +1 -0
  168. package/dist/login-qr-BCr2GKX6.js +475 -0
  169. package/dist/login-qr-BMbekoZW.js +478 -0
  170. package/dist/login-qr-HIPJAnbT.js +478 -0
  171. package/dist/logs-cli-CM7-XOcZ.js +230 -0
  172. package/dist/logs-cli-aqjT7oHu.js +228 -0
  173. package/dist/manager-C5m5qpB0.js +2871 -0
  174. package/dist/manager-CtGvmGvM.js +2872 -0
  175. package/dist/manager-DpZlm3gk.js +2870 -0
  176. package/dist/manifest-registry-BdTzIlta.js +669 -0
  177. package/dist/manifest-registry-DVQHMj0y.js +669 -0
  178. package/dist/message-channel-CfYBy4y3.js +110 -0
  179. package/dist/message-channel-CvHWS3C2.js +110 -0
  180. package/dist/model-selection-Av0fLq51.js +2940 -0
  181. package/dist/model-selection-DuI_Ue9Q.js +2691 -0
  182. package/dist/models-cli-C0JOZ5oP.js +2541 -0
  183. package/dist/models-cli-gmkzOpbq.js +2543 -0
  184. package/dist/net-D4G66Xui.js +137 -0
  185. package/dist/net-YrbuVTd2.js +137 -0
  186. package/dist/node-cli-BND9LLkM.js +1457 -0
  187. package/dist/node-cli-DNRB94ib.js +1459 -0
  188. package/dist/node-service-DTgDFo7M.js +67 -0
  189. package/dist/node-service-JEBcPQat.js +67 -0
  190. package/dist/nodes-cli-BCWlqHyR.js +1208 -0
  191. package/dist/nodes-cli-DWSo5dX7.js +1210 -0
  192. package/dist/nodes-screen-CMvShBEB.js +157 -0
  193. package/dist/nodes-screen-Cok3-EJw.js +157 -0
  194. package/dist/note-C5M2AQOP.js +73 -0
  195. package/dist/note-DEz9ZK7G.js +73 -0
  196. package/dist/onboard-channels-B75LjjVZ.js +671 -0
  197. package/dist/onboard-channels-DJz2TusQ.js +671 -0
  198. package/dist/onboard-skills-ByHkU9nx.js +3615 -0
  199. package/dist/onboard-skills-Wknr7pxR.js +3615 -0
  200. package/dist/onboarding-BejDjkx5.js +3455 -0
  201. package/dist/openclaw-root-YSGWCNem.js +84 -0
  202. package/dist/openclaw-root-_zPXSqgo.js +84 -0
  203. package/dist/pairing-cli-CFqD3IdI.js +122 -0
  204. package/dist/pairing-cli-Cn5vt4oI.js +120 -0
  205. package/dist/pairing-store-BHzy16_t.js +391 -0
  206. package/dist/pairing-store-BOhO49Bi.js +391 -0
  207. package/dist/parse-BZz5lHzQ.js +23 -0
  208. package/dist/parse-Bw0oH-rT.js +23 -0
  209. package/dist/parse-log-line-BxDgv4Uo.js +44 -0
  210. package/dist/parse-log-line-CUrpqe1w.js +44 -0
  211. package/dist/parse-timeout-D1XX_zN_.js +16 -0
  212. package/dist/parse-timeout-Du-wHHNi.js +16 -0
  213. package/dist/path-env-DQ-mM2ya.js +77 -0
  214. package/dist/path-env-eQ-HoQtS.js +77 -0
  215. package/dist/paths-C3yk0MGu.js +43 -0
  216. package/dist/paths-C90k-Dud.js +166 -0
  217. package/dist/paths-CGrNQEMk.js +201 -0
  218. package/dist/paths-D2ytuv-2.js +201 -0
  219. package/dist/paths-Dlp4VNXa.js +40 -0
  220. package/dist/paths-KUslkJRs.js +43 -0
  221. package/dist/pi-embedded-helpers-B7ARjDEK.js +1298 -0
  222. package/dist/pi-embedded-helpers-CQ9sq3Uu.js +8475 -0
  223. package/dist/pi-embedded-helpers-FPVRDeKf.js +1298 -0
  224. package/dist/pi-model-discovery-DWTTaAgY.js +20 -0
  225. package/dist/pi-model-discovery-EhM2JAQo.js +20 -0
  226. package/dist/pi-model-discovery-EwKVHlZB.js +20 -0
  227. package/dist/pi-tools.policy-Du4RZy9R.js +230 -0
  228. package/dist/plugin-auto-enable-EBxTHjFJ.js +461 -0
  229. package/dist/plugin-auto-enable-RwRwIUKC.js +461 -0
  230. package/dist/plugin-sdk/index.d.ts +8453 -0
  231. package/dist/plugin-sdk/index.js +23445 -0
  232. package/dist/plugin-sdk/pi-model-discovery-Dw3A6oXH.js +37 -0
  233. package/dist/plugins-BI-p2ba9.js +495 -0
  234. package/dist/plugins-Dk4UBZwz.js +496 -0
  235. package/dist/plugins-cli-CMg0G56J.js +441 -0
  236. package/dist/plugins-cli-CX7QeUjq.js +443 -0
  237. package/dist/ports-nXmd4Efh.js +96 -0
  238. package/dist/program-EAMJAB_2.js +191 -0
  239. package/dist/progress-D-Oc-KAH.js +133 -0
  240. package/dist/progress-DTEUicRP.js +133 -0
  241. package/dist/prompt-style-BBlJlXtd.js +9 -0
  242. package/dist/prompt-style-BntC_Eoo.js +9 -0
  243. package/dist/prompts-C2D9_VZC.js +10 -0
  244. package/dist/prompts-FbZThK8w.js +10 -0
  245. package/dist/pw-ai-D2jD_dho.js +1651 -0
  246. package/dist/pw-ai-D6JUaD41.js +1650 -0
  247. package/dist/pw-ai-ba2bHPGA.js +1649 -0
  248. package/dist/qmd-manager-B-ijyM7o.js +615 -0
  249. package/dist/qmd-manager-C_Jah5eo.js +618 -0
  250. package/dist/qmd-manager-xo4abL0u.js +618 -0
  251. package/dist/redact-1PNP01B_.js +97 -0
  252. package/dist/redact-BIMJ3ntQ.js +94 -0
  253. package/dist/redact-CVRUv382.js +97 -0
  254. package/dist/register.subclis-CJGimm3-.js +348 -0
  255. package/dist/reply-DfepuqG0.js +61133 -0
  256. package/dist/rolldown-runtime-Cbj13DAv.js +20 -0
  257. package/dist/routes-DkckwrRx.js +2410 -0
  258. package/dist/routes-Q42qtNl1.js +2410 -0
  259. package/dist/rpc-B4lvrGrD.js +95 -0
  260. package/dist/rpc-CbWcXAQK.js +95 -0
  261. package/dist/run-main-JFY3X4Xh.js +194 -0
  262. package/dist/sandbox-BGqDfFaH.js +2945 -0
  263. package/dist/sandbox-D_Tt3WRq.js +2945 -0
  264. package/dist/sandbox-cli-CaxqKiTq.js +461 -0
  265. package/dist/sandbox-cli-DA0Cbrzl.js +463 -0
  266. package/dist/security-cli-BZjA_GAD.js +508 -0
  267. package/dist/security-cli-Ct-pfF2h.js +506 -0
  268. package/dist/server-context-B9ez46MY.js +740 -0
  269. package/dist/server-context-C53lhEx_.js +740 -0
  270. package/dist/server-node-events-Cb6QOeDH.js +218 -0
  271. package/dist/server-node-events-DONmQvJg.js +216 -0
  272. package/dist/service-C0ccl5rU.js +680 -0
  273. package/dist/service-audit-AsnhO40e.js +542 -0
  274. package/dist/service-audit-BM-iyLL7.js +542 -0
  275. package/dist/service-mrQPgOXl.js +680 -0
  276. package/dist/session-cost-usage-B3HzifR9.js +692 -0
  277. package/dist/session-cost-usage-DH3c4xJA.js +692 -0
  278. package/dist/session-key-C-ig2pxJ.js +177 -0
  279. package/dist/session-key-CYpWeuht.js +177 -0
  280. package/dist/shared-CBcCIWC0.js +74 -0
  281. package/dist/shared-CtNMbLRE.js +150 -0
  282. package/dist/shared-DCh7fkR2.js +150 -0
  283. package/dist/shared-Na5zjEUc.js +74 -0
  284. package/dist/skill-scanner-AfOudYI1.js +255 -0
  285. package/dist/skill-scanner-BoGjHXUZ.js +255 -0
  286. package/dist/skills-7V483a6m.js +693 -0
  287. package/dist/skills-CsZRBUj0.js +694 -0
  288. package/dist/skills-cli-DQaq5LBX.js +290 -0
  289. package/dist/skills-cli-dVugbaAb.js +288 -0
  290. package/dist/skills-status-4_4zVBvV.js +187 -0
  291. package/dist/skills-status-cD4rfMR9.js +187 -0
  292. package/dist/sqlite-C4DljFNL.js +215 -0
  293. package/dist/sqlite-CvQzxS7q.js +197 -0
  294. package/dist/sqlite-Dnmf3LS7.js +215 -0
  295. package/dist/status-BakhDLuG.js +27 -0
  296. package/dist/status-BqtiImKF.js +21 -0
  297. package/dist/status-DHPz4Mg_.js +3364 -0
  298. package/dist/status-DSoYX3Ep.js +27 -0
  299. package/dist/status-Drziap9H.js +21 -0
  300. package/dist/subsystem-Btuh5yZj.js +834 -0
  301. package/dist/system-cli-CUQswQPX.js +83 -0
  302. package/dist/system-cli-Cz7in_Xr.js +81 -0
  303. package/dist/systemd-CFHiVC1D.js +438 -0
  304. package/dist/systemd-hints-CgQqk98i.js +19 -0
  305. package/dist/systemd-hints-DKVCFZS3.js +19 -0
  306. package/dist/systemd-kY3NnWdi.js +438 -0
  307. package/dist/systemd-linger-CFK5jDdq.js +75 -0
  308. package/dist/systemd-linger-CxBBzOjC.js +75 -0
  309. package/dist/table-DAOPkdc_.js +279 -0
  310. package/dist/table-DDQGlZSe.js +279 -0
  311. package/dist/tailnet-CZq_ZSNX.js +42 -0
  312. package/dist/tailnet-D5wOWpOX.js +42 -0
  313. package/dist/tailscale-BY0igR48.js +252 -0
  314. package/dist/tailscale-CCLcQalf.js +225 -0
  315. package/dist/tool-display-B2rS2o6B.js +795 -0
  316. package/dist/tool-display-Zbh1CRw5.js +795 -0
  317. package/dist/transcript-events-BOK6eOU8.js +17 -0
  318. package/dist/transcript-events-D2kT5WSz.js +17 -0
  319. package/dist/transcript-events-JLH5W4He.js +17 -0
  320. package/dist/tui-DFVs6pRO.js +2672 -0
  321. package/dist/tui-cli-CBKZVd1C.js +58 -0
  322. package/dist/tui-cli-DexeJOgZ.js +56 -0
  323. package/dist/tui-qPHLsB-x.js +2672 -0
  324. package/dist/update-B2q3duJD.js +317 -0
  325. package/dist/update-DNnej3C6.js +317 -0
  326. package/dist/update-cli-BPUtZjbl.js +1031 -0
  327. package/dist/update-cli-ehTYbpaU.js +1032 -0
  328. package/dist/update-runner-BfncKnU6.js +1375 -0
  329. package/dist/update-runner-DAeygRSU.js +1375 -0
  330. package/dist/usage-format-C4JfTbSp.js +36 -0
  331. package/dist/usage-format-DvowRSs-.js +36 -0
  332. package/dist/utils-7IMqr8vR.js +189 -0
  333. package/dist/utils-D7jskKIf.js +192 -0
  334. package/dist/wallet-manager-7KHKMCbT.js +264 -0
  335. package/dist/wallet-manager-CT1ykq2O.js +264 -0
  336. package/dist/webhooks-cli-C0CV-1jG.js +310 -0
  337. package/dist/webhooks-cli-DT16BygW.js +312 -0
  338. package/dist/widearea-dns-BJZTAyT3.js +127 -0
  339. package/dist/widearea-dns-Dk82I4Xa.js +127 -0
  340. package/dist/ws-6_dFpKWQ.js +13 -0
  341. package/dist/ws-D64QKPe6.js +13 -0
  342. package/dist/ws-log-BhQmGM0R.js +267 -0
  343. package/dist/ws-log-DsyLcTqD.js +267 -0
  344. package/dist/wsl-C24YfxH9.js +160 -0
  345. package/docs/.i18n/README.md +31 -0
  346. package/docs/.i18n/glossary.zh-CN.json +210 -0
  347. package/docs/.i18n/zh-CN.tm.jsonl +1329 -0
  348. package/docs/CNAME +1 -0
  349. package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
  350. package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
  351. package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
  352. package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
  353. package/docs/assets/macos-onboarding/05-permissions.png +0 -0
  354. package/docs/assets/openclaw-logo-text-dark.png +0 -0
  355. package/docs/assets/openclaw-logo-text.png +0 -0
  356. package/docs/assets/pixel-lobster.svg +60 -0
  357. package/docs/assets/showcase/agents-ui.jpg +0 -0
  358. package/docs/assets/showcase/bambu-cli.png +0 -0
  359. package/docs/assets/showcase/codexmonitor.png +0 -0
  360. package/docs/assets/showcase/gohome-grafana.png +0 -0
  361. package/docs/assets/showcase/ios-testflight.jpg +0 -0
  362. package/docs/assets/showcase/oura-health.png +0 -0
  363. package/docs/assets/showcase/padel-cli.svg +11 -0
  364. package/docs/assets/showcase/padel-screenshot.jpg +0 -0
  365. package/docs/assets/showcase/papla-tts.jpg +0 -0
  366. package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
  367. package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
  368. package/docs/assets/showcase/roborock-status.svg +13 -0
  369. package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
  370. package/docs/assets/showcase/snag.png +0 -0
  371. package/docs/assets/showcase/tesco-shop.jpg +0 -0
  372. package/docs/assets/showcase/wienerlinien.png +0 -0
  373. package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
  374. package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
  375. package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
  376. package/docs/automation/auth-monitoring.md +44 -0
  377. package/docs/automation/cron-jobs.md +468 -0
  378. package/docs/automation/cron-vs-heartbeat.md +282 -0
  379. package/docs/automation/gmail-pubsub.md +256 -0
  380. package/docs/automation/poll.md +69 -0
  381. package/docs/automation/webhook.md +163 -0
  382. package/docs/bedrock.md +176 -0
  383. package/docs/brave-search.md +41 -0
  384. package/docs/broadcast-groups.md +442 -0
  385. package/docs/channels/bluebubbles.md +338 -0
  386. package/docs/channels/discord.md +476 -0
  387. package/docs/channels/feishu.md +577 -0
  388. package/docs/channels/googlechat.md +250 -0
  389. package/docs/channels/grammy.md +31 -0
  390. package/docs/channels/imessage.md +299 -0
  391. package/docs/channels/index.md +46 -0
  392. package/docs/channels/line.md +186 -0
  393. package/docs/channels/location.md +56 -0
  394. package/docs/channels/matrix.md +233 -0
  395. package/docs/channels/mattermost.md +138 -0
  396. package/docs/channels/msteams.md +768 -0
  397. package/docs/channels/nextcloud-talk.md +136 -0
  398. package/docs/channels/nostr.md +233 -0
  399. package/docs/channels/signal.md +202 -0
  400. package/docs/channels/slack.md +548 -0
  401. package/docs/channels/telegram.md +769 -0
  402. package/docs/channels/tlon.md +132 -0
  403. package/docs/channels/troubleshooting.md +29 -0
  404. package/docs/channels/twitch.md +379 -0
  405. package/docs/channels/whatsapp.md +404 -0
  406. package/docs/channels/zalo.md +189 -0
  407. package/docs/channels/zalouser.md +140 -0
  408. package/docs/cli/acp.md +170 -0
  409. package/docs/cli/agent.md +24 -0
  410. package/docs/cli/agents.md +75 -0
  411. package/docs/cli/approvals.md +50 -0
  412. package/docs/cli/browser.md +107 -0
  413. package/docs/cli/channels.md +79 -0
  414. package/docs/cli/config.md +50 -0
  415. package/docs/cli/configure.md +33 -0
  416. package/docs/cli/cron.md +42 -0
  417. package/docs/cli/dashboard.md +16 -0
  418. package/docs/cli/devices.md +70 -0
  419. package/docs/cli/directory.md +63 -0
  420. package/docs/cli/dns.md +23 -0
  421. package/docs/cli/docs.md +15 -0
  422. package/docs/cli/doctor.md +41 -0
  423. package/docs/cli/gateway.md +202 -0
  424. package/docs/cli/health.md +21 -0
  425. package/docs/cli/hooks.md +304 -0
  426. package/docs/cli/index.md +1031 -0
  427. package/docs/cli/logs.md +24 -0
  428. package/docs/cli/memory.md +45 -0
  429. package/docs/cli/message.md +239 -0
  430. package/docs/cli/models.md +79 -0
  431. package/docs/cli/node.md +112 -0
  432. package/docs/cli/nodes.md +73 -0
  433. package/docs/cli/onboard.md +43 -0
  434. package/docs/cli/pairing.md +21 -0
  435. package/docs/cli/plugins.md +62 -0
  436. package/docs/cli/reset.md +17 -0
  437. package/docs/cli/sandbox.md +152 -0
  438. package/docs/cli/security.md +26 -0
  439. package/docs/cli/sessions.md +16 -0
  440. package/docs/cli/setup.md +29 -0
  441. package/docs/cli/skills.md +26 -0
  442. package/docs/cli/status.md +26 -0
  443. package/docs/cli/system.md +60 -0
  444. package/docs/cli/tui.md +23 -0
  445. package/docs/cli/uninstall.md +17 -0
  446. package/docs/cli/update.md +98 -0
  447. package/docs/cli/voicecall.md +34 -0
  448. package/docs/cli/webhooks.md +25 -0
  449. package/docs/concepts/agent-loop.md +146 -0
  450. package/docs/concepts/agent-workspace.md +233 -0
  451. package/docs/concepts/agent.md +123 -0
  452. package/docs/concepts/architecture.md +129 -0
  453. package/docs/concepts/channel-routing.md +114 -0
  454. package/docs/concepts/compaction.md +61 -0
  455. package/docs/concepts/context.md +161 -0
  456. package/docs/concepts/features.md +53 -0
  457. package/docs/concepts/group-messages.md +84 -0
  458. package/docs/concepts/groups.md +373 -0
  459. package/docs/concepts/markdown-formatting.md +130 -0
  460. package/docs/concepts/memory.md +546 -0
  461. package/docs/concepts/messages.md +154 -0
  462. package/docs/concepts/model-failover.md +149 -0
  463. package/docs/concepts/model-providers.md +316 -0
  464. package/docs/concepts/models.md +208 -0
  465. package/docs/concepts/multi-agent.md +376 -0
  466. package/docs/concepts/oauth.md +145 -0
  467. package/docs/concepts/presence.md +102 -0
  468. package/docs/concepts/queue.md +89 -0
  469. package/docs/concepts/retry.md +69 -0
  470. package/docs/concepts/session-pruning.md +122 -0
  471. package/docs/concepts/session-tool.md +193 -0
  472. package/docs/concepts/session.md +204 -0
  473. package/docs/concepts/sessions.md +10 -0
  474. package/docs/concepts/streaming.md +135 -0
  475. package/docs/concepts/system-prompt.md +115 -0
  476. package/docs/concepts/timezone.md +91 -0
  477. package/docs/concepts/typebox.md +289 -0
  478. package/docs/concepts/typing-indicators.md +68 -0
  479. package/docs/concepts/usage-tracking.md +35 -0
  480. package/docs/date-time.md +128 -0
  481. package/docs/debug/node-issue.md +83 -0
  482. package/docs/debugging.md +162 -0
  483. package/docs/diagnostics/flags.md +91 -0
  484. package/docs/docs.json +1736 -0
  485. package/docs/environment.md +81 -0
  486. package/docs/experiments/onboarding-config-protocol.md +40 -0
  487. package/docs/experiments/plans/cron-add-hardening.md +63 -0
  488. package/docs/experiments/plans/group-policy-hardening.md +40 -0
  489. package/docs/experiments/plans/openresponses-gateway.md +123 -0
  490. package/docs/experiments/proposals/model-config.md +36 -0
  491. package/docs/experiments/research/memory.md +228 -0
  492. package/docs/gateway/authentication.md +145 -0
  493. package/docs/gateway/background-process.md +93 -0
  494. package/docs/gateway/bonjour.md +167 -0
  495. package/docs/gateway/bridge-protocol.md +89 -0
  496. package/docs/gateway/cli-backends.md +225 -0
  497. package/docs/gateway/configuration-examples.md +606 -0
  498. package/docs/gateway/configuration.md +3411 -0
  499. package/docs/gateway/discovery.md +116 -0
  500. package/docs/gateway/doctor.md +282 -0
  501. package/docs/gateway/gateway-lock.md +34 -0
  502. package/docs/gateway/health.md +35 -0
  503. package/docs/gateway/heartbeat.md +362 -0
  504. package/docs/gateway/index.md +328 -0
  505. package/docs/gateway/local-models.md +150 -0
  506. package/docs/gateway/logging.md +113 -0
  507. package/docs/gateway/multiple-gateways.md +112 -0
  508. package/docs/gateway/network-model.md +17 -0
  509. package/docs/gateway/openai-http-api.md +118 -0
  510. package/docs/gateway/openresponses-http-api.md +317 -0
  511. package/docs/gateway/pairing.md +99 -0
  512. package/docs/gateway/protocol.md +221 -0
  513. package/docs/gateway/remote-gateway-readme.md +157 -0
  514. package/docs/gateway/remote.md +129 -0
  515. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +128 -0
  516. package/docs/gateway/sandboxing.md +193 -0
  517. package/docs/gateway/security/formal-verification.md +164 -0
  518. package/docs/gateway/security/index.md +825 -0
  519. package/docs/gateway/tailscale.md +127 -0
  520. package/docs/gateway/tools-invoke-http-api.md +85 -0
  521. package/docs/gateway/troubleshooting.md +767 -0
  522. package/docs/help/faq.md +2829 -0
  523. package/docs/help/index.md +21 -0
  524. package/docs/help/troubleshooting.md +98 -0
  525. package/docs/hooks/soul-evil.md +69 -0
  526. package/docs/hooks.md +913 -0
  527. package/docs/images/feishu-step2-create-app.png +0 -0
  528. package/docs/images/feishu-step3-credentials.png +0 -0
  529. package/docs/images/feishu-step4-permissions.png +0 -0
  530. package/docs/images/feishu-step5-bot-capability.png +0 -0
  531. package/docs/images/feishu-step6-event-subscription.png +0 -0
  532. package/docs/images/groups-flow.svg +52 -0
  533. package/docs/images/mobile-ui-screenshot.png +0 -0
  534. package/docs/index.md +192 -0
  535. package/docs/install/ansible.md +208 -0
  536. package/docs/install/bun.md +59 -0
  537. package/docs/install/development-channels.md +75 -0
  538. package/docs/install/docker.md +567 -0
  539. package/docs/install/exe-dev.md +126 -0
  540. package/docs/install/fly.md +486 -0
  541. package/docs/install/gcp.md +503 -0
  542. package/docs/install/hetzner.md +330 -0
  543. package/docs/install/index.md +187 -0
  544. package/docs/install/installer.md +123 -0
  545. package/docs/install/macos-vm.md +281 -0
  546. package/docs/install/migrating.md +192 -0
  547. package/docs/install/nix.md +96 -0
  548. package/docs/install/node.md +78 -0
  549. package/docs/install/northflank.mdx +53 -0
  550. package/docs/install/railway.mdx +99 -0
  551. package/docs/install/render.mdx +165 -0
  552. package/docs/install/uninstall.md +128 -0
  553. package/docs/install/updating.md +228 -0
  554. package/docs/logging.md +350 -0
  555. package/docs/multi-agent-sandbox-tools.md +395 -0
  556. package/docs/network.md +54 -0
  557. package/docs/nodes/audio.md +114 -0
  558. package/docs/nodes/camera.md +156 -0
  559. package/docs/nodes/images.md +72 -0
  560. package/docs/nodes/index.md +341 -0
  561. package/docs/nodes/location-command.md +113 -0
  562. package/docs/nodes/media-understanding.md +379 -0
  563. package/docs/nodes/talk.md +90 -0
  564. package/docs/nodes/voicewake.md +65 -0
  565. package/docs/perplexity.md +80 -0
  566. package/docs/pi-dev.md +70 -0
  567. package/docs/pi.md +612 -0
  568. package/docs/platforms/android.md +148 -0
  569. package/docs/platforms/digitalocean.md +262 -0
  570. package/docs/platforms/index.md +53 -0
  571. package/docs/platforms/ios.md +107 -0
  572. package/docs/platforms/linux.md +94 -0
  573. package/docs/platforms/mac/bundled-gateway.md +73 -0
  574. package/docs/platforms/mac/canvas.md +125 -0
  575. package/docs/platforms/mac/child-process.md +69 -0
  576. package/docs/platforms/mac/dev-setup.md +102 -0
  577. package/docs/platforms/mac/health.md +34 -0
  578. package/docs/platforms/mac/icon.md +31 -0
  579. package/docs/platforms/mac/logging.md +57 -0
  580. package/docs/platforms/mac/menu-bar.md +81 -0
  581. package/docs/platforms/mac/peekaboo.md +65 -0
  582. package/docs/platforms/mac/permissions.md +44 -0
  583. package/docs/platforms/mac/release.md +85 -0
  584. package/docs/platforms/mac/remote.md +83 -0
  585. package/docs/platforms/mac/signing.md +47 -0
  586. package/docs/platforms/mac/skills.md +33 -0
  587. package/docs/platforms/mac/voice-overlay.md +60 -0
  588. package/docs/platforms/mac/voicewake.md +67 -0
  589. package/docs/platforms/mac/webchat.md +41 -0
  590. package/docs/platforms/mac/xpc.md +61 -0
  591. package/docs/platforms/macos.md +203 -0
  592. package/docs/platforms/oracle.md +303 -0
  593. package/docs/platforms/raspberry-pi.md +358 -0
  594. package/docs/platforms/windows.md +159 -0
  595. package/docs/plugin.md +664 -0
  596. package/docs/plugins/agent-tools.md +99 -0
  597. package/docs/plugins/manifest.md +71 -0
  598. package/docs/plugins/voice-call.md +284 -0
  599. package/docs/plugins/zalouser.md +81 -0
  600. package/docs/prose.md +134 -0
  601. package/docs/providers/anthropic.md +152 -0
  602. package/docs/providers/claude-max-api-proxy.md +148 -0
  603. package/docs/providers/cloudflare-ai-gateway.md +71 -0
  604. package/docs/providers/deepgram.md +93 -0
  605. package/docs/providers/github-copilot.md +72 -0
  606. package/docs/providers/glm.md +33 -0
  607. package/docs/providers/index.md +63 -0
  608. package/docs/providers/minimax.md +208 -0
  609. package/docs/providers/models.md +51 -0
  610. package/docs/providers/moonshot.md +142 -0
  611. package/docs/providers/ollama.md +277 -0
  612. package/docs/providers/openai.md +62 -0
  613. package/docs/providers/opencode.md +36 -0
  614. package/docs/providers/openrouter.md +37 -0
  615. package/docs/providers/qwen.md +53 -0
  616. package/docs/providers/synthetic.md +99 -0
  617. package/docs/providers/venice.md +267 -0
  618. package/docs/providers/vercel-ai-gateway.md +50 -0
  619. package/docs/providers/xiaomi.md +64 -0
  620. package/docs/providers/zai.md +36 -0
  621. package/docs/refactor/clawnet.md +417 -0
  622. package/docs/refactor/exec-host.md +316 -0
  623. package/docs/refactor/outbound-session-mirroring.md +85 -0
  624. package/docs/refactor/plugin-sdk.md +214 -0
  625. package/docs/refactor/strict-config.md +93 -0
  626. package/docs/reference/AGENTS.default.md +124 -0
  627. package/docs/reference/RELEASING.md +120 -0
  628. package/docs/reference/api-usage-costs.md +137 -0
  629. package/docs/reference/credits.md +27 -0
  630. package/docs/reference/device-models.md +47 -0
  631. package/docs/reference/rpc.md +43 -0
  632. package/docs/reference/session-management-compaction.md +285 -0
  633. package/docs/reference/templates/AGENTS.dev.md +83 -0
  634. package/docs/reference/templates/AGENTS.md +218 -0
  635. package/docs/reference/templates/BOOT.md +10 -0
  636. package/docs/reference/templates/BOOTSTRAP.md +61 -0
  637. package/docs/reference/templates/HEARTBEAT.md +11 -0
  638. package/docs/reference/templates/IDENTITY.dev.md +47 -0
  639. package/docs/reference/templates/IDENTITY.md +27 -0
  640. package/docs/reference/templates/SOUL.dev.md +76 -0
  641. package/docs/reference/templates/SOUL.md +42 -0
  642. package/docs/reference/templates/TOOLS.dev.md +24 -0
  643. package/docs/reference/templates/TOOLS.md +46 -0
  644. package/docs/reference/templates/USER.dev.md +18 -0
  645. package/docs/reference/templates/USER.md +22 -0
  646. package/docs/reference/test.md +50 -0
  647. package/docs/reference/transcript-hygiene.md +129 -0
  648. package/docs/reference/wizard.md +268 -0
  649. package/docs/scripts.md +28 -0
  650. package/docs/security/formal-verification.md +164 -0
  651. package/docs/start/bootstrapping.md +41 -0
  652. package/docs/start/docs-directory.md +64 -0
  653. package/docs/start/getting-started.md +120 -0
  654. package/docs/start/hubs.md +197 -0
  655. package/docs/start/lore.md +219 -0
  656. package/docs/start/onboarding.md +80 -0
  657. package/docs/start/openclaw.md +224 -0
  658. package/docs/start/pairing.md +86 -0
  659. package/docs/start/quickstart.md +22 -0
  660. package/docs/start/setup.md +162 -0
  661. package/docs/start/showcase.md +416 -0
  662. package/docs/start/wizard-cli-automation.md +141 -0
  663. package/docs/start/wizard-cli-reference.md +244 -0
  664. package/docs/start/wizard.md +108 -0
  665. package/docs/style.css +3 -0
  666. package/docs/testing.md +368 -0
  667. package/docs/token-use.md +112 -0
  668. package/docs/tools/agent-send.md +53 -0
  669. package/docs/tools/apply-patch.md +50 -0
  670. package/docs/tools/browser-linux-troubleshooting.md +139 -0
  671. package/docs/tools/browser-login.md +68 -0
  672. package/docs/tools/browser.md +576 -0
  673. package/docs/tools/chrome-extension.md +178 -0
  674. package/docs/tools/clawhub.md +257 -0
  675. package/docs/tools/creating-skills.md +54 -0
  676. package/docs/tools/elevated.md +57 -0
  677. package/docs/tools/exec-approvals.md +246 -0
  678. package/docs/tools/exec.md +179 -0
  679. package/docs/tools/firecrawl.md +61 -0
  680. package/docs/tools/index.md +512 -0
  681. package/docs/tools/llm-task.md +115 -0
  682. package/docs/tools/lobster.md +342 -0
  683. package/docs/tools/reactions.md +22 -0
  684. package/docs/tools/skills-config.md +76 -0
  685. package/docs/tools/skills.md +300 -0
  686. package/docs/tools/slash-commands.md +198 -0
  687. package/docs/tools/subagents.md +151 -0
  688. package/docs/tools/thinking.md +74 -0
  689. package/docs/tools/web.md +261 -0
  690. package/docs/tts.md +396 -0
  691. package/docs/tui.md +162 -0
  692. package/docs/vps.md +43 -0
  693. package/docs/web/control-ui.md +223 -0
  694. package/docs/web/dashboard.md +46 -0
  695. package/docs/web/index.md +116 -0
  696. package/docs/web/webchat.md +49 -0
  697. package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
  698. package/docs/whatsapp-openclaw.jpg +0 -0
  699. package/docs/zh-CN/AGENTS.md +59 -0
  700. package/docs/zh-CN/automation/auth-monitoring.md +47 -0
  701. package/docs/zh-CN/automation/cron-jobs.md +424 -0
  702. package/docs/zh-CN/automation/cron-vs-heartbeat.md +286 -0
  703. package/docs/zh-CN/automation/gmail-pubsub.md +249 -0
  704. package/docs/zh-CN/automation/poll.md +76 -0
  705. package/docs/zh-CN/automation/webhook.md +163 -0
  706. package/docs/zh-CN/bedrock.md +170 -0
  707. package/docs/zh-CN/brave-search.md +48 -0
  708. package/docs/zh-CN/broadcast-groups.md +449 -0
  709. package/docs/zh-CN/channels/bluebubbles.md +271 -0
  710. package/docs/zh-CN/channels/discord.md +468 -0
  711. package/docs/zh-CN/channels/feishu.md +629 -0
  712. package/docs/zh-CN/channels/googlechat.md +257 -0
  713. package/docs/zh-CN/channels/grammy.md +38 -0
  714. package/docs/zh-CN/channels/imessage.md +302 -0
  715. package/docs/zh-CN/channels/index.md +53 -0
  716. package/docs/zh-CN/channels/line.md +180 -0
  717. package/docs/zh-CN/channels/location.md +63 -0
  718. package/docs/zh-CN/channels/matrix.md +221 -0
  719. package/docs/zh-CN/channels/mattermost.md +144 -0
  720. package/docs/zh-CN/channels/msteams.md +775 -0
  721. package/docs/zh-CN/channels/nextcloud-talk.md +142 -0
  722. package/docs/zh-CN/channels/nostr.md +240 -0
  723. package/docs/zh-CN/channels/signal.md +209 -0
  724. package/docs/zh-CN/channels/slack.md +531 -0
  725. package/docs/zh-CN/channels/telegram.md +751 -0
  726. package/docs/zh-CN/channels/tlon.md +136 -0
  727. package/docs/zh-CN/channels/troubleshooting.md +36 -0
  728. package/docs/zh-CN/channels/twitch.md +385 -0
  729. package/docs/zh-CN/channels/whatsapp.md +411 -0
  730. package/docs/zh-CN/channels/zalo.md +196 -0
  731. package/docs/zh-CN/channels/zalouser.md +147 -0
  732. package/docs/zh-CN/cli/acp.md +173 -0
  733. package/docs/zh-CN/cli/agent.md +30 -0
  734. package/docs/zh-CN/cli/agents.md +82 -0
  735. package/docs/zh-CN/cli/approvals.md +57 -0
  736. package/docs/zh-CN/cli/browser.md +114 -0
  737. package/docs/zh-CN/cli/channels.md +86 -0
  738. package/docs/zh-CN/cli/config.md +57 -0
  739. package/docs/zh-CN/cli/configure.md +38 -0
  740. package/docs/zh-CN/cli/cron.md +43 -0
  741. package/docs/zh-CN/cli/dashboard.md +23 -0
  742. package/docs/zh-CN/cli/devices.md +74 -0
  743. package/docs/zh-CN/cli/directory.md +70 -0
  744. package/docs/zh-CN/cli/dns.md +30 -0
  745. package/docs/zh-CN/cli/docs.md +22 -0
  746. package/docs/zh-CN/cli/doctor.md +48 -0
  747. package/docs/zh-CN/cli/gateway.md +206 -0
  748. package/docs/zh-CN/cli/health.md +28 -0
  749. package/docs/zh-CN/cli/hooks.md +311 -0
  750. package/docs/zh-CN/cli/index.md +1032 -0
  751. package/docs/zh-CN/cli/logs.md +31 -0
  752. package/docs/zh-CN/cli/memory.md +52 -0
  753. package/docs/zh-CN/cli/message.md +246 -0
  754. package/docs/zh-CN/cli/models.md +85 -0
  755. package/docs/zh-CN/cli/node.md +115 -0
  756. package/docs/zh-CN/cli/nodes.md +80 -0
  757. package/docs/zh-CN/cli/onboard.md +36 -0
  758. package/docs/zh-CN/cli/pairing.md +28 -0
  759. package/docs/zh-CN/cli/plugins.md +66 -0
  760. package/docs/zh-CN/cli/reset.md +24 -0
  761. package/docs/zh-CN/cli/sandbox.md +158 -0
  762. package/docs/zh-CN/cli/security.md +33 -0
  763. package/docs/zh-CN/cli/sessions.md +23 -0
  764. package/docs/zh-CN/cli/setup.md +36 -0
  765. package/docs/zh-CN/cli/skills.md +33 -0
  766. package/docs/zh-CN/cli/status.md +33 -0
  767. package/docs/zh-CN/cli/system.md +63 -0
  768. package/docs/zh-CN/cli/tui.md +30 -0
  769. package/docs/zh-CN/cli/uninstall.md +24 -0
  770. package/docs/zh-CN/cli/update.md +101 -0
  771. package/docs/zh-CN/cli/voicecall.md +41 -0
  772. package/docs/zh-CN/cli/webhooks.md +32 -0
  773. package/docs/zh-CN/concepts/agent-loop.md +146 -0
  774. package/docs/zh-CN/concepts/agent-workspace.md +219 -0
  775. package/docs/zh-CN/concepts/agent.md +115 -0
  776. package/docs/zh-CN/concepts/architecture.md +123 -0
  777. package/docs/zh-CN/concepts/channel-routing.md +117 -0
  778. package/docs/zh-CN/concepts/compaction.md +67 -0
  779. package/docs/zh-CN/concepts/context.md +168 -0
  780. package/docs/zh-CN/concepts/features.md +59 -0
  781. package/docs/zh-CN/concepts/group-messages.md +91 -0
  782. package/docs/zh-CN/concepts/groups.md +379 -0
  783. package/docs/zh-CN/concepts/markdown-formatting.md +117 -0
  784. package/docs/zh-CN/concepts/memory.md +412 -0
  785. package/docs/zh-CN/concepts/messages.md +141 -0
  786. package/docs/zh-CN/concepts/model-failover.md +145 -0
  787. package/docs/zh-CN/concepts/model-providers.md +320 -0
  788. package/docs/zh-CN/concepts/models.md +196 -0
  789. package/docs/zh-CN/concepts/multi-agent.md +372 -0
  790. package/docs/zh-CN/concepts/oauth.md +151 -0
  791. package/docs/zh-CN/concepts/presence.md +99 -0
  792. package/docs/zh-CN/concepts/queue.md +94 -0
  793. package/docs/zh-CN/concepts/retry.md +76 -0
  794. package/docs/zh-CN/concepts/session-pruning.md +129 -0
  795. package/docs/zh-CN/concepts/session-tool.md +200 -0
  796. package/docs/zh-CN/concepts/session.md +166 -0
  797. package/docs/zh-CN/concepts/sessions.md +17 -0
  798. package/docs/zh-CN/concepts/streaming.md +133 -0
  799. package/docs/zh-CN/concepts/system-prompt.md +101 -0
  800. package/docs/zh-CN/concepts/timezone.md +96 -0
  801. package/docs/zh-CN/concepts/typebox.md +284 -0
  802. package/docs/zh-CN/concepts/typing-indicators.md +74 -0
  803. package/docs/zh-CN/concepts/usage-tracking.md +42 -0
  804. package/docs/zh-CN/date-time.md +129 -0
  805. package/docs/zh-CN/debug/node-issue.md +90 -0
  806. package/docs/zh-CN/debugging.md +160 -0
  807. package/docs/zh-CN/diagnostics/flags.md +98 -0
  808. package/docs/zh-CN/environment.md +88 -0
  809. package/docs/zh-CN/experiments/onboarding-config-protocol.md +47 -0
  810. package/docs/zh-CN/experiments/plans/cron-add-hardening.md +70 -0
  811. package/docs/zh-CN/experiments/plans/group-policy-hardening.md +45 -0
  812. package/docs/zh-CN/experiments/plans/openresponses-gateway.md +121 -0
  813. package/docs/zh-CN/experiments/proposals/model-config.md +42 -0
  814. package/docs/zh-CN/experiments/research/memory.md +235 -0
  815. package/docs/zh-CN/gateway/authentication.md +142 -0
  816. package/docs/zh-CN/gateway/background-process.md +100 -0
  817. package/docs/zh-CN/gateway/bonjour.md +174 -0
  818. package/docs/zh-CN/gateway/bridge-protocol.md +86 -0
  819. package/docs/zh-CN/gateway/cli-backends.md +213 -0
  820. package/docs/zh-CN/gateway/configuration-examples.md +587 -0
  821. package/docs/zh-CN/gateway/configuration.md +3332 -0
  822. package/docs/zh-CN/gateway/discovery.md +123 -0
  823. package/docs/zh-CN/gateway/doctor.md +238 -0
  824. package/docs/zh-CN/gateway/gateway-lock.md +41 -0
  825. package/docs/zh-CN/gateway/health.md +42 -0
  826. package/docs/zh-CN/gateway/heartbeat.md +274 -0
  827. package/docs/zh-CN/gateway/index.md +335 -0
  828. package/docs/zh-CN/gateway/local-models.md +157 -0
  829. package/docs/zh-CN/gateway/logging.md +114 -0
  830. package/docs/zh-CN/gateway/multiple-gateways.md +119 -0
  831. package/docs/zh-CN/gateway/network-model.md +23 -0
  832. package/docs/zh-CN/gateway/openai-http-api.md +125 -0
  833. package/docs/zh-CN/gateway/openresponses-http-api.md +317 -0
  834. package/docs/zh-CN/gateway/pairing.md +99 -0
  835. package/docs/zh-CN/gateway/protocol.md +220 -0
  836. package/docs/zh-CN/gateway/remote-gateway-readme.md +164 -0
  837. package/docs/zh-CN/gateway/remote.md +133 -0
  838. package/docs/zh-CN/gateway/sandbox-vs-tool-policy-vs-elevated.md +135 -0
  839. package/docs/zh-CN/gateway/sandboxing.md +188 -0
  840. package/docs/zh-CN/gateway/security/formal-verification.md +169 -0
  841. package/docs/zh-CN/gateway/security/index.md +777 -0
  842. package/docs/zh-CN/gateway/tailscale.md +124 -0
  843. package/docs/zh-CN/gateway/tools-invoke-http-api.md +92 -0
  844. package/docs/zh-CN/gateway/troubleshooting.md +771 -0
  845. package/docs/zh-CN/help/faq.md +2628 -0
  846. package/docs/zh-CN/help/index.md +28 -0
  847. package/docs/zh-CN/help/troubleshooting.md +104 -0
  848. package/docs/zh-CN/hooks/soul-evil.md +72 -0
  849. package/docs/zh-CN/hooks.md +919 -0
  850. package/docs/zh-CN/index.md +186 -0
  851. package/docs/zh-CN/install/ansible.md +215 -0
  852. package/docs/zh-CN/install/bun.md +65 -0
  853. package/docs/zh-CN/install/development-channels.md +81 -0
  854. package/docs/zh-CN/install/docker.md +532 -0
  855. package/docs/zh-CN/install/exe-dev.md +127 -0
  856. package/docs/zh-CN/install/fly.md +490 -0
  857. package/docs/zh-CN/install/gcp.md +510 -0
  858. package/docs/zh-CN/install/hetzner.md +337 -0
  859. package/docs/zh-CN/install/index.md +193 -0
  860. package/docs/zh-CN/install/installer.md +128 -0
  861. package/docs/zh-CN/install/macos-vm.md +288 -0
  862. package/docs/zh-CN/install/migrating.md +199 -0
  863. package/docs/zh-CN/install/nix.md +99 -0
  864. package/docs/zh-CN/install/node.md +85 -0
  865. package/docs/zh-CN/install/northflank.mdx +60 -0
  866. package/docs/zh-CN/install/railway.mdx +106 -0
  867. package/docs/zh-CN/install/render.mdx +169 -0
  868. package/docs/zh-CN/install/uninstall.md +135 -0
  869. package/docs/zh-CN/install/updating.md +233 -0
  870. package/docs/zh-CN/logging.md +329 -0
  871. package/docs/zh-CN/multi-agent-sandbox-tools.md +401 -0
  872. package/docs/zh-CN/network.md +59 -0
  873. package/docs/zh-CN/nodes/audio.md +120 -0
  874. package/docs/zh-CN/nodes/camera.md +162 -0
  875. package/docs/zh-CN/nodes/images.md +79 -0
  876. package/docs/zh-CN/nodes/index.md +348 -0
  877. package/docs/zh-CN/nodes/location-command.md +120 -0
  878. package/docs/zh-CN/nodes/media-understanding.md +380 -0
  879. package/docs/zh-CN/nodes/talk.md +97 -0
  880. package/docs/zh-CN/nodes/voicewake.md +72 -0
  881. package/docs/zh-CN/perplexity.md +84 -0
  882. package/docs/zh-CN/pi-dev.md +77 -0
  883. package/docs/zh-CN/pi.md +619 -0
  884. package/docs/zh-CN/platforms/android.md +155 -0
  885. package/docs/zh-CN/platforms/digitalocean.md +269 -0
  886. package/docs/zh-CN/platforms/index.md +60 -0
  887. package/docs/zh-CN/platforms/ios.md +114 -0
  888. package/docs/zh-CN/platforms/linux.md +101 -0
  889. package/docs/zh-CN/platforms/mac/bundled-gateway.md +75 -0
  890. package/docs/zh-CN/platforms/mac/canvas.md +128 -0
  891. package/docs/zh-CN/platforms/mac/child-process.md +73 -0
  892. package/docs/zh-CN/platforms/mac/dev-setup.md +109 -0
  893. package/docs/zh-CN/platforms/mac/health.md +41 -0
  894. package/docs/zh-CN/platforms/mac/icon.md +38 -0
  895. package/docs/zh-CN/platforms/mac/logging.md +64 -0
  896. package/docs/zh-CN/platforms/mac/menu-bar.md +88 -0
  897. package/docs/zh-CN/platforms/mac/peekaboo.md +62 -0
  898. package/docs/zh-CN/platforms/mac/permissions.md +46 -0
  899. package/docs/zh-CN/platforms/mac/release.md +92 -0
  900. package/docs/zh-CN/platforms/mac/remote.md +90 -0
  901. package/docs/zh-CN/platforms/mac/signing.md +54 -0
  902. package/docs/zh-CN/platforms/mac/skills.md +40 -0
  903. package/docs/zh-CN/platforms/mac/voice-overlay.md +67 -0
  904. package/docs/zh-CN/platforms/mac/voicewake.md +74 -0
  905. package/docs/zh-CN/platforms/mac/webchat.md +43 -0
  906. package/docs/zh-CN/platforms/mac/xpc.md +68 -0
  907. package/docs/zh-CN/platforms/macos.md +193 -0
  908. package/docs/zh-CN/platforms/oracle.md +310 -0
  909. package/docs/zh-CN/platforms/raspberry-pi.md +365 -0
  910. package/docs/zh-CN/platforms/windows.md +156 -0
  911. package/docs/zh-CN/plugin.md +639 -0
  912. package/docs/zh-CN/plugins/agent-tools.md +99 -0
  913. package/docs/zh-CN/plugins/manifest.md +68 -0
  914. package/docs/zh-CN/plugins/voice-call.md +250 -0
  915. package/docs/zh-CN/plugins/zalouser.md +88 -0
  916. package/docs/zh-CN/prose.md +141 -0
  917. package/docs/zh-CN/providers/anthropic.md +159 -0
  918. package/docs/zh-CN/providers/claude-max-api-proxy.md +155 -0
  919. package/docs/zh-CN/providers/deepgram.md +97 -0
  920. package/docs/zh-CN/providers/github-copilot.md +67 -0
  921. package/docs/zh-CN/providers/glm.md +39 -0
  922. package/docs/zh-CN/providers/index.md +68 -0
  923. package/docs/zh-CN/providers/minimax.md +206 -0
  924. package/docs/zh-CN/providers/models.md +55 -0
  925. package/docs/zh-CN/providers/moonshot.md +145 -0
  926. package/docs/zh-CN/providers/ollama.md +230 -0
  927. package/docs/zh-CN/providers/openai.md +68 -0
  928. package/docs/zh-CN/providers/opencode.md +41 -0
  929. package/docs/zh-CN/providers/openrouter.md +43 -0
  930. package/docs/zh-CN/providers/qwen.md +55 -0
  931. package/docs/zh-CN/providers/synthetic.md +102 -0
  932. package/docs/zh-CN/providers/venice.md +274 -0
  933. package/docs/zh-CN/providers/vercel-ai-gateway.md +57 -0
  934. package/docs/zh-CN/providers/xiaomi.md +68 -0
  935. package/docs/zh-CN/providers/zai.md +41 -0
  936. package/docs/zh-CN/refactor/clawnet.md +424 -0
  937. package/docs/zh-CN/refactor/exec-host.md +323 -0
  938. package/docs/zh-CN/refactor/outbound-session-mirroring.md +92 -0
  939. package/docs/zh-CN/refactor/plugin-sdk.md +221 -0
  940. package/docs/zh-CN/refactor/strict-config.md +100 -0
  941. package/docs/zh-CN/reference/AGENTS.default.md +131 -0
  942. package/docs/zh-CN/reference/RELEASING.md +123 -0
  943. package/docs/zh-CN/reference/api-usage-costs.md +136 -0
  944. package/docs/zh-CN/reference/credits.md +34 -0
  945. package/docs/zh-CN/reference/device-models.md +54 -0
  946. package/docs/zh-CN/reference/rpc.md +48 -0
  947. package/docs/zh-CN/reference/session-management-compaction.md +287 -0
  948. package/docs/zh-CN/reference/templates/AGENTS.dev.md +89 -0
  949. package/docs/zh-CN/reference/templates/AGENTS.md +225 -0
  950. package/docs/zh-CN/reference/templates/BOOT.md +17 -0
  951. package/docs/zh-CN/reference/templates/BOOTSTRAP.md +68 -0
  952. package/docs/zh-CN/reference/templates/HEARTBEAT.md +18 -0
  953. package/docs/zh-CN/reference/templates/IDENTITY.dev.md +54 -0
  954. package/docs/zh-CN/reference/templates/IDENTITY.md +35 -0
  955. package/docs/zh-CN/reference/templates/SOUL.dev.md +83 -0
  956. package/docs/zh-CN/reference/templates/SOUL.md +49 -0
  957. package/docs/zh-CN/reference/templates/TOOLS.dev.md +31 -0
  958. package/docs/zh-CN/reference/templates/TOOLS.md +53 -0
  959. package/docs/zh-CN/reference/templates/USER.dev.md +25 -0
  960. package/docs/zh-CN/reference/templates/USER.md +30 -0
  961. package/docs/zh-CN/reference/test.md +57 -0
  962. package/docs/zh-CN/reference/transcript-hygiene.md +109 -0
  963. package/docs/zh-CN/scripts.md +35 -0
  964. package/docs/zh-CN/security/formal-verification.md +171 -0
  965. package/docs/zh-CN/start/docs-directory.md +70 -0
  966. package/docs/zh-CN/start/getting-started.md +206 -0
  967. package/docs/zh-CN/start/hubs.md +200 -0
  968. package/docs/zh-CN/start/lore.md +226 -0
  969. package/docs/zh-CN/start/onboarding.md +105 -0
  970. package/docs/zh-CN/start/openclaw.md +248 -0
  971. package/docs/zh-CN/start/pairing.md +89 -0
  972. package/docs/zh-CN/start/quickstart.md +88 -0
  973. package/docs/zh-CN/start/setup.md +153 -0
  974. package/docs/zh-CN/start/showcase.md +423 -0
  975. package/docs/zh-CN/start/wizard.md +331 -0
  976. package/docs/zh-CN/testing.md +375 -0
  977. package/docs/zh-CN/token-use.md +119 -0
  978. package/docs/zh-CN/tools/agent-send.md +59 -0
  979. package/docs/zh-CN/tools/apply-patch.md +57 -0
  980. package/docs/zh-CN/tools/browser-linux-troubleshooting.md +144 -0
  981. package/docs/zh-CN/tools/browser-login.md +75 -0
  982. package/docs/zh-CN/tools/browser.md +553 -0
  983. package/docs/zh-CN/tools/chrome-extension.md +183 -0
  984. package/docs/zh-CN/tools/clawhub.md +209 -0
  985. package/docs/zh-CN/tools/creating-skills.md +61 -0
  986. package/docs/zh-CN/tools/elevated.md +64 -0
  987. package/docs/zh-CN/tools/exec-approvals.md +234 -0
  988. package/docs/zh-CN/tools/exec.md +169 -0
  989. package/docs/zh-CN/tools/firecrawl.md +68 -0
  990. package/docs/zh-CN/tools/index.md +515 -0
  991. package/docs/zh-CN/tools/llm-task.md +117 -0
  992. package/docs/zh-CN/tools/lobster.md +349 -0
  993. package/docs/zh-CN/tools/reactions.md +29 -0
  994. package/docs/zh-CN/tools/skills-config.md +78 -0
  995. package/docs/zh-CN/tools/skills.md +279 -0
  996. package/docs/zh-CN/tools/slash-commands.md +205 -0
  997. package/docs/zh-CN/tools/subagents.md +156 -0
  998. package/docs/zh-CN/tools/thinking.md +80 -0
  999. package/docs/zh-CN/tools/web.md +257 -0
  1000. package/docs/zh-CN/tts.md +375 -0
  1001. package/docs/zh-CN/tui.md +166 -0
  1002. package/docs/zh-CN/vps.md +47 -0
  1003. package/docs/zh-CN/web/control-ui.md +191 -0
  1004. package/docs/zh-CN/web/dashboard.md +53 -0
  1005. package/docs/zh-CN/web/index.md +118 -0
  1006. package/docs/zh-CN/web/webchat.md +56 -0
  1007. package/extensions/blockchain/cryptoclaw.plugin.json +17 -0
  1008. package/extensions/blockchain/index.ts +284 -0
  1009. package/extensions/blockchain/node_modules/.bin/cryptoclaw +21 -0
  1010. package/extensions/blockchain/node_modules/.bin/tsc +21 -0
  1011. package/extensions/blockchain/node_modules/.bin/tsserver +21 -0
  1012. package/extensions/blockchain/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  1013. package/extensions/blockchain/package.json +16 -0
  1014. package/extensions/blockchain/src/evm/chains.ts +150 -0
  1015. package/extensions/blockchain/src/evm/services/abi/erc1155.ts +128 -0
  1016. package/extensions/blockchain/src/evm/services/abi/erc20.ts +96 -0
  1017. package/extensions/blockchain/src/evm/services/abi/erc721.ts +130 -0
  1018. package/extensions/blockchain/src/evm/services/abi/erc8004-identity.ts +158 -0
  1019. package/extensions/blockchain/src/evm/services/abi/erc8004-reputation.ts +120 -0
  1020. package/extensions/blockchain/src/evm/services/abi/router-v2.ts +115 -0
  1021. package/extensions/blockchain/src/evm/services/abi/router-v3.ts +81 -0
  1022. package/extensions/blockchain/src/evm/services/agent-identity-config.test.ts +117 -0
  1023. package/extensions/blockchain/src/evm/services/agent-identity-config.ts +75 -0
  1024. package/extensions/blockchain/src/evm/services/agent-identity-store.ts +37 -0
  1025. package/extensions/blockchain/src/evm/services/agent-identity.ts +262 -0
  1026. package/extensions/blockchain/src/evm/services/balance.ts +76 -0
  1027. package/extensions/blockchain/src/evm/services/blocks.ts +25 -0
  1028. package/extensions/blockchain/src/evm/services/clients.ts +48 -0
  1029. package/extensions/blockchain/src/evm/services/contracts.ts +52 -0
  1030. package/extensions/blockchain/src/evm/services/dex-config.test.ts +145 -0
  1031. package/extensions/blockchain/src/evm/services/dex-config.ts +164 -0
  1032. package/extensions/blockchain/src/evm/services/ens.ts +27 -0
  1033. package/extensions/blockchain/src/evm/services/security.test.ts +127 -0
  1034. package/extensions/blockchain/src/evm/services/security.ts +110 -0
  1035. package/extensions/blockchain/src/evm/services/swap.test.ts +204 -0
  1036. package/extensions/blockchain/src/evm/services/swap.ts +534 -0
  1037. package/extensions/blockchain/src/evm/services/tokens.ts +118 -0
  1038. package/extensions/blockchain/src/evm/services/transactions.ts +54 -0
  1039. package/extensions/blockchain/src/evm/services/transfer.ts +174 -0
  1040. package/extensions/blockchain/src/evm/services/utils.ts +18 -0
  1041. package/extensions/blockchain/src/evm/tools/block-tools.ts +34 -0
  1042. package/extensions/blockchain/src/evm/tools/contract-tools.ts +138 -0
  1043. package/extensions/blockchain/src/evm/tools/identity-tools.ts +305 -0
  1044. package/extensions/blockchain/src/evm/tools/network-tools.ts +58 -0
  1045. package/extensions/blockchain/src/evm/tools/nft-tools.ts +103 -0
  1046. package/extensions/blockchain/src/evm/tools/security-tools.ts +38 -0
  1047. package/extensions/blockchain/src/evm/tools/swap-tools.ts +314 -0
  1048. package/extensions/blockchain/src/evm/tools/token-tools.ts +167 -0
  1049. package/extensions/blockchain/src/evm/tools/tx-tools.ts +73 -0
  1050. package/extensions/blockchain/src/evm/tools/wallet-tools.ts +196 -0
  1051. package/extensions/blockchain/src/tx-gate/confirmation.ts +55 -0
  1052. package/extensions/blockchain/src/tx-gate/spending-limits.ts +94 -0
  1053. package/extensions/blockchain/src/wallet/active-wallet.ts +27 -0
  1054. package/extensions/blockchain/src/wallet/key-guard.test.ts +156 -0
  1055. package/extensions/blockchain/src/wallet/key-guard.ts +80 -0
  1056. package/extensions/blockchain/src/wallet/keystore.ts +88 -0
  1057. package/extensions/blockchain/src/wallet/wallet-manager.test.ts +215 -0
  1058. package/extensions/blockchain/src/wallet/wallet-manager.ts +212 -0
  1059. package/extensions/copilot-proxy/README.md +24 -0
  1060. package/extensions/copilot-proxy/index.ts +149 -0
  1061. package/extensions/copilot-proxy/node_modules/.bin/cryptoclaw +21 -0
  1062. package/extensions/copilot-proxy/openclaw.plugin.json +9 -0
  1063. package/extensions/copilot-proxy/package.json +14 -0
  1064. package/extensions/diagnostics-otel/index.ts +15 -0
  1065. package/extensions/diagnostics-otel/node_modules/.bin/acorn +21 -0
  1066. package/extensions/diagnostics-otel/node_modules/.bin/cryptoclaw +21 -0
  1067. package/extensions/diagnostics-otel/openclaw.plugin.json +8 -0
  1068. package/extensions/diagnostics-otel/package.json +27 -0
  1069. package/extensions/diagnostics-otel/src/service.test.ts +227 -0
  1070. package/extensions/diagnostics-otel/src/service.ts +635 -0
  1071. package/extensions/discord/index.ts +17 -0
  1072. package/extensions/discord/node_modules/.bin/cryptoclaw +21 -0
  1073. package/extensions/discord/openclaw.plugin.json +9 -0
  1074. package/extensions/discord/package.json +14 -0
  1075. package/extensions/discord/src/channel.ts +422 -0
  1076. package/extensions/discord/src/runtime.ts +14 -0
  1077. package/extensions/imessage/index.ts +17 -0
  1078. package/extensions/imessage/node_modules/.bin/cryptoclaw +21 -0
  1079. package/extensions/imessage/openclaw.plugin.json +9 -0
  1080. package/extensions/imessage/package.json +14 -0
  1081. package/extensions/imessage/src/channel.ts +294 -0
  1082. package/extensions/imessage/src/runtime.ts +14 -0
  1083. package/extensions/memory-core/index.ts +38 -0
  1084. package/extensions/memory-core/node_modules/.bin/cryptoclaw +21 -0
  1085. package/extensions/memory-core/openclaw.plugin.json +9 -0
  1086. package/extensions/memory-core/package.json +17 -0
  1087. package/extensions/memory-lancedb/config.ts +139 -0
  1088. package/extensions/memory-lancedb/index.test.ts +295 -0
  1089. package/extensions/memory-lancedb/index.ts +608 -0
  1090. package/extensions/memory-lancedb/node_modules/.bin/arrow2csv +21 -0
  1091. package/extensions/memory-lancedb/node_modules/.bin/cryptoclaw +21 -0
  1092. package/extensions/memory-lancedb/node_modules/.bin/openai +21 -0
  1093. package/extensions/memory-lancedb/openclaw.plugin.json +60 -0
  1094. package/extensions/memory-lancedb/package.json +19 -0
  1095. package/extensions/nostr/CHANGELOG.md +80 -0
  1096. package/extensions/nostr/README.md +136 -0
  1097. package/extensions/nostr/index.ts +68 -0
  1098. package/extensions/nostr/node_modules/.bin/cryptoclaw +21 -0
  1099. package/extensions/nostr/node_modules/.bin/tsc +21 -0
  1100. package/extensions/nostr/node_modules/.bin/tsserver +21 -0
  1101. package/extensions/nostr/openclaw.plugin.json +9 -0
  1102. package/extensions/nostr/package.json +34 -0
  1103. package/extensions/nostr/src/channel.test.ts +151 -0
  1104. package/extensions/nostr/src/channel.ts +353 -0
  1105. package/extensions/nostr/src/config-schema.ts +90 -0
  1106. package/extensions/nostr/src/metrics.ts +478 -0
  1107. package/extensions/nostr/src/nostr-bus.fuzz.test.ts +533 -0
  1108. package/extensions/nostr/src/nostr-bus.integration.test.ts +448 -0
  1109. package/extensions/nostr/src/nostr-bus.test.ts +199 -0
  1110. package/extensions/nostr/src/nostr-bus.ts +715 -0
  1111. package/extensions/nostr/src/nostr-profile-http.test.ts +378 -0
  1112. package/extensions/nostr/src/nostr-profile-http.ts +519 -0
  1113. package/extensions/nostr/src/nostr-profile-import.test.ts +119 -0
  1114. package/extensions/nostr/src/nostr-profile-import.ts +262 -0
  1115. package/extensions/nostr/src/nostr-profile.fuzz.test.ts +477 -0
  1116. package/extensions/nostr/src/nostr-profile.test.ts +410 -0
  1117. package/extensions/nostr/src/nostr-profile.ts +277 -0
  1118. package/extensions/nostr/src/nostr-state-store.test.ts +131 -0
  1119. package/extensions/nostr/src/nostr-state-store.ts +226 -0
  1120. package/extensions/nostr/src/runtime.ts +14 -0
  1121. package/extensions/nostr/src/seen-tracker.ts +303 -0
  1122. package/extensions/nostr/src/types.test.ts +157 -0
  1123. package/extensions/nostr/src/types.ts +101 -0
  1124. package/extensions/nostr/test/setup.ts +5 -0
  1125. package/extensions/signal/index.ts +17 -0
  1126. package/extensions/signal/node_modules/.bin/cryptoclaw +21 -0
  1127. package/extensions/signal/openclaw.plugin.json +9 -0
  1128. package/extensions/signal/package.json +14 -0
  1129. package/extensions/signal/src/channel.ts +315 -0
  1130. package/extensions/signal/src/runtime.ts +14 -0
  1131. package/extensions/slack/index.ts +17 -0
  1132. package/extensions/slack/node_modules/.bin/cryptoclaw +21 -0
  1133. package/extensions/slack/openclaw.plugin.json +9 -0
  1134. package/extensions/slack/package.json +14 -0
  1135. package/extensions/slack/src/channel.ts +604 -0
  1136. package/extensions/slack/src/runtime.ts +14 -0
  1137. package/extensions/telegram/index.ts +17 -0
  1138. package/extensions/telegram/node_modules/.bin/cryptoclaw +21 -0
  1139. package/extensions/telegram/openclaw.plugin.json +9 -0
  1140. package/extensions/telegram/package.json +14 -0
  1141. package/extensions/telegram/src/channel.ts +482 -0
  1142. package/extensions/telegram/src/runtime.ts +14 -0
  1143. package/extensions/voice-call/CHANGELOG.md +115 -0
  1144. package/extensions/voice-call/README.md +139 -0
  1145. package/extensions/voice-call/index.ts +493 -0
  1146. package/extensions/voice-call/node_modules/.bin/cryptoclaw +21 -0
  1147. package/extensions/voice-call/openclaw.plugin.json +559 -0
  1148. package/extensions/voice-call/package.json +19 -0
  1149. package/extensions/voice-call/src/allowlist.ts +19 -0
  1150. package/extensions/voice-call/src/cli.ts +279 -0
  1151. package/extensions/voice-call/src/config.test.ts +234 -0
  1152. package/extensions/voice-call/src/config.ts +523 -0
  1153. package/extensions/voice-call/src/core-bridge.ts +159 -0
  1154. package/extensions/voice-call/src/manager/context.ts +21 -0
  1155. package/extensions/voice-call/src/manager/events.ts +188 -0
  1156. package/extensions/voice-call/src/manager/lookup.ts +35 -0
  1157. package/extensions/voice-call/src/manager/outbound.ts +275 -0
  1158. package/extensions/voice-call/src/manager/state.ts +48 -0
  1159. package/extensions/voice-call/src/manager/store.ts +91 -0
  1160. package/extensions/voice-call/src/manager/timers.ts +89 -0
  1161. package/extensions/voice-call/src/manager/twiml.ts +9 -0
  1162. package/extensions/voice-call/src/manager.test.ts +224 -0
  1163. package/extensions/voice-call/src/manager.ts +887 -0
  1164. package/extensions/voice-call/src/media-stream.test.ts +96 -0
  1165. package/extensions/voice-call/src/media-stream.ts +411 -0
  1166. package/extensions/voice-call/src/providers/base.ts +67 -0
  1167. package/extensions/voice-call/src/providers/index.ts +10 -0
  1168. package/extensions/voice-call/src/providers/mock.ts +165 -0
  1169. package/extensions/voice-call/src/providers/plivo.test.ts +27 -0
  1170. package/extensions/voice-call/src/providers/plivo.ts +515 -0
  1171. package/extensions/voice-call/src/providers/stt-openai-realtime.ts +311 -0
  1172. package/extensions/voice-call/src/providers/telnyx.ts +371 -0
  1173. package/extensions/voice-call/src/providers/tts-openai.ts +259 -0
  1174. package/extensions/voice-call/src/providers/twilio/api.ts +42 -0
  1175. package/extensions/voice-call/src/providers/twilio/webhook.ts +32 -0
  1176. package/extensions/voice-call/src/providers/twilio.test.ts +60 -0
  1177. package/extensions/voice-call/src/providers/twilio.ts +626 -0
  1178. package/extensions/voice-call/src/response-generator.ts +158 -0
  1179. package/extensions/voice-call/src/runtime.ts +212 -0
  1180. package/extensions/voice-call/src/telephony-audio.ts +90 -0
  1181. package/extensions/voice-call/src/telephony-tts.ts +104 -0
  1182. package/extensions/voice-call/src/tunnel.ts +314 -0
  1183. package/extensions/voice-call/src/types.ts +272 -0
  1184. package/extensions/voice-call/src/utils.ts +14 -0
  1185. package/extensions/voice-call/src/voice-mapping.ts +67 -0
  1186. package/extensions/voice-call/src/webhook-security.test.ts +377 -0
  1187. package/extensions/voice-call/src/webhook-security.ts +689 -0
  1188. package/extensions/voice-call/src/webhook.ts +491 -0
  1189. package/extensions/whatsapp/index.ts +17 -0
  1190. package/extensions/whatsapp/node_modules/.bin/cryptoclaw +21 -0
  1191. package/extensions/whatsapp/openclaw.plugin.json +9 -0
  1192. package/extensions/whatsapp/package.json +14 -0
  1193. package/extensions/whatsapp/src/channel.ts +508 -0
  1194. package/extensions/whatsapp/src/runtime.ts +14 -0
  1195. package/package.json +242 -0
  1196. package/skills/aave-bsc/SKILL.md +55 -0
  1197. package/skills/agent-identity/SKILL.md +48 -0
  1198. package/skills/bird/SKILL.md +224 -0
  1199. package/skills/canvas/SKILL.md +204 -0
  1200. package/skills/coding-agent/SKILL.md +285 -0
  1201. package/skills/coingecko/SKILL.md +114 -0
  1202. package/skills/contract-deployer/SKILL.md +42 -0
  1203. package/skills/debank/SKILL.md +143 -0
  1204. package/skills/defi-dashboard/SKILL.md +49 -0
  1205. package/skills/defillama/SKILL.md +117 -0
  1206. package/skills/discord/SKILL.md +578 -0
  1207. package/skills/dune/SKILL.md +178 -0
  1208. package/skills/etherscan/SKILL.md +117 -0
  1209. package/skills/four-meme/SKILL.md +80 -0
  1210. package/skills/gas-tracker/SKILL.md +43 -0
  1211. package/skills/github/SKILL.md +77 -0
  1212. package/skills/macro-calendar/SKILL.md +132 -0
  1213. package/skills/market-data/SKILL.md +44 -0
  1214. package/skills/nft-manager/SKILL.md +46 -0
  1215. package/skills/portfolio-tracker/SKILL.md +55 -0
  1216. package/skills/security-check/SKILL.md +153 -0
  1217. package/skills/tmux/SKILL.md +135 -0
  1218. package/skills/tmux/scripts/find-sessions.sh +112 -0
  1219. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  1220. package/skills/token-swap/SKILL.md +71 -0
  1221. package/skills/wallet-manager/SKILL.md +65 -0
  1222. package/skills/whale-watcher/SKILL.md +43 -0
@@ -0,0 +1,1375 @@
1
+ import { r as resolveCliName, t as formatCliCommand } from "./command-format-B0bnyrEA.js";
2
+ import { t as runCommandWithTimeout } from "./exec-CLQSz0CI.js";
3
+ import { t as resolveOpenClawPackageRoot } from "./openclaw-root-_zPXSqgo.js";
4
+ import { j as VERSION } from "./config-DSpb2aMV.js";
5
+ import { Ln as trimLogTail } from "./loader-CU4bkeKe.js";
6
+ import { t as note } from "./note-C5M2AQOP.js";
7
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-B5nR7jt8.js";
8
+ import { g as parseSemver } from "./daemon-runtime-CHWbAfKs.js";
9
+ import { spawnSync } from "node:child_process";
10
+ import path from "node:path";
11
+ import os from "node:os";
12
+ import fs from "node:fs/promises";
13
+
14
+ //#region src/infra/update-channels.ts
15
+ const DEFAULT_PACKAGE_CHANNEL = "stable";
16
+ const DEFAULT_GIT_CHANNEL = "dev";
17
+ const DEV_BRANCH = "main";
18
+ function normalizeUpdateChannel(value) {
19
+ if (!value) return null;
20
+ const normalized = value.trim().toLowerCase();
21
+ if (normalized === "stable" || normalized === "beta" || normalized === "dev") return normalized;
22
+ return null;
23
+ }
24
+ function channelToNpmTag(channel) {
25
+ if (channel === "beta") return "beta";
26
+ if (channel === "dev") return "dev";
27
+ return "latest";
28
+ }
29
+ function isBetaTag(tag) {
30
+ return tag.toLowerCase().includes("-beta");
31
+ }
32
+ function isStableTag(tag) {
33
+ return !isBetaTag(tag);
34
+ }
35
+ function resolveEffectiveUpdateChannel(params) {
36
+ if (params.configChannel) return {
37
+ channel: params.configChannel,
38
+ source: "config"
39
+ };
40
+ if (params.installKind === "git") {
41
+ const tag = params.git?.tag;
42
+ if (tag) return {
43
+ channel: isBetaTag(tag) ? "beta" : "stable",
44
+ source: "git-tag"
45
+ };
46
+ const branch = params.git?.branch;
47
+ if (branch && branch !== "HEAD") return {
48
+ channel: "dev",
49
+ source: "git-branch"
50
+ };
51
+ return {
52
+ channel: DEFAULT_GIT_CHANNEL,
53
+ source: "default"
54
+ };
55
+ }
56
+ if (params.installKind === "package") return {
57
+ channel: DEFAULT_PACKAGE_CHANNEL,
58
+ source: "default"
59
+ };
60
+ return {
61
+ channel: DEFAULT_PACKAGE_CHANNEL,
62
+ source: "default"
63
+ };
64
+ }
65
+ function formatUpdateChannelLabel(params) {
66
+ if (params.source === "config") return `${params.channel} (config)`;
67
+ if (params.source === "git-tag") return params.gitTag ? `${params.channel} (${params.gitTag})` : `${params.channel} (tag)`;
68
+ if (params.source === "git-branch") return params.gitBranch ? `${params.channel} (${params.gitBranch})` : `${params.channel} (branch)`;
69
+ return `${params.channel} (default)`;
70
+ }
71
+
72
+ //#endregion
73
+ //#region src/infra/update-check.ts
74
+ async function exists(p) {
75
+ try {
76
+ await fs.access(p);
77
+ return true;
78
+ } catch {
79
+ return false;
80
+ }
81
+ }
82
+ async function detectPackageManager$1(root) {
83
+ try {
84
+ const raw = await fs.readFile(path.join(root, "package.json"), "utf-8");
85
+ const pm = JSON.parse(raw)?.packageManager?.split("@")[0]?.trim();
86
+ if (pm === "pnpm" || pm === "bun" || pm === "npm") return pm;
87
+ } catch {}
88
+ const files = await fs.readdir(root).catch(() => []);
89
+ if (files.includes("pnpm-lock.yaml")) return "pnpm";
90
+ if (files.includes("bun.lockb")) return "bun";
91
+ if (files.includes("package-lock.json")) return "npm";
92
+ return "unknown";
93
+ }
94
+ async function detectGitRoot(root) {
95
+ const res = await runCommandWithTimeout([
96
+ "git",
97
+ "-C",
98
+ root,
99
+ "rev-parse",
100
+ "--show-toplevel"
101
+ ], { timeoutMs: 4e3 }).catch(() => null);
102
+ if (!res || res.code !== 0) return null;
103
+ const top = res.stdout.trim();
104
+ return top ? path.resolve(top) : null;
105
+ }
106
+ async function checkGitUpdateStatus(params) {
107
+ const timeoutMs = params.timeoutMs ?? 6e3;
108
+ const root = path.resolve(params.root);
109
+ const base = {
110
+ root,
111
+ sha: null,
112
+ tag: null,
113
+ branch: null,
114
+ upstream: null,
115
+ dirty: null,
116
+ ahead: null,
117
+ behind: null,
118
+ fetchOk: null
119
+ };
120
+ const branchRes = await runCommandWithTimeout([
121
+ "git",
122
+ "-C",
123
+ root,
124
+ "rev-parse",
125
+ "--abbrev-ref",
126
+ "HEAD"
127
+ ], { timeoutMs }).catch(() => null);
128
+ if (!branchRes || branchRes.code !== 0) return {
129
+ ...base,
130
+ error: branchRes?.stderr?.trim() || "git unavailable"
131
+ };
132
+ const branch = branchRes.stdout.trim() || null;
133
+ const shaRes = await runCommandWithTimeout([
134
+ "git",
135
+ "-C",
136
+ root,
137
+ "rev-parse",
138
+ "HEAD"
139
+ ], { timeoutMs }).catch(() => null);
140
+ const sha = shaRes && shaRes.code === 0 ? shaRes.stdout.trim() : null;
141
+ const tagRes = await runCommandWithTimeout([
142
+ "git",
143
+ "-C",
144
+ root,
145
+ "describe",
146
+ "--tags",
147
+ "--exact-match"
148
+ ], { timeoutMs }).catch(() => null);
149
+ const tag = tagRes && tagRes.code === 0 ? tagRes.stdout.trim() : null;
150
+ const upstreamRes = await runCommandWithTimeout([
151
+ "git",
152
+ "-C",
153
+ root,
154
+ "rev-parse",
155
+ "--abbrev-ref",
156
+ "@{upstream}"
157
+ ], { timeoutMs }).catch(() => null);
158
+ const upstream = upstreamRes && upstreamRes.code === 0 ? upstreamRes.stdout.trim() : null;
159
+ const dirtyRes = await runCommandWithTimeout([
160
+ "git",
161
+ "-C",
162
+ root,
163
+ "status",
164
+ "--porcelain",
165
+ "--",
166
+ ":!dist/control-ui/"
167
+ ], { timeoutMs }).catch(() => null);
168
+ const dirty = dirtyRes && dirtyRes.code === 0 ? dirtyRes.stdout.trim().length > 0 : null;
169
+ const fetchOk = params.fetch ? await runCommandWithTimeout([
170
+ "git",
171
+ "-C",
172
+ root,
173
+ "fetch",
174
+ "--quiet",
175
+ "--prune"
176
+ ], { timeoutMs }).then((r) => r.code === 0).catch(() => false) : null;
177
+ const counts = upstream && upstream.length > 0 ? await runCommandWithTimeout([
178
+ "git",
179
+ "-C",
180
+ root,
181
+ "rev-list",
182
+ "--left-right",
183
+ "--count",
184
+ `HEAD...${upstream}`
185
+ ], { timeoutMs }).catch(() => null) : null;
186
+ const parseCounts = (raw) => {
187
+ const parts = raw.trim().split(/\s+/);
188
+ if (parts.length < 2) return null;
189
+ const ahead = Number.parseInt(parts[0] ?? "", 10);
190
+ const behind = Number.parseInt(parts[1] ?? "", 10);
191
+ if (!Number.isFinite(ahead) || !Number.isFinite(behind)) return null;
192
+ return {
193
+ ahead,
194
+ behind
195
+ };
196
+ };
197
+ const parsed = counts && counts.code === 0 ? parseCounts(counts.stdout) : null;
198
+ return {
199
+ root,
200
+ sha,
201
+ tag,
202
+ branch,
203
+ upstream,
204
+ dirty,
205
+ ahead: parsed?.ahead ?? null,
206
+ behind: parsed?.behind ?? null,
207
+ fetchOk
208
+ };
209
+ }
210
+ async function statMtimeMs(p) {
211
+ try {
212
+ return (await fs.stat(p)).mtimeMs;
213
+ } catch {
214
+ return null;
215
+ }
216
+ }
217
+ function resolveDepsMarker(params) {
218
+ const root = params.root;
219
+ if (params.manager === "pnpm") return {
220
+ lockfilePath: path.join(root, "pnpm-lock.yaml"),
221
+ markerPath: path.join(root, "node_modules", ".modules.yaml")
222
+ };
223
+ if (params.manager === "bun") return {
224
+ lockfilePath: path.join(root, "bun.lockb"),
225
+ markerPath: path.join(root, "node_modules")
226
+ };
227
+ if (params.manager === "npm") return {
228
+ lockfilePath: path.join(root, "package-lock.json"),
229
+ markerPath: path.join(root, "node_modules")
230
+ };
231
+ return {
232
+ lockfilePath: null,
233
+ markerPath: null
234
+ };
235
+ }
236
+ async function checkDepsStatus(params) {
237
+ const { lockfilePath, markerPath } = resolveDepsMarker({
238
+ root: path.resolve(params.root),
239
+ manager: params.manager
240
+ });
241
+ if (!lockfilePath || !markerPath) return {
242
+ manager: params.manager,
243
+ status: "unknown",
244
+ lockfilePath,
245
+ markerPath,
246
+ reason: "unknown package manager"
247
+ };
248
+ const lockExists = await exists(lockfilePath);
249
+ const markerExists = await exists(markerPath);
250
+ if (!lockExists) return {
251
+ manager: params.manager,
252
+ status: "unknown",
253
+ lockfilePath,
254
+ markerPath,
255
+ reason: "lockfile missing"
256
+ };
257
+ if (!markerExists) return {
258
+ manager: params.manager,
259
+ status: "missing",
260
+ lockfilePath,
261
+ markerPath,
262
+ reason: "node_modules marker missing"
263
+ };
264
+ const lockMtime = await statMtimeMs(lockfilePath);
265
+ const markerMtime = await statMtimeMs(markerPath);
266
+ if (!lockMtime || !markerMtime) return {
267
+ manager: params.manager,
268
+ status: "unknown",
269
+ lockfilePath,
270
+ markerPath
271
+ };
272
+ if (lockMtime > markerMtime + 1e3) return {
273
+ manager: params.manager,
274
+ status: "stale",
275
+ lockfilePath,
276
+ markerPath,
277
+ reason: "lockfile newer than install marker"
278
+ };
279
+ return {
280
+ manager: params.manager,
281
+ status: "ok",
282
+ lockfilePath,
283
+ markerPath
284
+ };
285
+ }
286
+ async function fetchWithTimeout(url, timeoutMs) {
287
+ const ctrl = new AbortController();
288
+ const t = setTimeout(() => ctrl.abort(), Math.max(250, timeoutMs));
289
+ try {
290
+ return await fetch(url, { signal: ctrl.signal });
291
+ } finally {
292
+ clearTimeout(t);
293
+ }
294
+ }
295
+ async function fetchNpmLatestVersion(params) {
296
+ const res = await fetchNpmTagVersion({
297
+ tag: "latest",
298
+ timeoutMs: params?.timeoutMs
299
+ });
300
+ return {
301
+ latestVersion: res.version,
302
+ error: res.error
303
+ };
304
+ }
305
+ async function fetchNpmTagVersion(params) {
306
+ const timeoutMs = params?.timeoutMs ?? 3500;
307
+ const tag = params.tag;
308
+ try {
309
+ const res = await fetchWithTimeout(`https://registry.npmjs.org/cryptoclaw/${encodeURIComponent(tag)}`, timeoutMs);
310
+ if (!res.ok) return {
311
+ tag,
312
+ version: null,
313
+ error: `HTTP ${res.status}`
314
+ };
315
+ const json = await res.json();
316
+ return {
317
+ tag,
318
+ version: typeof json?.version === "string" ? json.version : null
319
+ };
320
+ } catch (err) {
321
+ return {
322
+ tag,
323
+ version: null,
324
+ error: String(err)
325
+ };
326
+ }
327
+ }
328
+ async function resolveNpmChannelTag(params) {
329
+ const channelTag = channelToNpmTag(params.channel);
330
+ const channelStatus = await fetchNpmTagVersion({
331
+ tag: channelTag,
332
+ timeoutMs: params.timeoutMs
333
+ });
334
+ if (params.channel !== "beta") return {
335
+ tag: channelTag,
336
+ version: channelStatus.version
337
+ };
338
+ const latestStatus = await fetchNpmTagVersion({
339
+ tag: "latest",
340
+ timeoutMs: params.timeoutMs
341
+ });
342
+ if (!latestStatus.version) return {
343
+ tag: channelTag,
344
+ version: channelStatus.version
345
+ };
346
+ if (!channelStatus.version) return {
347
+ tag: "latest",
348
+ version: latestStatus.version
349
+ };
350
+ const cmp = compareSemverStrings(channelStatus.version, latestStatus.version);
351
+ if (cmp != null && cmp < 0) return {
352
+ tag: "latest",
353
+ version: latestStatus.version
354
+ };
355
+ return {
356
+ tag: channelTag,
357
+ version: channelStatus.version
358
+ };
359
+ }
360
+ function compareSemverStrings(a, b) {
361
+ const pa = parseSemver(a);
362
+ const pb = parseSemver(b);
363
+ if (!pa || !pb) return null;
364
+ if (pa.major !== pb.major) return pa.major < pb.major ? -1 : 1;
365
+ if (pa.minor !== pb.minor) return pa.minor < pb.minor ? -1 : 1;
366
+ if (pa.patch !== pb.patch) return pa.patch < pb.patch ? -1 : 1;
367
+ return 0;
368
+ }
369
+ async function checkUpdateStatus(params) {
370
+ const timeoutMs = params.timeoutMs ?? 6e3;
371
+ const root = params.root ? path.resolve(params.root) : null;
372
+ if (!root) return {
373
+ root: null,
374
+ installKind: "unknown",
375
+ packageManager: "unknown",
376
+ registry: params.includeRegistry ? await fetchNpmLatestVersion({ timeoutMs }) : void 0
377
+ };
378
+ const pm = await detectPackageManager$1(root);
379
+ const gitRoot = await detectGitRoot(root);
380
+ const isGit = gitRoot && path.resolve(gitRoot) === root;
381
+ return {
382
+ root,
383
+ installKind: isGit ? "git" : "package",
384
+ packageManager: pm,
385
+ git: isGit ? await checkGitUpdateStatus({
386
+ root,
387
+ timeoutMs,
388
+ fetch: Boolean(params.fetchGit)
389
+ }) : void 0,
390
+ deps: await checkDepsStatus({
391
+ root,
392
+ manager: pm
393
+ }),
394
+ registry: params.includeRegistry ? await fetchNpmLatestVersion({ timeoutMs }) : void 0
395
+ };
396
+ }
397
+
398
+ //#endregion
399
+ //#region src/commands/doctor-completion.ts
400
+ /** Generate the completion cache by spawning the CLI. */
401
+ async function generateCompletionCache() {
402
+ const root = await resolveOpenClawPackageRoot({
403
+ moduleUrl: import.meta.url,
404
+ argv1: process.argv[1],
405
+ cwd: process.cwd()
406
+ });
407
+ if (!root) return false;
408
+ const binPath = path.join(root, "cryptoclaw.mjs");
409
+ return spawnSync(process.execPath, [
410
+ binPath,
411
+ "completion",
412
+ "--write-state"
413
+ ], {
414
+ cwd: root,
415
+ env: process.env,
416
+ encoding: "utf-8"
417
+ }).status === 0;
418
+ }
419
+ /** Check the status of shell completion for the current shell. */
420
+ async function checkShellCompletionStatus(binName = "cryptoclaw") {
421
+ const shell = resolveShellFromEnv();
422
+ return {
423
+ shell,
424
+ profileInstalled: await isCompletionInstalled(shell, binName),
425
+ cacheExists: await completionCacheExists(shell, binName),
426
+ cachePath: resolveCompletionCachePath(shell, binName),
427
+ usesSlowPattern: await usesSlowDynamicCompletion(shell, binName)
428
+ };
429
+ }
430
+ /**
431
+ * Doctor check for shell completion.
432
+ * - If profile uses slow dynamic pattern: upgrade to cached version
433
+ * - If profile has completion but no cache: auto-generate cache and upgrade profile
434
+ * - If no completion at all: prompt to install (with user confirmation)
435
+ */
436
+ async function doctorShellCompletion(runtime, prompter, options = {}) {
437
+ const cliName = resolveCliName();
438
+ const status = await checkShellCompletionStatus(cliName);
439
+ if (status.usesSlowPattern) {
440
+ note(`Your ${status.shell} profile uses slow dynamic completion (source <(...)).\nUpgrading to cached completion for faster shell startup...`, "Shell completion");
441
+ if (!status.cacheExists) {
442
+ if (!await generateCompletionCache()) {
443
+ note(`Failed to generate completion cache. Run \`${cliName} completion --write-state\` manually.`, "Shell completion");
444
+ return;
445
+ }
446
+ }
447
+ await installCompletion(status.shell, true, cliName);
448
+ note(`Shell completion upgraded. Restart your shell or run: source ~/.${status.shell === "zsh" ? "zshrc" : status.shell === "bash" ? "bashrc" : "config/fish/config.fish"}`, "Shell completion");
449
+ return;
450
+ }
451
+ if (status.profileInstalled && !status.cacheExists) {
452
+ note(`Shell completion is configured in your ${status.shell} profile but the cache is missing.\nRegenerating cache...`, "Shell completion");
453
+ if (await generateCompletionCache()) note(`Completion cache regenerated at ${status.cachePath}`, "Shell completion");
454
+ else note(`Failed to regenerate completion cache. Run \`${cliName} completion --write-state\` manually.`, "Shell completion");
455
+ return;
456
+ }
457
+ if (!status.profileInstalled) {
458
+ if (options.nonInteractive) return;
459
+ if (await prompter.confirm({
460
+ message: `Enable ${status.shell} shell completion for ${cliName}?`,
461
+ initialValue: true
462
+ })) {
463
+ if (!await generateCompletionCache()) {
464
+ note(`Failed to generate completion cache. Run \`${cliName} completion --write-state\` manually.`, "Shell completion");
465
+ return;
466
+ }
467
+ await installCompletion(status.shell, true, cliName);
468
+ note(`Shell completion installed. Restart your shell or run: source ~/.${status.shell === "zsh" ? "zshrc" : status.shell === "bash" ? "bashrc" : "config/fish/config.fish"}`, "Shell completion");
469
+ }
470
+ }
471
+ }
472
+ /**
473
+ * Ensure completion cache exists. Used during onboarding/update to fix
474
+ * cases where profile has completion but no cache.
475
+ * This is a silent fix - no prompts.
476
+ */
477
+ async function ensureCompletionCacheExists(binName = "cryptoclaw") {
478
+ if (await completionCacheExists(resolveShellFromEnv(), binName)) return true;
479
+ return generateCompletionCache();
480
+ }
481
+
482
+ //#endregion
483
+ //#region src/commands/status.update.ts
484
+ async function getUpdateCheckResult(params) {
485
+ return await checkUpdateStatus({
486
+ root: await resolveOpenClawPackageRoot({
487
+ moduleUrl: import.meta.url,
488
+ argv1: process.argv[1],
489
+ cwd: process.cwd()
490
+ }),
491
+ timeoutMs: params.timeoutMs,
492
+ fetchGit: params.fetchGit,
493
+ includeRegistry: params.includeRegistry
494
+ });
495
+ }
496
+ function resolveUpdateAvailability(update) {
497
+ const latestVersion = update.registry?.latestVersion ?? null;
498
+ const registryCmp = latestVersion ? compareSemverStrings(VERSION, latestVersion) : null;
499
+ const hasRegistryUpdate = registryCmp != null && registryCmp < 0;
500
+ const gitBehind = update.installKind === "git" && typeof update.git?.behind === "number" ? update.git.behind : null;
501
+ const hasGitUpdate = gitBehind != null && gitBehind > 0;
502
+ return {
503
+ available: hasGitUpdate || hasRegistryUpdate,
504
+ hasGitUpdate,
505
+ hasRegistryUpdate,
506
+ latestVersion: hasRegistryUpdate ? latestVersion : null,
507
+ gitBehind
508
+ };
509
+ }
510
+ function formatUpdateAvailableHint(update) {
511
+ const availability = resolveUpdateAvailability(update);
512
+ if (!availability.available) return null;
513
+ const details = [];
514
+ if (availability.hasGitUpdate && availability.gitBehind != null) details.push(`git behind ${availability.gitBehind}`);
515
+ if (availability.hasRegistryUpdate && availability.latestVersion) details.push(`npm ${availability.latestVersion}`);
516
+ return `Update available${details.length > 0 ? ` (${details.join(" · ")})` : ""}. Run: ${formatCliCommand("cryptoclaw update")}`;
517
+ }
518
+ function formatUpdateOneLiner(update) {
519
+ const parts = [];
520
+ if (update.installKind === "git" && update.git) {
521
+ const branch = update.git.branch ? `git ${update.git.branch}` : "git";
522
+ parts.push(branch);
523
+ if (update.git.upstream) parts.push(`↔ ${update.git.upstream}`);
524
+ if (update.git.dirty === true) parts.push("dirty");
525
+ if (update.git.behind != null && update.git.ahead != null) {
526
+ if (update.git.behind === 0 && update.git.ahead === 0) parts.push("up to date");
527
+ else if (update.git.behind > 0 && update.git.ahead === 0) parts.push(`behind ${update.git.behind}`);
528
+ else if (update.git.behind === 0 && update.git.ahead > 0) parts.push(`ahead ${update.git.ahead}`);
529
+ else if (update.git.behind > 0 && update.git.ahead > 0) parts.push(`diverged (ahead ${update.git.ahead}, behind ${update.git.behind})`);
530
+ }
531
+ if (update.git.fetchOk === false) parts.push("fetch failed");
532
+ if (update.registry?.latestVersion) {
533
+ const cmp = compareSemverStrings(VERSION, update.registry.latestVersion);
534
+ if (cmp === 0) parts.push(`npm latest ${update.registry.latestVersion}`);
535
+ else if (cmp != null && cmp < 0) parts.push(`npm update ${update.registry.latestVersion}`);
536
+ else parts.push(`npm latest ${update.registry.latestVersion} (local newer)`);
537
+ } else if (update.registry?.error) parts.push("npm latest unknown");
538
+ } else {
539
+ parts.push(update.packageManager !== "unknown" ? update.packageManager : "pkg");
540
+ if (update.registry?.latestVersion) {
541
+ const cmp = compareSemverStrings(VERSION, update.registry.latestVersion);
542
+ if (cmp === 0) parts.push(`npm latest ${update.registry.latestVersion}`);
543
+ else if (cmp != null && cmp < 0) parts.push(`npm update ${update.registry.latestVersion}`);
544
+ else parts.push(`npm latest ${update.registry.latestVersion} (local newer)`);
545
+ } else if (update.registry?.error) parts.push("npm latest unknown");
546
+ }
547
+ if (update.deps) {
548
+ if (update.deps.status === "ok") parts.push("deps ok");
549
+ if (update.deps.status === "missing") parts.push("deps missing");
550
+ if (update.deps.status === "stale") parts.push("deps stale");
551
+ }
552
+ return `Update: ${parts.join(" · ")}`;
553
+ }
554
+
555
+ //#endregion
556
+ //#region src/infra/update-global.ts
557
+ const PRIMARY_PACKAGE_NAME = "cryptoclaw";
558
+ const ALL_PACKAGE_NAMES = [PRIMARY_PACKAGE_NAME];
559
+ const GLOBAL_RENAME_PREFIX = ".";
560
+ async function pathExists(targetPath) {
561
+ try {
562
+ await fs.access(targetPath);
563
+ return true;
564
+ } catch {
565
+ return false;
566
+ }
567
+ }
568
+ async function tryRealpath(targetPath) {
569
+ try {
570
+ return await fs.realpath(targetPath);
571
+ } catch {
572
+ return path.resolve(targetPath);
573
+ }
574
+ }
575
+ function resolveBunGlobalRoot() {
576
+ const bunInstall = process.env.BUN_INSTALL?.trim() || path.join(os.homedir(), ".bun");
577
+ return path.join(bunInstall, "install", "global", "node_modules");
578
+ }
579
+ async function resolveGlobalRoot(manager, runCommand, timeoutMs) {
580
+ if (manager === "bun") return resolveBunGlobalRoot();
581
+ const res = await runCommand(manager === "pnpm" ? [
582
+ "pnpm",
583
+ "root",
584
+ "-g"
585
+ ] : [
586
+ "npm",
587
+ "root",
588
+ "-g"
589
+ ], { timeoutMs }).catch(() => null);
590
+ if (!res || res.code !== 0) return null;
591
+ return res.stdout.trim() || null;
592
+ }
593
+ async function resolveGlobalPackageRoot(manager, runCommand, timeoutMs) {
594
+ const root = await resolveGlobalRoot(manager, runCommand, timeoutMs);
595
+ if (!root) return null;
596
+ return path.join(root, PRIMARY_PACKAGE_NAME);
597
+ }
598
+ async function detectGlobalInstallManagerForRoot(runCommand, pkgRoot, timeoutMs) {
599
+ const pkgReal = await tryRealpath(pkgRoot);
600
+ for (const { manager, argv } of [{
601
+ manager: "npm",
602
+ argv: [
603
+ "npm",
604
+ "root",
605
+ "-g"
606
+ ]
607
+ }, {
608
+ manager: "pnpm",
609
+ argv: [
610
+ "pnpm",
611
+ "root",
612
+ "-g"
613
+ ]
614
+ }]) {
615
+ const res = await runCommand(argv, { timeoutMs }).catch(() => null);
616
+ if (!res || res.code !== 0) continue;
617
+ const globalRoot = res.stdout.trim();
618
+ if (!globalRoot) continue;
619
+ const globalReal = await tryRealpath(globalRoot);
620
+ for (const name of ALL_PACKAGE_NAMES) {
621
+ const expected = path.join(globalReal, name);
622
+ if (path.resolve(expected) === path.resolve(pkgReal)) return manager;
623
+ }
624
+ }
625
+ const bunGlobalReal = await tryRealpath(resolveBunGlobalRoot());
626
+ for (const name of ALL_PACKAGE_NAMES) {
627
+ const bunExpected = path.join(bunGlobalReal, name);
628
+ if (path.resolve(bunExpected) === path.resolve(pkgReal)) return "bun";
629
+ }
630
+ return null;
631
+ }
632
+ async function detectGlobalInstallManagerByPresence(runCommand, timeoutMs) {
633
+ for (const manager of ["npm", "pnpm"]) {
634
+ const root = await resolveGlobalRoot(manager, runCommand, timeoutMs);
635
+ if (!root) continue;
636
+ for (const name of ALL_PACKAGE_NAMES) if (await pathExists(path.join(root, name))) return manager;
637
+ }
638
+ const bunRoot = resolveBunGlobalRoot();
639
+ for (const name of ALL_PACKAGE_NAMES) if (await pathExists(path.join(bunRoot, name))) return "bun";
640
+ return null;
641
+ }
642
+ function globalInstallArgs(manager, spec) {
643
+ if (manager === "pnpm") return [
644
+ "pnpm",
645
+ "add",
646
+ "-g",
647
+ spec
648
+ ];
649
+ if (manager === "bun") return [
650
+ "bun",
651
+ "add",
652
+ "-g",
653
+ spec
654
+ ];
655
+ return [
656
+ "npm",
657
+ "i",
658
+ "-g",
659
+ spec
660
+ ];
661
+ }
662
+ async function cleanupGlobalRenameDirs(params) {
663
+ const removed = [];
664
+ const root = params.globalRoot.trim();
665
+ const name = params.packageName.trim();
666
+ if (!root || !name) return { removed };
667
+ const prefix = `${GLOBAL_RENAME_PREFIX}${name}-`;
668
+ let entries = [];
669
+ try {
670
+ entries = await fs.readdir(root);
671
+ } catch {
672
+ return { removed };
673
+ }
674
+ for (const entry of entries) {
675
+ if (!entry.startsWith(prefix)) continue;
676
+ const target = path.join(root, entry);
677
+ try {
678
+ if (!(await fs.lstat(target)).isDirectory()) continue;
679
+ await fs.rm(target, {
680
+ recursive: true,
681
+ force: true
682
+ });
683
+ removed.push(entry);
684
+ } catch {}
685
+ }
686
+ return { removed };
687
+ }
688
+
689
+ //#endregion
690
+ //#region src/infra/update-runner.ts
691
+ const DEFAULT_TIMEOUT_MS = 20 * 6e4;
692
+ const MAX_LOG_CHARS = 8e3;
693
+ const PREFLIGHT_MAX_COMMITS = 10;
694
+ const START_DIRS = [
695
+ "cwd",
696
+ "argv1",
697
+ "process"
698
+ ];
699
+ const DEFAULT_PACKAGE_NAME = "cryptoclaw";
700
+ const CORE_PACKAGE_NAMES = new Set([DEFAULT_PACKAGE_NAME]);
701
+ function normalizeDir(value) {
702
+ if (!value) return null;
703
+ const trimmed = value.trim();
704
+ if (!trimmed) return null;
705
+ return path.resolve(trimmed);
706
+ }
707
+ function resolveNodeModulesBinPackageRoot(argv1) {
708
+ const normalized = path.resolve(argv1);
709
+ const parts = normalized.split(path.sep);
710
+ const binIndex = parts.lastIndexOf(".bin");
711
+ if (binIndex <= 0) return null;
712
+ if (parts[binIndex - 1] !== "node_modules") return null;
713
+ const binName = path.basename(normalized);
714
+ const nodeModulesDir = parts.slice(0, binIndex).join(path.sep);
715
+ return path.join(nodeModulesDir, binName);
716
+ }
717
+ function buildStartDirs(opts) {
718
+ const dirs = [];
719
+ const cwd = normalizeDir(opts.cwd);
720
+ if (cwd) dirs.push(cwd);
721
+ const argv1 = normalizeDir(opts.argv1);
722
+ if (argv1) {
723
+ dirs.push(path.dirname(argv1));
724
+ const packageRoot = resolveNodeModulesBinPackageRoot(argv1);
725
+ if (packageRoot) dirs.push(packageRoot);
726
+ }
727
+ const proc = normalizeDir(process.cwd());
728
+ if (proc) dirs.push(proc);
729
+ return Array.from(new Set(dirs));
730
+ }
731
+ async function readPackageVersion(root) {
732
+ try {
733
+ const raw = await fs.readFile(path.join(root, "package.json"), "utf-8");
734
+ const parsed = JSON.parse(raw);
735
+ return typeof parsed?.version === "string" ? parsed.version : null;
736
+ } catch {
737
+ return null;
738
+ }
739
+ }
740
+ async function readPackageName(root) {
741
+ try {
742
+ const raw = await fs.readFile(path.join(root, "package.json"), "utf-8");
743
+ const name = JSON.parse(raw)?.name?.trim();
744
+ return name ? name : null;
745
+ } catch {
746
+ return null;
747
+ }
748
+ }
749
+ async function readBranchName(runCommand, root, timeoutMs) {
750
+ const res = await runCommand([
751
+ "git",
752
+ "-C",
753
+ root,
754
+ "rev-parse",
755
+ "--abbrev-ref",
756
+ "HEAD"
757
+ ], { timeoutMs }).catch(() => null);
758
+ if (!res || res.code !== 0) return null;
759
+ return res.stdout.trim() || null;
760
+ }
761
+ async function listGitTags(runCommand, root, timeoutMs, pattern = "v*") {
762
+ const res = await runCommand([
763
+ "git",
764
+ "-C",
765
+ root,
766
+ "tag",
767
+ "--list",
768
+ pattern,
769
+ "--sort=-v:refname"
770
+ ], { timeoutMs }).catch(() => null);
771
+ if (!res || res.code !== 0) return [];
772
+ return res.stdout.split("\n").map((line) => line.trim()).filter(Boolean);
773
+ }
774
+ async function resolveChannelTag(runCommand, root, timeoutMs, channel) {
775
+ const tags = await listGitTags(runCommand, root, timeoutMs);
776
+ if (channel === "beta") {
777
+ const betaTag = tags.find((tag) => isBetaTag(tag)) ?? null;
778
+ const stableTag = tags.find((tag) => isStableTag(tag)) ?? null;
779
+ if (!betaTag) return stableTag;
780
+ if (!stableTag) return betaTag;
781
+ const cmp = compareSemverStrings(betaTag, stableTag);
782
+ if (cmp != null && cmp < 0) return stableTag;
783
+ return betaTag;
784
+ }
785
+ return tags.find((tag) => isStableTag(tag)) ?? null;
786
+ }
787
+ async function resolveGitRoot(runCommand, candidates, timeoutMs) {
788
+ for (const dir of candidates) {
789
+ const res = await runCommand([
790
+ "git",
791
+ "-C",
792
+ dir,
793
+ "rev-parse",
794
+ "--show-toplevel"
795
+ ], { timeoutMs });
796
+ if (res.code === 0) {
797
+ const root = res.stdout.trim();
798
+ if (root) return root;
799
+ }
800
+ }
801
+ return null;
802
+ }
803
+ async function findPackageRoot(candidates) {
804
+ for (const dir of candidates) {
805
+ let current = dir;
806
+ for (let i = 0; i < 12; i += 1) {
807
+ const pkgPath = path.join(current, "package.json");
808
+ try {
809
+ const raw = await fs.readFile(pkgPath, "utf-8");
810
+ const name = JSON.parse(raw)?.name?.trim();
811
+ if (name && CORE_PACKAGE_NAMES.has(name)) return current;
812
+ } catch {}
813
+ const parent = path.dirname(current);
814
+ if (parent === current) break;
815
+ current = parent;
816
+ }
817
+ }
818
+ return null;
819
+ }
820
+ async function detectPackageManager(root) {
821
+ try {
822
+ const raw = await fs.readFile(path.join(root, "package.json"), "utf-8");
823
+ const pm = JSON.parse(raw)?.packageManager?.split("@")[0]?.trim();
824
+ if (pm === "pnpm" || pm === "bun" || pm === "npm") return pm;
825
+ } catch {}
826
+ const files = await fs.readdir(root).catch(() => []);
827
+ if (files.includes("pnpm-lock.yaml")) return "pnpm";
828
+ if (files.includes("bun.lockb")) return "bun";
829
+ if (files.includes("package-lock.json")) return "npm";
830
+ return "npm";
831
+ }
832
+ async function runStep(opts) {
833
+ const { runCommand, name, argv, cwd, timeoutMs, env, progress, stepIndex, totalSteps } = opts;
834
+ const command = argv.join(" ");
835
+ const stepInfo = {
836
+ name,
837
+ command,
838
+ index: stepIndex,
839
+ total: totalSteps
840
+ };
841
+ progress?.onStepStart?.(stepInfo);
842
+ const started = Date.now();
843
+ const result = await runCommand(argv, {
844
+ cwd,
845
+ timeoutMs,
846
+ env
847
+ });
848
+ const durationMs = Date.now() - started;
849
+ const stderrTail = trimLogTail(result.stderr, MAX_LOG_CHARS);
850
+ progress?.onStepComplete?.({
851
+ ...stepInfo,
852
+ durationMs,
853
+ exitCode: result.code,
854
+ stderrTail
855
+ });
856
+ return {
857
+ name,
858
+ command,
859
+ cwd,
860
+ durationMs,
861
+ exitCode: result.code,
862
+ stdoutTail: trimLogTail(result.stdout, MAX_LOG_CHARS),
863
+ stderrTail: trimLogTail(result.stderr, MAX_LOG_CHARS)
864
+ };
865
+ }
866
+ function managerScriptArgs(manager, script, args = []) {
867
+ if (manager === "pnpm") return [
868
+ "pnpm",
869
+ script,
870
+ ...args
871
+ ];
872
+ if (manager === "bun") return [
873
+ "bun",
874
+ "run",
875
+ script,
876
+ ...args
877
+ ];
878
+ if (args.length > 0) return [
879
+ "npm",
880
+ "run",
881
+ script,
882
+ "--",
883
+ ...args
884
+ ];
885
+ return [
886
+ "npm",
887
+ "run",
888
+ script
889
+ ];
890
+ }
891
+ function managerInstallArgs(manager) {
892
+ if (manager === "pnpm") return ["pnpm", "install"];
893
+ if (manager === "bun") return ["bun", "install"];
894
+ return ["npm", "install"];
895
+ }
896
+ function normalizeTag(tag) {
897
+ const trimmed = tag?.trim();
898
+ if (!trimmed) return "latest";
899
+ if (trimmed.startsWith("cryptoclaw@")) return trimmed.slice(11);
900
+ if (trimmed.startsWith(`${DEFAULT_PACKAGE_NAME}@`)) return trimmed.slice(`${DEFAULT_PACKAGE_NAME}@`.length);
901
+ return trimmed;
902
+ }
903
+ async function runGatewayUpdate(opts = {}) {
904
+ const startedAt = Date.now();
905
+ const runCommand = opts.runCommand ?? (async (argv, options) => {
906
+ const res = await runCommandWithTimeout(argv, options);
907
+ return {
908
+ stdout: res.stdout,
909
+ stderr: res.stderr,
910
+ code: res.code
911
+ };
912
+ });
913
+ const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
914
+ const progress = opts.progress;
915
+ const steps = [];
916
+ const candidates = buildStartDirs(opts);
917
+ let stepIndex = 0;
918
+ let gitTotalSteps = 0;
919
+ const step = (name, argv, cwd, env) => {
920
+ const currentIndex = stepIndex;
921
+ stepIndex += 1;
922
+ return {
923
+ runCommand,
924
+ name,
925
+ argv,
926
+ cwd,
927
+ timeoutMs,
928
+ env,
929
+ progress,
930
+ stepIndex: currentIndex,
931
+ totalSteps: gitTotalSteps
932
+ };
933
+ };
934
+ const pkgRoot = await findPackageRoot(candidates);
935
+ let gitRoot = await resolveGitRoot(runCommand, candidates, timeoutMs);
936
+ if (gitRoot && pkgRoot && path.resolve(gitRoot) !== path.resolve(pkgRoot)) gitRoot = null;
937
+ if (gitRoot && !pkgRoot) return {
938
+ status: "error",
939
+ mode: "unknown",
940
+ root: gitRoot,
941
+ reason: "not-openclaw-root",
942
+ steps: [],
943
+ durationMs: Date.now() - startedAt
944
+ };
945
+ if (gitRoot && pkgRoot && path.resolve(gitRoot) === path.resolve(pkgRoot)) {
946
+ const beforeSha = (await runCommand([
947
+ "git",
948
+ "-C",
949
+ gitRoot,
950
+ "rev-parse",
951
+ "HEAD"
952
+ ], {
953
+ cwd: gitRoot,
954
+ timeoutMs
955
+ })).stdout.trim() || null;
956
+ const beforeVersion = await readPackageVersion(gitRoot);
957
+ const channel = opts.channel ?? "dev";
958
+ const branch = channel === "dev" ? await readBranchName(runCommand, gitRoot, timeoutMs) : null;
959
+ const needsCheckoutMain = channel === "dev" && branch !== DEV_BRANCH;
960
+ gitTotalSteps = channel === "dev" ? needsCheckoutMain ? 11 : 10 : 9;
961
+ const statusCheck = await runStep(step("clean check", [
962
+ "git",
963
+ "-C",
964
+ gitRoot,
965
+ "status",
966
+ "--porcelain",
967
+ "--",
968
+ ":!dist/control-ui/"
969
+ ], gitRoot));
970
+ steps.push(statusCheck);
971
+ if (statusCheck.stdoutTail && statusCheck.stdoutTail.trim().length > 0) return {
972
+ status: "skipped",
973
+ mode: "git",
974
+ root: gitRoot,
975
+ reason: "dirty",
976
+ before: {
977
+ sha: beforeSha,
978
+ version: beforeVersion
979
+ },
980
+ steps,
981
+ durationMs: Date.now() - startedAt
982
+ };
983
+ if (channel === "dev") {
984
+ if (needsCheckoutMain) {
985
+ const checkoutStep = await runStep(step(`git checkout ${DEV_BRANCH}`, [
986
+ "git",
987
+ "-C",
988
+ gitRoot,
989
+ "checkout",
990
+ DEV_BRANCH
991
+ ], gitRoot));
992
+ steps.push(checkoutStep);
993
+ if (checkoutStep.exitCode !== 0) return {
994
+ status: "error",
995
+ mode: "git",
996
+ root: gitRoot,
997
+ reason: "checkout-failed",
998
+ before: {
999
+ sha: beforeSha,
1000
+ version: beforeVersion
1001
+ },
1002
+ steps,
1003
+ durationMs: Date.now() - startedAt
1004
+ };
1005
+ }
1006
+ const upstreamStep = await runStep(step("upstream check", [
1007
+ "git",
1008
+ "-C",
1009
+ gitRoot,
1010
+ "rev-parse",
1011
+ "--abbrev-ref",
1012
+ "--symbolic-full-name",
1013
+ "@{upstream}"
1014
+ ], gitRoot));
1015
+ steps.push(upstreamStep);
1016
+ if (upstreamStep.exitCode !== 0) return {
1017
+ status: "skipped",
1018
+ mode: "git",
1019
+ root: gitRoot,
1020
+ reason: "no-upstream",
1021
+ before: {
1022
+ sha: beforeSha,
1023
+ version: beforeVersion
1024
+ },
1025
+ steps,
1026
+ durationMs: Date.now() - startedAt
1027
+ };
1028
+ const fetchStep = await runStep(step("git fetch", [
1029
+ "git",
1030
+ "-C",
1031
+ gitRoot,
1032
+ "fetch",
1033
+ "--all",
1034
+ "--prune",
1035
+ "--tags"
1036
+ ], gitRoot));
1037
+ steps.push(fetchStep);
1038
+ const upstreamShaStep = await runStep(step("git rev-parse @{upstream}", [
1039
+ "git",
1040
+ "-C",
1041
+ gitRoot,
1042
+ "rev-parse",
1043
+ "@{upstream}"
1044
+ ], gitRoot));
1045
+ steps.push(upstreamShaStep);
1046
+ const upstreamSha = upstreamShaStep.stdoutTail?.trim();
1047
+ if (!upstreamShaStep.stdoutTail || !upstreamSha) return {
1048
+ status: "error",
1049
+ mode: "git",
1050
+ root: gitRoot,
1051
+ reason: "no-upstream-sha",
1052
+ before: {
1053
+ sha: beforeSha,
1054
+ version: beforeVersion
1055
+ },
1056
+ steps,
1057
+ durationMs: Date.now() - startedAt
1058
+ };
1059
+ const revListStep = await runStep(step("git rev-list", [
1060
+ "git",
1061
+ "-C",
1062
+ gitRoot,
1063
+ "rev-list",
1064
+ `--max-count=${PREFLIGHT_MAX_COMMITS}`,
1065
+ upstreamSha
1066
+ ], gitRoot));
1067
+ steps.push(revListStep);
1068
+ if (revListStep.exitCode !== 0) return {
1069
+ status: "error",
1070
+ mode: "git",
1071
+ root: gitRoot,
1072
+ reason: "preflight-revlist-failed",
1073
+ before: {
1074
+ sha: beforeSha,
1075
+ version: beforeVersion
1076
+ },
1077
+ steps,
1078
+ durationMs: Date.now() - startedAt
1079
+ };
1080
+ const candidates = (revListStep.stdoutTail ?? "").split("\n").map((line) => line.trim()).filter(Boolean);
1081
+ if (candidates.length === 0) return {
1082
+ status: "error",
1083
+ mode: "git",
1084
+ root: gitRoot,
1085
+ reason: "preflight-no-candidates",
1086
+ before: {
1087
+ sha: beforeSha,
1088
+ version: beforeVersion
1089
+ },
1090
+ steps,
1091
+ durationMs: Date.now() - startedAt
1092
+ };
1093
+ const manager = await detectPackageManager(gitRoot);
1094
+ const preflightRoot = await fs.mkdtemp(path.join(os.tmpdir(), "cryptoclaw-update-preflight-"));
1095
+ const worktreeDir = path.join(preflightRoot, "worktree");
1096
+ const worktreeStep = await runStep(step("preflight worktree", [
1097
+ "git",
1098
+ "-C",
1099
+ gitRoot,
1100
+ "worktree",
1101
+ "add",
1102
+ "--detach",
1103
+ worktreeDir,
1104
+ upstreamSha
1105
+ ], gitRoot));
1106
+ steps.push(worktreeStep);
1107
+ if (worktreeStep.exitCode !== 0) {
1108
+ await fs.rm(preflightRoot, {
1109
+ recursive: true,
1110
+ force: true
1111
+ }).catch(() => {});
1112
+ return {
1113
+ status: "error",
1114
+ mode: "git",
1115
+ root: gitRoot,
1116
+ reason: "preflight-worktree-failed",
1117
+ before: {
1118
+ sha: beforeSha,
1119
+ version: beforeVersion
1120
+ },
1121
+ steps,
1122
+ durationMs: Date.now() - startedAt
1123
+ };
1124
+ }
1125
+ let selectedSha = null;
1126
+ try {
1127
+ for (const sha of candidates) {
1128
+ const shortSha = sha.slice(0, 8);
1129
+ const checkoutStep = await runStep(step(`preflight checkout (${shortSha})`, [
1130
+ "git",
1131
+ "-C",
1132
+ worktreeDir,
1133
+ "checkout",
1134
+ "--detach",
1135
+ sha
1136
+ ], worktreeDir));
1137
+ steps.push(checkoutStep);
1138
+ if (checkoutStep.exitCode !== 0) continue;
1139
+ const depsStep = await runStep(step(`preflight deps install (${shortSha})`, managerInstallArgs(manager), worktreeDir));
1140
+ steps.push(depsStep);
1141
+ if (depsStep.exitCode !== 0) continue;
1142
+ const buildStep = await runStep(step(`preflight build (${shortSha})`, managerScriptArgs(manager, "build"), worktreeDir));
1143
+ steps.push(buildStep);
1144
+ if (buildStep.exitCode !== 0) continue;
1145
+ const lintStep = await runStep(step(`preflight lint (${shortSha})`, managerScriptArgs(manager, "lint"), worktreeDir));
1146
+ steps.push(lintStep);
1147
+ if (lintStep.exitCode !== 0) continue;
1148
+ selectedSha = sha;
1149
+ break;
1150
+ }
1151
+ } finally {
1152
+ const removeStep = await runStep(step("preflight cleanup", [
1153
+ "git",
1154
+ "-C",
1155
+ gitRoot,
1156
+ "worktree",
1157
+ "remove",
1158
+ "--force",
1159
+ worktreeDir
1160
+ ], gitRoot));
1161
+ steps.push(removeStep);
1162
+ await runCommand([
1163
+ "git",
1164
+ "-C",
1165
+ gitRoot,
1166
+ "worktree",
1167
+ "prune"
1168
+ ], {
1169
+ cwd: gitRoot,
1170
+ timeoutMs
1171
+ }).catch(() => null);
1172
+ await fs.rm(preflightRoot, {
1173
+ recursive: true,
1174
+ force: true
1175
+ }).catch(() => {});
1176
+ }
1177
+ if (!selectedSha) return {
1178
+ status: "error",
1179
+ mode: "git",
1180
+ root: gitRoot,
1181
+ reason: "preflight-no-good-commit",
1182
+ before: {
1183
+ sha: beforeSha,
1184
+ version: beforeVersion
1185
+ },
1186
+ steps,
1187
+ durationMs: Date.now() - startedAt
1188
+ };
1189
+ const rebaseStep = await runStep(step("git rebase", [
1190
+ "git",
1191
+ "-C",
1192
+ gitRoot,
1193
+ "rebase",
1194
+ selectedSha
1195
+ ], gitRoot));
1196
+ steps.push(rebaseStep);
1197
+ if (rebaseStep.exitCode !== 0) {
1198
+ const abortResult = await runCommand([
1199
+ "git",
1200
+ "-C",
1201
+ gitRoot,
1202
+ "rebase",
1203
+ "--abort"
1204
+ ], {
1205
+ cwd: gitRoot,
1206
+ timeoutMs
1207
+ });
1208
+ steps.push({
1209
+ name: "git rebase --abort",
1210
+ command: "git rebase --abort",
1211
+ cwd: gitRoot,
1212
+ durationMs: 0,
1213
+ exitCode: abortResult.code,
1214
+ stdoutTail: trimLogTail(abortResult.stdout, MAX_LOG_CHARS),
1215
+ stderrTail: trimLogTail(abortResult.stderr, MAX_LOG_CHARS)
1216
+ });
1217
+ return {
1218
+ status: "error",
1219
+ mode: "git",
1220
+ root: gitRoot,
1221
+ reason: "rebase-failed",
1222
+ before: {
1223
+ sha: beforeSha,
1224
+ version: beforeVersion
1225
+ },
1226
+ steps,
1227
+ durationMs: Date.now() - startedAt
1228
+ };
1229
+ }
1230
+ } else {
1231
+ const fetchStep = await runStep(step("git fetch", [
1232
+ "git",
1233
+ "-C",
1234
+ gitRoot,
1235
+ "fetch",
1236
+ "--all",
1237
+ "--prune",
1238
+ "--tags"
1239
+ ], gitRoot));
1240
+ steps.push(fetchStep);
1241
+ if (fetchStep.exitCode !== 0) return {
1242
+ status: "error",
1243
+ mode: "git",
1244
+ root: gitRoot,
1245
+ reason: "fetch-failed",
1246
+ before: {
1247
+ sha: beforeSha,
1248
+ version: beforeVersion
1249
+ },
1250
+ steps,
1251
+ durationMs: Date.now() - startedAt
1252
+ };
1253
+ const tag = await resolveChannelTag(runCommand, gitRoot, timeoutMs, channel);
1254
+ if (!tag) return {
1255
+ status: "error",
1256
+ mode: "git",
1257
+ root: gitRoot,
1258
+ reason: "no-release-tag",
1259
+ before: {
1260
+ sha: beforeSha,
1261
+ version: beforeVersion
1262
+ },
1263
+ steps,
1264
+ durationMs: Date.now() - startedAt
1265
+ };
1266
+ const checkoutStep = await runStep(step(`git checkout ${tag}`, [
1267
+ "git",
1268
+ "-C",
1269
+ gitRoot,
1270
+ "checkout",
1271
+ "--detach",
1272
+ tag
1273
+ ], gitRoot));
1274
+ steps.push(checkoutStep);
1275
+ if (checkoutStep.exitCode !== 0) return {
1276
+ status: "error",
1277
+ mode: "git",
1278
+ root: gitRoot,
1279
+ reason: "checkout-failed",
1280
+ before: {
1281
+ sha: beforeSha,
1282
+ version: beforeVersion
1283
+ },
1284
+ steps,
1285
+ durationMs: Date.now() - startedAt
1286
+ };
1287
+ }
1288
+ const manager = await detectPackageManager(gitRoot);
1289
+ const depsStep = await runStep(step("deps install", managerInstallArgs(manager), gitRoot));
1290
+ steps.push(depsStep);
1291
+ const buildStep = await runStep(step("build", managerScriptArgs(manager, "build"), gitRoot));
1292
+ steps.push(buildStep);
1293
+ const uiBuildStep = await runStep(step("ui:build", managerScriptArgs(manager, "ui:build"), gitRoot));
1294
+ steps.push(uiBuildStep);
1295
+ const doctorStep = await runStep(step("cryptoclaw doctor", managerScriptArgs(manager, "cryptoclaw", ["doctor", "--non-interactive"]), gitRoot, { CRYPTOCLAW_UPDATE_IN_PROGRESS: "1" }));
1296
+ steps.push(doctorStep);
1297
+ const failedStep = steps.find((s) => s.exitCode !== 0);
1298
+ const afterShaStep = await runStep(step("git rev-parse HEAD (after)", [
1299
+ "git",
1300
+ "-C",
1301
+ gitRoot,
1302
+ "rev-parse",
1303
+ "HEAD"
1304
+ ], gitRoot));
1305
+ steps.push(afterShaStep);
1306
+ const afterVersion = await readPackageVersion(gitRoot);
1307
+ return {
1308
+ status: failedStep ? "error" : "ok",
1309
+ mode: "git",
1310
+ root: gitRoot,
1311
+ reason: failedStep ? failedStep.name : void 0,
1312
+ before: {
1313
+ sha: beforeSha,
1314
+ version: beforeVersion
1315
+ },
1316
+ after: {
1317
+ sha: afterShaStep.stdoutTail?.trim() ?? null,
1318
+ version: afterVersion
1319
+ },
1320
+ steps,
1321
+ durationMs: Date.now() - startedAt
1322
+ };
1323
+ }
1324
+ if (!pkgRoot) return {
1325
+ status: "error",
1326
+ mode: "unknown",
1327
+ reason: `no root (${START_DIRS.join(",")})`,
1328
+ steps: [],
1329
+ durationMs: Date.now() - startedAt
1330
+ };
1331
+ const beforeVersion = await readPackageVersion(pkgRoot);
1332
+ const globalManager = await detectGlobalInstallManagerForRoot(runCommand, pkgRoot, timeoutMs);
1333
+ if (globalManager) {
1334
+ const packageName = await readPackageName(pkgRoot) ?? DEFAULT_PACKAGE_NAME;
1335
+ await cleanupGlobalRenameDirs({
1336
+ globalRoot: path.dirname(pkgRoot),
1337
+ packageName
1338
+ });
1339
+ const channel = opts.channel ?? DEFAULT_PACKAGE_CHANNEL;
1340
+ const updateStep = await runStep({
1341
+ runCommand,
1342
+ name: "global update",
1343
+ argv: globalInstallArgs(globalManager, `${packageName}@${normalizeTag(opts.tag ?? channelToNpmTag(channel))}`),
1344
+ cwd: pkgRoot,
1345
+ timeoutMs,
1346
+ progress,
1347
+ stepIndex: 0,
1348
+ totalSteps: 1
1349
+ });
1350
+ const steps = [updateStep];
1351
+ const afterVersion = await readPackageVersion(pkgRoot);
1352
+ return {
1353
+ status: updateStep.exitCode === 0 ? "ok" : "error",
1354
+ mode: globalManager,
1355
+ root: pkgRoot,
1356
+ reason: updateStep.exitCode === 0 ? void 0 : updateStep.name,
1357
+ before: { version: beforeVersion },
1358
+ after: { version: afterVersion },
1359
+ steps,
1360
+ durationMs: Date.now() - startedAt
1361
+ };
1362
+ }
1363
+ return {
1364
+ status: "skipped",
1365
+ mode: "unknown",
1366
+ root: pkgRoot,
1367
+ reason: "not-git-install",
1368
+ before: { version: beforeVersion },
1369
+ steps: [],
1370
+ durationMs: Date.now() - startedAt
1371
+ };
1372
+ }
1373
+
1374
+ //#endregion
1375
+ export { resolveEffectiveUpdateChannel as C, normalizeUpdateChannel as S, resolveNpmChannelTag as _, globalInstallArgs as a, channelToNpmTag as b, formatUpdateOneLiner as c, checkShellCompletionStatus as d, doctorShellCompletion as f, fetchNpmTagVersion as g, compareSemverStrings as h, detectGlobalInstallManagerForRoot as i, getUpdateCheckResult as l, checkUpdateStatus as m, cleanupGlobalRenameDirs as n, resolveGlobalPackageRoot as o, ensureCompletionCacheExists as p, detectGlobalInstallManagerByPresence as r, formatUpdateAvailableHint as s, runGatewayUpdate as t, resolveUpdateAvailability as u, DEFAULT_GIT_CHANNEL as v, formatUpdateChannelLabel as x, DEFAULT_PACKAGE_CHANNEL as y };