remoteclaw 0.1.0-next.2abd2fa → 0.1.0-next.2e9a6cd

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 (1052) hide show
  1. package/README.md +9 -7
  2. package/dist/accounts-A8jZK_v9.js +272 -0
  3. package/dist/accounts-BegPt5VR.js +36 -0
  4. package/dist/accounts-BmiimLpP.js +47 -0
  5. package/dist/accounts-Bomfgw0M.js +32 -0
  6. package/dist/accounts-Bpk-loA6.js +47 -0
  7. package/dist/accounts-DAdUdbPk.js +36 -0
  8. package/dist/accounts-WYyfAiie.js +270 -0
  9. package/dist/ack-reactions-CMDRj7fJ.js +446 -0
  10. package/dist/ack-reactions-D7VScSny.js +446 -0
  11. package/dist/acp-cli-BpMS0SsZ.js +1323 -0
  12. package/dist/acp-cli-DkXTlCpF.js +1317 -0
  13. package/dist/active-listener--FT8ewxl.js +37 -0
  14. package/dist/active-listener-C1StcdIA.js +37 -0
  15. package/dist/agent-C76P7tEr.js +703 -0
  16. package/dist/agent-helpers-CK3Obbsi.js +400 -0
  17. package/dist/agent-helpers-KHUla1K7.js +400 -0
  18. package/dist/agent-scope-BrDeaWWf.js +116 -0
  19. package/dist/agent-scope-DxqtYjuJ.js +114 -0
  20. package/dist/agent-ue8p9AIv.js +704 -0
  21. package/dist/agents--24oKN80.js +788 -0
  22. package/dist/agents.config-CWAUoPzG.js +116 -0
  23. package/dist/agents.config-Ck45E_ce.js +116 -0
  24. package/dist/audio-B85HoT7E.js +43 -0
  25. package/dist/audio-BbCUzndz.js +43 -0
  26. package/dist/audio-preflight-B3f0x3zu.js +69 -0
  27. package/dist/audio-preflight-Dv76vFTu.js +64 -0
  28. package/dist/audit-BAbBf2MU.js +3149 -0
  29. package/dist/audit-g55SYz1m.js +3149 -0
  30. package/dist/auth-Bq44qPUd.js +448 -0
  31. package/dist/auth-CVfoI--S.js +281 -0
  32. package/dist/auth-DTWpZJ1a.js +279 -0
  33. package/dist/auth-VItd2pwK.js +448 -0
  34. package/dist/banner-CyPQJybO.js +294 -0
  35. package/dist/binaries-DbgLoSWv.js +13 -0
  36. package/dist/bindings-6KojDoIi.js +69 -0
  37. package/dist/bindings-B6icMMUx.js +69 -0
  38. package/dist/bonjour-discovery-CQU4QbLK.js +378 -0
  39. package/dist/bonjour-discovery-D8aOnk3M.js +378 -0
  40. package/dist/boot/handler.js +42 -69
  41. package/dist/browser-cli-BH41geGr.js +1693 -0
  42. package/dist/browser-cli-u4nrjp1h.js +1688 -0
  43. package/dist/build-info.json +3 -3
  44. package/dist/call-CMDcRlGW.js +2826 -0
  45. package/dist/call-D5YKTYSM.js +2827 -0
  46. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  47. package/dist/catalog-CUY_iTaG.js +185 -0
  48. package/dist/catalog-p6W09S2j.js +185 -0
  49. package/dist/channel-account-context-CA2m93Kt.js +550 -0
  50. package/dist/channel-account-context-Las-t6RP.js +550 -0
  51. package/dist/channel-activity-BD603ehL.js +94 -0
  52. package/dist/channel-activity-CwiF_QMr.js +94 -0
  53. package/dist/channel-activity-daCpxHdT.js +292 -0
  54. package/dist/channel-options-CAlClffy.js +33 -0
  55. package/dist/channel-options-Hl_ep3UG.js +32 -0
  56. package/dist/channel-selection-CHJ7TumC.js +51 -0
  57. package/dist/channel-selection-DR7eW8UG.js +51 -0
  58. package/dist/channel-web-B79j9fSC.js +2134 -0
  59. package/dist/channel-web-DHTTcipm.js +2136 -0
  60. package/dist/channels-cli-DeZ95hcx.js +1427 -0
  61. package/dist/channels-cli-eUCi6jXk.js +1422 -0
  62. package/dist/channels-status-issues-By77REbh.js +18 -0
  63. package/dist/channels-status-issues-DXyOO-KH.js +18 -0
  64. package/dist/chat-envelope-BEDutlnF.js +248 -0
  65. package/dist/chat-envelope-vJJUdDE7.js +248 -0
  66. package/dist/chrome-BuAi16Rq.js +1732 -0
  67. package/dist/chrome-IR-2ukph.js +1733 -0
  68. package/dist/chunk-C1mQSjas.js +341 -0
  69. package/dist/chunk-D7VX4pmT.js +341 -0
  70. package/dist/clack-prompter-BX8SVxtP.js +122 -0
  71. package/dist/clack-prompter-D6HhVlZW.js +121 -0
  72. package/dist/cleanup-utils-DNd0wdKZ.js +94 -0
  73. package/dist/cli/daemon-cli.js +1 -1
  74. package/dist/cli-CK4Y43rx.js +131 -0
  75. package/dist/cli-Cha5Uk29.js +126 -0
  76. package/dist/clipboard-Cbj3McM_.js +31 -0
  77. package/dist/clipboard-Ne8gaWea.js +31 -0
  78. package/dist/command-format-D0vKipG9.js +32 -0
  79. package/dist/command-format-KkslAzwV.js +18 -0
  80. package/dist/command-logger/handler.js +3 -3
  81. package/dist/command-registry-07zlvSN8.js +215 -0
  82. package/dist/commands-DChC3pIF.js +41 -0
  83. package/dist/commands-DFHMoQgH.js +41 -0
  84. package/dist/commands-registry-BN04GIlJ.js +891 -0
  85. package/dist/commands-registry-DbS9NHeX.js +892 -0
  86. package/dist/common-DHHHAcmR.js +156 -0
  87. package/dist/common-De-Lakuh.js +156 -0
  88. package/dist/completion-cli--Jcg794c.js +452 -0
  89. package/dist/completion-cli-B8n7umme.js +452 -0
  90. package/dist/config-BupC6eiJ.js +4223 -0
  91. package/dist/config-CHDaGquZ.js +4225 -0
  92. package/dist/config-cli-Cu79BThx.js +242 -0
  93. package/dist/config-cli-DrJtiyW-.js +247 -0
  94. package/dist/config-guard-BLsqW1qt.js +98 -0
  95. package/dist/config-guard-NQ7jaYM4.js +75 -0
  96. package/dist/config-validation-BLllMW0t.js +18 -0
  97. package/dist/config-validation-DT29VEco.js +18 -0
  98. package/dist/configure-B25UEQnQ.js +889 -0
  99. package/dist/configure-CqMUE4Zw.js +891 -0
  100. package/dist/constants-BbAEYzFC.js +70 -0
  101. package/dist/constants-tLOgmZZ1.js +70 -0
  102. package/dist/control-auth-BFbDXKLK.js +397 -0
  103. package/dist/control-auth-BiiO-FNy.js +397 -0
  104. package/dist/control-ui/assets/index-CuY3pfh1.js +7716 -0
  105. package/dist/control-ui/assets/index-CuY3pfh1.js.map +1 -0
  106. package/dist/control-ui/assets/index-D_fjkN3g.css +1 -0
  107. package/dist/control-ui/index.html +2 -2
  108. package/dist/control-ui-assets-BlpSXjlT.js +186 -0
  109. package/dist/control-ui-assets-eJU2-yvs.js +186 -0
  110. package/dist/conversation-label-Bn5j3lUT.js +36 -0
  111. package/dist/conversation-label-L0QTtKji.js +36 -0
  112. package/dist/cron-cli-BV1o0UgM.js +491 -0
  113. package/dist/cron-cli-C8j-P8GF.js +496 -0
  114. package/dist/daemon-cli-BDvU0Xv6.js +1199 -0
  115. package/dist/daemon-cli-CoNl2Ugf.js +1197 -0
  116. package/dist/daemon-cli.js +53 -97
  117. package/dist/daemon-install-BMEnzWwq.js +60 -0
  118. package/dist/daemon-install-BkUJbdPC.js +55 -0
  119. package/dist/daemon-install-helpers-B9kMxC1v.js +462 -0
  120. package/dist/daemon-install-helpers-DoYR5z4H.js +462 -0
  121. package/dist/deliver-D8P9_nk-.js +481 -0
  122. package/dist/deliver-F9ed3dhp.js +481 -0
  123. package/dist/delivery-queue-B6TuHppj.js +244 -0
  124. package/dist/delivery-queue-BZc3AiGu.js +244 -0
  125. package/dist/devices-cli-DZgxMNLD.js +322 -0
  126. package/dist/devices-cli-DlG9ehK0.js +317 -0
  127. package/dist/diagnostics-CK2HGAFw.js +46 -0
  128. package/dist/diagnostics-G-C-IuxO.js +46 -0
  129. package/dist/directory-cli-CY6tHRIZ.js +218 -0
  130. package/dist/directory-cli-HyvRJ1Ua.js +223 -0
  131. package/dist/dm-policy-shared-1FdjwGtJ.js +22 -0
  132. package/dist/dm-policy-shared-CT3er5HI.js +22 -0
  133. package/dist/dns-cli-Cu-wYvll.js +203 -0
  134. package/dist/dns-cli-DQdnNJh4.js +198 -0
  135. package/dist/dock-D038fZZl.js +929 -0
  136. package/dist/dock-D5pZ3a44.js +928 -0
  137. package/dist/doctor-completion-BrHnayfU.js +92 -0
  138. package/dist/doctor-completion-CoZP2KiR.js +92 -0
  139. package/dist/doctor-config-flow-DJ1nWCTZ.js +1935 -0
  140. package/dist/doctor-config-flow-DYhXUwEq.js +1934 -0
  141. package/dist/enable-B5dIjgnm.js +59 -0
  142. package/dist/enable-FmiEY4ng.js +59 -0
  143. package/dist/entry.js +14 -16
  144. package/dist/env-DUb5GiQe.js +60 -0
  145. package/dist/env-vars-C8WMB8Ix.js +93 -0
  146. package/dist/errors-CdmXrBic.js +35 -0
  147. package/dist/errors-DdLfwEVi.js +35 -0
  148. package/dist/exec-BhkXWg7V.js +164 -0
  149. package/dist/exec-ClUTXFZ9.js +164 -0
  150. package/dist/export-html/template.css +0 -36
  151. package/dist/export-html/template.js +1 -32
  152. package/dist/extensionAPI.js +1015 -142
  153. package/dist/fetch-CCuD0LYV.js +67 -0
  154. package/dist/fetch-JBWLkOpL.js +67 -0
  155. package/dist/fetch-oku6r8tJ.js +67 -0
  156. package/dist/file-lock-6NXMPZTT.js +107 -0
  157. package/dist/file-lock-Ks-RPU6W.js +107 -0
  158. package/dist/fs-safe-93aDW4mH.js +98 -0
  159. package/dist/fs-safe-ACrBwOF5.js +88 -0
  160. package/dist/gateway-cli-CJs4Mxlv.js +23730 -0
  161. package/dist/gateway-cli-gUVR20v7.js +23725 -0
  162. package/dist/gateway-rpc-CSdrtPzg.js +28 -0
  163. package/dist/gateway-rpc-PNA_wUoe.js +28 -0
  164. package/dist/gmail-setup-utils-DNZEf6T0.js +422 -0
  165. package/dist/gmail-setup-utils-KPAKWwGy.js +423 -0
  166. package/dist/health-BCidscV-.js +1417 -0
  167. package/dist/health-Cw2dr19V.js +1414 -0
  168. package/dist/health-format-DOhfU1rY.js +28 -0
  169. package/dist/heartbeat-visibility-C5Vxudi9.js +125 -0
  170. package/dist/heartbeat-visibility-DHeZ-ko1.js +125 -0
  171. package/dist/help-format-Ch0EWh7N.js +17 -0
  172. package/dist/helpers-B4NWktS8.js +10 -0
  173. package/dist/hook-runner-global-Vj-YQxeR.js +527 -0
  174. package/dist/hooks-cli---vy0V0j.js +1218 -0
  175. package/dist/hooks-cli-CX-JUHdJ.js +1223 -0
  176. package/dist/image-ops-DMl7j7f4.js +354 -0
  177. package/dist/image-ops-DpkTOzhI.js +354 -0
  178. package/dist/import-DIjlFm_Y.js +493 -0
  179. package/dist/import-DdQvVR-_.js +495 -0
  180. package/dist/inbound-context-CmmmT8IP.js +68 -0
  181. package/dist/inbound-context-oxIWzEgc.js +68 -0
  182. package/dist/inbound-path-policy-BdmTOUka.js +90 -0
  183. package/dist/inbound-path-policy-DYTLjca8.js +90 -0
  184. package/dist/index.js +106 -105
  185. package/dist/inspect-C9d1V-lI.js +559 -0
  186. package/dist/inspect-rHjRqr3W.js +559 -0
  187. package/dist/installs-QUjSL2ZA.js +325 -0
  188. package/dist/installs-vT5wnxC4.js +325 -0
  189. package/dist/ipv4-DdcyK1aU.js +46 -0
  190. package/dist/ipv4-OHvujh00.js +46 -0
  191. package/dist/ir-CnMQRFBu.js +940 -0
  192. package/dist/json-files-BiA_B-xm.js +46 -0
  193. package/dist/links-CIHbVNO_.js +15 -0
  194. package/dist/loader-CYigLbch.js +22404 -0
  195. package/dist/loader-ElWX62xE.js +22401 -0
  196. package/dist/local-roots-B0QcJDJI.js +313 -0
  197. package/dist/local-roots-BfXsZRkm.js +314 -0
  198. package/dist/logger-BtwpYD7c.js +49 -0
  199. package/dist/logging-CLc3Umm0.js +20 -0
  200. package/dist/login-C8jHYLxN.js +61 -0
  201. package/dist/login-D__FYZX9.js +62 -0
  202. package/dist/login-qr-C0Gd6ybl.js +323 -0
  203. package/dist/login-qr-D7dw54Yp.js +328 -0
  204. package/dist/logs-cli-CFOVARdJ.js +234 -0
  205. package/dist/logs-cli-DtAR__VH.js +239 -0
  206. package/dist/markdown-tables-ChBqQA_Q.js +29 -0
  207. package/dist/markdown-tables-xMuH3QnS.js +29 -0
  208. package/dist/media-CmiNXiOZ.js +10453 -0
  209. package/dist/media-DYopaoc0.js +940 -0
  210. package/dist/message-action-names-CACBi-HB.js +2521 -0
  211. package/dist/message-action-names-CFwlz01T.js +2521 -0
  212. package/dist/message-channel-DF4I2vOK.js +91 -0
  213. package/dist/net-COL170MG.js +225 -0
  214. package/dist/net-QZ8IHNXc.js +225 -0
  215. package/dist/node-cli-CW8jOcHO.js +24 -0
  216. package/dist/nodes-cli-B4lvU9N5.js +1349 -0
  217. package/dist/nodes-cli-B8iTBsI6.js +1344 -0
  218. package/dist/nodes-screen-CZCXHrWB.js +250 -0
  219. package/dist/nodes-screen-C_K1vcS5.js +250 -0
  220. package/dist/note-BVerR3D5.js +92 -0
  221. package/dist/note-Dk8-EaJg.js +92 -0
  222. package/dist/npm-registry-spec-Dma0KHft.js +786 -0
  223. package/dist/npm-registry-spec-vYkxZb6u.js +786 -0
  224. package/dist/npm-resolution-CcZYnzrL.js +86 -0
  225. package/dist/npm-resolution-DsATEEGx.js +86 -0
  226. package/dist/onboard-Csm4bDd_.js +438 -0
  227. package/dist/onboard-D1b535pC.js +436 -0
  228. package/dist/onboard-channels-5EIXyDZh.js +2547 -0
  229. package/dist/onboard-channels-bedB47Hs.js +2548 -0
  230. package/dist/onboard-config-CcPV3Cqz.js +39 -0
  231. package/dist/onboard-config-DcTaxmuf.js +39 -0
  232. package/dist/onboard-helpers-BHNXyhA4.js +364 -0
  233. package/dist/onboard-helpers-eTUU00t8.js +363 -0
  234. package/dist/onboard-remote-DwDKQk1K.js +127 -0
  235. package/dist/onboard-remote-TPbiye5m.js +127 -0
  236. package/dist/onboarding-D0YGZ_Ux.js +588 -0
  237. package/dist/onboarding-DCfmKzl2.js +586 -0
  238. package/dist/onboarding.finalize-BhpsVwME.js +399 -0
  239. package/dist/onboarding.finalize-CY8vgmi9.js +402 -0
  240. package/dist/onboarding.gateway-config-C_eqpJ7D.js +192 -0
  241. package/dist/onboarding.gateway-config-DR1ey6tU.js +199 -0
  242. package/dist/outbound-Be4BgVqF.js +220 -0
  243. package/dist/outbound-CXJLn8kn.js +221 -0
  244. package/dist/outbound-attachment-CbNLn0lk.js +18 -0
  245. package/dist/outbound-attachment-DNCMF74c.js +18 -0
  246. package/dist/outbound-attachment-DaStRTGv.js +18 -0
  247. package/dist/pairing-cli-CxGDUsLT.js +128 -0
  248. package/dist/pairing-cli-D83T3PG9.js +123 -0
  249. package/dist/pairing-labels-6f8FqSS5.js +9 -0
  250. package/dist/pairing-labels-CI5j-OUT.js +9 -0
  251. package/dist/pairing-store-DnTHRcnO.js +459 -0
  252. package/dist/pairing-store-ONzqxcNb.js +460 -0
  253. package/dist/path-env-D7VB7sOO.js +89 -0
  254. package/dist/path-env-DFiYvvI-.js +89 -0
  255. package/dist/path-safety-BshBsw4P.js +14 -0
  256. package/dist/path-safety-CZbhQciI.js +14 -0
  257. package/dist/plugin-auto-enable-BnCQKkIK.js +302 -0
  258. package/dist/plugin-auto-enable-CFRs-pcA.js +301 -0
  259. package/dist/plugin-registry-CV5pfXOU.js +33 -0
  260. package/dist/plugin-registry-CmG34W0u.js +33 -0
  261. package/dist/plugin-sdk/agents/agent-helpers.d.ts +0 -1
  262. package/dist/plugin-sdk/agents/agent-scope.d.ts +10 -0
  263. package/dist/plugin-sdk/agents/agent-types.d.ts +1 -6
  264. package/dist/plugin-sdk/agents/agent-utils.d.ts +0 -14
  265. package/dist/plugin-sdk/agents/provider-utils.d.ts +0 -1
  266. package/dist/plugin-sdk/agents/subagent-spawn.d.ts +0 -1
  267. package/dist/plugin-sdk/agents/tools/sessions-helpers.d.ts +0 -1
  268. package/dist/plugin-sdk/auth/constants.d.ts +16 -0
  269. package/dist/plugin-sdk/auth/display.d.ts +7 -0
  270. package/dist/plugin-sdk/auth/doctor.d.ts +8 -0
  271. package/dist/plugin-sdk/auth/env-injection.d.ts +41 -0
  272. package/dist/plugin-sdk/auth/index.d.ts +8 -0
  273. package/dist/plugin-sdk/auth/oauth.d.ts +14 -0
  274. package/dist/plugin-sdk/auth/provider-auth.d.ts +40 -0
  275. package/dist/plugin-sdk/auth/session-override.d.ts +18 -0
  276. package/dist/plugin-sdk/auto-reply/reply/agent-runner-execution.d.ts +0 -1
  277. package/dist/plugin-sdk/auto-reply/reply/agent-runner-utils.d.ts +0 -2
  278. package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +1 -4
  279. package/dist/plugin-sdk/auto-reply/reply/commands-types.d.ts +1 -4
  280. package/dist/plugin-sdk/auto-reply/reply/directive-handling.levels.d.ts +1 -7
  281. package/dist/plugin-sdk/auto-reply/reply/directive-handling.params.d.ts +1 -4
  282. package/dist/plugin-sdk/auto-reply/reply/directive-handling.parse.d.ts +1 -7
  283. package/dist/plugin-sdk/auto-reply/reply/directive-handling.shared.d.ts +1 -4
  284. package/dist/plugin-sdk/auto-reply/reply/directives.d.ts +3 -15
  285. package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -5
  286. package/dist/plugin-sdk/auto-reply/reply/get-reply-inline-actions.d.ts +1 -5
  287. package/dist/plugin-sdk/auto-reply/reply/get-reply-run.d.ts +1 -5
  288. package/dist/plugin-sdk/auto-reply/reply/queue/types.d.ts +1 -3
  289. package/dist/plugin-sdk/auto-reply/reply/response-prefix-template.d.ts +4 -6
  290. package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +0 -7
  291. package/dist/plugin-sdk/auto-reply/reply/session-updates.d.ts +0 -10
  292. package/dist/plugin-sdk/auto-reply/reply.d.ts +1 -1
  293. package/dist/plugin-sdk/auto-reply/status.d.ts +2 -6
  294. package/dist/plugin-sdk/auto-reply/thinking.d.ts +0 -11
  295. package/dist/plugin-sdk/auto-reply/types.d.ts +1 -2
  296. package/dist/plugin-sdk/commands/agent/session.d.ts +1 -2
  297. package/dist/plugin-sdk/config/defaults.d.ts +0 -1
  298. package/dist/plugin-sdk/config/sessions/types.d.ts +0 -8
  299. package/dist/plugin-sdk/config/types.agent-defaults.d.ts +28 -112
  300. package/dist/plugin-sdk/config/types.agents.d.ts +8 -0
  301. package/dist/plugin-sdk/config/types.messages.d.ts +1 -2
  302. package/dist/plugin-sdk/config/types.tools.d.ts +1 -1
  303. package/dist/plugin-sdk/config/zod-schema.agent-defaults.d.ts +9 -66
  304. package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +5 -13
  305. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +12 -76
  306. package/dist/plugin-sdk/config/zod-schema.d.ts +12 -76
  307. package/dist/plugin-sdk/daemon/constants.d.ts +2 -2
  308. package/dist/plugin-sdk/gateway/protocol/index.d.ts +1 -3
  309. package/dist/plugin-sdk/gateway/protocol/schema/sessions.d.ts +0 -2
  310. package/dist/plugin-sdk/gateway/session-utils.types.d.ts +0 -2
  311. package/dist/plugin-sdk/index.js +108 -134
  312. package/dist/plugin-sdk/middleware/auth-key-retry.d.ts +32 -0
  313. package/dist/plugin-sdk/middleware/channel-bridge.d.ts +4 -0
  314. package/dist/plugin-sdk/middleware/error-classifier.d.ts +5 -0
  315. package/dist/plugin-sdk/middleware/media-resolver.d.ts +12 -0
  316. package/dist/plugin-sdk/middleware/runtime-factory.d.ts +42 -0
  317. package/dist/plugin-sdk/middleware/types.d.ts +33 -1
  318. package/dist/plugin-sdk/plugins/types.d.ts +1 -1
  319. package/dist/plugin-sdk/terminal/palette.d.ts +2 -2
  320. package/dist/plugins-B4waLB_f.js +453 -0
  321. package/dist/plugins-D6-JJ1il.js +455 -0
  322. package/dist/plugins-cli-DG2zHgdP.js +799 -0
  323. package/dist/plugins-cli-DZvQzkWd.js +794 -0
  324. package/dist/ports-BcTKFlWl.js +96 -0
  325. package/dist/ports-DAc2AlZE.js +316 -0
  326. package/dist/ports-HiuYk3bt.js +96 -0
  327. package/dist/ports-dEePqmCq.js +370 -0
  328. package/dist/program-CX-EtQ9W.js +245 -0
  329. package/dist/program-context-R3wsjl2f.js +474 -0
  330. package/dist/progress-DQ1drugY.js +124 -0
  331. package/dist/prompt-edYTUtju.js +21 -0
  332. package/dist/prompt-select-styled-BzL7v1zQ.js +1647 -0
  333. package/dist/prompt-select-styled-g5q4srtu.js +1650 -0
  334. package/dist/prompt-style-CYEpbwXH.js +9 -0
  335. package/dist/provider-dispatcher-D7qFGoUR.js +660 -0
  336. package/dist/provider-dispatcher-dB_rm6tV.js +659 -0
  337. package/dist/push-apns-DQwR-i4_.js +713 -0
  338. package/dist/push-apns-Dj5RApCY.js +711 -0
  339. package/dist/pw-ai-DOQMJFB-.js +1911 -0
  340. package/dist/pw-ai-oqtYDmjQ.js +1907 -0
  341. package/dist/qr-cli-CBGm_Cik.js +353 -0
  342. package/dist/qr-cli-D2jZPdW9.js +348 -0
  343. package/dist/redact-gXuh8MFk.js +191 -0
  344. package/dist/redact-snapshot-B-2V56Yb.js +2016 -0
  345. package/dist/redact-snapshot-CD36XSYE.js +2016 -0
  346. package/dist/register.agent-DLSuiqWE.js +287 -0
  347. package/dist/register.agent-DcvEt3hG.js +1044 -0
  348. package/dist/register.configure-3edoYZai.js +131 -0
  349. package/dist/register.configure-CyOJCmnY.js +125 -0
  350. package/dist/register.import-Cku0T-PA.js +31 -0
  351. package/dist/register.import-Dr8TiUVx.js +28 -0
  352. package/dist/register.maintenance-5aaPQbJk.js +495 -0
  353. package/dist/register.maintenance-DPSswZDJ.js +498 -0
  354. package/dist/register.message-BaSVFv92.js +682 -0
  355. package/dist/register.message-FEI0RiNN.js +687 -0
  356. package/dist/register.onboard-CO1UZL-9.js +258 -0
  357. package/dist/register.onboard-DuLKxjXl.js +263 -0
  358. package/dist/register.setup-CFYYd_Ev.js +115 -0
  359. package/dist/register.setup-P0UHDBMS.js +110 -0
  360. package/dist/register.status-health-sessions-D_3vm2yw.js +424 -0
  361. package/dist/register.status-health-sessions-z9x79dmg.js +665 -0
  362. package/dist/register.subclis-B-d970d6.js +267 -0
  363. package/dist/replies-BvarRpHb.js +136 -0
  364. package/dist/replies-CSzm5168.js +136 -0
  365. package/dist/reply-CTgksTO1.js +13695 -0
  366. package/dist/reply-CUyafs4J.js +13692 -0
  367. package/dist/reply-directives-Caq4zVTg.js +182 -0
  368. package/dist/reply-directives-D91fapDF.js +182 -0
  369. package/dist/reply-payloads-te0YnESs.js +527 -0
  370. package/dist/reply-prefix-Bv8Mv9q8.js +37 -0
  371. package/dist/reply-prefix-Rk_UEaJa.js +37 -0
  372. package/dist/resolve-route-BPa6q23t.js +249 -0
  373. package/dist/resolve-route-CN9BEALz.js +249 -0
  374. package/dist/response-prefix-template-D-ptXREi.js +134 -0
  375. package/dist/response-prefix-template-Dckjdftg.js +134 -0
  376. package/dist/retry-BcZuGfnV.js +77 -0
  377. package/dist/retry-BzWBtFpP.js +77 -0
  378. package/dist/run-main-BugUkGES.js +303 -0
  379. package/dist/runner-CVMXkHe9.js +2295 -0
  380. package/dist/runner-DOWTBU0-.js +2295 -0
  381. package/dist/runtime-guard-CXt4yzo-.js +60 -0
  382. package/dist/secure-random-CBwDBdj1.js +44 -0
  383. package/dist/security-cli-BQzdzJUp.js +479 -0
  384. package/dist/security-cli-D2d8RvsT.js +485 -0
  385. package/dist/send-B3G3I3II.js +349 -0
  386. package/dist/send-B6IB6ELR.js +547 -0
  387. package/dist/send-BT8XEvZB.js +332 -0
  388. package/dist/send-BTupAHVX.js +2245 -0
  389. package/dist/send-BZCfto_I.js +1174 -0
  390. package/dist/send-C5EDjThR.js +492 -0
  391. package/dist/send-CBM54hgN.js +349 -0
  392. package/dist/send-CPBd6ItT.js +29 -0
  393. package/dist/send-CzYm7ULP.js +2245 -0
  394. package/dist/send-D2m_x8xM.js +374 -0
  395. package/dist/send-DmEBPE2S.js +1779 -0
  396. package/dist/send-Dt4iCx61.js +426 -0
  397. package/dist/send-MWjpLHEV.js +11 -0
  398. package/dist/send-qpwqt34s.js +547 -0
  399. package/dist/send-rW25uKNz.js +1776 -0
  400. package/dist/send-uqa6CNuP.js +492 -0
  401. package/dist/server-BhmYVCED.js +201 -0
  402. package/dist/server-DaUw1o2B.js +206 -0
  403. package/dist/server-lifecycle-BeZsBQwF.js +2437 -0
  404. package/dist/server-lifecycle-C2F1_TE2.js +2437 -0
  405. package/dist/server-node-events-DoRFbKCT.js +390 -0
  406. package/dist/server-node-events-jbbbt-4R.js +395 -0
  407. package/dist/service-BDt-zUvV.js +670 -0
  408. package/dist/service-Os7W1F2S.js +670 -0
  409. package/dist/session-B9KGKVrY.js +170 -0
  410. package/dist/session-DzAupDyj.js +170 -0
  411. package/dist/session-cost-usage-BYCI739a.js +627 -0
  412. package/dist/session-cost-usage-DGsPcuMj.js +627 -0
  413. package/dist/session-dirs-BIg5RHAh.js +947 -0
  414. package/dist/session-dirs-DwDxjK1p.js +947 -0
  415. package/dist/session-utils-BgWDCbyx.js +622 -0
  416. package/dist/session-utils-CxxOeC1M.js +622 -0
  417. package/dist/sessions-Bwu0l_CG.js +2569 -0
  418. package/dist/sessions-CiuFFCnt.js +247 -0
  419. package/dist/shell-env-CsV_IkJj.js +163 -0
  420. package/dist/shell-env-hZW9j-Uc.js +163 -0
  421. package/dist/ssrf-B-rF_tZB.js +183 -0
  422. package/dist/ssrf-D6fl_7ww.js +183 -0
  423. package/dist/status-BOFm7iyj.js +2065 -0
  424. package/dist/status-RI2y_M21.js +2061 -0
  425. package/dist/status.update-DbO7izip.js +79 -0
  426. package/dist/status.update-wXyvcztI.js +79 -0
  427. package/dist/store-BLGrRL_E.js +64 -0
  428. package/dist/store-BYhcsOLr.js +64 -0
  429. package/dist/store-Dv76bGHg.js +2571 -0
  430. package/dist/store-Dw93tSB-.js +53 -0
  431. package/dist/subagent-registry-DWL-tayF.js +4856 -0
  432. package/dist/subagent-registry-HjR1tO3-.js +4854 -0
  433. package/dist/subsystem-BCkt9Ocb.js +1079 -0
  434. package/dist/subsystem-BgxIzx7w.js +1137 -0
  435. package/dist/system-cli-DtrDDmCt.js +71 -0
  436. package/dist/system-cli-xDr_Yyaa.js +76 -0
  437. package/dist/systemd-BlbIQ1PV.js +547 -0
  438. package/dist/systemd-DzXePo7r.js +547 -0
  439. package/dist/systemd-linger-mLbBF4pa.js +75 -0
  440. package/dist/systemd-linger-qlGGW2JB.js +75 -0
  441. package/dist/table-V_9n7CjP.js +279 -0
  442. package/dist/tables-Cy3gObW7.js +55 -0
  443. package/dist/tables-DAuk-Y6F.js +55 -0
  444. package/dist/tables-DRh09aPZ.js +55 -0
  445. package/dist/tailnet-BoTa0e2q.js +40 -0
  446. package/dist/tailnet-Cy0Q27lj.js +40 -0
  447. package/dist/tailscale-CiWkh0vS.js +230 -0
  448. package/dist/tailscale-Driw3j8E.js +230 -0
  449. package/dist/targets-3hewwPvM.js +120 -0
  450. package/dist/targets-Bkw_co-B.js +220 -0
  451. package/dist/targets-C1Tt0ZWd.js +2406 -0
  452. package/dist/targets-CsrqF2M4.js +650 -0
  453. package/dist/targets-DKriCISG.js +53 -0
  454. package/dist/targets-DTM2OPnS.js +650 -0
  455. package/dist/targets-DhhaK2xG.js +53 -0
  456. package/dist/targets-tDrl_ioQ.js +46 -0
  457. package/dist/targets-yq1kGK1_.js +2407 -0
  458. package/dist/thinking-XA5P_zFw.js +88 -0
  459. package/dist/thinking-l-rrvZwu.js +88 -0
  460. package/dist/tokens-7ZtWRjA3.js +21 -0
  461. package/dist/tool-display-AxpSXZVq.js +785 -0
  462. package/dist/tool-display-D6GD-41Y.js +785 -0
  463. package/dist/tool-images-D16vIWPg.js +263 -0
  464. package/dist/tool-images-IVIZ29ID.js +263 -0
  465. package/dist/trash--8b4GDyV.js +125 -0
  466. package/dist/trash-ivbG2QWV.js +125 -0
  467. package/dist/tui-Cbe1EW-B.js +3319 -0
  468. package/dist/tui-Dj3XrTCV.js +3319 -0
  469. package/dist/tui-cli-EGqEcdfE.js +64 -0
  470. package/dist/tui-cli-KKmqnNs2.js +59 -0
  471. package/dist/update-DruVguh4.js +349 -0
  472. package/dist/update-cli-C5tdQeGG.js +1371 -0
  473. package/dist/update-cli-Canq11sh.js +1374 -0
  474. package/dist/update-y8nz-3OC.js +349 -0
  475. package/dist/usage-CAuX4vsd.js +5384 -0
  476. package/dist/utils-C5daYcFn.js +631 -0
  477. package/dist/web-B9gR_cGR.js +3071 -0
  478. package/dist/web-DZ8ahrhK.js +77 -0
  479. package/dist/web-DkYPsnyd.js +71 -0
  480. package/dist/webhooks-cli-DFqGwW1f.js +329 -0
  481. package/dist/webhooks-cli-y-E-q0Xo.js +334 -0
  482. package/dist/whatsapp-actions-BXIe-Uei.js +123 -0
  483. package/dist/whatsapp-actions-BictxOCB.js +129 -0
  484. package/dist/widearea-dns-fHQt5-Q3.js +127 -0
  485. package/dist/workspace-DvbSDgO_.js +449 -0
  486. package/dist/workspace-zLfKNRwR.js +447 -0
  487. package/dist/zod-schema-B9RGngMW.js +2696 -0
  488. package/dist/zod-schema-D3hQ5SKe.js +2696 -0
  489. package/extensions/matrix/src/matrix/monitor/replies.ts +0 -24
  490. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +0 -1
  491. package/package.json +3 -3
  492. package/dist/accounts-BFy_Z3od.js +0 -272
  493. package/dist/accounts-BTXSfPWi.js +0 -270
  494. package/dist/accounts-BxGS70Do.js +0 -36
  495. package/dist/accounts-CNY1TGj1.js +0 -47
  496. package/dist/accounts-DBohBlww.js +0 -32
  497. package/dist/accounts-DqRQ75w3.js +0 -36
  498. package/dist/accounts-iODF3SK2.js +0 -47
  499. package/dist/ack-reactions-B11TAC2D.js +0 -446
  500. package/dist/ack-reactions-BWVjL4H6.js +0 -446
  501. package/dist/acp-cli-CA1xMmVo.js +0 -1320
  502. package/dist/acp-cli-CGo6fJVZ.js +0 -1326
  503. package/dist/active-listener-VzhWW8W6.js +0 -37
  504. package/dist/active-listener-z0qVEcom.js +0 -37
  505. package/dist/agent-CTizRPIJ.js +0 -732
  506. package/dist/agent-D2RVoS5g.js +0 -731
  507. package/dist/agent-helpers-B6VfZ9_u.js +0 -606
  508. package/dist/agent-helpers-CTx5KKJu.js +0 -606
  509. package/dist/agent-scope-BGYzhtWQ.js +0 -121
  510. package/dist/agent-scope-C50VuLKh.js +0 -119
  511. package/dist/agents-BuYn-obw.js +0 -788
  512. package/dist/agents.config-BSTxuTVd.js +0 -116
  513. package/dist/agents.config-p3V3b9u6.js +0 -116
  514. package/dist/audio-DPOuhNq7.js +0 -43
  515. package/dist/audio-VBcVDa08.js +0 -43
  516. package/dist/audio-preflight-BwmCYeuM.js +0 -64
  517. package/dist/audio-preflight-co8gjlPX.js +0 -69
  518. package/dist/audit-oH4urD3G.js +0 -3138
  519. package/dist/audit-qgtCT3ik.js +0 -3138
  520. package/dist/auth-CAczFgAO.js +0 -448
  521. package/dist/auth-Deh9i9Eg.js +0 -448
  522. package/dist/auth-profiles-BquJGKLC.js +0 -279
  523. package/dist/auth-profiles-D8vKiBPq.js +0 -281
  524. package/dist/banner-Cf978khN.js +0 -294
  525. package/dist/binaries-DXW6oATV.js +0 -13
  526. package/dist/bindings-CRU_udk8.js +0 -69
  527. package/dist/bindings-DQZAu8Wv.js +0 -69
  528. package/dist/bonjour-discovery-DdAk1VyO.js +0 -378
  529. package/dist/bonjour-discovery-DuhiIZZx.js +0 -378
  530. package/dist/browser-cli-CZC4h5V4.js +0 -1687
  531. package/dist/browser-cli-DAgi_aQk.js +0 -1692
  532. package/dist/call-BbwtB9Y-.js +0 -2828
  533. package/dist/call-PivL7Uex.js +0 -2829
  534. package/dist/catalog-BqO6yem_.js +0 -185
  535. package/dist/catalog-DFmaYwfk.js +0 -185
  536. package/dist/channel-account-context-CvIDAtHS.js +0 -550
  537. package/dist/channel-account-context-q-o0pG1A.js +0 -550
  538. package/dist/channel-activity-BaCNOZpP.js +0 -94
  539. package/dist/channel-activity-C-G4n9BK.js +0 -292
  540. package/dist/channel-activity-DTKGf3j5.js +0 -94
  541. package/dist/channel-options-Cyappik_.js +0 -32
  542. package/dist/channel-options-DFnypY5S.js +0 -33
  543. package/dist/channel-selection-BGl53D5K.js +0 -51
  544. package/dist/channel-selection-NNPbxnyZ.js +0 -51
  545. package/dist/channel-web-DmhVkWbP.js +0 -2134
  546. package/dist/channel-web-kRC3UYBJ.js +0 -2136
  547. package/dist/channels-cli-C5XRkPJl.js +0 -1421
  548. package/dist/channels-cli-D6TqCI0m.js +0 -1426
  549. package/dist/channels-status-issues-CUc9mpeW.js +0 -18
  550. package/dist/channels-status-issues-DwRDzwrV.js +0 -18
  551. package/dist/chat-envelope-DEZ-5RY8.js +0 -248
  552. package/dist/chat-envelope-el7Uo-Fe.js +0 -248
  553. package/dist/chrome-0QaGKb3L.js +0 -1732
  554. package/dist/chrome-CFeWdP0Y.js +0 -1733
  555. package/dist/chunk-CSQfUhgF.js +0 -341
  556. package/dist/chunk-D0Y_w4oX.js +0 -341
  557. package/dist/clack-prompter-B7tOxhJd.js +0 -122
  558. package/dist/clack-prompter-CCFnKP_1.js +0 -121
  559. package/dist/cleanup-utils-CqAVZz2b.js +0 -94
  560. package/dist/cli-BR2J3c4l.js +0 -125
  561. package/dist/cli-C1q1vSmN.js +0 -130
  562. package/dist/clipboard-D7_SKHPK.js +0 -31
  563. package/dist/clipboard-Dzkx6Q2K.js +0 -31
  564. package/dist/command-format-CVfo8I5f.js +0 -18
  565. package/dist/command-format-DgXcqxBt.js +0 -32
  566. package/dist/command-registry-CYjvOp8W.js +0 -215
  567. package/dist/commands-CDonBOrw.js +0 -41
  568. package/dist/commands-D_-bgTlO.js +0 -41
  569. package/dist/commands-registry-CWJv6xe2.js +0 -892
  570. package/dist/commands-registry-Ci8_cFk9.js +0 -893
  571. package/dist/common-CMI-qsF8.js +0 -156
  572. package/dist/common-DSVmydhm.js +0 -156
  573. package/dist/completion-cli-8iZJqfmX.js +0 -452
  574. package/dist/completion-cli-CYDjEZSt.js +0 -452
  575. package/dist/config-D5XU45KD.js +0 -6953
  576. package/dist/config-FHu9Bn4R.js +0 -6951
  577. package/dist/config-cli-Gehy4sav.js +0 -241
  578. package/dist/config-cli-RC9qMgJq.js +0 -246
  579. package/dist/config-guard-J-Q_DFWk.js +0 -97
  580. package/dist/config-guard-cB5a_ANg.js +0 -75
  581. package/dist/config-validation-BPNyd9_3.js +0 -18
  582. package/dist/config-validation-BPWuvhVe.js +0 -18
  583. package/dist/configure-CC2XdRRm.js +0 -891
  584. package/dist/configure-DxFBJuhZ.js +0 -889
  585. package/dist/constants-BmRFoHl0.js +0 -67
  586. package/dist/constants-C9WPAluB.js +0 -67
  587. package/dist/control-auth-D0tpV3ts.js +0 -397
  588. package/dist/control-auth-_-0PGRUs.js +0 -397
  589. package/dist/control-ui/assets/index-B4ZM1lW1.js +0 -7738
  590. package/dist/control-ui/assets/index-B4ZM1lW1.js.map +0 -1
  591. package/dist/control-ui/assets/index-PED72sKF.css +0 -1
  592. package/dist/control-ui-assets-Cx_mw4D0.js +0 -186
  593. package/dist/control-ui-assets-W1AUuGrO.js +0 -186
  594. package/dist/conversation-label-C4SDz4sT.js +0 -36
  595. package/dist/conversation-label-D1frnvYe.js +0 -36
  596. package/dist/cron-cli-BzERxhr5.js +0 -495
  597. package/dist/cron-cli-C8j_uslU.js +0 -490
  598. package/dist/daemon-cli-C95XNbX0.js +0 -1199
  599. package/dist/daemon-cli-e6sURMqd.js +0 -1197
  600. package/dist/daemon-install-CcohRvKV.js +0 -55
  601. package/dist/daemon-install-DDshfT0J.js +0 -60
  602. package/dist/daemon-install-helpers-CFGAfRlj.js +0 -462
  603. package/dist/daemon-install-helpers-DIUzSFG1.js +0 -462
  604. package/dist/defaults-B5KStIBg.js +0 -7
  605. package/dist/defaults-xUAL2Z-F.js +0 -7
  606. package/dist/deliver-912khjLK.js +0 -481
  607. package/dist/deliver-D56J4-1F.js +0 -481
  608. package/dist/delivery-queue-Cfa9Wmxp.js +0 -244
  609. package/dist/delivery-queue-CxVRi4tw.js +0 -244
  610. package/dist/devices-cli-0qDhTgZR.js +0 -316
  611. package/dist/devices-cli-6SKMR2bV.js +0 -321
  612. package/dist/diagnostics-99iCgBUh.js +0 -46
  613. package/dist/diagnostics-VC0cz7kX.js +0 -46
  614. package/dist/directory-cli-5YXdoVdn.js +0 -217
  615. package/dist/directory-cli-D3IKCHmn.js +0 -222
  616. package/dist/dm-policy-shared-4rkjhcrM.js +0 -22
  617. package/dist/dm-policy-shared-D8lgnmrC.js +0 -22
  618. package/dist/dns-cli-11CtErVU.js +0 -197
  619. package/dist/dns-cli-SiEd_1Lq.js +0 -202
  620. package/dist/dock-BqNINg7k.js +0 -928
  621. package/dist/dock-CQuu41bw.js +0 -929
  622. package/dist/doctor-completion-BR1SlAT3.js +0 -92
  623. package/dist/doctor-completion-CZwpEhIK.js +0 -92
  624. package/dist/doctor-config-flow-BVkHcvoj.js +0 -1933
  625. package/dist/doctor-config-flow-DVYRn0An.js +0 -1934
  626. package/dist/enable-DcJnkzfz.js +0 -59
  627. package/dist/enable-ibNq4UWy.js +0 -59
  628. package/dist/env-DeF64iu0.js +0 -60
  629. package/dist/env-vars-7aZqKPhk.js +0 -93
  630. package/dist/errors-8F-77i6m.js +0 -35
  631. package/dist/errors-DZ199hOo.js +0 -35
  632. package/dist/exec-DbKuYyM1.js +0 -164
  633. package/dist/exec-DkFE7lqU.js +0 -164
  634. package/dist/fetch-BFSBLBkA.js +0 -67
  635. package/dist/fetch-C6XKGA11.js +0 -67
  636. package/dist/fetch-CEDsOiql.js +0 -67
  637. package/dist/file-lock-CIvloidc.js +0 -107
  638. package/dist/file-lock-CzBL_VIx.js +0 -107
  639. package/dist/fs-safe-DSwT85uK.js +0 -88
  640. package/dist/fs-safe-DkBhNAc3.js +0 -98
  641. package/dist/gateway-cli-BEEZhCHv.js +0 -23747
  642. package/dist/gateway-cli-Nob0g_4y.js +0 -23742
  643. package/dist/gateway-rpc-CksB-N83.js +0 -28
  644. package/dist/gateway-rpc-Dq44SkOv.js +0 -28
  645. package/dist/gmail-setup-utils-Cnx8A5pW.js +0 -422
  646. package/dist/gmail-setup-utils-nkabbKOE.js +0 -423
  647. package/dist/health-RT-F3hzT.js +0 -1423
  648. package/dist/health-SOuaKNRa.js +0 -1420
  649. package/dist/health-format-BG95OE6N.js +0 -28
  650. package/dist/heartbeat-visibility-BxkZjE5m.js +0 -125
  651. package/dist/heartbeat-visibility-CGG-G7px.js +0 -125
  652. package/dist/help-format-DAxf0l_h.js +0 -17
  653. package/dist/helpers-kkeXif0Q.js +0 -10
  654. package/dist/hook-runner-global-DJ14gXFP.js +0 -527
  655. package/dist/hooks-cli-DyEKryW8.js +0 -1217
  656. package/dist/hooks-cli-RuEn0-oy.js +0 -1222
  657. package/dist/image-ops-Bi6JPSkD.js +0 -354
  658. package/dist/image-ops-DWytvdh_.js +0 -354
  659. package/dist/import-D8BBZQgl.js +0 -170
  660. package/dist/import-DQ6NI4Fz.js +0 -168
  661. package/dist/inbound-context-CPkkQW0i.js +0 -68
  662. package/dist/inbound-context-DS_kpIYI.js +0 -68
  663. package/dist/inbound-path-policy-Bg4gZBx-.js +0 -250
  664. package/dist/inbound-path-policy-sdr5Ji0k.js +0 -250
  665. package/dist/inspect-Dt8hogS3.js +0 -559
  666. package/dist/inspect-vYIL1oA0.js +0 -559
  667. package/dist/installs-aM5dWAyn.js +0 -325
  668. package/dist/installs-pWdqG8HL.js +0 -325
  669. package/dist/ipv4--2WXMVtE.js +0 -46
  670. package/dist/ipv4-CDQpx1A7.js +0 -46
  671. package/dist/ir-BpaAMTfW.js +0 -940
  672. package/dist/json-files-DzpTak5i.js +0 -46
  673. package/dist/links-C3soDNDH.js +0 -15
  674. package/dist/loader-Ccwsh8Sh.js +0 -22624
  675. package/dist/loader-y9MhJewT.js +0 -22621
  676. package/dist/local-roots-BrH0Q63K.js +0 -313
  677. package/dist/local-roots-nImrw2WR.js +0 -314
  678. package/dist/logger-Bw3cFE5t.js +0 -49
  679. package/dist/logging-C-nxX2fn.js +0 -20
  680. package/dist/login-C_Kt57nO.js +0 -62
  681. package/dist/login-DOmWDMeP.js +0 -61
  682. package/dist/login-qr-CXU0wC5K.js +0 -322
  683. package/dist/login-qr-D0u6fdeO.js +0 -327
  684. package/dist/logs-cli-CschwP4d.js +0 -238
  685. package/dist/logs-cli-D7ayUvz_.js +0 -233
  686. package/dist/markdown-tables-CrmghPAr.js +0 -29
  687. package/dist/markdown-tables-jrnSPvZ6.js +0 -29
  688. package/dist/media-CojxZ45J.js +0 -10492
  689. package/dist/media-DN7yRfrH.js +0 -940
  690. package/dist/message-action-names-CtEZcmlU.js +0 -2521
  691. package/dist/message-action-names-WglOO_DT.js +0 -2521
  692. package/dist/message-channel-DzJqHVZD.js +0 -91
  693. package/dist/net-Cg8AQeke.js +0 -225
  694. package/dist/net-D6D0wgcF.js +0 -225
  695. package/dist/node-cli-Q2-n3Fgv.js +0 -24
  696. package/dist/nodes-cli-C2SoKfCv.js +0 -1343
  697. package/dist/nodes-cli-CQmlfx0K.js +0 -1348
  698. package/dist/nodes-screen-BR9sYoPa.js +0 -250
  699. package/dist/nodes-screen-Cw7Hv7M2.js +0 -250
  700. package/dist/note-Dlv4NmlQ.js +0 -92
  701. package/dist/note-kvWV4xtw.js +0 -92
  702. package/dist/npm-registry-spec-0qiKawvv.js +0 -786
  703. package/dist/npm-registry-spec-COvUzy5J.js +0 -786
  704. package/dist/npm-resolution-6v_Zm-9G.js +0 -86
  705. package/dist/npm-resolution-BFz7LeoN.js +0 -86
  706. package/dist/onboard-CgyU-mDL.js +0 -407
  707. package/dist/onboard-RI4vNTZd.js +0 -405
  708. package/dist/onboard-channels-DN5JoKPd.js +0 -2548
  709. package/dist/onboard-channels-DyAd1OZr.js +0 -2547
  710. package/dist/onboard-config-BCTthQ7J.js +0 -24
  711. package/dist/onboard-config-y-2cgT0V.js +0 -24
  712. package/dist/onboard-helpers-BCzZUD0z.js +0 -363
  713. package/dist/onboard-helpers-sDc2Ky6H.js +0 -362
  714. package/dist/onboard-remote-CJrMtttl.js +0 -127
  715. package/dist/onboard-remote-hyQIBguz.js +0 -127
  716. package/dist/onboarding-DCu1iBTV.js +0 -541
  717. package/dist/onboarding-zKMitzpb.js +0 -543
  718. package/dist/onboarding.finalize-ClHhYE2E.js +0 -401
  719. package/dist/onboarding.finalize-D5JkVJgg.js +0 -398
  720. package/dist/onboarding.gateway-config-DFh71Ndn.js +0 -198
  721. package/dist/onboarding.gateway-config-VBk6AP9U.js +0 -191
  722. package/dist/outbound-BYlZshIw.js +0 -221
  723. package/dist/outbound-CFfJC1j5.js +0 -220
  724. package/dist/outbound-attachment-BCNs1u1F.js +0 -18
  725. package/dist/outbound-attachment-B_0D60Yr.js +0 -18
  726. package/dist/outbound-attachment-o0seS0CP.js +0 -18
  727. package/dist/pairing-cli-BeydfoF9.js +0 -122
  728. package/dist/pairing-cli-DWzX866x.js +0 -127
  729. package/dist/pairing-labels-B-N8S5Fc.js +0 -9
  730. package/dist/pairing-labels-B_53dY5L.js +0 -9
  731. package/dist/pairing-store-BxdqFZGK.js +0 -460
  732. package/dist/pairing-store-CTkD51uW.js +0 -459
  733. package/dist/path-env-DR5vn3QL.js +0 -89
  734. package/dist/path-env-qRJbjJzj.js +0 -89
  735. package/dist/path-safety-DkT9RmTG.js +0 -14
  736. package/dist/path-safety-juI2XbO1.js +0 -14
  737. package/dist/plugin-auto-enable-D23gv7Aw.js +0 -302
  738. package/dist/plugin-auto-enable-DuPS9XiJ.js +0 -301
  739. package/dist/plugin-registry-CNu_1KZz.js +0 -33
  740. package/dist/plugin-registry-DeHwd2jk.js +0 -33
  741. package/dist/plugin-sdk/agents/agent-helpers/thinking.d.ts +0 -5
  742. package/dist/plugin-sdk/agents/auth-profiles/constants.d.ts +0 -16
  743. package/dist/plugin-sdk/agents/auth-profiles/display.d.ts +0 -7
  744. package/dist/plugin-sdk/agents/auth-profiles/doctor.d.ts +0 -8
  745. package/dist/plugin-sdk/agents/auth-profiles/oauth.d.ts +0 -14
  746. package/dist/plugin-sdk/agents/auth-profiles/session-override.d.ts +0 -18
  747. package/dist/plugin-sdk/agents/auth-profiles.d.ts +0 -8
  748. package/dist/plugin-sdk/agents/defaults.d.ts +0 -3
  749. package/dist/plugin-sdk/agents/provider-auth.d.ts +0 -40
  750. package/dist/plugin-sdk/auto-reply/model-runtime.d.ts +0 -17
  751. package/dist/plugin-sdk/config/model-input.d.ts +0 -9
  752. package/dist/plugin-sdk/config/zod-schema.agent-model.d.ts +0 -5
  753. package/dist/plugin-sdk/sessions/model-overrides.d.ts +0 -14
  754. package/dist/plugin-sdk/telegram/reasoning-lane-coordinator.d.ts +0 -18
  755. package/dist/plugins-BflZz0sp.js +0 -453
  756. package/dist/plugins-cli-DV82scUw.js +0 -798
  757. package/dist/plugins-cli-Qj1UyIZO.js +0 -793
  758. package/dist/plugins-woGRXMzU.js +0 -455
  759. package/dist/ports-DrruB2fK.js +0 -370
  760. package/dist/ports-GT1yV-Tg.js +0 -96
  761. package/dist/ports-NPqtlfp0.js +0 -316
  762. package/dist/ports-QMI4-F9m.js +0 -96
  763. package/dist/program-CQmIaRUI.js +0 -244
  764. package/dist/program-context-DEU6ACnL.js +0 -474
  765. package/dist/progress-CBkSaM6z.js +0 -124
  766. package/dist/prompt-Bllj1dhc.js +0 -21
  767. package/dist/prompt-select-styled-BhTN6zE2.js +0 -1650
  768. package/dist/prompt-select-styled-WopXnjIy.js +0 -1647
  769. package/dist/prompt-style-DVEm3BZW.js +0 -9
  770. package/dist/provider-dispatcher-B4QMe-I6.js +0 -659
  771. package/dist/provider-dispatcher-Bfauw6zz.js +0 -660
  772. package/dist/push-apns-C0LyG-WB.js +0 -713
  773. package/dist/push-apns-DuG95AKC.js +0 -711
  774. package/dist/pw-ai-D9n6-Wa6.js +0 -1906
  775. package/dist/pw-ai-T280E6Mn.js +0 -1910
  776. package/dist/qr-cli-DVECWTHN.js +0 -352
  777. package/dist/qr-cli-hSLixZCe.js +0 -347
  778. package/dist/redact-eZq1uwNK.js +0 -191
  779. package/dist/redact-snapshot-BZYLIqe-.js +0 -2028
  780. package/dist/redact-snapshot-C6hVx_9I.js +0 -2028
  781. package/dist/register.agent-Dmj-sgEl.js +0 -1043
  782. package/dist/register.agent-IspcBFeD.js +0 -286
  783. package/dist/register.configure-BqJEqyGL.js +0 -130
  784. package/dist/register.configure-PPkU_4Ea.js +0 -124
  785. package/dist/register.import-Bs-UkOs-.js +0 -27
  786. package/dist/register.import-DLng8g-e.js +0 -30
  787. package/dist/register.maintenance-BbpkJil3.js +0 -497
  788. package/dist/register.maintenance-C5nkOQxa.js +0 -494
  789. package/dist/register.message-C83Hi1b3.js +0 -681
  790. package/dist/register.message-D16isu4u.js +0 -686
  791. package/dist/register.onboard-B8EzX3wY.js +0 -257
  792. package/dist/register.onboard-CyRbr_0V.js +0 -262
  793. package/dist/register.setup-DWyoowAz.js +0 -109
  794. package/dist/register.setup-Dz6GwMnu.js +0 -114
  795. package/dist/register.status-health-sessions-CbQOfycz.js +0 -423
  796. package/dist/register.status-health-sessions-DXIWG47y.js +0 -669
  797. package/dist/register.subclis-DeGP5UPU.js +0 -267
  798. package/dist/replies-BKrzM0QI.js +0 -136
  799. package/dist/replies-Cl2gYBVt.js +0 -136
  800. package/dist/reply-CCu_DY64.js +0 -13900
  801. package/dist/reply-DSKC8kyS.js +0 -13897
  802. package/dist/reply-directives-BHJKp1Du.js +0 -182
  803. package/dist/reply-directives-CD2WycBM.js +0 -182
  804. package/dist/reply-payloads-D_BM1Anb.js +0 -527
  805. package/dist/reply-prefix-DBLCYiup.js +0 -38
  806. package/dist/reply-prefix-Q4DOJSn_.js +0 -38
  807. package/dist/resolve-route-CBVbY0xS.js +0 -249
  808. package/dist/resolve-route-DGEgTEif.js +0 -249
  809. package/dist/response-prefix-template-rVZQOViK.js +0 -136
  810. package/dist/response-prefix-template-up4REfuR.js +0 -136
  811. package/dist/retry-BhuXOEVR.js +0 -77
  812. package/dist/retry-DUjAzOBy.js +0 -77
  813. package/dist/run-main-Um5xhxla.js +0 -320
  814. package/dist/runner-yVJ4HB2K.js +0 -2294
  815. package/dist/runner-z92MWZ3m.js +0 -2294
  816. package/dist/runtime-guard-DZ_xuCc4.js +0 -60
  817. package/dist/secure-random-Pl9rPl0l.js +0 -44
  818. package/dist/security-cli-CdwbWZUj.js +0 -484
  819. package/dist/security-cli-DP5QJpa5.js +0 -478
  820. package/dist/send-B1_Ymjb9.js +0 -1778
  821. package/dist/send-B84axiIa.js +0 -29
  822. package/dist/send-BN_zYVlx.js +0 -547
  823. package/dist/send-BqVOxAmK.js +0 -1174
  824. package/dist/send-Bx9bUGav.js +0 -492
  825. package/dist/send-C3pdJ6p-.js +0 -2245
  826. package/dist/send-CBGSXjfD.js +0 -2245
  827. package/dist/send-CGXyTF22.js +0 -426
  828. package/dist/send-CKavrhXj.js +0 -11
  829. package/dist/send-D08Je6DL.js +0 -374
  830. package/dist/send-D1aYEG-k.js +0 -332
  831. package/dist/send-DHldI3gf.js +0 -492
  832. package/dist/send-D_DUQJ6H.js +0 -349
  833. package/dist/send-Ds63eF4a.js +0 -349
  834. package/dist/send-YRVDWfSs.js +0 -547
  835. package/dist/send-xnwty9cY.js +0 -1775
  836. package/dist/server-BQFoyCRR.js +0 -200
  837. package/dist/server-DhXw25Jq.js +0 -205
  838. package/dist/server-lifecycle-BjCCyD3w.js +0 -2437
  839. package/dist/server-lifecycle-Coyr6Lda.js +0 -2437
  840. package/dist/server-node-events-De4WZQQD.js +0 -393
  841. package/dist/server-node-events-dXXayuqY.js +0 -398
  842. package/dist/service-Bjqii5nW.js +0 -670
  843. package/dist/service-fp29z5Ww.js +0 -670
  844. package/dist/session-DBL5nHDy.js +0 -170
  845. package/dist/session-cost-usage-DX09eTPU.js +0 -627
  846. package/dist/session-cost-usage-yYi525j3.js +0 -627
  847. package/dist/session-dirs-Cj5xi7zX.js +0 -947
  848. package/dist/session-dirs-DdF6TDsE.js +0 -947
  849. package/dist/session-utils-CEtEq6bi.js +0 -625
  850. package/dist/session-utils-WmlWAs1r.js +0 -625
  851. package/dist/session-xKIW6gL2.js +0 -170
  852. package/dist/sessions--PykPynp.js +0 -2593
  853. package/dist/sessions-Bw4LRnSr.js +0 -252
  854. package/dist/ssrf-Ck9HDZpv.js +0 -183
  855. package/dist/ssrf-m7kFIobZ.js +0 -183
  856. package/dist/status-CtzYFLLF.js +0 -2072
  857. package/dist/status-DiN1cq2p.js +0 -2068
  858. package/dist/status.update-C55QM2xs.js +0 -79
  859. package/dist/status.update-CBmPXwYN.js +0 -79
  860. package/dist/store-C3tOpizT.js +0 -64
  861. package/dist/store-CPJXuhvQ.js +0 -53
  862. package/dist/store-SusmIfz7.js +0 -2595
  863. package/dist/store-v3P-OWhi.js +0 -64
  864. package/dist/subagent-registry-Db4Ho_2Y.js +0 -4858
  865. package/dist/subagent-registry-Du_j0Fnt.js +0 -4860
  866. package/dist/subsystem-BUXAJwPD.js +0 -1079
  867. package/dist/subsystem-COd61u0P.js +0 -1139
  868. package/dist/system-cli-DYCpLO3T.js +0 -75
  869. package/dist/system-cli-eAk5wVbP.js +0 -70
  870. package/dist/systemd-DSnlM3jX.js +0 -547
  871. package/dist/systemd-TfK8GuTx.js +0 -547
  872. package/dist/systemd-linger-Axnc1xCb.js +0 -75
  873. package/dist/systemd-linger-_0_-RY4v.js +0 -75
  874. package/dist/table-DPTzZyhu.js +0 -279
  875. package/dist/tables-DI5LGEr1.js +0 -55
  876. package/dist/tables-PxcSPSO0.js +0 -55
  877. package/dist/tables-TWiml6b1.js +0 -55
  878. package/dist/tailnet-CEudzG0i.js +0 -40
  879. package/dist/tailnet-PnMrjwGT.js +0 -40
  880. package/dist/tailscale-DTATQxAG.js +0 -230
  881. package/dist/tailscale-Dbyahx0J.js +0 -230
  882. package/dist/targets-C1NeMn2J.js +0 -220
  883. package/dist/targets-CcTME3bp.js +0 -46
  884. package/dist/targets-CmC5m7Ey.js +0 -53
  885. package/dist/targets-D-u6Kyio.js +0 -650
  886. package/dist/targets-D7OKVXMI.js +0 -650
  887. package/dist/targets-DB4vBpIQ.js +0 -2172
  888. package/dist/targets-DfqPGOmM.js +0 -2173
  889. package/dist/targets-DyybKefq.js +0 -53
  890. package/dist/targets-JCISV-hS.js +0 -120
  891. package/dist/tokens-DzFOtLlW.js +0 -21
  892. package/dist/tool-display-Br6mwaJc.js +0 -785
  893. package/dist/tool-display-sgNwLOBj.js +0 -785
  894. package/dist/tool-images-BNfIJ_Kj.js +0 -263
  895. package/dist/tool-images-kloBqxqK.js +0 -263
  896. package/dist/trash-DPi0aCCQ.js +0 -125
  897. package/dist/trash-D_Jd_yQZ.js +0 -125
  898. package/dist/tui-CHc0EfJO.js +0 -3392
  899. package/dist/tui-CyHwc2uX.js +0 -3392
  900. package/dist/tui-cli-BvwbrIYO.js +0 -63
  901. package/dist/tui-cli-C9I18SfW.js +0 -58
  902. package/dist/update-DxyjwCL2.js +0 -349
  903. package/dist/update-IX7vdqA8.js +0 -349
  904. package/dist/update-cli-CBeXUSzq.js +0 -1373
  905. package/dist/update-cli-DkAWmUrp.js +0 -1370
  906. package/dist/usage-CYlQW4M2.js +0 -5279
  907. package/dist/utils-LBKvDoPx.js +0 -631
  908. package/dist/web-BUYUdnRH.js +0 -3065
  909. package/dist/web-Dquzwqf4.js +0 -70
  910. package/dist/web-tS8diboh.js +0 -76
  911. package/dist/webhooks-cli-B7Vw3CMz.js +0 -333
  912. package/dist/webhooks-cli-BpZHQlVd.js +0 -328
  913. package/dist/whatsapp-actions-D5HXezjp.js +0 -128
  914. package/dist/whatsapp-actions-DaA291Ya.js +0 -122
  915. package/dist/widearea-dns-DSoaA-eH.js +0 -127
  916. package/dist/workspace-B4ZvVYT9.js +0 -447
  917. package/dist/workspace-B8PA8oxJ.js +0 -449
  918. /package/dist/{account-lookup-0KDSp5Mj.js → account-lookup-BOCzCnir.js} +0 -0
  919. /package/dist/{account-lookup-zvANGr2x.js → account-lookup-DGscKBsr.js} +0 -0
  920. /package/dist/{ansi-D04X81yq.js → ansi-aRwLYlzD.js} +0 -0
  921. /package/dist/{api-BeQMq2iS.js → api-BDff51CS.js} +0 -0
  922. /package/dist/{api-CxX8-gGz.js → api-qWSMsT8m.js} +0 -0
  923. /package/dist/{argv-Co-b9Zsc.js → argv-neJY_Hxm.js} +0 -0
  924. /package/dist/{brew-C4zKZsHX.js → brew-ByYl36Mt.js} +0 -0
  925. /package/dist/{brew-DbSbN8sD.js → brew-CMSQ5Fek.js} +0 -0
  926. /package/dist/{chat-type-CYPyHAj-.js → chat-type-BKe459rw.js} +0 -0
  927. /package/dist/{chat-type-DKb2TlGZ.js → chat-type-DyovJwCt.js} +0 -0
  928. /package/dist/{cleanup-utils-CwQvD73q.js → cleanup-utils-S_P5Jebv.js} +0 -0
  929. /package/dist/{cli-name-BicfmwQX.js → cli-name-CRLBidNP.js} +0 -0
  930. /package/dist/{cli-name-C6rJGl18.js → cli-name-Yv30OygA.js} +0 -0
  931. /package/dist/{cli-utils-BhXbz2UF.js → cli-utils-C5nQDfa6.js} +0 -0
  932. /package/dist/{cli-utils-DZe_rVkZ.js → cli-utils-KcEwAsuZ.js} +0 -0
  933. /package/dist/{client-C61M8zI3.js → client-C7B0uFB0.js} +0 -0
  934. /package/dist/{client-DdpmATKq.js → client-Cd2HNUX0.js} +0 -0
  935. /package/dist/{command-options-C4paWSGf.js → command-options-1bi44p_B.js} +0 -0
  936. /package/dist/{command-options-CA30lfLK.js → command-options-7y5Zrv4M.js} +0 -0
  937. /package/dist/{config-eval-CjGZtLwx.js → config-eval-CJtk3Msr.js} +0 -0
  938. /package/dist/{config-eval-H_wlEYIG.js → config-eval-DQIwdWg7.js} +0 -0
  939. /package/dist/{constants-ChptG3d7.js → constants--3PuQVaS.js} +0 -0
  940. /package/dist/{constants-DY6b-_Wl.js → constants-DNWjlxZ5.js} +0 -0
  941. /package/dist/{credentials-BHWUBHMd.js → credentials-BhnauW0K.js} +0 -0
  942. /package/dist/{credentials-DFsi1_e8.js → credentials-eZcqWNG_.js} +0 -0
  943. /package/dist/{daemon-runtime-CMnbwryP.js → daemon-runtime-99xh1fGv.js} +0 -0
  944. /package/dist/{daemon-runtime-CvqE4ysg.js → daemon-runtime-BOcdJaFy.js} +0 -0
  945. /package/dist/{dangerous-name-matching-BzmiLXmA.js → dangerous-name-matching-YeatnYIA.js} +0 -0
  946. /package/dist/{dangerous-name-matching-DaVRgwer.js → dangerous-name-matching-oVb1EqYT.js} +0 -0
  947. /package/dist/{dangerous-tools-BOLoCRv4.js → dangerous-tools-BMt8-6jE.js} +0 -0
  948. /package/dist/{dangerous-tools-Baq7Q-i6.js → dangerous-tools-CripTfYv.js} +0 -0
  949. /package/dist/{fetch-timeout-DTIN7CGM.js → fetch-timeout-Db3da8yR.js} +0 -0
  950. /package/dist/{fetch-timeout-DoySHqfO.js → fetch-timeout-l_6RdoMw.js} +0 -0
  951. /package/dist/{file-identity-BxlKD8Ys.js → file-identity-Bs9zZOi2.js} +0 -0
  952. /package/dist/{format-duration-CqUERz51.js → format-duration-Bo-Mxi3E.js} +0 -0
  953. /package/dist/{format-duration-Ct-yiwkS.js → format-duration-CfrJ5T8k.js} +0 -0
  954. /package/dist/{format-relative-79_Y1n2Y.js → format-relative-8cNYQsqb.js} +0 -0
  955. /package/dist/{format-relative-CxLpEQOX.js → format-relative-CZOlQ2pA.js} +0 -0
  956. /package/dist/{health-format-B_QRD8Si.js → health-format-WMRp1BbP.js} +0 -0
  957. /package/dist/{heartbeat-wake-LGEgcXjs.js → heartbeat-wake-BtRrOB-t.js} +0 -0
  958. /package/dist/{heartbeat-wake-Y97geucO.js → heartbeat-wake-eRINROYK.js} +0 -0
  959. /package/dist/{help-format-NNm_Ov4H.js → help-format-BEb0SPHF.js} +0 -0
  960. /package/dist/{helpers-BAsMXprO.js → helpers-BJtPtu_2.js} +0 -0
  961. /package/dist/{helpers-DLgbkcEn.js → helpers-Cj6f8SPZ.js} +0 -0
  962. /package/dist/{helpers-R7bU5IBz.js → helpers-ryxLx-aM.js} +0 -0
  963. /package/dist/{host-env-security-szwfmhC4.js → host-env-security-CbiODGvQ.js} +0 -0
  964. /package/dist/{input-provenance-Bn6thJNm.js → input-provenance-CPhdY-0F.js} +0 -0
  965. /package/dist/{input-provenance-xUsSMOsz.js → input-provenance-DUNEQoFM.js} +0 -0
  966. /package/dist/{ip-C9q3Oq20.js → ip-BAhS4rY2.js} +0 -0
  967. /package/dist/{ip-D0zgNmBV.js → ip-BcdPcLiP.js} +0 -0
  968. /package/dist/{is-main-DN8-sNR5.js → is-main-KcWqINzy.js} +0 -0
  969. /package/dist/{json-file-ChO_R9yh.js → json-file-BVvmrQG3.js} +0 -0
  970. /package/dist/{json-file-B7l5-Xhr.js → json-file-Dbg7nZg1.js} +0 -0
  971. /package/dist/{json-files-CmpYSF4G.js → json-files-DSKEdz7x.js} +0 -0
  972. /package/dist/{lanes-ByWMUgrz.js → lanes-Brd-nf-Z.js} +0 -0
  973. /package/dist/{lanes-cHJ5arWg.js → lanes-COs3zODW.js} +0 -0
  974. /package/dist/{links-Bz4V7R_p.js → links-gse8sWn-.js} +0 -0
  975. /package/dist/{location-DBWCGNLq.js → location-D1FM_C63.js} +0 -0
  976. /package/dist/{location-GbZ0bBRU.js → location-LuzkqHGi.js} +0 -0
  977. /package/dist/{logger-DyL5G2DO.js → logger-BMP_j_Lx.js} +0 -0
  978. /package/dist/{logger-BWMPnILd.js → logger-DWbwXLjl.js} +0 -0
  979. /package/dist/{logger-GvipVDfh.js → logger-DXCDb7qu.js} +0 -0
  980. /package/dist/{logging-D8-Kozjc.js → logging-CAgCb3n3.js} +0 -0
  981. /package/dist/{message-channel-uWMAiywE.js → message-channel-D72Bc6Tb.js} +0 -0
  982. /package/dist/{mime-BS3jhcZE.js → mime-Cqg1jjia.js} +0 -0
  983. /package/dist/{mime-Cxh_64P6.js → mime-D4bQLMJL.js} +0 -0
  984. /package/dist/{mutable-allowlist-detectors-DiZDtmlZ.js → mutable-allowlist-detectors-NtI6s4TE.js} +0 -0
  985. /package/dist/{mutable-allowlist-detectors-U5ThQr9V.js → mutable-allowlist-detectors-nAmo9v5u.js} +0 -0
  986. /package/dist/{node-cli-Uf6lAntf.js → node-cli-bNJbha3z.js} +0 -0
  987. /package/dist/{parse-log-line-enq8pduH.js → parse-log-line-BY9Vz72K.js} +0 -0
  988. /package/dist/{parse-log-line-mz9TG6ig.js → parse-log-line-BrrE4onI.js} +0 -0
  989. /package/dist/{parse-timeout-BMP8a0_a.js → parse-timeout-Dfyln-4M.js} +0 -0
  990. /package/dist/{path-guards-CIx4hURU.js → path-guards-D9LU0y9L.js} +0 -0
  991. /package/dist/{path-guards-CrQOUlsq.js → path-guards-crZaTVvq.js} +0 -0
  992. /package/dist/plugin-sdk/{agents → auth}/api-key-rotation.d.ts +0 -0
  993. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/paths.d.ts +0 -0
  994. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/profiles.d.ts +0 -0
  995. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/store.d.ts +0 -0
  996. /package/dist/plugin-sdk/{agents/auth-profiles → auth}/types.d.ts +0 -0
  997. /package/dist/{plugins-allowlist-BbTQ5Z2k.js → plugins-allowlist-CD4oIJNk.js} +0 -0
  998. /package/dist/{plugins-allowlist-C20oaESO.js → plugins-allowlist-CUhk3GDh.js} +0 -0
  999. /package/dist/{polls-B0CCBDeR.js → polls-ChvH1OIW.js} +0 -0
  1000. /package/dist/{polls-CwwHzYBM.js → polls-Dn1C2d1-.js} +0 -0
  1001. /package/dist/{ports-lsof-Wteul3ju.js → ports-lsof-BDQWExpn.js} +0 -0
  1002. /package/dist/{process-scoped-map-CV9kDvfG.js → process-scoped-map-BwUkYFQV.js} +0 -0
  1003. /package/dist/{process-scoped-map-PEvnG75N.js → process-scoped-map-CBWcUvTa.js} +0 -0
  1004. /package/dist/{program-context-jqeI5alP.js → program-context-DtsEOsdM.js} +0 -0
  1005. /package/dist/{progress-C1kUfYL-.js → progress-BjGCAXH7.js} +0 -0
  1006. /package/dist/{prompt-Yn2yClg1.js → prompt-FIISMuNm.js} +0 -0
  1007. /package/dist/{prompt-style-DjEYC_s-.js → prompt-style-DL64_X-p.js} +0 -0
  1008. /package/dist/{provider-utils-3JTMJroG.js → provider-utils-DiLhkKQp.js} +0 -0
  1009. /package/dist/{proxy-DL3MD6-P.js → proxy-DUTF0OYE.js} +0 -0
  1010. /package/dist/{proxy-DpNv2cSV.js → proxy-Dv0sbx6A.js} +0 -0
  1011. /package/dist/{pw-ai-state-CGfLv6nV.js → pw-ai-state-DKhOTqDv.js} +0 -0
  1012. /package/dist/{pw-ai-state-Dynx20hr.js → pw-ai-state-kkp06zyZ.js} +0 -0
  1013. /package/dist/{redact-Dx1Fue21.js → redact-BTeK8lMZ.js} +0 -0
  1014. /package/dist/{redact-identifier-BTIWtaa-.js → redact-identifier-F6t5pklx.js} +0 -0
  1015. /package/dist/{redact-identifier-CAagcfWA.js → redact-identifier-VdOrq-IK.js} +0 -0
  1016. /package/dist/{remoteclaw-root-C2HV2VeC.js → remoteclaw-root-DF8m3X4C.js} +0 -0
  1017. /package/dist/{remoteclaw-root-DybYl8PL.js → remoteclaw-root-rJHOCwzo.js} +0 -0
  1018. /package/dist/{render-CCLsW6Lz.js → render-e7fENCYH.js} +0 -0
  1019. /package/dist/{render-uf6PvGMV.js → render-qcqmrHse.js} +0 -0
  1020. /package/dist/{retry-DnqPAqWp.js → retry-CwZiwLDN.js} +0 -0
  1021. /package/dist/{runtime-DJNp29jv.js → runtime-Ds3E9SqF.js} +0 -0
  1022. /package/dist/{runtime-guard-U-ewY_QH.js → runtime-guard-CdJVmJc0.js} +0 -0
  1023. /package/dist/{secret-equal-BbHdTtqY.js → secret-equal-CDUVxXmp.js} +0 -0
  1024. /package/dist/{secret-equal-CXJEZiWb.js → secret-equal-d3sEnK98.js} +0 -0
  1025. /package/dist/{secure-random-CS2mSdTn.js → secure-random-CJtykx_p.js} +0 -0
  1026. /package/dist/{secure-random-_dzDDlFo.js → secure-random-y6N6Gted.js} +0 -0
  1027. /package/dist/{session-key-5YLnn_qf.js → session-key-BF-9YzxC.js} +0 -0
  1028. /package/dist/{stagger-BXv_apuy.js → stagger-B-_Wnofy.js} +0 -0
  1029. /package/dist/{stagger-MI9gd2rQ.js → stagger-CjkdqPuN.js} +0 -0
  1030. /package/dist/{status-BmtCS3T1.js → status-BFmH9Uge.js} +0 -0
  1031. /package/dist/{status-BrwHRn2B.js → status-BIupzBh9.js} +0 -0
  1032. /package/dist/{strip-inbound-meta-DjKcSFaW.js → strip-inbound-meta-BNXRYvmY.js} +0 -0
  1033. /package/dist/{strip-inbound-meta-jy3bkUab.js → strip-inbound-meta-BtNFmc6V.js} +0 -0
  1034. /package/dist/{table-C1rdyYl9.js → table-Au5EeKD6.js} +0 -0
  1035. /package/dist/{target-errors-BDpPcwh5.js → target-errors-B6YON-5k.js} +0 -0
  1036. /package/dist/{target-errors-DdIAPcMM.js → target-errors-sPHoHj73.js} +0 -0
  1037. /package/dist/{targets-D-qLBpTA.js → targets-BtGRUQMa.js} +0 -0
  1038. /package/dist/{targets-BMenhVHg.js → targets-D3r6Zgic.js} +0 -0
  1039. /package/dist/{targets-C-2xwh9f.js → targets-DDdPVd12.js} +0 -0
  1040. /package/dist/{targets-UncQvCVs.js → targets-Ds5eT_RZ.js} +0 -0
  1041. /package/dist/{targets-D7PT_rdO.js → targets-DtvPW-B8.js} +0 -0
  1042. /package/dist/{text-format-BQ3z_OXA.js → text-format-CFm4X8Ze.js} +0 -0
  1043. /package/dist/{text-format-oWqzVmah.js → text-format-KHU3KzvQ.js} +0 -0
  1044. /package/dist/{tokens-B-jmvNR9.js → tokens-BGw4xHhW.js} +0 -0
  1045. /package/dist/{usage-BdhBT0Vz.js → usage-BEjWlD9A.js} +0 -0
  1046. /package/dist/{usage-format-C3mNLfhI.js → usage-format-Cx3JveFn.js} +0 -0
  1047. /package/dist/{usage-format-DAaPzr_z.js → usage-format-D-ZaYT_e.js} +0 -0
  1048. /package/dist/{usage-BtQcAnf6.js → usage-o8O_TxA-.js} +0 -0
  1049. /package/dist/{widearea-dns-CsmBVbez.js → widearea-dns-DUDYT3z2.js} +0 -0
  1050. /package/dist/{workspace-BzPeZDew.js → workspace-9__vtmnA.js} +0 -0
  1051. /package/dist/{wsl-B_sPlzWw.js → wsl-BLrG__iS.js} +0 -0
  1052. /package/dist/{wsl-BCnYV9O0.js → wsl-C2dudsWt.js} +0 -0
@@ -0,0 +1,2826 @@
1
+ import { H as CONFIG_DIR, Ht as resolveGatewayPort, K as ensureDir$1, Rt as resolveConfigPath, at as shortenHomeInString, qt as resolveStateDir, rt as resolveUserPath } from "./entry.js";
2
+ import { i as loadConfig } from "./config-BupC6eiJ.js";
3
+ import { d as GATEWAY_CLIENT_IDS, f as GATEWAY_CLIENT_MODES, p as GATEWAY_CLIENT_NAMES } from "./message-channel-D72Bc6Tb.js";
4
+ import { t as INPUT_PROVENANCE_KIND_VALUES } from "./input-provenance-DUNEQoFM.js";
5
+ import { n as readJsonFile, r as writeJsonAtomic, t as createAsyncLock } from "./json-files-BiA_B-xm.js";
6
+ import { t as safeEqualSecret } from "./secret-equal-CDUVxXmp.js";
7
+ import { i as isSecureWebSocketUrl, p as rawDataToString } from "./net-QZ8IHNXc.js";
8
+ import { n as logError, t as logDebug } from "./logger-DWbwXLjl.js";
9
+ import { t as resolveGatewayCredentialsFromConfig } from "./credentials-BhnauW0K.js";
10
+ import { execFile } from "node:child_process";
11
+ import path from "node:path";
12
+ import fs from "node:fs";
13
+ import { promisify } from "node:util";
14
+ import crypto, { X509Certificate, randomBytes, randomUUID } from "node:crypto";
15
+ import AjvPkg from "ajv";
16
+ import fsp from "node:fs/promises";
17
+ import { WebSocket as WebSocket$1 } from "ws";
18
+ import { Type } from "@sinclair/typebox";
19
+
20
+ //#region src/infra/device-identity.ts
21
+ function resolveDefaultIdentityPath() {
22
+ return path.join(resolveStateDir(), "identity", "device.json");
23
+ }
24
+ function ensureDir(filePath) {
25
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
26
+ }
27
+ const ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
28
+ function base64UrlEncode(buf) {
29
+ return buf.toString("base64").replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/g, "");
30
+ }
31
+ function base64UrlDecode(input) {
32
+ const normalized = input.replaceAll("-", "+").replaceAll("_", "/");
33
+ const padded = normalized + "=".repeat((4 - normalized.length % 4) % 4);
34
+ return Buffer.from(padded, "base64");
35
+ }
36
+ function derivePublicKeyRaw(publicKeyPem) {
37
+ const spki = crypto.createPublicKey(publicKeyPem).export({
38
+ type: "spki",
39
+ format: "der"
40
+ });
41
+ if (spki.length === ED25519_SPKI_PREFIX.length + 32 && spki.subarray(0, ED25519_SPKI_PREFIX.length).equals(ED25519_SPKI_PREFIX)) return spki.subarray(ED25519_SPKI_PREFIX.length);
42
+ return spki;
43
+ }
44
+ function fingerprintPublicKey(publicKeyPem) {
45
+ const raw = derivePublicKeyRaw(publicKeyPem);
46
+ return crypto.createHash("sha256").update(raw).digest("hex");
47
+ }
48
+ function generateIdentity() {
49
+ const { publicKey, privateKey } = crypto.generateKeyPairSync("ed25519");
50
+ const publicKeyPem = publicKey.export({
51
+ type: "spki",
52
+ format: "pem"
53
+ }).toString();
54
+ const privateKeyPem = privateKey.export({
55
+ type: "pkcs8",
56
+ format: "pem"
57
+ }).toString();
58
+ return {
59
+ deviceId: fingerprintPublicKey(publicKeyPem),
60
+ publicKeyPem,
61
+ privateKeyPem
62
+ };
63
+ }
64
+ function loadOrCreateDeviceIdentity(filePath = resolveDefaultIdentityPath()) {
65
+ try {
66
+ if (fs.existsSync(filePath)) {
67
+ const raw = fs.readFileSync(filePath, "utf8");
68
+ const parsed = JSON.parse(raw);
69
+ if (parsed?.version === 1 && typeof parsed.deviceId === "string" && typeof parsed.publicKeyPem === "string" && typeof parsed.privateKeyPem === "string") {
70
+ const derivedId = fingerprintPublicKey(parsed.publicKeyPem);
71
+ if (derivedId && derivedId !== parsed.deviceId) {
72
+ const updated = {
73
+ ...parsed,
74
+ deviceId: derivedId
75
+ };
76
+ fs.writeFileSync(filePath, `${JSON.stringify(updated, null, 2)}\n`, { mode: 384 });
77
+ try {
78
+ fs.chmodSync(filePath, 384);
79
+ } catch {}
80
+ return {
81
+ deviceId: derivedId,
82
+ publicKeyPem: parsed.publicKeyPem,
83
+ privateKeyPem: parsed.privateKeyPem
84
+ };
85
+ }
86
+ return {
87
+ deviceId: parsed.deviceId,
88
+ publicKeyPem: parsed.publicKeyPem,
89
+ privateKeyPem: parsed.privateKeyPem
90
+ };
91
+ }
92
+ }
93
+ } catch {}
94
+ const identity = generateIdentity();
95
+ ensureDir(filePath);
96
+ const stored = {
97
+ version: 1,
98
+ deviceId: identity.deviceId,
99
+ publicKeyPem: identity.publicKeyPem,
100
+ privateKeyPem: identity.privateKeyPem,
101
+ createdAtMs: Date.now()
102
+ };
103
+ fs.writeFileSync(filePath, `${JSON.stringify(stored, null, 2)}\n`, { mode: 384 });
104
+ try {
105
+ fs.chmodSync(filePath, 384);
106
+ } catch {}
107
+ return identity;
108
+ }
109
+ function signDevicePayload(privateKeyPem, payload) {
110
+ const key = crypto.createPrivateKey(privateKeyPem);
111
+ return base64UrlEncode(crypto.sign(null, Buffer.from(payload, "utf8"), key));
112
+ }
113
+ function normalizeDevicePublicKeyBase64Url(publicKey) {
114
+ try {
115
+ if (publicKey.includes("BEGIN")) return base64UrlEncode(derivePublicKeyRaw(publicKey));
116
+ return base64UrlEncode(base64UrlDecode(publicKey));
117
+ } catch {
118
+ return null;
119
+ }
120
+ }
121
+ function deriveDeviceIdFromPublicKey(publicKey) {
122
+ try {
123
+ const raw = publicKey.includes("BEGIN") ? derivePublicKeyRaw(publicKey) : base64UrlDecode(publicKey);
124
+ return crypto.createHash("sha256").update(raw).digest("hex");
125
+ } catch {
126
+ return null;
127
+ }
128
+ }
129
+ function publicKeyRawBase64UrlFromPem(publicKeyPem) {
130
+ return base64UrlEncode(derivePublicKeyRaw(publicKeyPem));
131
+ }
132
+ function verifyDeviceSignature(publicKey, payload, signatureBase64Url) {
133
+ try {
134
+ const key = publicKey.includes("BEGIN") ? crypto.createPublicKey(publicKey) : crypto.createPublicKey({
135
+ key: Buffer.concat([ED25519_SPKI_PREFIX, base64UrlDecode(publicKey)]),
136
+ type: "spki",
137
+ format: "der"
138
+ });
139
+ const sig = (() => {
140
+ try {
141
+ return base64UrlDecode(signatureBase64Url);
142
+ } catch {
143
+ return Buffer.from(signatureBase64Url, "base64");
144
+ }
145
+ })();
146
+ return crypto.verify(null, Buffer.from(payload, "utf8"), key, sig);
147
+ } catch {
148
+ return false;
149
+ }
150
+ }
151
+
152
+ //#endregion
153
+ //#region src/infra/tls/fingerprint.ts
154
+ function normalizeFingerprint(input) {
155
+ return input.trim().replace(/^sha-?256\s*:?\s*/i, "").replace(/[^a-fA-F0-9]/g, "").toLowerCase();
156
+ }
157
+
158
+ //#endregion
159
+ //#region src/infra/tls/gateway.ts
160
+ const execFileAsync = promisify(execFile);
161
+ async function fileExists(filePath) {
162
+ try {
163
+ await fsp.access(filePath);
164
+ return true;
165
+ } catch {
166
+ return false;
167
+ }
168
+ }
169
+ async function generateSelfSignedCert(params) {
170
+ const certDir = path.dirname(params.certPath);
171
+ const keyDir = path.dirname(params.keyPath);
172
+ await ensureDir$1(certDir);
173
+ if (keyDir !== certDir) await ensureDir$1(keyDir);
174
+ await execFileAsync("openssl", [
175
+ "req",
176
+ "-x509",
177
+ "-newkey",
178
+ "rsa:2048",
179
+ "-sha256",
180
+ "-days",
181
+ "3650",
182
+ "-nodes",
183
+ "-keyout",
184
+ params.keyPath,
185
+ "-out",
186
+ params.certPath,
187
+ "-subj",
188
+ "/CN=remoteclaw-gateway"
189
+ ]);
190
+ await fsp.chmod(params.keyPath, 384).catch(() => {});
191
+ await fsp.chmod(params.certPath, 384).catch(() => {});
192
+ params.log?.info?.(`gateway tls: generated self-signed cert at ${shortenHomeInString(params.certPath)}`);
193
+ }
194
+ async function loadGatewayTlsRuntime(cfg, log) {
195
+ if (!cfg || cfg.enabled !== true) return {
196
+ enabled: false,
197
+ required: false
198
+ };
199
+ const autoGenerate = cfg.autoGenerate !== false;
200
+ const baseDir = path.join(CONFIG_DIR, "gateway", "tls");
201
+ const certPath = resolveUserPath(cfg.certPath ?? path.join(baseDir, "gateway-cert.pem"));
202
+ const keyPath = resolveUserPath(cfg.keyPath ?? path.join(baseDir, "gateway-key.pem"));
203
+ const caPath = cfg.caPath ? resolveUserPath(cfg.caPath) : void 0;
204
+ const hasCert = await fileExists(certPath);
205
+ const hasKey = await fileExists(keyPath);
206
+ if (!hasCert && !hasKey && autoGenerate) try {
207
+ await generateSelfSignedCert({
208
+ certPath,
209
+ keyPath,
210
+ log
211
+ });
212
+ } catch (err) {
213
+ return {
214
+ enabled: false,
215
+ required: true,
216
+ certPath,
217
+ keyPath,
218
+ error: `gateway tls: failed to generate cert (${String(err)})`
219
+ };
220
+ }
221
+ if (!await fileExists(certPath) || !await fileExists(keyPath)) return {
222
+ enabled: false,
223
+ required: true,
224
+ certPath,
225
+ keyPath,
226
+ error: "gateway tls: cert/key missing"
227
+ };
228
+ try {
229
+ const cert = await fsp.readFile(certPath, "utf8");
230
+ const key = await fsp.readFile(keyPath, "utf8");
231
+ const ca = caPath ? await fsp.readFile(caPath, "utf8") : void 0;
232
+ const fingerprintSha256 = normalizeFingerprint(new X509Certificate(cert).fingerprint256 ?? "");
233
+ if (!fingerprintSha256) return {
234
+ enabled: false,
235
+ required: true,
236
+ certPath,
237
+ keyPath,
238
+ caPath,
239
+ error: "gateway tls: unable to compute certificate fingerprint"
240
+ };
241
+ return {
242
+ enabled: true,
243
+ required: true,
244
+ certPath,
245
+ keyPath,
246
+ caPath,
247
+ fingerprintSha256,
248
+ tlsOptions: {
249
+ cert,
250
+ key,
251
+ ca,
252
+ minVersion: "TLSv1.3"
253
+ }
254
+ };
255
+ } catch (err) {
256
+ return {
257
+ enabled: false,
258
+ required: true,
259
+ certPath,
260
+ keyPath,
261
+ caPath,
262
+ error: `gateway tls: failed to load cert (${String(err)})`
263
+ };
264
+ }
265
+ }
266
+
267
+ //#endregion
268
+ //#region src/shared/device-auth.ts
269
+ function normalizeDeviceAuthRole(role) {
270
+ return role.trim();
271
+ }
272
+ function normalizeDeviceAuthScopes(scopes) {
273
+ if (!Array.isArray(scopes)) return [];
274
+ const out = /* @__PURE__ */ new Set();
275
+ for (const scope of scopes) {
276
+ const trimmed = scope.trim();
277
+ if (trimmed) out.add(trimmed);
278
+ }
279
+ return [...out].toSorted();
280
+ }
281
+
282
+ //#endregion
283
+ //#region src/infra/device-auth-store.ts
284
+ const DEVICE_AUTH_FILE = "device-auth.json";
285
+ function resolveDeviceAuthPath(env = process.env) {
286
+ return path.join(resolveStateDir(env), "identity", DEVICE_AUTH_FILE);
287
+ }
288
+ function readStore(filePath) {
289
+ try {
290
+ if (!fs.existsSync(filePath)) return null;
291
+ const raw = fs.readFileSync(filePath, "utf8");
292
+ const parsed = JSON.parse(raw);
293
+ if (parsed?.version !== 1 || typeof parsed.deviceId !== "string") return null;
294
+ if (!parsed.tokens || typeof parsed.tokens !== "object") return null;
295
+ return parsed;
296
+ } catch {
297
+ return null;
298
+ }
299
+ }
300
+ function writeStore(filePath, store) {
301
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
302
+ fs.writeFileSync(filePath, `${JSON.stringify(store, null, 2)}\n`, { mode: 384 });
303
+ try {
304
+ fs.chmodSync(filePath, 384);
305
+ } catch {}
306
+ }
307
+ function loadDeviceAuthToken(params) {
308
+ const store = readStore(resolveDeviceAuthPath(params.env));
309
+ if (!store) return null;
310
+ if (store.deviceId !== params.deviceId) return null;
311
+ const role = normalizeDeviceAuthRole(params.role);
312
+ const entry = store.tokens[role];
313
+ if (!entry || typeof entry.token !== "string") return null;
314
+ return entry;
315
+ }
316
+ function storeDeviceAuthToken(params) {
317
+ const filePath = resolveDeviceAuthPath(params.env);
318
+ const existing = readStore(filePath);
319
+ const role = normalizeDeviceAuthRole(params.role);
320
+ const next = {
321
+ version: 1,
322
+ deviceId: params.deviceId,
323
+ tokens: existing && existing.deviceId === params.deviceId && existing.tokens ? { ...existing.tokens } : {}
324
+ };
325
+ const entry = {
326
+ token: params.token,
327
+ role,
328
+ scopes: normalizeDeviceAuthScopes(params.scopes),
329
+ updatedAtMs: Date.now()
330
+ };
331
+ next.tokens[role] = entry;
332
+ writeStore(filePath, next);
333
+ return entry;
334
+ }
335
+ function clearDeviceAuthToken(params) {
336
+ const filePath = resolveDeviceAuthPath(params.env);
337
+ const store = readStore(filePath);
338
+ if (!store || store.deviceId !== params.deviceId) return;
339
+ const role = normalizeDeviceAuthRole(params.role);
340
+ if (!store.tokens[role]) return;
341
+ const next = {
342
+ version: 1,
343
+ deviceId: store.deviceId,
344
+ tokens: { ...store.tokens }
345
+ };
346
+ delete next.tokens[role];
347
+ writeStore(filePath, next);
348
+ }
349
+
350
+ //#endregion
351
+ //#region src/shared/operator-scope-compat.ts
352
+ const OPERATOR_ROLE = "operator";
353
+ const OPERATOR_ADMIN_SCOPE = "operator.admin";
354
+ const OPERATOR_READ_SCOPE = "operator.read";
355
+ const OPERATOR_WRITE_SCOPE = "operator.write";
356
+ const OPERATOR_SCOPE_PREFIX = "operator.";
357
+ function normalizeScopeList(scopes) {
358
+ const out = /* @__PURE__ */ new Set();
359
+ for (const scope of scopes) {
360
+ const trimmed = scope.trim();
361
+ if (trimmed) out.add(trimmed);
362
+ }
363
+ return [...out];
364
+ }
365
+ function operatorScopeSatisfied(requestedScope, granted) {
366
+ if (granted.has(OPERATOR_ADMIN_SCOPE) && requestedScope.startsWith(OPERATOR_SCOPE_PREFIX)) return true;
367
+ if (requestedScope === OPERATOR_READ_SCOPE) return granted.has(OPERATOR_READ_SCOPE) || granted.has(OPERATOR_WRITE_SCOPE);
368
+ if (requestedScope === OPERATOR_WRITE_SCOPE) return granted.has(OPERATOR_WRITE_SCOPE);
369
+ return granted.has(requestedScope);
370
+ }
371
+ function roleScopesAllow(params) {
372
+ const requested = normalizeScopeList(params.requestedScopes);
373
+ if (requested.length === 0) return true;
374
+ const allowed = normalizeScopeList(params.allowedScopes);
375
+ if (allowed.length === 0) return false;
376
+ const allowedSet = new Set(allowed);
377
+ if (params.role.trim() !== OPERATOR_ROLE) return requested.every((scope) => allowedSet.has(scope));
378
+ return requested.every((scope) => operatorScopeSatisfied(scope, allowedSet));
379
+ }
380
+
381
+ //#endregion
382
+ //#region src/infra/pairing-files.ts
383
+ function resolvePairingPaths(baseDir, subdir) {
384
+ const root = baseDir ?? resolveStateDir();
385
+ const dir = path.join(root, subdir);
386
+ return {
387
+ dir,
388
+ pendingPath: path.join(dir, "pending.json"),
389
+ pairedPath: path.join(dir, "paired.json")
390
+ };
391
+ }
392
+ function pruneExpiredPending(pendingById, nowMs, ttlMs) {
393
+ for (const [id, req] of Object.entries(pendingById)) if (nowMs - req.ts > ttlMs) delete pendingById[id];
394
+ }
395
+ async function upsertPendingPairingRequest(params) {
396
+ const existing = Object.values(params.pendingById).find(params.isExisting);
397
+ if (existing) return {
398
+ status: "pending",
399
+ request: existing,
400
+ created: false
401
+ };
402
+ const request = params.createRequest(params.isRepair);
403
+ params.pendingById[request.requestId] = request;
404
+ await params.persist();
405
+ return {
406
+ status: "pending",
407
+ request,
408
+ created: true
409
+ };
410
+ }
411
+
412
+ //#endregion
413
+ //#region src/infra/pairing-pending.ts
414
+ async function rejectPendingPairingRequest(params) {
415
+ const state = await params.loadState();
416
+ const pending = state.pendingById[params.requestId];
417
+ if (!pending) return null;
418
+ delete state.pendingById[params.requestId];
419
+ await params.persistState(state);
420
+ return {
421
+ requestId: params.requestId,
422
+ [params.idKey]: params.getId(pending)
423
+ };
424
+ }
425
+
426
+ //#endregion
427
+ //#region src/infra/pairing-token.ts
428
+ const PAIRING_TOKEN_BYTES = 32;
429
+ function generatePairingToken() {
430
+ return randomBytes(PAIRING_TOKEN_BYTES).toString("base64url");
431
+ }
432
+ function verifyPairingToken(provided, expected) {
433
+ return safeEqualSecret(provided, expected);
434
+ }
435
+
436
+ //#endregion
437
+ //#region src/infra/device-pairing.ts
438
+ const PENDING_TTL_MS = 300 * 1e3;
439
+ const withLock = createAsyncLock();
440
+ async function loadState(baseDir) {
441
+ const { pendingPath, pairedPath } = resolvePairingPaths(baseDir, "devices");
442
+ const [pending, paired] = await Promise.all([readJsonFile(pendingPath), readJsonFile(pairedPath)]);
443
+ const state = {
444
+ pendingById: pending ?? {},
445
+ pairedByDeviceId: paired ?? {}
446
+ };
447
+ pruneExpiredPending(state.pendingById, Date.now(), PENDING_TTL_MS);
448
+ return state;
449
+ }
450
+ async function persistState(state, baseDir) {
451
+ const { pendingPath, pairedPath } = resolvePairingPaths(baseDir, "devices");
452
+ await Promise.all([writeJsonAtomic(pendingPath, state.pendingById), writeJsonAtomic(pairedPath, state.pairedByDeviceId)]);
453
+ }
454
+ function normalizeDeviceId(deviceId) {
455
+ return deviceId.trim();
456
+ }
457
+ function normalizeRole(role) {
458
+ const trimmed = role?.trim();
459
+ return trimmed ? trimmed : null;
460
+ }
461
+ function mergeRoles(...items) {
462
+ const roles = /* @__PURE__ */ new Set();
463
+ for (const item of items) {
464
+ if (!item) continue;
465
+ if (Array.isArray(item)) for (const role of item) {
466
+ const trimmed = role.trim();
467
+ if (trimmed) roles.add(trimmed);
468
+ }
469
+ else {
470
+ const trimmed = item.trim();
471
+ if (trimmed) roles.add(trimmed);
472
+ }
473
+ }
474
+ if (roles.size === 0) return;
475
+ return [...roles];
476
+ }
477
+ function mergeScopes(...items) {
478
+ const scopes = /* @__PURE__ */ new Set();
479
+ for (const item of items) {
480
+ if (!item) continue;
481
+ for (const scope of item) {
482
+ const trimmed = scope.trim();
483
+ if (trimmed) scopes.add(trimmed);
484
+ }
485
+ }
486
+ if (scopes.size === 0) return;
487
+ return [...scopes];
488
+ }
489
+ function mergePendingDevicePairingRequest(existing, incoming, isRepair) {
490
+ const existingRole = normalizeRole(existing.role);
491
+ const incomingRole = normalizeRole(incoming.role);
492
+ return {
493
+ ...existing,
494
+ displayName: incoming.displayName ?? existing.displayName,
495
+ platform: incoming.platform ?? existing.platform,
496
+ clientId: incoming.clientId ?? existing.clientId,
497
+ clientMode: incoming.clientMode ?? existing.clientMode,
498
+ role: existingRole ?? incomingRole ?? void 0,
499
+ roles: mergeRoles(existing.roles, existing.role, incoming.role),
500
+ scopes: mergeScopes(existing.scopes, incoming.scopes),
501
+ remoteIp: incoming.remoteIp ?? existing.remoteIp,
502
+ silent: Boolean(existing.silent && incoming.silent),
503
+ isRepair: existing.isRepair || isRepair,
504
+ ts: Date.now()
505
+ };
506
+ }
507
+ function scopesAllow(requested, allowed) {
508
+ if (requested.length === 0) return true;
509
+ if (allowed.length === 0) return false;
510
+ const allowedSet = new Set(allowed);
511
+ return requested.every((scope) => allowedSet.has(scope));
512
+ }
513
+ const DEVICE_SCOPE_IMPLICATIONS = {
514
+ "operator.admin": [
515
+ "operator.read",
516
+ "operator.write",
517
+ "operator.approvals",
518
+ "operator.pairing"
519
+ ],
520
+ "operator.write": ["operator.read"]
521
+ };
522
+ function expandScopeImplications(scopes) {
523
+ const expanded = new Set(scopes);
524
+ const queue = [...scopes];
525
+ while (queue.length > 0) {
526
+ const scope = queue.pop();
527
+ if (!scope) continue;
528
+ for (const impliedScope of DEVICE_SCOPE_IMPLICATIONS[scope] ?? []) if (!expanded.has(impliedScope)) {
529
+ expanded.add(impliedScope);
530
+ queue.push(impliedScope);
531
+ }
532
+ }
533
+ return [...expanded];
534
+ }
535
+ function scopesAllowWithImplications(requested, allowed) {
536
+ return scopesAllow(expandScopeImplications(requested), expandScopeImplications(allowed));
537
+ }
538
+ function newToken() {
539
+ return generatePairingToken();
540
+ }
541
+ function getPairedDeviceFromState(state, deviceId) {
542
+ return state.pairedByDeviceId[normalizeDeviceId(deviceId)] ?? null;
543
+ }
544
+ function cloneDeviceTokens(device) {
545
+ return device.tokens ? { ...device.tokens } : {};
546
+ }
547
+ function buildDeviceAuthToken(params) {
548
+ return {
549
+ token: newToken(),
550
+ role: params.role,
551
+ scopes: params.scopes,
552
+ createdAtMs: params.existing?.createdAtMs ?? params.now,
553
+ rotatedAtMs: params.rotatedAtMs,
554
+ revokedAtMs: void 0,
555
+ lastUsedAtMs: params.existing?.lastUsedAtMs
556
+ };
557
+ }
558
+ async function listDevicePairing(baseDir) {
559
+ const state = await loadState(baseDir);
560
+ return {
561
+ pending: Object.values(state.pendingById).toSorted((a, b) => b.ts - a.ts),
562
+ paired: Object.values(state.pairedByDeviceId).toSorted((a, b) => b.approvedAtMs - a.approvedAtMs)
563
+ };
564
+ }
565
+ async function getPairedDevice(deviceId, baseDir) {
566
+ return (await loadState(baseDir)).pairedByDeviceId[normalizeDeviceId(deviceId)] ?? null;
567
+ }
568
+ async function requestDevicePairing(req, baseDir) {
569
+ return await withLock(async () => {
570
+ const state = await loadState(baseDir);
571
+ const deviceId = normalizeDeviceId(req.deviceId);
572
+ if (!deviceId) throw new Error("deviceId required");
573
+ const isRepair = Boolean(state.pairedByDeviceId[deviceId]);
574
+ const existing = Object.values(state.pendingById).find((pending) => pending.deviceId === deviceId);
575
+ if (existing) {
576
+ const merged = mergePendingDevicePairingRequest(existing, req, isRepair);
577
+ state.pendingById[existing.requestId] = merged;
578
+ await persistState(state, baseDir);
579
+ return {
580
+ status: "pending",
581
+ request: merged,
582
+ created: false
583
+ };
584
+ }
585
+ const request = {
586
+ requestId: randomUUID(),
587
+ deviceId,
588
+ publicKey: req.publicKey,
589
+ displayName: req.displayName,
590
+ platform: req.platform,
591
+ clientId: req.clientId,
592
+ clientMode: req.clientMode,
593
+ role: req.role,
594
+ roles: req.role ? [req.role] : void 0,
595
+ scopes: req.scopes,
596
+ remoteIp: req.remoteIp,
597
+ silent: req.silent,
598
+ isRepair,
599
+ ts: Date.now()
600
+ };
601
+ state.pendingById[request.requestId] = request;
602
+ await persistState(state, baseDir);
603
+ return {
604
+ status: "pending",
605
+ request,
606
+ created: true
607
+ };
608
+ });
609
+ }
610
+ async function approveDevicePairing(requestId, baseDir) {
611
+ return await withLock(async () => {
612
+ const state = await loadState(baseDir);
613
+ const pending = state.pendingById[requestId];
614
+ if (!pending) return null;
615
+ const now = Date.now();
616
+ const existing = state.pairedByDeviceId[pending.deviceId];
617
+ const roles = mergeRoles(existing?.roles, existing?.role, pending.roles, pending.role);
618
+ const approvedScopes = mergeScopes(existing?.approvedScopes ?? existing?.scopes, pending.scopes);
619
+ const tokens = existing?.tokens ? { ...existing.tokens } : {};
620
+ const roleForToken = normalizeRole(pending.role);
621
+ if (roleForToken) {
622
+ const existingToken = tokens[roleForToken];
623
+ const requestedScopes = normalizeDeviceAuthScopes(pending.scopes);
624
+ const nextScopes = requestedScopes.length > 0 ? requestedScopes : normalizeDeviceAuthScopes(existingToken?.scopes ?? approvedScopes ?? existing?.approvedScopes ?? existing?.scopes);
625
+ const now = Date.now();
626
+ tokens[roleForToken] = {
627
+ token: newToken(),
628
+ role: roleForToken,
629
+ scopes: nextScopes,
630
+ createdAtMs: existingToken?.createdAtMs ?? now,
631
+ rotatedAtMs: existingToken ? now : void 0,
632
+ revokedAtMs: void 0,
633
+ lastUsedAtMs: existingToken?.lastUsedAtMs
634
+ };
635
+ }
636
+ const device = {
637
+ deviceId: pending.deviceId,
638
+ publicKey: pending.publicKey,
639
+ displayName: pending.displayName,
640
+ platform: pending.platform,
641
+ clientId: pending.clientId,
642
+ clientMode: pending.clientMode,
643
+ role: pending.role,
644
+ roles,
645
+ scopes: approvedScopes,
646
+ approvedScopes,
647
+ remoteIp: pending.remoteIp,
648
+ tokens,
649
+ createdAtMs: existing?.createdAtMs ?? now,
650
+ approvedAtMs: now
651
+ };
652
+ delete state.pendingById[requestId];
653
+ state.pairedByDeviceId[device.deviceId] = device;
654
+ await persistState(state, baseDir);
655
+ return {
656
+ requestId,
657
+ device
658
+ };
659
+ });
660
+ }
661
+ async function rejectDevicePairing(requestId, baseDir) {
662
+ return await withLock(async () => {
663
+ return await rejectPendingPairingRequest({
664
+ requestId,
665
+ idKey: "deviceId",
666
+ loadState: () => loadState(baseDir),
667
+ persistState: (state) => persistState(state, baseDir),
668
+ getId: (pending) => pending.deviceId
669
+ });
670
+ });
671
+ }
672
+ async function removePairedDevice(deviceId, baseDir) {
673
+ return await withLock(async () => {
674
+ const state = await loadState(baseDir);
675
+ const normalized = normalizeDeviceId(deviceId);
676
+ if (!normalized || !state.pairedByDeviceId[normalized]) return null;
677
+ delete state.pairedByDeviceId[normalized];
678
+ await persistState(state, baseDir);
679
+ return { deviceId: normalized };
680
+ });
681
+ }
682
+ async function updatePairedDeviceMetadata(deviceId, patch, baseDir) {
683
+ return await withLock(async () => {
684
+ const state = await loadState(baseDir);
685
+ const existing = state.pairedByDeviceId[normalizeDeviceId(deviceId)];
686
+ if (!existing) return;
687
+ const roles = mergeRoles(existing.roles, existing.role, patch.role);
688
+ const scopes = mergeScopes(existing.scopes, patch.scopes);
689
+ state.pairedByDeviceId[deviceId] = {
690
+ ...existing,
691
+ ...patch,
692
+ deviceId: existing.deviceId,
693
+ createdAtMs: existing.createdAtMs,
694
+ approvedAtMs: existing.approvedAtMs,
695
+ approvedScopes: existing.approvedScopes,
696
+ role: patch.role ?? existing.role,
697
+ roles,
698
+ scopes
699
+ };
700
+ await persistState(state, baseDir);
701
+ });
702
+ }
703
+ function summarizeDeviceTokens(tokens) {
704
+ if (!tokens) return;
705
+ const summaries = Object.values(tokens).map((token) => ({
706
+ role: token.role,
707
+ scopes: token.scopes,
708
+ createdAtMs: token.createdAtMs,
709
+ rotatedAtMs: token.rotatedAtMs,
710
+ revokedAtMs: token.revokedAtMs,
711
+ lastUsedAtMs: token.lastUsedAtMs
712
+ })).toSorted((a, b) => a.role.localeCompare(b.role));
713
+ return summaries.length > 0 ? summaries : void 0;
714
+ }
715
+ async function verifyDeviceToken(params) {
716
+ return await withLock(async () => {
717
+ const state = await loadState(params.baseDir);
718
+ const device = getPairedDeviceFromState(state, params.deviceId);
719
+ if (!device) return {
720
+ ok: false,
721
+ reason: "device-not-paired"
722
+ };
723
+ const role = normalizeRole(params.role);
724
+ if (!role) return {
725
+ ok: false,
726
+ reason: "role-missing"
727
+ };
728
+ const entry = device.tokens?.[role];
729
+ if (!entry) return {
730
+ ok: false,
731
+ reason: "token-missing"
732
+ };
733
+ if (entry.revokedAtMs) return {
734
+ ok: false,
735
+ reason: "token-revoked"
736
+ };
737
+ if (!verifyPairingToken(params.token, entry.token)) return {
738
+ ok: false,
739
+ reason: "token-mismatch"
740
+ };
741
+ if (!roleScopesAllow({
742
+ role,
743
+ requestedScopes: normalizeDeviceAuthScopes(params.scopes),
744
+ allowedScopes: entry.scopes
745
+ })) return {
746
+ ok: false,
747
+ reason: "scope-mismatch"
748
+ };
749
+ entry.lastUsedAtMs = Date.now();
750
+ device.tokens ??= {};
751
+ device.tokens[role] = entry;
752
+ state.pairedByDeviceId[device.deviceId] = device;
753
+ await persistState(state, params.baseDir);
754
+ return { ok: true };
755
+ });
756
+ }
757
+ async function ensureDeviceToken(params) {
758
+ return await withLock(async () => {
759
+ const state = await loadState(params.baseDir);
760
+ const requestedScopes = normalizeDeviceAuthScopes(params.scopes);
761
+ const context = resolveDeviceTokenUpdateContext({
762
+ state,
763
+ deviceId: params.deviceId,
764
+ role: params.role
765
+ });
766
+ if (!context) return null;
767
+ const { device, role, tokens, existing } = context;
768
+ if (existing && !existing.revokedAtMs) {
769
+ if (roleScopesAllow({
770
+ role,
771
+ requestedScopes,
772
+ allowedScopes: existing.scopes
773
+ })) return existing;
774
+ }
775
+ const now = Date.now();
776
+ const next = buildDeviceAuthToken({
777
+ role,
778
+ scopes: requestedScopes,
779
+ existing,
780
+ now,
781
+ rotatedAtMs: existing ? now : void 0
782
+ });
783
+ tokens[role] = next;
784
+ device.tokens = tokens;
785
+ state.pairedByDeviceId[device.deviceId] = device;
786
+ await persistState(state, params.baseDir);
787
+ return next;
788
+ });
789
+ }
790
+ function resolveDeviceTokenUpdateContext(params) {
791
+ const device = getPairedDeviceFromState(params.state, params.deviceId);
792
+ if (!device) return null;
793
+ const role = normalizeRole(params.role);
794
+ if (!role) return null;
795
+ const tokens = cloneDeviceTokens(device);
796
+ return {
797
+ device,
798
+ role,
799
+ tokens,
800
+ existing: tokens[role]
801
+ };
802
+ }
803
+ async function rotateDeviceToken(params) {
804
+ return await withLock(async () => {
805
+ const state = await loadState(params.baseDir);
806
+ const context = resolveDeviceTokenUpdateContext({
807
+ state,
808
+ deviceId: params.deviceId,
809
+ role: params.role
810
+ });
811
+ if (!context) return null;
812
+ const { device, role, tokens, existing } = context;
813
+ const requestedScopes = normalizeDeviceAuthScopes(params.scopes ?? existing?.scopes ?? device.scopes);
814
+ if (!scopesAllowWithImplications(requestedScopes, normalizeDeviceAuthScopes(device.approvedScopes ?? device.scopes ?? existing?.scopes))) return null;
815
+ const now = Date.now();
816
+ const next = buildDeviceAuthToken({
817
+ role,
818
+ scopes: requestedScopes,
819
+ existing,
820
+ now,
821
+ rotatedAtMs: now
822
+ });
823
+ tokens[role] = next;
824
+ device.tokens = tokens;
825
+ state.pairedByDeviceId[device.deviceId] = device;
826
+ await persistState(state, params.baseDir);
827
+ return next;
828
+ });
829
+ }
830
+ async function revokeDeviceToken(params) {
831
+ return await withLock(async () => {
832
+ const state = await loadState(params.baseDir);
833
+ const device = state.pairedByDeviceId[normalizeDeviceId(params.deviceId)];
834
+ if (!device) return null;
835
+ const role = normalizeRole(params.role);
836
+ if (!role) return null;
837
+ if (!device.tokens?.[role]) return null;
838
+ const tokens = { ...device.tokens };
839
+ const entry = {
840
+ ...tokens[role],
841
+ revokedAtMs: Date.now()
842
+ };
843
+ tokens[role] = entry;
844
+ device.tokens = tokens;
845
+ state.pairedByDeviceId[device.deviceId] = device;
846
+ await persistState(state, params.baseDir);
847
+ return entry;
848
+ });
849
+ }
850
+ async function clearDevicePairing(deviceId, baseDir) {
851
+ return await withLock(async () => {
852
+ const state = await loadState(baseDir);
853
+ const normalizedId = normalizeDeviceId(deviceId);
854
+ if (!state.pairedByDeviceId[normalizedId]) return false;
855
+ delete state.pairedByDeviceId[normalizedId];
856
+ await persistState(state, baseDir);
857
+ return true;
858
+ });
859
+ }
860
+
861
+ //#endregion
862
+ //#region src/gateway/device-auth.ts
863
+ function buildDeviceAuthPayload(params) {
864
+ const scopes = params.scopes.join(",");
865
+ const token = params.token ?? "";
866
+ return [
867
+ "v2",
868
+ params.deviceId,
869
+ params.clientId,
870
+ params.clientMode,
871
+ params.role,
872
+ scopes,
873
+ String(params.signedAtMs),
874
+ token,
875
+ params.nonce
876
+ ].join("|");
877
+ }
878
+
879
+ //#endregion
880
+ //#region src/sessions/session-label.ts
881
+ const SESSION_LABEL_MAX_LENGTH = 64;
882
+ function parseSessionLabel(raw) {
883
+ if (typeof raw !== "string") return {
884
+ ok: false,
885
+ error: "invalid label: must be a string"
886
+ };
887
+ const trimmed = raw.trim();
888
+ if (!trimmed) return {
889
+ ok: false,
890
+ error: "invalid label: empty"
891
+ };
892
+ if (trimmed.length > SESSION_LABEL_MAX_LENGTH) return {
893
+ ok: false,
894
+ error: `invalid label: too long (max ${SESSION_LABEL_MAX_LENGTH})`
895
+ };
896
+ return {
897
+ ok: true,
898
+ label: trimmed
899
+ };
900
+ }
901
+
902
+ //#endregion
903
+ //#region src/gateway/protocol/schema/primitives.ts
904
+ const NonEmptyString = Type.String({ minLength: 1 });
905
+ const SessionLabelString = Type.String({
906
+ minLength: 1,
907
+ maxLength: SESSION_LABEL_MAX_LENGTH
908
+ });
909
+ const GatewayClientIdSchema = Type.Union(Object.values(GATEWAY_CLIENT_IDS).map((value) => Type.Literal(value)));
910
+ const GatewayClientModeSchema = Type.Union(Object.values(GATEWAY_CLIENT_MODES).map((value) => Type.Literal(value)));
911
+
912
+ //#endregion
913
+ //#region src/gateway/protocol/schema/agent.ts
914
+ const AgentEventSchema = Type.Object({
915
+ runId: NonEmptyString,
916
+ seq: Type.Integer({ minimum: 0 }),
917
+ stream: NonEmptyString,
918
+ ts: Type.Integer({ minimum: 0 }),
919
+ data: Type.Record(Type.String(), Type.Unknown())
920
+ }, { additionalProperties: false });
921
+ const SendParamsSchema = Type.Object({
922
+ to: NonEmptyString,
923
+ message: Type.Optional(Type.String()),
924
+ mediaUrl: Type.Optional(Type.String()),
925
+ mediaUrls: Type.Optional(Type.Array(Type.String())),
926
+ gifPlayback: Type.Optional(Type.Boolean()),
927
+ channel: Type.Optional(Type.String()),
928
+ accountId: Type.Optional(Type.String()),
929
+ threadId: Type.Optional(Type.String()),
930
+ sessionKey: Type.Optional(Type.String()),
931
+ idempotencyKey: NonEmptyString
932
+ }, { additionalProperties: false });
933
+ const PollParamsSchema = Type.Object({
934
+ to: NonEmptyString,
935
+ question: NonEmptyString,
936
+ options: Type.Array(NonEmptyString, {
937
+ minItems: 2,
938
+ maxItems: 12
939
+ }),
940
+ maxSelections: Type.Optional(Type.Integer({
941
+ minimum: 1,
942
+ maximum: 12
943
+ })),
944
+ durationSeconds: Type.Optional(Type.Integer({
945
+ minimum: 1,
946
+ maximum: 604800
947
+ })),
948
+ durationHours: Type.Optional(Type.Integer({ minimum: 1 })),
949
+ silent: Type.Optional(Type.Boolean()),
950
+ isAnonymous: Type.Optional(Type.Boolean()),
951
+ threadId: Type.Optional(Type.String()),
952
+ channel: Type.Optional(Type.String()),
953
+ accountId: Type.Optional(Type.String()),
954
+ idempotencyKey: NonEmptyString
955
+ }, { additionalProperties: false });
956
+ const AgentParamsSchema = Type.Object({
957
+ message: NonEmptyString,
958
+ agentId: Type.Optional(NonEmptyString),
959
+ to: Type.Optional(Type.String()),
960
+ replyTo: Type.Optional(Type.String()),
961
+ sessionId: Type.Optional(Type.String()),
962
+ sessionKey: Type.Optional(Type.String()),
963
+ thinking: Type.Optional(Type.String()),
964
+ deliver: Type.Optional(Type.Boolean()),
965
+ attachments: Type.Optional(Type.Array(Type.Unknown())),
966
+ channel: Type.Optional(Type.String()),
967
+ replyChannel: Type.Optional(Type.String()),
968
+ accountId: Type.Optional(Type.String()),
969
+ replyAccountId: Type.Optional(Type.String()),
970
+ threadId: Type.Optional(Type.String()),
971
+ groupId: Type.Optional(Type.String()),
972
+ groupChannel: Type.Optional(Type.String()),
973
+ groupSpace: Type.Optional(Type.String()),
974
+ timeout: Type.Optional(Type.Integer({ minimum: 0 })),
975
+ bestEffortDeliver: Type.Optional(Type.Boolean()),
976
+ lane: Type.Optional(Type.String()),
977
+ extraSystemPrompt: Type.Optional(Type.String()),
978
+ inputProvenance: Type.Optional(Type.Object({
979
+ kind: Type.String({ enum: [...INPUT_PROVENANCE_KIND_VALUES] }),
980
+ sourceSessionKey: Type.Optional(Type.String()),
981
+ sourceChannel: Type.Optional(Type.String()),
982
+ sourceTool: Type.Optional(Type.String())
983
+ }, { additionalProperties: false })),
984
+ idempotencyKey: NonEmptyString,
985
+ label: Type.Optional(SessionLabelString),
986
+ spawnedBy: Type.Optional(Type.String())
987
+ }, { additionalProperties: false });
988
+ const AgentIdentityParamsSchema = Type.Object({
989
+ agentId: Type.Optional(NonEmptyString),
990
+ sessionKey: Type.Optional(Type.String())
991
+ }, { additionalProperties: false });
992
+ const AgentIdentityResultSchema = Type.Object({
993
+ agentId: NonEmptyString,
994
+ name: Type.Optional(NonEmptyString),
995
+ avatar: Type.Optional(NonEmptyString),
996
+ emoji: Type.Optional(NonEmptyString)
997
+ }, { additionalProperties: false });
998
+ const AgentWaitParamsSchema = Type.Object({
999
+ runId: NonEmptyString,
1000
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 0 }))
1001
+ }, { additionalProperties: false });
1002
+ const WakeParamsSchema = Type.Object({
1003
+ mode: Type.Union([Type.Literal("now"), Type.Literal("next-heartbeat")]),
1004
+ text: NonEmptyString
1005
+ }, { additionalProperties: false });
1006
+
1007
+ //#endregion
1008
+ //#region src/gateway/protocol/schema/agents-models-skills.ts
1009
+ const ModelChoiceSchema = Type.Object({
1010
+ id: NonEmptyString,
1011
+ name: NonEmptyString,
1012
+ provider: NonEmptyString,
1013
+ contextWindow: Type.Optional(Type.Integer({ minimum: 1 })),
1014
+ reasoning: Type.Optional(Type.Boolean())
1015
+ }, { additionalProperties: false });
1016
+ const AgentSummarySchema = Type.Object({
1017
+ id: NonEmptyString,
1018
+ name: Type.Optional(NonEmptyString),
1019
+ identity: Type.Optional(Type.Object({
1020
+ name: Type.Optional(NonEmptyString),
1021
+ theme: Type.Optional(NonEmptyString),
1022
+ emoji: Type.Optional(NonEmptyString),
1023
+ avatar: Type.Optional(NonEmptyString),
1024
+ avatarUrl: Type.Optional(NonEmptyString)
1025
+ }, { additionalProperties: false }))
1026
+ }, { additionalProperties: false });
1027
+ const AgentsListParamsSchema = Type.Object({}, { additionalProperties: false });
1028
+ const AgentsListResultSchema = Type.Object({
1029
+ defaultId: NonEmptyString,
1030
+ mainKey: NonEmptyString,
1031
+ scope: Type.Union([Type.Literal("per-sender"), Type.Literal("global")]),
1032
+ agents: Type.Array(AgentSummarySchema)
1033
+ }, { additionalProperties: false });
1034
+ const AgentsCreateParamsSchema = Type.Object({
1035
+ name: NonEmptyString,
1036
+ workspace: NonEmptyString,
1037
+ emoji: Type.Optional(Type.String()),
1038
+ avatar: Type.Optional(Type.String())
1039
+ }, { additionalProperties: false });
1040
+ const AgentsCreateResultSchema = Type.Object({
1041
+ ok: Type.Literal(true),
1042
+ agentId: NonEmptyString,
1043
+ name: NonEmptyString,
1044
+ workspace: NonEmptyString
1045
+ }, { additionalProperties: false });
1046
+ const AgentsUpdateParamsSchema = Type.Object({
1047
+ agentId: NonEmptyString,
1048
+ name: Type.Optional(NonEmptyString),
1049
+ workspace: Type.Optional(NonEmptyString),
1050
+ model: Type.Optional(NonEmptyString),
1051
+ avatar: Type.Optional(Type.String())
1052
+ }, { additionalProperties: false });
1053
+ const AgentsUpdateResultSchema = Type.Object({
1054
+ ok: Type.Literal(true),
1055
+ agentId: NonEmptyString
1056
+ }, { additionalProperties: false });
1057
+ const AgentsDeleteParamsSchema = Type.Object({
1058
+ agentId: NonEmptyString,
1059
+ deleteFiles: Type.Optional(Type.Boolean())
1060
+ }, { additionalProperties: false });
1061
+ const AgentsDeleteResultSchema = Type.Object({
1062
+ ok: Type.Literal(true),
1063
+ agentId: NonEmptyString,
1064
+ removedBindings: Type.Integer({ minimum: 0 })
1065
+ }, { additionalProperties: false });
1066
+ const AgentsFileEntrySchema = Type.Object({
1067
+ name: NonEmptyString,
1068
+ path: NonEmptyString,
1069
+ missing: Type.Boolean(),
1070
+ size: Type.Optional(Type.Integer({ minimum: 0 })),
1071
+ updatedAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
1072
+ content: Type.Optional(Type.String())
1073
+ }, { additionalProperties: false });
1074
+ const AgentsFilesListParamsSchema = Type.Object({ agentId: NonEmptyString }, { additionalProperties: false });
1075
+ const AgentsFilesListResultSchema = Type.Object({
1076
+ agentId: NonEmptyString,
1077
+ workspace: NonEmptyString,
1078
+ files: Type.Array(AgentsFileEntrySchema)
1079
+ }, { additionalProperties: false });
1080
+ const AgentsFilesGetParamsSchema = Type.Object({
1081
+ agentId: NonEmptyString,
1082
+ name: NonEmptyString
1083
+ }, { additionalProperties: false });
1084
+ const AgentsFilesGetResultSchema = Type.Object({
1085
+ agentId: NonEmptyString,
1086
+ workspace: NonEmptyString,
1087
+ file: AgentsFileEntrySchema
1088
+ }, { additionalProperties: false });
1089
+ const AgentsFilesSetParamsSchema = Type.Object({
1090
+ agentId: NonEmptyString,
1091
+ name: NonEmptyString,
1092
+ content: Type.String()
1093
+ }, { additionalProperties: false });
1094
+ const AgentsFilesSetResultSchema = Type.Object({
1095
+ ok: Type.Literal(true),
1096
+ agentId: NonEmptyString,
1097
+ workspace: NonEmptyString,
1098
+ file: AgentsFileEntrySchema
1099
+ }, { additionalProperties: false });
1100
+ const ModelsListParamsSchema = Type.Object({}, { additionalProperties: false });
1101
+ const ModelsListResultSchema = Type.Object({ models: Type.Array(ModelChoiceSchema) }, { additionalProperties: false });
1102
+ const ToolsCatalogParamsSchema = Type.Object({
1103
+ agentId: Type.Optional(NonEmptyString),
1104
+ includePlugins: Type.Optional(Type.Boolean())
1105
+ }, { additionalProperties: false });
1106
+ const ToolCatalogProfileSchema = Type.Object({
1107
+ id: Type.Union([
1108
+ Type.Literal("minimal"),
1109
+ Type.Literal("coding"),
1110
+ Type.Literal("messaging"),
1111
+ Type.Literal("full")
1112
+ ]),
1113
+ label: NonEmptyString
1114
+ }, { additionalProperties: false });
1115
+ const ToolCatalogEntrySchema = Type.Object({
1116
+ id: NonEmptyString,
1117
+ label: NonEmptyString,
1118
+ description: Type.String(),
1119
+ source: Type.Union([Type.Literal("core"), Type.Literal("plugin")]),
1120
+ pluginId: Type.Optional(NonEmptyString),
1121
+ optional: Type.Optional(Type.Boolean()),
1122
+ defaultProfiles: Type.Array(Type.Union([
1123
+ Type.Literal("minimal"),
1124
+ Type.Literal("coding"),
1125
+ Type.Literal("messaging"),
1126
+ Type.Literal("full")
1127
+ ]))
1128
+ }, { additionalProperties: false });
1129
+ const ToolCatalogGroupSchema = Type.Object({
1130
+ id: NonEmptyString,
1131
+ label: NonEmptyString,
1132
+ source: Type.Union([Type.Literal("core"), Type.Literal("plugin")]),
1133
+ pluginId: Type.Optional(NonEmptyString),
1134
+ tools: Type.Array(ToolCatalogEntrySchema)
1135
+ }, { additionalProperties: false });
1136
+ const ToolsCatalogResultSchema = Type.Object({
1137
+ agentId: NonEmptyString,
1138
+ profiles: Type.Array(ToolCatalogProfileSchema),
1139
+ groups: Type.Array(ToolCatalogGroupSchema)
1140
+ }, { additionalProperties: false });
1141
+
1142
+ //#endregion
1143
+ //#region src/gateway/protocol/schema/channels.ts
1144
+ const TalkModeParamsSchema = Type.Object({
1145
+ enabled: Type.Boolean(),
1146
+ phase: Type.Optional(Type.String())
1147
+ }, { additionalProperties: false });
1148
+ const TalkConfigParamsSchema = Type.Object({ includeSecrets: Type.Optional(Type.Boolean()) }, { additionalProperties: false });
1149
+ const TalkProviderConfigSchema = Type.Object({
1150
+ voiceId: Type.Optional(Type.String()),
1151
+ voiceAliases: Type.Optional(Type.Record(Type.String(), Type.String())),
1152
+ modelId: Type.Optional(Type.String()),
1153
+ outputFormat: Type.Optional(Type.String()),
1154
+ apiKey: Type.Optional(Type.String())
1155
+ }, { additionalProperties: true });
1156
+ const TalkConfigResultSchema = Type.Object({ config: Type.Object({
1157
+ talk: Type.Optional(Type.Object({
1158
+ provider: Type.Optional(Type.String()),
1159
+ providers: Type.Optional(Type.Record(Type.String(), TalkProviderConfigSchema)),
1160
+ voiceId: Type.Optional(Type.String()),
1161
+ voiceAliases: Type.Optional(Type.Record(Type.String(), Type.String())),
1162
+ modelId: Type.Optional(Type.String()),
1163
+ outputFormat: Type.Optional(Type.String()),
1164
+ apiKey: Type.Optional(Type.String()),
1165
+ interruptOnSpeech: Type.Optional(Type.Boolean())
1166
+ }, { additionalProperties: false })),
1167
+ session: Type.Optional(Type.Object({ mainKey: Type.Optional(Type.String()) }, { additionalProperties: false })),
1168
+ ui: Type.Optional(Type.Object({ seamColor: Type.Optional(Type.String()) }, { additionalProperties: false }))
1169
+ }, { additionalProperties: false }) }, { additionalProperties: false });
1170
+ const ChannelsStatusParamsSchema = Type.Object({
1171
+ probe: Type.Optional(Type.Boolean()),
1172
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 0 }))
1173
+ }, { additionalProperties: false });
1174
+ const ChannelAccountSnapshotSchema = Type.Object({
1175
+ accountId: NonEmptyString,
1176
+ name: Type.Optional(Type.String()),
1177
+ enabled: Type.Optional(Type.Boolean()),
1178
+ configured: Type.Optional(Type.Boolean()),
1179
+ linked: Type.Optional(Type.Boolean()),
1180
+ running: Type.Optional(Type.Boolean()),
1181
+ connected: Type.Optional(Type.Boolean()),
1182
+ reconnectAttempts: Type.Optional(Type.Integer({ minimum: 0 })),
1183
+ lastConnectedAt: Type.Optional(Type.Integer({ minimum: 0 })),
1184
+ lastError: Type.Optional(Type.String()),
1185
+ lastStartAt: Type.Optional(Type.Integer({ minimum: 0 })),
1186
+ lastStopAt: Type.Optional(Type.Integer({ minimum: 0 })),
1187
+ lastInboundAt: Type.Optional(Type.Integer({ minimum: 0 })),
1188
+ lastOutboundAt: Type.Optional(Type.Integer({ minimum: 0 })),
1189
+ lastProbeAt: Type.Optional(Type.Integer({ minimum: 0 })),
1190
+ mode: Type.Optional(Type.String()),
1191
+ dmPolicy: Type.Optional(Type.String()),
1192
+ allowFrom: Type.Optional(Type.Array(Type.String())),
1193
+ tokenSource: Type.Optional(Type.String()),
1194
+ botTokenSource: Type.Optional(Type.String()),
1195
+ appTokenSource: Type.Optional(Type.String()),
1196
+ baseUrl: Type.Optional(Type.String()),
1197
+ allowUnmentionedGroups: Type.Optional(Type.Boolean()),
1198
+ cliPath: Type.Optional(Type.Union([Type.String(), Type.Null()])),
1199
+ dbPath: Type.Optional(Type.Union([Type.String(), Type.Null()])),
1200
+ port: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
1201
+ probe: Type.Optional(Type.Unknown()),
1202
+ audit: Type.Optional(Type.Unknown()),
1203
+ application: Type.Optional(Type.Unknown())
1204
+ }, { additionalProperties: true });
1205
+ const ChannelUiMetaSchema = Type.Object({
1206
+ id: NonEmptyString,
1207
+ label: NonEmptyString,
1208
+ detailLabel: NonEmptyString,
1209
+ systemImage: Type.Optional(Type.String())
1210
+ }, { additionalProperties: false });
1211
+ const ChannelsStatusResultSchema = Type.Object({
1212
+ ts: Type.Integer({ minimum: 0 }),
1213
+ channelOrder: Type.Array(NonEmptyString),
1214
+ channelLabels: Type.Record(NonEmptyString, NonEmptyString),
1215
+ channelDetailLabels: Type.Optional(Type.Record(NonEmptyString, NonEmptyString)),
1216
+ channelSystemImages: Type.Optional(Type.Record(NonEmptyString, NonEmptyString)),
1217
+ channelMeta: Type.Optional(Type.Array(ChannelUiMetaSchema)),
1218
+ channels: Type.Record(NonEmptyString, Type.Unknown()),
1219
+ channelAccounts: Type.Record(NonEmptyString, Type.Array(ChannelAccountSnapshotSchema)),
1220
+ channelDefaultAccountId: Type.Record(NonEmptyString, NonEmptyString)
1221
+ }, { additionalProperties: false });
1222
+ const ChannelsLogoutParamsSchema = Type.Object({
1223
+ channel: NonEmptyString,
1224
+ accountId: Type.Optional(Type.String())
1225
+ }, { additionalProperties: false });
1226
+ const WebLoginStartParamsSchema = Type.Object({
1227
+ force: Type.Optional(Type.Boolean()),
1228
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
1229
+ verbose: Type.Optional(Type.Boolean()),
1230
+ accountId: Type.Optional(Type.String())
1231
+ }, { additionalProperties: false });
1232
+ const WebLoginWaitParamsSchema = Type.Object({
1233
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
1234
+ accountId: Type.Optional(Type.String())
1235
+ }, { additionalProperties: false });
1236
+
1237
+ //#endregion
1238
+ //#region src/gateway/protocol/schema/config.ts
1239
+ const ConfigGetParamsSchema = Type.Object({}, { additionalProperties: false });
1240
+ const ConfigSetParamsSchema = Type.Object({
1241
+ raw: NonEmptyString,
1242
+ baseHash: Type.Optional(NonEmptyString)
1243
+ }, { additionalProperties: false });
1244
+ const ConfigApplyLikeParamsSchema = Type.Object({
1245
+ raw: NonEmptyString,
1246
+ baseHash: Type.Optional(NonEmptyString),
1247
+ sessionKey: Type.Optional(Type.String()),
1248
+ note: Type.Optional(Type.String()),
1249
+ restartDelayMs: Type.Optional(Type.Integer({ minimum: 0 }))
1250
+ }, { additionalProperties: false });
1251
+ const ConfigApplyParamsSchema = ConfigApplyLikeParamsSchema;
1252
+ const ConfigPatchParamsSchema = ConfigApplyLikeParamsSchema;
1253
+ const ConfigSchemaParamsSchema = Type.Object({}, { additionalProperties: false });
1254
+ const UpdateRunParamsSchema = Type.Object({
1255
+ sessionKey: Type.Optional(Type.String()),
1256
+ note: Type.Optional(Type.String()),
1257
+ restartDelayMs: Type.Optional(Type.Integer({ minimum: 0 })),
1258
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 1 }))
1259
+ }, { additionalProperties: false });
1260
+ const ConfigUiHintSchema = Type.Object({
1261
+ label: Type.Optional(Type.String()),
1262
+ help: Type.Optional(Type.String()),
1263
+ tags: Type.Optional(Type.Array(Type.String())),
1264
+ group: Type.Optional(Type.String()),
1265
+ order: Type.Optional(Type.Integer()),
1266
+ advanced: Type.Optional(Type.Boolean()),
1267
+ sensitive: Type.Optional(Type.Boolean()),
1268
+ placeholder: Type.Optional(Type.String()),
1269
+ itemTemplate: Type.Optional(Type.Unknown())
1270
+ }, { additionalProperties: false });
1271
+ const ConfigSchemaResponseSchema = Type.Object({
1272
+ schema: Type.Unknown(),
1273
+ uiHints: Type.Record(Type.String(), ConfigUiHintSchema),
1274
+ version: NonEmptyString,
1275
+ generatedAt: NonEmptyString
1276
+ }, { additionalProperties: false });
1277
+
1278
+ //#endregion
1279
+ //#region src/gateway/protocol/schema/cron.ts
1280
+ function cronAgentTurnPayloadSchema(params) {
1281
+ return Type.Object({
1282
+ kind: Type.Literal("agentTurn"),
1283
+ message: params.message,
1284
+ model: Type.Optional(Type.String()),
1285
+ thinking: Type.Optional(Type.String()),
1286
+ timeoutSeconds: Type.Optional(Type.Integer({ minimum: 0 })),
1287
+ allowUnsafeExternalContent: Type.Optional(Type.Boolean()),
1288
+ deliver: Type.Optional(Type.Boolean()),
1289
+ channel: Type.Optional(Type.String()),
1290
+ to: Type.Optional(Type.String()),
1291
+ bestEffortDeliver: Type.Optional(Type.Boolean())
1292
+ }, { additionalProperties: false });
1293
+ }
1294
+ const CronSessionTargetSchema = Type.Union([Type.Literal("main"), Type.Literal("isolated")]);
1295
+ const CronWakeModeSchema = Type.Union([Type.Literal("next-heartbeat"), Type.Literal("now")]);
1296
+ const CronRunStatusSchema = Type.Union([
1297
+ Type.Literal("ok"),
1298
+ Type.Literal("error"),
1299
+ Type.Literal("skipped")
1300
+ ]);
1301
+ const CronSortDirSchema = Type.Union([Type.Literal("asc"), Type.Literal("desc")]);
1302
+ const CronJobsEnabledFilterSchema = Type.Union([
1303
+ Type.Literal("all"),
1304
+ Type.Literal("enabled"),
1305
+ Type.Literal("disabled")
1306
+ ]);
1307
+ const CronJobsSortBySchema = Type.Union([
1308
+ Type.Literal("nextRunAtMs"),
1309
+ Type.Literal("updatedAtMs"),
1310
+ Type.Literal("name")
1311
+ ]);
1312
+ const CronRunsStatusFilterSchema = Type.Union([
1313
+ Type.Literal("all"),
1314
+ Type.Literal("ok"),
1315
+ Type.Literal("error"),
1316
+ Type.Literal("skipped")
1317
+ ]);
1318
+ const CronRunsStatusValueSchema = Type.Union([
1319
+ Type.Literal("ok"),
1320
+ Type.Literal("error"),
1321
+ Type.Literal("skipped")
1322
+ ]);
1323
+ const CronDeliveryStatusSchema = Type.Union([
1324
+ Type.Literal("delivered"),
1325
+ Type.Literal("not-delivered"),
1326
+ Type.Literal("unknown"),
1327
+ Type.Literal("not-requested")
1328
+ ]);
1329
+ const CronCommonOptionalFields = {
1330
+ agentId: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1331
+ sessionKey: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1332
+ description: Type.Optional(Type.String()),
1333
+ enabled: Type.Optional(Type.Boolean()),
1334
+ deleteAfterRun: Type.Optional(Type.Boolean())
1335
+ };
1336
+ function cronIdOrJobIdParams(extraFields) {
1337
+ return Type.Union([Type.Object({
1338
+ id: NonEmptyString,
1339
+ ...extraFields
1340
+ }, { additionalProperties: false }), Type.Object({
1341
+ jobId: NonEmptyString,
1342
+ ...extraFields
1343
+ }, { additionalProperties: false })]);
1344
+ }
1345
+ const CronRunLogJobIdSchema = Type.String({
1346
+ minLength: 1,
1347
+ pattern: "^[^/\\\\]+$"
1348
+ });
1349
+ const CronScheduleSchema = Type.Union([
1350
+ Type.Object({
1351
+ kind: Type.Literal("at"),
1352
+ at: NonEmptyString
1353
+ }, { additionalProperties: false }),
1354
+ Type.Object({
1355
+ kind: Type.Literal("every"),
1356
+ everyMs: Type.Integer({ minimum: 1 }),
1357
+ anchorMs: Type.Optional(Type.Integer({ minimum: 0 }))
1358
+ }, { additionalProperties: false }),
1359
+ Type.Object({
1360
+ kind: Type.Literal("cron"),
1361
+ expr: NonEmptyString,
1362
+ tz: Type.Optional(Type.String()),
1363
+ staggerMs: Type.Optional(Type.Integer({ minimum: 0 }))
1364
+ }, { additionalProperties: false })
1365
+ ]);
1366
+ const CronPayloadSchema = Type.Union([Type.Object({
1367
+ kind: Type.Literal("systemEvent"),
1368
+ text: NonEmptyString
1369
+ }, { additionalProperties: false }), cronAgentTurnPayloadSchema({ message: NonEmptyString })]);
1370
+ const CronPayloadPatchSchema = Type.Union([Type.Object({
1371
+ kind: Type.Literal("systemEvent"),
1372
+ text: Type.Optional(NonEmptyString)
1373
+ }, { additionalProperties: false }), cronAgentTurnPayloadSchema({ message: Type.Optional(NonEmptyString) })]);
1374
+ const CronDeliverySharedProperties = {
1375
+ channel: Type.Optional(Type.Union([Type.Literal("last"), NonEmptyString])),
1376
+ bestEffort: Type.Optional(Type.Boolean())
1377
+ };
1378
+ const CronDeliveryNoopSchema = Type.Object({
1379
+ mode: Type.Literal("none"),
1380
+ ...CronDeliverySharedProperties,
1381
+ to: Type.Optional(Type.String())
1382
+ }, { additionalProperties: false });
1383
+ const CronDeliveryAnnounceSchema = Type.Object({
1384
+ mode: Type.Literal("announce"),
1385
+ ...CronDeliverySharedProperties,
1386
+ to: Type.Optional(Type.String())
1387
+ }, { additionalProperties: false });
1388
+ const CronDeliveryWebhookSchema = Type.Object({
1389
+ mode: Type.Literal("webhook"),
1390
+ ...CronDeliverySharedProperties,
1391
+ to: NonEmptyString
1392
+ }, { additionalProperties: false });
1393
+ const CronDeliverySchema = Type.Union([
1394
+ CronDeliveryNoopSchema,
1395
+ CronDeliveryAnnounceSchema,
1396
+ CronDeliveryWebhookSchema
1397
+ ]);
1398
+ const CronDeliveryPatchSchema = Type.Object({
1399
+ mode: Type.Optional(Type.Union([
1400
+ Type.Literal("none"),
1401
+ Type.Literal("announce"),
1402
+ Type.Literal("webhook")
1403
+ ])),
1404
+ ...CronDeliverySharedProperties,
1405
+ to: Type.Optional(Type.String())
1406
+ }, { additionalProperties: false });
1407
+ const CronJobStateSchema = Type.Object({
1408
+ nextRunAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
1409
+ runningAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
1410
+ lastRunAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
1411
+ lastRunStatus: Type.Optional(CronRunStatusSchema),
1412
+ lastStatus: Type.Optional(CronRunStatusSchema),
1413
+ lastError: Type.Optional(Type.String()),
1414
+ lastDurationMs: Type.Optional(Type.Integer({ minimum: 0 })),
1415
+ consecutiveErrors: Type.Optional(Type.Integer({ minimum: 0 })),
1416
+ lastDelivered: Type.Optional(Type.Boolean()),
1417
+ lastDeliveryStatus: Type.Optional(CronDeliveryStatusSchema),
1418
+ lastDeliveryError: Type.Optional(Type.String())
1419
+ }, { additionalProperties: false });
1420
+ const CronJobSchema = Type.Object({
1421
+ id: NonEmptyString,
1422
+ agentId: Type.Optional(NonEmptyString),
1423
+ sessionKey: Type.Optional(NonEmptyString),
1424
+ name: NonEmptyString,
1425
+ description: Type.Optional(Type.String()),
1426
+ enabled: Type.Boolean(),
1427
+ deleteAfterRun: Type.Optional(Type.Boolean()),
1428
+ createdAtMs: Type.Integer({ minimum: 0 }),
1429
+ updatedAtMs: Type.Integer({ minimum: 0 }),
1430
+ schedule: CronScheduleSchema,
1431
+ sessionTarget: CronSessionTargetSchema,
1432
+ wakeMode: CronWakeModeSchema,
1433
+ payload: CronPayloadSchema,
1434
+ delivery: Type.Optional(CronDeliverySchema),
1435
+ state: CronJobStateSchema
1436
+ }, { additionalProperties: false });
1437
+ const CronListParamsSchema = Type.Object({
1438
+ includeDisabled: Type.Optional(Type.Boolean()),
1439
+ limit: Type.Optional(Type.Integer({
1440
+ minimum: 1,
1441
+ maximum: 200
1442
+ })),
1443
+ offset: Type.Optional(Type.Integer({ minimum: 0 })),
1444
+ query: Type.Optional(Type.String()),
1445
+ enabled: Type.Optional(CronJobsEnabledFilterSchema),
1446
+ sortBy: Type.Optional(CronJobsSortBySchema),
1447
+ sortDir: Type.Optional(CronSortDirSchema)
1448
+ }, { additionalProperties: false });
1449
+ const CronStatusParamsSchema = Type.Object({}, { additionalProperties: false });
1450
+ const CronAddParamsSchema = Type.Object({
1451
+ name: NonEmptyString,
1452
+ ...CronCommonOptionalFields,
1453
+ schedule: CronScheduleSchema,
1454
+ sessionTarget: CronSessionTargetSchema,
1455
+ wakeMode: CronWakeModeSchema,
1456
+ payload: CronPayloadSchema,
1457
+ delivery: Type.Optional(CronDeliverySchema)
1458
+ }, { additionalProperties: false });
1459
+ const CronJobPatchSchema = Type.Object({
1460
+ name: Type.Optional(NonEmptyString),
1461
+ ...CronCommonOptionalFields,
1462
+ schedule: Type.Optional(CronScheduleSchema),
1463
+ sessionTarget: Type.Optional(CronSessionTargetSchema),
1464
+ wakeMode: Type.Optional(CronWakeModeSchema),
1465
+ payload: Type.Optional(CronPayloadPatchSchema),
1466
+ delivery: Type.Optional(CronDeliveryPatchSchema),
1467
+ state: Type.Optional(Type.Partial(CronJobStateSchema))
1468
+ }, { additionalProperties: false });
1469
+ const CronUpdateParamsSchema = cronIdOrJobIdParams({ patch: CronJobPatchSchema });
1470
+ const CronRemoveParamsSchema = cronIdOrJobIdParams({});
1471
+ const CronRunParamsSchema = cronIdOrJobIdParams({ mode: Type.Optional(Type.Union([Type.Literal("due"), Type.Literal("force")])) });
1472
+ const CronRunsParamsSchema = Type.Object({
1473
+ scope: Type.Optional(Type.Union([Type.Literal("job"), Type.Literal("all")])),
1474
+ id: Type.Optional(CronRunLogJobIdSchema),
1475
+ jobId: Type.Optional(CronRunLogJobIdSchema),
1476
+ limit: Type.Optional(Type.Integer({
1477
+ minimum: 1,
1478
+ maximum: 200
1479
+ })),
1480
+ offset: Type.Optional(Type.Integer({ minimum: 0 })),
1481
+ statuses: Type.Optional(Type.Array(CronRunsStatusValueSchema, {
1482
+ minItems: 1,
1483
+ maxItems: 3
1484
+ })),
1485
+ status: Type.Optional(CronRunsStatusFilterSchema),
1486
+ deliveryStatuses: Type.Optional(Type.Array(CronDeliveryStatusSchema, {
1487
+ minItems: 1,
1488
+ maxItems: 4
1489
+ })),
1490
+ deliveryStatus: Type.Optional(CronDeliveryStatusSchema),
1491
+ query: Type.Optional(Type.String()),
1492
+ sortDir: Type.Optional(CronSortDirSchema)
1493
+ }, { additionalProperties: false });
1494
+ const CronRunLogEntrySchema = Type.Object({
1495
+ ts: Type.Integer({ minimum: 0 }),
1496
+ jobId: NonEmptyString,
1497
+ action: Type.Literal("finished"),
1498
+ status: Type.Optional(CronRunStatusSchema),
1499
+ error: Type.Optional(Type.String()),
1500
+ summary: Type.Optional(Type.String()),
1501
+ delivered: Type.Optional(Type.Boolean()),
1502
+ deliveryStatus: Type.Optional(CronDeliveryStatusSchema),
1503
+ deliveryError: Type.Optional(Type.String()),
1504
+ sessionId: Type.Optional(NonEmptyString),
1505
+ sessionKey: Type.Optional(NonEmptyString),
1506
+ runAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
1507
+ durationMs: Type.Optional(Type.Integer({ minimum: 0 })),
1508
+ nextRunAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
1509
+ model: Type.Optional(Type.String()),
1510
+ provider: Type.Optional(Type.String()),
1511
+ usage: Type.Optional(Type.Object({
1512
+ input_tokens: Type.Optional(Type.Number()),
1513
+ output_tokens: Type.Optional(Type.Number()),
1514
+ total_tokens: Type.Optional(Type.Number()),
1515
+ cache_read_tokens: Type.Optional(Type.Number()),
1516
+ cache_write_tokens: Type.Optional(Type.Number())
1517
+ }, { additionalProperties: false })),
1518
+ jobName: Type.Optional(Type.String())
1519
+ }, { additionalProperties: false });
1520
+
1521
+ //#endregion
1522
+ //#region src/gateway/protocol/schema/error-codes.ts
1523
+ const ErrorCodes = {
1524
+ NOT_LINKED: "NOT_LINKED",
1525
+ NOT_PAIRED: "NOT_PAIRED",
1526
+ AGENT_TIMEOUT: "AGENT_TIMEOUT",
1527
+ INVALID_REQUEST: "INVALID_REQUEST",
1528
+ UNAVAILABLE: "UNAVAILABLE"
1529
+ };
1530
+ function errorShape(code, message, opts) {
1531
+ return {
1532
+ code,
1533
+ message,
1534
+ ...opts
1535
+ };
1536
+ }
1537
+
1538
+ //#endregion
1539
+ //#region src/gateway/protocol/schema/devices.ts
1540
+ const DevicePairListParamsSchema = Type.Object({}, { additionalProperties: false });
1541
+ const DevicePairApproveParamsSchema = Type.Object({ requestId: NonEmptyString }, { additionalProperties: false });
1542
+ const DevicePairRejectParamsSchema = Type.Object({ requestId: NonEmptyString }, { additionalProperties: false });
1543
+ const DevicePairRemoveParamsSchema = Type.Object({ deviceId: NonEmptyString }, { additionalProperties: false });
1544
+ const DeviceTokenRotateParamsSchema = Type.Object({
1545
+ deviceId: NonEmptyString,
1546
+ role: NonEmptyString,
1547
+ scopes: Type.Optional(Type.Array(NonEmptyString))
1548
+ }, { additionalProperties: false });
1549
+ const DeviceTokenRevokeParamsSchema = Type.Object({
1550
+ deviceId: NonEmptyString,
1551
+ role: NonEmptyString
1552
+ }, { additionalProperties: false });
1553
+ const DevicePairRequestedEventSchema = Type.Object({
1554
+ requestId: NonEmptyString,
1555
+ deviceId: NonEmptyString,
1556
+ publicKey: NonEmptyString,
1557
+ displayName: Type.Optional(NonEmptyString),
1558
+ platform: Type.Optional(NonEmptyString),
1559
+ clientId: Type.Optional(NonEmptyString),
1560
+ clientMode: Type.Optional(NonEmptyString),
1561
+ role: Type.Optional(NonEmptyString),
1562
+ roles: Type.Optional(Type.Array(NonEmptyString)),
1563
+ scopes: Type.Optional(Type.Array(NonEmptyString)),
1564
+ remoteIp: Type.Optional(NonEmptyString),
1565
+ silent: Type.Optional(Type.Boolean()),
1566
+ isRepair: Type.Optional(Type.Boolean()),
1567
+ ts: Type.Integer({ minimum: 0 })
1568
+ }, { additionalProperties: false });
1569
+ const DevicePairResolvedEventSchema = Type.Object({
1570
+ requestId: NonEmptyString,
1571
+ deviceId: NonEmptyString,
1572
+ decision: NonEmptyString,
1573
+ ts: Type.Integer({ minimum: 0 })
1574
+ }, { additionalProperties: false });
1575
+
1576
+ //#endregion
1577
+ //#region src/gateway/protocol/schema/snapshot.ts
1578
+ const PresenceEntrySchema = Type.Object({
1579
+ host: Type.Optional(NonEmptyString),
1580
+ ip: Type.Optional(NonEmptyString),
1581
+ version: Type.Optional(NonEmptyString),
1582
+ platform: Type.Optional(NonEmptyString),
1583
+ deviceFamily: Type.Optional(NonEmptyString),
1584
+ modelIdentifier: Type.Optional(NonEmptyString),
1585
+ mode: Type.Optional(NonEmptyString),
1586
+ lastInputSeconds: Type.Optional(Type.Integer({ minimum: 0 })),
1587
+ reason: Type.Optional(NonEmptyString),
1588
+ tags: Type.Optional(Type.Array(NonEmptyString)),
1589
+ text: Type.Optional(Type.String()),
1590
+ ts: Type.Integer({ minimum: 0 }),
1591
+ deviceId: Type.Optional(NonEmptyString),
1592
+ roles: Type.Optional(Type.Array(NonEmptyString)),
1593
+ scopes: Type.Optional(Type.Array(NonEmptyString)),
1594
+ instanceId: Type.Optional(NonEmptyString)
1595
+ }, { additionalProperties: false });
1596
+ const HealthSnapshotSchema = Type.Any();
1597
+ const SessionDefaultsSchema = Type.Object({
1598
+ defaultAgentId: NonEmptyString,
1599
+ mainKey: NonEmptyString,
1600
+ mainSessionKey: NonEmptyString,
1601
+ scope: Type.Optional(NonEmptyString)
1602
+ }, { additionalProperties: false });
1603
+ const StateVersionSchema = Type.Object({
1604
+ presence: Type.Integer({ minimum: 0 }),
1605
+ health: Type.Integer({ minimum: 0 })
1606
+ }, { additionalProperties: false });
1607
+ const SnapshotSchema = Type.Object({
1608
+ presence: Type.Array(PresenceEntrySchema),
1609
+ health: HealthSnapshotSchema,
1610
+ stateVersion: StateVersionSchema,
1611
+ uptimeMs: Type.Integer({ minimum: 0 }),
1612
+ configPath: Type.Optional(NonEmptyString),
1613
+ stateDir: Type.Optional(NonEmptyString),
1614
+ sessionDefaults: Type.Optional(SessionDefaultsSchema),
1615
+ authMode: Type.Optional(Type.Union([
1616
+ Type.Literal("none"),
1617
+ Type.Literal("token"),
1618
+ Type.Literal("password"),
1619
+ Type.Literal("trusted-proxy")
1620
+ ])),
1621
+ updateAvailable: Type.Optional(Type.Object({
1622
+ currentVersion: NonEmptyString,
1623
+ latestVersion: NonEmptyString,
1624
+ channel: NonEmptyString
1625
+ }))
1626
+ }, { additionalProperties: false });
1627
+
1628
+ //#endregion
1629
+ //#region src/gateway/protocol/schema/frames.ts
1630
+ const TickEventSchema = Type.Object({ ts: Type.Integer({ minimum: 0 }) }, { additionalProperties: false });
1631
+ const ShutdownEventSchema = Type.Object({
1632
+ reason: NonEmptyString,
1633
+ restartExpectedMs: Type.Optional(Type.Integer({ minimum: 0 }))
1634
+ }, { additionalProperties: false });
1635
+ const ConnectParamsSchema = Type.Object({
1636
+ minProtocol: Type.Integer({ minimum: 1 }),
1637
+ maxProtocol: Type.Integer({ minimum: 1 }),
1638
+ client: Type.Object({
1639
+ id: GatewayClientIdSchema,
1640
+ displayName: Type.Optional(NonEmptyString),
1641
+ version: NonEmptyString,
1642
+ platform: NonEmptyString,
1643
+ deviceFamily: Type.Optional(NonEmptyString),
1644
+ modelIdentifier: Type.Optional(NonEmptyString),
1645
+ mode: GatewayClientModeSchema,
1646
+ instanceId: Type.Optional(NonEmptyString)
1647
+ }, { additionalProperties: false }),
1648
+ caps: Type.Optional(Type.Array(NonEmptyString, { default: [] })),
1649
+ commands: Type.Optional(Type.Array(NonEmptyString)),
1650
+ permissions: Type.Optional(Type.Record(NonEmptyString, Type.Boolean())),
1651
+ pathEnv: Type.Optional(Type.String()),
1652
+ role: Type.Optional(NonEmptyString),
1653
+ scopes: Type.Optional(Type.Array(NonEmptyString)),
1654
+ device: Type.Optional(Type.Object({
1655
+ id: NonEmptyString,
1656
+ publicKey: NonEmptyString,
1657
+ signature: NonEmptyString,
1658
+ signedAt: Type.Integer({ minimum: 0 }),
1659
+ nonce: NonEmptyString
1660
+ }, { additionalProperties: false })),
1661
+ auth: Type.Optional(Type.Object({
1662
+ token: Type.Optional(Type.String()),
1663
+ deviceToken: Type.Optional(Type.String()),
1664
+ password: Type.Optional(Type.String())
1665
+ }, { additionalProperties: false })),
1666
+ locale: Type.Optional(Type.String()),
1667
+ userAgent: Type.Optional(Type.String())
1668
+ }, { additionalProperties: false });
1669
+ const HelloOkSchema = Type.Object({
1670
+ type: Type.Literal("hello-ok"),
1671
+ protocol: Type.Integer({ minimum: 1 }),
1672
+ server: Type.Object({
1673
+ version: NonEmptyString,
1674
+ connId: NonEmptyString
1675
+ }, { additionalProperties: false }),
1676
+ features: Type.Object({
1677
+ methods: Type.Array(NonEmptyString),
1678
+ events: Type.Array(NonEmptyString)
1679
+ }, { additionalProperties: false }),
1680
+ snapshot: SnapshotSchema,
1681
+ canvasHostUrl: Type.Optional(NonEmptyString),
1682
+ auth: Type.Optional(Type.Object({
1683
+ deviceToken: NonEmptyString,
1684
+ role: NonEmptyString,
1685
+ scopes: Type.Array(NonEmptyString),
1686
+ issuedAtMs: Type.Optional(Type.Integer({ minimum: 0 }))
1687
+ }, { additionalProperties: false })),
1688
+ policy: Type.Object({
1689
+ maxPayload: Type.Integer({ minimum: 1 }),
1690
+ maxBufferedBytes: Type.Integer({ minimum: 1 }),
1691
+ tickIntervalMs: Type.Integer({ minimum: 1 })
1692
+ }, { additionalProperties: false })
1693
+ }, { additionalProperties: false });
1694
+ const ErrorShapeSchema = Type.Object({
1695
+ code: NonEmptyString,
1696
+ message: NonEmptyString,
1697
+ details: Type.Optional(Type.Unknown()),
1698
+ retryable: Type.Optional(Type.Boolean()),
1699
+ retryAfterMs: Type.Optional(Type.Integer({ minimum: 0 }))
1700
+ }, { additionalProperties: false });
1701
+ const RequestFrameSchema = Type.Object({
1702
+ type: Type.Literal("req"),
1703
+ id: NonEmptyString,
1704
+ method: NonEmptyString,
1705
+ params: Type.Optional(Type.Unknown())
1706
+ }, { additionalProperties: false });
1707
+ const ResponseFrameSchema = Type.Object({
1708
+ type: Type.Literal("res"),
1709
+ id: NonEmptyString,
1710
+ ok: Type.Boolean(),
1711
+ payload: Type.Optional(Type.Unknown()),
1712
+ error: Type.Optional(ErrorShapeSchema)
1713
+ }, { additionalProperties: false });
1714
+ const EventFrameSchema = Type.Object({
1715
+ type: Type.Literal("event"),
1716
+ event: NonEmptyString,
1717
+ payload: Type.Optional(Type.Unknown()),
1718
+ seq: Type.Optional(Type.Integer({ minimum: 0 })),
1719
+ stateVersion: Type.Optional(StateVersionSchema)
1720
+ }, { additionalProperties: false });
1721
+ const GatewayFrameSchema = Type.Union([
1722
+ RequestFrameSchema,
1723
+ ResponseFrameSchema,
1724
+ EventFrameSchema
1725
+ ], { discriminator: "type" });
1726
+
1727
+ //#endregion
1728
+ //#region src/gateway/protocol/schema/logs-chat.ts
1729
+ const LogsTailParamsSchema = Type.Object({
1730
+ cursor: Type.Optional(Type.Integer({ minimum: 0 })),
1731
+ limit: Type.Optional(Type.Integer({
1732
+ minimum: 1,
1733
+ maximum: 5e3
1734
+ })),
1735
+ maxBytes: Type.Optional(Type.Integer({
1736
+ minimum: 1,
1737
+ maximum: 1e6
1738
+ }))
1739
+ }, { additionalProperties: false });
1740
+ const LogsTailResultSchema = Type.Object({
1741
+ file: NonEmptyString,
1742
+ cursor: Type.Integer({ minimum: 0 }),
1743
+ size: Type.Integer({ minimum: 0 }),
1744
+ lines: Type.Array(Type.String()),
1745
+ truncated: Type.Optional(Type.Boolean()),
1746
+ reset: Type.Optional(Type.Boolean())
1747
+ }, { additionalProperties: false });
1748
+ const ChatHistoryParamsSchema = Type.Object({
1749
+ sessionKey: NonEmptyString,
1750
+ limit: Type.Optional(Type.Integer({
1751
+ minimum: 1,
1752
+ maximum: 1e3
1753
+ }))
1754
+ }, { additionalProperties: false });
1755
+ const ChatSendParamsSchema = Type.Object({
1756
+ sessionKey: NonEmptyString,
1757
+ message: Type.String(),
1758
+ thinking: Type.Optional(Type.String()),
1759
+ deliver: Type.Optional(Type.Boolean()),
1760
+ attachments: Type.Optional(Type.Array(Type.Unknown())),
1761
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
1762
+ idempotencyKey: NonEmptyString
1763
+ }, { additionalProperties: false });
1764
+ const ChatAbortParamsSchema = Type.Object({
1765
+ sessionKey: NonEmptyString,
1766
+ runId: Type.Optional(NonEmptyString)
1767
+ }, { additionalProperties: false });
1768
+ const ChatInjectParamsSchema = Type.Object({
1769
+ sessionKey: NonEmptyString,
1770
+ message: NonEmptyString,
1771
+ label: Type.Optional(Type.String({ maxLength: 100 }))
1772
+ }, { additionalProperties: false });
1773
+ const ChatEventSchema = Type.Object({
1774
+ runId: NonEmptyString,
1775
+ sessionKey: NonEmptyString,
1776
+ seq: Type.Integer({ minimum: 0 }),
1777
+ state: Type.Union([
1778
+ Type.Literal("delta"),
1779
+ Type.Literal("final"),
1780
+ Type.Literal("aborted"),
1781
+ Type.Literal("error")
1782
+ ]),
1783
+ message: Type.Optional(Type.Unknown()),
1784
+ errorMessage: Type.Optional(Type.String()),
1785
+ usage: Type.Optional(Type.Unknown()),
1786
+ stopReason: Type.Optional(Type.String())
1787
+ }, { additionalProperties: false });
1788
+
1789
+ //#endregion
1790
+ //#region src/gateway/protocol/schema/nodes.ts
1791
+ const NodePairRequestParamsSchema = Type.Object({
1792
+ nodeId: NonEmptyString,
1793
+ displayName: Type.Optional(NonEmptyString),
1794
+ platform: Type.Optional(NonEmptyString),
1795
+ version: Type.Optional(NonEmptyString),
1796
+ coreVersion: Type.Optional(NonEmptyString),
1797
+ uiVersion: Type.Optional(NonEmptyString),
1798
+ deviceFamily: Type.Optional(NonEmptyString),
1799
+ modelIdentifier: Type.Optional(NonEmptyString),
1800
+ caps: Type.Optional(Type.Array(NonEmptyString)),
1801
+ commands: Type.Optional(Type.Array(NonEmptyString)),
1802
+ remoteIp: Type.Optional(NonEmptyString),
1803
+ silent: Type.Optional(Type.Boolean())
1804
+ }, { additionalProperties: false });
1805
+ const NodePairListParamsSchema = Type.Object({}, { additionalProperties: false });
1806
+ const NodePairApproveParamsSchema = Type.Object({ requestId: NonEmptyString }, { additionalProperties: false });
1807
+ const NodePairRejectParamsSchema = Type.Object({ requestId: NonEmptyString }, { additionalProperties: false });
1808
+ const NodePairVerifyParamsSchema = Type.Object({
1809
+ nodeId: NonEmptyString,
1810
+ token: NonEmptyString
1811
+ }, { additionalProperties: false });
1812
+ const NodeRenameParamsSchema = Type.Object({
1813
+ nodeId: NonEmptyString,
1814
+ displayName: NonEmptyString
1815
+ }, { additionalProperties: false });
1816
+ const NodeListParamsSchema = Type.Object({}, { additionalProperties: false });
1817
+ const NodeDescribeParamsSchema = Type.Object({ nodeId: NonEmptyString }, { additionalProperties: false });
1818
+ const NodeInvokeParamsSchema = Type.Object({
1819
+ nodeId: NonEmptyString,
1820
+ command: NonEmptyString,
1821
+ params: Type.Optional(Type.Unknown()),
1822
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
1823
+ idempotencyKey: NonEmptyString
1824
+ }, { additionalProperties: false });
1825
+ const NodeInvokeResultParamsSchema = Type.Object({
1826
+ id: NonEmptyString,
1827
+ nodeId: NonEmptyString,
1828
+ ok: Type.Boolean(),
1829
+ payload: Type.Optional(Type.Unknown()),
1830
+ payloadJSON: Type.Optional(Type.String()),
1831
+ error: Type.Optional(Type.Object({
1832
+ code: Type.Optional(NonEmptyString),
1833
+ message: Type.Optional(NonEmptyString)
1834
+ }, { additionalProperties: false }))
1835
+ }, { additionalProperties: false });
1836
+ const NodeEventParamsSchema = Type.Object({
1837
+ event: NonEmptyString,
1838
+ payload: Type.Optional(Type.Unknown()),
1839
+ payloadJSON: Type.Optional(Type.String())
1840
+ }, { additionalProperties: false });
1841
+ const NodeInvokeRequestEventSchema = Type.Object({
1842
+ id: NonEmptyString,
1843
+ nodeId: NonEmptyString,
1844
+ command: NonEmptyString,
1845
+ paramsJSON: Type.Optional(Type.String()),
1846
+ timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
1847
+ idempotencyKey: Type.Optional(NonEmptyString)
1848
+ }, { additionalProperties: false });
1849
+
1850
+ //#endregion
1851
+ //#region src/gateway/protocol/schema/push.ts
1852
+ const ApnsEnvironmentSchema = Type.String({ enum: ["sandbox", "production"] });
1853
+ const PushTestParamsSchema = Type.Object({
1854
+ nodeId: NonEmptyString,
1855
+ title: Type.Optional(Type.String()),
1856
+ body: Type.Optional(Type.String()),
1857
+ environment: Type.Optional(ApnsEnvironmentSchema)
1858
+ }, { additionalProperties: false });
1859
+ const PushTestResultSchema = Type.Object({
1860
+ ok: Type.Boolean(),
1861
+ status: Type.Integer(),
1862
+ apnsId: Type.Optional(Type.String()),
1863
+ reason: Type.Optional(Type.String()),
1864
+ tokenSuffix: Type.String(),
1865
+ topic: Type.String(),
1866
+ environment: ApnsEnvironmentSchema
1867
+ }, { additionalProperties: false });
1868
+
1869
+ //#endregion
1870
+ //#region src/gateway/protocol/schema/sessions.ts
1871
+ const SessionsListParamsSchema = Type.Object({
1872
+ limit: Type.Optional(Type.Integer({ minimum: 1 })),
1873
+ activeMinutes: Type.Optional(Type.Integer({ minimum: 1 })),
1874
+ includeGlobal: Type.Optional(Type.Boolean()),
1875
+ includeUnknown: Type.Optional(Type.Boolean()),
1876
+ includeDerivedTitles: Type.Optional(Type.Boolean()),
1877
+ includeLastMessage: Type.Optional(Type.Boolean()),
1878
+ label: Type.Optional(SessionLabelString),
1879
+ spawnedBy: Type.Optional(NonEmptyString),
1880
+ agentId: Type.Optional(NonEmptyString),
1881
+ search: Type.Optional(Type.String())
1882
+ }, { additionalProperties: false });
1883
+ const SessionsPreviewParamsSchema = Type.Object({
1884
+ keys: Type.Array(NonEmptyString, { minItems: 1 }),
1885
+ limit: Type.Optional(Type.Integer({ minimum: 1 })),
1886
+ maxChars: Type.Optional(Type.Integer({ minimum: 20 }))
1887
+ }, { additionalProperties: false });
1888
+ const SessionsResolveParamsSchema = Type.Object({
1889
+ key: Type.Optional(NonEmptyString),
1890
+ sessionId: Type.Optional(NonEmptyString),
1891
+ label: Type.Optional(SessionLabelString),
1892
+ agentId: Type.Optional(NonEmptyString),
1893
+ spawnedBy: Type.Optional(NonEmptyString),
1894
+ includeGlobal: Type.Optional(Type.Boolean()),
1895
+ includeUnknown: Type.Optional(Type.Boolean())
1896
+ }, { additionalProperties: false });
1897
+ const SessionsPatchParamsSchema = Type.Object({
1898
+ key: NonEmptyString,
1899
+ label: Type.Optional(Type.Union([SessionLabelString, Type.Null()])),
1900
+ verboseLevel: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1901
+ responseUsage: Type.Optional(Type.Union([
1902
+ Type.Literal("off"),
1903
+ Type.Literal("tokens"),
1904
+ Type.Literal("full"),
1905
+ Type.Literal("on"),
1906
+ Type.Null()
1907
+ ])),
1908
+ elevatedLevel: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1909
+ execHost: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1910
+ execSecurity: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1911
+ execAsk: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1912
+ execNode: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1913
+ model: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1914
+ spawnedBy: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1915
+ spawnDepth: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
1916
+ sendPolicy: Type.Optional(Type.Union([
1917
+ Type.Literal("allow"),
1918
+ Type.Literal("deny"),
1919
+ Type.Null()
1920
+ ])),
1921
+ groupActivation: Type.Optional(Type.Union([
1922
+ Type.Literal("mention"),
1923
+ Type.Literal("always"),
1924
+ Type.Null()
1925
+ ]))
1926
+ }, { additionalProperties: false });
1927
+ const SessionsResetParamsSchema = Type.Object({
1928
+ key: NonEmptyString,
1929
+ reason: Type.Optional(Type.Union([Type.Literal("new"), Type.Literal("reset")]))
1930
+ }, { additionalProperties: false });
1931
+ const SessionsDeleteParamsSchema = Type.Object({
1932
+ key: NonEmptyString,
1933
+ deleteTranscript: Type.Optional(Type.Boolean()),
1934
+ emitLifecycleHooks: Type.Optional(Type.Boolean())
1935
+ }, { additionalProperties: false });
1936
+ const SessionsCompactParamsSchema = Type.Object({
1937
+ key: NonEmptyString,
1938
+ maxLines: Type.Optional(Type.Integer({ minimum: 1 }))
1939
+ }, { additionalProperties: false });
1940
+ const SessionsUsageParamsSchema = Type.Object({
1941
+ key: Type.Optional(NonEmptyString),
1942
+ startDate: Type.Optional(Type.String({ pattern: "^\\d{4}-\\d{2}-\\d{2}$" })),
1943
+ endDate: Type.Optional(Type.String({ pattern: "^\\d{4}-\\d{2}-\\d{2}$" })),
1944
+ mode: Type.Optional(Type.Union([
1945
+ Type.Literal("utc"),
1946
+ Type.Literal("gateway"),
1947
+ Type.Literal("specific")
1948
+ ])),
1949
+ utcOffset: Type.Optional(Type.String({ pattern: "^UTC[+-]\\d{1,2}(?::[0-5]\\d)?$" })),
1950
+ limit: Type.Optional(Type.Integer({ minimum: 1 })),
1951
+ includeContextWeight: Type.Optional(Type.Boolean())
1952
+ }, { additionalProperties: false });
1953
+
1954
+ //#endregion
1955
+ //#region src/gateway/protocol/schema/wizard.ts
1956
+ const WizardRunStatusSchema = Type.Union([
1957
+ Type.Literal("running"),
1958
+ Type.Literal("done"),
1959
+ Type.Literal("cancelled"),
1960
+ Type.Literal("error")
1961
+ ]);
1962
+ const WizardStartParamsSchema = Type.Object({
1963
+ mode: Type.Optional(Type.Union([Type.Literal("local"), Type.Literal("remote")])),
1964
+ workspace: Type.Optional(Type.String())
1965
+ }, { additionalProperties: false });
1966
+ const WizardAnswerSchema = Type.Object({
1967
+ stepId: NonEmptyString,
1968
+ value: Type.Optional(Type.Unknown())
1969
+ }, { additionalProperties: false });
1970
+ const WizardNextParamsSchema = Type.Object({
1971
+ sessionId: NonEmptyString,
1972
+ answer: Type.Optional(WizardAnswerSchema)
1973
+ }, { additionalProperties: false });
1974
+ const WizardSessionIdParamsSchema = Type.Object({ sessionId: NonEmptyString }, { additionalProperties: false });
1975
+ const WizardCancelParamsSchema = WizardSessionIdParamsSchema;
1976
+ const WizardStatusParamsSchema = WizardSessionIdParamsSchema;
1977
+ const WizardStepOptionSchema = Type.Object({
1978
+ value: Type.Unknown(),
1979
+ label: NonEmptyString,
1980
+ hint: Type.Optional(Type.String())
1981
+ }, { additionalProperties: false });
1982
+ const WizardStepSchema = Type.Object({
1983
+ id: NonEmptyString,
1984
+ type: Type.Union([
1985
+ Type.Literal("note"),
1986
+ Type.Literal("select"),
1987
+ Type.Literal("text"),
1988
+ Type.Literal("confirm"),
1989
+ Type.Literal("multiselect"),
1990
+ Type.Literal("progress"),
1991
+ Type.Literal("action")
1992
+ ]),
1993
+ title: Type.Optional(Type.String()),
1994
+ message: Type.Optional(Type.String()),
1995
+ options: Type.Optional(Type.Array(WizardStepOptionSchema)),
1996
+ initialValue: Type.Optional(Type.Unknown()),
1997
+ placeholder: Type.Optional(Type.String()),
1998
+ sensitive: Type.Optional(Type.Boolean()),
1999
+ executor: Type.Optional(Type.Union([Type.Literal("gateway"), Type.Literal("client")]))
2000
+ }, { additionalProperties: false });
2001
+ const WizardResultFields = {
2002
+ done: Type.Boolean(),
2003
+ step: Type.Optional(WizardStepSchema),
2004
+ status: Type.Optional(WizardRunStatusSchema),
2005
+ error: Type.Optional(Type.String())
2006
+ };
2007
+ const WizardNextResultSchema = Type.Object(WizardResultFields, { additionalProperties: false });
2008
+ const WizardStartResultSchema = Type.Object({
2009
+ sessionId: NonEmptyString,
2010
+ ...WizardResultFields
2011
+ }, { additionalProperties: false });
2012
+ const WizardStatusResultSchema = Type.Object({
2013
+ status: WizardRunStatusSchema,
2014
+ error: Type.Optional(Type.String())
2015
+ }, { additionalProperties: false });
2016
+
2017
+ //#endregion
2018
+ //#region src/gateway/protocol/schema/protocol-schemas.ts
2019
+ const PROTOCOL_VERSION = 3;
2020
+
2021
+ //#endregion
2022
+ //#region src/gateway/protocol/index.ts
2023
+ const ajv = new AjvPkg({
2024
+ allErrors: true,
2025
+ strict: false,
2026
+ removeAdditional: false
2027
+ });
2028
+ const validateConnectParams = ajv.compile(ConnectParamsSchema);
2029
+ const validateRequestFrame = ajv.compile(RequestFrameSchema);
2030
+ const validateResponseFrame = ajv.compile(ResponseFrameSchema);
2031
+ const validateEventFrame = ajv.compile(EventFrameSchema);
2032
+ const validateSendParams = ajv.compile(SendParamsSchema);
2033
+ const validatePollParams = ajv.compile(PollParamsSchema);
2034
+ const validateAgentParams = ajv.compile(AgentParamsSchema);
2035
+ const validateAgentIdentityParams = ajv.compile(AgentIdentityParamsSchema);
2036
+ const validateAgentWaitParams = ajv.compile(AgentWaitParamsSchema);
2037
+ const validateWakeParams = ajv.compile(WakeParamsSchema);
2038
+ const validateAgentsListParams = ajv.compile(AgentsListParamsSchema);
2039
+ const validateAgentsCreateParams = ajv.compile(AgentsCreateParamsSchema);
2040
+ const validateAgentsUpdateParams = ajv.compile(AgentsUpdateParamsSchema);
2041
+ const validateAgentsDeleteParams = ajv.compile(AgentsDeleteParamsSchema);
2042
+ const validateAgentsFilesListParams = ajv.compile(AgentsFilesListParamsSchema);
2043
+ const validateAgentsFilesGetParams = ajv.compile(AgentsFilesGetParamsSchema);
2044
+ const validateAgentsFilesSetParams = ajv.compile(AgentsFilesSetParamsSchema);
2045
+ const validateNodePairRequestParams = ajv.compile(NodePairRequestParamsSchema);
2046
+ const validateNodePairListParams = ajv.compile(NodePairListParamsSchema);
2047
+ const validateNodePairApproveParams = ajv.compile(NodePairApproveParamsSchema);
2048
+ const validateNodePairRejectParams = ajv.compile(NodePairRejectParamsSchema);
2049
+ const validateNodePairVerifyParams = ajv.compile(NodePairVerifyParamsSchema);
2050
+ const validateNodeRenameParams = ajv.compile(NodeRenameParamsSchema);
2051
+ const validateNodeListParams = ajv.compile(NodeListParamsSchema);
2052
+ const validateNodeDescribeParams = ajv.compile(NodeDescribeParamsSchema);
2053
+ const validateNodeInvokeParams = ajv.compile(NodeInvokeParamsSchema);
2054
+ const validateNodeInvokeResultParams = ajv.compile(NodeInvokeResultParamsSchema);
2055
+ const validateNodeEventParams = ajv.compile(NodeEventParamsSchema);
2056
+ const validatePushTestParams = ajv.compile(PushTestParamsSchema);
2057
+ const validateSessionsListParams = ajv.compile(SessionsListParamsSchema);
2058
+ const validateSessionsPreviewParams = ajv.compile(SessionsPreviewParamsSchema);
2059
+ const validateSessionsResolveParams = ajv.compile(SessionsResolveParamsSchema);
2060
+ const validateSessionsPatchParams = ajv.compile(SessionsPatchParamsSchema);
2061
+ const validateSessionsResetParams = ajv.compile(SessionsResetParamsSchema);
2062
+ const validateSessionsDeleteParams = ajv.compile(SessionsDeleteParamsSchema);
2063
+ const validateSessionsCompactParams = ajv.compile(SessionsCompactParamsSchema);
2064
+ const validateSessionsUsageParams = ajv.compile(SessionsUsageParamsSchema);
2065
+ const validateConfigGetParams = ajv.compile(ConfigGetParamsSchema);
2066
+ const validateConfigSetParams = ajv.compile(ConfigSetParamsSchema);
2067
+ const validateConfigApplyParams = ajv.compile(ConfigApplyParamsSchema);
2068
+ const validateConfigPatchParams = ajv.compile(ConfigPatchParamsSchema);
2069
+ const validateConfigSchemaParams = ajv.compile(ConfigSchemaParamsSchema);
2070
+ const validateWizardStartParams = ajv.compile(WizardStartParamsSchema);
2071
+ const validateWizardNextParams = ajv.compile(WizardNextParamsSchema);
2072
+ const validateWizardCancelParams = ajv.compile(WizardCancelParamsSchema);
2073
+ const validateWizardStatusParams = ajv.compile(WizardStatusParamsSchema);
2074
+ const validateTalkModeParams = ajv.compile(TalkModeParamsSchema);
2075
+ const validateTalkConfigParams = ajv.compile(TalkConfigParamsSchema);
2076
+ const validateChannelsStatusParams = ajv.compile(ChannelsStatusParamsSchema);
2077
+ const validateChannelsLogoutParams = ajv.compile(ChannelsLogoutParamsSchema);
2078
+ const validateModelsListParams = ajv.compile(ModelsListParamsSchema);
2079
+ const validateToolsCatalogParams = ajv.compile(ToolsCatalogParamsSchema);
2080
+ const validateCronListParams = ajv.compile(CronListParamsSchema);
2081
+ const validateCronStatusParams = ajv.compile(CronStatusParamsSchema);
2082
+ const validateCronAddParams = ajv.compile(CronAddParamsSchema);
2083
+ const validateCronUpdateParams = ajv.compile(CronUpdateParamsSchema);
2084
+ const validateCronRemoveParams = ajv.compile(CronRemoveParamsSchema);
2085
+ const validateCronRunParams = ajv.compile(CronRunParamsSchema);
2086
+ const validateCronRunsParams = ajv.compile(CronRunsParamsSchema);
2087
+ const validateDevicePairListParams = ajv.compile(DevicePairListParamsSchema);
2088
+ const validateDevicePairApproveParams = ajv.compile(DevicePairApproveParamsSchema);
2089
+ const validateDevicePairRejectParams = ajv.compile(DevicePairRejectParamsSchema);
2090
+ const validateDevicePairRemoveParams = ajv.compile(DevicePairRemoveParamsSchema);
2091
+ const validateDeviceTokenRotateParams = ajv.compile(DeviceTokenRotateParamsSchema);
2092
+ const validateDeviceTokenRevokeParams = ajv.compile(DeviceTokenRevokeParamsSchema);
2093
+ const validateLogsTailParams = ajv.compile(LogsTailParamsSchema);
2094
+ const validateChatHistoryParams = ajv.compile(ChatHistoryParamsSchema);
2095
+ const validateChatSendParams = ajv.compile(ChatSendParamsSchema);
2096
+ const validateChatAbortParams = ajv.compile(ChatAbortParamsSchema);
2097
+ const validateChatInjectParams = ajv.compile(ChatInjectParamsSchema);
2098
+ const validateChatEvent = ajv.compile(ChatEventSchema);
2099
+ const validateUpdateRunParams = ajv.compile(UpdateRunParamsSchema);
2100
+ const validateWebLoginStartParams = ajv.compile(WebLoginStartParamsSchema);
2101
+ const validateWebLoginWaitParams = ajv.compile(WebLoginWaitParamsSchema);
2102
+ function formatValidationErrors(errors) {
2103
+ if (!errors?.length) return "unknown validation error";
2104
+ const parts = [];
2105
+ for (const err of errors) {
2106
+ const keyword = typeof err?.keyword === "string" ? err.keyword : "";
2107
+ const instancePath = typeof err?.instancePath === "string" ? err.instancePath : "";
2108
+ if (keyword === "additionalProperties") {
2109
+ const additionalProperty = (err?.params)?.additionalProperty;
2110
+ if (typeof additionalProperty === "string" && additionalProperty.trim()) {
2111
+ const where = instancePath ? `at ${instancePath}` : "at root";
2112
+ parts.push(`${where}: unexpected property '${additionalProperty}'`);
2113
+ continue;
2114
+ }
2115
+ }
2116
+ const message = typeof err?.message === "string" && err.message.trim() ? err.message : "validation error";
2117
+ const where = instancePath ? `at ${instancePath}: ` : "";
2118
+ parts.push(`${where}${message}`);
2119
+ }
2120
+ const unique = Array.from(new Set(parts.filter((part) => part.trim())));
2121
+ if (!unique.length) return ajv.errorsText(errors, { separator: "; " }) || "unknown validation error";
2122
+ return unique.join("; ");
2123
+ }
2124
+
2125
+ //#endregion
2126
+ //#region src/gateway/client.ts
2127
+ var GatewayClient = class {
2128
+ constructor(opts) {
2129
+ this.ws = null;
2130
+ this.pending = /* @__PURE__ */ new Map();
2131
+ this.backoffMs = 1e3;
2132
+ this.closed = false;
2133
+ this.lastSeq = null;
2134
+ this.connectNonce = null;
2135
+ this.connectSent = false;
2136
+ this.connectTimer = null;
2137
+ this.lastTick = null;
2138
+ this.tickIntervalMs = 3e4;
2139
+ this.tickTimer = null;
2140
+ this.opts = {
2141
+ ...opts,
2142
+ deviceIdentity: opts.deviceIdentity ?? loadOrCreateDeviceIdentity()
2143
+ };
2144
+ }
2145
+ start() {
2146
+ if (this.closed) return;
2147
+ const url = this.opts.url ?? "ws://127.0.0.1:18789";
2148
+ if (this.opts.tlsFingerprint && !url.startsWith("wss://")) {
2149
+ this.opts.onConnectError?.(/* @__PURE__ */ new Error("gateway tls fingerprint requires wss:// gateway url"));
2150
+ return;
2151
+ }
2152
+ if (!isSecureWebSocketUrl(url)) {
2153
+ let displayHost = url;
2154
+ try {
2155
+ displayHost = new URL(url).hostname || url;
2156
+ } catch {}
2157
+ const error = /* @__PURE__ */ new Error(`SECURITY ERROR: Cannot connect to "${displayHost}" over plaintext ws://. Both credentials and chat data would be exposed to network interception. Use wss:// for remote URLs. Safe defaults: keep gateway.bind=loopback and connect via SSH tunnel (ssh -N -L 18789:127.0.0.1:18789 user@gateway-host), or use Tailscale Serve/Funnel. Run \`remoteclaw doctor --fix\` for guidance.`);
2158
+ this.opts.onConnectError?.(error);
2159
+ return;
2160
+ }
2161
+ const wsOptions = { maxPayload: 25 * 1024 * 1024 };
2162
+ if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
2163
+ wsOptions.rejectUnauthorized = false;
2164
+ wsOptions.checkServerIdentity = ((_host, cert) => {
2165
+ const fingerprintValue = typeof cert === "object" && cert && "fingerprint256" in cert ? cert.fingerprint256 ?? "" : "";
2166
+ const fingerprint = normalizeFingerprint(typeof fingerprintValue === "string" ? fingerprintValue : "");
2167
+ const expected = normalizeFingerprint(this.opts.tlsFingerprint ?? "");
2168
+ if (!expected) return /* @__PURE__ */ new Error("gateway tls fingerprint missing");
2169
+ if (!fingerprint) return /* @__PURE__ */ new Error("gateway tls fingerprint unavailable");
2170
+ if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
2171
+ });
2172
+ }
2173
+ this.ws = new WebSocket$1(url, wsOptions);
2174
+ this.ws.on("open", () => {
2175
+ if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
2176
+ const tlsError = this.validateTlsFingerprint();
2177
+ if (tlsError) {
2178
+ this.opts.onConnectError?.(tlsError);
2179
+ this.ws?.close(1008, tlsError.message);
2180
+ return;
2181
+ }
2182
+ }
2183
+ this.queueConnect();
2184
+ });
2185
+ this.ws.on("message", (data) => this.handleMessage(rawDataToString(data)));
2186
+ this.ws.on("close", (code, reason) => {
2187
+ const reasonText = rawDataToString(reason);
2188
+ this.ws = null;
2189
+ if (code === 1008 && reasonText.toLowerCase().includes("device token mismatch") && !this.opts.token && !this.opts.password && this.opts.deviceIdentity) {
2190
+ const deviceId = this.opts.deviceIdentity.deviceId;
2191
+ const role = this.opts.role ?? "operator";
2192
+ try {
2193
+ clearDeviceAuthToken({
2194
+ deviceId,
2195
+ role
2196
+ });
2197
+ clearDevicePairing(deviceId).catch((err) => {
2198
+ logDebug(`failed clearing stale device pairing for device ${deviceId}: ${String(err)}`);
2199
+ });
2200
+ logDebug(`cleared stale device-auth token for device ${deviceId}`);
2201
+ } catch (err) {
2202
+ logDebug(`failed clearing stale device-auth token for device ${deviceId}: ${String(err)}`);
2203
+ }
2204
+ }
2205
+ this.flushPendingErrors(/* @__PURE__ */ new Error(`gateway closed (${code}): ${reasonText}`));
2206
+ this.scheduleReconnect();
2207
+ this.opts.onClose?.(code, reasonText);
2208
+ });
2209
+ this.ws.on("error", (err) => {
2210
+ logDebug(`gateway client error: ${String(err)}`);
2211
+ if (!this.connectSent) this.opts.onConnectError?.(err instanceof Error ? err : new Error(String(err)));
2212
+ });
2213
+ }
2214
+ stop() {
2215
+ this.closed = true;
2216
+ if (this.tickTimer) {
2217
+ clearInterval(this.tickTimer);
2218
+ this.tickTimer = null;
2219
+ }
2220
+ this.ws?.close();
2221
+ this.ws = null;
2222
+ this.flushPendingErrors(/* @__PURE__ */ new Error("gateway client stopped"));
2223
+ }
2224
+ sendConnect() {
2225
+ if (this.connectSent) return;
2226
+ const nonce = this.connectNonce?.trim() ?? "";
2227
+ if (!nonce) {
2228
+ this.opts.onConnectError?.(/* @__PURE__ */ new Error("gateway connect challenge missing nonce"));
2229
+ this.ws?.close(1008, "connect challenge missing nonce");
2230
+ return;
2231
+ }
2232
+ this.connectSent = true;
2233
+ if (this.connectTimer) {
2234
+ clearTimeout(this.connectTimer);
2235
+ this.connectTimer = null;
2236
+ }
2237
+ const role = this.opts.role ?? "operator";
2238
+ const explicitGatewayToken = this.opts.token?.trim() || void 0;
2239
+ const explicitDeviceToken = this.opts.deviceToken?.trim() || void 0;
2240
+ const storedToken = this.opts.deviceIdentity ? loadDeviceAuthToken({
2241
+ deviceId: this.opts.deviceIdentity.deviceId,
2242
+ role
2243
+ })?.token : null;
2244
+ const resolvedDeviceToken = explicitDeviceToken ?? (!explicitGatewayToken ? storedToken ?? void 0 : void 0);
2245
+ const authToken = explicitGatewayToken ?? resolvedDeviceToken;
2246
+ const authPassword = this.opts.password?.trim() || void 0;
2247
+ const auth = authToken || authPassword || resolvedDeviceToken ? {
2248
+ token: authToken,
2249
+ deviceToken: resolvedDeviceToken,
2250
+ password: authPassword
2251
+ } : void 0;
2252
+ const signedAtMs = Date.now();
2253
+ const scopes = this.opts.scopes ?? ["operator.admin"];
2254
+ const device = (() => {
2255
+ if (!this.opts.deviceIdentity) return;
2256
+ const payload = buildDeviceAuthPayload({
2257
+ deviceId: this.opts.deviceIdentity.deviceId,
2258
+ clientId: this.opts.clientName ?? GATEWAY_CLIENT_NAMES.GATEWAY_CLIENT,
2259
+ clientMode: this.opts.mode ?? GATEWAY_CLIENT_MODES.BACKEND,
2260
+ role,
2261
+ scopes,
2262
+ signedAtMs,
2263
+ token: authToken ?? null,
2264
+ nonce
2265
+ });
2266
+ const signature = signDevicePayload(this.opts.deviceIdentity.privateKeyPem, payload);
2267
+ return {
2268
+ id: this.opts.deviceIdentity.deviceId,
2269
+ publicKey: publicKeyRawBase64UrlFromPem(this.opts.deviceIdentity.publicKeyPem),
2270
+ signature,
2271
+ signedAt: signedAtMs,
2272
+ nonce
2273
+ };
2274
+ })();
2275
+ const params = {
2276
+ minProtocol: this.opts.minProtocol ?? PROTOCOL_VERSION,
2277
+ maxProtocol: this.opts.maxProtocol ?? PROTOCOL_VERSION,
2278
+ client: {
2279
+ id: this.opts.clientName ?? GATEWAY_CLIENT_NAMES.GATEWAY_CLIENT,
2280
+ displayName: this.opts.clientDisplayName,
2281
+ version: this.opts.clientVersion ?? "dev",
2282
+ platform: this.opts.platform ?? process.platform,
2283
+ mode: this.opts.mode ?? GATEWAY_CLIENT_MODES.BACKEND,
2284
+ instanceId: this.opts.instanceId
2285
+ },
2286
+ caps: Array.isArray(this.opts.caps) ? this.opts.caps : [],
2287
+ commands: Array.isArray(this.opts.commands) ? this.opts.commands : void 0,
2288
+ permissions: this.opts.permissions && typeof this.opts.permissions === "object" ? this.opts.permissions : void 0,
2289
+ pathEnv: this.opts.pathEnv,
2290
+ auth,
2291
+ role,
2292
+ scopes,
2293
+ device
2294
+ };
2295
+ this.request("connect", params).then((helloOk) => {
2296
+ const authInfo = helloOk?.auth;
2297
+ if (authInfo?.deviceToken && this.opts.deviceIdentity) storeDeviceAuthToken({
2298
+ deviceId: this.opts.deviceIdentity.deviceId,
2299
+ role: authInfo.role ?? role,
2300
+ token: authInfo.deviceToken,
2301
+ scopes: authInfo.scopes ?? []
2302
+ });
2303
+ this.backoffMs = 1e3;
2304
+ this.tickIntervalMs = typeof helloOk.policy?.tickIntervalMs === "number" ? helloOk.policy.tickIntervalMs : 3e4;
2305
+ this.lastTick = Date.now();
2306
+ this.startTickWatch();
2307
+ this.opts.onHelloOk?.(helloOk);
2308
+ }).catch((err) => {
2309
+ this.opts.onConnectError?.(err instanceof Error ? err : new Error(String(err)));
2310
+ const msg = `gateway connect failed: ${String(err)}`;
2311
+ if (this.opts.mode === GATEWAY_CLIENT_MODES.PROBE) logDebug(msg);
2312
+ else logError(msg);
2313
+ this.ws?.close(1008, "connect failed");
2314
+ });
2315
+ }
2316
+ handleMessage(raw) {
2317
+ try {
2318
+ const parsed = JSON.parse(raw);
2319
+ if (validateEventFrame(parsed)) {
2320
+ const evt = parsed;
2321
+ if (evt.event === "connect.challenge") {
2322
+ const payload = evt.payload;
2323
+ const nonce = payload && typeof payload.nonce === "string" ? payload.nonce : null;
2324
+ if (!nonce || nonce.trim().length === 0) {
2325
+ this.opts.onConnectError?.(/* @__PURE__ */ new Error("gateway connect challenge missing nonce"));
2326
+ this.ws?.close(1008, "connect challenge missing nonce");
2327
+ return;
2328
+ }
2329
+ this.connectNonce = nonce.trim();
2330
+ this.sendConnect();
2331
+ return;
2332
+ }
2333
+ const seq = typeof evt.seq === "number" ? evt.seq : null;
2334
+ if (seq !== null) {
2335
+ if (this.lastSeq !== null && seq > this.lastSeq + 1) this.opts.onGap?.({
2336
+ expected: this.lastSeq + 1,
2337
+ received: seq
2338
+ });
2339
+ this.lastSeq = seq;
2340
+ }
2341
+ if (evt.event === "tick") this.lastTick = Date.now();
2342
+ this.opts.onEvent?.(evt);
2343
+ return;
2344
+ }
2345
+ if (validateResponseFrame(parsed)) {
2346
+ const pending = this.pending.get(parsed.id);
2347
+ if (!pending) return;
2348
+ const status = parsed.payload?.status;
2349
+ if (pending.expectFinal && status === "accepted") return;
2350
+ this.pending.delete(parsed.id);
2351
+ if (parsed.ok) pending.resolve(parsed.payload);
2352
+ else pending.reject(new Error(parsed.error?.message ?? "unknown error"));
2353
+ }
2354
+ } catch (err) {
2355
+ logDebug(`gateway client parse error: ${String(err)}`);
2356
+ }
2357
+ }
2358
+ queueConnect() {
2359
+ this.connectNonce = null;
2360
+ this.connectSent = false;
2361
+ const rawConnectDelayMs = this.opts.connectDelayMs;
2362
+ const connectChallengeTimeoutMs = typeof rawConnectDelayMs === "number" && Number.isFinite(rawConnectDelayMs) ? Math.max(250, Math.min(1e4, rawConnectDelayMs)) : 2e3;
2363
+ if (this.connectTimer) clearTimeout(this.connectTimer);
2364
+ this.connectTimer = setTimeout(() => {
2365
+ if (this.connectSent || this.ws?.readyState !== WebSocket$1.OPEN) return;
2366
+ this.opts.onConnectError?.(/* @__PURE__ */ new Error("gateway connect challenge timeout"));
2367
+ this.ws?.close(1008, "connect challenge timeout");
2368
+ }, connectChallengeTimeoutMs);
2369
+ }
2370
+ scheduleReconnect() {
2371
+ if (this.closed) return;
2372
+ if (this.tickTimer) {
2373
+ clearInterval(this.tickTimer);
2374
+ this.tickTimer = null;
2375
+ }
2376
+ const delay = this.backoffMs;
2377
+ this.backoffMs = Math.min(this.backoffMs * 2, 3e4);
2378
+ setTimeout(() => this.start(), delay).unref();
2379
+ }
2380
+ flushPendingErrors(err) {
2381
+ for (const [, p] of this.pending) p.reject(err);
2382
+ this.pending.clear();
2383
+ }
2384
+ startTickWatch() {
2385
+ if (this.tickTimer) clearInterval(this.tickTimer);
2386
+ const rawMinInterval = this.opts.tickWatchMinIntervalMs;
2387
+ const minInterval = typeof rawMinInterval === "number" && Number.isFinite(rawMinInterval) ? Math.max(1, Math.min(3e4, rawMinInterval)) : 1e3;
2388
+ const interval = Math.max(this.tickIntervalMs, minInterval);
2389
+ this.tickTimer = setInterval(() => {
2390
+ if (this.closed) return;
2391
+ if (!this.lastTick) return;
2392
+ if (Date.now() - this.lastTick > this.tickIntervalMs * 2) this.ws?.close(4e3, "tick timeout");
2393
+ }, interval);
2394
+ }
2395
+ validateTlsFingerprint() {
2396
+ if (!this.opts.tlsFingerprint || !this.ws) return null;
2397
+ const expected = normalizeFingerprint(this.opts.tlsFingerprint);
2398
+ if (!expected) return /* @__PURE__ */ new Error("gateway tls fingerprint missing");
2399
+ const socket = this.ws._socket;
2400
+ if (!socket || typeof socket.getPeerCertificate !== "function") return /* @__PURE__ */ new Error("gateway tls fingerprint unavailable");
2401
+ const fingerprint = normalizeFingerprint(socket.getPeerCertificate()?.fingerprint256 ?? "");
2402
+ if (!fingerprint) return /* @__PURE__ */ new Error("gateway tls fingerprint unavailable");
2403
+ if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
2404
+ return null;
2405
+ }
2406
+ async request(method, params, opts) {
2407
+ if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
2408
+ const id = randomUUID();
2409
+ const frame = {
2410
+ type: "req",
2411
+ id,
2412
+ method,
2413
+ params
2414
+ };
2415
+ if (!validateRequestFrame(frame)) throw new Error(`invalid request frame: ${JSON.stringify(validateRequestFrame.errors, null, 2)}`);
2416
+ const expectFinal = opts?.expectFinal === true;
2417
+ const p = new Promise((resolve, reject) => {
2418
+ this.pending.set(id, {
2419
+ resolve: (value) => resolve(value),
2420
+ reject,
2421
+ expectFinal
2422
+ });
2423
+ });
2424
+ this.ws.send(JSON.stringify(frame));
2425
+ return p;
2426
+ }
2427
+ };
2428
+
2429
+ //#endregion
2430
+ //#region src/gateway/method-scopes.ts
2431
+ const ADMIN_SCOPE = "operator.admin";
2432
+ const READ_SCOPE = "operator.read";
2433
+ const WRITE_SCOPE = "operator.write";
2434
+ const APPROVALS_SCOPE = "operator.approvals";
2435
+ const PAIRING_SCOPE = "operator.pairing";
2436
+ const CLI_DEFAULT_OPERATOR_SCOPES = [
2437
+ ADMIN_SCOPE,
2438
+ READ_SCOPE,
2439
+ WRITE_SCOPE,
2440
+ APPROVALS_SCOPE,
2441
+ PAIRING_SCOPE
2442
+ ];
2443
+ const NODE_ROLE_METHODS = new Set(["node.invoke.result", "node.event"]);
2444
+ const METHOD_SCOPE_GROUPS = {
2445
+ [APPROVALS_SCOPE]: [
2446
+ "exec.approval.request",
2447
+ "exec.approval.waitDecision",
2448
+ "exec.approval.resolve"
2449
+ ],
2450
+ [PAIRING_SCOPE]: [
2451
+ "node.pair.request",
2452
+ "node.pair.list",
2453
+ "node.pair.approve",
2454
+ "node.pair.reject",
2455
+ "node.pair.verify",
2456
+ "device.pair.list",
2457
+ "device.pair.approve",
2458
+ "device.pair.reject",
2459
+ "device.pair.remove",
2460
+ "device.token.rotate",
2461
+ "device.token.revoke",
2462
+ "node.rename"
2463
+ ],
2464
+ [READ_SCOPE]: [
2465
+ "health",
2466
+ "logs.tail",
2467
+ "channels.status",
2468
+ "status",
2469
+ "usage.status",
2470
+ "usage.cost",
2471
+ "tts.status",
2472
+ "tts.providers",
2473
+ "models.list",
2474
+ "tools.catalog",
2475
+ "plugin:tools:list",
2476
+ "agents.list",
2477
+ "agent.identity.get",
2478
+ "voicewake.get",
2479
+ "sessions.list",
2480
+ "sessions.preview",
2481
+ "sessions.resolve",
2482
+ "sessions.usage",
2483
+ "sessions.usage.timeseries",
2484
+ "sessions.usage.logs",
2485
+ "cron.list",
2486
+ "cron.status",
2487
+ "cron.runs",
2488
+ "system-presence",
2489
+ "last-heartbeat",
2490
+ "node.list",
2491
+ "node.describe",
2492
+ "chat.history",
2493
+ "config.get",
2494
+ "talk.config",
2495
+ "agents.files.list",
2496
+ "agents.files.get"
2497
+ ],
2498
+ [WRITE_SCOPE]: [
2499
+ "send",
2500
+ "poll",
2501
+ "agent",
2502
+ "agent.wait",
2503
+ "wake",
2504
+ "talk.mode",
2505
+ "tts.enable",
2506
+ "tts.disable",
2507
+ "tts.convert",
2508
+ "tts.setProvider",
2509
+ "voicewake.set",
2510
+ "node.invoke",
2511
+ "sessions.spawn",
2512
+ "sessions.subagents",
2513
+ "chat.send",
2514
+ "chat.abort",
2515
+ "browser.request",
2516
+ "push.test",
2517
+ "hooks.tool.before",
2518
+ "hooks.tool.after",
2519
+ "plugin:tools:invoke",
2520
+ "message:send",
2521
+ "message:reply",
2522
+ "message:thread-reply",
2523
+ "message:broadcast",
2524
+ "message:sendAttachment",
2525
+ "message:sendWithEffect"
2526
+ ],
2527
+ [ADMIN_SCOPE]: [
2528
+ "channels.logout",
2529
+ "agents.create",
2530
+ "agents.update",
2531
+ "agents.delete",
2532
+ "cron.add",
2533
+ "cron.update",
2534
+ "cron.remove",
2535
+ "cron.run",
2536
+ "sessions.patch",
2537
+ "sessions.reset",
2538
+ "sessions.delete",
2539
+ "sessions.compact",
2540
+ "connect",
2541
+ "chat.inject",
2542
+ "web.login.start",
2543
+ "web.login.wait",
2544
+ "set-heartbeats",
2545
+ "system-event",
2546
+ "agents.files.set",
2547
+ "message:delete",
2548
+ "message:react",
2549
+ "message:pin",
2550
+ "message:readMessages"
2551
+ ]
2552
+ };
2553
+ const ADMIN_METHOD_PREFIXES = [
2554
+ "exec.approvals.",
2555
+ "config.",
2556
+ "wizard.",
2557
+ "update."
2558
+ ];
2559
+ const METHOD_SCOPE_BY_NAME = new Map(Object.entries(METHOD_SCOPE_GROUPS).flatMap(([scope, methods]) => methods.map((method) => [method, scope])));
2560
+ function resolveScopedMethod(method) {
2561
+ const explicitScope = METHOD_SCOPE_BY_NAME.get(method);
2562
+ if (explicitScope) return explicitScope;
2563
+ if (ADMIN_METHOD_PREFIXES.some((prefix) => method.startsWith(prefix))) return ADMIN_SCOPE;
2564
+ }
2565
+ function isNodeRoleMethod(method) {
2566
+ return NODE_ROLE_METHODS.has(method);
2567
+ }
2568
+ function resolveRequiredOperatorScopeForMethod(method) {
2569
+ return resolveScopedMethod(method);
2570
+ }
2571
+ function resolveLeastPrivilegeOperatorScopesForMethod(method) {
2572
+ const requiredScope = resolveRequiredOperatorScopeForMethod(method);
2573
+ if (requiredScope) return [requiredScope];
2574
+ return [];
2575
+ }
2576
+ function authorizeOperatorScopesForMethod(method, scopes) {
2577
+ if (scopes.includes(ADMIN_SCOPE)) return { allowed: true };
2578
+ const requiredScope = resolveRequiredOperatorScopeForMethod(method) ?? ADMIN_SCOPE;
2579
+ if (requiredScope === READ_SCOPE) {
2580
+ if (scopes.includes(READ_SCOPE) || scopes.includes(WRITE_SCOPE)) return { allowed: true };
2581
+ return {
2582
+ allowed: false,
2583
+ missingScope: READ_SCOPE
2584
+ };
2585
+ }
2586
+ if (scopes.includes(requiredScope)) return { allowed: true };
2587
+ return {
2588
+ allowed: false,
2589
+ missingScope: requiredScope
2590
+ };
2591
+ }
2592
+
2593
+ //#endregion
2594
+ //#region src/gateway/call.ts
2595
+ function resolveExplicitGatewayAuth(opts) {
2596
+ return {
2597
+ token: typeof opts?.token === "string" && opts.token.trim().length > 0 ? opts.token.trim() : void 0,
2598
+ password: typeof opts?.password === "string" && opts.password.trim().length > 0 ? opts.password.trim() : void 0
2599
+ };
2600
+ }
2601
+ function ensureExplicitGatewayAuth(params) {
2602
+ if (!params.urlOverride) return;
2603
+ if (params.auth.token || params.auth.password) return;
2604
+ const message = [
2605
+ "gateway url override requires explicit credentials",
2606
+ params.errorHint,
2607
+ params.configPath ? `Config: ${params.configPath}` : void 0
2608
+ ].filter(Boolean).join("\n");
2609
+ throw new Error(message);
2610
+ }
2611
+ function buildGatewayConnectionDetails(options = {}) {
2612
+ const config = options.config ?? loadConfig();
2613
+ const configPath = options.configPath ?? resolveConfigPath(process.env, resolveStateDir(process.env));
2614
+ const isRemoteMode = config.gateway?.mode === "remote";
2615
+ const remote = isRemoteMode ? config.gateway?.remote : void 0;
2616
+ const tlsEnabled = config.gateway?.tls?.enabled === true;
2617
+ const localPort = resolveGatewayPort(config);
2618
+ const bindMode = config.gateway?.bind ?? "loopback";
2619
+ const localUrl = `${tlsEnabled ? "wss" : "ws"}://127.0.0.1:${localPort}`;
2620
+ const urlOverride = typeof options.url === "string" && options.url.trim().length > 0 ? options.url.trim() : void 0;
2621
+ const remoteUrl = typeof remote?.url === "string" && remote.url.trim().length > 0 ? remote.url.trim() : void 0;
2622
+ const remoteMisconfigured = isRemoteMode && !urlOverride && !remoteUrl;
2623
+ const url = urlOverride || remoteUrl || localUrl;
2624
+ const urlSource = urlOverride ? "cli --url" : remoteUrl ? "config gateway.remote.url" : remoteMisconfigured ? "missing gateway.remote.url (fallback local)" : "local loopback";
2625
+ const remoteFallbackNote = remoteMisconfigured ? "Warn: gateway.mode=remote but gateway.remote.url is missing; set gateway.remote.url or switch gateway.mode=local." : void 0;
2626
+ const bindDetail = !urlOverride && !remoteUrl ? `Bind: ${bindMode}` : void 0;
2627
+ if (!isSecureWebSocketUrl(url)) throw new Error([
2628
+ `SECURITY ERROR: Gateway URL "${url}" uses plaintext ws:// to a non-loopback address.`,
2629
+ "Both credentials and chat data would be exposed to network interception.",
2630
+ `Source: ${urlSource}`,
2631
+ `Config: ${configPath}`,
2632
+ "Fix: Use wss:// for remote gateway URLs.",
2633
+ "Safe remote access defaults:",
2634
+ "- keep gateway.bind=loopback and use an SSH tunnel (ssh -N -L 18789:127.0.0.1:18789 user@gateway-host)",
2635
+ "- or use Tailscale Serve/Funnel for HTTPS remote access",
2636
+ "Doctor: remoteclaw doctor --fix",
2637
+ "Docs: https://docs.remoteclaw.org/gateway/remote"
2638
+ ].join("\n"));
2639
+ return {
2640
+ url,
2641
+ urlSource,
2642
+ bindDetail,
2643
+ remoteFallbackNote,
2644
+ message: [
2645
+ `Gateway target: ${url}`,
2646
+ `Source: ${urlSource}`,
2647
+ `Config: ${configPath}`,
2648
+ bindDetail,
2649
+ remoteFallbackNote
2650
+ ].filter(Boolean).join("\n")
2651
+ };
2652
+ }
2653
+ function trimToUndefined(value) {
2654
+ if (typeof value !== "string") return;
2655
+ const trimmed = value.trim();
2656
+ return trimmed.length > 0 ? trimmed : void 0;
2657
+ }
2658
+ function resolveGatewayCallTimeout(timeoutValue) {
2659
+ const timeoutMs = typeof timeoutValue === "number" && Number.isFinite(timeoutValue) ? timeoutValue : 1e4;
2660
+ return {
2661
+ timeoutMs,
2662
+ safeTimerTimeoutMs: Math.max(1, Math.min(Math.floor(timeoutMs), 2147483647))
2663
+ };
2664
+ }
2665
+ function resolveGatewayCallContext(opts) {
2666
+ const config = opts.config ?? loadConfig();
2667
+ const configPath = opts.configPath ?? resolveConfigPath(process.env, resolveStateDir(process.env));
2668
+ const isRemoteMode = config.gateway?.mode === "remote";
2669
+ const remote = isRemoteMode ? config.gateway?.remote : void 0;
2670
+ return {
2671
+ config,
2672
+ configPath,
2673
+ isRemoteMode,
2674
+ remote,
2675
+ urlOverride: trimToUndefined(opts.url),
2676
+ remoteUrl: trimToUndefined(remote?.url),
2677
+ explicitAuth: resolveExplicitGatewayAuth({
2678
+ token: opts.token,
2679
+ password: opts.password
2680
+ })
2681
+ };
2682
+ }
2683
+ function ensureRemoteModeUrlConfigured(context) {
2684
+ if (!context.isRemoteMode || context.urlOverride || context.remoteUrl) return;
2685
+ throw new Error([
2686
+ "gateway remote mode misconfigured: gateway.remote.url missing",
2687
+ `Config: ${context.configPath}`,
2688
+ "Fix: set gateway.remote.url, or set gateway.mode=local."
2689
+ ].join("\n"));
2690
+ }
2691
+ function resolveGatewayCredentials(context) {
2692
+ return resolveGatewayCredentialsFromConfig({
2693
+ cfg: context.config,
2694
+ env: process.env,
2695
+ explicitAuth: context.explicitAuth,
2696
+ urlOverride: context.urlOverride,
2697
+ remotePasswordPrecedence: "env-first"
2698
+ });
2699
+ }
2700
+ async function resolveGatewayTlsFingerprint(params) {
2701
+ const { opts, context, url } = params;
2702
+ const tlsRuntime = context.config.gateway?.tls?.enabled === true && !context.urlOverride && !context.remoteUrl && url.startsWith("wss://") ? await loadGatewayTlsRuntime(context.config.gateway?.tls) : void 0;
2703
+ const overrideTlsFingerprint = trimToUndefined(opts.tlsFingerprint);
2704
+ const remoteTlsFingerprint = context.isRemoteMode && !context.urlOverride && context.remoteUrl ? trimToUndefined(context.remote?.tlsFingerprint) : void 0;
2705
+ return overrideTlsFingerprint || remoteTlsFingerprint || (tlsRuntime?.enabled ? tlsRuntime.fingerprintSha256 : void 0);
2706
+ }
2707
+ function formatGatewayCloseError(code, reason, connectionDetails) {
2708
+ const reasonText = reason?.trim() || "no close reason";
2709
+ const hint = code === 1006 ? "abnormal closure (no close frame)" : code === 1e3 ? "normal closure" : "";
2710
+ return `gateway closed (${code}${hint ? ` ${hint}` : ""}): ${reasonText}\n${connectionDetails.message}`;
2711
+ }
2712
+ function formatGatewayTimeoutError(timeoutMs, connectionDetails) {
2713
+ return `gateway timeout after ${timeoutMs}ms\n${connectionDetails.message}`;
2714
+ }
2715
+ async function executeGatewayRequestWithScopes(params) {
2716
+ const { opts, scopes, url, token, password, tlsFingerprint, timeoutMs, safeTimerTimeoutMs } = params;
2717
+ return await new Promise((resolve, reject) => {
2718
+ let settled = false;
2719
+ let ignoreClose = false;
2720
+ const stop = (err, value) => {
2721
+ if (settled) return;
2722
+ settled = true;
2723
+ clearTimeout(timer);
2724
+ if (err) reject(err);
2725
+ else resolve(value);
2726
+ };
2727
+ const client = new GatewayClient({
2728
+ url,
2729
+ token,
2730
+ password,
2731
+ tlsFingerprint,
2732
+ instanceId: opts.instanceId ?? randomUUID(),
2733
+ clientName: opts.clientName ?? GATEWAY_CLIENT_NAMES.CLI,
2734
+ clientDisplayName: opts.clientDisplayName,
2735
+ clientVersion: opts.clientVersion ?? "dev",
2736
+ platform: opts.platform,
2737
+ mode: opts.mode ?? GATEWAY_CLIENT_MODES.CLI,
2738
+ role: "operator",
2739
+ scopes,
2740
+ deviceIdentity: loadOrCreateDeviceIdentity(),
2741
+ minProtocol: opts.minProtocol ?? PROTOCOL_VERSION,
2742
+ maxProtocol: opts.maxProtocol ?? PROTOCOL_VERSION,
2743
+ onHelloOk: async () => {
2744
+ try {
2745
+ const result = await client.request(opts.method, opts.params, { expectFinal: opts.expectFinal });
2746
+ ignoreClose = true;
2747
+ stop(void 0, result);
2748
+ client.stop();
2749
+ } catch (err) {
2750
+ ignoreClose = true;
2751
+ client.stop();
2752
+ stop(err);
2753
+ }
2754
+ },
2755
+ onClose: (code, reason) => {
2756
+ if (settled || ignoreClose) return;
2757
+ ignoreClose = true;
2758
+ client.stop();
2759
+ stop(new Error(formatGatewayCloseError(code, reason, params.connectionDetails)));
2760
+ }
2761
+ });
2762
+ const timer = setTimeout(() => {
2763
+ ignoreClose = true;
2764
+ client.stop();
2765
+ stop(new Error(formatGatewayTimeoutError(timeoutMs, params.connectionDetails)));
2766
+ }, safeTimerTimeoutMs);
2767
+ client.start();
2768
+ });
2769
+ }
2770
+ async function callGatewayWithScopes(opts, scopes) {
2771
+ const { timeoutMs, safeTimerTimeoutMs } = resolveGatewayCallTimeout(opts.timeoutMs);
2772
+ const context = resolveGatewayCallContext(opts);
2773
+ ensureExplicitGatewayAuth({
2774
+ urlOverride: context.urlOverride,
2775
+ auth: context.explicitAuth,
2776
+ errorHint: "Fix: pass --token or --password (or gatewayToken in tools).",
2777
+ configPath: context.configPath
2778
+ });
2779
+ ensureRemoteModeUrlConfigured(context);
2780
+ const connectionDetails = buildGatewayConnectionDetails({
2781
+ config: context.config,
2782
+ url: context.urlOverride,
2783
+ ...opts.configPath ? { configPath: opts.configPath } : {}
2784
+ });
2785
+ const url = connectionDetails.url;
2786
+ const tlsFingerprint = await resolveGatewayTlsFingerprint({
2787
+ opts,
2788
+ context,
2789
+ url
2790
+ });
2791
+ const { token, password } = resolveGatewayCredentials(context);
2792
+ return await executeGatewayRequestWithScopes({
2793
+ opts,
2794
+ scopes,
2795
+ url,
2796
+ token,
2797
+ password,
2798
+ tlsFingerprint,
2799
+ timeoutMs,
2800
+ safeTimerTimeoutMs,
2801
+ connectionDetails
2802
+ });
2803
+ }
2804
+ async function callGatewayCli(opts) {
2805
+ return await callGatewayWithScopes(opts, Array.isArray(opts.scopes) ? opts.scopes : CLI_DEFAULT_OPERATOR_SCOPES);
2806
+ }
2807
+ async function callGatewayLeastPrivilege(opts) {
2808
+ return await callGatewayWithScopes(opts, resolveLeastPrivilegeOperatorScopesForMethod(opts.method));
2809
+ }
2810
+ async function callGateway(opts) {
2811
+ if (Array.isArray(opts.scopes)) return await callGatewayWithScopes(opts, opts.scopes);
2812
+ const callerMode = opts.mode ?? GATEWAY_CLIENT_MODES.BACKEND;
2813
+ const callerName = opts.clientName ?? GATEWAY_CLIENT_NAMES.GATEWAY_CLIENT;
2814
+ if (callerMode === GATEWAY_CLIENT_MODES.CLI || callerName === GATEWAY_CLIENT_NAMES.CLI) return await callGatewayCli(opts);
2815
+ return await callGatewayLeastPrivilege({
2816
+ ...opts,
2817
+ mode: callerMode,
2818
+ clientName: callerName
2819
+ });
2820
+ }
2821
+ function randomIdempotencyKey() {
2822
+ return randomUUID();
2823
+ }
2824
+
2825
+ //#endregion
2826
+ export { validateNodeInvokeResultParams as $, upsertPendingPairingRequest as $t, validateConfigApplyParams as A, PROTOCOL_VERSION as At, validateCronRunsParams as B, rejectDevicePairing as Bt, validateAgentsUpdateParams as C, validateWakeParams as Ct, validateChatHistoryParams as D, validateWizardNextParams as Dt, validateChatAbortParams as E, validateWizardCancelParams as Et, validateConnectParams as F, buildDeviceAuthPayload as Ft, validateDevicePairRejectParams as G, summarizeDeviceTokens as Gt, validateCronUpdateParams as H, requestDevicePairing as Ht, validateCronAddParams as I, approveDevicePairing as It, validateDeviceTokenRotateParams as J, generatePairingToken as Jt, validateDevicePairRemoveParams as K, updatePairedDeviceMetadata as Kt, validateCronListParams as L, ensureDeviceToken as Lt, validateConfigPatchParams as M, errorShape as Mt, validateConfigSchemaParams as N, SESSION_LABEL_MAX_LENGTH as Nt, validateChatInjectParams as O, validateWizardStartParams as Ot, validateConfigSetParams as P, parseSessionLabel as Pt, validateNodeInvokeParams as Q, resolvePairingPaths as Qt, validateCronRemoveParams as R, getPairedDevice as Rt, validateAgentsListParams as S, validateUpdateRunParams as St, validateChannelsStatusParams as T, validateWebLoginWaitParams as Tt, validateDevicePairApproveParams as U, revokeDeviceToken as Ut, validateCronStatusParams as V, removePairedDevice as Vt, validateDevicePairListParams as W, rotateDeviceToken as Wt, validateNodeDescribeParams as X, rejectPendingPairingRequest as Xt, validateLogsTailParams as Y, verifyPairingToken as Yt, validateNodeEventParams as Z, pruneExpiredPending as Zt, validateAgentsCreateParams as _, validateSessionsResolveParams as _t, randomIdempotencyKey as a, validateNodePairVerifyParams as at, validateAgentsFilesListParams as b, validateTalkModeParams as bt, READ_SCOPE as c, validatePushTestParams as ct, resolveLeastPrivilegeOperatorScopesForMethod as d, validateSessionsCompactParams as dt, roleScopesAllow as en, validateNodeListParams as et, GatewayClient as f, validateSessionsDeleteParams as ft, validateAgentWaitParams as g, validateSessionsResetParams as gt, validateAgentParams as h, validateSessionsPreviewParams as ht, ensureExplicitGatewayAuth as i, verifyDeviceSignature as in, validateNodePairRequestParams as it, validateConfigGetParams as j, ErrorCodes as jt, validateChatSendParams as k, validateWizardStatusParams as kt, authorizeOperatorScopesForMethod as l, validateRequestFrame as lt, validateAgentIdentityParams as m, validateSessionsPatchParams as mt, callGateway as n, deriveDeviceIdFromPublicKey as nn, validateNodePairListParams as nt, resolveExplicitGatewayAuth as o, validateNodeRenameParams as ot, formatValidationErrors as p, validateSessionsListParams as pt, validateDeviceTokenRevokeParams as q, verifyDeviceToken as qt, callGatewayLeastPrivilege as r, normalizeDevicePublicKeyBase64Url as rn, validateNodePairRejectParams as rt, ADMIN_SCOPE as s, validatePollParams as st, buildGatewayConnectionDetails as t, loadGatewayTlsRuntime as tn, validateNodePairApproveParams as tt, isNodeRoleMethod as u, validateSendParams as ut, validateAgentsDeleteParams as v, validateSessionsUsageParams as vt, validateChannelsLogoutParams as w, validateWebLoginStartParams as wt, validateAgentsFilesSetParams as x, validateToolsCatalogParams as xt, validateAgentsFilesGetParams as y, validateTalkConfigParams as yt, validateCronRunParams as z, listDevicePairing as zt };