remoteclaw 0.0.0 → 0.1.0-next.2abd2fa

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 (2114) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +661 -0
  3. package/README.md +490 -0
  4. package/assets/chrome-extension/README.md +23 -0
  5. package/assets/chrome-extension/background-utils.js +48 -0
  6. package/assets/chrome-extension/background.js +899 -0
  7. package/assets/chrome-extension/icons/icon128.png +0 -0
  8. package/assets/chrome-extension/icons/icon16.png +0 -0
  9. package/assets/chrome-extension/icons/icon32.png +0 -0
  10. package/assets/chrome-extension/icons/icon48.png +0 -0
  11. package/assets/chrome-extension/manifest.json +25 -0
  12. package/assets/chrome-extension/options-validation.js +57 -0
  13. package/assets/chrome-extension/options.html +200 -0
  14. package/assets/chrome-extension/options.js +74 -0
  15. package/assets/clawtributor-avatar-placeholder.png +0 -0
  16. package/assets/dmg-background-small.png +0 -0
  17. package/assets/dmg-background.png +0 -0
  18. package/dist/account-lookup-0KDSp5Mj.js +11 -0
  19. package/dist/account-lookup-zvANGr2x.js +11 -0
  20. package/dist/accounts-BFy_Z3od.js +272 -0
  21. package/dist/accounts-BTXSfPWi.js +270 -0
  22. package/dist/accounts-BxGS70Do.js +36 -0
  23. package/dist/accounts-CNY1TGj1.js +47 -0
  24. package/dist/accounts-DBohBlww.js +32 -0
  25. package/dist/accounts-DqRQ75w3.js +36 -0
  26. package/dist/accounts-iODF3SK2.js +47 -0
  27. package/dist/ack-reactions-B11TAC2D.js +446 -0
  28. package/dist/ack-reactions-BWVjL4H6.js +446 -0
  29. package/dist/acp-cli-CA1xMmVo.js +1320 -0
  30. package/dist/acp-cli-CGo6fJVZ.js +1326 -0
  31. package/dist/active-listener-VzhWW8W6.js +37 -0
  32. package/dist/active-listener-z0qVEcom.js +37 -0
  33. package/dist/agent-CTizRPIJ.js +732 -0
  34. package/dist/agent-D2RVoS5g.js +731 -0
  35. package/dist/agent-helpers-B6VfZ9_u.js +606 -0
  36. package/dist/agent-helpers-CTx5KKJu.js +606 -0
  37. package/dist/agent-scope-BGYzhtWQ.js +121 -0
  38. package/dist/agent-scope-C50VuLKh.js +119 -0
  39. package/dist/agents-BuYn-obw.js +788 -0
  40. package/dist/agents.config-BSTxuTVd.js +116 -0
  41. package/dist/agents.config-p3V3b9u6.js +116 -0
  42. package/dist/ansi-D04X81yq.js +14 -0
  43. package/dist/api-BeQMq2iS.js +17 -0
  44. package/dist/api-CxX8-gGz.js +17 -0
  45. package/dist/argv-Co-b9Zsc.js +101 -0
  46. package/dist/audio-DPOuhNq7.js +43 -0
  47. package/dist/audio-VBcVDa08.js +43 -0
  48. package/dist/audio-preflight-BwmCYeuM.js +64 -0
  49. package/dist/audio-preflight-co8gjlPX.js +69 -0
  50. package/dist/audit-oH4urD3G.js +3138 -0
  51. package/dist/audit-qgtCT3ik.js +3138 -0
  52. package/dist/auth-CAczFgAO.js +448 -0
  53. package/dist/auth-Deh9i9Eg.js +448 -0
  54. package/dist/auth-profiles-BquJGKLC.js +279 -0
  55. package/dist/auth-profiles-D8vKiBPq.js +281 -0
  56. package/dist/banner-Cf978khN.js +294 -0
  57. package/dist/binaries-DXW6oATV.js +13 -0
  58. package/dist/bindings-CRU_udk8.js +69 -0
  59. package/dist/bindings-DQZAu8Wv.js +69 -0
  60. package/dist/bonjour-discovery-DdAk1VyO.js +378 -0
  61. package/dist/bonjour-discovery-DuhiIZZx.js +378 -0
  62. package/dist/boot/handler.js +1498 -0
  63. package/dist/brew-C4zKZsHX.js +46 -0
  64. package/dist/brew-DbSbN8sD.js +46 -0
  65. package/dist/browser-cli-CZC4h5V4.js +1687 -0
  66. package/dist/browser-cli-DAgi_aQk.js +1692 -0
  67. package/dist/build-info.json +5 -0
  68. package/dist/bundled/boot/HOOK.md +24 -0
  69. package/dist/bundled/command-logger/HOOK.md +122 -0
  70. package/dist/call-BbwtB9Y-.js +2828 -0
  71. package/dist/call-PivL7Uex.js +2829 -0
  72. package/dist/canvas-host/a2ui/.bundle.hash +1 -0
  73. package/dist/canvas-host/a2ui/a2ui.bundle.js +13193 -0
  74. package/dist/canvas-host/a2ui/index.html +307 -0
  75. package/dist/catalog-BqO6yem_.js +185 -0
  76. package/dist/catalog-DFmaYwfk.js +185 -0
  77. package/dist/channel-account-context-CvIDAtHS.js +550 -0
  78. package/dist/channel-account-context-q-o0pG1A.js +550 -0
  79. package/dist/channel-activity-BaCNOZpP.js +94 -0
  80. package/dist/channel-activity-C-G4n9BK.js +292 -0
  81. package/dist/channel-activity-DTKGf3j5.js +94 -0
  82. package/dist/channel-options-Cyappik_.js +32 -0
  83. package/dist/channel-options-DFnypY5S.js +33 -0
  84. package/dist/channel-selection-BGl53D5K.js +51 -0
  85. package/dist/channel-selection-NNPbxnyZ.js +51 -0
  86. package/dist/channel-web-DmhVkWbP.js +2134 -0
  87. package/dist/channel-web-kRC3UYBJ.js +2136 -0
  88. package/dist/channels-cli-C5XRkPJl.js +1421 -0
  89. package/dist/channels-cli-D6TqCI0m.js +1426 -0
  90. package/dist/channels-status-issues-CUc9mpeW.js +18 -0
  91. package/dist/channels-status-issues-DwRDzwrV.js +18 -0
  92. package/dist/chat-envelope-DEZ-5RY8.js +248 -0
  93. package/dist/chat-envelope-el7Uo-Fe.js +248 -0
  94. package/dist/chat-type-CYPyHAj-.js +11 -0
  95. package/dist/chat-type-DKb2TlGZ.js +11 -0
  96. package/dist/chrome-0QaGKb3L.js +1732 -0
  97. package/dist/chrome-CFeWdP0Y.js +1733 -0
  98. package/dist/chunk-CSQfUhgF.js +341 -0
  99. package/dist/chunk-D0Y_w4oX.js +341 -0
  100. package/dist/clack-prompter-B7tOxhJd.js +122 -0
  101. package/dist/clack-prompter-CCFnKP_1.js +121 -0
  102. package/dist/cleanup-utils-CqAVZz2b.js +94 -0
  103. package/dist/cleanup-utils-CwQvD73q.js +94 -0
  104. package/dist/cli/daemon-cli.js +9 -0
  105. package/dist/cli-BR2J3c4l.js +125 -0
  106. package/dist/cli-C1q1vSmN.js +130 -0
  107. package/dist/cli-name-BicfmwQX.js +23 -0
  108. package/dist/cli-name-C6rJGl18.js +23 -0
  109. package/dist/cli-utils-BhXbz2UF.js +16 -0
  110. package/dist/cli-utils-DZe_rVkZ.js +16 -0
  111. package/dist/client-C61M8zI3.js +22 -0
  112. package/dist/client-DdpmATKq.js +22 -0
  113. package/dist/clipboard-D7_SKHPK.js +31 -0
  114. package/dist/clipboard-Dzkx6Q2K.js +31 -0
  115. package/dist/command-format-CVfo8I5f.js +18 -0
  116. package/dist/command-format-DgXcqxBt.js +32 -0
  117. package/dist/command-logger/handler.js +57 -0
  118. package/dist/command-options-C4paWSGf.js +26 -0
  119. package/dist/command-options-CA30lfLK.js +26 -0
  120. package/dist/command-registry-CYjvOp8W.js +215 -0
  121. package/dist/commands-CDonBOrw.js +41 -0
  122. package/dist/commands-D_-bgTlO.js +41 -0
  123. package/dist/commands-registry-CWJv6xe2.js +892 -0
  124. package/dist/commands-registry-Ci8_cFk9.js +893 -0
  125. package/dist/common-CMI-qsF8.js +156 -0
  126. package/dist/common-DSVmydhm.js +156 -0
  127. package/dist/completion-cli-8iZJqfmX.js +452 -0
  128. package/dist/completion-cli-CYDjEZSt.js +452 -0
  129. package/dist/config-D5XU45KD.js +6953 -0
  130. package/dist/config-FHu9Bn4R.js +6951 -0
  131. package/dist/config-cli-Gehy4sav.js +241 -0
  132. package/dist/config-cli-RC9qMgJq.js +246 -0
  133. package/dist/config-eval-CjGZtLwx.js +102 -0
  134. package/dist/config-eval-H_wlEYIG.js +102 -0
  135. package/dist/config-guard-J-Q_DFWk.js +97 -0
  136. package/dist/config-guard-cB5a_ANg.js +75 -0
  137. package/dist/config-validation-BPNyd9_3.js +18 -0
  138. package/dist/config-validation-BPWuvhVe.js +18 -0
  139. package/dist/configure-CC2XdRRm.js +891 -0
  140. package/dist/configure-DxFBJuhZ.js +889 -0
  141. package/dist/constants-BmRFoHl0.js +67 -0
  142. package/dist/constants-C9WPAluB.js +67 -0
  143. package/dist/constants-ChptG3d7.js +12 -0
  144. package/dist/constants-DY6b-_Wl.js +12 -0
  145. package/dist/control-auth-D0tpV3ts.js +397 -0
  146. package/dist/control-auth-_-0PGRUs.js +397 -0
  147. package/dist/control-ui/apple-touch-icon.png +0 -0
  148. package/dist/control-ui/assets/index-B4ZM1lW1.js +7738 -0
  149. package/dist/control-ui/assets/index-B4ZM1lW1.js.map +1 -0
  150. package/dist/control-ui/assets/index-PED72sKF.css +1 -0
  151. package/dist/control-ui/assets/pt-BR-eq0TfCI7.js +2 -0
  152. package/dist/control-ui/assets/pt-BR-eq0TfCI7.js.map +1 -0
  153. package/dist/control-ui/assets/zh-CN-DmLG2MF9.js +2 -0
  154. package/dist/control-ui/assets/zh-CN-DmLG2MF9.js.map +1 -0
  155. package/dist/control-ui/assets/zh-TW-BLErH0EM.js +2 -0
  156. package/dist/control-ui/assets/zh-TW-BLErH0EM.js.map +1 -0
  157. package/dist/control-ui/favicon-32.png +0 -0
  158. package/dist/control-ui/favicon.ico +0 -0
  159. package/dist/control-ui/favicon.svg +67 -0
  160. package/dist/control-ui/index.html +17 -0
  161. package/dist/control-ui-assets-Cx_mw4D0.js +186 -0
  162. package/dist/control-ui-assets-W1AUuGrO.js +186 -0
  163. package/dist/conversation-label-C4SDz4sT.js +36 -0
  164. package/dist/conversation-label-D1frnvYe.js +36 -0
  165. package/dist/credentials-BHWUBHMd.js +91 -0
  166. package/dist/credentials-DFsi1_e8.js +91 -0
  167. package/dist/cron-cli-BzERxhr5.js +495 -0
  168. package/dist/cron-cli-C8j_uslU.js +490 -0
  169. package/dist/daemon-cli-C95XNbX0.js +1199 -0
  170. package/dist/daemon-cli-e6sURMqd.js +1197 -0
  171. package/dist/daemon-cli.js +15243 -0
  172. package/dist/daemon-install-CcohRvKV.js +55 -0
  173. package/dist/daemon-install-DDshfT0J.js +60 -0
  174. package/dist/daemon-install-helpers-CFGAfRlj.js +462 -0
  175. package/dist/daemon-install-helpers-DIUzSFG1.js +462 -0
  176. package/dist/daemon-runtime-CMnbwryP.js +13 -0
  177. package/dist/daemon-runtime-CvqE4ysg.js +13 -0
  178. package/dist/dangerous-name-matching-BzmiLXmA.js +45 -0
  179. package/dist/dangerous-name-matching-DaVRgwer.js +45 -0
  180. package/dist/dangerous-tools-BOLoCRv4.js +253 -0
  181. package/dist/dangerous-tools-Baq7Q-i6.js +253 -0
  182. package/dist/defaults-B5KStIBg.js +7 -0
  183. package/dist/defaults-xUAL2Z-F.js +7 -0
  184. package/dist/deliver-912khjLK.js +481 -0
  185. package/dist/deliver-D56J4-1F.js +481 -0
  186. package/dist/delivery-queue-Cfa9Wmxp.js +244 -0
  187. package/dist/delivery-queue-CxVRi4tw.js +244 -0
  188. package/dist/devices-cli-0qDhTgZR.js +316 -0
  189. package/dist/devices-cli-6SKMR2bV.js +321 -0
  190. package/dist/diagnostics-99iCgBUh.js +46 -0
  191. package/dist/diagnostics-VC0cz7kX.js +46 -0
  192. package/dist/directory-cli-5YXdoVdn.js +217 -0
  193. package/dist/directory-cli-D3IKCHmn.js +222 -0
  194. package/dist/dm-policy-shared-4rkjhcrM.js +22 -0
  195. package/dist/dm-policy-shared-D8lgnmrC.js +22 -0
  196. package/dist/dns-cli-11CtErVU.js +197 -0
  197. package/dist/dns-cli-SiEd_1Lq.js +202 -0
  198. package/dist/dock-BqNINg7k.js +928 -0
  199. package/dist/dock-CQuu41bw.js +929 -0
  200. package/dist/doctor-completion-BR1SlAT3.js +92 -0
  201. package/dist/doctor-completion-CZwpEhIK.js +92 -0
  202. package/dist/doctor-config-flow-BVkHcvoj.js +1933 -0
  203. package/dist/doctor-config-flow-DVYRn0An.js +1934 -0
  204. package/dist/enable-DcJnkzfz.js +59 -0
  205. package/dist/enable-ibNq4UWy.js +59 -0
  206. package/dist/entry.js +2620 -0
  207. package/dist/env-DeF64iu0.js +60 -0
  208. package/dist/env-vars-7aZqKPhk.js +93 -0
  209. package/dist/env-vars-CLGbxdpL.js +93 -0
  210. package/dist/errors-8F-77i6m.js +35 -0
  211. package/dist/errors-DZ199hOo.js +35 -0
  212. package/dist/exec-DbKuYyM1.js +164 -0
  213. package/dist/exec-DkFE7lqU.js +164 -0
  214. package/dist/export-html/template.css +1060 -0
  215. package/dist/export-html/template.html +88 -0
  216. package/dist/export-html/template.js +1797 -0
  217. package/dist/export-html/vendor/highlight.min.js +1213 -0
  218. package/dist/export-html/vendor/marked.min.js +6 -0
  219. package/dist/extensionAPI.js +11520 -0
  220. package/dist/fetch-BFSBLBkA.js +67 -0
  221. package/dist/fetch-C6XKGA11.js +67 -0
  222. package/dist/fetch-CEDsOiql.js +67 -0
  223. package/dist/fetch-timeout-DTIN7CGM.js +43 -0
  224. package/dist/fetch-timeout-DoySHqfO.js +43 -0
  225. package/dist/file-identity-BxlKD8Ys.js +12 -0
  226. package/dist/file-lock-CIvloidc.js +107 -0
  227. package/dist/file-lock-CzBL_VIx.js +107 -0
  228. package/dist/format-duration-CqUERz51.js +35 -0
  229. package/dist/format-duration-Ct-yiwkS.js +35 -0
  230. package/dist/format-relative-79_Y1n2Y.js +55 -0
  231. package/dist/format-relative-CxLpEQOX.js +55 -0
  232. package/dist/fs-safe-DSwT85uK.js +88 -0
  233. package/dist/fs-safe-DkBhNAc3.js +98 -0
  234. package/dist/gateway-cli-BEEZhCHv.js +23747 -0
  235. package/dist/gateway-cli-Nob0g_4y.js +23742 -0
  236. package/dist/gateway-rpc-CksB-N83.js +28 -0
  237. package/dist/gateway-rpc-Dq44SkOv.js +28 -0
  238. package/dist/gmail-setup-utils-Cnx8A5pW.js +422 -0
  239. package/dist/gmail-setup-utils-nkabbKOE.js +423 -0
  240. package/dist/health-RT-F3hzT.js +1423 -0
  241. package/dist/health-SOuaKNRa.js +1420 -0
  242. package/dist/health-format-BG95OE6N.js +28 -0
  243. package/dist/health-format-B_QRD8Si.js +28 -0
  244. package/dist/heartbeat-visibility-BxkZjE5m.js +125 -0
  245. package/dist/heartbeat-visibility-CGG-G7px.js +125 -0
  246. package/dist/heartbeat-wake-LGEgcXjs.js +182 -0
  247. package/dist/heartbeat-wake-Y97geucO.js +182 -0
  248. package/dist/help-format-DAxf0l_h.js +17 -0
  249. package/dist/help-format-NNm_Ov4H.js +17 -0
  250. package/dist/helpers-BAsMXprO.js +25 -0
  251. package/dist/helpers-DLgbkcEn.js +25 -0
  252. package/dist/helpers-R7bU5IBz.js +10 -0
  253. package/dist/helpers-kkeXif0Q.js +10 -0
  254. package/dist/hook-runner-global-DJ14gXFP.js +527 -0
  255. package/dist/hooks-cli-DyEKryW8.js +1217 -0
  256. package/dist/hooks-cli-RuEn0-oy.js +1222 -0
  257. package/dist/host-env-security-Bms2_EMV.js +92 -0
  258. package/dist/host-env-security-szwfmhC4.js +92 -0
  259. package/dist/image-ops-Bi6JPSkD.js +354 -0
  260. package/dist/image-ops-DWytvdh_.js +354 -0
  261. package/dist/import-D8BBZQgl.js +170 -0
  262. package/dist/import-DQ6NI4Fz.js +168 -0
  263. package/dist/inbound-context-CPkkQW0i.js +68 -0
  264. package/dist/inbound-context-DS_kpIYI.js +68 -0
  265. package/dist/inbound-path-policy-Bg4gZBx-.js +250 -0
  266. package/dist/inbound-path-policy-sdr5Ji0k.js +250 -0
  267. package/dist/index.js +569 -0
  268. package/dist/input-provenance-Bn6thJNm.js +35 -0
  269. package/dist/input-provenance-xUsSMOsz.js +35 -0
  270. package/dist/inspect-Dt8hogS3.js +559 -0
  271. package/dist/inspect-vYIL1oA0.js +559 -0
  272. package/dist/installs-aM5dWAyn.js +325 -0
  273. package/dist/installs-pWdqG8HL.js +325 -0
  274. package/dist/ip-C9q3Oq20.js +200 -0
  275. package/dist/ip-D0zgNmBV.js +200 -0
  276. package/dist/ipv4--2WXMVtE.js +46 -0
  277. package/dist/ipv4-CDQpx1A7.js +46 -0
  278. package/dist/ir-BpaAMTfW.js +940 -0
  279. package/dist/is-main-DN8-sNR5.js +30 -0
  280. package/dist/json-file-B7l5-Xhr.js +25 -0
  281. package/dist/json-file-ChO_R9yh.js +25 -0
  282. package/dist/json-files-CmpYSF4G.js +46 -0
  283. package/dist/json-files-DzpTak5i.js +46 -0
  284. package/dist/lanes-ByWMUgrz.js +58 -0
  285. package/dist/lanes-cHJ5arWg.js +58 -0
  286. package/dist/links-Bz4V7R_p.js +15 -0
  287. package/dist/links-C3soDNDH.js +15 -0
  288. package/dist/loader-Ccwsh8Sh.js +22624 -0
  289. package/dist/loader-y9MhJewT.js +22621 -0
  290. package/dist/local-roots-BrH0Q63K.js +313 -0
  291. package/dist/local-roots-nImrw2WR.js +314 -0
  292. package/dist/location-DBWCGNLq.js +43 -0
  293. package/dist/location-GbZ0bBRU.js +43 -0
  294. package/dist/logger-BWMPnILd.js +47 -0
  295. package/dist/logger-Bw3cFE5t.js +49 -0
  296. package/dist/logger-DyL5G2DO.js +12 -0
  297. package/dist/logger-GvipVDfh.js +12 -0
  298. package/dist/logging-C-nxX2fn.js +20 -0
  299. package/dist/logging-D8-Kozjc.js +19 -0
  300. package/dist/login-C_Kt57nO.js +62 -0
  301. package/dist/login-DOmWDMeP.js +61 -0
  302. package/dist/login-qr-CXU0wC5K.js +322 -0
  303. package/dist/login-qr-D0u6fdeO.js +327 -0
  304. package/dist/logs-cli-CschwP4d.js +238 -0
  305. package/dist/logs-cli-D7ayUvz_.js +233 -0
  306. package/dist/markdown-tables-CrmghPAr.js +29 -0
  307. package/dist/markdown-tables-jrnSPvZ6.js +29 -0
  308. package/dist/media-CojxZ45J.js +10492 -0
  309. package/dist/media-DN7yRfrH.js +940 -0
  310. package/dist/message-action-names-CtEZcmlU.js +2521 -0
  311. package/dist/message-action-names-WglOO_DT.js +2521 -0
  312. package/dist/message-channel-DzJqHVZD.js +91 -0
  313. package/dist/message-channel-uWMAiywE.js +91 -0
  314. package/dist/mime-BS3jhcZE.js +149 -0
  315. package/dist/mime-Cxh_64P6.js +149 -0
  316. package/dist/mutable-allowlist-detectors-DiZDtmlZ.js +64 -0
  317. package/dist/mutable-allowlist-detectors-U5ThQr9V.js +64 -0
  318. package/dist/net-Cg8AQeke.js +225 -0
  319. package/dist/net-D6D0wgcF.js +225 -0
  320. package/dist/node-cli-Q2-n3Fgv.js +24 -0
  321. package/dist/node-cli-Uf6lAntf.js +24 -0
  322. package/dist/nodes-cli-C2SoKfCv.js +1343 -0
  323. package/dist/nodes-cli-CQmlfx0K.js +1348 -0
  324. package/dist/nodes-screen-BR9sYoPa.js +250 -0
  325. package/dist/nodes-screen-Cw7Hv7M2.js +250 -0
  326. package/dist/note-Dlv4NmlQ.js +92 -0
  327. package/dist/note-kvWV4xtw.js +92 -0
  328. package/dist/npm-registry-spec-0qiKawvv.js +786 -0
  329. package/dist/npm-registry-spec-COvUzy5J.js +786 -0
  330. package/dist/npm-resolution-6v_Zm-9G.js +86 -0
  331. package/dist/npm-resolution-BFz7LeoN.js +86 -0
  332. package/dist/onboard-CgyU-mDL.js +407 -0
  333. package/dist/onboard-RI4vNTZd.js +405 -0
  334. package/dist/onboard-channels-DN5JoKPd.js +2548 -0
  335. package/dist/onboard-channels-DyAd1OZr.js +2547 -0
  336. package/dist/onboard-config-BCTthQ7J.js +24 -0
  337. package/dist/onboard-config-y-2cgT0V.js +24 -0
  338. package/dist/onboard-helpers-BCzZUD0z.js +363 -0
  339. package/dist/onboard-helpers-sDc2Ky6H.js +362 -0
  340. package/dist/onboard-remote-CJrMtttl.js +127 -0
  341. package/dist/onboard-remote-hyQIBguz.js +127 -0
  342. package/dist/onboarding-DCu1iBTV.js +541 -0
  343. package/dist/onboarding-zKMitzpb.js +543 -0
  344. package/dist/onboarding.finalize-ClHhYE2E.js +401 -0
  345. package/dist/onboarding.finalize-D5JkVJgg.js +398 -0
  346. package/dist/onboarding.gateway-config-DFh71Ndn.js +198 -0
  347. package/dist/onboarding.gateway-config-VBk6AP9U.js +191 -0
  348. package/dist/outbound-BYlZshIw.js +221 -0
  349. package/dist/outbound-CFfJC1j5.js +220 -0
  350. package/dist/outbound-attachment-BCNs1u1F.js +18 -0
  351. package/dist/outbound-attachment-B_0D60Yr.js +18 -0
  352. package/dist/outbound-attachment-o0seS0CP.js +18 -0
  353. package/dist/pairing-cli-BeydfoF9.js +122 -0
  354. package/dist/pairing-cli-DWzX866x.js +127 -0
  355. package/dist/pairing-labels-B-N8S5Fc.js +9 -0
  356. package/dist/pairing-labels-B_53dY5L.js +9 -0
  357. package/dist/pairing-store-BxdqFZGK.js +460 -0
  358. package/dist/pairing-store-CTkD51uW.js +459 -0
  359. package/dist/parse-log-line-enq8pduH.js +44 -0
  360. package/dist/parse-log-line-mz9TG6ig.js +44 -0
  361. package/dist/parse-timeout-BMP8a0_a.js +16 -0
  362. package/dist/parse-timeout-CDkco8kd.js +16 -0
  363. package/dist/path-env-DR5vn3QL.js +89 -0
  364. package/dist/path-env-qRJbjJzj.js +89 -0
  365. package/dist/path-guards-CIx4hURU.js +31 -0
  366. package/dist/path-guards-CrQOUlsq.js +31 -0
  367. package/dist/path-safety-DkT9RmTG.js +14 -0
  368. package/dist/path-safety-juI2XbO1.js +14 -0
  369. package/dist/paths-BTaH3rLn.js +232 -0
  370. package/dist/plugin-auto-enable-D23gv7Aw.js +302 -0
  371. package/dist/plugin-auto-enable-DuPS9XiJ.js +301 -0
  372. package/dist/plugin-registry-CNu_1KZz.js +33 -0
  373. package/dist/plugin-registry-DeHwd2jk.js +33 -0
  374. package/dist/plugin-sdk/account-id.d.ts +1 -0
  375. package/dist/plugin-sdk/account-id.js +34 -0
  376. package/dist/plugin-sdk/agents/agent-helpers/errors.d.ts +55 -0
  377. package/dist/plugin-sdk/agents/agent-helpers/google.d.ts +3 -0
  378. package/dist/plugin-sdk/agents/agent-helpers/images.d.ts +21 -0
  379. package/dist/plugin-sdk/agents/agent-helpers/message-sanitization.d.ts +14 -0
  380. package/dist/plugin-sdk/agents/agent-helpers/messaging-dedupe.d.ts +10 -0
  381. package/dist/plugin-sdk/agents/agent-helpers/openai.d.ts +9 -0
  382. package/dist/plugin-sdk/agents/agent-helpers/thinking.d.ts +5 -0
  383. package/dist/plugin-sdk/agents/agent-helpers/turns.d.ts +20 -0
  384. package/dist/plugin-sdk/agents/agent-helpers/types.d.ts +1 -0
  385. package/dist/plugin-sdk/agents/agent-helpers.d.ts +11 -0
  386. package/dist/plugin-sdk/agents/agent-messaging.d.ts +8 -0
  387. package/dist/plugin-sdk/agents/agent-paths.d.ts +1 -0
  388. package/dist/plugin-sdk/agents/agent-scope.d.ts +61 -0
  389. package/dist/plugin-sdk/agents/agent-types.d.ts +78 -0
  390. package/dist/plugin-sdk/agents/agent-utils.d.ts +39 -0
  391. package/dist/plugin-sdk/agents/announce-idempotency.d.ts +11 -0
  392. package/dist/plugin-sdk/agents/api-key-rotation.d.ts +22 -0
  393. package/dist/plugin-sdk/agents/auth-profiles/constants.d.ts +16 -0
  394. package/dist/plugin-sdk/agents/auth-profiles/display.d.ts +7 -0
  395. package/dist/plugin-sdk/agents/auth-profiles/doctor.d.ts +8 -0
  396. package/dist/plugin-sdk/agents/auth-profiles/oauth.d.ts +14 -0
  397. package/dist/plugin-sdk/agents/auth-profiles/paths.d.ts +4 -0
  398. package/dist/plugin-sdk/agents/auth-profiles/profiles.d.ts +12 -0
  399. package/dist/plugin-sdk/agents/auth-profiles/session-override.d.ts +18 -0
  400. package/dist/plugin-sdk/agents/auth-profiles/store.d.ts +10 -0
  401. package/dist/plugin-sdk/agents/auth-profiles/types.d.ts +13 -0
  402. package/dist/plugin-sdk/agents/auth-profiles.d.ts +8 -0
  403. package/dist/plugin-sdk/agents/block-chunker.d.ts +19 -0
  404. package/dist/plugin-sdk/agents/channel-tools.d.ts +27 -0
  405. package/dist/plugin-sdk/agents/cli-session.d.ts +3 -0
  406. package/dist/plugin-sdk/agents/current-time.d.ts +17 -0
  407. package/dist/plugin-sdk/agents/date-time.d.ts +13 -0
  408. package/dist/plugin-sdk/agents/defaults.d.ts +3 -0
  409. package/dist/plugin-sdk/agents/identity-avatar.d.ts +15 -0
  410. package/dist/plugin-sdk/agents/identity.d.ts +28 -0
  411. package/dist/plugin-sdk/agents/image-sanitization.d.ts +8 -0
  412. package/dist/plugin-sdk/agents/lanes.d.ts +3 -0
  413. package/dist/plugin-sdk/agents/live-auth-keys.d.ts +6 -0
  414. package/dist/plugin-sdk/agents/owner-display.d.ts +19 -0
  415. package/dist/plugin-sdk/agents/provider-auth.d.ts +40 -0
  416. package/dist/plugin-sdk/agents/provider-utils.d.ts +21 -0
  417. package/dist/plugin-sdk/agents/schema/typebox.d.ts +14 -0
  418. package/dist/plugin-sdk/agents/session-write-lock.d.ts +53 -0
  419. package/dist/plugin-sdk/agents/stable-stringify.d.ts +1 -0
  420. package/dist/plugin-sdk/agents/subagent-announce-queue.d.ts +24 -0
  421. package/dist/plugin-sdk/agents/subagent-announce.d.ts +39 -0
  422. package/dist/plugin-sdk/agents/subagent-depth.d.ts +11 -0
  423. package/dist/plugin-sdk/agents/subagent-lifecycle-events.d.ts +18 -0
  424. package/dist/plugin-sdk/agents/subagent-registry-cleanup.d.ts +24 -0
  425. package/dist/plugin-sdk/agents/subagent-registry-completion.d.ts +15 -0
  426. package/dist/plugin-sdk/agents/subagent-registry-queries.d.ts +11 -0
  427. package/dist/plugin-sdk/agents/subagent-registry-state.d.ts +7 -0
  428. package/dist/plugin-sdk/agents/subagent-registry.d.ts +45 -0
  429. package/dist/plugin-sdk/agents/subagent-registry.store.d.ts +5 -0
  430. package/dist/plugin-sdk/agents/subagent-registry.types.d.ts +34 -0
  431. package/dist/plugin-sdk/agents/subagent-spawn.d.ts +47 -0
  432. package/dist/plugin-sdk/agents/timeout.d.ts +8 -0
  433. package/dist/plugin-sdk/agents/tool-call-id.d.ts +27 -0
  434. package/dist/plugin-sdk/agents/tool-display-common.d.ts +32 -0
  435. package/dist/plugin-sdk/agents/tool-display.d.ts +15 -0
  436. package/dist/plugin-sdk/agents/tool-images.d.ts +10 -0
  437. package/dist/plugin-sdk/agents/tools/agent-step.d.ts +15 -0
  438. package/dist/plugin-sdk/agents/tools/common.d.ts +80 -0
  439. package/dist/plugin-sdk/agents/tools/discord-actions-guild.d.ts +4 -0
  440. package/dist/plugin-sdk/agents/tools/discord-actions-messaging.d.ts +6 -0
  441. package/dist/plugin-sdk/agents/tools/discord-actions-moderation-shared.d.ts +13 -0
  442. package/dist/plugin-sdk/agents/tools/discord-actions-moderation.d.ts +4 -0
  443. package/dist/plugin-sdk/agents/tools/discord-actions-presence.d.ts +4 -0
  444. package/dist/plugin-sdk/agents/tools/discord-actions.d.ts +5 -0
  445. package/dist/plugin-sdk/agents/tools/sessions-access.d.ts +42 -0
  446. package/dist/plugin-sdk/agents/tools/sessions-helpers.d.ts +52 -0
  447. package/dist/plugin-sdk/agents/tools/sessions-resolution.d.ts +59 -0
  448. package/dist/plugin-sdk/agents/tools/sessions-send-helpers.d.ts +34 -0
  449. package/dist/plugin-sdk/agents/tools/slack-actions.d.ts +15 -0
  450. package/dist/plugin-sdk/agents/tools/telegram-actions.d.ts +7 -0
  451. package/dist/plugin-sdk/agents/tools/whatsapp-actions.d.ts +3 -0
  452. package/dist/plugin-sdk/agents/tools/whatsapp-target-auth.d.ts +10 -0
  453. package/dist/plugin-sdk/agents/usage.d.ts +49 -0
  454. package/dist/plugin-sdk/agents/workspace.d.ts +1 -0
  455. package/dist/plugin-sdk/auto-reply/chunk.d.ts +45 -0
  456. package/dist/plugin-sdk/auto-reply/command-auth.d.ts +17 -0
  457. package/dist/plugin-sdk/auto-reply/command-detection.d.ts +13 -0
  458. package/dist/plugin-sdk/auto-reply/commands-args.d.ts +3 -0
  459. package/dist/plugin-sdk/auto-reply/commands-registry.d.ts +47 -0
  460. package/dist/plugin-sdk/auto-reply/commands-registry.data.d.ts +3 -0
  461. package/dist/plugin-sdk/auto-reply/commands-registry.types.d.ts +66 -0
  462. package/dist/plugin-sdk/auto-reply/dispatch.d.ts +32 -0
  463. package/dist/plugin-sdk/auto-reply/envelope.d.ts +58 -0
  464. package/dist/plugin-sdk/auto-reply/fallback-state.d.ts +55 -0
  465. package/dist/plugin-sdk/auto-reply/group-activation.d.ts +6 -0
  466. package/dist/plugin-sdk/auto-reply/heartbeat-reply-payload.d.ts +2 -0
  467. package/dist/plugin-sdk/auto-reply/heartbeat.d.ts +16 -0
  468. package/dist/plugin-sdk/auto-reply/inbound-debounce.d.ts +17 -0
  469. package/dist/plugin-sdk/auto-reply/media-note.d.ts +2 -0
  470. package/dist/plugin-sdk/auto-reply/model-runtime.d.ts +17 -0
  471. package/dist/plugin-sdk/auto-reply/model.d.ts +8 -0
  472. package/dist/plugin-sdk/auto-reply/reply/abort.d.ts +32 -0
  473. package/dist/plugin-sdk/auto-reply/reply/agent-runner-execution.d.ts +59 -0
  474. package/dist/plugin-sdk/auto-reply/reply/agent-runner-helpers.d.ts +15 -0
  475. package/dist/plugin-sdk/auto-reply/reply/agent-runner-payloads.d.ts +27 -0
  476. package/dist/plugin-sdk/auto-reply/reply/agent-runner-utils.d.ts +152 -0
  477. package/dist/plugin-sdk/auto-reply/reply/agent-runner.d.ts +36 -0
  478. package/dist/plugin-sdk/auto-reply/reply/block-reply-coalescer.d.ts +15 -0
  479. package/dist/plugin-sdk/auto-reply/reply/block-reply-pipeline.d.ts +31 -0
  480. package/dist/plugin-sdk/auto-reply/reply/block-streaming.d.ts +22 -0
  481. package/dist/plugin-sdk/auto-reply/reply/body.d.ts +10 -0
  482. package/dist/plugin-sdk/auto-reply/reply/command-gates.d.ts +18 -0
  483. package/dist/plugin-sdk/auto-reply/reply/commands-allowlist.d.ts +2 -0
  484. package/dist/plugin-sdk/auto-reply/reply/commands-config.d.ts +3 -0
  485. package/dist/plugin-sdk/auto-reply/reply/commands-context.d.ts +12 -0
  486. package/dist/plugin-sdk/auto-reply/reply/commands-core.d.ts +13 -0
  487. package/dist/plugin-sdk/auto-reply/reply/commands-export-session.d.ts +3 -0
  488. package/dist/plugin-sdk/auto-reply/reply/commands-info.d.ts +11 -0
  489. package/dist/plugin-sdk/auto-reply/reply/commands-plugin.d.ts +13 -0
  490. package/dist/plugin-sdk/auto-reply/reply/commands-session.d.ts +8 -0
  491. package/dist/plugin-sdk/auto-reply/reply/commands-setunset-standard.d.ts +10 -0
  492. package/dist/plugin-sdk/auto-reply/reply/commands-setunset.d.ts +34 -0
  493. package/dist/plugin-sdk/auto-reply/reply/commands-slash-parse.d.ts +24 -0
  494. package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +26 -0
  495. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/action-agents.d.ts +3 -0
  496. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/action-focus.d.ts +3 -0
  497. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/action-help.d.ts +2 -0
  498. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/action-info.d.ts +3 -0
  499. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/action-kill.d.ts +3 -0
  500. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/action-list.d.ts +3 -0
  501. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/action-log.d.ts +3 -0
  502. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/action-send.d.ts +3 -0
  503. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/action-spawn.d.ts +3 -0
  504. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/action-unfocus.d.ts +3 -0
  505. package/dist/plugin-sdk/auto-reply/reply/commands-subagents/shared.d.ts +81 -0
  506. package/dist/plugin-sdk/auto-reply/reply/commands-subagents.d.ts +4 -0
  507. package/dist/plugin-sdk/auto-reply/reply/commands-tts.d.ts +2 -0
  508. package/dist/plugin-sdk/auto-reply/reply/commands-types.d.ts +61 -0
  509. package/dist/plugin-sdk/auto-reply/reply/commands.d.ts +4 -0
  510. package/dist/plugin-sdk/auto-reply/reply/config-commands.d.ts +15 -0
  511. package/dist/plugin-sdk/auto-reply/reply/config-value.d.ts +4 -0
  512. package/dist/plugin-sdk/auto-reply/reply/debug-commands.d.ts +16 -0
  513. package/dist/plugin-sdk/auto-reply/reply/directive-handling.auth.d.ts +19 -0
  514. package/dist/plugin-sdk/auto-reply/reply/directive-handling.d.ts +6 -0
  515. package/dist/plugin-sdk/auto-reply/reply/directive-handling.fast-lane.d.ts +7 -0
  516. package/dist/plugin-sdk/auto-reply/reply/directive-handling.impl.d.ts +3 -0
  517. package/dist/plugin-sdk/auto-reply/reply/directive-handling.levels.d.ts +20 -0
  518. package/dist/plugin-sdk/auto-reply/reply/directive-handling.params.d.ts +59 -0
  519. package/dist/plugin-sdk/auto-reply/reply/directive-handling.parse.d.ts +65 -0
  520. package/dist/plugin-sdk/auto-reply/reply/directive-handling.persist.d.ts +42 -0
  521. package/dist/plugin-sdk/auto-reply/reply/directive-handling.queue-validation.d.ts +10 -0
  522. package/dist/plugin-sdk/auto-reply/reply/directive-handling.shared.d.ts +29 -0
  523. package/dist/plugin-sdk/auto-reply/reply/directive-parsing.d.ts +5 -0
  524. package/dist/plugin-sdk/auto-reply/reply/directives.d.ts +58 -0
  525. package/dist/plugin-sdk/auto-reply/reply/dispatch-from-config.d.ts +16 -0
  526. package/dist/plugin-sdk/auto-reply/reply/dispatcher-registry.d.ts +24 -0
  527. package/dist/plugin-sdk/auto-reply/reply/elevated-allowlist-matcher.d.ts +20 -0
  528. package/dist/plugin-sdk/auto-reply/reply/elevated-unavailable.d.ts +8 -0
  529. package/dist/plugin-sdk/auto-reply/reply/followup-runner.d.ts +16 -0
  530. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives-apply.d.ts +64 -0
  531. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives-utils.d.ts +3 -0
  532. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +121 -0
  533. package/dist/plugin-sdk/auto-reply/reply/get-reply-inline-actions.d.ts +56 -0
  534. package/dist/plugin-sdk/auto-reply/reply/get-reply-run.d.ts +73 -0
  535. package/dist/plugin-sdk/auto-reply/reply/get-reply.d.ts +4 -0
  536. package/dist/plugin-sdk/auto-reply/reply/groups.d.ts +26 -0
  537. package/dist/plugin-sdk/auto-reply/reply/history.d.ts +72 -0
  538. package/dist/plugin-sdk/auto-reply/reply/inbound-context.d.ts +8 -0
  539. package/dist/plugin-sdk/auto-reply/reply/inbound-dedupe.d.ts +8 -0
  540. package/dist/plugin-sdk/auto-reply/reply/inbound-meta.d.ts +3 -0
  541. package/dist/plugin-sdk/auto-reply/reply/inbound-text.d.ts +1 -0
  542. package/dist/plugin-sdk/auto-reply/reply/line-directives.d.ts +22 -0
  543. package/dist/plugin-sdk/auto-reply/reply/mentions.d.ts +19 -0
  544. package/dist/plugin-sdk/auto-reply/reply/normalize-reply.d.ts +11 -0
  545. package/dist/plugin-sdk/auto-reply/reply/origin-routing.d.ts +13 -0
  546. package/dist/plugin-sdk/auto-reply/reply/provider-dispatcher.d.ts +19 -0
  547. package/dist/plugin-sdk/auto-reply/reply/queue/cleanup.d.ts +6 -0
  548. package/dist/plugin-sdk/auto-reply/reply/queue/directive.d.ts +15 -0
  549. package/dist/plugin-sdk/auto-reply/reply/queue/drain.d.ts +2 -0
  550. package/dist/plugin-sdk/auto-reply/reply/queue/enqueue.d.ts +3 -0
  551. package/dist/plugin-sdk/auto-reply/reply/queue/normalize.d.ts +3 -0
  552. package/dist/plugin-sdk/auto-reply/reply/queue/settings.d.ts +2 -0
  553. package/dist/plugin-sdk/auto-reply/reply/queue/state.d.ts +20 -0
  554. package/dist/plugin-sdk/auto-reply/reply/queue/types.d.ts +87 -0
  555. package/dist/plugin-sdk/auto-reply/reply/queue-policy.d.ts +8 -0
  556. package/dist/plugin-sdk/auto-reply/reply/queue.d.ts +8 -0
  557. package/dist/plugin-sdk/auto-reply/reply/reply-delivery.d.ts +27 -0
  558. package/dist/plugin-sdk/auto-reply/reply/reply-directives.d.ts +14 -0
  559. package/dist/plugin-sdk/auto-reply/reply/reply-dispatcher.d.ts +53 -0
  560. package/dist/plugin-sdk/auto-reply/reply/reply-elevated.d.ts +16 -0
  561. package/dist/plugin-sdk/auto-reply/reply/reply-inline.d.ts +8 -0
  562. package/dist/plugin-sdk/auto-reply/reply/reply-payloads.d.ts +27 -0
  563. package/dist/plugin-sdk/auto-reply/reply/reply-reference.d.ts +20 -0
  564. package/dist/plugin-sdk/auto-reply/reply/reply-tags.d.ts +6 -0
  565. package/dist/plugin-sdk/auto-reply/reply/reply-threading.d.ts +9 -0
  566. package/dist/plugin-sdk/auto-reply/reply/response-prefix-template.d.ts +51 -0
  567. package/dist/plugin-sdk/auto-reply/reply/route-reply.d.ts +56 -0
  568. package/dist/plugin-sdk/auto-reply/reply/session-reset-prompt.d.ts +1 -0
  569. package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +11 -0
  570. package/dist/plugin-sdk/auto-reply/reply/session-updates.d.ts +18 -0
  571. package/dist/plugin-sdk/auto-reply/reply/session-usage.d.ts +21 -0
  572. package/dist/plugin-sdk/auto-reply/reply/session.d.ts +26 -0
  573. package/dist/plugin-sdk/auto-reply/reply/strip-inbound-meta.d.ts +27 -0
  574. package/dist/plugin-sdk/auto-reply/reply/subagents-utils.d.ts +26 -0
  575. package/dist/plugin-sdk/auto-reply/reply/typing-mode.d.ts +27 -0
  576. package/dist/plugin-sdk/auto-reply/reply/typing.d.ts +18 -0
  577. package/dist/plugin-sdk/auto-reply/reply/untrusted-context.d.ts +1 -0
  578. package/dist/plugin-sdk/auto-reply/reply.d.ts +5 -0
  579. package/dist/plugin-sdk/auto-reply/send-policy.d.ts +6 -0
  580. package/dist/plugin-sdk/auto-reply/status.d.ts +59 -0
  581. package/dist/plugin-sdk/auto-reply/templating.d.ts +159 -0
  582. package/dist/plugin-sdk/auto-reply/thinking.d.ts +22 -0
  583. package/dist/plugin-sdk/auto-reply/tokens.d.ts +3 -0
  584. package/dist/plugin-sdk/auto-reply/types.d.ts +82 -0
  585. package/dist/plugin-sdk/channel-web.d.ts +6 -0
  586. package/dist/plugin-sdk/channels/account-summary.d.ts +17 -0
  587. package/dist/plugin-sdk/channels/ack-reactions.d.ts +29 -0
  588. package/dist/plugin-sdk/channels/allow-from.d.ts +11 -0
  589. package/dist/plugin-sdk/channels/allowlist-match.d.ts +16 -0
  590. package/dist/plugin-sdk/channels/allowlists/resolve-utils.d.ts +33 -0
  591. package/dist/plugin-sdk/channels/channel-config.d.ts +39 -0
  592. package/dist/plugin-sdk/channels/chat-type.d.ts +2 -0
  593. package/dist/plugin-sdk/channels/command-gating.d.ts +20 -0
  594. package/dist/plugin-sdk/channels/conversation-label.d.ts +2 -0
  595. package/dist/plugin-sdk/channels/dock.d.ts +25 -0
  596. package/dist/plugin-sdk/channels/draft-stream-controls.d.ts +54 -0
  597. package/dist/plugin-sdk/channels/draft-stream-loop.d.ts +13 -0
  598. package/dist/plugin-sdk/channels/location.d.ts +21 -0
  599. package/dist/plugin-sdk/channels/logging.d.ts +20 -0
  600. package/dist/plugin-sdk/channels/mention-gating.d.ts +27 -0
  601. package/dist/plugin-sdk/channels/model-overrides.d.ts +18 -0
  602. package/dist/plugin-sdk/channels/plugins/account-action-gate.d.ts +5 -0
  603. package/dist/plugin-sdk/channels/plugins/account-helpers.d.ts +6 -0
  604. package/dist/plugin-sdk/channels/plugins/actions/discord/handle-action.d.ts +3 -0
  605. package/dist/plugin-sdk/channels/plugins/actions/discord/handle-action.guild-admin.d.ts +9 -0
  606. package/dist/plugin-sdk/channels/plugins/actions/discord.d.ts +2 -0
  607. package/dist/plugin-sdk/channels/plugins/actions/shared.d.ts +7 -0
  608. package/dist/plugin-sdk/channels/plugins/actions/signal.d.ts +2 -0
  609. package/dist/plugin-sdk/channels/plugins/actions/telegram.d.ts +2 -0
  610. package/dist/plugin-sdk/channels/plugins/agent-tools/whatsapp-login.d.ts +2 -0
  611. package/dist/plugin-sdk/channels/plugins/allowlist-match.d.ts +2 -0
  612. package/dist/plugin-sdk/channels/plugins/bluebubbles-actions.d.ts +48 -0
  613. package/dist/plugin-sdk/channels/plugins/channel-config.d.ts +2 -0
  614. package/dist/plugin-sdk/channels/plugins/config-helpers.d.ts +14 -0
  615. package/dist/plugin-sdk/channels/plugins/config-schema.d.ts +3 -0
  616. package/dist/plugin-sdk/channels/plugins/config-writes.d.ts +7 -0
  617. package/dist/plugin-sdk/channels/plugins/directory-config.d.ts +16 -0
  618. package/dist/plugin-sdk/channels/plugins/group-mentions.d.ts +18 -0
  619. package/dist/plugin-sdk/channels/plugins/helpers.d.ts +8 -0
  620. package/dist/plugin-sdk/channels/plugins/index.d.ts +8 -0
  621. package/dist/plugin-sdk/channels/plugins/media-limits.d.ts +9 -0
  622. package/dist/plugin-sdk/channels/plugins/media-payload.d.ts +15 -0
  623. package/dist/plugin-sdk/channels/plugins/message-action-names.d.ts +2 -0
  624. package/dist/plugin-sdk/channels/plugins/normalize/discord.d.ts +14 -0
  625. package/dist/plugin-sdk/channels/plugins/normalize/imessage.d.ts +2 -0
  626. package/dist/plugin-sdk/channels/plugins/normalize/shared.d.ts +6 -0
  627. package/dist/plugin-sdk/channels/plugins/normalize/signal.d.ts +2 -0
  628. package/dist/plugin-sdk/channels/plugins/normalize/slack.d.ts +2 -0
  629. package/dist/plugin-sdk/channels/plugins/normalize/telegram.d.ts +2 -0
  630. package/dist/plugin-sdk/channels/plugins/normalize/whatsapp.d.ts +3 -0
  631. package/dist/plugin-sdk/channels/plugins/onboarding/channel-access-configure.d.ts +21 -0
  632. package/dist/plugin-sdk/channels/plugins/onboarding/channel-access.d.ts +31 -0
  633. package/dist/plugin-sdk/channels/plugins/onboarding/discord.d.ts +2 -0
  634. package/dist/plugin-sdk/channels/plugins/onboarding/helpers.d.ts +177 -0
  635. package/dist/plugin-sdk/channels/plugins/onboarding/imessage.d.ts +6 -0
  636. package/dist/plugin-sdk/channels/plugins/onboarding/signal.d.ts +7 -0
  637. package/dist/plugin-sdk/channels/plugins/onboarding/slack.d.ts +2 -0
  638. package/dist/plugin-sdk/channels/plugins/onboarding/telegram.d.ts +4 -0
  639. package/dist/plugin-sdk/channels/plugins/onboarding/whatsapp.d.ts +2 -0
  640. package/dist/plugin-sdk/channels/plugins/onboarding-types.d.ts +77 -0
  641. package/dist/plugin-sdk/channels/plugins/outbound/load.d.ts +2 -0
  642. package/dist/plugin-sdk/channels/plugins/pairing-message.d.ts +1 -0
  643. package/dist/plugin-sdk/channels/plugins/pairing.d.ts +16 -0
  644. package/dist/plugin-sdk/channels/plugins/registry-loader.d.ts +5 -0
  645. package/dist/plugin-sdk/channels/plugins/setup-helpers.d.ts +13 -0
  646. package/dist/plugin-sdk/channels/plugins/status-issues/bluebubbles.d.ts +2 -0
  647. package/dist/plugin-sdk/channels/plugins/status-issues/discord.d.ts +2 -0
  648. package/dist/plugin-sdk/channels/plugins/status-issues/shared.d.ts +29 -0
  649. package/dist/plugin-sdk/channels/plugins/status-issues/telegram.d.ts +2 -0
  650. package/dist/plugin-sdk/channels/plugins/status-issues/whatsapp.d.ts +2 -0
  651. package/dist/plugin-sdk/channels/plugins/types.adapters.d.ts +288 -0
  652. package/dist/plugin-sdk/channels/plugins/types.core.d.ts +349 -0
  653. package/dist/plugin-sdk/channels/plugins/types.d.ts +6 -0
  654. package/dist/plugin-sdk/channels/plugins/types.plugin.d.ts +54 -0
  655. package/dist/plugin-sdk/channels/plugins/whatsapp-heartbeat.d.ts +11 -0
  656. package/dist/plugin-sdk/channels/plugins/whatsapp-shared.d.ts +5 -0
  657. package/dist/plugin-sdk/channels/registry.d.ts +15 -0
  658. package/dist/plugin-sdk/channels/reply-prefix.d.ts +24 -0
  659. package/dist/plugin-sdk/channels/sender-label.d.ts +9 -0
  660. package/dist/plugin-sdk/channels/session.d.ts +18 -0
  661. package/dist/plugin-sdk/channels/status-reactions.d.ts +62 -0
  662. package/dist/plugin-sdk/channels/targets.d.ts +42 -0
  663. package/dist/plugin-sdk/channels/telegram/api.d.ts +5 -0
  664. package/dist/plugin-sdk/channels/typing-lifecycle.d.ts +12 -0
  665. package/dist/plugin-sdk/channels/typing.d.ts +13 -0
  666. package/dist/plugin-sdk/channels/web/index.d.ts +1 -0
  667. package/dist/plugin-sdk/cli/cli-name.d.ts +3 -0
  668. package/dist/plugin-sdk/cli/command-format.d.ts +1 -0
  669. package/dist/plugin-sdk/cli/deps.d.ts +18 -0
  670. package/dist/plugin-sdk/cli/outbound-send-deps.d.ts +4 -0
  671. package/dist/plugin-sdk/cli/outbound-send-mapping.d.ts +10 -0
  672. package/dist/plugin-sdk/cli/parse-bytes.d.ts +4 -0
  673. package/dist/plugin-sdk/cli/parse-duration.d.ts +4 -0
  674. package/dist/plugin-sdk/cli/profile-utils.d.ts +2 -0
  675. package/dist/plugin-sdk/cli/progress.d.ts +24 -0
  676. package/dist/plugin-sdk/cli/wait.d.ts +1 -0
  677. package/dist/plugin-sdk/commands/agent/delivery.d.ts +25 -0
  678. package/dist/plugin-sdk/commands/agent/run-context.d.ts +2 -0
  679. package/dist/plugin-sdk/commands/agent/session-store.d.ts +16 -0
  680. package/dist/plugin-sdk/commands/agent/session.d.ts +33 -0
  681. package/dist/plugin-sdk/commands/agent/types.d.ts +89 -0
  682. package/dist/plugin-sdk/commands/agent.d.ts +14 -0
  683. package/dist/plugin-sdk/commands/daemon-runtime.d.ts +8 -0
  684. package/dist/plugin-sdk/commands/health.d.ts +63 -0
  685. package/dist/plugin-sdk/commands/oauth-flow.d.ts +21 -0
  686. package/dist/plugin-sdk/commands/onboard-helpers.d.ts +81 -0
  687. package/dist/plugin-sdk/commands/onboard-types.d.ts +69 -0
  688. package/dist/plugin-sdk/commands/signal-install.d.ts +30 -0
  689. package/dist/plugin-sdk/compat/legacy-names.d.ts +8 -0
  690. package/dist/plugin-sdk/config/agent-dirs.d.ts +14 -0
  691. package/dist/plugin-sdk/config/agent-limits.d.ts +6 -0
  692. package/dist/plugin-sdk/config/backup-rotation.d.ts +5 -0
  693. package/dist/plugin-sdk/config/cache-utils.d.ts +6 -0
  694. package/dist/plugin-sdk/config/commands.d.ts +20 -0
  695. package/dist/plugin-sdk/config/config-paths.d.ts +10 -0
  696. package/dist/plugin-sdk/config/config.d.ts +7 -0
  697. package/dist/plugin-sdk/config/dangerous-name-matching.d.ts +12 -0
  698. package/dist/plugin-sdk/config/defaults.d.ts +19 -0
  699. package/dist/plugin-sdk/config/discord-preview-streaming.d.ts +25 -0
  700. package/dist/plugin-sdk/config/env-preserve.d.ts +10 -0
  701. package/dist/plugin-sdk/config/env-substitution.d.ts +36 -0
  702. package/dist/plugin-sdk/config/env-vars.d.ts +6 -0
  703. package/dist/plugin-sdk/config/group-policy.d.ts +49 -0
  704. package/dist/plugin-sdk/config/includes.d.ts +32 -0
  705. package/dist/plugin-sdk/config/io.d.ts +60 -0
  706. package/dist/plugin-sdk/config/legacy-migrate.d.ts +5 -0
  707. package/dist/plugin-sdk/config/legacy.d.ts +6 -0
  708. package/dist/plugin-sdk/config/legacy.migrations.d.ts +1 -0
  709. package/dist/plugin-sdk/config/legacy.migrations.part-1.d.ts +2 -0
  710. package/dist/plugin-sdk/config/legacy.migrations.part-2.d.ts +2 -0
  711. package/dist/plugin-sdk/config/legacy.migrations.part-3.d.ts +2 -0
  712. package/dist/plugin-sdk/config/legacy.rules.d.ts +2 -0
  713. package/dist/plugin-sdk/config/legacy.shared.d.ts +19 -0
  714. package/dist/plugin-sdk/config/markdown-tables.d.ts +7 -0
  715. package/dist/plugin-sdk/config/merge-config.d.ts +7 -0
  716. package/dist/plugin-sdk/config/merge-patch.d.ts +5 -0
  717. package/dist/plugin-sdk/config/model-input.d.ts +9 -0
  718. package/dist/plugin-sdk/config/normalize-paths.d.ts +8 -0
  719. package/dist/plugin-sdk/config/paths.d.ts +57 -0
  720. package/dist/plugin-sdk/config/prototype-keys.d.ts +1 -0
  721. package/dist/plugin-sdk/config/runtime-group-policy.d.ts +56 -0
  722. package/dist/plugin-sdk/config/runtime-overrides.d.ts +15 -0
  723. package/dist/plugin-sdk/config/sessions/artifacts.d.ts +5 -0
  724. package/dist/plugin-sdk/config/sessions/constants.d.ts +2 -0
  725. package/dist/plugin-sdk/config/sessions/delivery-info.d.ts +16 -0
  726. package/dist/plugin-sdk/config/sessions/disk-budget.d.ts +28 -0
  727. package/dist/plugin-sdk/config/sessions/group.d.ts +11 -0
  728. package/dist/plugin-sdk/config/sessions/main-session.d.ts +43 -0
  729. package/dist/plugin-sdk/config/sessions/metadata.d.ts +16 -0
  730. package/dist/plugin-sdk/config/sessions/paths.d.ts +21 -0
  731. package/dist/plugin-sdk/config/sessions/reset.d.ts +43 -0
  732. package/dist/plugin-sdk/config/sessions/session-file.d.ts +15 -0
  733. package/dist/plugin-sdk/config/sessions/session-key.d.ts +8 -0
  734. package/dist/plugin-sdk/config/sessions/store.d.ts +123 -0
  735. package/dist/plugin-sdk/config/sessions/transcript.d.ts +18 -0
  736. package/dist/plugin-sdk/config/sessions/types.d.ts +160 -0
  737. package/dist/plugin-sdk/config/sessions.d.ts +13 -0
  738. package/dist/plugin-sdk/config/talk.d.ts +21 -0
  739. package/dist/plugin-sdk/config/telegram-custom-commands.d.ts +24 -0
  740. package/dist/plugin-sdk/config/types.agent-defaults.d.ts +268 -0
  741. package/dist/plugin-sdk/config/types.agents-shared.d.ts +49 -0
  742. package/dist/plugin-sdk/config/types.agents.d.ts +57 -0
  743. package/dist/plugin-sdk/config/types.approvals.d.ts +26 -0
  744. package/dist/plugin-sdk/config/types.auth.d.ts +28 -0
  745. package/dist/plugin-sdk/config/types.base.d.ts +203 -0
  746. package/dist/plugin-sdk/config/types.browser.d.ts +65 -0
  747. package/dist/plugin-sdk/config/types.channel-messaging-common.d.ts +44 -0
  748. package/dist/plugin-sdk/config/types.channels.d.ts +53 -0
  749. package/dist/plugin-sdk/config/types.cron.d.ts +26 -0
  750. package/dist/plugin-sdk/config/types.d.ts +27 -0
  751. package/dist/plugin-sdk/config/types.discord.d.ts +273 -0
  752. package/dist/plugin-sdk/config/types.gateway.d.ts +335 -0
  753. package/dist/plugin-sdk/config/types.googlechat.d.ts +107 -0
  754. package/dist/plugin-sdk/config/types.hooks.d.ts +123 -0
  755. package/dist/plugin-sdk/config/types.imessage.d.ts +77 -0
  756. package/dist/plugin-sdk/config/types.installs.d.ts +14 -0
  757. package/dist/plugin-sdk/config/types.irc.d.ts +54 -0
  758. package/dist/plugin-sdk/config/types.messages.d.ts +154 -0
  759. package/dist/plugin-sdk/config/types.models.d.ts +41 -0
  760. package/dist/plugin-sdk/config/types.msteams.d.ts +108 -0
  761. package/dist/plugin-sdk/config/types.node-host.d.ts +10 -0
  762. package/dist/plugin-sdk/config/types.plugins.d.ts +23 -0
  763. package/dist/plugin-sdk/config/types.queue.d.ts +14 -0
  764. package/dist/plugin-sdk/config/types.remoteclaw.d.ts +119 -0
  765. package/dist/plugin-sdk/config/types.signal.d.ts +46 -0
  766. package/dist/plugin-sdk/config/types.slack.d.ts +181 -0
  767. package/dist/plugin-sdk/config/types.telegram.d.ts +191 -0
  768. package/dist/plugin-sdk/config/types.tools.d.ts +322 -0
  769. package/dist/plugin-sdk/config/types.tts.d.ts +78 -0
  770. package/dist/plugin-sdk/config/types.whatsapp.d.ts +101 -0
  771. package/dist/plugin-sdk/config/validation.d.ts +37 -0
  772. package/dist/plugin-sdk/config/version.d.ts +8 -0
  773. package/dist/plugin-sdk/config/zod-schema.agent-defaults.d.ts +156 -0
  774. package/dist/plugin-sdk/config/zod-schema.agent-model.d.ts +5 -0
  775. package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +500 -0
  776. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +298 -0
  777. package/dist/plugin-sdk/config/zod-schema.allowdeny.d.ts +13 -0
  778. package/dist/plugin-sdk/config/zod-schema.approvals.d.ts +15 -0
  779. package/dist/plugin-sdk/config/zod-schema.channels.d.ts +6 -0
  780. package/dist/plugin-sdk/config/zod-schema.core.d.ts +583 -0
  781. package/dist/plugin-sdk/config/zod-schema.d.ts +3434 -0
  782. package/dist/plugin-sdk/config/zod-schema.hooks.d.ts +85 -0
  783. package/dist/plugin-sdk/config/zod-schema.installs.d.ts +16 -0
  784. package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +3693 -0
  785. package/dist/plugin-sdk/config/zod-schema.providers-whatsapp.d.ts +235 -0
  786. package/dist/plugin-sdk/config/zod-schema.providers.d.ts +2200 -0
  787. package/dist/plugin-sdk/config/zod-schema.sensitive.d.ts +2 -0
  788. package/dist/plugin-sdk/config/zod-schema.session.d.ts +234 -0
  789. package/dist/plugin-sdk/cron/delivery.d.ts +9 -0
  790. package/dist/plugin-sdk/cron/legacy-delivery.d.ts +3 -0
  791. package/dist/plugin-sdk/cron/parse.d.ts +1 -0
  792. package/dist/plugin-sdk/cron/payload-migration.d.ts +3 -0
  793. package/dist/plugin-sdk/cron/schedule.d.ts +2 -0
  794. package/dist/plugin-sdk/cron/service/jobs.d.ts +21 -0
  795. package/dist/plugin-sdk/cron/service/locked.d.ts +2 -0
  796. package/dist/plugin-sdk/cron/service/normalize.d.ts +18 -0
  797. package/dist/plugin-sdk/cron/service/ops.d.ts +81 -0
  798. package/dist/plugin-sdk/cron/service/state.d.ts +125 -0
  799. package/dist/plugin-sdk/cron/service/store.d.ts +9 -0
  800. package/dist/plugin-sdk/cron/service/timer.d.ts +47 -0
  801. package/dist/plugin-sdk/cron/service.d.ts +66 -0
  802. package/dist/plugin-sdk/cron/session-reaper.d.ts +35 -0
  803. package/dist/plugin-sdk/cron/stagger.d.ts +8 -0
  804. package/dist/plugin-sdk/cron/store.d.ts +6 -0
  805. package/dist/plugin-sdk/cron/types.d.ts +131 -0
  806. package/dist/plugin-sdk/cron/webhook-url.d.ts +1 -0
  807. package/dist/plugin-sdk/daemon/constants.d.ts +35 -0
  808. package/dist/plugin-sdk/discord/accounts.d.ts +21 -0
  809. package/dist/plugin-sdk/discord/api.d.ts +11 -0
  810. package/dist/plugin-sdk/discord/audit.d.ts +29 -0
  811. package/dist/plugin-sdk/discord/chunk.d.ts +20 -0
  812. package/dist/plugin-sdk/discord/client.d.ts +21 -0
  813. package/dist/plugin-sdk/discord/components-registry.d.ts +16 -0
  814. package/dist/plugin-sdk/discord/components.d.ts +196 -0
  815. package/dist/plugin-sdk/discord/directory-live.d.ts +4 -0
  816. package/dist/plugin-sdk/discord/draft-chunking.d.ts +6 -0
  817. package/dist/plugin-sdk/discord/draft-stream.d.ts +21 -0
  818. package/dist/plugin-sdk/discord/gateway-logging.d.ts +8 -0
  819. package/dist/plugin-sdk/discord/guilds.d.ts +6 -0
  820. package/dist/plugin-sdk/discord/monitor/agent-components.d.ts +55 -0
  821. package/dist/plugin-sdk/discord/monitor/allow-list.d.ts +176 -0
  822. package/dist/plugin-sdk/discord/monitor/commands.d.ts +2 -0
  823. package/dist/plugin-sdk/discord/monitor/format.d.ts +13 -0
  824. package/dist/plugin-sdk/discord/monitor/gateway-plugin.d.ts +8 -0
  825. package/dist/plugin-sdk/discord/monitor/gateway-registry.d.ts +9 -0
  826. package/dist/plugin-sdk/discord/monitor/listeners.d.ts +44 -0
  827. package/dist/plugin-sdk/discord/monitor/message-handler.d.ts +5 -0
  828. package/dist/plugin-sdk/discord/monitor/message-handler.preflight.d.ts +14 -0
  829. package/dist/plugin-sdk/discord/monitor/message-handler.preflight.types.d.ts +95 -0
  830. package/dist/plugin-sdk/discord/monitor/message-handler.process.d.ts +2 -0
  831. package/dist/plugin-sdk/discord/monitor/message-utils.d.ts +40 -0
  832. package/dist/plugin-sdk/discord/monitor/native-command.d.ts +23 -0
  833. package/dist/plugin-sdk/discord/monitor/presence-cache.d.ts +9 -0
  834. package/dist/plugin-sdk/discord/monitor/presence.d.ts +5 -0
  835. package/dist/plugin-sdk/discord/monitor/provider.allowlist.d.ts +14 -0
  836. package/dist/plugin-sdk/discord/monitor/provider.d.ts +28 -0
  837. package/dist/plugin-sdk/discord/monitor/provider.lifecycle.d.ts +23 -0
  838. package/dist/plugin-sdk/discord/monitor/reply-context.d.ts +17 -0
  839. package/dist/plugin-sdk/discord/monitor/reply-delivery.d.ts +22 -0
  840. package/dist/plugin-sdk/discord/monitor/rest-fetch.d.ts +2 -0
  841. package/dist/plugin-sdk/discord/monitor/sender-identity.d.ts +31 -0
  842. package/dist/plugin-sdk/discord/monitor/system-events.d.ts +2 -0
  843. package/dist/plugin-sdk/discord/monitor/thread-bindings.d.ts +5 -0
  844. package/dist/plugin-sdk/discord/monitor/thread-bindings.discord-api.d.ts +36 -0
  845. package/dist/plugin-sdk/discord/monitor/thread-bindings.lifecycle.d.ts +30 -0
  846. package/dist/plugin-sdk/discord/monitor/thread-bindings.manager.d.ts +17 -0
  847. package/dist/plugin-sdk/discord/monitor/thread-bindings.messages.d.ts +17 -0
  848. package/dist/plugin-sdk/discord/monitor/thread-bindings.state.d.ts +61 -0
  849. package/dist/plugin-sdk/discord/monitor/thread-bindings.types.d.ts +64 -0
  850. package/dist/plugin-sdk/discord/monitor/threading.d.ts +106 -0
  851. package/dist/plugin-sdk/discord/monitor/typing.d.ts +5 -0
  852. package/dist/plugin-sdk/discord/monitor.d.ts +10 -0
  853. package/dist/plugin-sdk/discord/monitor.gateway.d.ts +12 -0
  854. package/dist/plugin-sdk/discord/pluralkit.d.ts +26 -0
  855. package/dist/plugin-sdk/discord/probe.d.ts +28 -0
  856. package/dist/plugin-sdk/discord/resolve-channels.d.ts +15 -0
  857. package/dist/plugin-sdk/discord/resolve-users.d.ts +14 -0
  858. package/dist/plugin-sdk/discord/send.channels.d.ts +17 -0
  859. package/dist/plugin-sdk/discord/send.components.d.ts +17 -0
  860. package/dist/plugin-sdk/discord/send.d.ts +10 -0
  861. package/dist/plugin-sdk/discord/send.emojis-stickers.d.ts +4 -0
  862. package/dist/plugin-sdk/discord/send.guild.d.ts +24 -0
  863. package/dist/plugin-sdk/discord/send.messages.d.ts +20 -0
  864. package/dist/plugin-sdk/discord/send.outbound.d.ts +57 -0
  865. package/dist/plugin-sdk/discord/send.permissions.d.ts +20 -0
  866. package/dist/plugin-sdk/discord/send.reactions.d.ts +15 -0
  867. package/dist/plugin-sdk/discord/send.shared.d.ts +85 -0
  868. package/dist/plugin-sdk/discord/send.types.d.ts +144 -0
  869. package/dist/plugin-sdk/discord/targets.d.ts +18 -0
  870. package/dist/plugin-sdk/discord/token.d.ts +11 -0
  871. package/dist/plugin-sdk/discord/voice/command.d.ts +15 -0
  872. package/dist/plugin-sdk/discord/voice/manager.d.ts +52 -0
  873. package/dist/plugin-sdk/discord/voice-message.d.ts +50 -0
  874. package/dist/plugin-sdk/gateway/call.d.ts +65 -0
  875. package/dist/plugin-sdk/gateway/chat-abort.d.ts +44 -0
  876. package/dist/plugin-sdk/gateway/chat-sanitize.d.ts +4 -0
  877. package/dist/plugin-sdk/gateway/client.d.ts +64 -0
  878. package/dist/plugin-sdk/gateway/control-ui-shared.d.ts +9 -0
  879. package/dist/plugin-sdk/gateway/credentials.d.ts +36 -0
  880. package/dist/plugin-sdk/gateway/device-auth.d.ts +11 -0
  881. package/dist/plugin-sdk/gateway/method-scopes.d.ts +22 -0
  882. package/dist/plugin-sdk/gateway/net.d.ts +77 -0
  883. package/dist/plugin-sdk/gateway/node-registry.d.ts +60 -0
  884. package/dist/plugin-sdk/gateway/protocol/client-info.d.ts +58 -0
  885. package/dist/plugin-sdk/gateway/protocol/index.d.ts +497 -0
  886. package/dist/plugin-sdk/gateway/protocol/schema/agent.d.ts +89 -0
  887. package/dist/plugin-sdk/gateway/protocol/schema/agents-models-skills.d.ts +188 -0
  888. package/dist/plugin-sdk/gateway/protocol/schema/channels.d.ts +134 -0
  889. package/dist/plugin-sdk/gateway/protocol/schema/config.d.ts +53 -0
  890. package/dist/plugin-sdk/gateway/protocol/schema/cron.d.ts +324 -0
  891. package/dist/plugin-sdk/gateway/protocol/schema/devices.d.ts +41 -0
  892. package/dist/plugin-sdk/gateway/protocol/schema/error-codes.d.ts +14 -0
  893. package/dist/plugin-sdk/gateway/protocol/schema/frames.d.ts +168 -0
  894. package/dist/plugin-sdk/gateway/protocol/schema/logs-chat.d.ts +45 -0
  895. package/dist/plugin-sdk/gateway/protocol/schema/nodes.d.ts +64 -0
  896. package/dist/plugin-sdk/gateway/protocol/schema/primitives.d.ts +4 -0
  897. package/dist/plugin-sdk/gateway/protocol/schema/protocol-schemas.d.ts +3 -0
  898. package/dist/plugin-sdk/gateway/protocol/schema/push.d.ts +15 -0
  899. package/dist/plugin-sdk/gateway/protocol/schema/sessions.d.ts +81 -0
  900. package/dist/plugin-sdk/gateway/protocol/schema/snapshot.d.ts +69 -0
  901. package/dist/plugin-sdk/gateway/protocol/schema/types.d.ts +120 -0
  902. package/dist/plugin-sdk/gateway/protocol/schema/wizard.d.ts +86 -0
  903. package/dist/plugin-sdk/gateway/protocol/schema.d.ts +16 -0
  904. package/dist/plugin-sdk/gateway/server/ws-types.d.ts +9 -0
  905. package/dist/plugin-sdk/gateway/server-broadcast.d.ts +17 -0
  906. package/dist/plugin-sdk/gateway/server-channels.d.ts +26 -0
  907. package/dist/plugin-sdk/gateway/server-constants.d.ts +10 -0
  908. package/dist/plugin-sdk/gateway/server-methods/types.d.ts +84 -0
  909. package/dist/plugin-sdk/gateway/server-shared.d.ts +7 -0
  910. package/dist/plugin-sdk/gateway/session-utils.fs.d.ts +48 -0
  911. package/dist/plugin-sdk/gateway/session-utils.types.d.ts +84 -0
  912. package/dist/plugin-sdk/gateway/ws-log.d.ts +5 -0
  913. package/dist/plugin-sdk/gateway/ws-logging.d.ts +4 -0
  914. package/dist/plugin-sdk/globals.d.ts +11 -0
  915. package/dist/plugin-sdk/hooks/internal-hooks.d.ts +140 -0
  916. package/dist/plugin-sdk/hooks/types.d.ts +62 -0
  917. package/dist/plugin-sdk/imessage/accounts.d.ts +16 -0
  918. package/dist/plugin-sdk/imessage/client.d.ts +46 -0
  919. package/dist/plugin-sdk/imessage/constants.d.ts +2 -0
  920. package/dist/plugin-sdk/imessage/monitor/abort-handler.d.ts +9 -0
  921. package/dist/plugin-sdk/imessage/monitor/deliver.d.ts +14 -0
  922. package/dist/plugin-sdk/imessage/monitor/echo-cache.d.ts +9 -0
  923. package/dist/plugin-sdk/imessage/monitor/inbound-processing.d.ts +96 -0
  924. package/dist/plugin-sdk/imessage/monitor/monitor-provider.d.ts +7 -0
  925. package/dist/plugin-sdk/imessage/monitor/parse-notification.d.ts +2 -0
  926. package/dist/plugin-sdk/imessage/monitor/runtime.d.ts +4 -0
  927. package/dist/plugin-sdk/imessage/monitor/types.d.ts +37 -0
  928. package/dist/plugin-sdk/imessage/monitor.d.ts +2 -0
  929. package/dist/plugin-sdk/imessage/probe.d.ts +17 -0
  930. package/dist/plugin-sdk/imessage/send.d.ts +34 -0
  931. package/dist/plugin-sdk/imessage/target-parsing-helpers.d.ts +45 -0
  932. package/dist/plugin-sdk/imessage/targets.d.ts +39 -0
  933. package/dist/plugin-sdk/index.d.ts +1 -0
  934. package/dist/plugin-sdk/index.js +24645 -0
  935. package/dist/plugin-sdk/infra/agent-events.d.ts +21 -0
  936. package/dist/plugin-sdk/infra/archive-path.d.ts +12 -0
  937. package/dist/plugin-sdk/infra/archive.d.ts +46 -0
  938. package/dist/plugin-sdk/infra/backoff.d.ts +8 -0
  939. package/dist/plugin-sdk/infra/brew.d.ts +8 -0
  940. package/dist/plugin-sdk/infra/channel-activity.d.ts +18 -0
  941. package/dist/plugin-sdk/infra/channel-summary.d.ts +6 -0
  942. package/dist/plugin-sdk/infra/dedupe.d.ts +12 -0
  943. package/dist/plugin-sdk/infra/device-auth-store.d.ts +18 -0
  944. package/dist/plugin-sdk/infra/device-identity.d.ts +11 -0
  945. package/dist/plugin-sdk/infra/device-pairing.d.ts +101 -0
  946. package/dist/plugin-sdk/infra/diagnostic-events.d.ts +140 -0
  947. package/dist/plugin-sdk/infra/diagnostic-flags.d.ts +4 -0
  948. package/dist/plugin-sdk/infra/dotenv.d.ts +3 -0
  949. package/dist/plugin-sdk/infra/env.d.ts +11 -0
  950. package/dist/plugin-sdk/infra/errors.d.ts +11 -0
  951. package/dist/plugin-sdk/infra/fetch.d.ts +2 -0
  952. package/dist/plugin-sdk/infra/file-identity.d.ts +5 -0
  953. package/dist/plugin-sdk/infra/file-lock.d.ts +2 -0
  954. package/dist/plugin-sdk/infra/format-time/format-datetime.d.ts +35 -0
  955. package/dist/plugin-sdk/infra/format-time/format-duration.d.ts +23 -0
  956. package/dist/plugin-sdk/infra/format-time/format-relative.d.ts +39 -0
  957. package/dist/plugin-sdk/infra/fs-safe.d.ts +25 -0
  958. package/dist/plugin-sdk/infra/gemini-auth.d.ts +16 -0
  959. package/dist/plugin-sdk/infra/git-commit.d.ts +4 -0
  960. package/dist/plugin-sdk/infra/git-root.d.ts +7 -0
  961. package/dist/plugin-sdk/infra/heartbeat-active-hours.d.ts +5 -0
  962. package/dist/plugin-sdk/infra/heartbeat-events-filter.d.ts +8 -0
  963. package/dist/plugin-sdk/infra/heartbeat-events.d.ts +21 -0
  964. package/dist/plugin-sdk/infra/heartbeat-reason.d.ts +5 -0
  965. package/dist/plugin-sdk/infra/heartbeat-runner.d.ts +45 -0
  966. package/dist/plugin-sdk/infra/heartbeat-visibility.d.ts +17 -0
  967. package/dist/plugin-sdk/infra/heartbeat-wake.d.ts +31 -0
  968. package/dist/plugin-sdk/infra/home-dir.d.ts +7 -0
  969. package/dist/plugin-sdk/infra/host-env-security.d.ts +21 -0
  970. package/dist/plugin-sdk/infra/http-body.d.ts +46 -0
  971. package/dist/plugin-sdk/infra/json-file.d.ts +2 -0
  972. package/dist/plugin-sdk/infra/json-files.d.ts +5 -0
  973. package/dist/plugin-sdk/infra/map-size.d.ts +1 -0
  974. package/dist/plugin-sdk/infra/net/fetch-guard.d.ts +21 -0
  975. package/dist/plugin-sdk/infra/net/hostname.d.ts +1 -0
  976. package/dist/plugin-sdk/infra/net/ssrf.d.ts +35 -0
  977. package/dist/plugin-sdk/infra/outbound/abort.d.ts +8 -0
  978. package/dist/plugin-sdk/infra/outbound/agent-delivery.d.ts +46 -0
  979. package/dist/plugin-sdk/infra/outbound/bound-delivery-router.d.ts +16 -0
  980. package/dist/plugin-sdk/infra/outbound/channel-selection.d.ts +11 -0
  981. package/dist/plugin-sdk/infra/outbound/channel-target.d.ts +6 -0
  982. package/dist/plugin-sdk/infra/outbound/deliver.d.ts +81 -0
  983. package/dist/plugin-sdk/infra/outbound/delivery-queue.d.ts +78 -0
  984. package/dist/plugin-sdk/infra/outbound/directory-cache.d.ts +24 -0
  985. package/dist/plugin-sdk/infra/outbound/envelope.d.ts +16 -0
  986. package/dist/plugin-sdk/infra/outbound/format.d.ts +39 -0
  987. package/dist/plugin-sdk/infra/outbound/identity.d.ts +8 -0
  988. package/dist/plugin-sdk/infra/outbound/message-action-spec.d.ts +5 -0
  989. package/dist/plugin-sdk/infra/outbound/payloads.d.ts +18 -0
  990. package/dist/plugin-sdk/infra/outbound/session-binding-service.d.ts +57 -0
  991. package/dist/plugin-sdk/infra/outbound/target-errors.d.ts +6 -0
  992. package/dist/plugin-sdk/infra/outbound/target-normalization.d.ts +4 -0
  993. package/dist/plugin-sdk/infra/outbound/target-resolver.d.ts +53 -0
  994. package/dist/plugin-sdk/infra/outbound/targets.d.ts +87 -0
  995. package/dist/plugin-sdk/infra/pairing-files.d.ts +23 -0
  996. package/dist/plugin-sdk/infra/pairing-pending.d.ts +13 -0
  997. package/dist/plugin-sdk/infra/pairing-token.d.ts +3 -0
  998. package/dist/plugin-sdk/infra/path-guards.d.ts +5 -0
  999. package/dist/plugin-sdk/infra/path-safety.d.ts +2 -0
  1000. package/dist/plugin-sdk/infra/plain-object.d.ts +4 -0
  1001. package/dist/plugin-sdk/infra/prototype-keys.d.ts +1 -0
  1002. package/dist/plugin-sdk/infra/provider-usage.auth.d.ts +11 -0
  1003. package/dist/plugin-sdk/infra/provider-usage.d.ts +4 -0
  1004. package/dist/plugin-sdk/infra/provider-usage.fetch.claude.d.ts +2 -0
  1005. package/dist/plugin-sdk/infra/provider-usage.fetch.codex.d.ts +2 -0
  1006. package/dist/plugin-sdk/infra/provider-usage.fetch.copilot.d.ts +2 -0
  1007. package/dist/plugin-sdk/infra/provider-usage.fetch.d.ts +6 -0
  1008. package/dist/plugin-sdk/infra/provider-usage.fetch.gemini.d.ts +2 -0
  1009. package/dist/plugin-sdk/infra/provider-usage.fetch.minimax.d.ts +2 -0
  1010. package/dist/plugin-sdk/infra/provider-usage.fetch.shared.d.ts +12 -0
  1011. package/dist/plugin-sdk/infra/provider-usage.fetch.zai.d.ts +2 -0
  1012. package/dist/plugin-sdk/infra/provider-usage.format.d.ts +13 -0
  1013. package/dist/plugin-sdk/infra/provider-usage.load.d.ts +12 -0
  1014. package/dist/plugin-sdk/infra/provider-usage.shared.d.ts +8 -0
  1015. package/dist/plugin-sdk/infra/provider-usage.types.d.ts +17 -0
  1016. package/dist/plugin-sdk/infra/restart.d.ts +70 -0
  1017. package/dist/plugin-sdk/infra/retry-policy.d.ts +25 -0
  1018. package/dist/plugin-sdk/infra/retry.d.ts +21 -0
  1019. package/dist/plugin-sdk/infra/safe-executable-value.d.ts +1 -0
  1020. package/dist/plugin-sdk/infra/scp-host.d.ts +2 -0
  1021. package/dist/plugin-sdk/infra/secure-random.d.ts +2 -0
  1022. package/dist/plugin-sdk/infra/session-cost-usage.d.ts +45 -0
  1023. package/dist/plugin-sdk/infra/session-cost-usage.types.d.ts +153 -0
  1024. package/dist/plugin-sdk/infra/session-maintenance-warning.d.ts +10 -0
  1025. package/dist/plugin-sdk/infra/shell-env.d.ts +34 -0
  1026. package/dist/plugin-sdk/infra/system-events.d.ts +18 -0
  1027. package/dist/plugin-sdk/infra/tailnet.d.ts +8 -0
  1028. package/dist/plugin-sdk/infra/tls/fingerprint.d.ts +1 -0
  1029. package/dist/plugin-sdk/infra/tls/gateway.d.ts +16 -0
  1030. package/dist/plugin-sdk/infra/tmp-remoteclaw-dir.d.ts +18 -0
  1031. package/dist/plugin-sdk/infra/transport-ready.d.ts +16 -0
  1032. package/dist/plugin-sdk/infra/unhandled-rejections.d.ts +15 -0
  1033. package/dist/plugin-sdk/infra/ws.d.ts +2 -0
  1034. package/dist/plugin-sdk/infra/wsl.d.ts +11 -0
  1035. package/dist/plugin-sdk/line/accounts.d.ts +10 -0
  1036. package/dist/plugin-sdk/line/actions.d.ts +22 -0
  1037. package/dist/plugin-sdk/line/auto-reply-delivery.d.ts +38 -0
  1038. package/dist/plugin-sdk/line/bot-access.d.ts +17 -0
  1039. package/dist/plugin-sdk/line/bot-handlers.d.ts +13 -0
  1040. package/dist/plugin-sdk/line/bot-message-context.d.ts +118 -0
  1041. package/dist/plugin-sdk/line/bot.d.ts +24 -0
  1042. package/dist/plugin-sdk/line/channel-access-token.d.ts +4 -0
  1043. package/dist/plugin-sdk/line/config-schema.d.ts +64 -0
  1044. package/dist/plugin-sdk/line/download.d.ts +7 -0
  1045. package/dist/plugin-sdk/line/flex-templates/basic-cards.d.ts +46 -0
  1046. package/dist/plugin-sdk/line/flex-templates/common.d.ts +2 -0
  1047. package/dist/plugin-sdk/line/flex-templates/media-control-cards.d.ts +73 -0
  1048. package/dist/plugin-sdk/line/flex-templates/message.d.ts +6 -0
  1049. package/dist/plugin-sdk/line/flex-templates/schedule-cards.d.ts +55 -0
  1050. package/dist/plugin-sdk/line/flex-templates/types.d.ts +19 -0
  1051. package/dist/plugin-sdk/line/flex-templates.d.ts +5 -0
  1052. package/dist/plugin-sdk/line/markdown-to-line.d.ts +72 -0
  1053. package/dist/plugin-sdk/line/monitor.d.ts +28 -0
  1054. package/dist/plugin-sdk/line/probe.d.ts +2 -0
  1055. package/dist/plugin-sdk/line/reply-chunks.d.ts +24 -0
  1056. package/dist/plugin-sdk/line/send.d.ts +91 -0
  1057. package/dist/plugin-sdk/line/signature.d.ts +1 -0
  1058. package/dist/plugin-sdk/line/template-messages.d.ts +100 -0
  1059. package/dist/plugin-sdk/line/types.d.ts +113 -0
  1060. package/dist/plugin-sdk/line/webhook-node.d.ts +15 -0
  1061. package/dist/plugin-sdk/line/webhook-utils.d.ts +3 -0
  1062. package/dist/plugin-sdk/line/webhook.d.ts +19 -0
  1063. package/dist/plugin-sdk/link-understanding/apply.d.ts +10 -0
  1064. package/dist/plugin-sdk/link-understanding/defaults.d.ts +2 -0
  1065. package/dist/plugin-sdk/link-understanding/detect.d.ts +3 -0
  1066. package/dist/plugin-sdk/link-understanding/format.d.ts +4 -0
  1067. package/dist/plugin-sdk/link-understanding/runner.d.ts +11 -0
  1068. package/dist/plugin-sdk/logger.d.ts +6 -0
  1069. package/dist/plugin-sdk/logging/config.d.ts +4 -0
  1070. package/dist/plugin-sdk/logging/console.d.ts +23 -0
  1071. package/dist/plugin-sdk/logging/diagnostic-session-state.d.ts +30 -0
  1072. package/dist/plugin-sdk/logging/diagnostic.d.ts +65 -0
  1073. package/dist/plugin-sdk/logging/env-log-level.d.ts +2 -0
  1074. package/dist/plugin-sdk/logging/levels.d.ts +5 -0
  1075. package/dist/plugin-sdk/logging/logger.d.ts +44 -0
  1076. package/dist/plugin-sdk/logging/node-require.d.ts +1 -0
  1077. package/dist/plugin-sdk/logging/redact-identifier.d.ts +4 -0
  1078. package/dist/plugin-sdk/logging/redact.d.ts +9 -0
  1079. package/dist/plugin-sdk/logging/state.d.ts +19 -0
  1080. package/dist/plugin-sdk/logging/subsystem.d.ts +18 -0
  1081. package/dist/plugin-sdk/logging/timestamps.d.ts +1 -0
  1082. package/dist/plugin-sdk/logging.d.ts +10 -0
  1083. package/dist/plugin-sdk/markdown/fences.d.ts +10 -0
  1084. package/dist/plugin-sdk/markdown/ir.d.ts +32 -0
  1085. package/dist/plugin-sdk/markdown/render.d.ts +18 -0
  1086. package/dist/plugin-sdk/markdown/tables.d.ts +2 -0
  1087. package/dist/plugin-sdk/markdown/whatsapp.d.ts +14 -0
  1088. package/dist/plugin-sdk/media/audio-tags.d.ts +10 -0
  1089. package/dist/plugin-sdk/media/audio.d.ts +19 -0
  1090. package/dist/plugin-sdk/media/base64.d.ts +6 -0
  1091. package/dist/plugin-sdk/media/constants.d.ts +7 -0
  1092. package/dist/plugin-sdk/media/fetch.d.ts +23 -0
  1093. package/dist/plugin-sdk/media/image-ops.d.ts +41 -0
  1094. package/dist/plugin-sdk/media/inbound-path-policy.d.ts +18 -0
  1095. package/dist/plugin-sdk/media/input-files.d.ts +95 -0
  1096. package/dist/plugin-sdk/media/local-roots.d.ts +3 -0
  1097. package/dist/plugin-sdk/media/mime.d.ts +16 -0
  1098. package/dist/plugin-sdk/media/outbound-attachment.d.ts +6 -0
  1099. package/dist/plugin-sdk/media/parse.d.ts +8 -0
  1100. package/dist/plugin-sdk/media/png-encode.d.ts +8 -0
  1101. package/dist/plugin-sdk/media/read-response-with-limit.d.ts +7 -0
  1102. package/dist/plugin-sdk/media/store.d.ts +33 -0
  1103. package/dist/plugin-sdk/media-understanding/apply.d.ts +19 -0
  1104. package/dist/plugin-sdk/media-understanding/attachments.d.ts +49 -0
  1105. package/dist/plugin-sdk/media-understanding/audio-preflight.d.ts +16 -0
  1106. package/dist/plugin-sdk/media-understanding/concurrency.d.ts +1 -0
  1107. package/dist/plugin-sdk/media-understanding/defaults.d.ts +12 -0
  1108. package/dist/plugin-sdk/media-understanding/errors.d.ts +6 -0
  1109. package/dist/plugin-sdk/media-understanding/format.d.ts +7 -0
  1110. package/dist/plugin-sdk/media-understanding/fs.d.ts +1 -0
  1111. package/dist/plugin-sdk/media-understanding/output-extract.d.ts +2 -0
  1112. package/dist/plugin-sdk/media-understanding/providers/anthropic/index.d.ts +2 -0
  1113. package/dist/plugin-sdk/media-understanding/providers/deepgram/audio.d.ts +4 -0
  1114. package/dist/plugin-sdk/media-understanding/providers/deepgram/index.d.ts +2 -0
  1115. package/dist/plugin-sdk/media-understanding/providers/google/audio.d.ts +3 -0
  1116. package/dist/plugin-sdk/media-understanding/providers/google/index.d.ts +2 -0
  1117. package/dist/plugin-sdk/media-understanding/providers/google/inline-data.d.ts +20 -0
  1118. package/dist/plugin-sdk/media-understanding/providers/google/video.d.ts +3 -0
  1119. package/dist/plugin-sdk/media-understanding/providers/groq/index.d.ts +2 -0
  1120. package/dist/plugin-sdk/media-understanding/providers/index.d.ts +4 -0
  1121. package/dist/plugin-sdk/media-understanding/providers/minimax/index.d.ts +2 -0
  1122. package/dist/plugin-sdk/media-understanding/providers/mistral/index.d.ts +2 -0
  1123. package/dist/plugin-sdk/media-understanding/providers/moonshot/index.d.ts +2 -0
  1124. package/dist/plugin-sdk/media-understanding/providers/moonshot/video.d.ts +3 -0
  1125. package/dist/plugin-sdk/media-understanding/providers/openai/audio.d.ts +3 -0
  1126. package/dist/plugin-sdk/media-understanding/providers/openai/index.d.ts +2 -0
  1127. package/dist/plugin-sdk/media-understanding/providers/shared.d.ts +20 -0
  1128. package/dist/plugin-sdk/media-understanding/providers/zai/index.d.ts +2 -0
  1129. package/dist/plugin-sdk/media-understanding/resolve.d.ts +44 -0
  1130. package/dist/plugin-sdk/media-understanding/runner.d.ts +34 -0
  1131. package/dist/plugin-sdk/media-understanding/runner.entries.d.ts +33 -0
  1132. package/dist/plugin-sdk/media-understanding/scope.d.ts +9 -0
  1133. package/dist/plugin-sdk/media-understanding/types.d.ts +74 -0
  1134. package/dist/plugin-sdk/media-understanding/video.d.ts +2 -0
  1135. package/dist/plugin-sdk/middleware/channel-bridge.d.ts +39 -0
  1136. package/dist/plugin-sdk/middleware/cli-runtime-base.d.ts +35 -0
  1137. package/dist/plugin-sdk/middleware/delivery-adapter.d.ts +36 -0
  1138. package/dist/plugin-sdk/middleware/error-classifier.d.ts +14 -0
  1139. package/dist/plugin-sdk/middleware/mcp-side-effects.d.ts +20 -0
  1140. package/dist/plugin-sdk/middleware/runtime-factory.d.ts +4 -0
  1141. package/dist/plugin-sdk/middleware/runtimes/claude.d.ts +27 -0
  1142. package/dist/plugin-sdk/middleware/runtimes/codex.d.ts +74 -0
  1143. package/dist/plugin-sdk/middleware/runtimes/gemini.d.ts +52 -0
  1144. package/dist/plugin-sdk/middleware/runtimes/opencode.d.ts +54 -0
  1145. package/dist/plugin-sdk/middleware/session-map.d.ts +36 -0
  1146. package/dist/plugin-sdk/middleware/system-prompt.d.ts +30 -0
  1147. package/dist/plugin-sdk/middleware/types.d.ts +188 -0
  1148. package/dist/plugin-sdk/pairing/pairing-labels.d.ts +2 -0
  1149. package/dist/plugin-sdk/pairing/pairing-messages.d.ts +6 -0
  1150. package/dist/plugin-sdk/pairing/pairing-store.d.ts +48 -0
  1151. package/dist/plugin-sdk/plugin-sdk/account-id.d.ts +1 -0
  1152. package/dist/plugin-sdk/plugin-sdk/agent-media-payload.d.ts +12 -0
  1153. package/dist/plugin-sdk/plugin-sdk/allow-from.d.ts +32 -0
  1154. package/dist/plugin-sdk/plugin-sdk/command-auth.d.ts +25 -0
  1155. package/dist/plugin-sdk/plugin-sdk/config-paths.d.ts +6 -0
  1156. package/dist/plugin-sdk/plugin-sdk/file-lock.d.ts +16 -0
  1157. package/dist/plugin-sdk/plugin-sdk/group-access.d.ts +16 -0
  1158. package/dist/plugin-sdk/plugin-sdk/index.d.ts +162 -0
  1159. package/dist/plugin-sdk/plugin-sdk/json-store.d.ts +5 -0
  1160. package/dist/plugin-sdk/plugin-sdk/onboarding.d.ts +11 -0
  1161. package/dist/plugin-sdk/plugin-sdk/persistent-dedupe.d.ts +20 -0
  1162. package/dist/plugin-sdk/plugin-sdk/reply-payload.d.ts +22 -0
  1163. package/dist/plugin-sdk/plugin-sdk/run-command.d.ts +12 -0
  1164. package/dist/plugin-sdk/plugin-sdk/runtime.d.ts +10 -0
  1165. package/dist/plugin-sdk/plugin-sdk/slack-message-actions.d.ts +11 -0
  1166. package/dist/plugin-sdk/plugin-sdk/status-helpers.d.ts +88 -0
  1167. package/dist/plugin-sdk/plugin-sdk/temp-path.d.ts +12 -0
  1168. package/dist/plugin-sdk/plugin-sdk/text-chunking.d.ts +1 -0
  1169. package/dist/plugin-sdk/plugin-sdk/tool-send.d.ts +4 -0
  1170. package/dist/plugin-sdk/plugin-sdk/webhook-path.d.ts +6 -0
  1171. package/dist/plugin-sdk/plugin-sdk/webhook-targets.d.ts +23 -0
  1172. package/dist/plugin-sdk/plugins/bundled-dir.d.ts +1 -0
  1173. package/dist/plugin-sdk/plugins/commands.d.ts +83 -0
  1174. package/dist/plugin-sdk/plugins/config-schema.d.ts +2 -0
  1175. package/dist/plugin-sdk/plugins/config-state.d.ts +30 -0
  1176. package/dist/plugin-sdk/plugins/discovery.d.ts +24 -0
  1177. package/dist/plugin-sdk/plugins/hook-runner-global.d.ts +37 -0
  1178. package/dist/plugin-sdk/plugins/hooks.d.ts +49 -0
  1179. package/dist/plugin-sdk/plugins/http-path.d.ts +1 -0
  1180. package/dist/plugin-sdk/plugins/http-registry.d.ts +13 -0
  1181. package/dist/plugin-sdk/plugins/manifest-registry.d.ts +34 -0
  1182. package/dist/plugin-sdk/plugins/manifest.d.ts +66 -0
  1183. package/dist/plugin-sdk/plugins/path-safety.d.ts +5 -0
  1184. package/dist/plugin-sdk/plugins/registry.d.ts +130 -0
  1185. package/dist/plugin-sdk/plugins/runtime/native-deps.d.ts +8 -0
  1186. package/dist/plugin-sdk/plugins/runtime/types.d.ts +310 -0
  1187. package/dist/plugin-sdk/plugins/runtime.d.ts +5 -0
  1188. package/dist/plugin-sdk/plugins/schema-validator.d.ts +10 -0
  1189. package/dist/plugin-sdk/plugins/types.d.ts +487 -0
  1190. package/dist/plugin-sdk/polls.d.ts +31 -0
  1191. package/dist/plugin-sdk/process/command-queue.d.ts +51 -0
  1192. package/dist/plugin-sdk/process/exec.d.ts +30 -0
  1193. package/dist/plugin-sdk/process/lanes.d.ts +6 -0
  1194. package/dist/plugin-sdk/process/spawn-utils.d.ts +26 -0
  1195. package/dist/plugin-sdk/routing/account-id.d.ts +3 -0
  1196. package/dist/plugin-sdk/routing/account-lookup.d.ts +1 -0
  1197. package/dist/plugin-sdk/routing/bindings.d.ts +11 -0
  1198. package/dist/plugin-sdk/routing/resolve-route.d.ts +42 -0
  1199. package/dist/plugin-sdk/routing/session-key.d.ts +48 -0
  1200. package/dist/plugin-sdk/runtime.d.ts +7 -0
  1201. package/dist/plugin-sdk/security/channel-metadata.d.ts +6 -0
  1202. package/dist/plugin-sdk/security/dm-policy-shared.d.ts +33 -0
  1203. package/dist/plugin-sdk/security/external-content.d.ts +53 -0
  1204. package/dist/plugin-sdk/security/safe-regex.d.ts +2 -0
  1205. package/dist/plugin-sdk/security/scan-paths.d.ts +5 -0
  1206. package/dist/plugin-sdk/security/secret-equal.d.ts +1 -0
  1207. package/dist/plugin-sdk/sessions/input-provenance.d.ts +16 -0
  1208. package/dist/plugin-sdk/sessions/level-overrides.d.ts +10 -0
  1209. package/dist/plugin-sdk/sessions/model-overrides.d.ts +14 -0
  1210. package/dist/plugin-sdk/sessions/send-policy.d.ts +11 -0
  1211. package/dist/plugin-sdk/sessions/session-key-utils.d.ts +16 -0
  1212. package/dist/plugin-sdk/sessions/session-label.d.ts +9 -0
  1213. package/dist/plugin-sdk/sessions/transcript-events.d.ts +7 -0
  1214. package/dist/plugin-sdk/shared/avatar-policy.d.ts +16 -0
  1215. package/dist/plugin-sdk/shared/chat-content.d.ts +5 -0
  1216. package/dist/plugin-sdk/shared/chat-envelope.d.ts +2 -0
  1217. package/dist/plugin-sdk/shared/device-auth.d.ts +13 -0
  1218. package/dist/plugin-sdk/shared/gateway-bind-url.d.ts +14 -0
  1219. package/dist/plugin-sdk/shared/net/ip.d.ts +19 -0
  1220. package/dist/plugin-sdk/shared/operator-scope-compat.d.ts +5 -0
  1221. package/dist/plugin-sdk/shared/pid-alive.d.ts +1 -0
  1222. package/dist/plugin-sdk/shared/process-scoped-map.d.ts +1 -0
  1223. package/dist/plugin-sdk/shared/string-normalization.d.ts +4 -0
  1224. package/dist/plugin-sdk/shared/subagents-format.d.ts +15 -0
  1225. package/dist/plugin-sdk/shared/tailscale-status.d.ts +8 -0
  1226. package/dist/plugin-sdk/shared/text/code-regions.d.ts +6 -0
  1227. package/dist/plugin-sdk/shared/text/reasoning-tags.d.ts +6 -0
  1228. package/dist/plugin-sdk/shared/text-chunking.d.ts +1 -0
  1229. package/dist/plugin-sdk/signal/accounts.d.ts +17 -0
  1230. package/dist/plugin-sdk/signal/client.d.ts +32 -0
  1231. package/dist/plugin-sdk/signal/daemon.d.ts +26 -0
  1232. package/dist/plugin-sdk/signal/format.d.ts +17 -0
  1233. package/dist/plugin-sdk/signal/identity.d.ts +24 -0
  1234. package/dist/plugin-sdk/signal/index.d.ts +5 -0
  1235. package/dist/plugin-sdk/signal/monitor/event-handler.d.ts +5 -0
  1236. package/dist/plugin-sdk/signal/monitor/event-handler.types.d.ts +125 -0
  1237. package/dist/plugin-sdk/signal/monitor/mentions.d.ts +2 -0
  1238. package/dist/plugin-sdk/signal/monitor.d.ts +25 -0
  1239. package/dist/plugin-sdk/signal/probe.d.ts +7 -0
  1240. package/dist/plugin-sdk/signal/reaction-level.d.ts +17 -0
  1241. package/dist/plugin-sdk/signal/rpc-context.d.ts +9 -0
  1242. package/dist/plugin-sdk/signal/send-reactions.d.ts +32 -0
  1243. package/dist/plugin-sdk/signal/send.d.ts +25 -0
  1244. package/dist/plugin-sdk/signal/sse-reconnect.d.ts +13 -0
  1245. package/dist/plugin-sdk/slack/accounts.d.ts +32 -0
  1246. package/dist/plugin-sdk/slack/actions.d.ts +56 -0
  1247. package/dist/plugin-sdk/slack/blocks-fallback.d.ts +2 -0
  1248. package/dist/plugin-sdk/slack/blocks-input.d.ts +3 -0
  1249. package/dist/plugin-sdk/slack/channel-migration.d.ts +20 -0
  1250. package/dist/plugin-sdk/slack/client.d.ts +4 -0
  1251. package/dist/plugin-sdk/slack/directory-live.d.ts +4 -0
  1252. package/dist/plugin-sdk/slack/draft-stream.d.ts +25 -0
  1253. package/dist/plugin-sdk/slack/format.d.ts +7 -0
  1254. package/dist/plugin-sdk/slack/http/index.d.ts +1 -0
  1255. package/dist/plugin-sdk/slack/http/registry.d.ts +12 -0
  1256. package/dist/plugin-sdk/slack/index.d.ts +6 -0
  1257. package/dist/plugin-sdk/slack/message-actions.d.ts +4 -0
  1258. package/dist/plugin-sdk/slack/modal-metadata.d.ts +7 -0
  1259. package/dist/plugin-sdk/slack/monitor/allow-list.d.ts +23 -0
  1260. package/dist/plugin-sdk/slack/monitor/auth.d.ts +11 -0
  1261. package/dist/plugin-sdk/slack/monitor/channel-config.d.ts +43 -0
  1262. package/dist/plugin-sdk/slack/monitor/commands.d.ts +9 -0
  1263. package/dist/plugin-sdk/slack/monitor/context.d.ts +104 -0
  1264. package/dist/plugin-sdk/slack/monitor/events/channels.d.ts +4 -0
  1265. package/dist/plugin-sdk/slack/monitor/events/interactions.d.ts +4 -0
  1266. package/dist/plugin-sdk/slack/monitor/events/members.d.ts +4 -0
  1267. package/dist/plugin-sdk/slack/monitor/events/messages.d.ts +6 -0
  1268. package/dist/plugin-sdk/slack/monitor/events/pins.d.ts +4 -0
  1269. package/dist/plugin-sdk/slack/monitor/events/reactions.d.ts +4 -0
  1270. package/dist/plugin-sdk/slack/monitor/events.d.ts +8 -0
  1271. package/dist/plugin-sdk/slack/monitor/external-arg-menu-store.d.ts +18 -0
  1272. package/dist/plugin-sdk/slack/monitor/media.d.ts +66 -0
  1273. package/dist/plugin-sdk/slack/monitor/message-handler/dispatch.d.ts +12 -0
  1274. package/dist/plugin-sdk/slack/monitor/message-handler/prepare.d.ts +13 -0
  1275. package/dist/plugin-sdk/slack/monitor/message-handler/types.d.ts +22 -0
  1276. package/dist/plugin-sdk/slack/monitor/message-handler.d.ts +11 -0
  1277. package/dist/plugin-sdk/slack/monitor/mrkdwn.d.ts +1 -0
  1278. package/dist/plugin-sdk/slack/monitor/policy.d.ts +5 -0
  1279. package/dist/plugin-sdk/slack/monitor/provider.d.ts +7 -0
  1280. package/dist/plugin-sdk/slack/monitor/replies.d.ts +53 -0
  1281. package/dist/plugin-sdk/slack/monitor/room-context.d.ts +14 -0
  1282. package/dist/plugin-sdk/slack/monitor/slash.d.ts +6 -0
  1283. package/dist/plugin-sdk/slack/monitor/thread-resolution.d.ts +12 -0
  1284. package/dist/plugin-sdk/slack/monitor/types.d.ts +97 -0
  1285. package/dist/plugin-sdk/slack/monitor.d.ts +5 -0
  1286. package/dist/plugin-sdk/slack/probe.d.ts +14 -0
  1287. package/dist/plugin-sdk/slack/resolve-channels.d.ts +19 -0
  1288. package/dist/plugin-sdk/slack/resolve-users.d.ts +26 -0
  1289. package/dist/plugin-sdk/slack/send.d.ts +22 -0
  1290. package/dist/plugin-sdk/slack/stream-mode.d.ts +23 -0
  1291. package/dist/plugin-sdk/slack/streaming.d.ts +72 -0
  1292. package/dist/plugin-sdk/slack/targets.d.ts +7 -0
  1293. package/dist/plugin-sdk/slack/threading-tool-context.d.ts +10 -0
  1294. package/dist/plugin-sdk/slack/threading.d.ts +29 -0
  1295. package/dist/plugin-sdk/slack/token.d.ts +3 -0
  1296. package/dist/plugin-sdk/slack/types.d.ts +58 -0
  1297. package/dist/plugin-sdk/telegram/accounts.d.ts +21 -0
  1298. package/dist/plugin-sdk/telegram/allowed-updates.d.ts +4 -0
  1299. package/dist/plugin-sdk/telegram/api-logging.d.ts +11 -0
  1300. package/dist/plugin-sdk/telegram/audit.d.ts +29 -0
  1301. package/dist/plugin-sdk/telegram/bot/delivery.d.ts +35 -0
  1302. package/dist/plugin-sdk/telegram/bot/helpers.d.ts +128 -0
  1303. package/dist/plugin-sdk/telegram/bot/types.d.ts +28 -0
  1304. package/dist/plugin-sdk/telegram/bot-access.d.ts +26 -0
  1305. package/dist/plugin-sdk/telegram/bot-handlers.d.ts +2 -0
  1306. package/dist/plugin-sdk/telegram/bot-message-context.d.ts +145 -0
  1307. package/dist/plugin-sdk/telegram/bot-message-dispatch.d.ts +19 -0
  1308. package/dist/plugin-sdk/telegram/bot-message.d.ts +20 -0
  1309. package/dist/plugin-sdk/telegram/bot-native-command-menu.d.ts +33 -0
  1310. package/dist/plugin-sdk/telegram/bot-native-commands.d.ts +59 -0
  1311. package/dist/plugin-sdk/telegram/bot-updates.d.ts +31 -0
  1312. package/dist/plugin-sdk/telegram/bot.d.ts +62 -0
  1313. package/dist/plugin-sdk/telegram/button-types.d.ts +7 -0
  1314. package/dist/plugin-sdk/telegram/caption.d.ts +5 -0
  1315. package/dist/plugin-sdk/telegram/dm-access.d.ts +18 -0
  1316. package/dist/plugin-sdk/telegram/draft-stream.d.ts +37 -0
  1317. package/dist/plugin-sdk/telegram/fetch.d.ts +5 -0
  1318. package/dist/plugin-sdk/telegram/format.d.ts +18 -0
  1319. package/dist/plugin-sdk/telegram/group-access.d.ts +54 -0
  1320. package/dist/plugin-sdk/telegram/group-config-helpers.d.ts +8 -0
  1321. package/dist/plugin-sdk/telegram/group-migration.d.ts +20 -0
  1322. package/dist/plugin-sdk/telegram/inline-buttons.d.ts +11 -0
  1323. package/dist/plugin-sdk/telegram/lane-delivery.d.ts +56 -0
  1324. package/dist/plugin-sdk/telegram/monitor.d.ts +19 -0
  1325. package/dist/plugin-sdk/telegram/network-config.d.ts +33 -0
  1326. package/dist/plugin-sdk/telegram/network-errors.d.ts +5 -0
  1327. package/dist/plugin-sdk/telegram/outbound-params.d.ts +2 -0
  1328. package/dist/plugin-sdk/telegram/probe.d.ts +17 -0
  1329. package/dist/plugin-sdk/telegram/proxy.d.ts +1 -0
  1330. package/dist/plugin-sdk/telegram/reaction-level.d.ts +11 -0
  1331. package/dist/plugin-sdk/telegram/reasoning-lane-coordinator.d.ts +18 -0
  1332. package/dist/plugin-sdk/telegram/send.d.ts +153 -0
  1333. package/dist/plugin-sdk/telegram/sent-message-cache.d.ts +16 -0
  1334. package/dist/plugin-sdk/telegram/status-reaction-variants.d.ts +21 -0
  1335. package/dist/plugin-sdk/telegram/sticker-cache.d.ts +47 -0
  1336. package/dist/plugin-sdk/telegram/target-writeback.d.ts +7 -0
  1337. package/dist/plugin-sdk/telegram/targets.d.ts +11 -0
  1338. package/dist/plugin-sdk/telegram/token.d.ts +13 -0
  1339. package/dist/plugin-sdk/telegram/update-offset-store.d.ts +15 -0
  1340. package/dist/plugin-sdk/telegram/voice.d.ts +16 -0
  1341. package/dist/plugin-sdk/telegram/webhook.d.ts +20 -0
  1342. package/dist/plugin-sdk/terminal/ansi.d.ts +2 -0
  1343. package/dist/plugin-sdk/terminal/health-style.d.ts +1 -0
  1344. package/dist/plugin-sdk/terminal/links.d.ts +6 -0
  1345. package/dist/plugin-sdk/terminal/palette.d.ts +10 -0
  1346. package/dist/plugin-sdk/terminal/progress-line.d.ts +3 -0
  1347. package/dist/plugin-sdk/terminal/prompt-style.d.ts +3 -0
  1348. package/dist/plugin-sdk/terminal/restore.d.ts +17 -0
  1349. package/dist/plugin-sdk/terminal/theme.d.ts +15 -0
  1350. package/dist/plugin-sdk/tts/tts-core.d.ts +38 -0
  1351. package/dist/plugin-sdk/tts/tts.d.ts +177 -0
  1352. package/dist/plugin-sdk/types/agent-types.d.ts +1 -0
  1353. package/dist/plugin-sdk/utils/account-id.d.ts +1 -0
  1354. package/dist/plugin-sdk/utils/boolean.d.ts +5 -0
  1355. package/dist/plugin-sdk/utils/chunk-items.d.ts +1 -0
  1356. package/dist/plugin-sdk/utils/delivery-context.d.ts +29 -0
  1357. package/dist/plugin-sdk/utils/directive-tags.d.ts +29 -0
  1358. package/dist/plugin-sdk/utils/fetch-timeout.d.ts +13 -0
  1359. package/dist/plugin-sdk/utils/mask-api-key.d.ts +1 -0
  1360. package/dist/plugin-sdk/utils/message-channel.d.ts +27 -0
  1361. package/dist/plugin-sdk/utils/normalize-secret-input.d.ts +11 -0
  1362. package/dist/plugin-sdk/utils/provider-utils.d.ts +9 -0
  1363. package/dist/plugin-sdk/utils/queue-helpers.d.ts +80 -0
  1364. package/dist/plugin-sdk/utils/reaction-level.d.ts +15 -0
  1365. package/dist/plugin-sdk/utils/run-with-concurrency.d.ts +11 -0
  1366. package/dist/plugin-sdk/utils/transcript-tools.d.ts +8 -0
  1367. package/dist/plugin-sdk/utils/usage-format.d.ts +26 -0
  1368. package/dist/plugin-sdk/utils/with-timeout.d.ts +1 -0
  1369. package/dist/plugin-sdk/utils.d.ts +63 -0
  1370. package/dist/plugin-sdk/version.d.ts +8 -0
  1371. package/dist/plugin-sdk/web/accounts.d.ts +39 -0
  1372. package/dist/plugin-sdk/web/active-listener.d.ts +25 -0
  1373. package/dist/plugin-sdk/web/auth-store.d.ts +26 -0
  1374. package/dist/plugin-sdk/web/auto-reply/constants.d.ts +1 -0
  1375. package/dist/plugin-sdk/web/auto-reply/deliver-reply.d.ts +19 -0
  1376. package/dist/plugin-sdk/web/auto-reply/heartbeat-runner.d.ts +20 -0
  1377. package/dist/plugin-sdk/web/auto-reply/loggers.d.ts +4 -0
  1378. package/dist/plugin-sdk/web/auto-reply/mentions.d.ts +19 -0
  1379. package/dist/plugin-sdk/web/auto-reply/monitor/ack-reaction.d.ts +13 -0
  1380. package/dist/plugin-sdk/web/auto-reply/monitor/broadcast.d.ts +16 -0
  1381. package/dist/plugin-sdk/web/auto-reply/monitor/commands.d.ts +2 -0
  1382. package/dist/plugin-sdk/web/auto-reply/monitor/echo.d.ts +17 -0
  1383. package/dist/plugin-sdk/web/auto-reply/monitor/group-activation.d.ts +9 -0
  1384. package/dist/plugin-sdk/web/auto-reply/monitor/group-gating.d.ts +33 -0
  1385. package/dist/plugin-sdk/web/auto-reply/monitor/group-members.d.ts +6 -0
  1386. package/dist/plugin-sdk/web/auto-reply/monitor/last-route.d.ts +15 -0
  1387. package/dist/plugin-sdk/web/auto-reply/monitor/message-line.d.ts +11 -0
  1388. package/dist/plugin-sdk/web/auto-reply/monitor/on-message.d.ts +24 -0
  1389. package/dist/plugin-sdk/web/auto-reply/monitor/peer.d.ts +2 -0
  1390. package/dist/plugin-sdk/web/auto-reply/monitor/process-message.d.ts +40 -0
  1391. package/dist/plugin-sdk/web/auto-reply/monitor.d.ts +5 -0
  1392. package/dist/plugin-sdk/web/auto-reply/session-snapshot.d.ts +17 -0
  1393. package/dist/plugin-sdk/web/auto-reply/types.d.ts +30 -0
  1394. package/dist/plugin-sdk/web/auto-reply/util.d.ts +2 -0
  1395. package/dist/plugin-sdk/web/auto-reply.d.ts +1 -0
  1396. package/dist/plugin-sdk/web/auto-reply.impl.d.ts +5 -0
  1397. package/dist/plugin-sdk/web/inbound/access-control.d.ts +36 -0
  1398. package/dist/plugin-sdk/web/inbound/dedupe.d.ts +2 -0
  1399. package/dist/plugin-sdk/web/inbound/extract.d.ts +13 -0
  1400. package/dist/plugin-sdk/web/inbound/media.d.ts +7 -0
  1401. package/dist/plugin-sdk/web/inbound/monitor.d.ts +30 -0
  1402. package/dist/plugin-sdk/web/inbound/send-api.d.ts +22 -0
  1403. package/dist/plugin-sdk/web/inbound/types.d.ts +41 -0
  1404. package/dist/plugin-sdk/web/inbound.d.ts +4 -0
  1405. package/dist/plugin-sdk/web/login-qr.d.ts +19 -0
  1406. package/dist/plugin-sdk/web/login.d.ts +3 -0
  1407. package/dist/plugin-sdk/web/media.d.ts +43 -0
  1408. package/dist/plugin-sdk/web/outbound.d.ts +24 -0
  1409. package/dist/plugin-sdk/web/qr-image.d.ts +4 -0
  1410. package/dist/plugin-sdk/web/reconnect.d.ts +12 -0
  1411. package/dist/plugin-sdk/web/session.d.ts +14 -0
  1412. package/dist/plugin-sdk/web/vcard.d.ts +6 -0
  1413. package/dist/plugin-sdk/whatsapp/normalize.d.ts +6 -0
  1414. package/dist/plugin-sdk/whatsapp/resolve-outbound-target.d.ts +12 -0
  1415. package/dist/plugin-sdk/wizard/prompts.d.ts +43 -0
  1416. package/dist/plugin-sdk/wizard/session.d.ts +42 -0
  1417. package/dist/plugins-BflZz0sp.js +453 -0
  1418. package/dist/plugins-allowlist-BbTQ5Z2k.js +15 -0
  1419. package/dist/plugins-allowlist-C20oaESO.js +15 -0
  1420. package/dist/plugins-cli-DV82scUw.js +798 -0
  1421. package/dist/plugins-cli-Qj1UyIZO.js +793 -0
  1422. package/dist/plugins-woGRXMzU.js +455 -0
  1423. package/dist/polls-B0CCBDeR.js +33 -0
  1424. package/dist/polls-CwwHzYBM.js +33 -0
  1425. package/dist/ports-DrruB2fK.js +370 -0
  1426. package/dist/ports-GT1yV-Tg.js +96 -0
  1427. package/dist/ports-NPqtlfp0.js +316 -0
  1428. package/dist/ports-QMI4-F9m.js +96 -0
  1429. package/dist/ports-lsof-Wteul3ju.js +27 -0
  1430. package/dist/process-scoped-map-CV9kDvfG.js +39 -0
  1431. package/dist/process-scoped-map-PEvnG75N.js +39 -0
  1432. package/dist/program-CQmIaRUI.js +244 -0
  1433. package/dist/program-context-DEU6ACnL.js +474 -0
  1434. package/dist/program-context-jqeI5alP.js +17 -0
  1435. package/dist/progress-C1kUfYL-.js +123 -0
  1436. package/dist/progress-CBkSaM6z.js +124 -0
  1437. package/dist/prompt-Bllj1dhc.js +21 -0
  1438. package/dist/prompt-Yn2yClg1.js +21 -0
  1439. package/dist/prompt-select-styled-BhTN6zE2.js +1650 -0
  1440. package/dist/prompt-select-styled-WopXnjIy.js +1647 -0
  1441. package/dist/prompt-style-DVEm3BZW.js +9 -0
  1442. package/dist/prompt-style-DjEYC_s-.js +9 -0
  1443. package/dist/provider-dispatcher-B4QMe-I6.js +659 -0
  1444. package/dist/provider-dispatcher-Bfauw6zz.js +660 -0
  1445. package/dist/provider-utils-3JTMJroG.js +79 -0
  1446. package/dist/provider-utils-FaBmofiq.js +79 -0
  1447. package/dist/proxy-DL3MD6-P.js +16 -0
  1448. package/dist/proxy-DpNv2cSV.js +16 -0
  1449. package/dist/push-apns-C0LyG-WB.js +713 -0
  1450. package/dist/push-apns-DuG95AKC.js +711 -0
  1451. package/dist/pw-ai-D9n6-Wa6.js +1906 -0
  1452. package/dist/pw-ai-T280E6Mn.js +1910 -0
  1453. package/dist/pw-ai-state-CGfLv6nV.js +11 -0
  1454. package/dist/pw-ai-state-Dynx20hr.js +11 -0
  1455. package/dist/qr-cli-DVECWTHN.js +352 -0
  1456. package/dist/qr-cli-hSLixZCe.js +347 -0
  1457. package/dist/redact-Dx1Fue21.js +191 -0
  1458. package/dist/redact-eZq1uwNK.js +191 -0
  1459. package/dist/redact-identifier-BTIWtaa-.js +15 -0
  1460. package/dist/redact-identifier-CAagcfWA.js +15 -0
  1461. package/dist/redact-snapshot-BZYLIqe-.js +2028 -0
  1462. package/dist/redact-snapshot-C6hVx_9I.js +2028 -0
  1463. package/dist/register.agent-Dmj-sgEl.js +1043 -0
  1464. package/dist/register.agent-IspcBFeD.js +286 -0
  1465. package/dist/register.configure-BqJEqyGL.js +130 -0
  1466. package/dist/register.configure-PPkU_4Ea.js +124 -0
  1467. package/dist/register.import-Bs-UkOs-.js +27 -0
  1468. package/dist/register.import-DLng8g-e.js +30 -0
  1469. package/dist/register.maintenance-BbpkJil3.js +497 -0
  1470. package/dist/register.maintenance-C5nkOQxa.js +494 -0
  1471. package/dist/register.message-C83Hi1b3.js +681 -0
  1472. package/dist/register.message-D16isu4u.js +686 -0
  1473. package/dist/register.onboard-B8EzX3wY.js +257 -0
  1474. package/dist/register.onboard-CyRbr_0V.js +262 -0
  1475. package/dist/register.setup-DWyoowAz.js +109 -0
  1476. package/dist/register.setup-Dz6GwMnu.js +114 -0
  1477. package/dist/register.status-health-sessions-CbQOfycz.js +423 -0
  1478. package/dist/register.status-health-sessions-DXIWG47y.js +669 -0
  1479. package/dist/register.subclis-DeGP5UPU.js +267 -0
  1480. package/dist/remoteclaw-root-C2HV2VeC.js +88 -0
  1481. package/dist/remoteclaw-root-DybYl8PL.js +88 -0
  1482. package/dist/render-6ahYfPwj.js +104 -0
  1483. package/dist/render-CCLsW6Lz.js +104 -0
  1484. package/dist/render-uf6PvGMV.js +104 -0
  1485. package/dist/replies-BKrzM0QI.js +136 -0
  1486. package/dist/replies-Cl2gYBVt.js +136 -0
  1487. package/dist/reply-CCu_DY64.js +13900 -0
  1488. package/dist/reply-DSKC8kyS.js +13897 -0
  1489. package/dist/reply-directives-BHJKp1Du.js +182 -0
  1490. package/dist/reply-directives-CD2WycBM.js +182 -0
  1491. package/dist/reply-payloads-D_BM1Anb.js +527 -0
  1492. package/dist/reply-prefix-DBLCYiup.js +38 -0
  1493. package/dist/reply-prefix-Q4DOJSn_.js +38 -0
  1494. package/dist/resolve-route-CBVbY0xS.js +249 -0
  1495. package/dist/resolve-route-DGEgTEif.js +249 -0
  1496. package/dist/response-prefix-template-rVZQOViK.js +136 -0
  1497. package/dist/response-prefix-template-up4REfuR.js +136 -0
  1498. package/dist/retry-BhuXOEVR.js +77 -0
  1499. package/dist/retry-DUjAzOBy.js +77 -0
  1500. package/dist/retry-DnqPAqWp.js +77 -0
  1501. package/dist/rolldown-runtime-Cbj13DAv.js +20 -0
  1502. package/dist/run-main-Um5xhxla.js +320 -0
  1503. package/dist/runner-yVJ4HB2K.js +2294 -0
  1504. package/dist/runner-z92MWZ3m.js +2294 -0
  1505. package/dist/runtime-DJNp29jv.js +94 -0
  1506. package/dist/runtime-guard-DZ_xuCc4.js +60 -0
  1507. package/dist/runtime-guard-U-ewY_QH.js +60 -0
  1508. package/dist/secret-equal-BbHdTtqY.js +11 -0
  1509. package/dist/secret-equal-CXJEZiWb.js +11 -0
  1510. package/dist/secure-random-CS2mSdTn.js +12 -0
  1511. package/dist/secure-random-Pl9rPl0l.js +44 -0
  1512. package/dist/secure-random-_dzDDlFo.js +12 -0
  1513. package/dist/security-cli-CdwbWZUj.js +484 -0
  1514. package/dist/security-cli-DP5QJpa5.js +478 -0
  1515. package/dist/send-B1_Ymjb9.js +1778 -0
  1516. package/dist/send-B84axiIa.js +29 -0
  1517. package/dist/send-BN_zYVlx.js +547 -0
  1518. package/dist/send-BqVOxAmK.js +1174 -0
  1519. package/dist/send-Bx9bUGav.js +492 -0
  1520. package/dist/send-C3pdJ6p-.js +2245 -0
  1521. package/dist/send-CBGSXjfD.js +2245 -0
  1522. package/dist/send-CGXyTF22.js +426 -0
  1523. package/dist/send-CKavrhXj.js +11 -0
  1524. package/dist/send-D08Je6DL.js +374 -0
  1525. package/dist/send-D1aYEG-k.js +332 -0
  1526. package/dist/send-DHldI3gf.js +492 -0
  1527. package/dist/send-D_DUQJ6H.js +349 -0
  1528. package/dist/send-Ds63eF4a.js +349 -0
  1529. package/dist/send-YRVDWfSs.js +547 -0
  1530. package/dist/send-xnwty9cY.js +1775 -0
  1531. package/dist/server-BQFoyCRR.js +200 -0
  1532. package/dist/server-DhXw25Jq.js +205 -0
  1533. package/dist/server-lifecycle-BjCCyD3w.js +2437 -0
  1534. package/dist/server-lifecycle-Coyr6Lda.js +2437 -0
  1535. package/dist/server-node-events-De4WZQQD.js +393 -0
  1536. package/dist/server-node-events-dXXayuqY.js +398 -0
  1537. package/dist/service-Bjqii5nW.js +670 -0
  1538. package/dist/service-fp29z5Ww.js +670 -0
  1539. package/dist/session-DBL5nHDy.js +170 -0
  1540. package/dist/session-cost-usage-DX09eTPU.js +627 -0
  1541. package/dist/session-cost-usage-yYi525j3.js +627 -0
  1542. package/dist/session-dirs-Cj5xi7zX.js +947 -0
  1543. package/dist/session-dirs-DdF6TDsE.js +947 -0
  1544. package/dist/session-key-5YLnn_qf.js +235 -0
  1545. package/dist/session-key-C2n-VILA.js +235 -0
  1546. package/dist/session-utils-CEtEq6bi.js +625 -0
  1547. package/dist/session-utils-WmlWAs1r.js +625 -0
  1548. package/dist/session-xKIW6gL2.js +170 -0
  1549. package/dist/sessions--PykPynp.js +2593 -0
  1550. package/dist/sessions-Bw4LRnSr.js +252 -0
  1551. package/dist/ssrf-Ck9HDZpv.js +183 -0
  1552. package/dist/ssrf-m7kFIobZ.js +183 -0
  1553. package/dist/stagger-BXv_apuy.js +56 -0
  1554. package/dist/stagger-MI9gd2rQ.js +56 -0
  1555. package/dist/status-BmtCS3T1.js +21 -0
  1556. package/dist/status-BrwHRn2B.js +21 -0
  1557. package/dist/status-CtzYFLLF.js +2072 -0
  1558. package/dist/status-DiN1cq2p.js +2068 -0
  1559. package/dist/status.update-C55QM2xs.js +79 -0
  1560. package/dist/status.update-CBmPXwYN.js +79 -0
  1561. package/dist/store-C3tOpizT.js +64 -0
  1562. package/dist/store-CPJXuhvQ.js +53 -0
  1563. package/dist/store-SusmIfz7.js +2595 -0
  1564. package/dist/store-v3P-OWhi.js +64 -0
  1565. package/dist/strip-inbound-meta-DjKcSFaW.js +110 -0
  1566. package/dist/strip-inbound-meta-jy3bkUab.js +110 -0
  1567. package/dist/subagent-registry-Db4Ho_2Y.js +4858 -0
  1568. package/dist/subagent-registry-Du_j0Fnt.js +4860 -0
  1569. package/dist/subsystem-BUXAJwPD.js +1079 -0
  1570. package/dist/subsystem-COd61u0P.js +1139 -0
  1571. package/dist/system-cli-DYCpLO3T.js +75 -0
  1572. package/dist/system-cli-eAk5wVbP.js +70 -0
  1573. package/dist/systemd-DSnlM3jX.js +547 -0
  1574. package/dist/systemd-TfK8GuTx.js +547 -0
  1575. package/dist/systemd-linger-Axnc1xCb.js +75 -0
  1576. package/dist/systemd-linger-_0_-RY4v.js +75 -0
  1577. package/dist/table-C1rdyYl9.js +278 -0
  1578. package/dist/table-DPTzZyhu.js +279 -0
  1579. package/dist/tables-DI5LGEr1.js +55 -0
  1580. package/dist/tables-PxcSPSO0.js +55 -0
  1581. package/dist/tables-TWiml6b1.js +55 -0
  1582. package/dist/tailnet-CEudzG0i.js +40 -0
  1583. package/dist/tailnet-PnMrjwGT.js +40 -0
  1584. package/dist/tailscale-DTATQxAG.js +230 -0
  1585. package/dist/tailscale-Dbyahx0J.js +230 -0
  1586. package/dist/target-errors-BDpPcwh5.js +26 -0
  1587. package/dist/target-errors-DdIAPcMM.js +26 -0
  1588. package/dist/targets-BMenhVHg.js +39 -0
  1589. package/dist/targets-C-2xwh9f.js +45 -0
  1590. package/dist/targets-C1NeMn2J.js +220 -0
  1591. package/dist/targets-CcTME3bp.js +46 -0
  1592. package/dist/targets-CmC5m7Ey.js +53 -0
  1593. package/dist/targets-D-qLBpTA.js +79 -0
  1594. package/dist/targets-D-u6Kyio.js +650 -0
  1595. package/dist/targets-D7OKVXMI.js +650 -0
  1596. package/dist/targets-D7PT_rdO.js +45 -0
  1597. package/dist/targets-DB4vBpIQ.js +2172 -0
  1598. package/dist/targets-DfqPGOmM.js +2173 -0
  1599. package/dist/targets-DyybKefq.js +53 -0
  1600. package/dist/targets-JCISV-hS.js +120 -0
  1601. package/dist/targets-UncQvCVs.js +79 -0
  1602. package/dist/text-format-BQ3z_OXA.js +9 -0
  1603. package/dist/text-format-oWqzVmah.js +9 -0
  1604. package/dist/tokens-B-jmvNR9.js +21 -0
  1605. package/dist/tokens-DzFOtLlW.js +21 -0
  1606. package/dist/tool-display-Br6mwaJc.js +785 -0
  1607. package/dist/tool-display-sgNwLOBj.js +785 -0
  1608. package/dist/tool-images-BNfIJ_Kj.js +263 -0
  1609. package/dist/tool-images-kloBqxqK.js +263 -0
  1610. package/dist/trash-DPi0aCCQ.js +125 -0
  1611. package/dist/trash-D_Jd_yQZ.js +125 -0
  1612. package/dist/tui-CHc0EfJO.js +3392 -0
  1613. package/dist/tui-CyHwc2uX.js +3392 -0
  1614. package/dist/tui-cli-BvwbrIYO.js +63 -0
  1615. package/dist/tui-cli-C9I18SfW.js +58 -0
  1616. package/dist/update-DxyjwCL2.js +349 -0
  1617. package/dist/update-IX7vdqA8.js +349 -0
  1618. package/dist/update-cli-CBeXUSzq.js +1373 -0
  1619. package/dist/update-cli-DkAWmUrp.js +1370 -0
  1620. package/dist/usage-BdhBT0Vz.js +57 -0
  1621. package/dist/usage-BtQcAnf6.js +57 -0
  1622. package/dist/usage-CYlQW4M2.js +5279 -0
  1623. package/dist/usage-format-C3mNLfhI.js +31 -0
  1624. package/dist/usage-format-DAaPzr_z.js +31 -0
  1625. package/dist/utils-LBKvDoPx.js +631 -0
  1626. package/dist/warning-filter.js +48 -0
  1627. package/dist/web-BUYUdnRH.js +3065 -0
  1628. package/dist/web-Dquzwqf4.js +70 -0
  1629. package/dist/web-tS8diboh.js +76 -0
  1630. package/dist/webhooks-cli-B7Vw3CMz.js +333 -0
  1631. package/dist/webhooks-cli-BpZHQlVd.js +328 -0
  1632. package/dist/whatsapp-actions-D5HXezjp.js +128 -0
  1633. package/dist/whatsapp-actions-DaA291Ya.js +122 -0
  1634. package/dist/widearea-dns-CsmBVbez.js +127 -0
  1635. package/dist/widearea-dns-DSoaA-eH.js +127 -0
  1636. package/dist/workspace-B4ZvVYT9.js +447 -0
  1637. package/dist/workspace-B8PA8oxJ.js +449 -0
  1638. package/dist/workspace-BzPeZDew.js +10 -0
  1639. package/dist/workspace-DkGLVfOl.js +10 -0
  1640. package/dist/wsl-BCnYV9O0.js +52 -0
  1641. package/dist/wsl-B_sPlzWw.js +52 -0
  1642. package/extensions/bluebubbles/README.md +45 -0
  1643. package/extensions/bluebubbles/index.ts +19 -0
  1644. package/extensions/bluebubbles/package.json +33 -0
  1645. package/extensions/bluebubbles/remoteclaw.plugin.json +9 -0
  1646. package/extensions/bluebubbles/src/account-resolve.ts +35 -0
  1647. package/extensions/bluebubbles/src/accounts.ts +90 -0
  1648. package/extensions/bluebubbles/src/actions.ts +460 -0
  1649. package/extensions/bluebubbles/src/attachments.ts +268 -0
  1650. package/extensions/bluebubbles/src/channel.ts +418 -0
  1651. package/extensions/bluebubbles/src/chat.ts +329 -0
  1652. package/extensions/bluebubbles/src/config-schema.ts +65 -0
  1653. package/extensions/bluebubbles/src/history.ts +177 -0
  1654. package/extensions/bluebubbles/src/media-send.ts +317 -0
  1655. package/extensions/bluebubbles/src/monitor-normalize.ts +825 -0
  1656. package/extensions/bluebubbles/src/monitor-processing.ts +1448 -0
  1657. package/extensions/bluebubbles/src/monitor-reply-cache.ts +185 -0
  1658. package/extensions/bluebubbles/src/monitor-shared.ts +41 -0
  1659. package/extensions/bluebubbles/src/monitor.ts +534 -0
  1660. package/extensions/bluebubbles/src/multipart.ts +32 -0
  1661. package/extensions/bluebubbles/src/onboarding.ts +340 -0
  1662. package/extensions/bluebubbles/src/probe.ts +163 -0
  1663. package/extensions/bluebubbles/src/reactions.ts +182 -0
  1664. package/extensions/bluebubbles/src/request-url.ts +12 -0
  1665. package/extensions/bluebubbles/src/runtime.ts +34 -0
  1666. package/extensions/bluebubbles/src/send-helpers.ts +53 -0
  1667. package/extensions/bluebubbles/src/send.ts +472 -0
  1668. package/extensions/bluebubbles/src/targets.ts +370 -0
  1669. package/extensions/bluebubbles/src/test-harness.ts +79 -0
  1670. package/extensions/bluebubbles/src/test-mocks.ts +11 -0
  1671. package/extensions/bluebubbles/src/types.ts +135 -0
  1672. package/extensions/device-pair/index.ts +529 -0
  1673. package/extensions/device-pair/remoteclaw.plugin.json +20 -0
  1674. package/extensions/diagnostics-otel/index.ts +15 -0
  1675. package/extensions/diagnostics-otel/package.json +24 -0
  1676. package/extensions/diagnostics-otel/remoteclaw.plugin.json +8 -0
  1677. package/extensions/diagnostics-otel/src/service.ts +682 -0
  1678. package/extensions/discord/index.ts +19 -0
  1679. package/extensions/discord/package.json +11 -0
  1680. package/extensions/discord/remoteclaw.plugin.json +9 -0
  1681. package/extensions/discord/src/channel.ts +451 -0
  1682. package/extensions/discord/src/runtime.ts +14 -0
  1683. package/extensions/discord/src/subagent-hooks.ts +152 -0
  1684. package/extensions/feishu/index.ts +63 -0
  1685. package/extensions/feishu/package.json +34 -0
  1686. package/extensions/feishu/remoteclaw.plugin.json +10 -0
  1687. package/extensions/feishu/skills/feishu-doc/SKILL.md +105 -0
  1688. package/extensions/feishu/skills/feishu-doc/references/block-types.md +103 -0
  1689. package/extensions/feishu/skills/feishu-drive/SKILL.md +97 -0
  1690. package/extensions/feishu/skills/feishu-perm/SKILL.md +119 -0
  1691. package/extensions/feishu/skills/feishu-wiki/SKILL.md +111 -0
  1692. package/extensions/feishu/src/accounts.ts +144 -0
  1693. package/extensions/feishu/src/bitable.ts +739 -0
  1694. package/extensions/feishu/src/bot.ts +1006 -0
  1695. package/extensions/feishu/src/channel.ts +359 -0
  1696. package/extensions/feishu/src/client.ts +118 -0
  1697. package/extensions/feishu/src/config-schema.ts +226 -0
  1698. package/extensions/feishu/src/dedup.ts +54 -0
  1699. package/extensions/feishu/src/directory.ts +177 -0
  1700. package/extensions/feishu/src/doc-schema.ts +47 -0
  1701. package/extensions/feishu/src/docx.ts +536 -0
  1702. package/extensions/feishu/src/drive-schema.ts +46 -0
  1703. package/extensions/feishu/src/drive.ts +227 -0
  1704. package/extensions/feishu/src/dynamic-agent.ts +131 -0
  1705. package/extensions/feishu/src/external-keys.ts +19 -0
  1706. package/extensions/feishu/src/media.ts +441 -0
  1707. package/extensions/feishu/src/mention.ts +133 -0
  1708. package/extensions/feishu/src/monitor.ts +397 -0
  1709. package/extensions/feishu/src/onboarding.ts +351 -0
  1710. package/extensions/feishu/src/outbound.ts +55 -0
  1711. package/extensions/feishu/src/perm-schema.ts +52 -0
  1712. package/extensions/feishu/src/perm.ts +173 -0
  1713. package/extensions/feishu/src/policy.ts +120 -0
  1714. package/extensions/feishu/src/probe.ts +44 -0
  1715. package/extensions/feishu/src/reactions.ts +160 -0
  1716. package/extensions/feishu/src/reply-dispatcher.ts +239 -0
  1717. package/extensions/feishu/src/runtime.ts +14 -0
  1718. package/extensions/feishu/src/send-result.ts +29 -0
  1719. package/extensions/feishu/src/send-target.ts +25 -0
  1720. package/extensions/feishu/src/send.ts +313 -0
  1721. package/extensions/feishu/src/streaming-card.ts +218 -0
  1722. package/extensions/feishu/src/targets.ts +78 -0
  1723. package/extensions/feishu/src/tools-config.ts +21 -0
  1724. package/extensions/feishu/src/types.ts +81 -0
  1725. package/extensions/feishu/src/typing.ts +80 -0
  1726. package/extensions/feishu/src/wiki-schema.ts +55 -0
  1727. package/extensions/feishu/src/wiki.ts +232 -0
  1728. package/extensions/googlechat/index.ts +19 -0
  1729. package/extensions/googlechat/node_modules/.bin/remoteclaw +21 -0
  1730. package/extensions/googlechat/package.json +37 -0
  1731. package/extensions/googlechat/remoteclaw.plugin.json +9 -0
  1732. package/extensions/googlechat/src/accounts.ts +147 -0
  1733. package/extensions/googlechat/src/actions.ts +176 -0
  1734. package/extensions/googlechat/src/api.ts +282 -0
  1735. package/extensions/googlechat/src/auth.ts +137 -0
  1736. package/extensions/googlechat/src/channel.ts +576 -0
  1737. package/extensions/googlechat/src/monitor.ts +965 -0
  1738. package/extensions/googlechat/src/onboarding.ts +270 -0
  1739. package/extensions/googlechat/src/runtime.ts +14 -0
  1740. package/extensions/googlechat/src/targets.ts +65 -0
  1741. package/extensions/googlechat/src/types.config.ts +3 -0
  1742. package/extensions/googlechat/src/types.ts +73 -0
  1743. package/extensions/imessage/index.ts +17 -0
  1744. package/extensions/imessage/package.json +12 -0
  1745. package/extensions/imessage/remoteclaw.plugin.json +9 -0
  1746. package/extensions/imessage/src/channel.ts +304 -0
  1747. package/extensions/imessage/src/runtime.ts +14 -0
  1748. package/extensions/irc/index.ts +17 -0
  1749. package/extensions/irc/package.json +11 -0
  1750. package/extensions/irc/remoteclaw.plugin.json +9 -0
  1751. package/extensions/irc/src/accounts.ts +268 -0
  1752. package/extensions/irc/src/channel.ts +364 -0
  1753. package/extensions/irc/src/client.ts +439 -0
  1754. package/extensions/irc/src/config-schema.ts +91 -0
  1755. package/extensions/irc/src/connect-options.ts +30 -0
  1756. package/extensions/irc/src/control-chars.ts +22 -0
  1757. package/extensions/irc/src/inbound.ts +372 -0
  1758. package/extensions/irc/src/monitor.ts +146 -0
  1759. package/extensions/irc/src/normalize.ts +123 -0
  1760. package/extensions/irc/src/onboarding.ts +479 -0
  1761. package/extensions/irc/src/policy.ts +166 -0
  1762. package/extensions/irc/src/probe.ts +53 -0
  1763. package/extensions/irc/src/protocol.ts +169 -0
  1764. package/extensions/irc/src/runtime.ts +14 -0
  1765. package/extensions/irc/src/send.ts +88 -0
  1766. package/extensions/irc/src/types.ts +99 -0
  1767. package/extensions/line/index.ts +19 -0
  1768. package/extensions/line/package.json +27 -0
  1769. package/extensions/line/remoteclaw.plugin.json +9 -0
  1770. package/extensions/line/src/card-command.ts +344 -0
  1771. package/extensions/line/src/channel.ts +797 -0
  1772. package/extensions/line/src/runtime.ts +14 -0
  1773. package/extensions/matrix/CHANGELOG.md +32 -0
  1774. package/extensions/matrix/index.ts +17 -0
  1775. package/extensions/matrix/node_modules/.bin/markdown-it +21 -0
  1776. package/extensions/matrix/package.json +33 -0
  1777. package/extensions/matrix/remoteclaw.plugin.json +9 -0
  1778. package/extensions/matrix/src/actions.ts +195 -0
  1779. package/extensions/matrix/src/channel.ts +486 -0
  1780. package/extensions/matrix/src/config-schema.ts +63 -0
  1781. package/extensions/matrix/src/directory-live.ts +208 -0
  1782. package/extensions/matrix/src/group-mentions.ts +52 -0
  1783. package/extensions/matrix/src/matrix/accounts.ts +137 -0
  1784. package/extensions/matrix/src/matrix/actions/client.ts +47 -0
  1785. package/extensions/matrix/src/matrix/actions/limits.ts +6 -0
  1786. package/extensions/matrix/src/matrix/actions/messages.ts +126 -0
  1787. package/extensions/matrix/src/matrix/actions/pins.ts +84 -0
  1788. package/extensions/matrix/src/matrix/actions/reactions.ts +102 -0
  1789. package/extensions/matrix/src/matrix/actions/room.ts +85 -0
  1790. package/extensions/matrix/src/matrix/actions/summary.ts +75 -0
  1791. package/extensions/matrix/src/matrix/actions/types.ts +85 -0
  1792. package/extensions/matrix/src/matrix/actions.ts +15 -0
  1793. package/extensions/matrix/src/matrix/active-client.ts +32 -0
  1794. package/extensions/matrix/src/matrix/client/config.ts +219 -0
  1795. package/extensions/matrix/src/matrix/client/create-client.ts +123 -0
  1796. package/extensions/matrix/src/matrix/client/logging.ts +36 -0
  1797. package/extensions/matrix/src/matrix/client/runtime.ts +4 -0
  1798. package/extensions/matrix/src/matrix/client/shared.ts +201 -0
  1799. package/extensions/matrix/src/matrix/client/storage.ts +131 -0
  1800. package/extensions/matrix/src/matrix/client/types.ts +34 -0
  1801. package/extensions/matrix/src/matrix/client-bootstrap.ts +39 -0
  1802. package/extensions/matrix/src/matrix/client.ts +14 -0
  1803. package/extensions/matrix/src/matrix/credentials.ts +125 -0
  1804. package/extensions/matrix/src/matrix/deps.ts +60 -0
  1805. package/extensions/matrix/src/matrix/format.ts +22 -0
  1806. package/extensions/matrix/src/matrix/index.ts +11 -0
  1807. package/extensions/matrix/src/matrix/monitor/allowlist.ts +103 -0
  1808. package/extensions/matrix/src/matrix/monitor/auto-join.ts +71 -0
  1809. package/extensions/matrix/src/matrix/monitor/direct.ts +104 -0
  1810. package/extensions/matrix/src/matrix/monitor/events.ts +148 -0
  1811. package/extensions/matrix/src/matrix/monitor/handler.ts +688 -0
  1812. package/extensions/matrix/src/matrix/monitor/index.ts +358 -0
  1813. package/extensions/matrix/src/matrix/monitor/location.ts +100 -0
  1814. package/extensions/matrix/src/matrix/monitor/media.ts +118 -0
  1815. package/extensions/matrix/src/matrix/monitor/mentions.ts +62 -0
  1816. package/extensions/matrix/src/matrix/monitor/replies.ts +124 -0
  1817. package/extensions/matrix/src/matrix/monitor/room-info.ts +55 -0
  1818. package/extensions/matrix/src/matrix/monitor/rooms.ts +47 -0
  1819. package/extensions/matrix/src/matrix/monitor/threads.ts +68 -0
  1820. package/extensions/matrix/src/matrix/monitor/types.ts +39 -0
  1821. package/extensions/matrix/src/matrix/poll-types.ts +167 -0
  1822. package/extensions/matrix/src/matrix/probe.ts +69 -0
  1823. package/extensions/matrix/src/matrix/send/client.ts +97 -0
  1824. package/extensions/matrix/src/matrix/send/formatting.ts +93 -0
  1825. package/extensions/matrix/src/matrix/send/media.ts +230 -0
  1826. package/extensions/matrix/src/matrix/send/targets.ts +150 -0
  1827. package/extensions/matrix/src/matrix/send/types.ts +109 -0
  1828. package/extensions/matrix/src/matrix/send-queue.ts +44 -0
  1829. package/extensions/matrix/src/matrix/send.ts +265 -0
  1830. package/extensions/matrix/src/onboarding.ts +446 -0
  1831. package/extensions/matrix/src/outbound.ts +55 -0
  1832. package/extensions/matrix/src/resolve-targets.ts +126 -0
  1833. package/extensions/matrix/src/runtime.ts +14 -0
  1834. package/extensions/matrix/src/tool-actions.ts +164 -0
  1835. package/extensions/matrix/src/types.ts +116 -0
  1836. package/extensions/mattermost/index.ts +17 -0
  1837. package/extensions/mattermost/package.json +25 -0
  1838. package/extensions/mattermost/remoteclaw.plugin.json +9 -0
  1839. package/extensions/mattermost/src/channel.ts +439 -0
  1840. package/extensions/mattermost/src/config-schema.ts +62 -0
  1841. package/extensions/mattermost/src/group-mentions.ts +15 -0
  1842. package/extensions/mattermost/src/mattermost/accounts.ts +128 -0
  1843. package/extensions/mattermost/src/mattermost/client.ts +230 -0
  1844. package/extensions/mattermost/src/mattermost/index.ts +9 -0
  1845. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +72 -0
  1846. package/extensions/mattermost/src/mattermost/monitor-onchar.ts +25 -0
  1847. package/extensions/mattermost/src/mattermost/monitor-websocket.ts +221 -0
  1848. package/extensions/mattermost/src/mattermost/monitor.ts +1061 -0
  1849. package/extensions/mattermost/src/mattermost/probe.ts +61 -0
  1850. package/extensions/mattermost/src/mattermost/reactions.test-helpers.ts +83 -0
  1851. package/extensions/mattermost/src/mattermost/reactions.ts +124 -0
  1852. package/extensions/mattermost/src/mattermost/reconnect.ts +103 -0
  1853. package/extensions/mattermost/src/mattermost/send.ts +231 -0
  1854. package/extensions/mattermost/src/normalize.ts +46 -0
  1855. package/extensions/mattermost/src/onboarding-helpers.ts +1 -0
  1856. package/extensions/mattermost/src/onboarding.ts +182 -0
  1857. package/extensions/mattermost/src/runtime.ts +14 -0
  1858. package/extensions/mattermost/src/types.ts +62 -0
  1859. package/extensions/msteams/CHANGELOG.md +35 -0
  1860. package/extensions/msteams/index.ts +17 -0
  1861. package/extensions/msteams/package.json +32 -0
  1862. package/extensions/msteams/remoteclaw.plugin.json +9 -0
  1863. package/extensions/msteams/src/attachments/download.ts +282 -0
  1864. package/extensions/msteams/src/attachments/graph.ts +354 -0
  1865. package/extensions/msteams/src/attachments/html.ts +90 -0
  1866. package/extensions/msteams/src/attachments/payload.ts +14 -0
  1867. package/extensions/msteams/src/attachments/remote-media.ts +42 -0
  1868. package/extensions/msteams/src/attachments/shared.ts +404 -0
  1869. package/extensions/msteams/src/attachments/types.ts +37 -0
  1870. package/extensions/msteams/src/attachments.ts +18 -0
  1871. package/extensions/msteams/src/channel.ts +464 -0
  1872. package/extensions/msteams/src/conversation-store-fs.ts +165 -0
  1873. package/extensions/msteams/src/conversation-store-memory.ts +47 -0
  1874. package/extensions/msteams/src/conversation-store.ts +41 -0
  1875. package/extensions/msteams/src/directory-live.ts +108 -0
  1876. package/extensions/msteams/src/errors.ts +190 -0
  1877. package/extensions/msteams/src/file-consent-helpers.ts +73 -0
  1878. package/extensions/msteams/src/file-consent.ts +126 -0
  1879. package/extensions/msteams/src/file-lock.ts +1 -0
  1880. package/extensions/msteams/src/graph-chat.ts +53 -0
  1881. package/extensions/msteams/src/graph-upload.ts +452 -0
  1882. package/extensions/msteams/src/graph-users.ts +29 -0
  1883. package/extensions/msteams/src/graph.ts +81 -0
  1884. package/extensions/msteams/src/inbound.ts +48 -0
  1885. package/extensions/msteams/src/index.ts +4 -0
  1886. package/extensions/msteams/src/media-helpers.ts +105 -0
  1887. package/extensions/msteams/src/mentions.ts +114 -0
  1888. package/extensions/msteams/src/messenger.ts +484 -0
  1889. package/extensions/msteams/src/monitor-handler/inbound-media.ts +128 -0
  1890. package/extensions/msteams/src/monitor-handler/message-handler.ts +661 -0
  1891. package/extensions/msteams/src/monitor-handler.ts +162 -0
  1892. package/extensions/msteams/src/monitor-types.ts +5 -0
  1893. package/extensions/msteams/src/monitor.ts +305 -0
  1894. package/extensions/msteams/src/onboarding.ts +406 -0
  1895. package/extensions/msteams/src/outbound.ts +46 -0
  1896. package/extensions/msteams/src/pending-uploads.ts +89 -0
  1897. package/extensions/msteams/src/policy.ts +259 -0
  1898. package/extensions/msteams/src/polls-store-memory.ts +32 -0
  1899. package/extensions/msteams/src/polls.ts +315 -0
  1900. package/extensions/msteams/src/probe.ts +94 -0
  1901. package/extensions/msteams/src/reply-dispatcher.ts +132 -0
  1902. package/extensions/msteams/src/resolve-allowlist.ts +198 -0
  1903. package/extensions/msteams/src/runtime.ts +14 -0
  1904. package/extensions/msteams/src/sdk-types.ts +19 -0
  1905. package/extensions/msteams/src/sdk.ts +33 -0
  1906. package/extensions/msteams/src/send-context.ts +164 -0
  1907. package/extensions/msteams/src/send.ts +530 -0
  1908. package/extensions/msteams/src/sent-message-cache.ts +44 -0
  1909. package/extensions/msteams/src/storage.ts +25 -0
  1910. package/extensions/msteams/src/store-fs.ts +44 -0
  1911. package/extensions/msteams/src/test-runtime.ts +16 -0
  1912. package/extensions/msteams/src/token-response.ts +11 -0
  1913. package/extensions/msteams/src/token.ts +19 -0
  1914. package/extensions/nextcloud-talk/index.ts +17 -0
  1915. package/extensions/nextcloud-talk/package.json +30 -0
  1916. package/extensions/nextcloud-talk/remoteclaw.plugin.json +9 -0
  1917. package/extensions/nextcloud-talk/src/accounts.ts +170 -0
  1918. package/extensions/nextcloud-talk/src/channel.ts +416 -0
  1919. package/extensions/nextcloud-talk/src/config-schema.ts +72 -0
  1920. package/extensions/nextcloud-talk/src/format.ts +79 -0
  1921. package/extensions/nextcloud-talk/src/inbound.ts +343 -0
  1922. package/extensions/nextcloud-talk/src/monitor.ts +275 -0
  1923. package/extensions/nextcloud-talk/src/normalize.ts +39 -0
  1924. package/extensions/nextcloud-talk/src/onboarding.ts +349 -0
  1925. package/extensions/nextcloud-talk/src/policy.ts +180 -0
  1926. package/extensions/nextcloud-talk/src/room-info.ts +125 -0
  1927. package/extensions/nextcloud-talk/src/runtime.ts +14 -0
  1928. package/extensions/nextcloud-talk/src/send.ts +215 -0
  1929. package/extensions/nextcloud-talk/src/signature.ts +72 -0
  1930. package/extensions/nextcloud-talk/src/types.ts +185 -0
  1931. package/extensions/nostr/CHANGELOG.md +44 -0
  1932. package/extensions/nostr/README.md +136 -0
  1933. package/extensions/nostr/index.ts +68 -0
  1934. package/extensions/nostr/package.json +30 -0
  1935. package/extensions/nostr/remoteclaw.plugin.json +9 -0
  1936. package/extensions/nostr/src/channel.ts +345 -0
  1937. package/extensions/nostr/src/config-schema.ts +90 -0
  1938. package/extensions/nostr/src/metrics.ts +458 -0
  1939. package/extensions/nostr/src/nostr-bus.ts +719 -0
  1940. package/extensions/nostr/src/nostr-profile-http.ts +519 -0
  1941. package/extensions/nostr/src/nostr-profile-import.ts +262 -0
  1942. package/extensions/nostr/src/nostr-profile.ts +277 -0
  1943. package/extensions/nostr/src/nostr-state-store.ts +226 -0
  1944. package/extensions/nostr/src/runtime.ts +14 -0
  1945. package/extensions/nostr/src/seen-tracker.ts +289 -0
  1946. package/extensions/nostr/src/types.ts +101 -0
  1947. package/extensions/phone-control/index.ts +421 -0
  1948. package/extensions/phone-control/remoteclaw.plugin.json +10 -0
  1949. package/extensions/shared/resolve-target-test-helpers.ts +66 -0
  1950. package/extensions/signal/index.ts +17 -0
  1951. package/extensions/signal/package.json +12 -0
  1952. package/extensions/signal/remoteclaw.plugin.json +9 -0
  1953. package/extensions/signal/src/channel.ts +299 -0
  1954. package/extensions/signal/src/runtime.ts +14 -0
  1955. package/extensions/slack/index.ts +17 -0
  1956. package/extensions/slack/package.json +12 -0
  1957. package/extensions/slack/remoteclaw.plugin.json +9 -0
  1958. package/extensions/slack/src/channel.ts +421 -0
  1959. package/extensions/slack/src/runtime.ts +14 -0
  1960. package/extensions/synology-chat/index.ts +17 -0
  1961. package/extensions/synology-chat/package.json +28 -0
  1962. package/extensions/synology-chat/remoteclaw.plugin.json +9 -0
  1963. package/extensions/synology-chat/src/accounts.ts +87 -0
  1964. package/extensions/synology-chat/src/channel.ts +347 -0
  1965. package/extensions/synology-chat/src/client.ts +142 -0
  1966. package/extensions/synology-chat/src/runtime.ts +20 -0
  1967. package/extensions/synology-chat/src/security.ts +140 -0
  1968. package/extensions/synology-chat/src/types.ts +60 -0
  1969. package/extensions/synology-chat/src/webhook-handler.ts +221 -0
  1970. package/extensions/talk-voice/index.ts +150 -0
  1971. package/extensions/talk-voice/remoteclaw.plugin.json +10 -0
  1972. package/extensions/telegram/index.ts +17 -0
  1973. package/extensions/telegram/package.json +12 -0
  1974. package/extensions/telegram/remoteclaw.plugin.json +9 -0
  1975. package/extensions/telegram/src/channel.ts +569 -0
  1976. package/extensions/telegram/src/runtime.ts +14 -0
  1977. package/extensions/test-utils/runtime-env.ts +12 -0
  1978. package/extensions/thread-ownership/index.ts +133 -0
  1979. package/extensions/thread-ownership/remoteclaw.plugin.json +28 -0
  1980. package/extensions/tlon/README.md +5 -0
  1981. package/extensions/tlon/index.ts +17 -0
  1982. package/extensions/tlon/package.json +29 -0
  1983. package/extensions/tlon/remoteclaw.plugin.json +9 -0
  1984. package/extensions/tlon/src/account-fields.ts +25 -0
  1985. package/extensions/tlon/src/channel.ts +384 -0
  1986. package/extensions/tlon/src/config-schema.ts +41 -0
  1987. package/extensions/tlon/src/monitor/discovery.ts +78 -0
  1988. package/extensions/tlon/src/monitor/history.ts +92 -0
  1989. package/extensions/tlon/src/monitor/index.ts +596 -0
  1990. package/extensions/tlon/src/monitor/processed-messages.ts +33 -0
  1991. package/extensions/tlon/src/monitor/utils.ts +106 -0
  1992. package/extensions/tlon/src/onboarding.ts +229 -0
  1993. package/extensions/tlon/src/runtime.ts +14 -0
  1994. package/extensions/tlon/src/targets.ts +89 -0
  1995. package/extensions/tlon/src/types.ts +99 -0
  1996. package/extensions/tlon/src/urbit/auth.ts +48 -0
  1997. package/extensions/tlon/src/urbit/base-url.ts +57 -0
  1998. package/extensions/tlon/src/urbit/channel-client.ts +158 -0
  1999. package/extensions/tlon/src/urbit/channel-ops.ts +164 -0
  2000. package/extensions/tlon/src/urbit/context.ts +47 -0
  2001. package/extensions/tlon/src/urbit/errors.ts +51 -0
  2002. package/extensions/tlon/src/urbit/fetch.ts +39 -0
  2003. package/extensions/tlon/src/urbit/send.ts +131 -0
  2004. package/extensions/tlon/src/urbit/sse-client.ts +431 -0
  2005. package/extensions/twitch/CHANGELOG.md +39 -0
  2006. package/extensions/twitch/README.md +89 -0
  2007. package/extensions/twitch/index.ts +20 -0
  2008. package/extensions/twitch/package.json +17 -0
  2009. package/extensions/twitch/remoteclaw.plugin.json +9 -0
  2010. package/extensions/twitch/src/access-control.ts +166 -0
  2011. package/extensions/twitch/src/actions.ts +174 -0
  2012. package/extensions/twitch/src/client-manager-registry.ts +115 -0
  2013. package/extensions/twitch/src/config-schema.ts +84 -0
  2014. package/extensions/twitch/src/config.ts +116 -0
  2015. package/extensions/twitch/src/monitor.ts +273 -0
  2016. package/extensions/twitch/src/onboarding.ts +417 -0
  2017. package/extensions/twitch/src/outbound.ts +187 -0
  2018. package/extensions/twitch/src/plugin.ts +274 -0
  2019. package/extensions/twitch/src/probe.ts +119 -0
  2020. package/extensions/twitch/src/resolver.ts +137 -0
  2021. package/extensions/twitch/src/runtime.ts +14 -0
  2022. package/extensions/twitch/src/send.ts +136 -0
  2023. package/extensions/twitch/src/status.ts +179 -0
  2024. package/extensions/twitch/src/test-fixtures.ts +30 -0
  2025. package/extensions/twitch/src/token.ts +94 -0
  2026. package/extensions/twitch/src/twitch-client.ts +277 -0
  2027. package/extensions/twitch/src/types.ts +141 -0
  2028. package/extensions/twitch/src/utils/markdown.ts +98 -0
  2029. package/extensions/twitch/src/utils/twitch.ts +80 -0
  2030. package/extensions/voice-call/CHANGELOG.md +49 -0
  2031. package/extensions/voice-call/README.md +181 -0
  2032. package/extensions/voice-call/index.ts +512 -0
  2033. package/extensions/voice-call/package.json +16 -0
  2034. package/extensions/voice-call/remoteclaw.plugin.json +559 -0
  2035. package/extensions/voice-call/src/allowlist.ts +19 -0
  2036. package/extensions/voice-call/src/cli.ts +380 -0
  2037. package/extensions/voice-call/src/config.ts +477 -0
  2038. package/extensions/voice-call/src/core-bridge.ts +170 -0
  2039. package/extensions/voice-call/src/manager/context.ts +41 -0
  2040. package/extensions/voice-call/src/manager/events.ts +242 -0
  2041. package/extensions/voice-call/src/manager/lookup.ts +35 -0
  2042. package/extensions/voice-call/src/manager/outbound.ts +380 -0
  2043. package/extensions/voice-call/src/manager/state.ts +48 -0
  2044. package/extensions/voice-call/src/manager/store.ts +94 -0
  2045. package/extensions/voice-call/src/manager/timers.ts +112 -0
  2046. package/extensions/voice-call/src/manager/twiml.ts +9 -0
  2047. package/extensions/voice-call/src/manager.ts +209 -0
  2048. package/extensions/voice-call/src/media-stream.ts +527 -0
  2049. package/extensions/voice-call/src/providers/base.ts +67 -0
  2050. package/extensions/voice-call/src/providers/index.ts +10 -0
  2051. package/extensions/voice-call/src/providers/mock.ts +165 -0
  2052. package/extensions/voice-call/src/providers/plivo.ts +560 -0
  2053. package/extensions/voice-call/src/providers/stt-openai-realtime.ts +311 -0
  2054. package/extensions/voice-call/src/providers/telnyx.ts +318 -0
  2055. package/extensions/voice-call/src/providers/tts-openai.ts +259 -0
  2056. package/extensions/voice-call/src/providers/twilio/api.ts +42 -0
  2057. package/extensions/voice-call/src/providers/twilio/webhook.ts +33 -0
  2058. package/extensions/voice-call/src/providers/twilio.ts +688 -0
  2059. package/extensions/voice-call/src/response-generator.ts +174 -0
  2060. package/extensions/voice-call/src/runtime.ts +217 -0
  2061. package/extensions/voice-call/src/telephony-audio.ts +90 -0
  2062. package/extensions/voice-call/src/telephony-tts.ts +106 -0
  2063. package/extensions/voice-call/src/tunnel.ts +314 -0
  2064. package/extensions/voice-call/src/types.ts +280 -0
  2065. package/extensions/voice-call/src/utils.ts +14 -0
  2066. package/extensions/voice-call/src/voice-mapping.ts +67 -0
  2067. package/extensions/voice-call/src/webhook-security.ts +880 -0
  2068. package/extensions/voice-call/src/webhook.ts +556 -0
  2069. package/extensions/whatsapp/index.ts +17 -0
  2070. package/extensions/whatsapp/package.json +12 -0
  2071. package/extensions/whatsapp/remoteclaw.plugin.json +9 -0
  2072. package/extensions/whatsapp/src/channel.ts +459 -0
  2073. package/extensions/whatsapp/src/runtime.ts +14 -0
  2074. package/extensions/zalo/CHANGELOG.md +29 -0
  2075. package/extensions/zalo/README.md +50 -0
  2076. package/extensions/zalo/index.ts +19 -0
  2077. package/extensions/zalo/package.json +32 -0
  2078. package/extensions/zalo/remoteclaw.plugin.json +9 -0
  2079. package/extensions/zalo/src/accounts.ts +82 -0
  2080. package/extensions/zalo/src/actions.ts +56 -0
  2081. package/extensions/zalo/src/api.ts +208 -0
  2082. package/extensions/zalo/src/channel.ts +398 -0
  2083. package/extensions/zalo/src/config-schema.ts +27 -0
  2084. package/extensions/zalo/src/group-access.ts +48 -0
  2085. package/extensions/zalo/src/monitor.ts +675 -0
  2086. package/extensions/zalo/src/monitor.webhook.ts +219 -0
  2087. package/extensions/zalo/src/onboarding.ts +398 -0
  2088. package/extensions/zalo/src/probe.ts +45 -0
  2089. package/extensions/zalo/src/proxy.ts +24 -0
  2090. package/extensions/zalo/src/runtime.ts +14 -0
  2091. package/extensions/zalo/src/send.ts +124 -0
  2092. package/extensions/zalo/src/status-issues.ts +53 -0
  2093. package/extensions/zalo/src/token.ts +62 -0
  2094. package/extensions/zalo/src/types.ts +48 -0
  2095. package/extensions/zalouser/CHANGELOG.md +31 -0
  2096. package/extensions/zalouser/README.md +225 -0
  2097. package/extensions/zalouser/index.ts +31 -0
  2098. package/extensions/zalouser/package.json +32 -0
  2099. package/extensions/zalouser/remoteclaw.plugin.json +9 -0
  2100. package/extensions/zalouser/src/accounts.ts +138 -0
  2101. package/extensions/zalouser/src/channel.ts +652 -0
  2102. package/extensions/zalouser/src/config-schema.ts +28 -0
  2103. package/extensions/zalouser/src/monitor.ts +619 -0
  2104. package/extensions/zalouser/src/onboarding.ts +428 -0
  2105. package/extensions/zalouser/src/probe.ts +27 -0
  2106. package/extensions/zalouser/src/runtime.ts +14 -0
  2107. package/extensions/zalouser/src/send.ts +141 -0
  2108. package/extensions/zalouser/src/status-issues.ts +89 -0
  2109. package/extensions/zalouser/src/tool.ts +166 -0
  2110. package/extensions/zalouser/src/types.ts +105 -0
  2111. package/extensions/zalouser/src/zca.ts +198 -0
  2112. package/package.json +251 -15
  2113. package/remoteclaw.mjs +56 -0
  2114. package/index.js +0 -4
@@ -0,0 +1,2595 @@
1
+ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
+ import { v as resolveRequiredHomeDir } from "./paths-BTaH3rLn.js";
3
+ import { f as normalizeE164 } from "./utils-LBKvDoPx.js";
4
+ import { t as createSubsystemLogger } from "./subsystem-COd61u0P.js";
5
+ import { c as normalizeMainKey, g as normalizeOptionalAccountId, l as resolveAgentIdFromSessionKey, r as buildAgentMainSessionKey, s as normalizeAgentId, t as DEFAULT_AGENT_ID } from "./session-key-5YLnn_qf.js";
6
+ import { c as normalizeMessageChannel, s as listDeliverableMessageChannels } from "./message-channel-DzJqHVZD.js";
7
+ import { _ as parseDurationMs, i as loadConfig, v as parseByteSize } from "./config-D5XU45KD.js";
8
+ import { a as normalizeHyphenSlug, t as getChannelDock } from "./dock-CQuu41bw.js";
9
+ import { t as normalizeChatType } from "./chat-type-DKb2TlGZ.js";
10
+ import { n as resolveConversationLabel } from "./conversation-label-D1frnvYe.js";
11
+ import { n as isPidAlive, t as resolveProcessScopedMap } from "./process-scoped-map-CV9kDvfG.js";
12
+ import { r as normalizeChannelId } from "./plugins-woGRXMzU.js";
13
+ import { a as hasToolCall, c as resolveSessionFilePath, d as resolveSessionTranscriptPathInDir, f as resolveSessionTranscriptsDir, h as validateSessionId, i as extractToolCallNames, l as resolveSessionFilePathOptions, m as resolveStorePath, n as stripMessageIdHints, o as SAFE_SESSION_ID_RE, p as resolveSessionTranscriptsDirForAgent, s as resolveDefaultSessionStorePath, t as stripEnvelope, u as resolveSessionTranscriptPath } from "./chat-envelope-el7Uo-Fe.js";
14
+ import { n as hasInterSessionUserProvenance } from "./input-provenance-Bn6thJNm.js";
15
+ import { t as stripInboundMetadata } from "./strip-inbound-meta-jy3bkUab.js";
16
+ import fs from "node:fs";
17
+ import os from "node:os";
18
+ import path from "node:path";
19
+ import fs$1 from "node:fs/promises";
20
+ import crypto from "node:crypto";
21
+
22
+ //#region src/agents/session-write-lock.ts
23
+ const CLEANUP_SIGNALS = [
24
+ "SIGINT",
25
+ "SIGTERM",
26
+ "SIGQUIT",
27
+ "SIGABRT"
28
+ ];
29
+ const CLEANUP_STATE_KEY = Symbol.for("remoteclaw.sessionWriteLockCleanupState");
30
+ const HELD_LOCKS_KEY = Symbol.for("remoteclaw.sessionWriteLockHeldLocks");
31
+ const WATCHDOG_STATE_KEY = Symbol.for("remoteclaw.sessionWriteLockWatchdogState");
32
+ const DEFAULT_STALE_MS = 1800 * 1e3;
33
+ const DEFAULT_MAX_HOLD_MS = 300 * 1e3;
34
+ const DEFAULT_WATCHDOG_INTERVAL_MS = 6e4;
35
+ const DEFAULT_TIMEOUT_GRACE_MS = 120 * 1e3;
36
+ const HELD_LOCKS = resolveProcessScopedMap(HELD_LOCKS_KEY);
37
+ function resolveCleanupState() {
38
+ const proc = process;
39
+ if (!proc[CLEANUP_STATE_KEY]) proc[CLEANUP_STATE_KEY] = {
40
+ registered: false,
41
+ cleanupHandlers: /* @__PURE__ */ new Map()
42
+ };
43
+ return proc[CLEANUP_STATE_KEY];
44
+ }
45
+ function resolveWatchdogState() {
46
+ const proc = process;
47
+ if (!proc[WATCHDOG_STATE_KEY]) proc[WATCHDOG_STATE_KEY] = {
48
+ started: false,
49
+ intervalMs: DEFAULT_WATCHDOG_INTERVAL_MS
50
+ };
51
+ return proc[WATCHDOG_STATE_KEY];
52
+ }
53
+ function resolvePositiveMs(value, fallback, opts = {}) {
54
+ if (typeof value !== "number" || Number.isNaN(value) || value <= 0) return fallback;
55
+ if (value === Number.POSITIVE_INFINITY) return opts.allowInfinity ? value : fallback;
56
+ if (!Number.isFinite(value)) return fallback;
57
+ return value;
58
+ }
59
+ async function releaseHeldLock(normalizedSessionFile, held, opts = {}) {
60
+ if (HELD_LOCKS.get(normalizedSessionFile) !== held) return false;
61
+ if (opts.force) held.count = 0;
62
+ else {
63
+ held.count -= 1;
64
+ if (held.count > 0) return false;
65
+ }
66
+ if (held.releasePromise) {
67
+ await held.releasePromise.catch(() => void 0);
68
+ return true;
69
+ }
70
+ HELD_LOCKS.delete(normalizedSessionFile);
71
+ held.releasePromise = (async () => {
72
+ try {
73
+ await held.handle.close();
74
+ } catch {}
75
+ try {
76
+ await fs$1.rm(held.lockPath, { force: true });
77
+ } catch {}
78
+ })();
79
+ try {
80
+ await held.releasePromise;
81
+ return true;
82
+ } finally {
83
+ held.releasePromise = void 0;
84
+ }
85
+ }
86
+ /**
87
+ * Synchronously release all held locks.
88
+ * Used during process exit when async operations aren't reliable.
89
+ */
90
+ function releaseAllLocksSync() {
91
+ for (const [sessionFile, held] of HELD_LOCKS) {
92
+ try {
93
+ if (typeof held.handle.close === "function") held.handle.close().catch(() => {});
94
+ } catch {}
95
+ try {
96
+ fs.rmSync(held.lockPath, { force: true });
97
+ } catch {}
98
+ HELD_LOCKS.delete(sessionFile);
99
+ }
100
+ }
101
+ async function runLockWatchdogCheck(nowMs = Date.now()) {
102
+ let released = 0;
103
+ for (const [sessionFile, held] of HELD_LOCKS.entries()) {
104
+ const heldForMs = nowMs - held.acquiredAt;
105
+ if (heldForMs <= held.maxHoldMs) continue;
106
+ console.warn(`[session-write-lock] releasing lock held for ${heldForMs}ms (max=${held.maxHoldMs}ms): ${held.lockPath}`);
107
+ if (await releaseHeldLock(sessionFile, held, { force: true })) released += 1;
108
+ }
109
+ return released;
110
+ }
111
+ function ensureWatchdogStarted(intervalMs) {
112
+ const watchdogState = resolveWatchdogState();
113
+ if (watchdogState.started) return;
114
+ watchdogState.started = true;
115
+ watchdogState.intervalMs = intervalMs;
116
+ watchdogState.timer = setInterval(() => {
117
+ runLockWatchdogCheck().catch(() => {});
118
+ }, intervalMs);
119
+ watchdogState.timer.unref?.();
120
+ }
121
+ function handleTerminationSignal(signal) {
122
+ releaseAllLocksSync();
123
+ const cleanupState = resolveCleanupState();
124
+ if (process.listenerCount(signal) === 1) {
125
+ const handler = cleanupState.cleanupHandlers.get(signal);
126
+ if (handler) {
127
+ process.off(signal, handler);
128
+ cleanupState.cleanupHandlers.delete(signal);
129
+ }
130
+ try {
131
+ process.kill(process.pid, signal);
132
+ } catch {}
133
+ }
134
+ }
135
+ function registerCleanupHandlers() {
136
+ const cleanupState = resolveCleanupState();
137
+ if (!cleanupState.registered) {
138
+ cleanupState.registered = true;
139
+ process.on("exit", () => {
140
+ releaseAllLocksSync();
141
+ });
142
+ }
143
+ ensureWatchdogStarted(DEFAULT_WATCHDOG_INTERVAL_MS);
144
+ for (const signal of CLEANUP_SIGNALS) {
145
+ if (cleanupState.cleanupHandlers.has(signal)) continue;
146
+ try {
147
+ const handler = () => handleTerminationSignal(signal);
148
+ cleanupState.cleanupHandlers.set(signal, handler);
149
+ process.on(signal, handler);
150
+ } catch {}
151
+ }
152
+ }
153
+ async function readLockPayload(lockPath) {
154
+ try {
155
+ const raw = await fs$1.readFile(lockPath, "utf8");
156
+ const parsed = JSON.parse(raw);
157
+ const payload = {};
158
+ if (typeof parsed.pid === "number") payload.pid = parsed.pid;
159
+ if (typeof parsed.createdAt === "string") payload.createdAt = parsed.createdAt;
160
+ return payload;
161
+ } catch {
162
+ return null;
163
+ }
164
+ }
165
+ function inspectLockPayload(payload, staleMs, nowMs) {
166
+ const pid = typeof payload?.pid === "number" ? payload.pid : null;
167
+ const pidAlive = pid !== null ? isPidAlive(pid) : false;
168
+ const createdAt = typeof payload?.createdAt === "string" ? payload.createdAt : null;
169
+ const createdAtMs = createdAt ? Date.parse(createdAt) : NaN;
170
+ const ageMs = Number.isFinite(createdAtMs) ? Math.max(0, nowMs - createdAtMs) : null;
171
+ const staleReasons = [];
172
+ if (pid === null) staleReasons.push("missing-pid");
173
+ else if (!pidAlive) staleReasons.push("dead-pid");
174
+ if (ageMs === null) staleReasons.push("invalid-createdAt");
175
+ else if (ageMs > staleMs) staleReasons.push("too-old");
176
+ return {
177
+ pid,
178
+ pidAlive,
179
+ createdAt,
180
+ ageMs,
181
+ stale: staleReasons.length > 0,
182
+ staleReasons
183
+ };
184
+ }
185
+ function lockInspectionNeedsMtimeStaleFallback(details) {
186
+ return details.stale && details.staleReasons.every((reason) => reason === "missing-pid" || reason === "invalid-createdAt");
187
+ }
188
+ async function shouldReclaimContendedLockFile(lockPath, details, staleMs, nowMs) {
189
+ if (!details.stale) return false;
190
+ if (!lockInspectionNeedsMtimeStaleFallback(details)) return true;
191
+ try {
192
+ const stat = await fs$1.stat(lockPath);
193
+ return Math.max(0, nowMs - stat.mtimeMs) > staleMs;
194
+ } catch (error) {
195
+ return error?.code !== "ENOENT";
196
+ }
197
+ }
198
+ async function cleanStaleLockFiles(params) {
199
+ const sessionsDir = path.resolve(params.sessionsDir);
200
+ const staleMs = resolvePositiveMs(params.staleMs, DEFAULT_STALE_MS);
201
+ const removeStale = params.removeStale !== false;
202
+ const nowMs = params.nowMs ?? Date.now();
203
+ let entries = [];
204
+ try {
205
+ entries = await fs$1.readdir(sessionsDir, { withFileTypes: true });
206
+ } catch (err) {
207
+ if (err.code === "ENOENT") return {
208
+ locks: [],
209
+ cleaned: []
210
+ };
211
+ throw err;
212
+ }
213
+ const locks = [];
214
+ const cleaned = [];
215
+ const lockEntries = entries.filter((entry) => entry.name.endsWith(".jsonl.lock")).toSorted((a, b) => a.name.localeCompare(b.name));
216
+ for (const entry of lockEntries) {
217
+ const lockPath = path.join(sessionsDir, entry.name);
218
+ const lockInfo = {
219
+ lockPath,
220
+ ...inspectLockPayload(await readLockPayload(lockPath), staleMs, nowMs),
221
+ removed: false
222
+ };
223
+ if (lockInfo.stale && removeStale) {
224
+ await fs$1.rm(lockPath, { force: true });
225
+ lockInfo.removed = true;
226
+ cleaned.push(lockInfo);
227
+ params.log?.warn?.(`removed stale session lock: ${lockPath} (${lockInfo.staleReasons.join(", ") || "unknown"})`);
228
+ }
229
+ locks.push(lockInfo);
230
+ }
231
+ return {
232
+ locks,
233
+ cleaned
234
+ };
235
+ }
236
+ async function acquireSessionWriteLock(params) {
237
+ registerCleanupHandlers();
238
+ const timeoutMs = resolvePositiveMs(params.timeoutMs, 1e4, { allowInfinity: true });
239
+ const staleMs = resolvePositiveMs(params.staleMs, DEFAULT_STALE_MS);
240
+ const maxHoldMs = resolvePositiveMs(params.maxHoldMs, DEFAULT_MAX_HOLD_MS);
241
+ const sessionFile = path.resolve(params.sessionFile);
242
+ const sessionDir = path.dirname(sessionFile);
243
+ await fs$1.mkdir(sessionDir, { recursive: true });
244
+ let normalizedDir = sessionDir;
245
+ try {
246
+ normalizedDir = await fs$1.realpath(sessionDir);
247
+ } catch {}
248
+ const normalizedSessionFile = path.join(normalizedDir, path.basename(sessionFile));
249
+ const lockPath = `${normalizedSessionFile}.lock`;
250
+ const allowReentrant = params.allowReentrant ?? true;
251
+ const held = HELD_LOCKS.get(normalizedSessionFile);
252
+ if (allowReentrant && held) {
253
+ held.count += 1;
254
+ return { release: async () => {
255
+ await releaseHeldLock(normalizedSessionFile, held);
256
+ } };
257
+ }
258
+ const startedAt = Date.now();
259
+ let attempt = 0;
260
+ while (Date.now() - startedAt < timeoutMs) {
261
+ attempt += 1;
262
+ let handle = null;
263
+ try {
264
+ handle = await fs$1.open(lockPath, "wx");
265
+ const createdAt = (/* @__PURE__ */ new Date()).toISOString();
266
+ await handle.writeFile(JSON.stringify({
267
+ pid: process.pid,
268
+ createdAt
269
+ }, null, 2), "utf8");
270
+ const createdHeld = {
271
+ count: 1,
272
+ handle,
273
+ lockPath,
274
+ acquiredAt: Date.now(),
275
+ maxHoldMs
276
+ };
277
+ HELD_LOCKS.set(normalizedSessionFile, createdHeld);
278
+ return { release: async () => {
279
+ await releaseHeldLock(normalizedSessionFile, createdHeld);
280
+ } };
281
+ } catch (err) {
282
+ if (handle) {
283
+ try {
284
+ await handle.close();
285
+ } catch {}
286
+ try {
287
+ await fs$1.rm(lockPath, { force: true });
288
+ } catch {}
289
+ }
290
+ if (err.code !== "EEXIST") throw err;
291
+ const payload = await readLockPayload(lockPath);
292
+ const nowMs = Date.now();
293
+ if (await shouldReclaimContendedLockFile(lockPath, inspectLockPayload(payload, staleMs, nowMs), staleMs, nowMs)) {
294
+ await fs$1.rm(lockPath, { force: true });
295
+ continue;
296
+ }
297
+ const delay = Math.min(1e3, 50 * attempt);
298
+ await new Promise((r) => setTimeout(r, delay));
299
+ }
300
+ }
301
+ const payload = await readLockPayload(lockPath);
302
+ const owner = typeof payload?.pid === "number" ? `pid=${payload.pid}` : "unknown";
303
+ throw new Error(`session file locked (timeout ${timeoutMs}ms): ${owner} ${lockPath}`);
304
+ }
305
+ const __testing = {
306
+ cleanupSignals: [...CLEANUP_SIGNALS],
307
+ handleTerminationSignal,
308
+ releaseAllLocksSync,
309
+ runLockWatchdogCheck
310
+ };
311
+
312
+ //#endregion
313
+ //#region src/config/sessions/group.ts
314
+ const getGroupSurfaces = () => new Set([...listDeliverableMessageChannels(), "webchat"]);
315
+ function normalizeGroupLabel(raw) {
316
+ return normalizeHyphenSlug(raw);
317
+ }
318
+ function shortenGroupId(value) {
319
+ const trimmed = value?.trim() ?? "";
320
+ if (!trimmed) return "";
321
+ if (trimmed.length <= 14) return trimmed;
322
+ return `${trimmed.slice(0, 6)}...${trimmed.slice(-4)}`;
323
+ }
324
+ function buildGroupDisplayName(params) {
325
+ const providerKey = (params.provider?.trim().toLowerCase() || "group").trim();
326
+ const groupChannel = params.groupChannel?.trim();
327
+ const space = params.space?.trim();
328
+ const subject = params.subject?.trim();
329
+ const detail = (groupChannel && space ? `${space}${groupChannel.startsWith("#") ? "" : "#"}${groupChannel}` : groupChannel || subject || space || "") || "";
330
+ const fallbackId = params.id?.trim() || params.key;
331
+ const rawLabel = detail || fallbackId;
332
+ let token = normalizeGroupLabel(rawLabel);
333
+ if (!token) token = normalizeGroupLabel(shortenGroupId(rawLabel));
334
+ if (!params.groupChannel && token.startsWith("#")) token = token.replace(/^#+/, "");
335
+ if (token && !/^[@#]/.test(token) && !token.startsWith("g-") && !token.includes("#")) token = `g-${token}`;
336
+ return token ? `${providerKey}:${token}` : providerKey;
337
+ }
338
+ function resolveGroupSessionKey(ctx) {
339
+ const from = typeof ctx.From === "string" ? ctx.From.trim() : "";
340
+ const chatType = ctx.ChatType?.trim().toLowerCase();
341
+ const normalizedChatType = chatType === "channel" ? "channel" : chatType === "group" ? "group" : void 0;
342
+ const isWhatsAppGroupId = from.toLowerCase().endsWith("@g.us");
343
+ if (!(normalizedChatType === "group" || normalizedChatType === "channel" || from.includes(":group:") || from.includes(":channel:") || isWhatsAppGroupId)) return null;
344
+ const providerHint = ctx.Provider?.trim().toLowerCase();
345
+ const parts = from.split(":").filter(Boolean);
346
+ const head = parts[0]?.trim().toLowerCase() ?? "";
347
+ const headIsSurface = head ? getGroupSurfaces().has(head) : false;
348
+ const provider = headIsSurface ? head : providerHint ?? (isWhatsAppGroupId ? "whatsapp" : void 0);
349
+ if (!provider) return null;
350
+ const second = parts[1]?.trim().toLowerCase();
351
+ const secondIsKind = second === "group" || second === "channel";
352
+ const kind = secondIsKind ? second : from.includes(":channel:") || normalizedChatType === "channel" ? "channel" : "group";
353
+ const finalId = (headIsSurface ? secondIsKind ? parts.slice(2).join(":") : parts.slice(1).join(":") : from).trim().toLowerCase();
354
+ if (!finalId) return null;
355
+ return {
356
+ key: `${provider}:${kind}:${finalId}`,
357
+ channel: provider,
358
+ id: finalId,
359
+ chatType: kind === "channel" ? "channel" : "group"
360
+ };
361
+ }
362
+
363
+ //#endregion
364
+ //#region src/config/sessions/artifacts.ts
365
+ const ARCHIVE_TIMESTAMP_RE = /^\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}(?:\.\d{3})?Z$/;
366
+ const LEGACY_STORE_BACKUP_RE = /^sessions\.json\.bak\.\d+$/;
367
+ function hasArchiveSuffix(fileName, reason) {
368
+ const marker = `.${reason}.`;
369
+ const index = fileName.lastIndexOf(marker);
370
+ if (index < 0) return false;
371
+ const raw = fileName.slice(index + marker.length);
372
+ return ARCHIVE_TIMESTAMP_RE.test(raw);
373
+ }
374
+ function isSessionArchiveArtifactName(fileName) {
375
+ if (LEGACY_STORE_BACKUP_RE.test(fileName)) return true;
376
+ return hasArchiveSuffix(fileName, "deleted") || hasArchiveSuffix(fileName, "reset") || hasArchiveSuffix(fileName, "bak");
377
+ }
378
+ function isPrimarySessionTranscriptFileName(fileName) {
379
+ if (fileName === "sessions.json") return false;
380
+ if (!fileName.endsWith(".jsonl")) return false;
381
+ return !isSessionArchiveArtifactName(fileName);
382
+ }
383
+ function formatSessionArchiveTimestamp(nowMs = Date.now()) {
384
+ return new Date(nowMs).toISOString().replaceAll(":", "-");
385
+ }
386
+ function restoreSessionArchiveTimestamp(raw) {
387
+ const [datePart, timePart] = raw.split("T");
388
+ if (!datePart || !timePart) return raw;
389
+ return `${datePart}T${timePart.replace(/-/g, ":")}`;
390
+ }
391
+ function parseSessionArchiveTimestamp(fileName, reason) {
392
+ const marker = `.${reason}.`;
393
+ const index = fileName.lastIndexOf(marker);
394
+ if (index < 0) return null;
395
+ const raw = fileName.slice(index + marker.length);
396
+ if (!raw) return null;
397
+ if (!ARCHIVE_TIMESTAMP_RE.test(raw)) return null;
398
+ const timestamp = Date.parse(restoreSessionArchiveTimestamp(raw));
399
+ return Number.isNaN(timestamp) ? null : timestamp;
400
+ }
401
+
402
+ //#endregion
403
+ //#region src/config/sessions/metadata.ts
404
+ const mergeOrigin = (existing, next) => {
405
+ if (!existing && !next) return;
406
+ const merged = existing ? { ...existing } : {};
407
+ if (next?.label) merged.label = next.label;
408
+ if (next?.provider) merged.provider = next.provider;
409
+ if (next?.surface) merged.surface = next.surface;
410
+ if (next?.chatType) merged.chatType = next.chatType;
411
+ if (next?.from) merged.from = next.from;
412
+ if (next?.to) merged.to = next.to;
413
+ if (next?.accountId) merged.accountId = next.accountId;
414
+ if (next?.threadId != null && next.threadId !== "") merged.threadId = next.threadId;
415
+ return Object.keys(merged).length > 0 ? merged : void 0;
416
+ };
417
+ function deriveSessionOrigin(ctx) {
418
+ const label = resolveConversationLabel(ctx)?.trim();
419
+ const provider = normalizeMessageChannel(typeof ctx.OriginatingChannel === "string" && ctx.OriginatingChannel || ctx.Surface || ctx.Provider);
420
+ const surface = ctx.Surface?.trim().toLowerCase();
421
+ const chatType = normalizeChatType(ctx.ChatType) ?? void 0;
422
+ const from = ctx.From?.trim();
423
+ const to = (typeof ctx.OriginatingTo === "string" ? ctx.OriginatingTo : ctx.To)?.trim() ?? void 0;
424
+ const accountId = ctx.AccountId?.trim();
425
+ const threadId = ctx.MessageThreadId ?? void 0;
426
+ const origin = {};
427
+ if (label) origin.label = label;
428
+ if (provider) origin.provider = provider;
429
+ if (surface) origin.surface = surface;
430
+ if (chatType) origin.chatType = chatType;
431
+ if (from) origin.from = from;
432
+ if (to) origin.to = to;
433
+ if (accountId) origin.accountId = accountId;
434
+ if (threadId != null && threadId !== "") origin.threadId = threadId;
435
+ return Object.keys(origin).length > 0 ? origin : void 0;
436
+ }
437
+ function snapshotSessionOrigin(entry) {
438
+ if (!entry?.origin) return;
439
+ return { ...entry.origin };
440
+ }
441
+ function deriveGroupSessionPatch(params) {
442
+ const resolution = params.groupResolution ?? resolveGroupSessionKey(params.ctx);
443
+ if (!resolution?.channel) return null;
444
+ const channel = resolution.channel;
445
+ const subject = params.ctx.GroupSubject?.trim();
446
+ const space = params.ctx.GroupSpace?.trim();
447
+ const explicitChannel = params.ctx.GroupChannel?.trim();
448
+ const normalizedChannel = normalizeChannelId(channel);
449
+ const isChannelProvider = Boolean(normalizedChannel && getChannelDock(normalizedChannel)?.capabilities.chatTypes.includes("channel"));
450
+ const nextGroupChannel = explicitChannel ?? ((resolution.chatType === "channel" || isChannelProvider) && subject && subject.startsWith("#") ? subject : void 0);
451
+ const nextSubject = nextGroupChannel ? void 0 : subject;
452
+ const patch = {
453
+ chatType: resolution.chatType ?? "group",
454
+ channel,
455
+ groupId: resolution.id
456
+ };
457
+ if (nextSubject) patch.subject = nextSubject;
458
+ if (nextGroupChannel) patch.groupChannel = nextGroupChannel;
459
+ if (space) patch.space = space;
460
+ const displayName = buildGroupDisplayName({
461
+ provider: channel,
462
+ subject: nextSubject ?? params.existing?.subject,
463
+ groupChannel: nextGroupChannel ?? params.existing?.groupChannel,
464
+ space: space ?? params.existing?.space,
465
+ id: resolution.id,
466
+ key: params.sessionKey
467
+ });
468
+ if (displayName) patch.displayName = displayName;
469
+ return patch;
470
+ }
471
+ function deriveSessionMetaPatch(params) {
472
+ const groupPatch = deriveGroupSessionPatch(params);
473
+ const origin = deriveSessionOrigin(params.ctx);
474
+ if (!groupPatch && !origin) return null;
475
+ const patch = groupPatch ? { ...groupPatch } : {};
476
+ const mergedOrigin = mergeOrigin(params.existing?.origin, origin);
477
+ if (mergedOrigin) patch.origin = mergedOrigin;
478
+ return Object.keys(patch).length > 0 ? patch : null;
479
+ }
480
+
481
+ //#endregion
482
+ //#region src/config/sessions/main-session.ts
483
+ function resolveMainSessionKey(cfg) {
484
+ if (cfg?.session?.scope === "global") return "global";
485
+ const agents = cfg?.agents?.list ?? [];
486
+ return buildAgentMainSessionKey({
487
+ agentId: normalizeAgentId(agents.find((agent) => agent?.default)?.id ?? agents[0]?.id ?? DEFAULT_AGENT_ID),
488
+ mainKey: normalizeMainKey(cfg?.session?.mainKey)
489
+ });
490
+ }
491
+ function resolveMainSessionKeyFromConfig() {
492
+ return resolveMainSessionKey(loadConfig());
493
+ }
494
+ function resolveAgentMainSessionKey(params) {
495
+ const mainKey = normalizeMainKey(params.cfg?.session?.mainKey);
496
+ return buildAgentMainSessionKey({
497
+ agentId: params.agentId,
498
+ mainKey
499
+ });
500
+ }
501
+ function resolveExplicitAgentSessionKey(params) {
502
+ const agentId = params.agentId?.trim();
503
+ if (!agentId) return;
504
+ return resolveAgentMainSessionKey({
505
+ cfg: params.cfg,
506
+ agentId
507
+ });
508
+ }
509
+ function canonicalizeMainSessionAlias(params) {
510
+ const raw = params.sessionKey.trim();
511
+ if (!raw) return raw;
512
+ const agentId = normalizeAgentId(params.agentId);
513
+ const mainKey = normalizeMainKey(params.cfg?.session?.mainKey);
514
+ const agentMainSessionKey = buildAgentMainSessionKey({
515
+ agentId,
516
+ mainKey
517
+ });
518
+ const agentMainAliasKey = buildAgentMainSessionKey({
519
+ agentId,
520
+ mainKey: "main"
521
+ });
522
+ const isMainAlias = raw === "main" || raw === mainKey || raw === agentMainSessionKey || raw === agentMainAliasKey;
523
+ if (params.cfg?.session?.scope === "global" && isMainAlias) return "global";
524
+ if (isMainAlias) return agentMainSessionKey;
525
+ return raw;
526
+ }
527
+
528
+ //#endregion
529
+ //#region src/config/sessions/types.ts
530
+ function normalizeRuntimeField(value) {
531
+ const trimmed = value?.trim();
532
+ return trimmed ? trimmed : void 0;
533
+ }
534
+ function normalizeSessionRuntimeModelFields(entry) {
535
+ const normalizedModel = normalizeRuntimeField(entry.model);
536
+ const normalizedProvider = normalizeRuntimeField(entry.modelProvider);
537
+ let next = entry;
538
+ if (!normalizedModel) {
539
+ if (entry.model !== void 0 || entry.modelProvider !== void 0) {
540
+ next = { ...next };
541
+ delete next.model;
542
+ delete next.modelProvider;
543
+ }
544
+ return next;
545
+ }
546
+ if (entry.model !== normalizedModel) {
547
+ if (next === entry) next = { ...next };
548
+ next.model = normalizedModel;
549
+ }
550
+ if (!normalizedProvider) {
551
+ if (entry.modelProvider !== void 0) {
552
+ if (next === entry) next = { ...next };
553
+ delete next.modelProvider;
554
+ }
555
+ return next;
556
+ }
557
+ if (entry.modelProvider !== normalizedProvider) {
558
+ if (next === entry) next = { ...next };
559
+ next.modelProvider = normalizedProvider;
560
+ }
561
+ return next;
562
+ }
563
+ function setSessionRuntimeModel(entry, runtime) {
564
+ const provider = runtime.provider.trim();
565
+ const model = runtime.model.trim();
566
+ if (!provider || !model) return false;
567
+ entry.modelProvider = provider;
568
+ entry.model = model;
569
+ return true;
570
+ }
571
+ function mergeSessionEntry(existing, patch) {
572
+ const sessionId = patch.sessionId ?? existing?.sessionId ?? crypto.randomUUID();
573
+ const updatedAt = Math.max(existing?.updatedAt ?? 0, patch.updatedAt ?? 0, Date.now());
574
+ if (!existing) return normalizeSessionRuntimeModelFields({
575
+ ...patch,
576
+ sessionId,
577
+ updatedAt
578
+ });
579
+ const next = {
580
+ ...existing,
581
+ ...patch,
582
+ sessionId,
583
+ updatedAt
584
+ };
585
+ if (Object.hasOwn(patch, "model") && !Object.hasOwn(patch, "modelProvider")) {
586
+ const patchedModel = normalizeRuntimeField(patch.model);
587
+ const existingModel = normalizeRuntimeField(existing.model);
588
+ if (patchedModel && patchedModel !== existingModel) delete next.modelProvider;
589
+ }
590
+ return normalizeSessionRuntimeModelFields(next);
591
+ }
592
+ function resolveFreshSessionTotalTokens(entry) {
593
+ const total = entry?.totalTokens;
594
+ if (typeof total !== "number" || !Number.isFinite(total) || total < 0) return;
595
+ if (entry?.totalTokensFresh === false) return;
596
+ return total;
597
+ }
598
+ function isSessionTotalTokensFresh(entry) {
599
+ return resolveFreshSessionTotalTokens(entry) !== void 0;
600
+ }
601
+ const DEFAULT_RESET_TRIGGER = "/new";
602
+ const DEFAULT_RESET_TRIGGERS = ["/new", "/reset"];
603
+ const DEFAULT_IDLE_MINUTES = 60;
604
+
605
+ //#endregion
606
+ //#region src/config/sessions/reset.ts
607
+ const DEFAULT_RESET_MODE = "daily";
608
+ const DEFAULT_RESET_AT_HOUR = 4;
609
+ const THREAD_SESSION_MARKERS = [":thread:", ":topic:"];
610
+ const GROUP_SESSION_MARKERS = [":group:", ":channel:"];
611
+ function isThreadSessionKey(sessionKey) {
612
+ const normalized = (sessionKey ?? "").toLowerCase();
613
+ if (!normalized) return false;
614
+ return THREAD_SESSION_MARKERS.some((marker) => normalized.includes(marker));
615
+ }
616
+ function resolveSessionResetType(params) {
617
+ if (params.isThread || isThreadSessionKey(params.sessionKey)) return "thread";
618
+ if (params.isGroup) return "group";
619
+ const normalized = (params.sessionKey ?? "").toLowerCase();
620
+ if (GROUP_SESSION_MARKERS.some((marker) => normalized.includes(marker))) return "group";
621
+ return "direct";
622
+ }
623
+ function resolveThreadFlag(params) {
624
+ if (params.messageThreadId != null) return true;
625
+ if (params.threadLabel?.trim()) return true;
626
+ if (params.threadStarterBody?.trim()) return true;
627
+ if (params.parentSessionKey?.trim()) return true;
628
+ return isThreadSessionKey(params.sessionKey);
629
+ }
630
+ function resolveDailyResetAtMs(now, atHour) {
631
+ const normalizedAtHour = normalizeResetAtHour(atHour);
632
+ const resetAt = new Date(now);
633
+ resetAt.setHours(normalizedAtHour, 0, 0, 0);
634
+ if (now < resetAt.getTime()) resetAt.setDate(resetAt.getDate() - 1);
635
+ return resetAt.getTime();
636
+ }
637
+ function resolveSessionResetPolicy(params) {
638
+ const sessionCfg = params.sessionCfg;
639
+ const baseReset = params.resetOverride ?? sessionCfg?.reset;
640
+ const typeReset = params.resetOverride ? void 0 : sessionCfg?.resetByType?.[params.resetType] ?? (params.resetType === "direct" ? (sessionCfg?.resetByType)?.dm : void 0);
641
+ const hasExplicitReset = Boolean(baseReset || sessionCfg?.resetByType);
642
+ const legacyIdleMinutes = params.resetOverride ? void 0 : sessionCfg?.idleMinutes;
643
+ const mode = typeReset?.mode ?? baseReset?.mode ?? (!hasExplicitReset && legacyIdleMinutes != null ? "idle" : DEFAULT_RESET_MODE);
644
+ const atHour = normalizeResetAtHour(typeReset?.atHour ?? baseReset?.atHour ?? DEFAULT_RESET_AT_HOUR);
645
+ const idleMinutesRaw = typeReset?.idleMinutes ?? baseReset?.idleMinutes ?? legacyIdleMinutes;
646
+ let idleMinutes;
647
+ if (idleMinutesRaw != null) {
648
+ const normalized = Math.floor(idleMinutesRaw);
649
+ if (Number.isFinite(normalized)) idleMinutes = Math.max(normalized, 1);
650
+ } else if (mode === "idle") idleMinutes = DEFAULT_IDLE_MINUTES;
651
+ return {
652
+ mode,
653
+ atHour,
654
+ idleMinutes
655
+ };
656
+ }
657
+ function resolveChannelResetConfig(params) {
658
+ const resetByChannel = params.sessionCfg?.resetByChannel;
659
+ if (!resetByChannel) return;
660
+ const normalized = normalizeMessageChannel(params.channel);
661
+ const fallback = params.channel?.trim().toLowerCase();
662
+ const key = normalized ?? fallback;
663
+ if (!key) return;
664
+ return resetByChannel[key] ?? resetByChannel[key.toLowerCase()];
665
+ }
666
+ function evaluateSessionFreshness(params) {
667
+ const dailyResetAt = params.policy.mode === "daily" ? resolveDailyResetAtMs(params.now, params.policy.atHour) : void 0;
668
+ const idleExpiresAt = params.policy.idleMinutes != null ? params.updatedAt + params.policy.idleMinutes * 6e4 : void 0;
669
+ const staleDaily = dailyResetAt != null && params.updatedAt < dailyResetAt;
670
+ const staleIdle = idleExpiresAt != null && params.now > idleExpiresAt;
671
+ return {
672
+ fresh: !(staleDaily || staleIdle),
673
+ dailyResetAt,
674
+ idleExpiresAt
675
+ };
676
+ }
677
+ function normalizeResetAtHour(value) {
678
+ if (typeof value !== "number" || !Number.isFinite(value)) return DEFAULT_RESET_AT_HOUR;
679
+ const normalized = Math.floor(value);
680
+ if (!Number.isFinite(normalized)) return DEFAULT_RESET_AT_HOUR;
681
+ if (normalized < 0) return 0;
682
+ if (normalized > 23) return 23;
683
+ return normalized;
684
+ }
685
+
686
+ //#endregion
687
+ //#region src/config/sessions/session-key.ts
688
+ function deriveSessionKey(scope, ctx) {
689
+ if (scope === "global") return "global";
690
+ const resolvedGroup = resolveGroupSessionKey(ctx);
691
+ if (resolvedGroup) return resolvedGroup.key;
692
+ return (ctx.From ? normalizeE164(ctx.From) : "") || "unknown";
693
+ }
694
+ /**
695
+ * Resolve the session key with a canonical direct-chat bucket (default: "main").
696
+ * All non-group direct chats collapse to this bucket; groups stay isolated.
697
+ */
698
+ function resolveSessionKey(scope, ctx, mainKey) {
699
+ const explicit = ctx.SessionKey?.trim();
700
+ if (explicit) return explicit.toLowerCase();
701
+ const raw = deriveSessionKey(scope, ctx);
702
+ if (scope === "global") return raw;
703
+ const canonical = buildAgentMainSessionKey({
704
+ agentId: DEFAULT_AGENT_ID,
705
+ mainKey: normalizeMainKey(mainKey)
706
+ });
707
+ if (!(raw.includes(":group:") || raw.includes(":channel:"))) return canonical;
708
+ return `agent:${DEFAULT_AGENT_ID}:${raw}`;
709
+ }
710
+
711
+ //#endregion
712
+ //#region src/sessions/transcript-events.ts
713
+ const SESSION_TRANSCRIPT_LISTENERS = /* @__PURE__ */ new Set();
714
+ function emitSessionTranscriptUpdate(sessionFile) {
715
+ const trimmed = sessionFile.trim();
716
+ if (!trimmed) return;
717
+ const update = { sessionFile: trimmed };
718
+ for (const listener of SESSION_TRANSCRIPT_LISTENERS) listener(update);
719
+ }
720
+
721
+ //#endregion
722
+ //#region src/config/sessions/constants.ts
723
+ /** Session transcript format version (matches pi-coding-agent SessionManager v3 layout). */
724
+ const CURRENT_SESSION_VERSION = 3;
725
+
726
+ //#endregion
727
+ //#region src/config/sessions/session-file.ts
728
+ async function resolveAndPersistSessionFile(params) {
729
+ const { sessionId, sessionKey, sessionStore, storePath } = params;
730
+ const baseEntry = params.sessionEntry ?? sessionStore[sessionKey] ?? {
731
+ sessionId,
732
+ updatedAt: Date.now()
733
+ };
734
+ const fallbackSessionFile = params.fallbackSessionFile?.trim();
735
+ const sessionFile = resolveSessionFilePath(sessionId, !baseEntry.sessionFile && fallbackSessionFile ? {
736
+ ...baseEntry,
737
+ sessionFile: fallbackSessionFile
738
+ } : baseEntry, {
739
+ agentId: params.agentId,
740
+ sessionsDir: params.sessionsDir
741
+ });
742
+ const persistedEntry = {
743
+ ...baseEntry,
744
+ sessionId,
745
+ updatedAt: Date.now(),
746
+ sessionFile
747
+ };
748
+ if (baseEntry.sessionId !== sessionId || baseEntry.sessionFile !== sessionFile) {
749
+ sessionStore[sessionKey] = persistedEntry;
750
+ await updateSessionStore(storePath, (store) => {
751
+ store[sessionKey] = {
752
+ ...store[sessionKey],
753
+ ...persistedEntry
754
+ };
755
+ }, params.activeSessionKey ? { activeSessionKey: params.activeSessionKey } : void 0);
756
+ return {
757
+ sessionFile,
758
+ sessionEntry: persistedEntry
759
+ };
760
+ }
761
+ sessionStore[sessionKey] = persistedEntry;
762
+ return {
763
+ sessionFile,
764
+ sessionEntry: persistedEntry
765
+ };
766
+ }
767
+
768
+ //#endregion
769
+ //#region src/config/sessions/transcript.ts
770
+ function stripQuery(value) {
771
+ const noHash = value.split("#")[0] ?? value;
772
+ return noHash.split("?")[0] ?? noHash;
773
+ }
774
+ function extractFileNameFromMediaUrl(value) {
775
+ const trimmed = value.trim();
776
+ if (!trimmed) return null;
777
+ const cleaned = stripQuery(trimmed);
778
+ try {
779
+ const parsed = new URL(cleaned);
780
+ const base = path.basename(parsed.pathname);
781
+ if (!base) return null;
782
+ try {
783
+ return decodeURIComponent(base);
784
+ } catch {
785
+ return base;
786
+ }
787
+ } catch {
788
+ const base = path.basename(cleaned);
789
+ if (!base || base === "/" || base === ".") return null;
790
+ return base;
791
+ }
792
+ }
793
+ function resolveMirroredTranscriptText(params) {
794
+ const mediaUrls = params.mediaUrls?.filter((url) => url && url.trim()) ?? [];
795
+ if (mediaUrls.length > 0) {
796
+ const names = mediaUrls.map((url) => extractFileNameFromMediaUrl(url)).filter((name) => Boolean(name && name.trim()));
797
+ if (names.length > 0) return names.join(", ");
798
+ return "media";
799
+ }
800
+ const trimmed = (params.text ?? "").trim();
801
+ return trimmed ? trimmed : null;
802
+ }
803
+ async function ensureSessionHeader(params) {
804
+ if (fs.existsSync(params.sessionFile)) return;
805
+ await fs.promises.mkdir(path.dirname(params.sessionFile), { recursive: true });
806
+ const header = {
807
+ type: "session",
808
+ version: CURRENT_SESSION_VERSION,
809
+ id: params.sessionId,
810
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
811
+ cwd: process.cwd()
812
+ };
813
+ await fs.promises.writeFile(params.sessionFile, `${JSON.stringify(header)}\n`, {
814
+ encoding: "utf-8",
815
+ mode: 384
816
+ });
817
+ }
818
+ async function appendAssistantMessageToSessionTranscript(params) {
819
+ const sessionKey = params.sessionKey.trim();
820
+ if (!sessionKey) return {
821
+ ok: false,
822
+ reason: "missing sessionKey"
823
+ };
824
+ const mirrorText = resolveMirroredTranscriptText({
825
+ text: params.text,
826
+ mediaUrls: params.mediaUrls
827
+ });
828
+ if (!mirrorText) return {
829
+ ok: false,
830
+ reason: "empty text"
831
+ };
832
+ const storePath = params.storePath ?? resolveDefaultSessionStorePath(params.agentId);
833
+ const store = loadSessionStore(storePath, { skipCache: true });
834
+ const entry = store[sessionKey];
835
+ if (!entry?.sessionId) return {
836
+ ok: false,
837
+ reason: `unknown sessionKey: ${sessionKey}`
838
+ };
839
+ let sessionFile;
840
+ try {
841
+ sessionFile = (await resolveAndPersistSessionFile({
842
+ sessionId: entry.sessionId,
843
+ sessionKey,
844
+ sessionStore: store,
845
+ storePath,
846
+ sessionEntry: entry,
847
+ agentId: params.agentId,
848
+ sessionsDir: path.dirname(storePath)
849
+ })).sessionFile;
850
+ } catch (err) {
851
+ return {
852
+ ok: false,
853
+ reason: err instanceof Error ? err.message : String(err)
854
+ };
855
+ }
856
+ await ensureSessionHeader({
857
+ sessionFile,
858
+ sessionId: entry.sessionId
859
+ });
860
+ const line = {
861
+ type: "message",
862
+ message: {
863
+ role: "assistant",
864
+ content: [{
865
+ type: "text",
866
+ text: mirrorText
867
+ }],
868
+ api: "openai-responses",
869
+ provider: "remoteclaw",
870
+ model: "delivery-mirror",
871
+ usage: {
872
+ input: 0,
873
+ output: 0,
874
+ cacheRead: 0,
875
+ cacheWrite: 0,
876
+ totalTokens: 0,
877
+ cost: {
878
+ input: 0,
879
+ output: 0,
880
+ cacheRead: 0,
881
+ cacheWrite: 0,
882
+ total: 0
883
+ }
884
+ },
885
+ stopReason: "stop",
886
+ timestamp: Date.now()
887
+ }
888
+ };
889
+ await fs.promises.appendFile(sessionFile, `${JSON.stringify(line)}\n`, "utf-8");
890
+ emitSessionTranscriptUpdate(sessionFile);
891
+ return {
892
+ ok: true,
893
+ sessionFile
894
+ };
895
+ }
896
+
897
+ //#endregion
898
+ //#region src/config/sessions/delivery-info.ts
899
+ /**
900
+ * Extract deliveryContext and threadId from a sessionKey.
901
+ * Supports both :thread: (most channels) and :topic: (Telegram).
902
+ */
903
+ function parseSessionThreadInfo(sessionKey) {
904
+ if (!sessionKey) return {
905
+ baseSessionKey: void 0,
906
+ threadId: void 0
907
+ };
908
+ const topicIndex = sessionKey.lastIndexOf(":topic:");
909
+ const threadIndex = sessionKey.lastIndexOf(":thread:");
910
+ const markerIndex = Math.max(topicIndex, threadIndex);
911
+ const marker = topicIndex > threadIndex ? ":topic:" : ":thread:";
912
+ return {
913
+ baseSessionKey: markerIndex === -1 ? sessionKey : sessionKey.slice(0, markerIndex),
914
+ threadId: (markerIndex === -1 ? void 0 : sessionKey.slice(markerIndex + marker.length))?.trim() || void 0
915
+ };
916
+ }
917
+ function extractDeliveryInfo(sessionKey) {
918
+ const { baseSessionKey, threadId } = parseSessionThreadInfo(sessionKey);
919
+ if (!sessionKey || !baseSessionKey) return {
920
+ deliveryContext: void 0,
921
+ threadId
922
+ };
923
+ let deliveryContext;
924
+ try {
925
+ const store = loadSessionStore(resolveStorePath(loadConfig().session?.store));
926
+ let entry = store[sessionKey];
927
+ if (!entry?.deliveryContext && baseSessionKey !== sessionKey) entry = store[baseSessionKey];
928
+ if (entry?.deliveryContext) deliveryContext = {
929
+ channel: entry.deliveryContext.channel,
930
+ to: entry.deliveryContext.to,
931
+ accountId: entry.deliveryContext.accountId
932
+ };
933
+ } catch {}
934
+ return {
935
+ deliveryContext,
936
+ threadId
937
+ };
938
+ }
939
+
940
+ //#endregion
941
+ //#region src/config/sessions/disk-budget.ts
942
+ const NOOP_LOGGER = {
943
+ warn: () => {},
944
+ info: () => {}
945
+ };
946
+ function canonicalizePathForComparison$1(filePath) {
947
+ const resolved = path.resolve(filePath);
948
+ try {
949
+ return fs.realpathSync(resolved);
950
+ } catch {
951
+ return resolved;
952
+ }
953
+ }
954
+ function measureStoreBytes(store) {
955
+ return Buffer.byteLength(JSON.stringify(store, null, 2), "utf-8");
956
+ }
957
+ function measureStoreEntryChunkBytes(key, entry) {
958
+ const singleEntryStore = JSON.stringify({ [key]: entry }, null, 2);
959
+ if (!singleEntryStore.startsWith("{\n") || !singleEntryStore.endsWith("\n}")) return measureStoreBytes({ [key]: entry }) - 4;
960
+ const chunk = singleEntryStore.slice(2, -2);
961
+ return Buffer.byteLength(chunk, "utf-8");
962
+ }
963
+ function buildStoreEntryChunkSizeMap(store) {
964
+ const out = /* @__PURE__ */ new Map();
965
+ for (const [key, entry] of Object.entries(store)) out.set(key, measureStoreEntryChunkBytes(key, entry));
966
+ return out;
967
+ }
968
+ function getEntryUpdatedAt$1(entry) {
969
+ if (!entry) return 0;
970
+ const updatedAt = entry.updatedAt;
971
+ return Number.isFinite(updatedAt) ? updatedAt : 0;
972
+ }
973
+ function buildSessionIdRefCounts(store) {
974
+ const counts = /* @__PURE__ */ new Map();
975
+ for (const entry of Object.values(store)) {
976
+ const sessionId = entry?.sessionId;
977
+ if (!sessionId) continue;
978
+ counts.set(sessionId, (counts.get(sessionId) ?? 0) + 1);
979
+ }
980
+ return counts;
981
+ }
982
+ function resolveSessionTranscriptPathForEntry(params) {
983
+ if (!params.entry.sessionId) return null;
984
+ try {
985
+ const resolved = resolveSessionFilePath(params.entry.sessionId, params.entry, { sessionsDir: params.sessionsDir });
986
+ const resolvedSessionsDir = canonicalizePathForComparison$1(params.sessionsDir);
987
+ const resolvedPath = canonicalizePathForComparison$1(resolved);
988
+ const relative = path.relative(resolvedSessionsDir, resolvedPath);
989
+ if (!relative || relative.startsWith("..") || path.isAbsolute(relative)) return null;
990
+ return resolvedPath;
991
+ } catch {
992
+ return null;
993
+ }
994
+ }
995
+ function resolveReferencedSessionTranscriptPaths(params) {
996
+ const referenced = /* @__PURE__ */ new Set();
997
+ for (const entry of Object.values(params.store)) {
998
+ const resolved = resolveSessionTranscriptPathForEntry({
999
+ sessionsDir: params.sessionsDir,
1000
+ entry
1001
+ });
1002
+ if (resolved) referenced.add(canonicalizePathForComparison$1(resolved));
1003
+ }
1004
+ return referenced;
1005
+ }
1006
+ async function readSessionsDirFiles(sessionsDir) {
1007
+ const dirEntries = await fs.promises.readdir(sessionsDir, { withFileTypes: true }).catch(() => []);
1008
+ const files = [];
1009
+ for (const dirent of dirEntries) {
1010
+ if (!dirent.isFile()) continue;
1011
+ const filePath = path.join(sessionsDir, dirent.name);
1012
+ const stat = await fs.promises.stat(filePath).catch(() => null);
1013
+ if (!stat?.isFile()) continue;
1014
+ files.push({
1015
+ path: filePath,
1016
+ canonicalPath: canonicalizePathForComparison$1(filePath),
1017
+ name: dirent.name,
1018
+ size: stat.size,
1019
+ mtimeMs: stat.mtimeMs
1020
+ });
1021
+ }
1022
+ return files;
1023
+ }
1024
+ async function removeFileIfExists(filePath) {
1025
+ const stat = await fs.promises.stat(filePath).catch(() => null);
1026
+ if (!stat?.isFile()) return 0;
1027
+ await fs.promises.rm(filePath, { force: true }).catch(() => void 0);
1028
+ return stat.size;
1029
+ }
1030
+ async function removeFileForBudget(params) {
1031
+ const resolvedPath = path.resolve(params.filePath);
1032
+ const canonicalPath = params.canonicalPath ?? canonicalizePathForComparison$1(resolvedPath);
1033
+ if (params.dryRun) {
1034
+ if (params.simulatedRemovedPaths.has(canonicalPath)) return 0;
1035
+ const size = params.fileSizesByPath.get(canonicalPath) ?? 0;
1036
+ if (size <= 0) return 0;
1037
+ params.simulatedRemovedPaths.add(canonicalPath);
1038
+ return size;
1039
+ }
1040
+ return removeFileIfExists(resolvedPath);
1041
+ }
1042
+ async function enforceSessionDiskBudget(params) {
1043
+ const maxBytes = params.maintenance.maxDiskBytes;
1044
+ const highWaterBytes = params.maintenance.highWaterBytes;
1045
+ if (maxBytes == null || highWaterBytes == null) return null;
1046
+ const log = params.log ?? NOOP_LOGGER;
1047
+ const dryRun = params.dryRun === true;
1048
+ const sessionsDir = path.dirname(params.storePath);
1049
+ const files = await readSessionsDirFiles(sessionsDir);
1050
+ const fileSizesByPath = new Map(files.map((file) => [file.canonicalPath, file.size]));
1051
+ const simulatedRemovedPaths = /* @__PURE__ */ new Set();
1052
+ const resolvedStorePath = canonicalizePathForComparison$1(params.storePath);
1053
+ const storeFile = files.find((file) => file.canonicalPath === resolvedStorePath);
1054
+ let projectedStoreBytes = measureStoreBytes(params.store);
1055
+ let total = files.reduce((sum, file) => sum + file.size, 0) - (storeFile?.size ?? 0) + projectedStoreBytes;
1056
+ const totalBefore = total;
1057
+ if (total <= maxBytes) return {
1058
+ totalBytesBefore: totalBefore,
1059
+ totalBytesAfter: total,
1060
+ removedFiles: 0,
1061
+ removedEntries: 0,
1062
+ freedBytes: 0,
1063
+ maxBytes,
1064
+ highWaterBytes,
1065
+ overBudget: false
1066
+ };
1067
+ if (params.warnOnly) {
1068
+ log.warn("session disk budget exceeded (warn-only mode)", {
1069
+ sessionsDir,
1070
+ totalBytes: total,
1071
+ maxBytes,
1072
+ highWaterBytes
1073
+ });
1074
+ return {
1075
+ totalBytesBefore: totalBefore,
1076
+ totalBytesAfter: total,
1077
+ removedFiles: 0,
1078
+ removedEntries: 0,
1079
+ freedBytes: 0,
1080
+ maxBytes,
1081
+ highWaterBytes,
1082
+ overBudget: true
1083
+ };
1084
+ }
1085
+ let removedFiles = 0;
1086
+ let removedEntries = 0;
1087
+ let freedBytes = 0;
1088
+ const referencedPaths = resolveReferencedSessionTranscriptPaths({
1089
+ sessionsDir,
1090
+ store: params.store
1091
+ });
1092
+ const removableFileQueue = files.filter((file) => isSessionArchiveArtifactName(file.name) || isPrimarySessionTranscriptFileName(file.name) && !referencedPaths.has(file.canonicalPath)).toSorted((a, b) => a.mtimeMs - b.mtimeMs);
1093
+ for (const file of removableFileQueue) {
1094
+ if (total <= highWaterBytes) break;
1095
+ const deletedBytes = await removeFileForBudget({
1096
+ filePath: file.path,
1097
+ canonicalPath: file.canonicalPath,
1098
+ dryRun,
1099
+ fileSizesByPath,
1100
+ simulatedRemovedPaths
1101
+ });
1102
+ if (deletedBytes <= 0) continue;
1103
+ total -= deletedBytes;
1104
+ freedBytes += deletedBytes;
1105
+ removedFiles += 1;
1106
+ }
1107
+ if (total > highWaterBytes) {
1108
+ const activeSessionKey = params.activeSessionKey?.trim().toLowerCase();
1109
+ const sessionIdRefCounts = buildSessionIdRefCounts(params.store);
1110
+ const entryChunkBytesByKey = buildStoreEntryChunkSizeMap(params.store);
1111
+ const keys = Object.keys(params.store).toSorted((a, b) => {
1112
+ return getEntryUpdatedAt$1(params.store[a]) - getEntryUpdatedAt$1(params.store[b]);
1113
+ });
1114
+ for (const key of keys) {
1115
+ if (total <= highWaterBytes) break;
1116
+ if (activeSessionKey && key.trim().toLowerCase() === activeSessionKey) continue;
1117
+ const entry = params.store[key];
1118
+ if (!entry) continue;
1119
+ const previousProjectedBytes = projectedStoreBytes;
1120
+ delete params.store[key];
1121
+ const chunkBytes = entryChunkBytesByKey.get(key);
1122
+ entryChunkBytesByKey.delete(key);
1123
+ if (typeof chunkBytes === "number" && Number.isFinite(chunkBytes) && chunkBytes >= 0) projectedStoreBytes = Math.max(2, projectedStoreBytes - (chunkBytes + 2));
1124
+ else projectedStoreBytes = measureStoreBytes(params.store);
1125
+ total += projectedStoreBytes - previousProjectedBytes;
1126
+ removedEntries += 1;
1127
+ const sessionId = entry.sessionId;
1128
+ if (!sessionId) continue;
1129
+ const nextRefCount = (sessionIdRefCounts.get(sessionId) ?? 1) - 1;
1130
+ if (nextRefCount > 0) {
1131
+ sessionIdRefCounts.set(sessionId, nextRefCount);
1132
+ continue;
1133
+ }
1134
+ sessionIdRefCounts.delete(sessionId);
1135
+ const transcriptPath = resolveSessionTranscriptPathForEntry({
1136
+ sessionsDir,
1137
+ entry
1138
+ });
1139
+ if (!transcriptPath) continue;
1140
+ const deletedBytes = await removeFileForBudget({
1141
+ filePath: transcriptPath,
1142
+ dryRun,
1143
+ fileSizesByPath,
1144
+ simulatedRemovedPaths
1145
+ });
1146
+ if (deletedBytes <= 0) continue;
1147
+ total -= deletedBytes;
1148
+ freedBytes += deletedBytes;
1149
+ removedFiles += 1;
1150
+ }
1151
+ }
1152
+ if (!dryRun) {
1153
+ if (total > highWaterBytes) log.warn("session disk budget still above high-water target after cleanup", {
1154
+ sessionsDir,
1155
+ totalBytes: total,
1156
+ maxBytes,
1157
+ highWaterBytes,
1158
+ removedFiles,
1159
+ removedEntries
1160
+ });
1161
+ else if (removedFiles > 0 || removedEntries > 0) log.info("applied session disk budget cleanup", {
1162
+ sessionsDir,
1163
+ totalBytesBefore: totalBefore,
1164
+ totalBytesAfter: total,
1165
+ maxBytes,
1166
+ highWaterBytes,
1167
+ removedFiles,
1168
+ removedEntries
1169
+ });
1170
+ }
1171
+ return {
1172
+ totalBytesBefore: totalBefore,
1173
+ totalBytesAfter: total,
1174
+ removedFiles,
1175
+ removedEntries,
1176
+ freedBytes,
1177
+ maxBytes,
1178
+ highWaterBytes,
1179
+ overBudget: true
1180
+ };
1181
+ }
1182
+
1183
+ //#endregion
1184
+ //#region src/config/sessions.ts
1185
+ var sessions_exports = /* @__PURE__ */ __exportAll({
1186
+ DEFAULT_IDLE_MINUTES: () => DEFAULT_IDLE_MINUTES,
1187
+ DEFAULT_RESET_AT_HOUR: () => DEFAULT_RESET_AT_HOUR,
1188
+ DEFAULT_RESET_MODE: () => DEFAULT_RESET_MODE,
1189
+ DEFAULT_RESET_TRIGGER: () => DEFAULT_RESET_TRIGGER,
1190
+ DEFAULT_RESET_TRIGGERS: () => DEFAULT_RESET_TRIGGERS,
1191
+ SAFE_SESSION_ID_RE: () => SAFE_SESSION_ID_RE,
1192
+ appendAssistantMessageToSessionTranscript: () => appendAssistantMessageToSessionTranscript,
1193
+ buildGroupDisplayName: () => buildGroupDisplayName,
1194
+ canonicalizeMainSessionAlias: () => canonicalizeMainSessionAlias,
1195
+ capEntryCount: () => capEntryCount,
1196
+ clearSessionStoreCacheForTest: () => clearSessionStoreCacheForTest,
1197
+ deriveGroupSessionPatch: () => deriveGroupSessionPatch,
1198
+ deriveSessionKey: () => deriveSessionKey,
1199
+ deriveSessionMetaPatch: () => deriveSessionMetaPatch,
1200
+ deriveSessionOrigin: () => deriveSessionOrigin,
1201
+ enforceSessionDiskBudget: () => enforceSessionDiskBudget,
1202
+ evaluateSessionFreshness: () => evaluateSessionFreshness,
1203
+ extractDeliveryInfo: () => extractDeliveryInfo,
1204
+ formatSessionArchiveTimestamp: () => formatSessionArchiveTimestamp,
1205
+ getActiveSessionMaintenanceWarning: () => getActiveSessionMaintenanceWarning,
1206
+ getSessionStoreLockQueueSizeForTest: () => getSessionStoreLockQueueSizeForTest,
1207
+ isPrimarySessionTranscriptFileName: () => isPrimarySessionTranscriptFileName,
1208
+ isSessionArchiveArtifactName: () => isSessionArchiveArtifactName,
1209
+ isSessionTotalTokensFresh: () => isSessionTotalTokensFresh,
1210
+ isThreadSessionKey: () => isThreadSessionKey,
1211
+ loadSessionStore: () => loadSessionStore,
1212
+ mergeSessionEntry: () => mergeSessionEntry,
1213
+ normalizeSessionRuntimeModelFields: () => normalizeSessionRuntimeModelFields,
1214
+ parseSessionArchiveTimestamp: () => parseSessionArchiveTimestamp,
1215
+ parseSessionThreadInfo: () => parseSessionThreadInfo,
1216
+ pruneStaleEntries: () => pruneStaleEntries,
1217
+ readSessionUpdatedAt: () => readSessionUpdatedAt,
1218
+ recordSessionMetaFromInbound: () => recordSessionMetaFromInbound,
1219
+ resolveAgentIdFromSessionKey: () => resolveAgentIdFromSessionKey,
1220
+ resolveAgentMainSessionKey: () => resolveAgentMainSessionKey,
1221
+ resolveAndPersistSessionFile: () => resolveAndPersistSessionFile,
1222
+ resolveChannelResetConfig: () => resolveChannelResetConfig,
1223
+ resolveDailyResetAtMs: () => resolveDailyResetAtMs,
1224
+ resolveDefaultSessionStorePath: () => resolveDefaultSessionStorePath,
1225
+ resolveExplicitAgentSessionKey: () => resolveExplicitAgentSessionKey,
1226
+ resolveFreshSessionTotalTokens: () => resolveFreshSessionTotalTokens,
1227
+ resolveGroupSessionKey: () => resolveGroupSessionKey,
1228
+ resolveMainSessionKey: () => resolveMainSessionKey,
1229
+ resolveMainSessionKeyFromConfig: () => resolveMainSessionKeyFromConfig,
1230
+ resolveMaintenanceConfig: () => resolveMaintenanceConfig,
1231
+ resolveMirroredTranscriptText: () => resolveMirroredTranscriptText,
1232
+ resolveSessionFilePath: () => resolveSessionFilePath,
1233
+ resolveSessionFilePathOptions: () => resolveSessionFilePathOptions,
1234
+ resolveSessionKey: () => resolveSessionKey,
1235
+ resolveSessionResetPolicy: () => resolveSessionResetPolicy,
1236
+ resolveSessionResetType: () => resolveSessionResetType,
1237
+ resolveSessionTranscriptPath: () => resolveSessionTranscriptPath,
1238
+ resolveSessionTranscriptPathInDir: () => resolveSessionTranscriptPathInDir,
1239
+ resolveSessionTranscriptsDir: () => resolveSessionTranscriptsDir,
1240
+ resolveSessionTranscriptsDirForAgent: () => resolveSessionTranscriptsDirForAgent,
1241
+ resolveStorePath: () => resolveStorePath,
1242
+ resolveThreadFlag: () => resolveThreadFlag,
1243
+ rotateSessionFile: () => rotateSessionFile,
1244
+ saveSessionStore: () => saveSessionStore,
1245
+ setSessionRuntimeModel: () => setSessionRuntimeModel,
1246
+ snapshotSessionOrigin: () => snapshotSessionOrigin,
1247
+ updateLastRoute: () => updateLastRoute,
1248
+ updateSessionStore: () => updateSessionStore,
1249
+ updateSessionStoreEntry: () => updateSessionStoreEntry,
1250
+ validateSessionId: () => validateSessionId,
1251
+ withSessionStoreLockForTest: () => withSessionStoreLockForTest
1252
+ });
1253
+
1254
+ //#endregion
1255
+ //#region src/utils/directive-tags.ts
1256
+ const AUDIO_TAG_RE = /\[\[\s*audio_as_voice\s*\]\]/gi;
1257
+ const REPLY_TAG_RE = /\[\[\s*(?:reply_to_current|reply_to\s*:\s*([^\]\n]+))\s*\]\]/gi;
1258
+ function normalizeDirectiveWhitespace(text) {
1259
+ return text.replace(/[ \t]+/g, " ").replace(/[ \t]*\n[ \t]*/g, "\n").trim();
1260
+ }
1261
+ function stripInlineDirectiveTagsForDisplay(text) {
1262
+ if (!text) return {
1263
+ text,
1264
+ changed: false
1265
+ };
1266
+ const stripped = text.replace(AUDIO_TAG_RE, "").replace(REPLY_TAG_RE, "");
1267
+ return {
1268
+ text: stripped,
1269
+ changed: stripped !== text
1270
+ };
1271
+ }
1272
+ function isMessageTextPart(part) {
1273
+ return Boolean(part) && part?.type === "text" && typeof part.text === "string";
1274
+ }
1275
+ /**
1276
+ * Strips inline directive tags from message text blocks while preserving message shape.
1277
+ * Empty post-strip text stays empty-string to preserve caller semantics.
1278
+ */
1279
+ function stripInlineDirectiveTagsFromMessageForDisplay(message) {
1280
+ if (!message) return message;
1281
+ if (!Array.isArray(message.content)) return message;
1282
+ const cleaned = message.content.map((part) => {
1283
+ if (!part || typeof part !== "object") return part;
1284
+ const record = part;
1285
+ if (!isMessageTextPart(record)) return part;
1286
+ return {
1287
+ ...record,
1288
+ text: stripInlineDirectiveTagsForDisplay(record.text).text
1289
+ };
1290
+ });
1291
+ return {
1292
+ ...message,
1293
+ content: cleaned
1294
+ };
1295
+ }
1296
+ function parseInlineDirectives(text, options = {}) {
1297
+ const { currentMessageId, stripAudioTag = true, stripReplyTags = true } = options;
1298
+ if (!text) return {
1299
+ text: "",
1300
+ audioAsVoice: false,
1301
+ replyToCurrent: false,
1302
+ hasAudioTag: false,
1303
+ hasReplyTag: false
1304
+ };
1305
+ let cleaned = text;
1306
+ let audioAsVoice = false;
1307
+ let hasAudioTag = false;
1308
+ let hasReplyTag = false;
1309
+ let sawCurrent = false;
1310
+ let lastExplicitId;
1311
+ cleaned = cleaned.replace(AUDIO_TAG_RE, (match) => {
1312
+ audioAsVoice = true;
1313
+ hasAudioTag = true;
1314
+ return stripAudioTag ? " " : match;
1315
+ });
1316
+ cleaned = cleaned.replace(REPLY_TAG_RE, (match, idRaw) => {
1317
+ hasReplyTag = true;
1318
+ if (idRaw === void 0) sawCurrent = true;
1319
+ else {
1320
+ const id = idRaw.trim();
1321
+ if (id) lastExplicitId = id;
1322
+ }
1323
+ return stripReplyTags ? " " : match;
1324
+ });
1325
+ cleaned = normalizeDirectiveWhitespace(cleaned);
1326
+ const replyToId = lastExplicitId ?? (sawCurrent ? currentMessageId?.trim() || void 0 : void 0);
1327
+ return {
1328
+ text: cleaned,
1329
+ audioAsVoice,
1330
+ replyToId,
1331
+ replyToExplicitId: lastExplicitId,
1332
+ replyToCurrent: sawCurrent,
1333
+ hasAudioTag,
1334
+ hasReplyTag
1335
+ };
1336
+ }
1337
+
1338
+ //#endregion
1339
+ //#region src/gateway/chat-sanitize.ts
1340
+ function stripEnvelopeFromContentWithRole(content, stripUserEnvelope) {
1341
+ let changed = false;
1342
+ return {
1343
+ content: content.map((item) => {
1344
+ if (!item || typeof item !== "object") return item;
1345
+ const entry = item;
1346
+ if (entry.type !== "text" || typeof entry.text !== "string") return item;
1347
+ const inboundStripped = stripInboundMetadata(entry.text);
1348
+ const stripped = stripUserEnvelope ? stripMessageIdHints(stripEnvelope(inboundStripped)) : inboundStripped;
1349
+ if (stripped === entry.text) return item;
1350
+ changed = true;
1351
+ return {
1352
+ ...entry,
1353
+ text: stripped
1354
+ };
1355
+ }),
1356
+ changed
1357
+ };
1358
+ }
1359
+ function stripEnvelopeFromMessage(message) {
1360
+ if (!message || typeof message !== "object") return message;
1361
+ const entry = message;
1362
+ const stripUserEnvelope = (typeof entry.role === "string" ? entry.role.toLowerCase() : "") === "user";
1363
+ let changed = false;
1364
+ const next = { ...entry };
1365
+ if (typeof entry.content === "string") {
1366
+ const inboundStripped = stripInboundMetadata(entry.content);
1367
+ const stripped = stripUserEnvelope ? stripMessageIdHints(stripEnvelope(inboundStripped)) : inboundStripped;
1368
+ if (stripped !== entry.content) {
1369
+ next.content = stripped;
1370
+ changed = true;
1371
+ }
1372
+ } else if (Array.isArray(entry.content)) {
1373
+ const updated = stripEnvelopeFromContentWithRole(entry.content, stripUserEnvelope);
1374
+ if (updated.changed) {
1375
+ next.content = updated.content;
1376
+ changed = true;
1377
+ }
1378
+ } else if (typeof entry.text === "string") {
1379
+ const inboundStripped = stripInboundMetadata(entry.text);
1380
+ const stripped = stripUserEnvelope ? stripMessageIdHints(stripEnvelope(inboundStripped)) : inboundStripped;
1381
+ if (stripped !== entry.text) {
1382
+ next.text = stripped;
1383
+ changed = true;
1384
+ }
1385
+ }
1386
+ return changed ? next : message;
1387
+ }
1388
+ function stripEnvelopeFromMessages(messages) {
1389
+ if (messages.length === 0) return messages;
1390
+ let changed = false;
1391
+ const next = messages.map((message) => {
1392
+ const stripped = stripEnvelopeFromMessage(message);
1393
+ if (stripped !== message) changed = true;
1394
+ return stripped;
1395
+ });
1396
+ return changed ? next : messages;
1397
+ }
1398
+
1399
+ //#endregion
1400
+ //#region src/gateway/session-utils.fs.ts
1401
+ const sessionTitleFieldsCache = /* @__PURE__ */ new Map();
1402
+ const MAX_SESSION_TITLE_FIELDS_CACHE_ENTRIES = 5e3;
1403
+ function readSessionTitleFieldsCacheKey(filePath, opts) {
1404
+ return `${filePath}\t${opts?.includeInterSession === true ? "1" : "0"}`;
1405
+ }
1406
+ function getCachedSessionTitleFields(cacheKey, stat) {
1407
+ const cached = sessionTitleFieldsCache.get(cacheKey);
1408
+ if (!cached) return null;
1409
+ if (cached.mtimeMs !== stat.mtimeMs || cached.size !== stat.size) {
1410
+ sessionTitleFieldsCache.delete(cacheKey);
1411
+ return null;
1412
+ }
1413
+ sessionTitleFieldsCache.delete(cacheKey);
1414
+ sessionTitleFieldsCache.set(cacheKey, cached);
1415
+ return {
1416
+ firstUserMessage: cached.firstUserMessage,
1417
+ lastMessagePreview: cached.lastMessagePreview
1418
+ };
1419
+ }
1420
+ function setCachedSessionTitleFields(cacheKey, stat, value) {
1421
+ sessionTitleFieldsCache.set(cacheKey, {
1422
+ ...value,
1423
+ mtimeMs: stat.mtimeMs,
1424
+ size: stat.size
1425
+ });
1426
+ while (sessionTitleFieldsCache.size > MAX_SESSION_TITLE_FIELDS_CACHE_ENTRIES) {
1427
+ const oldestKey = sessionTitleFieldsCache.keys().next().value;
1428
+ if (typeof oldestKey !== "string" || !oldestKey) break;
1429
+ sessionTitleFieldsCache.delete(oldestKey);
1430
+ }
1431
+ }
1432
+ function readSessionMessages(sessionId, storePath, sessionFile) {
1433
+ const filePath = resolveSessionTranscriptCandidates(sessionId, storePath, sessionFile).find((p) => fs.existsSync(p));
1434
+ if (!filePath) return [];
1435
+ const lines = fs.readFileSync(filePath, "utf-8").split(/\r?\n/);
1436
+ const messages = [];
1437
+ for (const line of lines) {
1438
+ if (!line.trim()) continue;
1439
+ try {
1440
+ const parsed = JSON.parse(line);
1441
+ if (parsed?.message) {
1442
+ messages.push(parsed.message);
1443
+ continue;
1444
+ }
1445
+ if (parsed?.type === "compaction") {
1446
+ const ts = typeof parsed.timestamp === "string" ? Date.parse(parsed.timestamp) : NaN;
1447
+ const timestamp = Number.isFinite(ts) ? ts : Date.now();
1448
+ messages.push({
1449
+ role: "system",
1450
+ content: [{
1451
+ type: "text",
1452
+ text: "Compaction"
1453
+ }],
1454
+ timestamp,
1455
+ __remoteclaw: {
1456
+ kind: "compaction",
1457
+ id: typeof parsed.id === "string" ? parsed.id : void 0
1458
+ }
1459
+ });
1460
+ }
1461
+ } catch {}
1462
+ }
1463
+ return messages;
1464
+ }
1465
+ function resolveSessionTranscriptCandidates(sessionId, storePath, sessionFile, agentId) {
1466
+ const candidates = [];
1467
+ const pushCandidate = (resolve) => {
1468
+ try {
1469
+ candidates.push(resolve());
1470
+ } catch {}
1471
+ };
1472
+ if (storePath) {
1473
+ const sessionsDir = path.dirname(storePath);
1474
+ if (sessionFile) pushCandidate(() => resolveSessionFilePath(sessionId, { sessionFile }, {
1475
+ sessionsDir,
1476
+ agentId
1477
+ }));
1478
+ pushCandidate(() => resolveSessionTranscriptPathInDir(sessionId, sessionsDir));
1479
+ } else if (sessionFile) if (agentId) pushCandidate(() => resolveSessionFilePath(sessionId, { sessionFile }, { agentId }));
1480
+ else {
1481
+ const trimmed = sessionFile.trim();
1482
+ if (trimmed) candidates.push(path.resolve(trimmed));
1483
+ }
1484
+ if (agentId) pushCandidate(() => resolveSessionTranscriptPath(sessionId, agentId));
1485
+ const home = resolveRequiredHomeDir(process.env, os.homedir);
1486
+ const legacyDir = path.join(home, ".remoteclaw", "sessions");
1487
+ pushCandidate(() => resolveSessionTranscriptPathInDir(sessionId, legacyDir));
1488
+ return Array.from(new Set(candidates));
1489
+ }
1490
+ function canonicalizePathForComparison(filePath) {
1491
+ const resolved = path.resolve(filePath);
1492
+ try {
1493
+ return fs.realpathSync(resolved);
1494
+ } catch {
1495
+ return resolved;
1496
+ }
1497
+ }
1498
+ function archiveFileOnDisk(filePath, reason) {
1499
+ const archived = `${filePath}.${reason}.${formatSessionArchiveTimestamp()}`;
1500
+ fs.renameSync(filePath, archived);
1501
+ return archived;
1502
+ }
1503
+ /**
1504
+ * Archives all transcript files for a given session.
1505
+ * Best-effort: silently skips files that don't exist or fail to rename.
1506
+ */
1507
+ function archiveSessionTranscripts(opts) {
1508
+ const archived = [];
1509
+ const storeDir = opts.restrictToStoreDir && opts.storePath ? canonicalizePathForComparison(path.dirname(opts.storePath)) : null;
1510
+ for (const candidate of resolveSessionTranscriptCandidates(opts.sessionId, opts.storePath, opts.sessionFile, opts.agentId)) {
1511
+ const candidatePath = canonicalizePathForComparison(candidate);
1512
+ if (storeDir) {
1513
+ const relative = path.relative(storeDir, candidatePath);
1514
+ if (!relative || relative.startsWith("..") || path.isAbsolute(relative)) continue;
1515
+ }
1516
+ if (!fs.existsSync(candidatePath)) continue;
1517
+ try {
1518
+ archived.push(archiveFileOnDisk(candidatePath, opts.reason));
1519
+ } catch {}
1520
+ }
1521
+ return archived;
1522
+ }
1523
+ async function cleanupArchivedSessionTranscripts(opts) {
1524
+ if (!Number.isFinite(opts.olderThanMs) || opts.olderThanMs < 0) return {
1525
+ removed: 0,
1526
+ scanned: 0
1527
+ };
1528
+ const now = opts.nowMs ?? Date.now();
1529
+ const reason = opts.reason ?? "deleted";
1530
+ const directories = Array.from(new Set(opts.directories.map((dir) => path.resolve(dir))));
1531
+ let removed = 0;
1532
+ let scanned = 0;
1533
+ for (const dir of directories) {
1534
+ const entries = await fs.promises.readdir(dir).catch(() => []);
1535
+ for (const entry of entries) {
1536
+ const timestamp = parseSessionArchiveTimestamp(entry, reason);
1537
+ if (timestamp == null) continue;
1538
+ scanned += 1;
1539
+ if (now - timestamp <= opts.olderThanMs) continue;
1540
+ const fullPath = path.join(dir, entry);
1541
+ if (!(await fs.promises.stat(fullPath).catch(() => null))?.isFile()) continue;
1542
+ await fs.promises.rm(fullPath).catch(() => void 0);
1543
+ removed += 1;
1544
+ }
1545
+ }
1546
+ return {
1547
+ removed,
1548
+ scanned
1549
+ };
1550
+ }
1551
+ function jsonUtf8Bytes(value) {
1552
+ try {
1553
+ return Buffer.byteLength(JSON.stringify(value), "utf8");
1554
+ } catch {
1555
+ return Buffer.byteLength(String(value), "utf8");
1556
+ }
1557
+ }
1558
+ function capArrayByJsonBytes(items, maxBytes) {
1559
+ if (items.length === 0) return {
1560
+ items,
1561
+ bytes: 2
1562
+ };
1563
+ const parts = items.map((item) => jsonUtf8Bytes(item));
1564
+ let bytes = 2 + parts.reduce((a, b) => a + b, 0) + (items.length - 1);
1565
+ let start = 0;
1566
+ while (bytes > maxBytes && start < items.length - 1) {
1567
+ bytes -= parts[start] + 1;
1568
+ start += 1;
1569
+ }
1570
+ return {
1571
+ items: start > 0 ? items.slice(start) : items,
1572
+ bytes
1573
+ };
1574
+ }
1575
+ const MAX_LINES_TO_SCAN = 10;
1576
+ function readSessionTitleFieldsFromTranscript(sessionId, storePath, sessionFile, agentId, opts) {
1577
+ const filePath = resolveSessionTranscriptCandidates(sessionId, storePath, sessionFile, agentId).find((p) => fs.existsSync(p));
1578
+ if (!filePath) return {
1579
+ firstUserMessage: null,
1580
+ lastMessagePreview: null
1581
+ };
1582
+ let stat;
1583
+ try {
1584
+ stat = fs.statSync(filePath);
1585
+ } catch {
1586
+ return {
1587
+ firstUserMessage: null,
1588
+ lastMessagePreview: null
1589
+ };
1590
+ }
1591
+ const cacheKey = readSessionTitleFieldsCacheKey(filePath, opts);
1592
+ const cached = getCachedSessionTitleFields(cacheKey, stat);
1593
+ if (cached) return cached;
1594
+ if (stat.size === 0) {
1595
+ const empty = {
1596
+ firstUserMessage: null,
1597
+ lastMessagePreview: null
1598
+ };
1599
+ setCachedSessionTitleFields(cacheKey, stat, empty);
1600
+ return empty;
1601
+ }
1602
+ let fd = null;
1603
+ try {
1604
+ fd = fs.openSync(filePath, "r");
1605
+ const size = stat.size;
1606
+ let firstUserMessage = null;
1607
+ try {
1608
+ const chunk = readTranscriptHeadChunk(fd);
1609
+ if (chunk) firstUserMessage = extractFirstUserMessageFromTranscriptChunk(chunk, opts);
1610
+ } catch {}
1611
+ let lastMessagePreview = null;
1612
+ try {
1613
+ lastMessagePreview = readLastMessagePreviewFromOpenTranscript({
1614
+ fd,
1615
+ size
1616
+ });
1617
+ } catch {}
1618
+ const result = {
1619
+ firstUserMessage,
1620
+ lastMessagePreview
1621
+ };
1622
+ setCachedSessionTitleFields(cacheKey, stat, result);
1623
+ return result;
1624
+ } catch {
1625
+ return {
1626
+ firstUserMessage: null,
1627
+ lastMessagePreview: null
1628
+ };
1629
+ } finally {
1630
+ if (fd !== null) try {
1631
+ fs.closeSync(fd);
1632
+ } catch {}
1633
+ }
1634
+ }
1635
+ function extractTextFromContent(content) {
1636
+ if (typeof content === "string") return stripInlineDirectiveTagsForDisplay(content).text.trim() || null;
1637
+ if (!Array.isArray(content)) return null;
1638
+ for (const part of content) {
1639
+ if (!part || typeof part.text !== "string") continue;
1640
+ if (part.type === "text" || part.type === "output_text" || part.type === "input_text") {
1641
+ const normalized = stripInlineDirectiveTagsForDisplay(part.text).text.trim();
1642
+ if (normalized) return normalized;
1643
+ }
1644
+ }
1645
+ return null;
1646
+ }
1647
+ function readTranscriptHeadChunk(fd, maxBytes = 8192) {
1648
+ const buf = Buffer.alloc(maxBytes);
1649
+ const bytesRead = fs.readSync(fd, buf, 0, buf.length, 0);
1650
+ if (bytesRead <= 0) return null;
1651
+ return buf.toString("utf-8", 0, bytesRead);
1652
+ }
1653
+ function extractFirstUserMessageFromTranscriptChunk(chunk, opts) {
1654
+ const lines = chunk.split(/\r?\n/).slice(0, MAX_LINES_TO_SCAN);
1655
+ for (const line of lines) {
1656
+ if (!line.trim()) continue;
1657
+ try {
1658
+ const msg = JSON.parse(line)?.message;
1659
+ if (msg?.role !== "user") continue;
1660
+ if (opts?.includeInterSession !== true && hasInterSessionUserProvenance(msg)) continue;
1661
+ const text = extractTextFromContent(msg.content);
1662
+ if (text) return text;
1663
+ } catch {}
1664
+ }
1665
+ return null;
1666
+ }
1667
+ const LAST_MSG_MAX_BYTES = 16384;
1668
+ const LAST_MSG_MAX_LINES = 20;
1669
+ function readLastMessagePreviewFromOpenTranscript(params) {
1670
+ const readStart = Math.max(0, params.size - LAST_MSG_MAX_BYTES);
1671
+ const readLen = Math.min(params.size, LAST_MSG_MAX_BYTES);
1672
+ const buf = Buffer.alloc(readLen);
1673
+ fs.readSync(params.fd, buf, 0, readLen, readStart);
1674
+ const tailLines = buf.toString("utf-8").split(/\r?\n/).filter((l) => l.trim()).slice(-LAST_MSG_MAX_LINES);
1675
+ for (let i = tailLines.length - 1; i >= 0; i--) {
1676
+ const line = tailLines[i];
1677
+ try {
1678
+ const msg = JSON.parse(line)?.message;
1679
+ if (msg?.role !== "user" && msg?.role !== "assistant") continue;
1680
+ const text = extractTextFromContent(msg.content);
1681
+ if (text) return text;
1682
+ } catch {}
1683
+ }
1684
+ return null;
1685
+ }
1686
+ const PREVIEW_READ_SIZES = [
1687
+ 64 * 1024,
1688
+ 256 * 1024,
1689
+ 1024 * 1024
1690
+ ];
1691
+ const PREVIEW_MAX_LINES = 200;
1692
+ function normalizeRole(role, isTool) {
1693
+ if (isTool) return "tool";
1694
+ switch ((role ?? "").toLowerCase()) {
1695
+ case "user": return "user";
1696
+ case "assistant": return "assistant";
1697
+ case "system": return "system";
1698
+ case "tool": return "tool";
1699
+ default: return "other";
1700
+ }
1701
+ }
1702
+ function truncatePreviewText(text, maxChars) {
1703
+ if (maxChars <= 0 || text.length <= maxChars) return text;
1704
+ if (maxChars <= 3) return text.slice(0, maxChars);
1705
+ return `${text.slice(0, maxChars - 3)}...`;
1706
+ }
1707
+ function extractPreviewText(message) {
1708
+ if (typeof message.content === "string") {
1709
+ const normalized = stripInlineDirectiveTagsForDisplay(message.content).text.trim();
1710
+ return normalized ? normalized : null;
1711
+ }
1712
+ if (Array.isArray(message.content)) {
1713
+ const parts = message.content.map((entry) => typeof entry?.text === "string" ? stripInlineDirectiveTagsForDisplay(entry.text).text : "").filter((text) => text.trim().length > 0);
1714
+ if (parts.length > 0) return parts.join("\n").trim();
1715
+ }
1716
+ if (typeof message.text === "string") {
1717
+ const normalized = stripInlineDirectiveTagsForDisplay(message.text).text.trim();
1718
+ return normalized ? normalized : null;
1719
+ }
1720
+ return null;
1721
+ }
1722
+ function isToolCall(message) {
1723
+ return hasToolCall(message);
1724
+ }
1725
+ function extractToolNames(message) {
1726
+ return extractToolCallNames(message);
1727
+ }
1728
+ function extractMediaSummary(message) {
1729
+ if (!Array.isArray(message.content)) return null;
1730
+ for (const entry of message.content) {
1731
+ const raw = typeof entry?.type === "string" ? entry.type.trim().toLowerCase() : "";
1732
+ if (!raw || raw === "text" || raw === "toolcall" || raw === "tool_call") continue;
1733
+ return `[${raw}]`;
1734
+ }
1735
+ return null;
1736
+ }
1737
+ function buildPreviewItems(messages, maxItems, maxChars) {
1738
+ const items = [];
1739
+ for (const message of messages) {
1740
+ const toolCall = isToolCall(message);
1741
+ const role = normalizeRole(message.role, toolCall);
1742
+ let text = extractPreviewText(message);
1743
+ if (!text) {
1744
+ const toolNames = extractToolNames(message);
1745
+ if (toolNames.length > 0) {
1746
+ const shown = toolNames.slice(0, 2);
1747
+ const overflow = toolNames.length - shown.length;
1748
+ text = `call ${shown.join(", ")}`;
1749
+ if (overflow > 0) text += ` +${overflow}`;
1750
+ }
1751
+ }
1752
+ if (!text) text = extractMediaSummary(message);
1753
+ if (!text) continue;
1754
+ let trimmed = text.trim();
1755
+ if (!trimmed) continue;
1756
+ if (role === "user") trimmed = stripEnvelope(trimmed);
1757
+ trimmed = truncatePreviewText(trimmed, maxChars);
1758
+ items.push({
1759
+ role,
1760
+ text: trimmed
1761
+ });
1762
+ }
1763
+ if (items.length <= maxItems) return items;
1764
+ return items.slice(-maxItems);
1765
+ }
1766
+ function readRecentMessagesFromTranscript(filePath, maxMessages, readBytes) {
1767
+ let fd = null;
1768
+ try {
1769
+ fd = fs.openSync(filePath, "r");
1770
+ const size = fs.fstatSync(fd).size;
1771
+ if (size === 0) return [];
1772
+ const readStart = Math.max(0, size - readBytes);
1773
+ const readLen = Math.min(size, readBytes);
1774
+ const buf = Buffer.alloc(readLen);
1775
+ fs.readSync(fd, buf, 0, readLen, readStart);
1776
+ const tailLines = buf.toString("utf-8").split(/\r?\n/).filter((l) => l.trim()).slice(-PREVIEW_MAX_LINES);
1777
+ const collected = [];
1778
+ for (let i = tailLines.length - 1; i >= 0; i--) {
1779
+ const line = tailLines[i];
1780
+ try {
1781
+ const msg = JSON.parse(line)?.message;
1782
+ if (msg && typeof msg === "object") {
1783
+ collected.push(msg);
1784
+ if (collected.length >= maxMessages) break;
1785
+ }
1786
+ } catch {}
1787
+ }
1788
+ return collected.toReversed();
1789
+ } catch {
1790
+ return [];
1791
+ } finally {
1792
+ if (fd !== null) fs.closeSync(fd);
1793
+ }
1794
+ }
1795
+ function readSessionPreviewItemsFromTranscript(sessionId, storePath, sessionFile, agentId, maxItems, maxChars) {
1796
+ const filePath = resolveSessionTranscriptCandidates(sessionId, storePath, sessionFile, agentId).find((p) => fs.existsSync(p));
1797
+ if (!filePath) return [];
1798
+ const boundedItems = Math.max(1, Math.min(maxItems, 50));
1799
+ const boundedChars = Math.max(20, Math.min(maxChars, 2e3));
1800
+ for (const readSize of PREVIEW_READ_SIZES) {
1801
+ const messages = readRecentMessagesFromTranscript(filePath, boundedItems, readSize);
1802
+ if (messages.length > 0 || readSize === PREVIEW_READ_SIZES[PREVIEW_READ_SIZES.length - 1]) return buildPreviewItems(messages, boundedItems, boundedChars);
1803
+ }
1804
+ return [];
1805
+ }
1806
+
1807
+ //#endregion
1808
+ //#region src/utils/account-id.ts
1809
+ function normalizeAccountId(value) {
1810
+ return normalizeOptionalAccountId(value);
1811
+ }
1812
+
1813
+ //#endregion
1814
+ //#region src/utils/delivery-context.ts
1815
+ function normalizeDeliveryContext(context) {
1816
+ if (!context) return;
1817
+ const channel = typeof context.channel === "string" ? normalizeMessageChannel(context.channel) ?? context.channel.trim() : void 0;
1818
+ const to = typeof context.to === "string" ? context.to.trim() : void 0;
1819
+ const accountId = normalizeAccountId(context.accountId);
1820
+ const threadId = typeof context.threadId === "number" && Number.isFinite(context.threadId) ? Math.trunc(context.threadId) : typeof context.threadId === "string" ? context.threadId.trim() : void 0;
1821
+ const normalizedThreadId = typeof threadId === "string" ? threadId ? threadId : void 0 : threadId;
1822
+ if (!channel && !to && !accountId && normalizedThreadId == null) return;
1823
+ const normalized = {
1824
+ channel: channel || void 0,
1825
+ to: to || void 0,
1826
+ accountId
1827
+ };
1828
+ if (normalizedThreadId != null) normalized.threadId = normalizedThreadId;
1829
+ return normalized;
1830
+ }
1831
+ function normalizeSessionDeliveryFields(source) {
1832
+ if (!source) return {
1833
+ deliveryContext: void 0,
1834
+ lastChannel: void 0,
1835
+ lastTo: void 0,
1836
+ lastAccountId: void 0,
1837
+ lastThreadId: void 0
1838
+ };
1839
+ const merged = mergeDeliveryContext(normalizeDeliveryContext({
1840
+ channel: source.lastChannel ?? source.channel,
1841
+ to: source.lastTo,
1842
+ accountId: source.lastAccountId,
1843
+ threadId: source.lastThreadId
1844
+ }), normalizeDeliveryContext(source.deliveryContext));
1845
+ if (!merged) return {
1846
+ deliveryContext: void 0,
1847
+ lastChannel: void 0,
1848
+ lastTo: void 0,
1849
+ lastAccountId: void 0,
1850
+ lastThreadId: void 0
1851
+ };
1852
+ return {
1853
+ deliveryContext: merged,
1854
+ lastChannel: merged.channel,
1855
+ lastTo: merged.to,
1856
+ lastAccountId: merged.accountId,
1857
+ lastThreadId: merged.threadId
1858
+ };
1859
+ }
1860
+ function deliveryContextFromSession(entry) {
1861
+ if (!entry) return;
1862
+ return normalizeSessionDeliveryFields({
1863
+ channel: entry.channel,
1864
+ lastChannel: entry.lastChannel,
1865
+ lastTo: entry.lastTo,
1866
+ lastAccountId: entry.lastAccountId,
1867
+ lastThreadId: entry.lastThreadId ?? entry.deliveryContext?.threadId ?? entry.origin?.threadId,
1868
+ deliveryContext: entry.deliveryContext
1869
+ }).deliveryContext;
1870
+ }
1871
+ function mergeDeliveryContext(primary, fallback) {
1872
+ const normalizedPrimary = normalizeDeliveryContext(primary);
1873
+ const normalizedFallback = normalizeDeliveryContext(fallback);
1874
+ if (!normalizedPrimary && !normalizedFallback) return;
1875
+ return normalizeDeliveryContext({
1876
+ channel: normalizedPrimary?.channel ?? normalizedFallback?.channel,
1877
+ to: normalizedPrimary?.to ?? normalizedFallback?.to,
1878
+ accountId: normalizedPrimary?.accountId ?? normalizedFallback?.accountId,
1879
+ threadId: normalizedPrimary?.threadId ?? normalizedFallback?.threadId
1880
+ });
1881
+ }
1882
+
1883
+ //#endregion
1884
+ //#region src/config/cache-utils.ts
1885
+ function resolveCacheTtlMs(params) {
1886
+ const { envValue, defaultTtlMs } = params;
1887
+ if (envValue) {
1888
+ const parsed = Number.parseInt(envValue, 10);
1889
+ if (Number.isFinite(parsed) && parsed >= 0) return parsed;
1890
+ }
1891
+ return defaultTtlMs;
1892
+ }
1893
+ function isCacheEnabled(ttlMs) {
1894
+ return ttlMs > 0;
1895
+ }
1896
+ function getFileMtimeMs(filePath) {
1897
+ try {
1898
+ return fs.statSync(filePath).mtimeMs;
1899
+ } catch {
1900
+ return;
1901
+ }
1902
+ }
1903
+
1904
+ //#endregion
1905
+ //#region src/config/sessions/store.ts
1906
+ const log = createSubsystemLogger("sessions/store");
1907
+ const SESSION_STORE_CACHE = /* @__PURE__ */ new Map();
1908
+ const DEFAULT_SESSION_STORE_TTL_MS = 45e3;
1909
+ function isSessionStoreRecord(value) {
1910
+ return !!value && typeof value === "object" && !Array.isArray(value);
1911
+ }
1912
+ function getSessionStoreTtl() {
1913
+ return resolveCacheTtlMs({
1914
+ envValue: process.env.REMOTECLAW_SESSION_CACHE_TTL_MS,
1915
+ defaultTtlMs: DEFAULT_SESSION_STORE_TTL_MS
1916
+ });
1917
+ }
1918
+ function isSessionStoreCacheEnabled() {
1919
+ return isCacheEnabled(getSessionStoreTtl());
1920
+ }
1921
+ function isSessionStoreCacheValid(entry) {
1922
+ const now = Date.now();
1923
+ const ttl = getSessionStoreTtl();
1924
+ return now - entry.loadedAt <= ttl;
1925
+ }
1926
+ function invalidateSessionStoreCache(storePath) {
1927
+ SESSION_STORE_CACHE.delete(storePath);
1928
+ }
1929
+ function normalizeSessionEntryDelivery(entry) {
1930
+ const normalized = normalizeSessionDeliveryFields({
1931
+ channel: entry.channel,
1932
+ lastChannel: entry.lastChannel,
1933
+ lastTo: entry.lastTo,
1934
+ lastAccountId: entry.lastAccountId,
1935
+ lastThreadId: entry.lastThreadId ?? entry.deliveryContext?.threadId ?? entry.origin?.threadId,
1936
+ deliveryContext: entry.deliveryContext
1937
+ });
1938
+ const nextDelivery = normalized.deliveryContext;
1939
+ const sameDelivery = (entry.deliveryContext?.channel ?? void 0) === nextDelivery?.channel && (entry.deliveryContext?.to ?? void 0) === nextDelivery?.to && (entry.deliveryContext?.accountId ?? void 0) === nextDelivery?.accountId && (entry.deliveryContext?.threadId ?? void 0) === nextDelivery?.threadId;
1940
+ const sameLast = entry.lastChannel === normalized.lastChannel && entry.lastTo === normalized.lastTo && entry.lastAccountId === normalized.lastAccountId && entry.lastThreadId === normalized.lastThreadId;
1941
+ if (sameDelivery && sameLast) return entry;
1942
+ return {
1943
+ ...entry,
1944
+ deliveryContext: nextDelivery,
1945
+ lastChannel: normalized.lastChannel,
1946
+ lastTo: normalized.lastTo,
1947
+ lastAccountId: normalized.lastAccountId,
1948
+ lastThreadId: normalized.lastThreadId
1949
+ };
1950
+ }
1951
+ function removeThreadFromDeliveryContext(context) {
1952
+ if (!context || context.threadId == null) return context;
1953
+ const next = { ...context };
1954
+ delete next.threadId;
1955
+ return next;
1956
+ }
1957
+ function normalizeStoreSessionKey(sessionKey) {
1958
+ return sessionKey.trim().toLowerCase();
1959
+ }
1960
+ function resolveStoreSessionEntry(params) {
1961
+ const trimmedKey = params.sessionKey.trim();
1962
+ const normalizedKey = normalizeStoreSessionKey(trimmedKey);
1963
+ const legacyKeySet = /* @__PURE__ */ new Set();
1964
+ if (trimmedKey !== normalizedKey && Object.prototype.hasOwnProperty.call(params.store, trimmedKey)) legacyKeySet.add(trimmedKey);
1965
+ let existing = params.store[normalizedKey] ?? (legacyKeySet.size > 0 ? params.store[trimmedKey] : void 0);
1966
+ let existingUpdatedAt = existing?.updatedAt ?? 0;
1967
+ for (const [candidateKey, candidateEntry] of Object.entries(params.store)) {
1968
+ if (candidateKey === normalizedKey) continue;
1969
+ if (candidateKey.toLowerCase() !== normalizedKey) continue;
1970
+ legacyKeySet.add(candidateKey);
1971
+ const candidateUpdatedAt = candidateEntry?.updatedAt ?? 0;
1972
+ if (!existing || candidateUpdatedAt > existingUpdatedAt) {
1973
+ existing = candidateEntry;
1974
+ existingUpdatedAt = candidateUpdatedAt;
1975
+ }
1976
+ }
1977
+ return {
1978
+ normalizedKey,
1979
+ existing,
1980
+ legacyKeys: [...legacyKeySet]
1981
+ };
1982
+ }
1983
+ function normalizeSessionStore(store) {
1984
+ for (const [key, entry] of Object.entries(store)) {
1985
+ if (!entry) continue;
1986
+ const normalized = normalizeSessionEntryDelivery(normalizeSessionRuntimeModelFields(entry));
1987
+ if (normalized !== entry) store[key] = normalized;
1988
+ }
1989
+ }
1990
+ function clearSessionStoreCacheForTest() {
1991
+ SESSION_STORE_CACHE.clear();
1992
+ for (const queue of LOCK_QUEUES.values()) for (const task of queue.pending) task.reject(/* @__PURE__ */ new Error("session store queue cleared for test"));
1993
+ LOCK_QUEUES.clear();
1994
+ }
1995
+ /** Expose lock queue size for tests. */
1996
+ function getSessionStoreLockQueueSizeForTest() {
1997
+ return LOCK_QUEUES.size;
1998
+ }
1999
+ async function withSessionStoreLockForTest(storePath, fn, opts = {}) {
2000
+ return await withSessionStoreLock(storePath, fn, opts);
2001
+ }
2002
+ function loadSessionStore(storePath, opts = {}) {
2003
+ if (!opts.skipCache && isSessionStoreCacheEnabled()) {
2004
+ const cached = SESSION_STORE_CACHE.get(storePath);
2005
+ if (cached && isSessionStoreCacheValid(cached)) {
2006
+ if (getFileMtimeMs(storePath) === cached.mtimeMs) return structuredClone(cached.store);
2007
+ invalidateSessionStoreCache(storePath);
2008
+ }
2009
+ }
2010
+ let store = {};
2011
+ let mtimeMs = getFileMtimeMs(storePath);
2012
+ const maxReadAttempts = process.platform === "win32" ? 3 : 1;
2013
+ const retryBuf = maxReadAttempts > 1 ? new Int32Array(new SharedArrayBuffer(4)) : void 0;
2014
+ for (let attempt = 0; attempt < maxReadAttempts; attempt++) try {
2015
+ const raw = fs.readFileSync(storePath, "utf-8");
2016
+ if (raw.length === 0 && attempt < maxReadAttempts - 1) {
2017
+ Atomics.wait(retryBuf, 0, 0, 50);
2018
+ continue;
2019
+ }
2020
+ const parsed = JSON.parse(raw);
2021
+ if (isSessionStoreRecord(parsed)) store = parsed;
2022
+ mtimeMs = getFileMtimeMs(storePath) ?? mtimeMs;
2023
+ break;
2024
+ } catch {
2025
+ if (attempt < maxReadAttempts - 1) {
2026
+ Atomics.wait(retryBuf, 0, 0, 50);
2027
+ continue;
2028
+ }
2029
+ }
2030
+ for (const entry of Object.values(store)) {
2031
+ if (!entry || typeof entry !== "object") continue;
2032
+ const rec = entry;
2033
+ if (typeof rec.channel !== "string" && typeof rec.provider === "string") {
2034
+ rec.channel = rec.provider;
2035
+ delete rec.provider;
2036
+ }
2037
+ if (typeof rec.lastChannel !== "string" && typeof rec.lastProvider === "string") {
2038
+ rec.lastChannel = rec.lastProvider;
2039
+ delete rec.lastProvider;
2040
+ }
2041
+ if (typeof rec.groupChannel !== "string" && typeof rec.room === "string") {
2042
+ rec.groupChannel = rec.room;
2043
+ delete rec.room;
2044
+ } else if ("room" in rec) delete rec.room;
2045
+ }
2046
+ if (!opts.skipCache && isSessionStoreCacheEnabled()) SESSION_STORE_CACHE.set(storePath, {
2047
+ store: structuredClone(store),
2048
+ loadedAt: Date.now(),
2049
+ storePath,
2050
+ mtimeMs
2051
+ });
2052
+ return structuredClone(store);
2053
+ }
2054
+ function readSessionUpdatedAt(params) {
2055
+ try {
2056
+ return resolveStoreSessionEntry({
2057
+ store: loadSessionStore(params.storePath),
2058
+ sessionKey: params.sessionKey
2059
+ }).existing?.updatedAt;
2060
+ } catch {
2061
+ return;
2062
+ }
2063
+ }
2064
+ const DEFAULT_SESSION_PRUNE_AFTER_MS = 720 * 60 * 60 * 1e3;
2065
+ const DEFAULT_SESSION_MAX_ENTRIES = 500;
2066
+ const DEFAULT_SESSION_ROTATE_BYTES = 10485760;
2067
+ const DEFAULT_SESSION_MAINTENANCE_MODE = "warn";
2068
+ const DEFAULT_SESSION_DISK_BUDGET_HIGH_WATER_RATIO = .8;
2069
+ function resolvePruneAfterMs(maintenance) {
2070
+ const raw = maintenance?.pruneAfter ?? maintenance?.pruneDays;
2071
+ if (raw === void 0 || raw === null || raw === "") return DEFAULT_SESSION_PRUNE_AFTER_MS;
2072
+ try {
2073
+ return parseDurationMs(String(raw).trim(), { defaultUnit: "d" });
2074
+ } catch {
2075
+ return DEFAULT_SESSION_PRUNE_AFTER_MS;
2076
+ }
2077
+ }
2078
+ function resolveRotateBytes(maintenance) {
2079
+ const raw = maintenance?.rotateBytes;
2080
+ if (raw === void 0 || raw === null || raw === "") return DEFAULT_SESSION_ROTATE_BYTES;
2081
+ try {
2082
+ return parseByteSize(String(raw).trim(), { defaultUnit: "b" });
2083
+ } catch {
2084
+ return DEFAULT_SESSION_ROTATE_BYTES;
2085
+ }
2086
+ }
2087
+ function resolveResetArchiveRetentionMs(maintenance, pruneAfterMs) {
2088
+ const raw = maintenance?.resetArchiveRetention;
2089
+ if (raw === false) return null;
2090
+ if (raw === void 0 || raw === null || raw === "") return pruneAfterMs;
2091
+ try {
2092
+ return parseDurationMs(String(raw).trim(), { defaultUnit: "d" });
2093
+ } catch {
2094
+ return pruneAfterMs;
2095
+ }
2096
+ }
2097
+ function resolveMaxDiskBytes(maintenance) {
2098
+ const raw = maintenance?.maxDiskBytes;
2099
+ if (raw === void 0 || raw === null || raw === "") return null;
2100
+ try {
2101
+ return parseByteSize(String(raw).trim(), { defaultUnit: "b" });
2102
+ } catch {
2103
+ return null;
2104
+ }
2105
+ }
2106
+ function resolveHighWaterBytes(maintenance, maxDiskBytes) {
2107
+ const computeDefault = () => {
2108
+ if (maxDiskBytes == null) return null;
2109
+ if (maxDiskBytes <= 0) return 0;
2110
+ return Math.max(1, Math.min(maxDiskBytes, Math.floor(maxDiskBytes * DEFAULT_SESSION_DISK_BUDGET_HIGH_WATER_RATIO)));
2111
+ };
2112
+ if (maxDiskBytes == null) return null;
2113
+ const raw = maintenance?.highWaterBytes;
2114
+ if (raw === void 0 || raw === null || raw === "") return computeDefault();
2115
+ try {
2116
+ const parsed = parseByteSize(String(raw).trim(), { defaultUnit: "b" });
2117
+ return Math.min(parsed, maxDiskBytes);
2118
+ } catch {
2119
+ return computeDefault();
2120
+ }
2121
+ }
2122
+ /**
2123
+ * Resolve maintenance settings from remoteclaw.json (`session.maintenance`).
2124
+ * Falls back to built-in defaults when config is missing or unset.
2125
+ */
2126
+ function resolveMaintenanceConfig() {
2127
+ let maintenance;
2128
+ try {
2129
+ maintenance = loadConfig().session?.maintenance;
2130
+ } catch {}
2131
+ const pruneAfterMs = resolvePruneAfterMs(maintenance);
2132
+ const maxDiskBytes = resolveMaxDiskBytes(maintenance);
2133
+ return {
2134
+ mode: maintenance?.mode ?? DEFAULT_SESSION_MAINTENANCE_MODE,
2135
+ pruneAfterMs,
2136
+ maxEntries: maintenance?.maxEntries ?? DEFAULT_SESSION_MAX_ENTRIES,
2137
+ rotateBytes: resolveRotateBytes(maintenance),
2138
+ resetArchiveRetentionMs: resolveResetArchiveRetentionMs(maintenance, pruneAfterMs),
2139
+ maxDiskBytes,
2140
+ highWaterBytes: resolveHighWaterBytes(maintenance, maxDiskBytes)
2141
+ };
2142
+ }
2143
+ /**
2144
+ * Remove entries whose `updatedAt` is older than the configured threshold.
2145
+ * Entries without `updatedAt` are kept (cannot determine staleness).
2146
+ * Mutates `store` in-place.
2147
+ */
2148
+ function pruneStaleEntries(store, overrideMaxAgeMs, opts = {}) {
2149
+ const maxAgeMs = overrideMaxAgeMs ?? resolveMaintenanceConfig().pruneAfterMs;
2150
+ const cutoffMs = Date.now() - maxAgeMs;
2151
+ let pruned = 0;
2152
+ for (const [key, entry] of Object.entries(store)) if (entry?.updatedAt != null && entry.updatedAt < cutoffMs) {
2153
+ opts.onPruned?.({
2154
+ key,
2155
+ entry
2156
+ });
2157
+ delete store[key];
2158
+ pruned++;
2159
+ }
2160
+ if (pruned > 0 && opts.log !== false) log.info("pruned stale session entries", {
2161
+ pruned,
2162
+ maxAgeMs
2163
+ });
2164
+ return pruned;
2165
+ }
2166
+ /**
2167
+ * Cap the store to the N most recently updated entries.
2168
+ * Entries without `updatedAt` are sorted last (removed first when over limit).
2169
+ * Mutates `store` in-place.
2170
+ */
2171
+ function getEntryUpdatedAt(entry) {
2172
+ return entry?.updatedAt ?? Number.NEGATIVE_INFINITY;
2173
+ }
2174
+ function getActiveSessionMaintenanceWarning(params) {
2175
+ const activeSessionKey = params.activeSessionKey.trim();
2176
+ if (!activeSessionKey) return null;
2177
+ const activeEntry = params.store[activeSessionKey];
2178
+ if (!activeEntry) return null;
2179
+ const cutoffMs = (params.nowMs ?? Date.now()) - params.pruneAfterMs;
2180
+ const wouldPrune = activeEntry.updatedAt != null ? activeEntry.updatedAt < cutoffMs : false;
2181
+ const keys = Object.keys(params.store);
2182
+ const wouldCap = keys.length > params.maxEntries && keys.toSorted((a, b) => getEntryUpdatedAt(params.store[b]) - getEntryUpdatedAt(params.store[a])).slice(params.maxEntries).includes(activeSessionKey);
2183
+ if (!wouldPrune && !wouldCap) return null;
2184
+ return {
2185
+ activeSessionKey,
2186
+ activeUpdatedAt: activeEntry.updatedAt,
2187
+ totalEntries: keys.length,
2188
+ pruneAfterMs: params.pruneAfterMs,
2189
+ maxEntries: params.maxEntries,
2190
+ wouldPrune,
2191
+ wouldCap
2192
+ };
2193
+ }
2194
+ function capEntryCount(store, overrideMax, opts = {}) {
2195
+ const maxEntries = overrideMax ?? resolveMaintenanceConfig().maxEntries;
2196
+ const keys = Object.keys(store);
2197
+ if (keys.length <= maxEntries) return 0;
2198
+ const toRemove = keys.toSorted((a, b) => {
2199
+ const aTime = getEntryUpdatedAt(store[a]);
2200
+ return getEntryUpdatedAt(store[b]) - aTime;
2201
+ }).slice(maxEntries);
2202
+ for (const key of toRemove) {
2203
+ const entry = store[key];
2204
+ if (entry) opts.onCapped?.({
2205
+ key,
2206
+ entry
2207
+ });
2208
+ delete store[key];
2209
+ }
2210
+ if (opts.log !== false) log.info("capped session entry count", {
2211
+ removed: toRemove.length,
2212
+ maxEntries
2213
+ });
2214
+ return toRemove.length;
2215
+ }
2216
+ async function getSessionFileSize(storePath) {
2217
+ try {
2218
+ return (await fs.promises.stat(storePath)).size;
2219
+ } catch {
2220
+ return null;
2221
+ }
2222
+ }
2223
+ /**
2224
+ * Rotate the sessions file if it exceeds the configured size threshold.
2225
+ * Renames the current file to `sessions.json.bak.{timestamp}` and cleans up
2226
+ * old rotation backups, keeping only the 3 most recent `.bak.*` files.
2227
+ */
2228
+ async function rotateSessionFile(storePath, overrideBytes) {
2229
+ const maxBytes = overrideBytes ?? resolveMaintenanceConfig().rotateBytes;
2230
+ const fileSize = await getSessionFileSize(storePath);
2231
+ if (fileSize == null) return false;
2232
+ if (fileSize <= maxBytes) return false;
2233
+ const backupPath = `${storePath}.bak.${Date.now()}`;
2234
+ try {
2235
+ await fs.promises.rename(storePath, backupPath);
2236
+ log.info("rotated session store file", {
2237
+ backupPath: path.basename(backupPath),
2238
+ sizeBytes: fileSize
2239
+ });
2240
+ } catch {
2241
+ return false;
2242
+ }
2243
+ try {
2244
+ const dir = path.dirname(storePath);
2245
+ const baseName = path.basename(storePath);
2246
+ const backups = (await fs.promises.readdir(dir)).filter((f) => f.startsWith(`${baseName}.bak.`)).toSorted().toReversed();
2247
+ const maxBackups = 3;
2248
+ if (backups.length > maxBackups) {
2249
+ const toDelete = backups.slice(maxBackups);
2250
+ for (const old of toDelete) await fs.promises.unlink(path.join(dir, old)).catch(() => void 0);
2251
+ log.info("cleaned up old session store backups", { deleted: toDelete.length });
2252
+ }
2253
+ } catch {}
2254
+ return true;
2255
+ }
2256
+ async function saveSessionStoreUnlocked(storePath, store, opts) {
2257
+ invalidateSessionStoreCache(storePath);
2258
+ normalizeSessionStore(store);
2259
+ if (!opts?.skipMaintenance) {
2260
+ const maintenance = {
2261
+ ...resolveMaintenanceConfig(),
2262
+ ...opts?.maintenanceOverride
2263
+ };
2264
+ const shouldWarnOnly = maintenance.mode === "warn";
2265
+ const beforeCount = Object.keys(store).length;
2266
+ if (shouldWarnOnly) {
2267
+ const activeSessionKey = opts?.activeSessionKey?.trim();
2268
+ if (activeSessionKey) {
2269
+ const warning = getActiveSessionMaintenanceWarning({
2270
+ store,
2271
+ activeSessionKey,
2272
+ pruneAfterMs: maintenance.pruneAfterMs,
2273
+ maxEntries: maintenance.maxEntries
2274
+ });
2275
+ if (warning) {
2276
+ log.warn("session maintenance would evict active session; skipping enforcement", {
2277
+ activeSessionKey: warning.activeSessionKey,
2278
+ wouldPrune: warning.wouldPrune,
2279
+ wouldCap: warning.wouldCap,
2280
+ pruneAfterMs: warning.pruneAfterMs,
2281
+ maxEntries: warning.maxEntries
2282
+ });
2283
+ await opts?.onWarn?.(warning);
2284
+ }
2285
+ }
2286
+ const diskBudget = await enforceSessionDiskBudget({
2287
+ store,
2288
+ storePath,
2289
+ activeSessionKey: opts?.activeSessionKey,
2290
+ maintenance,
2291
+ warnOnly: true,
2292
+ log
2293
+ });
2294
+ await opts?.onMaintenanceApplied?.({
2295
+ mode: maintenance.mode,
2296
+ beforeCount,
2297
+ afterCount: Object.keys(store).length,
2298
+ pruned: 0,
2299
+ capped: 0,
2300
+ diskBudget
2301
+ });
2302
+ } else {
2303
+ const removedSessionFiles = /* @__PURE__ */ new Map();
2304
+ const pruned = pruneStaleEntries(store, maintenance.pruneAfterMs, { onPruned: ({ entry }) => {
2305
+ if (!removedSessionFiles.has(entry.sessionId) || entry.sessionFile) removedSessionFiles.set(entry.sessionId, entry.sessionFile);
2306
+ } });
2307
+ const capped = capEntryCount(store, maintenance.maxEntries, { onCapped: ({ entry }) => {
2308
+ if (!removedSessionFiles.has(entry.sessionId) || entry.sessionFile) removedSessionFiles.set(entry.sessionId, entry.sessionFile);
2309
+ } });
2310
+ const archivedDirs = /* @__PURE__ */ new Set();
2311
+ const referencedSessionIds = new Set(Object.values(store).map((entry) => entry?.sessionId).filter((id) => Boolean(id)));
2312
+ for (const [sessionId, sessionFile] of removedSessionFiles) {
2313
+ if (referencedSessionIds.has(sessionId)) continue;
2314
+ const archived = archiveSessionTranscripts({
2315
+ sessionId,
2316
+ storePath,
2317
+ sessionFile,
2318
+ reason: "deleted",
2319
+ restrictToStoreDir: true
2320
+ });
2321
+ for (const archivedPath of archived) archivedDirs.add(path.dirname(archivedPath));
2322
+ }
2323
+ if (archivedDirs.size > 0 || maintenance.resetArchiveRetentionMs != null) {
2324
+ const targetDirs = archivedDirs.size > 0 ? [...archivedDirs] : [path.dirname(path.resolve(storePath))];
2325
+ await cleanupArchivedSessionTranscripts({
2326
+ directories: targetDirs,
2327
+ olderThanMs: maintenance.pruneAfterMs,
2328
+ reason: "deleted"
2329
+ });
2330
+ if (maintenance.resetArchiveRetentionMs != null) await cleanupArchivedSessionTranscripts({
2331
+ directories: targetDirs,
2332
+ olderThanMs: maintenance.resetArchiveRetentionMs,
2333
+ reason: "reset"
2334
+ });
2335
+ }
2336
+ await rotateSessionFile(storePath, maintenance.rotateBytes);
2337
+ const diskBudget = await enforceSessionDiskBudget({
2338
+ store,
2339
+ storePath,
2340
+ activeSessionKey: opts?.activeSessionKey,
2341
+ maintenance,
2342
+ warnOnly: false,
2343
+ log
2344
+ });
2345
+ await opts?.onMaintenanceApplied?.({
2346
+ mode: maintenance.mode,
2347
+ beforeCount,
2348
+ afterCount: Object.keys(store).length,
2349
+ pruned,
2350
+ capped,
2351
+ diskBudget
2352
+ });
2353
+ }
2354
+ }
2355
+ await fs.promises.mkdir(path.dirname(storePath), { recursive: true });
2356
+ const json = JSON.stringify(store, null, 2);
2357
+ if (process.platform === "win32") {
2358
+ const tmp = `${storePath}.${process.pid}.${crypto.randomUUID()}.tmp`;
2359
+ try {
2360
+ await fs.promises.writeFile(tmp, json, "utf-8");
2361
+ for (let i = 0; i < 5; i++) try {
2362
+ await fs.promises.rename(tmp, storePath);
2363
+ break;
2364
+ } catch {
2365
+ if (i < 4) await new Promise((r) => setTimeout(r, 50 * (i + 1)));
2366
+ if (i === 4) log.warn(`rename failed after 5 attempts: ${storePath}`);
2367
+ }
2368
+ } catch (err) {
2369
+ if ((err && typeof err === "object" && "code" in err ? String(err.code) : null) === "ENOENT") return;
2370
+ throw err;
2371
+ } finally {
2372
+ await fs.promises.rm(tmp, { force: true }).catch(() => void 0);
2373
+ }
2374
+ return;
2375
+ }
2376
+ const tmp = `${storePath}.${process.pid}.${crypto.randomUUID()}.tmp`;
2377
+ try {
2378
+ await fs.promises.writeFile(tmp, json, {
2379
+ mode: 384,
2380
+ encoding: "utf-8"
2381
+ });
2382
+ await fs.promises.rename(tmp, storePath);
2383
+ await fs.promises.chmod(storePath, 384);
2384
+ } catch (err) {
2385
+ if ((err && typeof err === "object" && "code" in err ? String(err.code) : null) === "ENOENT") {
2386
+ try {
2387
+ await fs.promises.mkdir(path.dirname(storePath), { recursive: true });
2388
+ await fs.promises.writeFile(storePath, json, {
2389
+ mode: 384,
2390
+ encoding: "utf-8"
2391
+ });
2392
+ await fs.promises.chmod(storePath, 384);
2393
+ } catch (err2) {
2394
+ if ((err2 && typeof err2 === "object" && "code" in err2 ? String(err2.code) : null) === "ENOENT") return;
2395
+ throw err2;
2396
+ }
2397
+ return;
2398
+ }
2399
+ throw err;
2400
+ } finally {
2401
+ await fs.promises.rm(tmp, { force: true });
2402
+ }
2403
+ }
2404
+ async function saveSessionStore(storePath, store, opts) {
2405
+ await withSessionStoreLock(storePath, async () => {
2406
+ await saveSessionStoreUnlocked(storePath, store, opts);
2407
+ });
2408
+ }
2409
+ async function updateSessionStore(storePath, mutator, opts) {
2410
+ return await withSessionStoreLock(storePath, async () => {
2411
+ const store = loadSessionStore(storePath, { skipCache: true });
2412
+ const result = await mutator(store);
2413
+ await saveSessionStoreUnlocked(storePath, store, opts);
2414
+ return result;
2415
+ });
2416
+ }
2417
+ const LOCK_QUEUES = /* @__PURE__ */ new Map();
2418
+ function lockTimeoutError(storePath) {
2419
+ return /* @__PURE__ */ new Error(`timeout waiting for session store lock: ${storePath}`);
2420
+ }
2421
+ function getOrCreateLockQueue(storePath) {
2422
+ const existing = LOCK_QUEUES.get(storePath);
2423
+ if (existing) return existing;
2424
+ const created = {
2425
+ running: false,
2426
+ pending: []
2427
+ };
2428
+ LOCK_QUEUES.set(storePath, created);
2429
+ return created;
2430
+ }
2431
+ async function drainSessionStoreLockQueue(storePath) {
2432
+ const queue = LOCK_QUEUES.get(storePath);
2433
+ if (!queue || queue.running) return;
2434
+ queue.running = true;
2435
+ try {
2436
+ while (queue.pending.length > 0) {
2437
+ const task = queue.pending.shift();
2438
+ if (!task) continue;
2439
+ const remainingTimeoutMs = task.timeoutMs ?? Number.POSITIVE_INFINITY;
2440
+ if (task.timeoutMs != null && remainingTimeoutMs <= 0) {
2441
+ task.reject(lockTimeoutError(storePath));
2442
+ continue;
2443
+ }
2444
+ let lock;
2445
+ let result;
2446
+ let failed;
2447
+ let hasFailure = false;
2448
+ try {
2449
+ lock = await acquireSessionWriteLock({
2450
+ sessionFile: storePath,
2451
+ timeoutMs: remainingTimeoutMs,
2452
+ staleMs: task.staleMs
2453
+ });
2454
+ result = await task.fn();
2455
+ } catch (err) {
2456
+ hasFailure = true;
2457
+ failed = err;
2458
+ } finally {
2459
+ await lock?.release().catch(() => void 0);
2460
+ }
2461
+ if (hasFailure) {
2462
+ task.reject(failed);
2463
+ continue;
2464
+ }
2465
+ task.resolve(result);
2466
+ }
2467
+ } finally {
2468
+ queue.running = false;
2469
+ if (queue.pending.length === 0) LOCK_QUEUES.delete(storePath);
2470
+ else queueMicrotask(() => {
2471
+ drainSessionStoreLockQueue(storePath);
2472
+ });
2473
+ }
2474
+ }
2475
+ async function withSessionStoreLock(storePath, fn, opts = {}) {
2476
+ if (!storePath || typeof storePath !== "string") throw new Error(`withSessionStoreLock: storePath must be a non-empty string, got ${JSON.stringify(storePath)}`);
2477
+ const timeoutMs = opts.timeoutMs ?? 1e4;
2478
+ const staleMs = opts.staleMs ?? 3e4;
2479
+ opts.pollIntervalMs;
2480
+ const hasTimeout = timeoutMs > 0 && Number.isFinite(timeoutMs);
2481
+ const queue = getOrCreateLockQueue(storePath);
2482
+ return await new Promise((resolve, reject) => {
2483
+ const task = {
2484
+ fn: async () => await fn(),
2485
+ resolve: (value) => resolve(value),
2486
+ reject,
2487
+ timeoutMs: hasTimeout ? timeoutMs : void 0,
2488
+ staleMs
2489
+ };
2490
+ queue.pending.push(task);
2491
+ drainSessionStoreLockQueue(storePath);
2492
+ });
2493
+ }
2494
+ async function updateSessionStoreEntry(params) {
2495
+ const { storePath, sessionKey, update } = params;
2496
+ return await withSessionStoreLock(storePath, async () => {
2497
+ const store = loadSessionStore(storePath, { skipCache: true });
2498
+ const resolved = resolveStoreSessionEntry({
2499
+ store,
2500
+ sessionKey
2501
+ });
2502
+ const existing = resolved.existing;
2503
+ if (!existing) return null;
2504
+ const patch = await update(existing);
2505
+ if (!patch) return existing;
2506
+ const next = mergeSessionEntry(existing, patch);
2507
+ store[resolved.normalizedKey] = next;
2508
+ for (const legacyKey of resolved.legacyKeys) delete store[legacyKey];
2509
+ await saveSessionStoreUnlocked(storePath, store, { activeSessionKey: resolved.normalizedKey });
2510
+ return next;
2511
+ });
2512
+ }
2513
+ async function recordSessionMetaFromInbound(params) {
2514
+ const { storePath, sessionKey, ctx } = params;
2515
+ const createIfMissing = params.createIfMissing ?? true;
2516
+ return await updateSessionStore(storePath, (store) => {
2517
+ const resolved = resolveStoreSessionEntry({
2518
+ store,
2519
+ sessionKey
2520
+ });
2521
+ const existing = resolved.existing;
2522
+ const patch = deriveSessionMetaPatch({
2523
+ ctx,
2524
+ sessionKey: resolved.normalizedKey,
2525
+ existing,
2526
+ groupResolution: params.groupResolution
2527
+ });
2528
+ if (!patch) {
2529
+ if (existing && resolved.legacyKeys.length > 0) {
2530
+ store[resolved.normalizedKey] = existing;
2531
+ for (const legacyKey of resolved.legacyKeys) delete store[legacyKey];
2532
+ }
2533
+ return existing ?? null;
2534
+ }
2535
+ if (!existing && !createIfMissing) return null;
2536
+ const next = mergeSessionEntry(existing, patch);
2537
+ store[resolved.normalizedKey] = next;
2538
+ for (const legacyKey of resolved.legacyKeys) delete store[legacyKey];
2539
+ return next;
2540
+ }, { activeSessionKey: normalizeStoreSessionKey(sessionKey) });
2541
+ }
2542
+ async function updateLastRoute(params) {
2543
+ const { storePath, sessionKey, channel, to, accountId, threadId, ctx } = params;
2544
+ return await withSessionStoreLock(storePath, async () => {
2545
+ const store = loadSessionStore(storePath);
2546
+ const resolved = resolveStoreSessionEntry({
2547
+ store,
2548
+ sessionKey
2549
+ });
2550
+ const existing = resolved.existing;
2551
+ const now = Date.now();
2552
+ const explicitContext = normalizeDeliveryContext(params.deliveryContext);
2553
+ const inlineContext = normalizeDeliveryContext({
2554
+ channel,
2555
+ to,
2556
+ accountId,
2557
+ threadId
2558
+ });
2559
+ const mergedInput = mergeDeliveryContext(explicitContext, inlineContext);
2560
+ const explicitDeliveryContext = params.deliveryContext;
2561
+ const explicitThreadValue = (explicitDeliveryContext != null && Object.prototype.hasOwnProperty.call(explicitDeliveryContext, "threadId") ? explicitDeliveryContext.threadId : void 0) ?? (threadId != null && threadId !== "" ? threadId : void 0);
2562
+ const merged = mergeDeliveryContext(mergedInput, Boolean(explicitContext?.channel || explicitContext?.to || inlineContext?.channel || inlineContext?.to) && explicitThreadValue == null ? removeThreadFromDeliveryContext(deliveryContextFromSession(existing)) : deliveryContextFromSession(existing));
2563
+ const normalized = normalizeSessionDeliveryFields({ deliveryContext: {
2564
+ channel: merged?.channel,
2565
+ to: merged?.to,
2566
+ accountId: merged?.accountId,
2567
+ threadId: merged?.threadId
2568
+ } });
2569
+ const metaPatch = ctx ? deriveSessionMetaPatch({
2570
+ ctx,
2571
+ sessionKey: resolved.normalizedKey,
2572
+ existing,
2573
+ groupResolution: params.groupResolution
2574
+ }) : null;
2575
+ const basePatch = {
2576
+ updatedAt: Math.max(existing?.updatedAt ?? 0, now),
2577
+ deliveryContext: normalized.deliveryContext,
2578
+ lastChannel: normalized.lastChannel,
2579
+ lastTo: normalized.lastTo,
2580
+ lastAccountId: normalized.lastAccountId,
2581
+ lastThreadId: normalized.lastThreadId
2582
+ };
2583
+ const next = mergeSessionEntry(existing, metaPatch ? {
2584
+ ...basePatch,
2585
+ ...metaPatch
2586
+ } : basePatch);
2587
+ store[resolved.normalizedKey] = next;
2588
+ for (const legacyKey of resolved.legacyKeys) delete store[legacyKey];
2589
+ await saveSessionStoreUnlocked(storePath, store, { activeSessionKey: resolved.normalizedKey });
2590
+ return next;
2591
+ });
2592
+ }
2593
+
2594
+ //#endregion
2595
+ export { snapshotSessionOrigin as $, enforceSessionDiskBudget as A, resolveChannelResetConfig as B, resolveSessionTranscriptCandidates as C, stripInlineDirectiveTagsForDisplay as D, parseInlineDirectives as E, resolveAndPersistSessionFile as F, resolveFreshSessionTotalTokens as G, resolveSessionResetType as H, CURRENT_SESSION_VERSION as I, resolveAgentMainSessionKey as J, setSessionRuntimeModel as K, deriveSessionKey as L, parseSessionThreadInfo as M, appendAssistantMessageToSessionTranscript as N, stripInlineDirectiveTagsFromMessageForDisplay as O, resolveMirroredTranscriptText as P, deriveSessionMetaPatch as Q, resolveSessionKey as R, readSessionTitleFieldsFromTranscript as S, stripEnvelopeFromMessages as T, resolveThreadFlag as U, resolveSessionResetPolicy as V, DEFAULT_RESET_TRIGGERS as W, resolveMainSessionKey as X, resolveExplicitAgentSessionKey as Y, resolveMainSessionKeyFromConfig as Z, archiveSessionTranscripts as _, recordSessionMetaFromInbound as a, readSessionMessages as b, updateLastRoute as c, deliveryContextFromSession as d, formatSessionArchiveTimestamp as et, mergeDeliveryContext as f, archiveFileOnDisk as g, normalizeAccountId as h, readSessionUpdatedAt as i, cleanStaleLockFiles as it, extractDeliveryInfo as j, sessions_exports as k, updateSessionStore as l, normalizeSessionDeliveryFields as m, loadSessionStore as n, buildGroupDisplayName as nt, resolveMaintenanceConfig as o, normalizeDeliveryContext as p, canonicalizeMainSessionAlias as q, pruneStaleEntries as r, resolveGroupSessionKey as rt, saveSessionStore as s, capEntryCount as t, isPrimarySessionTranscriptFileName as tt, updateSessionStoreEntry as u, capArrayByJsonBytes as v, stripEnvelopeFromMessage as w, readSessionPreviewItemsFromTranscript as x, cleanupArchivedSessionTranscripts as y, evaluateSessionFreshness as z };