@spacebar_ai/moldclaw-core 2026.3.14 → 2026.3.16

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 (1074) hide show
  1. package/README.md +108 -3
  2. package/dist/account-id-plS5L20e.d.ts +1 -0
  3. package/dist/accounts-BAYVGC2k.js +109 -0
  4. package/dist/accounts-DrjRgReV.d.ts +103 -0
  5. package/dist/acp-cli-at_UYEOS.js +2088 -0
  6. package/dist/acpx-Chy1GQ_k.d.ts +5 -0
  7. package/dist/actions.runtime-C0F7dMfO.js +114 -0
  8. package/dist/actions.runtime-caI2LG9o.js +128 -0
  9. package/dist/agent-media-payload-CkpAqaOh.d.ts +16 -0
  10. package/dist/agents-B98yPGc5.js +853 -0
  11. package/dist/agents-BrLr08L3.js +217 -0
  12. package/dist/allow-from-BIwT4dl7.d.ts +42 -0
  13. package/dist/allow-list-CHt7yvAf.js +81 -0
  14. package/dist/allowlist-CxQo2wQc.js +142 -0
  15. package/dist/allowlist-resolution-B7ib7gye.d.ts +17 -0
  16. package/dist/api-Co7TNHbL.js +6953 -0
  17. package/dist/api-cEQ_ql_8.js +112 -0
  18. package/dist/audit-AnKnnlaZ.js +787 -0
  19. package/dist/audit-channel.collect.runtime-CAk1DFQ3.js +600 -0
  20. package/dist/audit-channel.runtime-5phdZp_m.js +116 -0
  21. package/dist/audit-extra.async-B8ZXFxic.js +813 -0
  22. package/dist/audit-hdKa3D-u.js +54 -0
  23. package/dist/audit-membership-runtime-CJV5XvGU.js +157 -0
  24. package/dist/audit.deep.runtime-DNMcRQrp.js +24 -0
  25. package/dist/audit.nondeep.runtime-DhNDL6yM.js +831 -0
  26. package/dist/audit.runtime-Bx7uWEh8.js +113 -0
  27. package/dist/auth-choice-C37W9MA7.js +268 -0
  28. package/dist/auth-choice-CNppOY_V.js +117 -0
  29. package/dist/auth-choice-XYFnp6fI.js +502 -0
  30. package/dist/auth-choice-options-D6oZY4Xo.js +123 -0
  31. package/dist/auth-choice-prompt-BhRqchJx.js +110 -0
  32. package/dist/auth-choice-prompt-C1xv0N08.js +36 -0
  33. package/dist/auth-choice.plugin-providers.runtime-DhLEtbmR.js +114 -0
  34. package/dist/auth-profiles-9zZdaXJK.js +127756 -0
  35. package/dist/auth-profiles.runtime-HONFDgiu.js +111 -0
  36. package/dist/bluebubbles-BY8JhO4y.js +64 -0
  37. package/dist/bluebubbles-CQjEnzK_.d.ts +6 -0
  38. package/dist/bluebubbles-RmcKgkBa.d.ts +45 -0
  39. package/dist/boolean-param-F1sMwnPu.d.ts +5 -0
  40. package/dist/bot-BGh-ATV7.d.ts +478 -0
  41. package/dist/brave-CljenznH.js +24 -0
  42. package/dist/browser-cli-CX8i0wf0.js +1492 -0
  43. package/dist/build-info.json +3 -3
  44. package/dist/bundled/boot-md/handler.d.ts +6 -0
  45. package/dist/bundled/boot-md/handler.js +26 -26
  46. package/dist/bundled/bootstrap-extra-files/handler.d.ts +6 -0
  47. package/dist/bundled/command-logger/handler.d.ts +9 -0
  48. package/dist/bundled/session-memory/handler.d.ts +9 -0
  49. package/dist/bundled/session-memory/handler.js +27 -27
  50. package/dist/call-Bc257L16.js +37 -0
  51. package/dist/call-DYFR7oGy.js +639 -0
  52. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  53. package/dist/channel-Bd-igGEW.js +803 -0
  54. package/dist/channel-BgRMb6bZ.js +575 -0
  55. package/dist/channel-BtcLrU6J.js +1598 -0
  56. package/dist/channel-Bwf6m_hD.js +538 -0
  57. package/dist/channel-C7-kgDBd.js +562 -0
  58. package/dist/channel-CEXOAxIc.js +949 -0
  59. package/dist/channel-CpZ3p9MJ.js +226 -0
  60. package/dist/channel-CqBlN6A2.js +619 -0
  61. package/dist/channel-DKhfHW4U.js +352 -0
  62. package/dist/channel-DS3t_KdJ2.js +316 -0
  63. package/dist/channel-DY24FA1v.js +4681 -0
  64. package/dist/channel-DYFGmImJ.js +542 -0
  65. package/dist/channel-DcyIqX5p.js +207 -0
  66. package/dist/channel-J-2XcAli.js +214 -0
  67. package/dist/channel-N616f4gZ.js +306 -0
  68. package/dist/channel-NY7aU2Gj.js +397 -0
  69. package/dist/channel-PNI8BOmm.js +1321 -0
  70. package/dist/channel-UcXepDJs.js +943 -0
  71. package/dist/channel-account-context-CL3hEq1j.js +103 -0
  72. package/dist/channel-config-schema-Q2nzcCCR.d.ts +1 -0
  73. package/dist/channel-jA_jodJo.js +920 -0
  74. package/dist/channel-options-CtgU5qkG.js +50 -0
  75. package/dist/channel-policy-7wXDp6d3.d.ts +1 -0
  76. package/dist/channel-rGI8uig4.js +497 -0
  77. package/dist/channel-summary-DGJZXo0r.js +106 -0
  78. package/dist/channel.runtime--WZvlNJM.js +413 -0
  79. package/dist/channel.runtime-B0ct42DL.js +122 -0
  80. package/dist/channel.runtime-BEZUZrYB.js +177 -0
  81. package/dist/channel.runtime-BMuWmsIC.js +166 -0
  82. package/dist/channel.runtime-BtvHP0po.js +4006 -0
  83. package/dist/channel.runtime-Cwf993pX.js +194 -0
  84. package/dist/channel.runtime-Cy4lEpTX.js +174 -0
  85. package/dist/channel.runtime-DAz6axda.js +865 -0
  86. package/dist/channel.runtime-DdQ2mOVh.js +236 -0
  87. package/dist/channel.runtime-Dy3HPgOU.js +399 -0
  88. package/dist/channel.runtime-iqfC25k7.js +213 -0
  89. package/dist/channel.setup-B4VYMZlQ.js +9 -0
  90. package/dist/channel.setup-BohGbCbI.js +57 -0
  91. package/dist/channel.setup-Bq2AQqqc.js +6 -0
  92. package/dist/channel.setup-BxiSfLp1.js +8 -0
  93. package/dist/channel.setup-DOUS6fjO.js +8 -0
  94. package/dist/channel.setup-DXhdYU3g.js +9 -0
  95. package/dist/channel.setup-N51CgfNy.js +11 -0
  96. package/dist/channels/plugins/actions/discord.d.ts +3 -0
  97. package/dist/channels/plugins/actions/discord.js +26 -26
  98. package/dist/channels/plugins/actions/signal.d.ts +2 -0
  99. package/dist/channels/plugins/actions/signal.js +26 -26
  100. package/dist/channels/plugins/actions/telegram.d.ts +3 -0
  101. package/dist/channels/plugins/actions/telegram.js +26 -26
  102. package/dist/channels/plugins/agent-tools/whatsapp-login.d.ts +4 -0
  103. package/dist/channels/plugins/agent-tools/whatsapp-login.js +26 -26
  104. package/dist/channels-CueeFf0q.js +404 -0
  105. package/dist/channels-PheAd73E.js +1113 -0
  106. package/dist/channels-cli-CXzVF84v.js +286 -0
  107. package/dist/channels-status-issues-BjWBQHhU.js +16 -0
  108. package/dist/chat-type-BlSN0vo4.d.ts +5 -0
  109. package/dist/clawbot-cli-BBehDXW1.js +113 -0
  110. package/dist/cli/daemon-cli.d.ts +58 -0
  111. package/dist/cli/daemon-cli.js +1 -1
  112. package/dist/cli-CIm7d5Id.js +149 -0
  113. package/dist/command-format-pq3tS8t2.d.ts +4 -0
  114. package/dist/command-registry-CDkp__KH.js +13 -0
  115. package/dist/command-registry-DSEkUBW1.js +212 -0
  116. package/dist/command-secret-gateway-CqP_o0n8.js +106 -0
  117. package/dist/compact.runtime-Qm_csEtG.js +111 -0
  118. package/dist/completion-cli-Ch1sgSLQ.js +445 -0
  119. package/dist/completion-cli-vF067Tso.js +16 -0
  120. package/dist/config-B2W1zTP1.js +44 -0
  121. package/dist/config-CMhKplgO.js +938 -0
  122. package/dist/config-DchtRsvs.js +30 -0
  123. package/dist/config-cli-C41d88_c.js +428 -0
  124. package/dist/config-guard-B_vjkXCQ.js +117 -0
  125. package/dist/config-schema-pPBCF4hz.js +31 -0
  126. package/dist/config-validation-6om9cBUx.js +262 -0
  127. package/dist/config-value-Dl3XEpA6.js +132 -0
  128. package/dist/configure-BxzvDSzu.js +1100 -0
  129. package/dist/configure-CLMLoWAn.js +238 -0
  130. package/dist/control-ui-shared-E8Nz6uKZ.js +29 -0
  131. package/dist/core-Cd3fMFKq.d.ts +87 -0
  132. package/dist/credentials-yYt6VWCq.js +268 -0
  133. package/dist/cron-cli-CA3lV3kh.js +634 -0
  134. package/dist/daemon-cli-BtQuIXEk.js +339 -0
  135. package/dist/daemon-install-BWKGzgMm.js +175 -0
  136. package/dist/deliver-CgMNmfTy.js +106 -0
  137. package/dist/deliver-runtime-Bn1KWoiQ.js +106 -0
  138. package/dist/devices-cli-D601npiL.js +340 -0
  139. package/dist/diagnostic-CkiYEGqt.js +310 -0
  140. package/dist/diffs-B5tZ8Coj.d.ts +1 -0
  141. package/dist/directory-cli-skEV8MT7.js +306 -0
  142. package/dist/directory-config-helpers-B-tiBKIv.d.ts +38 -0
  143. package/dist/directory-runtime-BEJ2fCIR.d.ts +1 -0
  144. package/dist/directory.static-CnyzoWbV.js +44 -0
  145. package/dist/discord-B_gbzPti.js +109 -0
  146. package/dist/discovery-CqI-e_Mv.js +48 -0
  147. package/dist/dm-policy-shared-nybkS1uP.d.ts +95 -0
  148. package/dist/dns-cli-Cjes3Ruw.js +216 -0
  149. package/dist/docs-cli-C3g3Gi_d.js +173 -0
  150. package/dist/doctor-completion-TvgV4SZH.js +90 -0
  151. package/dist/doctor-config-flow-0w9Ux7V8.js +107 -0
  152. package/dist/doctor-config-flow-DLzr8W7Y.js +2437 -0
  153. package/dist/enable-VYzv8b2z.js +24 -0
  154. package/dist/entry.d.ts +7 -0
  155. package/dist/entry.js +1 -1
  156. package/dist/env-overrides-DYVIkuvN.js +434 -0
  157. package/dist/env-overrides.runtime-6kijpIuu.js +17 -0
  158. package/dist/exec-approvals-cli-D_lkTG-l.js +419 -0
  159. package/dist/exec-sVmouhA9.d.ts +39 -0
  160. package/dist/extensions/acpx/index.d.ts +11 -0
  161. package/dist/extensions/acpx/index.js +1 -1
  162. package/dist/extensions/amazon-bedrock/index.d.ts +11 -0
  163. package/dist/extensions/anthropic/index.d.ts +11 -0
  164. package/dist/extensions/anthropic/index.js +26 -26
  165. package/dist/extensions/bluebubbles/index.d.ts +11 -0
  166. package/dist/extensions/bluebubbles/index.js +30 -30
  167. package/dist/extensions/bluebubbles/setup-entry.d.ts +59 -0
  168. package/dist/extensions/bluebubbles/setup-entry.js +30 -30
  169. package/dist/extensions/brave/index.d.ts +11 -0
  170. package/dist/extensions/brave/index.js +2 -2
  171. package/dist/extensions/byteplus/index.d.ts +11 -0
  172. package/dist/extensions/byteplus/index.js +26 -26
  173. package/dist/extensions/cloudflare-ai-gateway/index.d.ts +11 -0
  174. package/dist/extensions/cloudflare-ai-gateway/index.js +27 -27
  175. package/dist/extensions/copilot-proxy/index.d.ts +11 -0
  176. package/dist/extensions/device-pair/index.d.ts +12 -0
  177. package/dist/extensions/diagnostics-otel/index.d.ts +11 -0
  178. package/dist/extensions/diffs/index.d.ts +11 -0
  179. package/dist/extensions/discord/index.d.ts +11 -0
  180. package/dist/extensions/discord/index.js +31 -31
  181. package/dist/extensions/discord/setup-entry.d.ts +7 -0
  182. package/dist/extensions/discord/setup-entry.js +29 -29
  183. package/dist/extensions/elevenlabs/index.d.ts +11 -0
  184. package/dist/extensions/elevenlabs/index.js +26 -26
  185. package/dist/extensions/feishu/index.d.ts +229 -0
  186. package/dist/extensions/feishu/index.js +31 -31
  187. package/dist/extensions/feishu/setup-entry.d.ts +9 -0
  188. package/dist/extensions/feishu/setup-entry.js +28 -28
  189. package/dist/extensions/firecrawl/index.d.ts +11 -0
  190. package/dist/extensions/firecrawl/index.js +26 -26
  191. package/dist/extensions/github-copilot/index.d.ts +11 -0
  192. package/dist/extensions/github-copilot/index.js +27 -27
  193. package/dist/extensions/google/index.d.ts +11 -0
  194. package/dist/extensions/google/index.js +26 -26
  195. package/dist/extensions/googlechat/index.d.ts +11 -0
  196. package/dist/extensions/googlechat/index.js +30 -30
  197. package/dist/extensions/googlechat/setup-entry.d.ts +19 -0
  198. package/dist/extensions/googlechat/setup-entry.js +30 -30
  199. package/dist/extensions/huggingface/index.d.ts +11 -0
  200. package/dist/extensions/huggingface/index.js +26 -26
  201. package/dist/extensions/imessage/index.d.ts +11 -0
  202. package/dist/extensions/imessage/index.js +30 -30
  203. package/dist/extensions/imessage/setup-entry.d.ts +7 -0
  204. package/dist/extensions/imessage/setup-entry.js +30 -30
  205. package/dist/extensions/irc/index.d.ts +11 -0
  206. package/dist/extensions/irc/index.js +29 -29
  207. package/dist/extensions/irc/setup-entry.d.ts +8 -0
  208. package/dist/extensions/irc/setup-entry.js +29 -29
  209. package/dist/extensions/kakao-talkchannel/index.d.ts +19 -0
  210. package/dist/extensions/kakao-talkchannel/index.js +1762 -0
  211. package/dist/extensions/kakao-talkchannel/moldclaw.plugin.json +111 -0
  212. package/dist/extensions/kakao-talkchannel/package.json +12 -0
  213. package/dist/extensions/kilocode/index.d.ts +11 -0
  214. package/dist/extensions/kilocode/index.js +26 -26
  215. package/dist/extensions/kimi-coding/index.d.ts +11 -0
  216. package/dist/extensions/kimi-coding/index.js +26 -26
  217. package/dist/extensions/line/index.d.ts +11 -0
  218. package/dist/extensions/line/index.js +28 -28
  219. package/dist/extensions/line/setup-entry.d.ts +7 -0
  220. package/dist/extensions/line/setup-entry.js +28 -28
  221. package/dist/extensions/llm-task/index.d.ts +11 -0
  222. package/dist/extensions/llm-task/index.js +28 -28
  223. package/dist/extensions/lobster/index.d.ts +11 -0
  224. package/dist/extensions/matrix/index.d.ts +11 -0
  225. package/dist/extensions/matrix/index.js +31 -31
  226. package/dist/extensions/matrix/setup-entry.d.ts +20 -0
  227. package/dist/extensions/matrix/setup-entry.js +31 -31
  228. package/dist/extensions/mattermost/index.d.ts +11 -0
  229. package/dist/extensions/mattermost/index.js +28 -28
  230. package/dist/extensions/mattermost/setup-entry.d.ts +88 -0
  231. package/dist/extensions/mattermost/setup-entry.js +28 -28
  232. package/dist/extensions/memory-core/index.d.ts +11 -0
  233. package/dist/extensions/memory-lancedb/index.d.ts +25 -0
  234. package/dist/extensions/microsoft/index.d.ts +11 -0
  235. package/dist/extensions/microsoft/index.js +26 -26
  236. package/dist/extensions/minimax/index.d.ts +11 -0
  237. package/dist/extensions/minimax/index.js +26 -26
  238. package/dist/extensions/mistral/index.d.ts +11 -0
  239. package/dist/extensions/mistral/index.js +26 -26
  240. package/dist/extensions/modelstudio/index.d.ts +11 -0
  241. package/dist/extensions/modelstudio/index.js +26 -26
  242. package/dist/extensions/moonshot/index.d.ts +11 -0
  243. package/dist/extensions/moonshot/index.js +26 -26
  244. package/dist/extensions/msteams/index.d.ts +11 -0
  245. package/dist/extensions/msteams/index.js +31 -31
  246. package/dist/extensions/msteams/setup-entry.d.ts +11 -0
  247. package/dist/extensions/msteams/setup-entry.js +31 -31
  248. package/dist/extensions/nextcloud-talk/index.d.ts +11 -0
  249. package/dist/extensions/nextcloud-talk/index.js +28 -28
  250. package/dist/extensions/nextcloud-talk/setup-entry.d.ts +60 -0
  251. package/dist/extensions/nextcloud-talk/setup-entry.js +28 -28
  252. package/dist/extensions/nostr/index.d.ts +11 -0
  253. package/dist/extensions/nostr/index.js +28 -28
  254. package/dist/extensions/nostr/setup-entry.d.ts +49 -0
  255. package/dist/extensions/nostr/setup-entry.js +28 -28
  256. package/dist/extensions/nvidia/index.d.ts +11 -0
  257. package/dist/extensions/ollama/index.d.ts +11 -0
  258. package/dist/extensions/open-prose/index.d.ts +11 -0
  259. package/dist/extensions/openai/index.d.ts +11 -0
  260. package/dist/extensions/openai/index.js +26 -26
  261. package/dist/extensions/opencode/index.d.ts +11 -0
  262. package/dist/extensions/opencode/index.js +26 -26
  263. package/dist/extensions/opencode-go/index.d.ts +11 -0
  264. package/dist/extensions/opencode-go/index.js +26 -26
  265. package/dist/extensions/openrouter/index.d.ts +11 -0
  266. package/dist/extensions/openrouter/index.js +26 -26
  267. package/dist/extensions/openshell/index.d.ts +11 -0
  268. package/dist/extensions/openshell/index.js +26 -26
  269. package/dist/extensions/perplexity/index.d.ts +11 -0
  270. package/dist/extensions/perplexity/index.js +2 -2
  271. package/dist/extensions/phone-control/index.d.ts +12 -0
  272. package/dist/extensions/qianfan/index.d.ts +11 -0
  273. package/dist/extensions/qianfan/index.js +26 -26
  274. package/dist/extensions/qwen-portal-auth/index.d.ts +12 -0
  275. package/dist/extensions/qwen-portal-auth/index.js +26 -26
  276. package/dist/extensions/sglang/index.d.ts +11 -0
  277. package/dist/extensions/sglang/index.js +26 -26
  278. package/dist/extensions/signal/index.d.ts +11 -0
  279. package/dist/extensions/signal/index.js +29 -29
  280. package/dist/extensions/signal/setup-entry.d.ts +7 -0
  281. package/dist/extensions/signal/setup-entry.js +29 -29
  282. package/dist/extensions/slack/index.d.ts +11 -0
  283. package/dist/extensions/slack/index.js +30 -30
  284. package/dist/extensions/slack/setup-entry.d.ts +7 -0
  285. package/dist/extensions/slack/setup-entry.js +29 -29
  286. package/dist/extensions/synology-chat/index.d.ts +11 -0
  287. package/dist/extensions/synology-chat/index.js +28 -28
  288. package/dist/extensions/synology-chat/setup-entry.d.ts +138 -0
  289. package/dist/extensions/synology-chat/setup-entry.js +28 -28
  290. package/dist/extensions/synthetic/index.d.ts +11 -0
  291. package/dist/extensions/synthetic/index.js +26 -26
  292. package/dist/extensions/talk-voice/index.d.ts +12 -0
  293. package/dist/extensions/talk-voice/index.js +26 -26
  294. package/dist/extensions/telegram/index.d.ts +11 -0
  295. package/dist/extensions/telegram/index.js +29 -29
  296. package/dist/extensions/telegram/setup-entry.d.ts +7 -0
  297. package/dist/extensions/telegram/setup-entry.js +28 -28
  298. package/dist/extensions/thread-ownership/index.d.ts +12 -0
  299. package/dist/extensions/tlon/index.d.ts +11 -0
  300. package/dist/extensions/tlon/index.js +28 -28
  301. package/dist/extensions/tlon/setup-entry.d.ts +7 -0
  302. package/dist/extensions/tlon/setup-entry.js +28 -28
  303. package/dist/extensions/together/index.d.ts +11 -0
  304. package/dist/extensions/together/index.js +26 -26
  305. package/dist/extensions/twitch/index.d.ts +39 -0
  306. package/dist/extensions/twitch/index.js +28 -28
  307. package/dist/extensions/venice/index.d.ts +11 -0
  308. package/dist/extensions/venice/index.js +26 -26
  309. package/dist/extensions/vercel-ai-gateway/index.d.ts +11 -0
  310. package/dist/extensions/vercel-ai-gateway/index.js +26 -26
  311. package/dist/extensions/vllm/index.d.ts +11 -0
  312. package/dist/extensions/vllm/index.js +26 -26
  313. package/dist/extensions/voice-call/index.d.ts +11 -0
  314. package/dist/extensions/voice-call/index.js +26 -26
  315. package/dist/extensions/volcengine/index.d.ts +11 -0
  316. package/dist/extensions/volcengine/index.js +26 -26
  317. package/dist/extensions/whatsapp/index.d.ts +11 -0
  318. package/dist/extensions/whatsapp/index.js +29 -29
  319. package/dist/extensions/whatsapp/setup-entry.d.ts +7 -0
  320. package/dist/extensions/whatsapp/setup-entry.js +29 -29
  321. package/dist/extensions/xai/index.d.ts +11 -0
  322. package/dist/extensions/xai/index.js +26 -26
  323. package/dist/extensions/xiaomi/index.d.ts +11 -0
  324. package/dist/extensions/xiaomi/index.js +26 -26
  325. package/dist/extensions/zai/index.d.ts +11 -0
  326. package/dist/extensions/zai/index.js +26 -26
  327. package/dist/extensions/zalo/index.d.ts +11 -0
  328. package/dist/extensions/zalo/index.js +30 -30
  329. package/dist/extensions/zalo/setup-entry.d.ts +34 -0
  330. package/dist/extensions/zalo/setup-entry.js +30 -30
  331. package/dist/extensions/zalouser/index.d.ts +11 -0
  332. package/dist/extensions/zalouser/index.js +31 -31
  333. package/dist/extensions/zalouser/setup-entry.d.ts +42 -0
  334. package/dist/extensions/zalouser/setup-entry.js +31 -31
  335. package/dist/feishu-DCKEC3ao.d.ts +36 -0
  336. package/dist/gateway-cli-DN1Ii6J-.js +26432 -0
  337. package/dist/gateway-install-token-CJYFJBaC.js +163 -0
  338. package/dist/gateway-rpc-CroQg9MB.js +26 -0
  339. package/dist/gateway-runtime-D9FRZqKP.js +69 -0
  340. package/dist/googlechat-CBCkerAy.js +307 -0
  341. package/dist/googlechat-CSUNieHX.d.ts +12 -0
  342. package/dist/group-access-rSvkIglb.d.ts +61 -0
  343. package/dist/health-B6WwLJp4.js +570 -0
  344. package/dist/health-CAlJydXv.js +108 -0
  345. package/dist/history-BwNxb0sJ.d.ts +75 -0
  346. package/dist/hooks-BYlfU3Nf.d.ts +6 -0
  347. package/dist/hooks-cli-DuKmdo_H.js +995 -0
  348. package/dist/http-registry-DX_LVtuK.d.ts +20 -0
  349. package/dist/image-generation-DKkdRpve.d.ts +9 -0
  350. package/dist/imessage-7abjbe2Q.js +31 -0
  351. package/dist/imessage-DOH1yaDE.js +110 -0
  352. package/dist/inbound-envelope-CmvweL6U.d.ts +78 -0
  353. package/dist/inbound-reply-dispatch-BvnKTOec.js +71 -0
  354. package/dist/inbound-reply-dispatch-C7LjHRZN.d.ts +72 -0
  355. package/dist/index-DTQqfqj9.d.ts +1 -0
  356. package/dist/index.d.ts +27 -0
  357. package/dist/index.js +2 -2
  358. package/dist/infra/warning-filter.d.ts +10 -0
  359. package/dist/install-target-tXRD7VkM.js +574 -0
  360. package/dist/installs-C8fz8sm3.js +532 -0
  361. package/dist/io-C6XifaT4.js +9737 -0
  362. package/dist/io-C8awRnSW.js +28 -0
  363. package/dist/ipv4-d88_Jn2p.js +82 -0
  364. package/dist/irc-DpR6FXjN.js +672 -0
  365. package/dist/json-store-Sr_kk-II.d.ts +14 -0
  366. package/dist/keyed-async-queue-BA3BKukE.d.ts +19 -0
  367. package/dist/library-DOwowAGN.js +107 -0
  368. package/dist/lifecycle-core-BHHBoRTY.js +382 -0
  369. package/dist/line/accounts.d.ts +3 -0
  370. package/dist/line/send.d.ts +2 -0
  371. package/dist/line/send.js +4 -4
  372. package/dist/line/template-messages.d.ts +2 -0
  373. package/dist/line-8rsNbJCP.js +530 -0
  374. package/dist/line-D_cvIf6B.d.ts +75 -0
  375. package/dist/links-BOnvOj1z.d.ts +7 -0
  376. package/dist/llm-slug-generator-D9HjWtJT.js +67 -0
  377. package/dist/llm-slug-generator.d.ts +12 -0
  378. package/dist/llm-slug-generator.js +27 -27
  379. package/dist/logging-BhqLWxTD.js +13 -0
  380. package/dist/logging-DfaiL4OX.js +29 -0
  381. package/dist/login-qr-COBYR52w.js +233 -0
  382. package/dist/login-qr-xK4QIpPc.js +107 -0
  383. package/dist/logs-cli-RSSTw8L_.js +254 -0
  384. package/dist/manager-runtime-DL6JoSj9.js +106 -0
  385. package/dist/manager.runtime-Cbyhg1vB.js +710 -0
  386. package/dist/markdown-to-line-BTlEkOls.d.ts +91 -0
  387. package/dist/matrix-DX-jaB88.js +1490 -0
  388. package/dist/matrix-H6Yyj1QZ.d.ts +68 -0
  389. package/dist/matrix-J8s45tRw.js +1269 -0
  390. package/dist/mattermost-D75n6bRI.d.ts +6 -0
  391. package/dist/mcp-cli-CLc3_yCO.js +86 -0
  392. package/dist/media-understanding.runtime-BI0Lljbl.js +111 -0
  393. package/dist/memory-cli-CTp2cYrf.js +106 -0
  394. package/dist/method-scopes-Du8ODGFW.js +2586 -0
  395. package/dist/model-auth-markers-DEDakSUW.d.ts +20 -0
  396. package/dist/model-picker-CDBs7LJF.js +390 -0
  397. package/dist/model-picker-CRix4Wwv.js +107 -0
  398. package/dist/model-picker.runtime-CITyy3Rn.js +120 -0
  399. package/dist/model-suppression.runtime-Ce7D6QUT.js +111 -0
  400. package/dist/models-BK1eanuP.js +113 -0
  401. package/dist/models-X4Czy3uE.js +2514 -0
  402. package/dist/models-cli-C79Ulviy.js +304 -0
  403. package/dist/models-config-DALlu3S9.js +106 -0
  404. package/dist/models-config.providers.discovery-CSJ1STM1.d.ts +18 -0
  405. package/dist/monitor-B45a_RpX.js +3468 -0
  406. package/dist/monitor-C8KbJ-i0.js +767 -0
  407. package/dist/monitor-CIhrvegZ.js +3076 -0
  408. package/dist/monitor-CQut7klP.js +6823 -0
  409. package/dist/monitor-DZb5IJle.js +777 -0
  410. package/dist/monitor-DaFkdD27.js +108 -0
  411. package/dist/monitor-Do9Tp2Ii.js +110 -0
  412. package/dist/monitor-shared-CMK9cDOb.js +444 -0
  413. package/dist/msteams-A6H_wv5F.js +852 -0
  414. package/dist/net-DpMJgN-o.d.ts +19 -0
  415. package/dist/nextcloud-talk-f1pZ5Bge.d.ts +1 -0
  416. package/dist/node-cli-BXnmsjzL.js +2498 -0
  417. package/dist/node-resolve-CupmrA0Y.js +835 -0
  418. package/dist/nodes-cli-DZVrah_8.js +1375 -0
  419. package/dist/nostr-DMV534Ks.d.ts +7 -0
  420. package/dist/nostr-SAk3tjtR.js +8744 -0
  421. package/dist/npm-resolution-Dr9wssCY.js +60 -0
  422. package/dist/oauth-utils-DnyXdWU9.d.ts +10 -0
  423. package/dist/onboard-BE5pmb1g.js +589 -0
  424. package/dist/onboard-channels-3hNVY0E7.js +1241 -0
  425. package/dist/onboard-channels-vaO3nWLL.js +200 -0
  426. package/dist/onboard-custom-CI5uFyWH.js +571 -0
  427. package/dist/onboard-custom-eIvRswgv.js +109 -0
  428. package/dist/onboard-helpers-ChMWfUnl.js +335 -0
  429. package/dist/onboard-helpers-DRFi9oaD.js +108 -0
  430. package/dist/onboard-remote-BTspTgA4.js +112 -0
  431. package/dist/onboard-remote-so38yXlX.js +181 -0
  432. package/dist/onboard-search-DS0tZS24.js +297 -0
  433. package/dist/onboard-skills-B9DxCCiU.js +133 -0
  434. package/dist/onboard-skills-so0a_BJV.js +112 -0
  435. package/dist/outbound-media-BiJscGlR.js +11 -0
  436. package/dist/outbound-media-DJF-TuJu.d.ts +11 -0
  437. package/dist/pairing-access-CuiJP9xN.d.ts +21 -0
  438. package/dist/pairing-cli-DN0u1Cez.js +212 -0
  439. package/dist/parse-finite-number-B3FJTjyQ.d.ts +5 -0
  440. package/dist/perplexity-Bw1u3CAF.js +24 -0
  441. package/dist/persistent-dedupe-DR5Ka6BX.d.ts +26 -0
  442. package/dist/pi-model-discovery-runtime-iwKNCaYu.js +106 -0
  443. package/dist/pi-tools.before-tool-call.runtime-BM_N-JZe.js +380 -0
  444. package/dist/plugin-install--KVul05Z.js +184 -0
  445. package/dist/plugin-install-DVpPsLkS.js +112 -0
  446. package/dist/plugin-install-plan-Dwc6-coz.js +49 -0
  447. package/dist/plugin-registry-XRswugE9.js +108 -0
  448. package/dist/plugin-registry-jozQafRo.js +49 -0
  449. package/dist/plugin-sdk/account-resolution.js +26 -26
  450. package/dist/plugin-sdk/acp-runtime.js +26 -26
  451. package/dist/plugin-sdk/acpx.js +1 -1
  452. package/dist/plugin-sdk/agent-runtime.js +26 -26
  453. package/dist/plugin-sdk/bluebubbles.js +29 -29
  454. package/dist/plugin-sdk/channel-config-helpers.js +26 -26
  455. package/dist/plugin-sdk/channel-config-schema.js +2 -2
  456. package/dist/plugin-sdk/channel-policy.js +26 -26
  457. package/dist/plugin-sdk/channel-runtime.js +26 -26
  458. package/dist/plugin-sdk/compat.js +27 -27
  459. package/dist/plugin-sdk/config-runtime.js +28 -28
  460. package/dist/plugin-sdk/conversation-runtime.js +26 -26
  461. package/dist/plugin-sdk/discord.js +26 -26
  462. package/dist/plugin-sdk/feishu.js +27 -27
  463. package/dist/plugin-sdk/gateway-runtime.js +8 -8
  464. package/dist/plugin-sdk/googlechat.js +29 -29
  465. package/dist/plugin-sdk/image-generation-runtime.js +26 -26
  466. package/dist/plugin-sdk/image-generation.js +26 -26
  467. package/dist/plugin-sdk/imessage.js +27 -27
  468. package/dist/plugin-sdk/index.js +26 -26
  469. package/dist/plugin-sdk/infra-runtime.js +26 -26
  470. package/dist/plugin-sdk/irc.js +29 -29
  471. package/dist/plugin-sdk/line.js +27 -27
  472. package/dist/plugin-sdk/llm-task.js +26 -26
  473. package/dist/plugin-sdk/matrix.js +29 -29
  474. package/dist/plugin-sdk/mattermost.js +28 -28
  475. package/dist/plugin-sdk/media-runtime.js +26 -26
  476. package/dist/plugin-sdk/media-understanding-runtime.js +26 -26
  477. package/dist/plugin-sdk/media-understanding.js +26 -26
  478. package/dist/plugin-sdk/msteams.js +30 -30
  479. package/dist/plugin-sdk/nextcloud-talk.js +28 -28
  480. package/dist/plugin-sdk/nostr.js +27 -27
  481. package/dist/plugin-sdk/plugin-runtime.js +26 -26
  482. package/dist/plugin-sdk/provider-auth.js +28 -28
  483. package/dist/plugin-sdk/provider-setup.js +27 -27
  484. package/dist/plugin-sdk/provider-web-search.js +1 -1
  485. package/dist/plugin-sdk/qwen-portal-auth.js +26 -26
  486. package/dist/plugin-sdk/reply-history.js +26 -26
  487. package/dist/plugin-sdk/reply-runtime.js +26 -26
  488. package/dist/plugin-sdk/sandbox.js +26 -26
  489. package/dist/plugin-sdk/security-runtime.js +26 -26
  490. package/dist/plugin-sdk/self-hosted-provider-setup.js +27 -27
  491. package/dist/plugin-sdk/setup.js +27 -27
  492. package/dist/plugin-sdk/signal.js +26 -26
  493. package/dist/plugin-sdk/slack.js +26 -26
  494. package/dist/plugin-sdk/speech-runtime.js +26 -26
  495. package/dist/plugin-sdk/speech.js +26 -26
  496. package/dist/plugin-sdk/src/channels/plugins/setup-wizard-helpers.d.ts +3 -0
  497. package/dist/plugin-sdk/src/config/config-lock.d.ts +38 -0
  498. package/dist/plugin-sdk/src/config/config.d.ts +1 -1
  499. package/dist/plugin-sdk/src/config/io.d.ts +39 -0
  500. package/dist/plugin-sdk/src/config/types.gateway.d.ts +12 -0
  501. package/dist/plugin-sdk/src/config/types.secrets.d.ts +10 -0
  502. package/dist/plugin-sdk/src/config/zod-schema.d.ts +2 -0
  503. package/dist/plugin-sdk/src/gateway/credential-planner.d.ts +3 -1
  504. package/dist/plugin-sdk/src/secrets/provider-env-vars.d.ts +61 -0
  505. package/dist/plugin-sdk/src/secrets/sec1-placeholder.d.ts +181 -0
  506. package/dist/plugin-sdk/src/secrets/sec1-utils.d.ts +57 -0
  507. package/dist/plugin-sdk/synology-chat.js +27 -27
  508. package/dist/plugin-sdk/telegram.js +26 -26
  509. package/dist/plugin-sdk/text-runtime.js +4 -4
  510. package/dist/plugin-sdk/tlon.js +27 -27
  511. package/dist/plugin-sdk/twitch.js +26 -26
  512. package/dist/plugin-sdk/voice-call.js +26 -26
  513. package/dist/plugin-sdk/whatsapp.js +26 -26
  514. package/dist/plugin-sdk/zalo.js +30 -30
  515. package/dist/plugin-sdk/zalouser.js +29 -29
  516. package/dist/plugins/runtime/index.d.ts +22 -0
  517. package/dist/plugins/runtime/index.js +26 -26
  518. package/dist/plugins-C4PiDdjc.js +106 -0
  519. package/dist/plugins-cli-zhmliYNU.js +912 -0
  520. package/dist/policy-CcSolumc.js +143 -0
  521. package/dist/preflight-audio.runtime-BAbfqqzW.js +111 -0
  522. package/dist/probe-Bgt5c-cr.js +129 -0
  523. package/dist/probe-CPk5iGcg.js +47 -0
  524. package/dist/probe-DR4KRKXz.js +19 -0
  525. package/dist/probe-DnoCyJ_m.js +1793 -0
  526. package/dist/probe-VsLtK3vQ.js +6328 -0
  527. package/dist/probe-auth-BnsKrQt7.js +38 -0
  528. package/dist/probe-auth-DYdUG8l1.js +48 -0
  529. package/dist/program-8enYYBsc.js +247 -0
  530. package/dist/prompt-select-styled-DxBcUasv.js +2673 -0
  531. package/dist/provider-api-key-auth.runtime-DsLZyt6h.js +116 -0
  532. package/dist/provider-auth-choice-30EvRxqc.js +126 -0
  533. package/dist/provider-auth-choice-preference-DMr1WmRg.js +189 -0
  534. package/dist/provider-auth-choice.runtime-CI98BgQF.js +118 -0
  535. package/dist/provider-auth-guidance-WKDIi_wk.js +34 -0
  536. package/dist/provider-auth-result-Cs8wguSI.d.ts +18 -0
  537. package/dist/provider-models-EOys_Nvi.d.ts +867 -0
  538. package/dist/provider-ollama-setup-D89zlm9C.d.ts +32 -0
  539. package/dist/provider-onboard-BzOpgCLu.d.ts +40 -0
  540. package/dist/provider-runtime.runtime-Cm4as2KG.js +106 -0
  541. package/dist/provider-self-hosted-setup-Bmv_AQmw.d.ts +61 -0
  542. package/dist/provider-self-hosted-setup-CJwFVVB4.js +182 -0
  543. package/dist/provider-usage-CVNyLLDb.js +106 -0
  544. package/dist/provider-usage.types-CdTymHNu.d.ts +16 -0
  545. package/dist/provider-web-search-BJhXD5dH.js +2392 -0
  546. package/dist/provider-wizard-DMMYXjlW.js +152 -0
  547. package/dist/push-apns-BnWTdTEk.js +1038 -0
  548. package/dist/pw-ai-CtK_7Cy2.js +1866 -0
  549. package/dist/qr-cli-CA-BF0--.js +108 -0
  550. package/dist/qr-cli-D18HiUkh.js +369 -0
  551. package/dist/reactions-Df7XG8Uh.js +281 -0
  552. package/dist/read-only-account-inspect.discord.runtime-B-FP0mwb.js +111 -0
  553. package/dist/read-only-account-inspect.slack.runtime-DkWZ2ccW.js +111 -0
  554. package/dist/read-only-account-inspect.telegram.runtime-BnlTkn_e.js +111 -0
  555. package/dist/redact-snapshot-DVdstBvO.js +2661 -0
  556. package/dist/ref-contract-RPkB754Q.js +53 -0
  557. package/dist/register.agent-DVAxXQKW.js +434 -0
  558. package/dist/register.backup-CUuL5KUZ.js +624 -0
  559. package/dist/register.configure-bC0UEwfU.js +247 -0
  560. package/dist/register.maintenance-iIqvl_eT.js +569 -0
  561. package/dist/register.message-CEDd4z07.js +704 -0
  562. package/dist/register.onboard-Cejfnysy.js +187 -0
  563. package/dist/register.setup-DU7uHdYt.js +207 -0
  564. package/dist/register.status-health-sessions-BWphMXNR.js +493 -0
  565. package/dist/register.subclis-DnIweTEG.js +315 -0
  566. package/dist/register.subclis-gJX_Pbub.js +12 -0
  567. package/dist/registry-Dgwc-7eS.js +1183 -0
  568. package/dist/replies-D9PEZ8yn.js +110 -0
  569. package/dist/reply-history-lHgoC4l3.d.ts +1 -0
  570. package/dist/reply-payload-Bd2HuR4g.d.ts +46 -0
  571. package/dist/request-url-BcSJaiiu.d.ts +5 -0
  572. package/dist/resolve-BbsCHGLY.js +660 -0
  573. package/dist/resolve-channels-BtrGC95o.js +262 -0
  574. package/dist/resolve-channels-C1SthO1N.js +226 -0
  575. package/dist/resolve-users-CgSxHrU0.js +143 -0
  576. package/dist/routes-BZtqNrBf.js +7097 -0
  577. package/dist/rpc-D3KMxG4J.js +67 -0
  578. package/dist/run-command-C8b3dCZV.d.ts +16 -0
  579. package/dist/run-main-BlWJVotF.js +423 -0
  580. package/dist/runtime-RWGbO5Qy.d.ts +26 -0
  581. package/dist/runtime-discord-ops.runtime-DUXIYvQr.js +9073 -0
  582. package/dist/runtime-slack-ops.runtime-n1yFfyp1.js +4551 -0
  583. package/dist/runtime-telegram-ops.runtime-PZUWchjT.js +128 -0
  584. package/dist/runtime-whatsapp-login.runtime-xsuNyvGz.js +109 -0
  585. package/dist/runtime-whatsapp-outbound.runtime-5EfEyCsO.js +112 -0
  586. package/dist/sandbox-cli-Dw1nWNmQ.js +530 -0
  587. package/dist/search-manager-BJoRxOaf.js +15 -0
  588. package/dist/search-manager-DxkQvUrW.js +386 -0
  589. package/dist/secret-input-schema-Cp_La9qv.d.ts +19 -0
  590. package/dist/secrets-cli-BPyV2gSq.js +2065 -0
  591. package/dist/security-cli-EK4sSRfG.js +570 -0
  592. package/dist/send-B01Gvh9m.js +629 -0
  593. package/dist/send-B4L4wRJO.js +100 -0
  594. package/dist/send-BDcGrXt0.js +1025 -0
  595. package/dist/send-BRRtHxyR.js +283 -0
  596. package/dist/send-DU6dmMXW.js +631 -0
  597. package/dist/server-CWw5GFEg.js +106 -0
  598. package/dist/server-node-events-92cDVswC.js +501 -0
  599. package/dist/session-key-DbkfhOjM.d.ts +46 -0
  600. package/dist/sessions-B052uHA3.js +218 -0
  601. package/dist/sessions-Cef4dZNP.js +107 -0
  602. package/dist/setup-BlQPyDPy.js +387 -0
  603. package/dist/setup-DcSZ_pTn.d.ts +37 -0
  604. package/dist/setup-core-B9mdZYnU.js +166 -0
  605. package/dist/setup-core-Cj0sLkpP.js +47 -0
  606. package/dist/setup-core-CkZbebOv.js +143 -0
  607. package/dist/setup-core-MRNjnrJl.js +205 -0
  608. package/dist/setup-surface-3ZY0JtWE.js +490 -0
  609. package/dist/setup-wizard-helpers-Dwzb9Dcz.d.ts +203 -0
  610. package/dist/setup.finalize-B5ETm3Ui.js +517 -0
  611. package/dist/setup.gateway-config-C8hdtlbw.js +338 -0
  612. package/dist/setup.secret-input-BZSIeiqy.js +25 -0
  613. package/dist/shared--9_eQ_lc.js +75 -0
  614. package/dist/shared-CxkH3H0U.js +102 -0
  615. package/dist/shared-DTNL0hA9.js +298 -0
  616. package/dist/shared-HSP1OV-Q.js +96 -0
  617. package/dist/shared-UIjWb_3B.js +182 -0
  618. package/dist/signal-CTI6bSmB.js +109 -0
  619. package/dist/skills-4-r1mfJM.js +853 -0
  620. package/dist/skills-RNm54CBO.js +19 -0
  621. package/dist/skills-cli-te7dSs5p.js +291 -0
  622. package/dist/skills-install-Del-Ogv8.js +763 -0
  623. package/dist/skills-status-BZpoMXrR.js +169 -0
  624. package/dist/skills-status-Dq61Sz8U.js +20 -0
  625. package/dist/slack-oc-viUtl.js +109 -0
  626. package/dist/slash-commands.runtime-NdkD2LZV.js +123 -0
  627. package/dist/slash-dispatch.runtime-DQgeaF3J.js +136 -0
  628. package/dist/slash-skill-commands.runtime-DmOl2DnL.js +111 -0
  629. package/dist/src-0wtt7seR.js +1696 -0
  630. package/dist/status-5oR_gqv_.js +121 -0
  631. package/dist/status-BO8LY0hC.js +1599 -0
  632. package/dist/status-D_oHA9yO.js +126 -0
  633. package/dist/status-IrMacJRj.js +606 -0
  634. package/dist/status-Prdeg53E.js +43 -0
  635. package/dist/status-json-Da0hR-1Z.js +286 -0
  636. package/dist/status.link-channel-BgUJEZAz.js +138 -0
  637. package/dist/status.scan.deps.runtime-D9vHTxOW.js +121 -0
  638. package/dist/status.scan.runtime-D-EdD5CW.js +114 -0
  639. package/dist/status.summary--i6xduWH.js +592 -0
  640. package/dist/status.summary.runtime-BqMXjaBc.js +113 -0
  641. package/dist/subagent-orphan-recovery-DiRJcFQc.js +302 -0
  642. package/dist/subagent-registry-runtime-B66EYEYm.js +106 -0
  643. package/dist/synology-chat-BemXqdzG.js +297 -0
  644. package/dist/system-cli-CSuiia4-.js +92 -0
  645. package/dist/telegram/audit.d.ts +2 -0
  646. package/dist/telegram/audit.js +1 -1
  647. package/dist/telegram/token.d.ts +2 -0
  648. package/dist/telegram/token.js +26 -26
  649. package/dist/telegram-DLFcRv5a.js +109 -0
  650. package/dist/testing-DZrulv-n.d.ts +1755 -0
  651. package/dist/text-chunking-BaYBIUoR.d.ts +79 -0
  652. package/dist/text-chunking-C8kmbNfa.js +84 -0
  653. package/dist/thinking-D8aqmr3o.d.ts +13 -0
  654. package/dist/tlon-Bpr4f3yF.js +433 -0
  655. package/dist/tool-send-BHKm5ztm.d.ts +9 -0
  656. package/dist/tui-BY3QRgC1.js +3834 -0
  657. package/dist/tui-cli-CCfZOlV0.js +132 -0
  658. package/dist/types-CKx5nDZB.d.ts +45 -0
  659. package/dist/types-DBhDdMQd.d.ts +22670 -0
  660. package/dist/types.base-B_TkkSS8.d.ts +188 -0
  661. package/dist/types.secrets-Bojc4omL.js +92 -0
  662. package/dist/ui-1UpZZyI3.js +31 -0
  663. package/dist/update-BR4JvFpV.js +1036 -0
  664. package/dist/update-cli-BZv44lFq.js +1498 -0
  665. package/dist/update-offset-store-DGdBotIW.js +107 -0
  666. package/dist/update-runner-D34sooPe.js +1496 -0
  667. package/dist/vllm-defaults-BCGSJ7K0.d.ts +13 -0
  668. package/dist/wait-BU9vJv22.d.ts +4 -0
  669. package/dist/web-CXpU2D41.js +107 -0
  670. package/dist/web-shared-B4sL45ah.d.ts +45 -0
  671. package/dist/webhook-memory-guards-B7oLVseG.d.ts +43 -0
  672. package/dist/webhook-request-guards-CqIH7equ.d.ts +76 -0
  673. package/dist/webhook-targets-CAAGATtk.js +181 -0
  674. package/dist/webhook-targets-oQ0jd4r0.d.ts +106 -0
  675. package/dist/webhooks-cli-B46t2VT5.js +349 -0
  676. package/dist/whatsapp-Dniwd4Rv.js +109 -0
  677. package/dist/whatsapp-actions-fL46PsNs.js +162 -0
  678. package/dist/windows-spawn-DGeE98SH.d.ts +43 -0
  679. package/dist/workspace-dirs-d3Ms_ryk.js +2002 -0
  680. package/dist/zalo-Csulx0XK.d.ts +9 -0
  681. package/dist/zalo-gh0yAWmS.js +415 -0
  682. package/dist/zalouser-CuxRvztM.js +30911 -0
  683. package/dist/zod-schema.agent-runtime-B4MkB-_3.d.ts +10 -0
  684. package/dist/zod-schema.core-D5reNip6.js +541 -0
  685. package/dist/zod-schema.core-DN3RhEUG.d.ts +173 -0
  686. package/docs/SEC1.md +523 -0
  687. package/docs/SEC1_IMPLEMENTATION/CHANNELS_REPORT.md +173 -0
  688. package/docs/SEC1_IMPLEMENTATION/CORE_UTIL_REPORT.md +139 -0
  689. package/docs/SEC1_IMPLEMENTATION/DOCS_REPORT.md +134 -0
  690. package/docs/SEC1_IMPLEMENTATION/ENV_MAP_DRAFT.md +148 -0
  691. package/docs/SEC1_IMPLEMENTATION/INTEGRATION_REPORT.md +170 -0
  692. package/docs/SEC1_IMPLEMENTATION/PROVIDERS_REPORT.md +291 -0
  693. package/docs/SEC1_IMPLEMENTATION/QA_REPORT.md +249 -0
  694. package/docs/SEC1_IMPLEMENTATION/RECURSIVE_QA/wave1-channels.md +317 -0
  695. package/docs/SEC1_IMPLEMENTATION/RECURSIVE_QA/wave1-docs.md +212 -0
  696. package/docs/SEC1_IMPLEMENTATION/RECURSIVE_QA/wave1-security.md +368 -0
  697. package/docs/SEC1_IMPLEMENTATION/RECURSIVE_QA/wave2-critic-consolidated.md +195 -0
  698. package/docs/SEC1_IMPLEMENTATION/RECURSIVE_QA/wave3-fix-report.md +105 -0
  699. package/docs/SEC1_IMPLEMENTATION/STRATEGY.md +451 -0
  700. package/docs/SEC1_IMPLEMENTATION/TEST_REPORT.md +156 -0
  701. package/docs/pipeline-sdk/CLI_SPEC.md +609 -0
  702. package/docs/pipeline-sdk/PIPELINE_SDK_DESIGN.md +1372 -0
  703. package/extensions/kakao-talkchannel/MIGRATION_ARCH_ANALYSIS.md +455 -0
  704. package/extensions/kakao-talkchannel/MIGRATION_CODE_ANALYSIS.md +383 -0
  705. package/extensions/kakao-talkchannel/MIGRATION_STRATEGY.md +115 -0
  706. package/extensions/kakao-talkchannel/README.md +50 -0
  707. package/extensions/kakao-talkchannel/index.ts +20 -0
  708. package/extensions/kakao-talkchannel/moldclaw.plugin.json +98 -0
  709. package/extensions/kakao-talkchannel/package.json +12 -0
  710. package/extensions/kakao-talkchannel/src/adapters/config.ts +132 -0
  711. package/extensions/kakao-talkchannel/src/adapters/gateway.ts +974 -0
  712. package/extensions/kakao-talkchannel/src/adapters/outbound.ts +52 -0
  713. package/extensions/kakao-talkchannel/src/adapters/pairing.ts +35 -0
  714. package/extensions/kakao-talkchannel/src/adapters/security.ts +57 -0
  715. package/extensions/kakao-talkchannel/src/adapters/setup.ts +105 -0
  716. package/extensions/kakao-talkchannel/src/adapters/status.ts +117 -0
  717. package/extensions/kakao-talkchannel/src/channel.ts +58 -0
  718. package/extensions/kakao-talkchannel/src/commands/card.ts +413 -0
  719. package/extensions/kakao-talkchannel/src/config/schema.ts +129 -0
  720. package/extensions/kakao-talkchannel/src/kakao/callback.ts +133 -0
  721. package/extensions/kakao-talkchannel/src/kakao/limits.ts +129 -0
  722. package/extensions/kakao-talkchannel/src/kakao/payload.ts +138 -0
  723. package/extensions/kakao-talkchannel/src/kakao/response.ts +373 -0
  724. package/extensions/kakao-talkchannel/src/relay/client.ts +146 -0
  725. package/extensions/kakao-talkchannel/src/relay/session.ts +137 -0
  726. package/extensions/kakao-talkchannel/src/relay/sse.ts +258 -0
  727. package/extensions/kakao-talkchannel/src/relay/stream.ts +149 -0
  728. package/extensions/kakao-talkchannel/src/runtime.ts +21 -0
  729. package/extensions/kakao-talkchannel/src/types.ts +447 -0
  730. package/extensions/kakao-talkchannel/src/version.ts +3 -0
  731. package/extensions/kakao-talkchannel/tsconfig.json +19 -0
  732. package/package.json +23 -8
  733. package/skills/meshy/SKILL.md +69 -0
  734. package/skills/meshy/scripts/__pycache__/check_status.cpython-312.pyc +0 -0
  735. package/skills/meshy/scripts/__pycache__/image_to_3d.cpython-312.pyc +0 -0
  736. package/skills/meshy/scripts/__pycache__/text_to_3d.cpython-312.pyc +0 -0
  737. package/skills/meshy/scripts/check_status.py +147 -0
  738. package/skills/meshy/scripts/image_to_3d.py +229 -0
  739. package/skills/meshy/scripts/text_to_3d.py +214 -0
  740. package/skills/nano-banana-pro/scripts/generate_image.py +1 -1
  741. package/skills/openai-whisper-api/scripts/transcribe.sh +0 -0
  742. package/skills/tavily-search/SKILL.md +61 -0
  743. package/skills/tavily-search/scripts/__pycache__/search.cpython-312.pyc +0 -0
  744. package/skills/tavily-search/scripts/search.py +238 -0
  745. package/skills/video-frames/scripts/frame.sh +0 -0
  746. package/LICENSE +0 -21
  747. package/dist/accounts-UcSvD34O.js +0 -109
  748. package/dist/acp-cli-BPb8PgHP.js +0 -2088
  749. package/dist/actions.runtime-BL5QRooG.js +0 -114
  750. package/dist/actions.runtime-DSdfSo40.js +0 -128
  751. package/dist/agents-CHeX_5-H.js +0 -217
  752. package/dist/agents-DQRL9XKP.js +0 -853
  753. package/dist/allow-list-Boi79v-U.js +0 -81
  754. package/dist/allowlist-B2eBBeMF.js +0 -142
  755. package/dist/api-CFAtRSYL.js +0 -6953
  756. package/dist/api-D5JNJj8n.js +0 -112
  757. package/dist/audit-BM0GsdzV.js +0 -787
  758. package/dist/audit-BqRK9OSj.js +0 -54
  759. package/dist/audit-channel.collect.runtime-BPvDB8aq.js +0 -600
  760. package/dist/audit-channel.runtime-D3fzHiAo.js +0 -116
  761. package/dist/audit-extra.async-NveNIzX0.js +0 -813
  762. package/dist/audit-membership-runtime-mu470WFO.js +0 -157
  763. package/dist/audit.deep.runtime-RdxvW8Tj.js +0 -24
  764. package/dist/audit.nondeep.runtime-DDu8vA9Z.js +0 -831
  765. package/dist/audit.runtime-Y8C9W7s9.js +0 -113
  766. package/dist/auth-choice-C1CIxRsi.js +0 -268
  767. package/dist/auth-choice-CTvqWiDI.js +0 -117
  768. package/dist/auth-choice-Ddzko1B8.js +0 -502
  769. package/dist/auth-choice-options-BIAmAiCe.js +0 -123
  770. package/dist/auth-choice-prompt-B815kArz.js +0 -110
  771. package/dist/auth-choice-prompt-CGhTNCJx.js +0 -36
  772. package/dist/auth-choice.plugin-providers.runtime-AvAZ6S5W.js +0 -114
  773. package/dist/auth-profiles-BJcHzwPy.js +0 -127650
  774. package/dist/auth-profiles.runtime-CieFilK5.js +0 -111
  775. package/dist/bluebubbles-F8FGE9cH.js +0 -64
  776. package/dist/brave-BG5Yopn8.js +0 -24
  777. package/dist/browser-cli-Co7PJGZF.js +0 -1492
  778. package/dist/call-CoaQYq7c.js +0 -639
  779. package/dist/call-D3eu5Jjh.js +0 -37
  780. package/dist/channel-BftWD6yu.js +0 -1321
  781. package/dist/channel-Bub9U5Xg.js +0 -214
  782. package/dist/channel-C0oDs7TO.js +0 -4681
  783. package/dist/channel-C8CnEdkZ.js +0 -352
  784. package/dist/channel-CI-RC-xf.js +0 -497
  785. package/dist/channel-CY-hZCOJ.js +0 -397
  786. package/dist/channel-CbtGJB2x.js +0 -943
  787. package/dist/channel-CcfK3wP8.js +0 -803
  788. package/dist/channel-DBoDIeVj.js +0 -619
  789. package/dist/channel-DEq6Ecs-.js +0 -920
  790. package/dist/channel-DH4dhW1n.js +0 -226
  791. package/dist/channel-DQ_wdKg_.js +0 -575
  792. package/dist/channel-DT6qD1Ic.js +0 -207
  793. package/dist/channel-DZNAyxwr.js +0 -542
  794. package/dist/channel-DtakwAEe.js +0 -538
  795. package/dist/channel-DuYgH6p1.js +0 -562
  796. package/dist/channel-Hn-AN-d52.js +0 -316
  797. package/dist/channel-_R4hbD5h.js +0 -1598
  798. package/dist/channel-account-context-DXq8dlvI.js +0 -103
  799. package/dist/channel-kQmEVn3I.js +0 -306
  800. package/dist/channel-options-DHfxaklg.js +0 -50
  801. package/dist/channel-summary-DUpnoYhI.js +0 -106
  802. package/dist/channel-t-JxCWk6.js +0 -949
  803. package/dist/channel.runtime--GYriaXU.js +0 -213
  804. package/dist/channel.runtime-BJtn3GOH.js +0 -174
  805. package/dist/channel.runtime-BV7t_oNz.js +0 -166
  806. package/dist/channel.runtime-Bi8a3n9S.js +0 -865
  807. package/dist/channel.runtime-BjsYF0NN.js +0 -122
  808. package/dist/channel.runtime-BnI6YtmI.js +0 -413
  809. package/dist/channel.runtime-CQOftcCd.js +0 -194
  810. package/dist/channel.runtime-CuIAcPjZ.js +0 -4006
  811. package/dist/channel.runtime-DH1Q1G4k.js +0 -399
  812. package/dist/channel.runtime-DYYUPKxr.js +0 -236
  813. package/dist/channel.runtime-U5Gszsr5.js +0 -177
  814. package/dist/channel.setup-BQFHmgki.js +0 -9
  815. package/dist/channel.setup-BVoDwklu.js +0 -8
  816. package/dist/channel.setup-Bf73HsXr.js +0 -57
  817. package/dist/channel.setup-CblD4flM.js +0 -11
  818. package/dist/channel.setup-DgxlrPgz.js +0 -6
  819. package/dist/channel.setup-GLIAEVKL.js +0 -8
  820. package/dist/channel.setup-YTy5R1sz.js +0 -9
  821. package/dist/channels-CTL8iR9J.js +0 -404
  822. package/dist/channels-DBGvnjHY.js +0 -1113
  823. package/dist/channels-cli-BmVO5-sq.js +0 -286
  824. package/dist/channels-status-issues-kDtsWzA-.js +0 -16
  825. package/dist/clawbot-cli-DtcMJHqX.js +0 -113
  826. package/dist/cli-BNGECGVY.js +0 -149
  827. package/dist/command-registry-1SDrWgER.js +0 -13
  828. package/dist/command-registry-DNorYU4w.js +0 -212
  829. package/dist/command-secret-gateway-DqDZparO.js +0 -106
  830. package/dist/compact.runtime-C1ZN8UGb.js +0 -111
  831. package/dist/completion-cli-Q_Jt5Foc.js +0 -16
  832. package/dist/completion-cli-QkTXhuJh.js +0 -445
  833. package/dist/config-BbxrRaLf.js +0 -938
  834. package/dist/config-CkD8DJ7L.js +0 -44
  835. package/dist/config-cli-BoPrlYTp.js +0 -428
  836. package/dist/config-guard-CEhCvr_u.js +0 -117
  837. package/dist/config-schema-GQ6uWjXe.js +0 -31
  838. package/dist/config-validation-woE2_LpC.js +0 -262
  839. package/dist/config-value-Dh8m-CFf.js +0 -132
  840. package/dist/config-y4i5g7s4.js +0 -30
  841. package/dist/configure-DGRzwdFN.js +0 -1100
  842. package/dist/configure-S4AHE3k_.js +0 -238
  843. package/dist/control-ui-shared-kLBp4YlS.js +0 -29
  844. package/dist/credentials-D5uBf_C5.js +0 -265
  845. package/dist/cron-cli-lGupeVCW.js +0 -634
  846. package/dist/daemon-cli-Cs_edi0I.js +0 -339
  847. package/dist/daemon-install-DIFpP_qv.js +0 -175
  848. package/dist/deliver-DYa_DFZU.js +0 -106
  849. package/dist/deliver-runtime-DCW_o2Ot.js +0 -106
  850. package/dist/devices-cli-YsGOW2-w.js +0 -340
  851. package/dist/diagnostic-vMghIesG.js +0 -310
  852. package/dist/directory-cli-DtjMQjU5.js +0 -306
  853. package/dist/directory.static-DBZGvsdF.js +0 -44
  854. package/dist/discord-DYCu19HT.js +0 -109
  855. package/dist/discovery-DZYAoDF_.js +0 -48
  856. package/dist/dns-cli-DqW4pNgW.js +0 -216
  857. package/dist/docs-cli-Bu9TBlDU.js +0 -173
  858. package/dist/doctor-completion-B5hcQD5c.js +0 -90
  859. package/dist/doctor-config-flow-BBB2ZKfT.js +0 -107
  860. package/dist/doctor-config-flow-DDBYUS9f.js +0 -2437
  861. package/dist/enable-Tmsp8QuB.js +0 -24
  862. package/dist/env-overrides-BHxqjYZG.js +0 -434
  863. package/dist/env-overrides.runtime-Cz98bf-l.js +0 -17
  864. package/dist/exec-approvals-cli-wO5cYfMa.js +0 -419
  865. package/dist/gateway-cli-CFvDGhB9.js +0 -26429
  866. package/dist/gateway-install-token-CskJfo_N.js +0 -163
  867. package/dist/gateway-rpc-srYfBID9.js +0 -26
  868. package/dist/gateway-runtime-C76hUmUV.js +0 -69
  869. package/dist/googlechat-Cha5utST.js +0 -307
  870. package/dist/health-DDQYYsJy.js +0 -108
  871. package/dist/health-DXZykGaX.js +0 -570
  872. package/dist/hooks-cli-DfkurPYP.js +0 -995
  873. package/dist/imessage-B26k39pl.js +0 -110
  874. package/dist/imessage-Bp1_6cws.js +0 -31
  875. package/dist/inbound-reply-dispatch-DoIJLztA.js +0 -71
  876. package/dist/install-target-BjOuS4I8.js +0 -574
  877. package/dist/installs-Cz4k0W1Y.js +0 -532
  878. package/dist/io-B0OKifLZ.js +0 -28
  879. package/dist/io-DcoxdH6t.js +0 -9570
  880. package/dist/ipv4-CTQQ4_IW.js +0 -82
  881. package/dist/irc-B8vBDigm.js +0 -672
  882. package/dist/library-VCM_cQY4.js +0 -107
  883. package/dist/lifecycle-core-Ctz36PdQ.js +0 -382
  884. package/dist/line-B_uTLrdI.js +0 -530
  885. package/dist/llm-slug-generator-YWg0g2pj.js +0 -67
  886. package/dist/logging-S-5LPdfQ.js +0 -13
  887. package/dist/logging-ueBMCGMR.js +0 -29
  888. package/dist/login-qr-pcACm2Ng.js +0 -107
  889. package/dist/login-qr-pv-kxMfF.js +0 -233
  890. package/dist/logs-cli-RgADgSMO.js +0 -254
  891. package/dist/manager-runtime-BhTkoKmb.js +0 -106
  892. package/dist/manager.runtime-BjHzikoK.js +0 -710
  893. package/dist/matrix-C4EEu2Qp.js +0 -1490
  894. package/dist/matrix-Dfzcc5nV.js +0 -1269
  895. package/dist/mcp-cli-CJmOm9Oj.js +0 -86
  896. package/dist/media-understanding.runtime-DCETFCw_.js +0 -111
  897. package/dist/memory-cli-DFqd6tYx.js +0 -106
  898. package/dist/method-scopes-D-Q9dvbj.js +0 -2586
  899. package/dist/model-picker-Z-CUcuMr.js +0 -390
  900. package/dist/model-picker-v5mUsZ4J.js +0 -107
  901. package/dist/model-picker.runtime-A_z0dHfS.js +0 -120
  902. package/dist/model-suppression.runtime-QVWVJRr-.js +0 -111
  903. package/dist/models-Bbj0xV4F.js +0 -2514
  904. package/dist/models-D-OIjZqU.js +0 -113
  905. package/dist/models-cli-Bpn-5i4h.js +0 -304
  906. package/dist/models-config-Cwa5cJbC.js +0 -106
  907. package/dist/monitor-BchfCAaU.js +0 -6823
  908. package/dist/monitor-BydV44SP.js +0 -3076
  909. package/dist/monitor-CT8axwfm.js +0 -767
  910. package/dist/monitor-CZGWNOvn.js +0 -777
  911. package/dist/monitor-DN62r69g.js +0 -3468
  912. package/dist/monitor-DZ0fzJku.js +0 -110
  913. package/dist/monitor-DvNjzWFu.js +0 -108
  914. package/dist/monitor-shared-B-DBSlkQ.js +0 -444
  915. package/dist/msteams-Bf-wk2Rp.js +0 -852
  916. package/dist/node-cli-kH16TQI7.js +0 -2498
  917. package/dist/node-resolve-DfOpQmxm.js +0 -835
  918. package/dist/nodes-cli-CkAMXW5u.js +0 -1375
  919. package/dist/nostr-B8UGHclZ.js +0 -8744
  920. package/dist/npm-resolution-DmjlifII.js +0 -60
  921. package/dist/onboard-C883nfyw.js +0 -589
  922. package/dist/onboard-channels-Dc-BxN7p.js +0 -200
  923. package/dist/onboard-channels-j5EENtum.js +0 -1241
  924. package/dist/onboard-custom-0atne0C5.js +0 -571
  925. package/dist/onboard-custom-CWMqwjJx.js +0 -109
  926. package/dist/onboard-helpers-D3wWfH8F.js +0 -335
  927. package/dist/onboard-helpers-DZmRCe8l.js +0 -108
  928. package/dist/onboard-remote-Cn6kW-p0.js +0 -112
  929. package/dist/onboard-remote-Cx4w5VAk.js +0 -181
  930. package/dist/onboard-search-Ck9HRh2M.js +0 -297
  931. package/dist/onboard-skills-BtqrGioT.js +0 -133
  932. package/dist/onboard-skills-Dnw19Os8.js +0 -112
  933. package/dist/outbound-media-C5Nv4o18.js +0 -11
  934. package/dist/pairing-cli-Cwy9QZ_4.js +0 -212
  935. package/dist/perplexity-Brhpb45X.js +0 -24
  936. package/dist/pi-model-discovery-runtime-DIOdo6D8.js +0 -106
  937. package/dist/pi-tools.before-tool-call.runtime-CFM4gsDF.js +0 -380
  938. package/dist/plugin-install-BOV00hia.js +0 -112
  939. package/dist/plugin-install-Bak8fUBv.js +0 -184
  940. package/dist/plugin-install-plan-bKkEefRf.js +0 -49
  941. package/dist/plugin-registry-DxAXQUlZ.js +0 -108
  942. package/dist/plugin-registry-n0p3phem.js +0 -49
  943. package/dist/plugins-Ca3RK8Fi.js +0 -106
  944. package/dist/plugins-cli-BnC51H2R.js +0 -912
  945. package/dist/policy-BJv97w9e.js +0 -143
  946. package/dist/preflight-audio.runtime-BrFcf-6_.js +0 -111
  947. package/dist/probe-063xvvZc.js +0 -19
  948. package/dist/probe-BJEb2wGv.js +0 -1793
  949. package/dist/probe-CJQlxgsl.js +0 -47
  950. package/dist/probe-Caa2HznF.js +0 -6328
  951. package/dist/probe-CfL4tnJ6.js +0 -129
  952. package/dist/probe-auth-DN2Ec83-.js +0 -38
  953. package/dist/probe-auth-D_UKzu4m.js +0 -48
  954. package/dist/program-BOMdC7MC.js +0 -247
  955. package/dist/prompt-select-styled-DDnCfM3j.js +0 -2673
  956. package/dist/provider-api-key-auth.runtime-DUns3fwX.js +0 -116
  957. package/dist/provider-auth-choice-B_j1ctT2.js +0 -126
  958. package/dist/provider-auth-choice-preference-BaOBZ_Xn.js +0 -189
  959. package/dist/provider-auth-choice.runtime-DOako_zV.js +0 -118
  960. package/dist/provider-auth-guidance-CrjxnoNZ.js +0 -34
  961. package/dist/provider-runtime.runtime-BkOkgmTw.js +0 -106
  962. package/dist/provider-self-hosted-setup-BFDU6dRa.js +0 -182
  963. package/dist/provider-usage-CaDE0mqq.js +0 -106
  964. package/dist/provider-web-search-BR7etTjJ.js +0 -2392
  965. package/dist/provider-wizard-DCPdKUvb.js +0 -152
  966. package/dist/push-apns-B_OZjm4v.js +0 -1038
  967. package/dist/pw-ai-dG60P0hQ.js +0 -1866
  968. package/dist/qr-cli-DWfiw79I.js +0 -369
  969. package/dist/qr-cli-DwuKtyZQ.js +0 -108
  970. package/dist/reactions-CIGAPBn8.js +0 -281
  971. package/dist/read-only-account-inspect.discord.runtime-D54mnq8l.js +0 -111
  972. package/dist/read-only-account-inspect.slack.runtime-Bxs9ObMC.js +0 -111
  973. package/dist/read-only-account-inspect.telegram.runtime-UoVuf_Yo.js +0 -111
  974. package/dist/redact-snapshot-DZ3Vq-SC.js +0 -2657
  975. package/dist/ref-contract-D96lSYLs.js +0 -53
  976. package/dist/register.agent-2KmeahEL.js +0 -434
  977. package/dist/register.backup-ECBnWVR7.js +0 -624
  978. package/dist/register.configure-Doz1daCp.js +0 -247
  979. package/dist/register.maintenance-C33cV-WM.js +0 -569
  980. package/dist/register.message-CnL0NiF6.js +0 -704
  981. package/dist/register.onboard-BrYGZeQA.js +0 -187
  982. package/dist/register.setup-Bx6gEg6X.js +0 -207
  983. package/dist/register.status-health-sessions-FLb0CUOO.js +0 -493
  984. package/dist/register.subclis-BuqgaeIf.js +0 -12
  985. package/dist/register.subclis-DwdgfdnT.js +0 -315
  986. package/dist/registry-xhgvU89y.js +0 -1107
  987. package/dist/replies-hB2aipLu.js +0 -110
  988. package/dist/resolve-3ErMOltL.js +0 -660
  989. package/dist/resolve-channels-BV8GXuPe.js +0 -226
  990. package/dist/resolve-channels-CTY_XRIP.js +0 -262
  991. package/dist/resolve-users-DQ4Ne4Zc.js +0 -143
  992. package/dist/routes-BNDsNO_e.js +0 -7097
  993. package/dist/rpc-BLGTBWXq.js +0 -67
  994. package/dist/run-main-COAE4GlI.js +0 -423
  995. package/dist/runtime-discord-ops.runtime-Dxg-nlgd.js +0 -9073
  996. package/dist/runtime-slack-ops.runtime-Di474LJr.js +0 -4551
  997. package/dist/runtime-telegram-ops.runtime-Da8vgf3O.js +0 -128
  998. package/dist/runtime-whatsapp-login.runtime-DcouP4iF.js +0 -109
  999. package/dist/runtime-whatsapp-outbound.runtime-CYamaEJX.js +0 -112
  1000. package/dist/sandbox-cli-U5ZTxhxL.js +0 -530
  1001. package/dist/search-manager-CfizyEMk.js +0 -386
  1002. package/dist/search-manager-DaF2QP4s.js +0 -15
  1003. package/dist/secrets-cli-C0gytFip.js +0 -2065
  1004. package/dist/security-cli-C74EuLUO.js +0 -570
  1005. package/dist/send-BTLVBf_E.js +0 -631
  1006. package/dist/send-BlWWCEZE.js +0 -1025
  1007. package/dist/send-CfypD1B_.js +0 -100
  1008. package/dist/send-Cm9v3uhF.js +0 -283
  1009. package/dist/send-g2odQuYI.js +0 -629
  1010. package/dist/server-C8b5QJ2s.js +0 -106
  1011. package/dist/server-node-events-xqQe5xiu.js +0 -501
  1012. package/dist/sessions-CSSzvgPQ.js +0 -107
  1013. package/dist/sessions-z0GIvdKa.js +0 -218
  1014. package/dist/setup-D9XTmlF8.js +0 -387
  1015. package/dist/setup-core-BDrLOwYO.js +0 -143
  1016. package/dist/setup-core-CM7cY7_i.js +0 -166
  1017. package/dist/setup-core-CnmgANY-.js +0 -205
  1018. package/dist/setup-core-DgcjCKmG.js +0 -47
  1019. package/dist/setup-surface-DzRrVKYj.js +0 -490
  1020. package/dist/setup.finalize-UaPu_adv.js +0 -517
  1021. package/dist/setup.gateway-config-Djc1ceEh.js +0 -338
  1022. package/dist/setup.secret-input-BkczghbR.js +0 -25
  1023. package/dist/shared-BHizGoNk.js +0 -298
  1024. package/dist/shared-CUfYhQkP.js +0 -96
  1025. package/dist/shared-DYYqr9EC.js +0 -75
  1026. package/dist/shared-DthOxMRQ.js +0 -182
  1027. package/dist/shared-On_A5_hW.js +0 -102
  1028. package/dist/signal-D6px9PGZ.js +0 -109
  1029. package/dist/skills-B4h1k-SP.js +0 -853
  1030. package/dist/skills-Bto10BGB.js +0 -19
  1031. package/dist/skills-cli-CXGR3Y5j.js +0 -291
  1032. package/dist/skills-install-B1AlkK8C.js +0 -763
  1033. package/dist/skills-status-BsmJ_iSg.js +0 -20
  1034. package/dist/skills-status-DGdxY3OI.js +0 -169
  1035. package/dist/slack-B7vWFmxP.js +0 -109
  1036. package/dist/slash-commands.runtime-DXdAT84n.js +0 -123
  1037. package/dist/slash-dispatch.runtime-CNf2-9Aj.js +0 -136
  1038. package/dist/slash-skill-commands.runtime-CBjffHRX.js +0 -111
  1039. package/dist/src-Cp7P7T08.js +0 -1696
  1040. package/dist/status-158fWh4A.js +0 -43
  1041. package/dist/status-BJIVLJnb.js +0 -1599
  1042. package/dist/status-BQiBI6N9.js +0 -126
  1043. package/dist/status-CZipXGUu.js +0 -121
  1044. package/dist/status-ZZIVFLI-.js +0 -606
  1045. package/dist/status-json-BNUy5Mem.js +0 -286
  1046. package/dist/status.link-channel-B694y1Xu.js +0 -138
  1047. package/dist/status.scan.deps.runtime-BcoKEzQD.js +0 -121
  1048. package/dist/status.scan.runtime-CqScDt-p.js +0 -114
  1049. package/dist/status.summary-AMek7qvI.js +0 -592
  1050. package/dist/status.summary.runtime-XgkcQ_kr.js +0 -113
  1051. package/dist/subagent-orphan-recovery-CrCYTmFC.js +0 -302
  1052. package/dist/subagent-registry-runtime-Cg-YvLx3.js +0 -106
  1053. package/dist/synology-chat-0G85jIqQ.js +0 -297
  1054. package/dist/system-cli-kZtSxKNm.js +0 -92
  1055. package/dist/telegram-DV0Wy89w.js +0 -109
  1056. package/dist/text-chunking-C2J2Oeul.js +0 -84
  1057. package/dist/tlon-DmK1NUVP.js +0 -433
  1058. package/dist/tui-D3bNPLG7.js +0 -3834
  1059. package/dist/tui-cli-DtMp9k_s.js +0 -132
  1060. package/dist/types.secrets-DuSPmmWB.js +0 -80
  1061. package/dist/ui-CeGztSEL.js +0 -31
  1062. package/dist/update-De7VudzP.js +0 -1036
  1063. package/dist/update-cli-BH8Pb-So.js +0 -1498
  1064. package/dist/update-offset-store-syELkdEW.js +0 -107
  1065. package/dist/update-runner-Cq-Q40T9.js +0 -1496
  1066. package/dist/web-CjMtvfSq.js +0 -107
  1067. package/dist/webhook-targets-_jTR0Bb_.js +0 -181
  1068. package/dist/webhooks-cli-DQ6u2Qau.js +0 -349
  1069. package/dist/whatsapp-CyLk16SZ.js +0 -109
  1070. package/dist/whatsapp-actions-Dzr2Wzqw.js +0 -162
  1071. package/dist/workspace-dirs-L1_QQ9mB.js +0 -2002
  1072. package/dist/zalo-CrehfXvK.js +0 -415
  1073. package/dist/zalouser-D1QD-O-I.js +0 -30911
  1074. package/dist/zod-schema.core-CWxzqcUs.js +0 -541
@@ -1,2586 +0,0 @@
1
- import { _ as resolveStateDir } from "./paths-D6AgsMTU.js";
2
- import { n as logError, t as logDebug } from "./logger-wrbK9-ju.js";
3
- import { n as VERSION } from "./version-rW_3ob2o.js";
4
- import { n as ENV_SECRET_REF_ID_RE } from "./types.secrets-DuSPmmWB.js";
5
- import { n as FILE_SECRET_REF_ID_PATTERN, r as SECRET_PROVIDER_ALIAS_PATTERN, t as EXEC_SECRET_REF_ID_JSON_SCHEMA_PATTERN } from "./ref-contract-D96lSYLs.js";
6
- import { i as isSecureWebSocketUrl, r as isLoopbackHost } from "./net-B_Iq_SVP.js";
7
- import { t as rawDataToString } from "./ws-BdqzOeOC.js";
8
- import { _ as GATEWAY_CLIENT_MODES, g as GATEWAY_CLIENT_IDS, v as GATEWAY_CLIENT_NAMES } from "./message-channel-CKeDAoOT.js";
9
- import { n as normalizeDeviceAuthScopes, t as normalizeDeviceAuthRole } from "./device-auth-Do04Bx9k.js";
10
- import { t as normalizeDeviceMetadataForAuth } from "./device-metadata-normalization-Df01eH_3.js";
11
- import fs from "node:fs";
12
- import path from "node:path";
13
- import crypto, { randomUUID } from "node:crypto";
14
- import { WebSocket } from "ws";
15
- import { Type } from "@sinclair/typebox";
16
- import AjvPkg from "ajv";
17
- //#region src/sessions/input-provenance.ts
18
- const INPUT_PROVENANCE_KIND_VALUES = [
19
- "external_user",
20
- "inter_session",
21
- "internal_system"
22
- ];
23
- function normalizeOptionalString(value) {
24
- if (typeof value !== "string") return;
25
- const trimmed = value.trim();
26
- return trimmed ? trimmed : void 0;
27
- }
28
- function isInputProvenanceKind(value) {
29
- return typeof value === "string" && INPUT_PROVENANCE_KIND_VALUES.includes(value);
30
- }
31
- function normalizeInputProvenance(value) {
32
- if (!value || typeof value !== "object") return;
33
- const record = value;
34
- if (!isInputProvenanceKind(record.kind)) return;
35
- return {
36
- kind: record.kind,
37
- originSessionId: normalizeOptionalString(record.originSessionId),
38
- sourceSessionKey: normalizeOptionalString(record.sourceSessionKey),
39
- sourceChannel: normalizeOptionalString(record.sourceChannel),
40
- sourceTool: normalizeOptionalString(record.sourceTool)
41
- };
42
- }
43
- function applyInputProvenanceToUserMessage(message, inputProvenance) {
44
- if (!inputProvenance) return message;
45
- if (message.role !== "user") return message;
46
- if (normalizeInputProvenance(message.provenance)) return message;
47
- return {
48
- ...message,
49
- provenance: inputProvenance
50
- };
51
- }
52
- function isInterSessionInputProvenance(value) {
53
- return normalizeInputProvenance(value)?.kind === "inter_session";
54
- }
55
- function hasInterSessionUserProvenance(message) {
56
- if (!message || message.role !== "user") return false;
57
- return isInterSessionInputProvenance(message.provenance);
58
- }
59
- //#endregion
60
- //#region src/infra/device-identity.ts
61
- function resolveDefaultIdentityPath() {
62
- return path.join(resolveStateDir(), "identity", "device.json");
63
- }
64
- function ensureDir(filePath) {
65
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
66
- }
67
- const ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
68
- function base64UrlEncode(buf) {
69
- return buf.toString("base64").replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/g, "");
70
- }
71
- function base64UrlDecode(input) {
72
- const normalized = input.replaceAll("-", "+").replaceAll("_", "/");
73
- const padded = normalized + "=".repeat((4 - normalized.length % 4) % 4);
74
- return Buffer.from(padded, "base64");
75
- }
76
- function derivePublicKeyRaw(publicKeyPem) {
77
- const spki = crypto.createPublicKey(publicKeyPem).export({
78
- type: "spki",
79
- format: "der"
80
- });
81
- 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);
82
- return spki;
83
- }
84
- function fingerprintPublicKey(publicKeyPem) {
85
- const raw = derivePublicKeyRaw(publicKeyPem);
86
- return crypto.createHash("sha256").update(raw).digest("hex");
87
- }
88
- function generateIdentity() {
89
- const { publicKey, privateKey } = crypto.generateKeyPairSync("ed25519");
90
- const publicKeyPem = publicKey.export({
91
- type: "spki",
92
- format: "pem"
93
- }).toString();
94
- const privateKeyPem = privateKey.export({
95
- type: "pkcs8",
96
- format: "pem"
97
- }).toString();
98
- return {
99
- deviceId: fingerprintPublicKey(publicKeyPem),
100
- publicKeyPem,
101
- privateKeyPem
102
- };
103
- }
104
- function loadOrCreateDeviceIdentity(filePath = resolveDefaultIdentityPath()) {
105
- try {
106
- if (fs.existsSync(filePath)) {
107
- const raw = fs.readFileSync(filePath, "utf8");
108
- const parsed = JSON.parse(raw);
109
- if (parsed?.version === 1 && typeof parsed.deviceId === "string" && typeof parsed.publicKeyPem === "string" && typeof parsed.privateKeyPem === "string") {
110
- const derivedId = fingerprintPublicKey(parsed.publicKeyPem);
111
- if (derivedId && derivedId !== parsed.deviceId) {
112
- const updated = {
113
- ...parsed,
114
- deviceId: derivedId
115
- };
116
- fs.writeFileSync(filePath, `${JSON.stringify(updated, null, 2)}\n`, { mode: 384 });
117
- try {
118
- fs.chmodSync(filePath, 384);
119
- } catch {}
120
- return {
121
- deviceId: derivedId,
122
- publicKeyPem: parsed.publicKeyPem,
123
- privateKeyPem: parsed.privateKeyPem
124
- };
125
- }
126
- return {
127
- deviceId: parsed.deviceId,
128
- publicKeyPem: parsed.publicKeyPem,
129
- privateKeyPem: parsed.privateKeyPem
130
- };
131
- }
132
- }
133
- } catch {}
134
- const identity = generateIdentity();
135
- ensureDir(filePath);
136
- const stored = {
137
- version: 1,
138
- deviceId: identity.deviceId,
139
- publicKeyPem: identity.publicKeyPem,
140
- privateKeyPem: identity.privateKeyPem,
141
- createdAtMs: Date.now()
142
- };
143
- fs.writeFileSync(filePath, `${JSON.stringify(stored, null, 2)}\n`, { mode: 384 });
144
- try {
145
- fs.chmodSync(filePath, 384);
146
- } catch {}
147
- return identity;
148
- }
149
- function signDevicePayload(privateKeyPem, payload) {
150
- const key = crypto.createPrivateKey(privateKeyPem);
151
- return base64UrlEncode(crypto.sign(null, Buffer.from(payload, "utf8"), key));
152
- }
153
- function normalizeDevicePublicKeyBase64Url(publicKey) {
154
- try {
155
- if (publicKey.includes("BEGIN")) return base64UrlEncode(derivePublicKeyRaw(publicKey));
156
- const raw = base64UrlDecode(publicKey);
157
- if (raw.length === 0) return null;
158
- return base64UrlEncode(raw);
159
- } catch {
160
- return null;
161
- }
162
- }
163
- function deriveDeviceIdFromPublicKey(publicKey) {
164
- try {
165
- const raw = publicKey.includes("BEGIN") ? derivePublicKeyRaw(publicKey) : base64UrlDecode(publicKey);
166
- if (raw.length === 0) return null;
167
- return crypto.createHash("sha256").update(raw).digest("hex");
168
- } catch {
169
- return null;
170
- }
171
- }
172
- function publicKeyRawBase64UrlFromPem(publicKeyPem) {
173
- return base64UrlEncode(derivePublicKeyRaw(publicKeyPem));
174
- }
175
- function verifyDeviceSignature(publicKey, payload, signatureBase64Url) {
176
- try {
177
- const key = publicKey.includes("BEGIN") ? crypto.createPublicKey(publicKey) : crypto.createPublicKey({
178
- key: Buffer.concat([ED25519_SPKI_PREFIX, base64UrlDecode(publicKey)]),
179
- type: "spki",
180
- format: "der"
181
- });
182
- const sig = (() => {
183
- try {
184
- return base64UrlDecode(signatureBase64Url);
185
- } catch {
186
- return Buffer.from(signatureBase64Url, "base64");
187
- }
188
- })();
189
- return crypto.verify(null, Buffer.from(payload, "utf8"), key, sig);
190
- } catch {
191
- return false;
192
- }
193
- }
194
- //#endregion
195
- //#region src/infra/tls/fingerprint.ts
196
- function normalizeFingerprint(input) {
197
- return input.trim().replace(/^sha-?256\s*:?\s*/i, "").replace(/[^a-fA-F0-9]/g, "").toLowerCase();
198
- }
199
- //#endregion
200
- //#region src/shared/device-auth-store.ts
201
- function loadDeviceAuthTokenFromStore(params) {
202
- const store = params.adapter.readStore();
203
- if (!store || store.deviceId !== params.deviceId) return null;
204
- const role = normalizeDeviceAuthRole(params.role);
205
- const entry = store.tokens[role];
206
- if (!entry || typeof entry.token !== "string") return null;
207
- return entry;
208
- }
209
- function storeDeviceAuthTokenInStore(params) {
210
- const role = normalizeDeviceAuthRole(params.role);
211
- const existing = params.adapter.readStore();
212
- const next = {
213
- version: 1,
214
- deviceId: params.deviceId,
215
- tokens: existing && existing.deviceId === params.deviceId && existing.tokens ? { ...existing.tokens } : {}
216
- };
217
- const entry = {
218
- token: params.token,
219
- role,
220
- scopes: normalizeDeviceAuthScopes(params.scopes),
221
- updatedAtMs: Date.now()
222
- };
223
- next.tokens[role] = entry;
224
- params.adapter.writeStore(next);
225
- return entry;
226
- }
227
- function clearDeviceAuthTokenFromStore(params) {
228
- const store = params.adapter.readStore();
229
- if (!store || store.deviceId !== params.deviceId) return;
230
- const role = normalizeDeviceAuthRole(params.role);
231
- if (!store.tokens[role]) return;
232
- const next = {
233
- version: 1,
234
- deviceId: store.deviceId,
235
- tokens: { ...store.tokens }
236
- };
237
- delete next.tokens[role];
238
- params.adapter.writeStore(next);
239
- }
240
- //#endregion
241
- //#region src/infra/device-auth-store.ts
242
- const DEVICE_AUTH_FILE = "device-auth.json";
243
- function resolveDeviceAuthPath(env = process.env) {
244
- return path.join(resolveStateDir(env), "identity", DEVICE_AUTH_FILE);
245
- }
246
- function readStore(filePath) {
247
- try {
248
- if (!fs.existsSync(filePath)) return null;
249
- const raw = fs.readFileSync(filePath, "utf8");
250
- const parsed = JSON.parse(raw);
251
- if (parsed?.version !== 1 || typeof parsed.deviceId !== "string") return null;
252
- if (!parsed.tokens || typeof parsed.tokens !== "object") return null;
253
- return parsed;
254
- } catch {
255
- return null;
256
- }
257
- }
258
- function writeStore(filePath, store) {
259
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
260
- fs.writeFileSync(filePath, `${JSON.stringify(store, null, 2)}\n`, { mode: 384 });
261
- try {
262
- fs.chmodSync(filePath, 384);
263
- } catch {}
264
- }
265
- function loadDeviceAuthToken(params) {
266
- const filePath = resolveDeviceAuthPath(params.env);
267
- return loadDeviceAuthTokenFromStore({
268
- adapter: {
269
- readStore: () => readStore(filePath),
270
- writeStore: (_store) => {}
271
- },
272
- deviceId: params.deviceId,
273
- role: params.role
274
- });
275
- }
276
- function storeDeviceAuthToken(params) {
277
- const filePath = resolveDeviceAuthPath(params.env);
278
- return storeDeviceAuthTokenInStore({
279
- adapter: {
280
- readStore: () => readStore(filePath),
281
- writeStore: (store) => writeStore(filePath, store)
282
- },
283
- deviceId: params.deviceId,
284
- role: params.role,
285
- token: params.token,
286
- scopes: params.scopes
287
- });
288
- }
289
- function clearDeviceAuthToken(params) {
290
- const filePath = resolveDeviceAuthPath(params.env);
291
- clearDeviceAuthTokenFromStore({
292
- adapter: {
293
- readStore: () => readStore(filePath),
294
- writeStore: (store) => writeStore(filePath, store)
295
- },
296
- deviceId: params.deviceId,
297
- role: params.role
298
- });
299
- }
300
- //#endregion
301
- //#region src/gateway/device-auth.ts
302
- function buildDeviceAuthPayload(params) {
303
- const scopes = params.scopes.join(",");
304
- const token = params.token ?? "";
305
- return [
306
- "v2",
307
- params.deviceId,
308
- params.clientId,
309
- params.clientMode,
310
- params.role,
311
- scopes,
312
- String(params.signedAtMs),
313
- token,
314
- params.nonce
315
- ].join("|");
316
- }
317
- function buildDeviceAuthPayloadV3(params) {
318
- const scopes = params.scopes.join(",");
319
- const token = params.token ?? "";
320
- const platform = normalizeDeviceMetadataForAuth(params.platform);
321
- const deviceFamily = normalizeDeviceMetadataForAuth(params.deviceFamily);
322
- return [
323
- "v3",
324
- params.deviceId,
325
- params.clientId,
326
- params.clientMode,
327
- params.role,
328
- scopes,
329
- String(params.signedAtMs),
330
- token,
331
- params.nonce,
332
- platform,
333
- deviceFamily
334
- ].join("|");
335
- }
336
- //#endregion
337
- //#region src/gateway/protocol/connect-error-details.ts
338
- const ConnectErrorDetailCodes = {
339
- AUTH_REQUIRED: "AUTH_REQUIRED",
340
- AUTH_UNAUTHORIZED: "AUTH_UNAUTHORIZED",
341
- AUTH_TOKEN_MISSING: "AUTH_TOKEN_MISSING",
342
- AUTH_TOKEN_MISMATCH: "AUTH_TOKEN_MISMATCH",
343
- AUTH_TOKEN_NOT_CONFIGURED: "AUTH_TOKEN_NOT_CONFIGURED",
344
- AUTH_PASSWORD_MISSING: "AUTH_PASSWORD_MISSING",
345
- AUTH_PASSWORD_MISMATCH: "AUTH_PASSWORD_MISMATCH",
346
- AUTH_PASSWORD_NOT_CONFIGURED: "AUTH_PASSWORD_NOT_CONFIGURED",
347
- AUTH_BOOTSTRAP_TOKEN_INVALID: "AUTH_BOOTSTRAP_TOKEN_INVALID",
348
- AUTH_DEVICE_TOKEN_MISMATCH: "AUTH_DEVICE_TOKEN_MISMATCH",
349
- AUTH_RATE_LIMITED: "AUTH_RATE_LIMITED",
350
- AUTH_TAILSCALE_IDENTITY_MISSING: "AUTH_TAILSCALE_IDENTITY_MISSING",
351
- AUTH_TAILSCALE_PROXY_MISSING: "AUTH_TAILSCALE_PROXY_MISSING",
352
- AUTH_TAILSCALE_WHOIS_FAILED: "AUTH_TAILSCALE_WHOIS_FAILED",
353
- AUTH_TAILSCALE_IDENTITY_MISMATCH: "AUTH_TAILSCALE_IDENTITY_MISMATCH",
354
- CONTROL_UI_ORIGIN_NOT_ALLOWED: "CONTROL_UI_ORIGIN_NOT_ALLOWED",
355
- CONTROL_UI_DEVICE_IDENTITY_REQUIRED: "CONTROL_UI_DEVICE_IDENTITY_REQUIRED",
356
- DEVICE_IDENTITY_REQUIRED: "DEVICE_IDENTITY_REQUIRED",
357
- DEVICE_AUTH_INVALID: "DEVICE_AUTH_INVALID",
358
- DEVICE_AUTH_DEVICE_ID_MISMATCH: "DEVICE_AUTH_DEVICE_ID_MISMATCH",
359
- DEVICE_AUTH_SIGNATURE_EXPIRED: "DEVICE_AUTH_SIGNATURE_EXPIRED",
360
- DEVICE_AUTH_NONCE_REQUIRED: "DEVICE_AUTH_NONCE_REQUIRED",
361
- DEVICE_AUTH_NONCE_MISMATCH: "DEVICE_AUTH_NONCE_MISMATCH",
362
- DEVICE_AUTH_SIGNATURE_INVALID: "DEVICE_AUTH_SIGNATURE_INVALID",
363
- DEVICE_AUTH_PUBLIC_KEY_INVALID: "DEVICE_AUTH_PUBLIC_KEY_INVALID",
364
- PAIRING_REQUIRED: "PAIRING_REQUIRED"
365
- };
366
- const CONNECT_RECOVERY_NEXT_STEP_VALUES = new Set([
367
- "retry_with_device_token",
368
- "update_auth_configuration",
369
- "update_auth_credentials",
370
- "wait_then_retry",
371
- "review_auth_configuration"
372
- ]);
373
- function resolveAuthConnectErrorDetailCode(reason) {
374
- switch (reason) {
375
- case "token_missing": return ConnectErrorDetailCodes.AUTH_TOKEN_MISSING;
376
- case "token_mismatch": return ConnectErrorDetailCodes.AUTH_TOKEN_MISMATCH;
377
- case "token_missing_config": return ConnectErrorDetailCodes.AUTH_TOKEN_NOT_CONFIGURED;
378
- case "password_missing": return ConnectErrorDetailCodes.AUTH_PASSWORD_MISSING;
379
- case "password_mismatch": return ConnectErrorDetailCodes.AUTH_PASSWORD_MISMATCH;
380
- case "password_missing_config": return ConnectErrorDetailCodes.AUTH_PASSWORD_NOT_CONFIGURED;
381
- case "bootstrap_token_invalid": return ConnectErrorDetailCodes.AUTH_BOOTSTRAP_TOKEN_INVALID;
382
- case "tailscale_user_missing": return ConnectErrorDetailCodes.AUTH_TAILSCALE_IDENTITY_MISSING;
383
- case "tailscale_proxy_missing": return ConnectErrorDetailCodes.AUTH_TAILSCALE_PROXY_MISSING;
384
- case "tailscale_whois_failed": return ConnectErrorDetailCodes.AUTH_TAILSCALE_WHOIS_FAILED;
385
- case "tailscale_user_mismatch": return ConnectErrorDetailCodes.AUTH_TAILSCALE_IDENTITY_MISMATCH;
386
- case "rate_limited": return ConnectErrorDetailCodes.AUTH_RATE_LIMITED;
387
- case "device_token_mismatch": return ConnectErrorDetailCodes.AUTH_DEVICE_TOKEN_MISMATCH;
388
- case void 0: return ConnectErrorDetailCodes.AUTH_REQUIRED;
389
- default: return ConnectErrorDetailCodes.AUTH_UNAUTHORIZED;
390
- }
391
- }
392
- function resolveDeviceAuthConnectErrorDetailCode(reason) {
393
- switch (reason) {
394
- case "device-id-mismatch": return ConnectErrorDetailCodes.DEVICE_AUTH_DEVICE_ID_MISMATCH;
395
- case "device-signature-stale": return ConnectErrorDetailCodes.DEVICE_AUTH_SIGNATURE_EXPIRED;
396
- case "device-nonce-missing": return ConnectErrorDetailCodes.DEVICE_AUTH_NONCE_REQUIRED;
397
- case "device-nonce-mismatch": return ConnectErrorDetailCodes.DEVICE_AUTH_NONCE_MISMATCH;
398
- case "device-signature": return ConnectErrorDetailCodes.DEVICE_AUTH_SIGNATURE_INVALID;
399
- case "device-public-key": return ConnectErrorDetailCodes.DEVICE_AUTH_PUBLIC_KEY_INVALID;
400
- default: return ConnectErrorDetailCodes.DEVICE_AUTH_INVALID;
401
- }
402
- }
403
- function readConnectErrorDetailCode(details) {
404
- if (!details || typeof details !== "object" || Array.isArray(details)) return null;
405
- const code = details.code;
406
- return typeof code === "string" && code.trim().length > 0 ? code : null;
407
- }
408
- function readConnectErrorRecoveryAdvice(details) {
409
- if (!details || typeof details !== "object" || Array.isArray(details)) return {};
410
- const raw = details;
411
- const canRetryWithDeviceToken = typeof raw.canRetryWithDeviceToken === "boolean" ? raw.canRetryWithDeviceToken : void 0;
412
- const normalizedNextStep = typeof raw.recommendedNextStep === "string" ? raw.recommendedNextStep.trim() : "";
413
- return {
414
- canRetryWithDeviceToken,
415
- recommendedNextStep: CONNECT_RECOVERY_NEXT_STEP_VALUES.has(normalizedNextStep) ? normalizedNextStep : void 0
416
- };
417
- }
418
- function parseSessionLabel(raw) {
419
- if (typeof raw !== "string") return {
420
- ok: false,
421
- error: "invalid label: must be a string"
422
- };
423
- const trimmed = raw.trim();
424
- if (!trimmed) return {
425
- ok: false,
426
- error: "invalid label: empty"
427
- };
428
- if (trimmed.length > 64) return {
429
- ok: false,
430
- error: `invalid label: too long (max 64)`
431
- };
432
- return {
433
- ok: true,
434
- label: trimmed
435
- };
436
- }
437
- //#endregion
438
- //#region src/gateway/protocol/schema/primitives.ts
439
- const NonEmptyString = Type.String({ minLength: 1 });
440
- const ChatSendSessionKeyString = Type.String({
441
- minLength: 1,
442
- maxLength: 512
443
- });
444
- const SessionLabelString = Type.String({
445
- minLength: 1,
446
- maxLength: 64
447
- });
448
- const InputProvenanceSchema = Type.Object({
449
- kind: Type.String({ enum: [...INPUT_PROVENANCE_KIND_VALUES] }),
450
- originSessionId: Type.Optional(Type.String()),
451
- sourceSessionKey: Type.Optional(Type.String()),
452
- sourceChannel: Type.Optional(Type.String()),
453
- sourceTool: Type.Optional(Type.String())
454
- }, { additionalProperties: false });
455
- const GatewayClientIdSchema = Type.Union(Object.values(GATEWAY_CLIENT_IDS).map((value) => Type.Literal(value)));
456
- const GatewayClientModeSchema = Type.Union(Object.values(GATEWAY_CLIENT_MODES).map((value) => Type.Literal(value)));
457
- Type.Union([
458
- Type.Literal("env"),
459
- Type.Literal("file"),
460
- Type.Literal("exec")
461
- ]);
462
- const SecretProviderAliasString = Type.String({ pattern: SECRET_PROVIDER_ALIAS_PATTERN.source });
463
- const EnvSecretRefSchema = Type.Object({
464
- source: Type.Literal("env"),
465
- provider: SecretProviderAliasString,
466
- id: Type.String({ pattern: ENV_SECRET_REF_ID_RE.source })
467
- }, { additionalProperties: false });
468
- const FileSecretRefSchema = Type.Object({
469
- source: Type.Literal("file"),
470
- provider: SecretProviderAliasString,
471
- id: Type.String({ pattern: FILE_SECRET_REF_ID_PATTERN.source })
472
- }, { additionalProperties: false });
473
- const ExecSecretRefSchema = Type.Object({
474
- source: Type.Literal("exec"),
475
- provider: SecretProviderAliasString,
476
- id: Type.String({ pattern: EXEC_SECRET_REF_ID_JSON_SCHEMA_PATTERN })
477
- }, { additionalProperties: false });
478
- const SecretRefSchema = Type.Union([
479
- EnvSecretRefSchema,
480
- FileSecretRefSchema,
481
- ExecSecretRefSchema
482
- ]);
483
- const SecretInputSchema = Type.Union([Type.String(), SecretRefSchema]);
484
- //#endregion
485
- //#region src/gateway/protocol/schema/agent.ts
486
- const AgentInternalEventSchema = Type.Object({
487
- type: Type.Literal("task_completion"),
488
- source: Type.String({ enum: ["subagent", "cron"] }),
489
- childSessionKey: Type.String(),
490
- childSessionId: Type.Optional(Type.String()),
491
- announceType: Type.String(),
492
- taskLabel: Type.String(),
493
- status: Type.String({ enum: [
494
- "ok",
495
- "timeout",
496
- "error",
497
- "unknown"
498
- ] }),
499
- statusLabel: Type.String(),
500
- result: Type.String(),
501
- statsLine: Type.Optional(Type.String()),
502
- replyInstruction: Type.String()
503
- }, { additionalProperties: false });
504
- Type.Object({
505
- runId: NonEmptyString,
506
- seq: Type.Integer({ minimum: 0 }),
507
- stream: NonEmptyString,
508
- ts: Type.Integer({ minimum: 0 }),
509
- data: Type.Record(Type.String(), Type.Unknown())
510
- }, { additionalProperties: false });
511
- const SendParamsSchema = Type.Object({
512
- to: NonEmptyString,
513
- message: Type.Optional(Type.String()),
514
- mediaUrl: Type.Optional(Type.String()),
515
- mediaUrls: Type.Optional(Type.Array(Type.String())),
516
- gifPlayback: Type.Optional(Type.Boolean()),
517
- channel: Type.Optional(Type.String()),
518
- accountId: Type.Optional(Type.String()),
519
- agentId: Type.Optional(Type.String()),
520
- threadId: Type.Optional(Type.String()),
521
- sessionKey: Type.Optional(Type.String()),
522
- idempotencyKey: NonEmptyString
523
- }, { additionalProperties: false });
524
- const PollParamsSchema = Type.Object({
525
- to: NonEmptyString,
526
- question: NonEmptyString,
527
- options: Type.Array(NonEmptyString, {
528
- minItems: 2,
529
- maxItems: 12
530
- }),
531
- maxSelections: Type.Optional(Type.Integer({
532
- minimum: 1,
533
- maximum: 12
534
- })),
535
- durationSeconds: Type.Optional(Type.Integer({
536
- minimum: 1,
537
- maximum: 604800
538
- })),
539
- durationHours: Type.Optional(Type.Integer({ minimum: 1 })),
540
- silent: Type.Optional(Type.Boolean()),
541
- isAnonymous: Type.Optional(Type.Boolean()),
542
- threadId: Type.Optional(Type.String()),
543
- channel: Type.Optional(Type.String()),
544
- accountId: Type.Optional(Type.String()),
545
- idempotencyKey: NonEmptyString
546
- }, { additionalProperties: false });
547
- const AgentParamsSchema = Type.Object({
548
- message: NonEmptyString,
549
- agentId: Type.Optional(NonEmptyString),
550
- to: Type.Optional(Type.String()),
551
- replyTo: Type.Optional(Type.String()),
552
- sessionId: Type.Optional(Type.String()),
553
- sessionKey: Type.Optional(Type.String()),
554
- thinking: Type.Optional(Type.String()),
555
- deliver: Type.Optional(Type.Boolean()),
556
- attachments: Type.Optional(Type.Array(Type.Unknown())),
557
- channel: Type.Optional(Type.String()),
558
- replyChannel: Type.Optional(Type.String()),
559
- accountId: Type.Optional(Type.String()),
560
- replyAccountId: Type.Optional(Type.String()),
561
- threadId: Type.Optional(Type.String()),
562
- groupId: Type.Optional(Type.String()),
563
- groupChannel: Type.Optional(Type.String()),
564
- groupSpace: Type.Optional(Type.String()),
565
- timeout: Type.Optional(Type.Integer({ minimum: 0 })),
566
- bestEffortDeliver: Type.Optional(Type.Boolean()),
567
- lane: Type.Optional(Type.String()),
568
- extraSystemPrompt: Type.Optional(Type.String()),
569
- internalEvents: Type.Optional(Type.Array(AgentInternalEventSchema)),
570
- inputProvenance: Type.Optional(InputProvenanceSchema),
571
- idempotencyKey: NonEmptyString,
572
- label: Type.Optional(SessionLabelString)
573
- }, { additionalProperties: false });
574
- const AgentIdentityParamsSchema = Type.Object({
575
- agentId: Type.Optional(NonEmptyString),
576
- sessionKey: Type.Optional(Type.String())
577
- }, { additionalProperties: false });
578
- Type.Object({
579
- agentId: NonEmptyString,
580
- name: Type.Optional(NonEmptyString),
581
- avatar: Type.Optional(NonEmptyString),
582
- emoji: Type.Optional(NonEmptyString)
583
- }, { additionalProperties: false });
584
- const AgentWaitParamsSchema = Type.Object({
585
- runId: NonEmptyString,
586
- timeoutMs: Type.Optional(Type.Integer({ minimum: 0 }))
587
- }, { additionalProperties: false });
588
- const WakeParamsSchema = Type.Object({
589
- mode: Type.Union([Type.Literal("now"), Type.Literal("next-heartbeat")]),
590
- text: NonEmptyString
591
- }, { additionalProperties: false });
592
- //#endregion
593
- //#region src/gateway/protocol/schema/agents-models-skills.ts
594
- const ModelChoiceSchema = Type.Object({
595
- id: NonEmptyString,
596
- name: NonEmptyString,
597
- provider: NonEmptyString,
598
- contextWindow: Type.Optional(Type.Integer({ minimum: 1 })),
599
- reasoning: Type.Optional(Type.Boolean())
600
- }, { additionalProperties: false });
601
- const AgentSummarySchema = Type.Object({
602
- id: NonEmptyString,
603
- name: Type.Optional(NonEmptyString),
604
- identity: Type.Optional(Type.Object({
605
- name: Type.Optional(NonEmptyString),
606
- theme: Type.Optional(NonEmptyString),
607
- emoji: Type.Optional(NonEmptyString),
608
- avatar: Type.Optional(NonEmptyString),
609
- avatarUrl: Type.Optional(NonEmptyString)
610
- }, { additionalProperties: false }))
611
- }, { additionalProperties: false });
612
- const AgentsListParamsSchema = Type.Object({}, { additionalProperties: false });
613
- Type.Object({
614
- defaultId: NonEmptyString,
615
- mainKey: NonEmptyString,
616
- scope: Type.Union([Type.Literal("per-sender"), Type.Literal("global")]),
617
- agents: Type.Array(AgentSummarySchema)
618
- }, { additionalProperties: false });
619
- const AgentsCreateParamsSchema = Type.Object({
620
- name: NonEmptyString,
621
- workspace: NonEmptyString,
622
- emoji: Type.Optional(Type.String()),
623
- avatar: Type.Optional(Type.String())
624
- }, { additionalProperties: false });
625
- Type.Object({
626
- ok: Type.Literal(true),
627
- agentId: NonEmptyString,
628
- name: NonEmptyString,
629
- workspace: NonEmptyString
630
- }, { additionalProperties: false });
631
- const AgentsUpdateParamsSchema = Type.Object({
632
- agentId: NonEmptyString,
633
- name: Type.Optional(NonEmptyString),
634
- workspace: Type.Optional(NonEmptyString),
635
- model: Type.Optional(NonEmptyString),
636
- avatar: Type.Optional(Type.String())
637
- }, { additionalProperties: false });
638
- Type.Object({
639
- ok: Type.Literal(true),
640
- agentId: NonEmptyString
641
- }, { additionalProperties: false });
642
- const AgentsDeleteParamsSchema = Type.Object({
643
- agentId: NonEmptyString,
644
- deleteFiles: Type.Optional(Type.Boolean())
645
- }, { additionalProperties: false });
646
- Type.Object({
647
- ok: Type.Literal(true),
648
- agentId: NonEmptyString,
649
- removedBindings: Type.Integer({ minimum: 0 })
650
- }, { additionalProperties: false });
651
- const AgentsFileEntrySchema = Type.Object({
652
- name: NonEmptyString,
653
- path: NonEmptyString,
654
- missing: Type.Boolean(),
655
- size: Type.Optional(Type.Integer({ minimum: 0 })),
656
- updatedAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
657
- content: Type.Optional(Type.String())
658
- }, { additionalProperties: false });
659
- const AgentsFilesListParamsSchema = Type.Object({ agentId: NonEmptyString }, { additionalProperties: false });
660
- Type.Object({
661
- agentId: NonEmptyString,
662
- workspace: NonEmptyString,
663
- files: Type.Array(AgentsFileEntrySchema)
664
- }, { additionalProperties: false });
665
- const AgentsFilesGetParamsSchema = Type.Object({
666
- agentId: NonEmptyString,
667
- name: NonEmptyString
668
- }, { additionalProperties: false });
669
- Type.Object({
670
- agentId: NonEmptyString,
671
- workspace: NonEmptyString,
672
- file: AgentsFileEntrySchema
673
- }, { additionalProperties: false });
674
- const AgentsFilesSetParamsSchema = Type.Object({
675
- agentId: NonEmptyString,
676
- name: NonEmptyString,
677
- content: Type.String()
678
- }, { additionalProperties: false });
679
- Type.Object({
680
- ok: Type.Literal(true),
681
- agentId: NonEmptyString,
682
- workspace: NonEmptyString,
683
- file: AgentsFileEntrySchema
684
- }, { additionalProperties: false });
685
- const ModelsListParamsSchema = Type.Object({}, { additionalProperties: false });
686
- Type.Object({ models: Type.Array(ModelChoiceSchema) }, { additionalProperties: false });
687
- const SkillsStatusParamsSchema = Type.Object({ agentId: Type.Optional(NonEmptyString) }, { additionalProperties: false });
688
- const SkillsBinsParamsSchema = Type.Object({}, { additionalProperties: false });
689
- Type.Object({ bins: Type.Array(NonEmptyString) }, { additionalProperties: false });
690
- const SkillsInstallParamsSchema = Type.Object({
691
- name: NonEmptyString,
692
- installId: NonEmptyString,
693
- timeoutMs: Type.Optional(Type.Integer({ minimum: 1e3 }))
694
- }, { additionalProperties: false });
695
- const SkillsUpdateParamsSchema = Type.Object({
696
- skillKey: NonEmptyString,
697
- enabled: Type.Optional(Type.Boolean()),
698
- apiKey: Type.Optional(Type.String()),
699
- env: Type.Optional(Type.Record(NonEmptyString, Type.String()))
700
- }, { additionalProperties: false });
701
- const ToolsCatalogParamsSchema = Type.Object({
702
- agentId: Type.Optional(NonEmptyString),
703
- includePlugins: Type.Optional(Type.Boolean())
704
- }, { additionalProperties: false });
705
- const ToolCatalogProfileSchema = Type.Object({
706
- id: Type.Union([
707
- Type.Literal("minimal"),
708
- Type.Literal("coding"),
709
- Type.Literal("messaging"),
710
- Type.Literal("full")
711
- ]),
712
- label: NonEmptyString
713
- }, { additionalProperties: false });
714
- const ToolCatalogEntrySchema = Type.Object({
715
- id: NonEmptyString,
716
- label: NonEmptyString,
717
- description: Type.String(),
718
- source: Type.Union([Type.Literal("core"), Type.Literal("plugin")]),
719
- pluginId: Type.Optional(NonEmptyString),
720
- optional: Type.Optional(Type.Boolean()),
721
- defaultProfiles: Type.Array(Type.Union([
722
- Type.Literal("minimal"),
723
- Type.Literal("coding"),
724
- Type.Literal("messaging"),
725
- Type.Literal("full")
726
- ]))
727
- }, { additionalProperties: false });
728
- const ToolCatalogGroupSchema = Type.Object({
729
- id: NonEmptyString,
730
- label: NonEmptyString,
731
- source: Type.Union([Type.Literal("core"), Type.Literal("plugin")]),
732
- pluginId: Type.Optional(NonEmptyString),
733
- tools: Type.Array(ToolCatalogEntrySchema)
734
- }, { additionalProperties: false });
735
- Type.Object({
736
- agentId: NonEmptyString,
737
- profiles: Type.Array(ToolCatalogProfileSchema),
738
- groups: Type.Array(ToolCatalogGroupSchema)
739
- }, { additionalProperties: false });
740
- //#endregion
741
- //#region src/gateway/protocol/schema/channels.ts
742
- const TalkModeParamsSchema = Type.Object({
743
- enabled: Type.Boolean(),
744
- phase: Type.Optional(Type.String())
745
- }, { additionalProperties: false });
746
- const TalkConfigParamsSchema = Type.Object({ includeSecrets: Type.Optional(Type.Boolean()) }, { additionalProperties: false });
747
- const talkProviderFieldSchemas = {
748
- voiceId: Type.Optional(Type.String()),
749
- voiceAliases: Type.Optional(Type.Record(Type.String(), Type.String())),
750
- modelId: Type.Optional(Type.String()),
751
- outputFormat: Type.Optional(Type.String()),
752
- apiKey: Type.Optional(SecretInputSchema)
753
- };
754
- const TalkProviderConfigSchema = Type.Object(talkProviderFieldSchemas, { additionalProperties: true });
755
- const ResolvedTalkConfigSchema = Type.Object({
756
- provider: Type.String(),
757
- config: TalkProviderConfigSchema
758
- }, { additionalProperties: false });
759
- const LegacyTalkConfigSchema = Type.Object({
760
- ...talkProviderFieldSchemas,
761
- interruptOnSpeech: Type.Optional(Type.Boolean()),
762
- silenceTimeoutMs: Type.Optional(Type.Integer({ minimum: 1 }))
763
- }, { additionalProperties: false });
764
- const NormalizedTalkConfigSchema = Type.Object({
765
- provider: Type.Optional(Type.String()),
766
- providers: Type.Optional(Type.Record(Type.String(), TalkProviderConfigSchema)),
767
- resolved: ResolvedTalkConfigSchema,
768
- ...talkProviderFieldSchemas,
769
- interruptOnSpeech: Type.Optional(Type.Boolean()),
770
- silenceTimeoutMs: Type.Optional(Type.Integer({ minimum: 1 }))
771
- }, { additionalProperties: false });
772
- const TalkConfigResultSchema = Type.Object({ config: Type.Object({
773
- talk: Type.Optional(Type.Union([LegacyTalkConfigSchema, NormalizedTalkConfigSchema])),
774
- session: Type.Optional(Type.Object({ mainKey: Type.Optional(Type.String()) }, { additionalProperties: false })),
775
- ui: Type.Optional(Type.Object({ seamColor: Type.Optional(Type.String()) }, { additionalProperties: false }))
776
- }, { additionalProperties: false }) }, { additionalProperties: false });
777
- const ChannelsStatusParamsSchema = Type.Object({
778
- probe: Type.Optional(Type.Boolean()),
779
- timeoutMs: Type.Optional(Type.Integer({ minimum: 0 }))
780
- }, { additionalProperties: false });
781
- const ChannelAccountSnapshotSchema = Type.Object({
782
- accountId: NonEmptyString,
783
- name: Type.Optional(Type.String()),
784
- enabled: Type.Optional(Type.Boolean()),
785
- configured: Type.Optional(Type.Boolean()),
786
- linked: Type.Optional(Type.Boolean()),
787
- running: Type.Optional(Type.Boolean()),
788
- connected: Type.Optional(Type.Boolean()),
789
- reconnectAttempts: Type.Optional(Type.Integer({ minimum: 0 })),
790
- lastConnectedAt: Type.Optional(Type.Integer({ minimum: 0 })),
791
- lastError: Type.Optional(Type.String()),
792
- lastStartAt: Type.Optional(Type.Integer({ minimum: 0 })),
793
- lastStopAt: Type.Optional(Type.Integer({ minimum: 0 })),
794
- lastInboundAt: Type.Optional(Type.Integer({ minimum: 0 })),
795
- lastOutboundAt: Type.Optional(Type.Integer({ minimum: 0 })),
796
- busy: Type.Optional(Type.Boolean()),
797
- activeRuns: Type.Optional(Type.Integer({ minimum: 0 })),
798
- lastRunActivityAt: Type.Optional(Type.Integer({ minimum: 0 })),
799
- lastProbeAt: Type.Optional(Type.Integer({ minimum: 0 })),
800
- mode: Type.Optional(Type.String()),
801
- dmPolicy: Type.Optional(Type.String()),
802
- allowFrom: Type.Optional(Type.Array(Type.String())),
803
- tokenSource: Type.Optional(Type.String()),
804
- botTokenSource: Type.Optional(Type.String()),
805
- appTokenSource: Type.Optional(Type.String()),
806
- baseUrl: Type.Optional(Type.String()),
807
- allowUnmentionedGroups: Type.Optional(Type.Boolean()),
808
- cliPath: Type.Optional(Type.Union([Type.String(), Type.Null()])),
809
- dbPath: Type.Optional(Type.Union([Type.String(), Type.Null()])),
810
- port: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
811
- probe: Type.Optional(Type.Unknown()),
812
- audit: Type.Optional(Type.Unknown()),
813
- application: Type.Optional(Type.Unknown())
814
- }, { additionalProperties: true });
815
- const ChannelUiMetaSchema = Type.Object({
816
- id: NonEmptyString,
817
- label: NonEmptyString,
818
- detailLabel: NonEmptyString,
819
- systemImage: Type.Optional(Type.String())
820
- }, { additionalProperties: false });
821
- Type.Object({
822
- ts: Type.Integer({ minimum: 0 }),
823
- channelOrder: Type.Array(NonEmptyString),
824
- channelLabels: Type.Record(NonEmptyString, NonEmptyString),
825
- channelDetailLabels: Type.Optional(Type.Record(NonEmptyString, NonEmptyString)),
826
- channelSystemImages: Type.Optional(Type.Record(NonEmptyString, NonEmptyString)),
827
- channelMeta: Type.Optional(Type.Array(ChannelUiMetaSchema)),
828
- channels: Type.Record(NonEmptyString, Type.Unknown()),
829
- channelAccounts: Type.Record(NonEmptyString, Type.Array(ChannelAccountSnapshotSchema)),
830
- channelDefaultAccountId: Type.Record(NonEmptyString, NonEmptyString)
831
- }, { additionalProperties: false });
832
- const ChannelsLogoutParamsSchema = Type.Object({
833
- channel: NonEmptyString,
834
- accountId: Type.Optional(Type.String())
835
- }, { additionalProperties: false });
836
- const WebLoginStartParamsSchema = Type.Object({
837
- force: Type.Optional(Type.Boolean()),
838
- timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
839
- verbose: Type.Optional(Type.Boolean()),
840
- accountId: Type.Optional(Type.String())
841
- }, { additionalProperties: false });
842
- const WebLoginWaitParamsSchema = Type.Object({
843
- timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
844
- accountId: Type.Optional(Type.String())
845
- }, { additionalProperties: false });
846
- //#endregion
847
- //#region src/gateway/protocol/schema/config.ts
848
- const ConfigSchemaLookupPathString = Type.String({
849
- minLength: 1,
850
- maxLength: 1024,
851
- pattern: "^[A-Za-z0-9_./\\[\\]\\-*]+$"
852
- });
853
- const ConfigGetParamsSchema = Type.Object({}, { additionalProperties: false });
854
- const ConfigSetParamsSchema = Type.Object({
855
- raw: NonEmptyString,
856
- baseHash: Type.Optional(NonEmptyString)
857
- }, { additionalProperties: false });
858
- const ConfigApplyLikeParamsSchema = Type.Object({
859
- raw: NonEmptyString,
860
- baseHash: Type.Optional(NonEmptyString),
861
- sessionKey: Type.Optional(Type.String()),
862
- note: Type.Optional(Type.String()),
863
- restartDelayMs: Type.Optional(Type.Integer({ minimum: 0 }))
864
- }, { additionalProperties: false });
865
- const ConfigApplyParamsSchema = ConfigApplyLikeParamsSchema;
866
- const ConfigPatchParamsSchema = ConfigApplyLikeParamsSchema;
867
- const ConfigSchemaParamsSchema = Type.Object({}, { additionalProperties: false });
868
- const ConfigSchemaLookupParamsSchema = Type.Object({ path: ConfigSchemaLookupPathString }, { additionalProperties: false });
869
- const UpdateRunParamsSchema = Type.Object({
870
- sessionKey: Type.Optional(Type.String()),
871
- note: Type.Optional(Type.String()),
872
- restartDelayMs: Type.Optional(Type.Integer({ minimum: 0 })),
873
- timeoutMs: Type.Optional(Type.Integer({ minimum: 1 }))
874
- }, { additionalProperties: false });
875
- const ConfigUiHintSchema = Type.Object({
876
- label: Type.Optional(Type.String()),
877
- help: Type.Optional(Type.String()),
878
- tags: Type.Optional(Type.Array(Type.String())),
879
- group: Type.Optional(Type.String()),
880
- order: Type.Optional(Type.Integer()),
881
- advanced: Type.Optional(Type.Boolean()),
882
- sensitive: Type.Optional(Type.Boolean()),
883
- placeholder: Type.Optional(Type.String()),
884
- itemTemplate: Type.Optional(Type.Unknown())
885
- }, { additionalProperties: false });
886
- Type.Object({
887
- schema: Type.Unknown(),
888
- uiHints: Type.Record(Type.String(), ConfigUiHintSchema),
889
- version: NonEmptyString,
890
- generatedAt: NonEmptyString
891
- }, { additionalProperties: false });
892
- const ConfigSchemaLookupChildSchema = Type.Object({
893
- key: NonEmptyString,
894
- path: NonEmptyString,
895
- type: Type.Optional(Type.Union([Type.String(), Type.Array(Type.String())])),
896
- required: Type.Boolean(),
897
- hasChildren: Type.Boolean(),
898
- hint: Type.Optional(ConfigUiHintSchema),
899
- hintPath: Type.Optional(Type.String())
900
- }, { additionalProperties: false });
901
- const ConfigSchemaLookupResultSchema = Type.Object({
902
- path: NonEmptyString,
903
- schema: Type.Unknown(),
904
- hint: Type.Optional(ConfigUiHintSchema),
905
- hintPath: Type.Optional(Type.String()),
906
- children: Type.Array(ConfigSchemaLookupChildSchema)
907
- }, { additionalProperties: false });
908
- //#endregion
909
- //#region src/gateway/protocol/schema/cron.ts
910
- function cronAgentTurnPayloadSchema(params) {
911
- return Type.Object({
912
- kind: Type.Literal("agentTurn"),
913
- message: params.message,
914
- model: Type.Optional(Type.String()),
915
- fallbacks: Type.Optional(Type.Array(Type.String())),
916
- thinking: Type.Optional(Type.String()),
917
- timeoutSeconds: Type.Optional(Type.Integer({ minimum: 0 })),
918
- allowUnsafeExternalContent: Type.Optional(Type.Boolean()),
919
- lightContext: Type.Optional(Type.Boolean()),
920
- deliver: Type.Optional(Type.Boolean()),
921
- channel: Type.Optional(Type.String()),
922
- to: Type.Optional(Type.String()),
923
- bestEffortDeliver: Type.Optional(Type.Boolean())
924
- }, { additionalProperties: false });
925
- }
926
- const CronSessionTargetSchema = Type.Union([
927
- Type.Literal("main"),
928
- Type.Literal("isolated"),
929
- Type.Literal("current"),
930
- Type.String({ pattern: "^session:.+" })
931
- ]);
932
- const CronWakeModeSchema = Type.Union([Type.Literal("next-heartbeat"), Type.Literal("now")]);
933
- const CronRunStatusSchema = Type.Union([
934
- Type.Literal("ok"),
935
- Type.Literal("error"),
936
- Type.Literal("skipped")
937
- ]);
938
- const CronSortDirSchema = Type.Union([Type.Literal("asc"), Type.Literal("desc")]);
939
- const CronJobsEnabledFilterSchema = Type.Union([
940
- Type.Literal("all"),
941
- Type.Literal("enabled"),
942
- Type.Literal("disabled")
943
- ]);
944
- const CronJobsSortBySchema = Type.Union([
945
- Type.Literal("nextRunAtMs"),
946
- Type.Literal("updatedAtMs"),
947
- Type.Literal("name")
948
- ]);
949
- const CronRunsStatusFilterSchema = Type.Union([
950
- Type.Literal("all"),
951
- Type.Literal("ok"),
952
- Type.Literal("error"),
953
- Type.Literal("skipped")
954
- ]);
955
- const CronRunsStatusValueSchema = Type.Union([
956
- Type.Literal("ok"),
957
- Type.Literal("error"),
958
- Type.Literal("skipped")
959
- ]);
960
- const CronDeliveryStatusSchema = Type.Union([
961
- Type.Literal("delivered"),
962
- Type.Literal("not-delivered"),
963
- Type.Literal("unknown"),
964
- Type.Literal("not-requested")
965
- ]);
966
- const CronFailoverReasonSchema = Type.Union([
967
- Type.Literal("auth"),
968
- Type.Literal("format"),
969
- Type.Literal("rate_limit"),
970
- Type.Literal("billing"),
971
- Type.Literal("timeout"),
972
- Type.Literal("model_not_found"),
973
- Type.Literal("unknown")
974
- ]);
975
- const CronCommonOptionalFields = {
976
- agentId: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
977
- sessionKey: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
978
- description: Type.Optional(Type.String()),
979
- enabled: Type.Optional(Type.Boolean()),
980
- deleteAfterRun: Type.Optional(Type.Boolean())
981
- };
982
- function cronIdOrJobIdParams(extraFields) {
983
- return Type.Union([Type.Object({
984
- id: NonEmptyString,
985
- ...extraFields
986
- }, { additionalProperties: false }), Type.Object({
987
- jobId: NonEmptyString,
988
- ...extraFields
989
- }, { additionalProperties: false })]);
990
- }
991
- const CronRunLogJobIdSchema = Type.String({
992
- minLength: 1,
993
- pattern: "^[^/\\\\]+$"
994
- });
995
- const CronScheduleSchema = Type.Union([
996
- Type.Object({
997
- kind: Type.Literal("at"),
998
- at: NonEmptyString
999
- }, { additionalProperties: false }),
1000
- Type.Object({
1001
- kind: Type.Literal("every"),
1002
- everyMs: Type.Integer({ minimum: 1 }),
1003
- anchorMs: Type.Optional(Type.Integer({ minimum: 0 }))
1004
- }, { additionalProperties: false }),
1005
- Type.Object({
1006
- kind: Type.Literal("cron"),
1007
- expr: NonEmptyString,
1008
- tz: Type.Optional(Type.String()),
1009
- staggerMs: Type.Optional(Type.Integer({ minimum: 0 }))
1010
- }, { additionalProperties: false })
1011
- ]);
1012
- const CronPayloadSchema = Type.Union([Type.Object({
1013
- kind: Type.Literal("systemEvent"),
1014
- text: NonEmptyString
1015
- }, { additionalProperties: false }), cronAgentTurnPayloadSchema({ message: NonEmptyString })]);
1016
- const CronPayloadPatchSchema = Type.Union([Type.Object({
1017
- kind: Type.Literal("systemEvent"),
1018
- text: Type.Optional(NonEmptyString)
1019
- }, { additionalProperties: false }), cronAgentTurnPayloadSchema({ message: Type.Optional(NonEmptyString) })]);
1020
- const CronFailureAlertSchema = Type.Object({
1021
- after: Type.Optional(Type.Integer({ minimum: 1 })),
1022
- channel: Type.Optional(Type.Union([Type.Literal("last"), NonEmptyString])),
1023
- to: Type.Optional(Type.String()),
1024
- cooldownMs: Type.Optional(Type.Integer({ minimum: 0 })),
1025
- mode: Type.Optional(Type.Union([Type.Literal("announce"), Type.Literal("webhook")])),
1026
- accountId: Type.Optional(NonEmptyString)
1027
- }, { additionalProperties: false });
1028
- const CronFailureDestinationSchema = Type.Object({
1029
- channel: Type.Optional(Type.Union([Type.Literal("last"), NonEmptyString])),
1030
- to: Type.Optional(Type.String()),
1031
- accountId: Type.Optional(NonEmptyString),
1032
- mode: Type.Optional(Type.Union([Type.Literal("announce"), Type.Literal("webhook")]))
1033
- }, { additionalProperties: false });
1034
- const CronDeliverySharedProperties = {
1035
- channel: Type.Optional(Type.Union([Type.Literal("last"), NonEmptyString])),
1036
- accountId: Type.Optional(NonEmptyString),
1037
- bestEffort: Type.Optional(Type.Boolean()),
1038
- failureDestination: Type.Optional(CronFailureDestinationSchema)
1039
- };
1040
- const CronDeliveryNoopSchema = Type.Object({
1041
- mode: Type.Literal("none"),
1042
- ...CronDeliverySharedProperties,
1043
- to: Type.Optional(Type.String())
1044
- }, { additionalProperties: false });
1045
- const CronDeliveryAnnounceSchema = Type.Object({
1046
- mode: Type.Literal("announce"),
1047
- ...CronDeliverySharedProperties,
1048
- to: Type.Optional(Type.String())
1049
- }, { additionalProperties: false });
1050
- const CronDeliveryWebhookSchema = Type.Object({
1051
- mode: Type.Literal("webhook"),
1052
- ...CronDeliverySharedProperties,
1053
- to: NonEmptyString
1054
- }, { additionalProperties: false });
1055
- const CronDeliverySchema = Type.Union([
1056
- CronDeliveryNoopSchema,
1057
- CronDeliveryAnnounceSchema,
1058
- CronDeliveryWebhookSchema
1059
- ]);
1060
- const CronDeliveryPatchSchema = Type.Object({
1061
- mode: Type.Optional(Type.Union([
1062
- Type.Literal("none"),
1063
- Type.Literal("announce"),
1064
- Type.Literal("webhook")
1065
- ])),
1066
- ...CronDeliverySharedProperties,
1067
- to: Type.Optional(Type.String())
1068
- }, { additionalProperties: false });
1069
- const CronJobStateSchema = Type.Object({
1070
- nextRunAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
1071
- runningAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
1072
- lastRunAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
1073
- lastRunStatus: Type.Optional(CronRunStatusSchema),
1074
- lastStatus: Type.Optional(CronRunStatusSchema),
1075
- lastError: Type.Optional(Type.String()),
1076
- lastErrorReason: Type.Optional(CronFailoverReasonSchema),
1077
- lastDurationMs: Type.Optional(Type.Integer({ minimum: 0 })),
1078
- consecutiveErrors: Type.Optional(Type.Integer({ minimum: 0 })),
1079
- lastDelivered: Type.Optional(Type.Boolean()),
1080
- lastDeliveryStatus: Type.Optional(CronDeliveryStatusSchema),
1081
- lastDeliveryError: Type.Optional(Type.String()),
1082
- lastFailureAlertAtMs: Type.Optional(Type.Integer({ minimum: 0 }))
1083
- }, { additionalProperties: false });
1084
- Type.Object({
1085
- id: NonEmptyString,
1086
- agentId: Type.Optional(NonEmptyString),
1087
- sessionKey: Type.Optional(NonEmptyString),
1088
- name: NonEmptyString,
1089
- description: Type.Optional(Type.String()),
1090
- enabled: Type.Boolean(),
1091
- deleteAfterRun: Type.Optional(Type.Boolean()),
1092
- createdAtMs: Type.Integer({ minimum: 0 }),
1093
- updatedAtMs: Type.Integer({ minimum: 0 }),
1094
- schedule: CronScheduleSchema,
1095
- sessionTarget: CronSessionTargetSchema,
1096
- wakeMode: CronWakeModeSchema,
1097
- payload: CronPayloadSchema,
1098
- delivery: Type.Optional(CronDeliverySchema),
1099
- failureAlert: Type.Optional(Type.Union([Type.Literal(false), CronFailureAlertSchema])),
1100
- state: CronJobStateSchema
1101
- }, { additionalProperties: false });
1102
- const CronListParamsSchema = Type.Object({
1103
- includeDisabled: Type.Optional(Type.Boolean()),
1104
- limit: Type.Optional(Type.Integer({
1105
- minimum: 1,
1106
- maximum: 200
1107
- })),
1108
- offset: Type.Optional(Type.Integer({ minimum: 0 })),
1109
- query: Type.Optional(Type.String()),
1110
- enabled: Type.Optional(CronJobsEnabledFilterSchema),
1111
- sortBy: Type.Optional(CronJobsSortBySchema),
1112
- sortDir: Type.Optional(CronSortDirSchema)
1113
- }, { additionalProperties: false });
1114
- const CronStatusParamsSchema = Type.Object({}, { additionalProperties: false });
1115
- const CronAddParamsSchema = Type.Object({
1116
- name: NonEmptyString,
1117
- ...CronCommonOptionalFields,
1118
- schedule: CronScheduleSchema,
1119
- sessionTarget: CronSessionTargetSchema,
1120
- wakeMode: CronWakeModeSchema,
1121
- payload: CronPayloadSchema,
1122
- delivery: Type.Optional(CronDeliverySchema),
1123
- failureAlert: Type.Optional(Type.Union([Type.Literal(false), CronFailureAlertSchema]))
1124
- }, { additionalProperties: false });
1125
- const CronUpdateParamsSchema = cronIdOrJobIdParams({ patch: Type.Object({
1126
- name: Type.Optional(NonEmptyString),
1127
- ...CronCommonOptionalFields,
1128
- schedule: Type.Optional(CronScheduleSchema),
1129
- sessionTarget: Type.Optional(CronSessionTargetSchema),
1130
- wakeMode: Type.Optional(CronWakeModeSchema),
1131
- payload: Type.Optional(CronPayloadPatchSchema),
1132
- delivery: Type.Optional(CronDeliveryPatchSchema),
1133
- failureAlert: Type.Optional(Type.Union([Type.Literal(false), CronFailureAlertSchema])),
1134
- state: Type.Optional(Type.Partial(CronJobStateSchema))
1135
- }, { additionalProperties: false }) });
1136
- const CronRemoveParamsSchema = cronIdOrJobIdParams({});
1137
- const CronRunParamsSchema = cronIdOrJobIdParams({ mode: Type.Optional(Type.Union([Type.Literal("due"), Type.Literal("force")])) });
1138
- const CronRunsParamsSchema = Type.Object({
1139
- scope: Type.Optional(Type.Union([Type.Literal("job"), Type.Literal("all")])),
1140
- id: Type.Optional(CronRunLogJobIdSchema),
1141
- jobId: Type.Optional(CronRunLogJobIdSchema),
1142
- limit: Type.Optional(Type.Integer({
1143
- minimum: 1,
1144
- maximum: 200
1145
- })),
1146
- offset: Type.Optional(Type.Integer({ minimum: 0 })),
1147
- statuses: Type.Optional(Type.Array(CronRunsStatusValueSchema, {
1148
- minItems: 1,
1149
- maxItems: 3
1150
- })),
1151
- status: Type.Optional(CronRunsStatusFilterSchema),
1152
- deliveryStatuses: Type.Optional(Type.Array(CronDeliveryStatusSchema, {
1153
- minItems: 1,
1154
- maxItems: 4
1155
- })),
1156
- deliveryStatus: Type.Optional(CronDeliveryStatusSchema),
1157
- query: Type.Optional(Type.String()),
1158
- sortDir: Type.Optional(CronSortDirSchema)
1159
- }, { additionalProperties: false });
1160
- Type.Object({
1161
- ts: Type.Integer({ minimum: 0 }),
1162
- jobId: NonEmptyString,
1163
- action: Type.Literal("finished"),
1164
- status: Type.Optional(CronRunStatusSchema),
1165
- error: Type.Optional(Type.String()),
1166
- summary: Type.Optional(Type.String()),
1167
- delivered: Type.Optional(Type.Boolean()),
1168
- deliveryStatus: Type.Optional(CronDeliveryStatusSchema),
1169
- deliveryError: Type.Optional(Type.String()),
1170
- sessionId: Type.Optional(NonEmptyString),
1171
- sessionKey: Type.Optional(NonEmptyString),
1172
- runAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
1173
- durationMs: Type.Optional(Type.Integer({ minimum: 0 })),
1174
- nextRunAtMs: Type.Optional(Type.Integer({ minimum: 0 })),
1175
- model: Type.Optional(Type.String()),
1176
- provider: Type.Optional(Type.String()),
1177
- usage: Type.Optional(Type.Object({
1178
- input_tokens: Type.Optional(Type.Number()),
1179
- output_tokens: Type.Optional(Type.Number()),
1180
- total_tokens: Type.Optional(Type.Number()),
1181
- cache_read_tokens: Type.Optional(Type.Number()),
1182
- cache_write_tokens: Type.Optional(Type.Number())
1183
- }, { additionalProperties: false })),
1184
- jobName: Type.Optional(Type.String())
1185
- }, { additionalProperties: false });
1186
- //#endregion
1187
- //#region src/gateway/protocol/schema/error-codes.ts
1188
- const ErrorCodes = {
1189
- NOT_LINKED: "NOT_LINKED",
1190
- NOT_PAIRED: "NOT_PAIRED",
1191
- AGENT_TIMEOUT: "AGENT_TIMEOUT",
1192
- INVALID_REQUEST: "INVALID_REQUEST",
1193
- UNAVAILABLE: "UNAVAILABLE"
1194
- };
1195
- function errorShape(code, message, opts) {
1196
- return {
1197
- code,
1198
- message,
1199
- ...opts
1200
- };
1201
- }
1202
- //#endregion
1203
- //#region src/gateway/protocol/schema/exec-approvals.ts
1204
- const ExecApprovalsAllowlistEntrySchema = Type.Object({
1205
- id: Type.Optional(NonEmptyString),
1206
- pattern: Type.String(),
1207
- lastUsedAt: Type.Optional(Type.Integer({ minimum: 0 })),
1208
- lastUsedCommand: Type.Optional(Type.String()),
1209
- lastResolvedPath: Type.Optional(Type.String())
1210
- }, { additionalProperties: false });
1211
- const ExecApprovalsPolicyFields = {
1212
- security: Type.Optional(Type.String()),
1213
- ask: Type.Optional(Type.String()),
1214
- askFallback: Type.Optional(Type.String()),
1215
- autoAllowSkills: Type.Optional(Type.Boolean())
1216
- };
1217
- const ExecApprovalsDefaultsSchema = Type.Object(ExecApprovalsPolicyFields, { additionalProperties: false });
1218
- const ExecApprovalsAgentSchema = Type.Object({
1219
- ...ExecApprovalsPolicyFields,
1220
- allowlist: Type.Optional(Type.Array(ExecApprovalsAllowlistEntrySchema))
1221
- }, { additionalProperties: false });
1222
- const ExecApprovalsFileSchema = Type.Object({
1223
- version: Type.Literal(1),
1224
- socket: Type.Optional(Type.Object({
1225
- path: Type.Optional(Type.String()),
1226
- token: Type.Optional(Type.String())
1227
- }, { additionalProperties: false })),
1228
- defaults: Type.Optional(ExecApprovalsDefaultsSchema),
1229
- agents: Type.Optional(Type.Record(Type.String(), ExecApprovalsAgentSchema))
1230
- }, { additionalProperties: false });
1231
- Type.Object({
1232
- path: NonEmptyString,
1233
- exists: Type.Boolean(),
1234
- hash: NonEmptyString,
1235
- file: ExecApprovalsFileSchema
1236
- }, { additionalProperties: false });
1237
- const ExecApprovalsGetParamsSchema = Type.Object({}, { additionalProperties: false });
1238
- const ExecApprovalsSetParamsSchema = Type.Object({
1239
- file: ExecApprovalsFileSchema,
1240
- baseHash: Type.Optional(NonEmptyString)
1241
- }, { additionalProperties: false });
1242
- const ExecApprovalsNodeGetParamsSchema = Type.Object({ nodeId: NonEmptyString }, { additionalProperties: false });
1243
- const ExecApprovalsNodeSetParamsSchema = Type.Object({
1244
- nodeId: NonEmptyString,
1245
- file: ExecApprovalsFileSchema,
1246
- baseHash: Type.Optional(NonEmptyString)
1247
- }, { additionalProperties: false });
1248
- const ExecApprovalRequestParamsSchema = Type.Object({
1249
- id: Type.Optional(NonEmptyString),
1250
- command: Type.Optional(NonEmptyString),
1251
- commandArgv: Type.Optional(Type.Array(Type.String())),
1252
- systemRunPlan: Type.Optional(Type.Object({
1253
- argv: Type.Array(Type.String()),
1254
- cwd: Type.Union([Type.String(), Type.Null()]),
1255
- commandText: Type.String(),
1256
- commandPreview: Type.Optional(Type.Union([Type.String(), Type.Null()])),
1257
- agentId: Type.Union([Type.String(), Type.Null()]),
1258
- sessionKey: Type.Union([Type.String(), Type.Null()]),
1259
- mutableFileOperand: Type.Optional(Type.Union([Type.Object({
1260
- argvIndex: Type.Integer({ minimum: 0 }),
1261
- path: Type.String(),
1262
- sha256: Type.String()
1263
- }, { additionalProperties: false }), Type.Null()]))
1264
- }, { additionalProperties: false })),
1265
- env: Type.Optional(Type.Record(NonEmptyString, Type.String())),
1266
- cwd: Type.Optional(Type.Union([Type.String(), Type.Null()])),
1267
- nodeId: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1268
- host: Type.Optional(Type.Union([Type.String(), Type.Null()])),
1269
- security: Type.Optional(Type.Union([Type.String(), Type.Null()])),
1270
- ask: Type.Optional(Type.Union([Type.String(), Type.Null()])),
1271
- agentId: Type.Optional(Type.Union([Type.String(), Type.Null()])),
1272
- resolvedPath: Type.Optional(Type.Union([Type.String(), Type.Null()])),
1273
- sessionKey: Type.Optional(Type.Union([Type.String(), Type.Null()])),
1274
- turnSourceChannel: Type.Optional(Type.Union([Type.String(), Type.Null()])),
1275
- turnSourceTo: Type.Optional(Type.Union([Type.String(), Type.Null()])),
1276
- turnSourceAccountId: Type.Optional(Type.Union([Type.String(), Type.Null()])),
1277
- turnSourceThreadId: Type.Optional(Type.Union([
1278
- Type.String(),
1279
- Type.Number(),
1280
- Type.Null()
1281
- ])),
1282
- timeoutMs: Type.Optional(Type.Integer({ minimum: 1 })),
1283
- twoPhase: Type.Optional(Type.Boolean())
1284
- }, { additionalProperties: false });
1285
- const ExecApprovalResolveParamsSchema = Type.Object({
1286
- id: NonEmptyString,
1287
- decision: NonEmptyString
1288
- }, { additionalProperties: false });
1289
- //#endregion
1290
- //#region src/gateway/protocol/schema/devices.ts
1291
- const DevicePairListParamsSchema = Type.Object({}, { additionalProperties: false });
1292
- const DevicePairApproveParamsSchema = Type.Object({ requestId: NonEmptyString }, { additionalProperties: false });
1293
- const DevicePairRejectParamsSchema = Type.Object({ requestId: NonEmptyString }, { additionalProperties: false });
1294
- const DevicePairRemoveParamsSchema = Type.Object({ deviceId: NonEmptyString }, { additionalProperties: false });
1295
- const DeviceTokenRotateParamsSchema = Type.Object({
1296
- deviceId: NonEmptyString,
1297
- role: NonEmptyString,
1298
- scopes: Type.Optional(Type.Array(NonEmptyString))
1299
- }, { additionalProperties: false });
1300
- const DeviceTokenRevokeParamsSchema = Type.Object({
1301
- deviceId: NonEmptyString,
1302
- role: NonEmptyString
1303
- }, { additionalProperties: false });
1304
- Type.Object({
1305
- requestId: NonEmptyString,
1306
- deviceId: NonEmptyString,
1307
- publicKey: NonEmptyString,
1308
- displayName: Type.Optional(NonEmptyString),
1309
- platform: Type.Optional(NonEmptyString),
1310
- deviceFamily: Type.Optional(NonEmptyString),
1311
- clientId: Type.Optional(NonEmptyString),
1312
- clientMode: Type.Optional(NonEmptyString),
1313
- role: Type.Optional(NonEmptyString),
1314
- roles: Type.Optional(Type.Array(NonEmptyString)),
1315
- scopes: Type.Optional(Type.Array(NonEmptyString)),
1316
- remoteIp: Type.Optional(NonEmptyString),
1317
- silent: Type.Optional(Type.Boolean()),
1318
- isRepair: Type.Optional(Type.Boolean()),
1319
- ts: Type.Integer({ minimum: 0 })
1320
- }, { additionalProperties: false });
1321
- Type.Object({
1322
- requestId: NonEmptyString,
1323
- deviceId: NonEmptyString,
1324
- decision: NonEmptyString,
1325
- ts: Type.Integer({ minimum: 0 })
1326
- }, { additionalProperties: false });
1327
- //#endregion
1328
- //#region src/gateway/protocol/schema/snapshot.ts
1329
- const PresenceEntrySchema = Type.Object({
1330
- host: Type.Optional(NonEmptyString),
1331
- ip: Type.Optional(NonEmptyString),
1332
- version: Type.Optional(NonEmptyString),
1333
- platform: Type.Optional(NonEmptyString),
1334
- deviceFamily: Type.Optional(NonEmptyString),
1335
- modelIdentifier: Type.Optional(NonEmptyString),
1336
- mode: Type.Optional(NonEmptyString),
1337
- lastInputSeconds: Type.Optional(Type.Integer({ minimum: 0 })),
1338
- reason: Type.Optional(NonEmptyString),
1339
- tags: Type.Optional(Type.Array(NonEmptyString)),
1340
- text: Type.Optional(Type.String()),
1341
- ts: Type.Integer({ minimum: 0 }),
1342
- deviceId: Type.Optional(NonEmptyString),
1343
- roles: Type.Optional(Type.Array(NonEmptyString)),
1344
- scopes: Type.Optional(Type.Array(NonEmptyString)),
1345
- instanceId: Type.Optional(NonEmptyString)
1346
- }, { additionalProperties: false });
1347
- const HealthSnapshotSchema = Type.Any();
1348
- const SessionDefaultsSchema = Type.Object({
1349
- defaultAgentId: NonEmptyString,
1350
- mainKey: NonEmptyString,
1351
- mainSessionKey: NonEmptyString,
1352
- scope: Type.Optional(NonEmptyString)
1353
- }, { additionalProperties: false });
1354
- const StateVersionSchema = Type.Object({
1355
- presence: Type.Integer({ minimum: 0 }),
1356
- health: Type.Integer({ minimum: 0 })
1357
- }, { additionalProperties: false });
1358
- const SnapshotSchema = Type.Object({
1359
- presence: Type.Array(PresenceEntrySchema),
1360
- health: HealthSnapshotSchema,
1361
- stateVersion: StateVersionSchema,
1362
- uptimeMs: Type.Integer({ minimum: 0 }),
1363
- configPath: Type.Optional(NonEmptyString),
1364
- stateDir: Type.Optional(NonEmptyString),
1365
- sessionDefaults: Type.Optional(SessionDefaultsSchema),
1366
- authMode: Type.Optional(Type.Union([
1367
- Type.Literal("none"),
1368
- Type.Literal("token"),
1369
- Type.Literal("password"),
1370
- Type.Literal("trusted-proxy")
1371
- ])),
1372
- updateAvailable: Type.Optional(Type.Object({
1373
- currentVersion: NonEmptyString,
1374
- latestVersion: NonEmptyString,
1375
- channel: NonEmptyString
1376
- }))
1377
- }, { additionalProperties: false });
1378
- Type.Object({ ts: Type.Integer({ minimum: 0 }) }, { additionalProperties: false });
1379
- Type.Object({
1380
- reason: NonEmptyString,
1381
- restartExpectedMs: Type.Optional(Type.Integer({ minimum: 0 }))
1382
- }, { additionalProperties: false });
1383
- const ConnectParamsSchema = Type.Object({
1384
- minProtocol: Type.Integer({ minimum: 1 }),
1385
- maxProtocol: Type.Integer({ minimum: 1 }),
1386
- client: Type.Object({
1387
- id: GatewayClientIdSchema,
1388
- displayName: Type.Optional(NonEmptyString),
1389
- version: NonEmptyString,
1390
- platform: NonEmptyString,
1391
- deviceFamily: Type.Optional(NonEmptyString),
1392
- modelIdentifier: Type.Optional(NonEmptyString),
1393
- mode: GatewayClientModeSchema,
1394
- instanceId: Type.Optional(NonEmptyString)
1395
- }, { additionalProperties: false }),
1396
- caps: Type.Optional(Type.Array(NonEmptyString, { default: [] })),
1397
- commands: Type.Optional(Type.Array(NonEmptyString)),
1398
- permissions: Type.Optional(Type.Record(NonEmptyString, Type.Boolean())),
1399
- pathEnv: Type.Optional(Type.String()),
1400
- role: Type.Optional(NonEmptyString),
1401
- scopes: Type.Optional(Type.Array(NonEmptyString)),
1402
- device: Type.Optional(Type.Object({
1403
- id: NonEmptyString,
1404
- publicKey: NonEmptyString,
1405
- signature: NonEmptyString,
1406
- signedAt: Type.Integer({ minimum: 0 }),
1407
- nonce: NonEmptyString
1408
- }, { additionalProperties: false })),
1409
- auth: Type.Optional(Type.Object({
1410
- token: Type.Optional(Type.String()),
1411
- bootstrapToken: Type.Optional(Type.String()),
1412
- deviceToken: Type.Optional(Type.String()),
1413
- password: Type.Optional(Type.String())
1414
- }, { additionalProperties: false })),
1415
- locale: Type.Optional(Type.String()),
1416
- userAgent: Type.Optional(Type.String())
1417
- }, { additionalProperties: false });
1418
- Type.Object({
1419
- type: Type.Literal("hello-ok"),
1420
- protocol: Type.Integer({ minimum: 1 }),
1421
- server: Type.Object({
1422
- version: NonEmptyString,
1423
- connId: NonEmptyString
1424
- }, { additionalProperties: false }),
1425
- features: Type.Object({
1426
- methods: Type.Array(NonEmptyString),
1427
- events: Type.Array(NonEmptyString)
1428
- }, { additionalProperties: false }),
1429
- snapshot: SnapshotSchema,
1430
- canvasHostUrl: Type.Optional(NonEmptyString),
1431
- auth: Type.Optional(Type.Object({
1432
- deviceToken: NonEmptyString,
1433
- role: NonEmptyString,
1434
- scopes: Type.Array(NonEmptyString),
1435
- issuedAtMs: Type.Optional(Type.Integer({ minimum: 0 }))
1436
- }, { additionalProperties: false })),
1437
- policy: Type.Object({
1438
- maxPayload: Type.Integer({ minimum: 1 }),
1439
- maxBufferedBytes: Type.Integer({ minimum: 1 }),
1440
- tickIntervalMs: Type.Integer({ minimum: 1 })
1441
- }, { additionalProperties: false })
1442
- }, { additionalProperties: false });
1443
- const ErrorShapeSchema = Type.Object({
1444
- code: NonEmptyString,
1445
- message: NonEmptyString,
1446
- details: Type.Optional(Type.Unknown()),
1447
- retryable: Type.Optional(Type.Boolean()),
1448
- retryAfterMs: Type.Optional(Type.Integer({ minimum: 0 }))
1449
- }, { additionalProperties: false });
1450
- const RequestFrameSchema = Type.Object({
1451
- type: Type.Literal("req"),
1452
- id: NonEmptyString,
1453
- method: NonEmptyString,
1454
- params: Type.Optional(Type.Unknown())
1455
- }, { additionalProperties: false });
1456
- const ResponseFrameSchema = Type.Object({
1457
- type: Type.Literal("res"),
1458
- id: NonEmptyString,
1459
- ok: Type.Boolean(),
1460
- payload: Type.Optional(Type.Unknown()),
1461
- error: Type.Optional(ErrorShapeSchema)
1462
- }, { additionalProperties: false });
1463
- const EventFrameSchema = Type.Object({
1464
- type: Type.Literal("event"),
1465
- event: NonEmptyString,
1466
- payload: Type.Optional(Type.Unknown()),
1467
- seq: Type.Optional(Type.Integer({ minimum: 0 })),
1468
- stateVersion: Type.Optional(StateVersionSchema)
1469
- }, { additionalProperties: false });
1470
- Type.Union([
1471
- RequestFrameSchema,
1472
- ResponseFrameSchema,
1473
- EventFrameSchema
1474
- ], { discriminator: "type" });
1475
- //#endregion
1476
- //#region src/gateway/protocol/schema/logs-chat.ts
1477
- const LogsTailParamsSchema = Type.Object({
1478
- cursor: Type.Optional(Type.Integer({ minimum: 0 })),
1479
- limit: Type.Optional(Type.Integer({
1480
- minimum: 1,
1481
- maximum: 5e3
1482
- })),
1483
- maxBytes: Type.Optional(Type.Integer({
1484
- minimum: 1,
1485
- maximum: 1e6
1486
- }))
1487
- }, { additionalProperties: false });
1488
- Type.Object({
1489
- file: NonEmptyString,
1490
- cursor: Type.Integer({ minimum: 0 }),
1491
- size: Type.Integer({ minimum: 0 }),
1492
- lines: Type.Array(Type.String()),
1493
- truncated: Type.Optional(Type.Boolean()),
1494
- reset: Type.Optional(Type.Boolean())
1495
- }, { additionalProperties: false });
1496
- const ChatHistoryParamsSchema = Type.Object({
1497
- sessionKey: NonEmptyString,
1498
- limit: Type.Optional(Type.Integer({
1499
- minimum: 1,
1500
- maximum: 1e3
1501
- }))
1502
- }, { additionalProperties: false });
1503
- const ChatSendParamsSchema = Type.Object({
1504
- sessionKey: ChatSendSessionKeyString,
1505
- message: Type.String(),
1506
- thinking: Type.Optional(Type.String()),
1507
- deliver: Type.Optional(Type.Boolean()),
1508
- attachments: Type.Optional(Type.Array(Type.Unknown())),
1509
- timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
1510
- systemInputProvenance: Type.Optional(InputProvenanceSchema),
1511
- systemProvenanceReceipt: Type.Optional(Type.String()),
1512
- idempotencyKey: NonEmptyString
1513
- }, { additionalProperties: false });
1514
- const ChatAbortParamsSchema = Type.Object({
1515
- sessionKey: NonEmptyString,
1516
- runId: Type.Optional(NonEmptyString)
1517
- }, { additionalProperties: false });
1518
- const ChatInjectParamsSchema = Type.Object({
1519
- sessionKey: NonEmptyString,
1520
- message: NonEmptyString,
1521
- label: Type.Optional(Type.String({ maxLength: 100 }))
1522
- }, { additionalProperties: false });
1523
- const ChatEventSchema = Type.Object({
1524
- runId: NonEmptyString,
1525
- sessionKey: NonEmptyString,
1526
- seq: Type.Integer({ minimum: 0 }),
1527
- state: Type.Union([
1528
- Type.Literal("delta"),
1529
- Type.Literal("final"),
1530
- Type.Literal("aborted"),
1531
- Type.Literal("error")
1532
- ]),
1533
- message: Type.Optional(Type.Unknown()),
1534
- errorMessage: Type.Optional(Type.String()),
1535
- usage: Type.Optional(Type.Unknown()),
1536
- stopReason: Type.Optional(Type.String())
1537
- }, { additionalProperties: false });
1538
- //#endregion
1539
- //#region src/gateway/protocol/schema/nodes.ts
1540
- const NodePendingWorkTypeSchema = Type.String({ enum: ["status.request", "location.request"] });
1541
- const NodePendingWorkPrioritySchema = Type.String({ enum: ["normal", "high"] });
1542
- const NodePairRequestParamsSchema = Type.Object({
1543
- nodeId: NonEmptyString,
1544
- displayName: Type.Optional(NonEmptyString),
1545
- platform: Type.Optional(NonEmptyString),
1546
- version: Type.Optional(NonEmptyString),
1547
- coreVersion: Type.Optional(NonEmptyString),
1548
- uiVersion: Type.Optional(NonEmptyString),
1549
- deviceFamily: Type.Optional(NonEmptyString),
1550
- modelIdentifier: Type.Optional(NonEmptyString),
1551
- caps: Type.Optional(Type.Array(NonEmptyString)),
1552
- commands: Type.Optional(Type.Array(NonEmptyString)),
1553
- remoteIp: Type.Optional(NonEmptyString),
1554
- silent: Type.Optional(Type.Boolean())
1555
- }, { additionalProperties: false });
1556
- const NodePairListParamsSchema = Type.Object({}, { additionalProperties: false });
1557
- const NodePairApproveParamsSchema = Type.Object({ requestId: NonEmptyString }, { additionalProperties: false });
1558
- const NodePairRejectParamsSchema = Type.Object({ requestId: NonEmptyString }, { additionalProperties: false });
1559
- const NodePairVerifyParamsSchema = Type.Object({
1560
- nodeId: NonEmptyString,
1561
- token: NonEmptyString
1562
- }, { additionalProperties: false });
1563
- const NodeRenameParamsSchema = Type.Object({
1564
- nodeId: NonEmptyString,
1565
- displayName: NonEmptyString
1566
- }, { additionalProperties: false });
1567
- const NodeListParamsSchema = Type.Object({}, { additionalProperties: false });
1568
- const NodePendingAckParamsSchema = Type.Object({ ids: Type.Array(NonEmptyString, { minItems: 1 }) }, { additionalProperties: false });
1569
- const NodeDescribeParamsSchema = Type.Object({ nodeId: NonEmptyString }, { additionalProperties: false });
1570
- const NodeInvokeParamsSchema = Type.Object({
1571
- nodeId: NonEmptyString,
1572
- command: NonEmptyString,
1573
- params: Type.Optional(Type.Unknown()),
1574
- timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
1575
- idempotencyKey: NonEmptyString
1576
- }, { additionalProperties: false });
1577
- const NodeInvokeResultParamsSchema = Type.Object({
1578
- id: NonEmptyString,
1579
- nodeId: NonEmptyString,
1580
- ok: Type.Boolean(),
1581
- payload: Type.Optional(Type.Unknown()),
1582
- payloadJSON: Type.Optional(Type.String()),
1583
- error: Type.Optional(Type.Object({
1584
- code: Type.Optional(NonEmptyString),
1585
- message: Type.Optional(NonEmptyString)
1586
- }, { additionalProperties: false }))
1587
- }, { additionalProperties: false });
1588
- const NodeEventParamsSchema = Type.Object({
1589
- event: NonEmptyString,
1590
- payload: Type.Optional(Type.Unknown()),
1591
- payloadJSON: Type.Optional(Type.String())
1592
- }, { additionalProperties: false });
1593
- const NodePendingDrainParamsSchema = Type.Object({ maxItems: Type.Optional(Type.Integer({
1594
- minimum: 1,
1595
- maximum: 10
1596
- })) }, { additionalProperties: false });
1597
- const NodePendingDrainItemSchema = Type.Object({
1598
- id: NonEmptyString,
1599
- type: NodePendingWorkTypeSchema,
1600
- priority: Type.String({ enum: [
1601
- "default",
1602
- "normal",
1603
- "high"
1604
- ] }),
1605
- createdAtMs: Type.Integer({ minimum: 0 }),
1606
- expiresAtMs: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
1607
- payload: Type.Optional(Type.Record(Type.String(), Type.Unknown()))
1608
- }, { additionalProperties: false });
1609
- Type.Object({
1610
- nodeId: NonEmptyString,
1611
- revision: Type.Integer({ minimum: 0 }),
1612
- items: Type.Array(NodePendingDrainItemSchema),
1613
- hasMore: Type.Boolean()
1614
- }, { additionalProperties: false });
1615
- const NodePendingEnqueueParamsSchema = Type.Object({
1616
- nodeId: NonEmptyString,
1617
- type: NodePendingWorkTypeSchema,
1618
- priority: Type.Optional(NodePendingWorkPrioritySchema),
1619
- expiresInMs: Type.Optional(Type.Integer({
1620
- minimum: 1e3,
1621
- maximum: 864e5
1622
- })),
1623
- wake: Type.Optional(Type.Boolean())
1624
- }, { additionalProperties: false });
1625
- Type.Object({
1626
- nodeId: NonEmptyString,
1627
- revision: Type.Integer({ minimum: 0 }),
1628
- queued: NodePendingDrainItemSchema,
1629
- wakeTriggered: Type.Boolean()
1630
- }, { additionalProperties: false });
1631
- Type.Object({
1632
- id: NonEmptyString,
1633
- nodeId: NonEmptyString,
1634
- command: NonEmptyString,
1635
- paramsJSON: Type.Optional(Type.String()),
1636
- timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
1637
- idempotencyKey: Type.Optional(NonEmptyString)
1638
- }, { additionalProperties: false });
1639
- //#endregion
1640
- //#region src/gateway/protocol/schema/push.ts
1641
- const ApnsEnvironmentSchema = Type.String({ enum: ["sandbox", "production"] });
1642
- const PushTestParamsSchema = Type.Object({
1643
- nodeId: NonEmptyString,
1644
- title: Type.Optional(Type.String()),
1645
- body: Type.Optional(Type.String()),
1646
- environment: Type.Optional(ApnsEnvironmentSchema)
1647
- }, { additionalProperties: false });
1648
- Type.Object({
1649
- ok: Type.Boolean(),
1650
- status: Type.Integer(),
1651
- apnsId: Type.Optional(Type.String()),
1652
- reason: Type.Optional(Type.String()),
1653
- tokenSuffix: Type.String(),
1654
- topic: Type.String(),
1655
- environment: ApnsEnvironmentSchema,
1656
- transport: Type.String({ enum: ["direct", "relay"] })
1657
- }, { additionalProperties: false });
1658
- Type.Object({}, { additionalProperties: false });
1659
- const SecretsResolveParamsSchema = Type.Object({
1660
- commandName: NonEmptyString,
1661
- targetIds: Type.Array(NonEmptyString)
1662
- }, { additionalProperties: false });
1663
- const SecretsResolveAssignmentSchema = Type.Object({
1664
- path: Type.Optional(NonEmptyString),
1665
- pathSegments: Type.Array(NonEmptyString),
1666
- value: Type.Unknown()
1667
- }, { additionalProperties: false });
1668
- const SecretsResolveResultSchema = Type.Object({
1669
- ok: Type.Optional(Type.Boolean()),
1670
- assignments: Type.Optional(Type.Array(SecretsResolveAssignmentSchema)),
1671
- diagnostics: Type.Optional(Type.Array(NonEmptyString)),
1672
- inactiveRefPaths: Type.Optional(Type.Array(NonEmptyString))
1673
- }, { additionalProperties: false });
1674
- //#endregion
1675
- //#region src/gateway/protocol/schema/sessions.ts
1676
- const SessionsListParamsSchema = Type.Object({
1677
- limit: Type.Optional(Type.Integer({ minimum: 1 })),
1678
- activeMinutes: Type.Optional(Type.Integer({ minimum: 1 })),
1679
- includeGlobal: Type.Optional(Type.Boolean()),
1680
- includeUnknown: Type.Optional(Type.Boolean()),
1681
- includeDerivedTitles: Type.Optional(Type.Boolean()),
1682
- includeLastMessage: Type.Optional(Type.Boolean()),
1683
- label: Type.Optional(SessionLabelString),
1684
- spawnedBy: Type.Optional(NonEmptyString),
1685
- agentId: Type.Optional(NonEmptyString),
1686
- search: Type.Optional(Type.String())
1687
- }, { additionalProperties: false });
1688
- const SessionsPreviewParamsSchema = Type.Object({
1689
- keys: Type.Array(NonEmptyString, { minItems: 1 }),
1690
- limit: Type.Optional(Type.Integer({ minimum: 1 })),
1691
- maxChars: Type.Optional(Type.Integer({ minimum: 20 }))
1692
- }, { additionalProperties: false });
1693
- const SessionsResolveParamsSchema = Type.Object({
1694
- key: Type.Optional(NonEmptyString),
1695
- sessionId: Type.Optional(NonEmptyString),
1696
- label: Type.Optional(SessionLabelString),
1697
- agentId: Type.Optional(NonEmptyString),
1698
- spawnedBy: Type.Optional(NonEmptyString),
1699
- includeGlobal: Type.Optional(Type.Boolean()),
1700
- includeUnknown: Type.Optional(Type.Boolean())
1701
- }, { additionalProperties: false });
1702
- const SessionsPatchParamsSchema = Type.Object({
1703
- key: NonEmptyString,
1704
- label: Type.Optional(Type.Union([SessionLabelString, Type.Null()])),
1705
- thinkingLevel: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1706
- fastMode: Type.Optional(Type.Union([Type.Boolean(), Type.Null()])),
1707
- verboseLevel: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1708
- reasoningLevel: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1709
- responseUsage: Type.Optional(Type.Union([
1710
- Type.Literal("off"),
1711
- Type.Literal("tokens"),
1712
- Type.Literal("full"),
1713
- Type.Literal("on"),
1714
- Type.Null()
1715
- ])),
1716
- elevatedLevel: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1717
- execHost: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1718
- execSecurity: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1719
- execAsk: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1720
- execNode: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1721
- model: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1722
- spawnedBy: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1723
- spawnedWorkspaceDir: Type.Optional(Type.Union([NonEmptyString, Type.Null()])),
1724
- spawnDepth: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
1725
- subagentRole: Type.Optional(Type.Union([
1726
- Type.Literal("orchestrator"),
1727
- Type.Literal("leaf"),
1728
- Type.Null()
1729
- ])),
1730
- subagentControlScope: Type.Optional(Type.Union([
1731
- Type.Literal("children"),
1732
- Type.Literal("none"),
1733
- Type.Null()
1734
- ])),
1735
- sendPolicy: Type.Optional(Type.Union([
1736
- Type.Literal("allow"),
1737
- Type.Literal("deny"),
1738
- Type.Null()
1739
- ])),
1740
- groupActivation: Type.Optional(Type.Union([
1741
- Type.Literal("mention"),
1742
- Type.Literal("always"),
1743
- Type.Null()
1744
- ]))
1745
- }, { additionalProperties: false });
1746
- const SessionsResetParamsSchema = Type.Object({
1747
- key: NonEmptyString,
1748
- reason: Type.Optional(Type.Union([Type.Literal("new"), Type.Literal("reset")]))
1749
- }, { additionalProperties: false });
1750
- const SessionsDeleteParamsSchema = Type.Object({
1751
- key: NonEmptyString,
1752
- deleteTranscript: Type.Optional(Type.Boolean()),
1753
- emitLifecycleHooks: Type.Optional(Type.Boolean())
1754
- }, { additionalProperties: false });
1755
- const SessionsCompactParamsSchema = Type.Object({
1756
- key: NonEmptyString,
1757
- maxLines: Type.Optional(Type.Integer({ minimum: 1 }))
1758
- }, { additionalProperties: false });
1759
- const SessionsUsageParamsSchema = Type.Object({
1760
- key: Type.Optional(NonEmptyString),
1761
- startDate: Type.Optional(Type.String({ pattern: "^\\d{4}-\\d{2}-\\d{2}$" })),
1762
- endDate: Type.Optional(Type.String({ pattern: "^\\d{4}-\\d{2}-\\d{2}$" })),
1763
- mode: Type.Optional(Type.Union([
1764
- Type.Literal("utc"),
1765
- Type.Literal("gateway"),
1766
- Type.Literal("specific")
1767
- ])),
1768
- utcOffset: Type.Optional(Type.String({ pattern: "^UTC[+-]\\d{1,2}(?::[0-5]\\d)?$" })),
1769
- limit: Type.Optional(Type.Integer({ minimum: 1 })),
1770
- includeContextWeight: Type.Optional(Type.Boolean())
1771
- }, { additionalProperties: false });
1772
- //#endregion
1773
- //#region src/gateway/protocol/schema/wizard.ts
1774
- const WizardRunStatusSchema = Type.Union([
1775
- Type.Literal("running"),
1776
- Type.Literal("done"),
1777
- Type.Literal("cancelled"),
1778
- Type.Literal("error")
1779
- ]);
1780
- const WizardStartParamsSchema = Type.Object({
1781
- mode: Type.Optional(Type.Union([Type.Literal("local"), Type.Literal("remote")])),
1782
- workspace: Type.Optional(Type.String())
1783
- }, { additionalProperties: false });
1784
- const WizardAnswerSchema = Type.Object({
1785
- stepId: NonEmptyString,
1786
- value: Type.Optional(Type.Unknown())
1787
- }, { additionalProperties: false });
1788
- const WizardNextParamsSchema = Type.Object({
1789
- sessionId: NonEmptyString,
1790
- answer: Type.Optional(WizardAnswerSchema)
1791
- }, { additionalProperties: false });
1792
- const WizardSessionIdParamsSchema = Type.Object({ sessionId: NonEmptyString }, { additionalProperties: false });
1793
- const WizardCancelParamsSchema = WizardSessionIdParamsSchema;
1794
- const WizardStatusParamsSchema = WizardSessionIdParamsSchema;
1795
- const WizardStepOptionSchema = Type.Object({
1796
- value: Type.Unknown(),
1797
- label: NonEmptyString,
1798
- hint: Type.Optional(Type.String())
1799
- }, { additionalProperties: false });
1800
- const WizardStepSchema = Type.Object({
1801
- id: NonEmptyString,
1802
- type: Type.Union([
1803
- Type.Literal("note"),
1804
- Type.Literal("select"),
1805
- Type.Literal("text"),
1806
- Type.Literal("confirm"),
1807
- Type.Literal("multiselect"),
1808
- Type.Literal("progress"),
1809
- Type.Literal("action")
1810
- ]),
1811
- title: Type.Optional(Type.String()),
1812
- message: Type.Optional(Type.String()),
1813
- options: Type.Optional(Type.Array(WizardStepOptionSchema)),
1814
- initialValue: Type.Optional(Type.Unknown()),
1815
- placeholder: Type.Optional(Type.String()),
1816
- sensitive: Type.Optional(Type.Boolean()),
1817
- executor: Type.Optional(Type.Union([Type.Literal("gateway"), Type.Literal("client")]))
1818
- }, { additionalProperties: false });
1819
- const WizardResultFields = {
1820
- done: Type.Boolean(),
1821
- step: Type.Optional(WizardStepSchema),
1822
- status: Type.Optional(WizardRunStatusSchema),
1823
- error: Type.Optional(Type.String())
1824
- };
1825
- Type.Object(WizardResultFields, { additionalProperties: false });
1826
- Type.Object({
1827
- sessionId: NonEmptyString,
1828
- ...WizardResultFields
1829
- }, { additionalProperties: false });
1830
- Type.Object({
1831
- status: WizardRunStatusSchema,
1832
- error: Type.Optional(Type.String())
1833
- }, { additionalProperties: false });
1834
- //#endregion
1835
- //#region src/gateway/protocol/index.ts
1836
- const ajv = new AjvPkg({
1837
- allErrors: true,
1838
- strict: false,
1839
- removeAdditional: false
1840
- });
1841
- const validateConnectParams = ajv.compile(ConnectParamsSchema);
1842
- const validateRequestFrame = ajv.compile(RequestFrameSchema);
1843
- const validateResponseFrame = ajv.compile(ResponseFrameSchema);
1844
- const validateEventFrame = ajv.compile(EventFrameSchema);
1845
- const validateSendParams = ajv.compile(SendParamsSchema);
1846
- const validatePollParams = ajv.compile(PollParamsSchema);
1847
- const validateAgentParams = ajv.compile(AgentParamsSchema);
1848
- const validateAgentIdentityParams = ajv.compile(AgentIdentityParamsSchema);
1849
- const validateAgentWaitParams = ajv.compile(AgentWaitParamsSchema);
1850
- const validateWakeParams = ajv.compile(WakeParamsSchema);
1851
- const validateAgentsListParams = ajv.compile(AgentsListParamsSchema);
1852
- const validateAgentsCreateParams = ajv.compile(AgentsCreateParamsSchema);
1853
- const validateAgentsUpdateParams = ajv.compile(AgentsUpdateParamsSchema);
1854
- const validateAgentsDeleteParams = ajv.compile(AgentsDeleteParamsSchema);
1855
- const validateAgentsFilesListParams = ajv.compile(AgentsFilesListParamsSchema);
1856
- const validateAgentsFilesGetParams = ajv.compile(AgentsFilesGetParamsSchema);
1857
- const validateAgentsFilesSetParams = ajv.compile(AgentsFilesSetParamsSchema);
1858
- const validateNodePairRequestParams = ajv.compile(NodePairRequestParamsSchema);
1859
- const validateNodePairListParams = ajv.compile(NodePairListParamsSchema);
1860
- const validateNodePairApproveParams = ajv.compile(NodePairApproveParamsSchema);
1861
- const validateNodePairRejectParams = ajv.compile(NodePairRejectParamsSchema);
1862
- const validateNodePairVerifyParams = ajv.compile(NodePairVerifyParamsSchema);
1863
- const validateNodeRenameParams = ajv.compile(NodeRenameParamsSchema);
1864
- const validateNodeListParams = ajv.compile(NodeListParamsSchema);
1865
- const validateNodePendingAckParams = ajv.compile(NodePendingAckParamsSchema);
1866
- const validateNodeDescribeParams = ajv.compile(NodeDescribeParamsSchema);
1867
- const validateNodeInvokeParams = ajv.compile(NodeInvokeParamsSchema);
1868
- const validateNodeInvokeResultParams = ajv.compile(NodeInvokeResultParamsSchema);
1869
- const validateNodeEventParams = ajv.compile(NodeEventParamsSchema);
1870
- const validateNodePendingDrainParams = ajv.compile(NodePendingDrainParamsSchema);
1871
- const validateNodePendingEnqueueParams = ajv.compile(NodePendingEnqueueParamsSchema);
1872
- const validatePushTestParams = ajv.compile(PushTestParamsSchema);
1873
- const validateSecretsResolveParams = ajv.compile(SecretsResolveParamsSchema);
1874
- const validateSecretsResolveResult = ajv.compile(SecretsResolveResultSchema);
1875
- const validateSessionsListParams = ajv.compile(SessionsListParamsSchema);
1876
- const validateSessionsPreviewParams = ajv.compile(SessionsPreviewParamsSchema);
1877
- const validateSessionsResolveParams = ajv.compile(SessionsResolveParamsSchema);
1878
- const validateSessionsPatchParams = ajv.compile(SessionsPatchParamsSchema);
1879
- const validateSessionsResetParams = ajv.compile(SessionsResetParamsSchema);
1880
- const validateSessionsDeleteParams = ajv.compile(SessionsDeleteParamsSchema);
1881
- const validateSessionsCompactParams = ajv.compile(SessionsCompactParamsSchema);
1882
- const validateSessionsUsageParams = ajv.compile(SessionsUsageParamsSchema);
1883
- const validateConfigGetParams = ajv.compile(ConfigGetParamsSchema);
1884
- const validateConfigSetParams = ajv.compile(ConfigSetParamsSchema);
1885
- const validateConfigApplyParams = ajv.compile(ConfigApplyParamsSchema);
1886
- const validateConfigPatchParams = ajv.compile(ConfigPatchParamsSchema);
1887
- const validateConfigSchemaParams = ajv.compile(ConfigSchemaParamsSchema);
1888
- const validateConfigSchemaLookupParams = ajv.compile(ConfigSchemaLookupParamsSchema);
1889
- const validateConfigSchemaLookupResult = ajv.compile(ConfigSchemaLookupResultSchema);
1890
- const validateWizardStartParams = ajv.compile(WizardStartParamsSchema);
1891
- const validateWizardNextParams = ajv.compile(WizardNextParamsSchema);
1892
- const validateWizardCancelParams = ajv.compile(WizardCancelParamsSchema);
1893
- const validateWizardStatusParams = ajv.compile(WizardStatusParamsSchema);
1894
- const validateTalkModeParams = ajv.compile(TalkModeParamsSchema);
1895
- const validateTalkConfigParams = ajv.compile(TalkConfigParamsSchema);
1896
- ajv.compile(TalkConfigResultSchema);
1897
- const validateChannelsStatusParams = ajv.compile(ChannelsStatusParamsSchema);
1898
- const validateChannelsLogoutParams = ajv.compile(ChannelsLogoutParamsSchema);
1899
- const validateModelsListParams = ajv.compile(ModelsListParamsSchema);
1900
- const validateSkillsStatusParams = ajv.compile(SkillsStatusParamsSchema);
1901
- const validateToolsCatalogParams = ajv.compile(ToolsCatalogParamsSchema);
1902
- const validateSkillsBinsParams = ajv.compile(SkillsBinsParamsSchema);
1903
- const validateSkillsInstallParams = ajv.compile(SkillsInstallParamsSchema);
1904
- const validateSkillsUpdateParams = ajv.compile(SkillsUpdateParamsSchema);
1905
- const validateCronListParams = ajv.compile(CronListParamsSchema);
1906
- const validateCronStatusParams = ajv.compile(CronStatusParamsSchema);
1907
- const validateCronAddParams = ajv.compile(CronAddParamsSchema);
1908
- const validateCronUpdateParams = ajv.compile(CronUpdateParamsSchema);
1909
- const validateCronRemoveParams = ajv.compile(CronRemoveParamsSchema);
1910
- const validateCronRunParams = ajv.compile(CronRunParamsSchema);
1911
- const validateCronRunsParams = ajv.compile(CronRunsParamsSchema);
1912
- const validateDevicePairListParams = ajv.compile(DevicePairListParamsSchema);
1913
- const validateDevicePairApproveParams = ajv.compile(DevicePairApproveParamsSchema);
1914
- const validateDevicePairRejectParams = ajv.compile(DevicePairRejectParamsSchema);
1915
- const validateDevicePairRemoveParams = ajv.compile(DevicePairRemoveParamsSchema);
1916
- const validateDeviceTokenRotateParams = ajv.compile(DeviceTokenRotateParamsSchema);
1917
- const validateDeviceTokenRevokeParams = ajv.compile(DeviceTokenRevokeParamsSchema);
1918
- const validateExecApprovalsGetParams = ajv.compile(ExecApprovalsGetParamsSchema);
1919
- const validateExecApprovalsSetParams = ajv.compile(ExecApprovalsSetParamsSchema);
1920
- const validateExecApprovalRequestParams = ajv.compile(ExecApprovalRequestParamsSchema);
1921
- const validateExecApprovalResolveParams = ajv.compile(ExecApprovalResolveParamsSchema);
1922
- const validateExecApprovalsNodeGetParams = ajv.compile(ExecApprovalsNodeGetParamsSchema);
1923
- const validateExecApprovalsNodeSetParams = ajv.compile(ExecApprovalsNodeSetParamsSchema);
1924
- const validateLogsTailParams = ajv.compile(LogsTailParamsSchema);
1925
- const validateChatHistoryParams = ajv.compile(ChatHistoryParamsSchema);
1926
- const validateChatSendParams = ajv.compile(ChatSendParamsSchema);
1927
- const validateChatAbortParams = ajv.compile(ChatAbortParamsSchema);
1928
- const validateChatInjectParams = ajv.compile(ChatInjectParamsSchema);
1929
- ajv.compile(ChatEventSchema);
1930
- const validateUpdateRunParams = ajv.compile(UpdateRunParamsSchema);
1931
- const validateWebLoginStartParams = ajv.compile(WebLoginStartParamsSchema);
1932
- const validateWebLoginWaitParams = ajv.compile(WebLoginWaitParamsSchema);
1933
- function formatValidationErrors(errors) {
1934
- if (!errors?.length) return "unknown validation error";
1935
- const parts = [];
1936
- for (const err of errors) {
1937
- const keyword = typeof err?.keyword === "string" ? err.keyword : "";
1938
- const instancePath = typeof err?.instancePath === "string" ? err.instancePath : "";
1939
- if (keyword === "additionalProperties") {
1940
- const additionalProperty = (err?.params)?.additionalProperty;
1941
- if (typeof additionalProperty === "string" && additionalProperty.trim()) {
1942
- const where = instancePath ? `at ${instancePath}` : "at root";
1943
- parts.push(`${where}: unexpected property '${additionalProperty}'`);
1944
- continue;
1945
- }
1946
- }
1947
- const message = typeof err?.message === "string" && err.message.trim() ? err.message : "validation error";
1948
- const where = instancePath ? `at ${instancePath}: ` : "";
1949
- parts.push(`${where}${message}`);
1950
- }
1951
- const unique = Array.from(new Set(parts.filter((part) => part.trim())));
1952
- if (!unique.length) return ajv.errorsText(errors, { separator: "; " }) || "unknown validation error";
1953
- return unique.join("; ");
1954
- }
1955
- //#endregion
1956
- //#region src/gateway/client.ts
1957
- var GatewayClientRequestError = class extends Error {
1958
- constructor(error) {
1959
- super(error.message ?? "gateway request failed");
1960
- this.name = "GatewayClientRequestError";
1961
- this.gatewayCode = error.code ?? "UNAVAILABLE";
1962
- this.details = error.details;
1963
- }
1964
- };
1965
- const FORCE_STOP_TERMINATE_GRACE_MS = 250;
1966
- const STOP_AND_WAIT_TIMEOUT_MS = 1e3;
1967
- var GatewayClient = class {
1968
- constructor(opts) {
1969
- this.ws = null;
1970
- this.pending = /* @__PURE__ */ new Map();
1971
- this.backoffMs = 1e3;
1972
- this.closed = false;
1973
- this.lastSeq = null;
1974
- this.connectNonce = null;
1975
- this.connectSent = false;
1976
- this.connectTimer = null;
1977
- this.pendingDeviceTokenRetry = false;
1978
- this.deviceTokenRetryBudgetUsed = false;
1979
- this.pendingConnectErrorDetailCode = null;
1980
- this.lastTick = null;
1981
- this.tickIntervalMs = 3e4;
1982
- this.tickTimer = null;
1983
- this.pendingStop = null;
1984
- this.opts = {
1985
- ...opts,
1986
- deviceIdentity: opts.deviceIdentity === null ? void 0 : opts.deviceIdentity ?? loadOrCreateDeviceIdentity()
1987
- };
1988
- this.requestTimeoutMs = typeof opts.requestTimeoutMs === "number" && Number.isFinite(opts.requestTimeoutMs) ? Math.max(1, Math.min(Math.floor(opts.requestTimeoutMs), 2147483647)) : 3e4;
1989
- }
1990
- start() {
1991
- if (this.closed) return;
1992
- const url = this.opts.url ?? "ws://127.0.0.1:28789";
1993
- if (this.opts.tlsFingerprint && !url.startsWith("wss://")) {
1994
- this.opts.onConnectError?.(/* @__PURE__ */ new Error("gateway tls fingerprint requires wss:// gateway url"));
1995
- return;
1996
- }
1997
- const allowPrivateWs = process.env.MOLDCLAW_ALLOW_INSECURE_PRIVATE_WS === "1";
1998
- if (!isSecureWebSocketUrl(url, { allowPrivateWs })) {
1999
- let displayHost = url;
2000
- try {
2001
- displayHost = new URL(url).hostname || url;
2002
- } catch {}
2003
- 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 28789:127.0.0.1:28789 user@gateway-host), or use Tailscale Serve/Funnel. ` + (allowPrivateWs ? "" : "Break-glass (trusted private networks only): set MOLDCLAW_ALLOW_INSECURE_PRIVATE_WS=1. ") + "Run `moldclaw doctor --fix` for guidance.");
2004
- this.opts.onConnectError?.(error);
2005
- return;
2006
- }
2007
- const wsOptions = { maxPayload: 25 * 1024 * 1024 };
2008
- if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
2009
- wsOptions.rejectUnauthorized = false;
2010
- wsOptions.checkServerIdentity = ((_host, cert) => {
2011
- const fingerprintValue = typeof cert === "object" && cert && "fingerprint256" in cert ? cert.fingerprint256 ?? "" : "";
2012
- const fingerprint = normalizeFingerprint(typeof fingerprintValue === "string" ? fingerprintValue : "");
2013
- const expected = normalizeFingerprint(this.opts.tlsFingerprint ?? "");
2014
- if (!expected) return /* @__PURE__ */ new Error("gateway tls fingerprint missing");
2015
- if (!fingerprint) return /* @__PURE__ */ new Error("gateway tls fingerprint unavailable");
2016
- if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
2017
- });
2018
- }
2019
- const ws = new WebSocket(url, wsOptions);
2020
- this.ws = ws;
2021
- ws.on("open", () => {
2022
- if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
2023
- const tlsError = this.validateTlsFingerprint();
2024
- if (tlsError) {
2025
- this.opts.onConnectError?.(tlsError);
2026
- this.ws?.close(1008, tlsError.message);
2027
- return;
2028
- }
2029
- }
2030
- this.queueConnect();
2031
- });
2032
- ws.on("message", (data) => this.handleMessage(rawDataToString(data)));
2033
- ws.on("close", (code, reason) => {
2034
- const reasonText = rawDataToString(reason);
2035
- const connectErrorDetailCode = this.pendingConnectErrorDetailCode;
2036
- this.pendingConnectErrorDetailCode = null;
2037
- if (this.ws === ws) this.ws = null;
2038
- this.resolvePendingStop(ws);
2039
- if (code === 1008 && reasonText.toLowerCase().includes("device token mismatch") && !this.opts.token && !this.opts.password && this.opts.deviceIdentity) {
2040
- const deviceId = this.opts.deviceIdentity.deviceId;
2041
- const role = this.opts.role ?? "operator";
2042
- try {
2043
- clearDeviceAuthToken({
2044
- deviceId,
2045
- role
2046
- });
2047
- logDebug(`cleared stale device-auth token for device ${deviceId}`);
2048
- } catch (err) {
2049
- logDebug(`failed clearing stale device-auth token for device ${deviceId}: ${String(err)}`);
2050
- }
2051
- }
2052
- this.flushPendingErrors(/* @__PURE__ */ new Error(`gateway closed (${code}): ${reasonText}`));
2053
- if (this.shouldPauseReconnectAfterAuthFailure(connectErrorDetailCode)) {
2054
- this.opts.onClose?.(code, reasonText);
2055
- return;
2056
- }
2057
- this.scheduleReconnect();
2058
- this.opts.onClose?.(code, reasonText);
2059
- });
2060
- ws.on("error", (err) => {
2061
- logDebug(`gateway client error: ${String(err)}`);
2062
- if (!this.connectSent) this.opts.onConnectError?.(err instanceof Error ? err : new Error(String(err)));
2063
- });
2064
- }
2065
- stop() {
2066
- this.beginStop();
2067
- }
2068
- async stopAndWait(opts) {
2069
- const stopPromise = this.beginStop();
2070
- if (!stopPromise) return;
2071
- const timeoutMs = typeof opts?.timeoutMs === "number" && Number.isFinite(opts.timeoutMs) ? Math.max(1, Math.floor(opts.timeoutMs)) : STOP_AND_WAIT_TIMEOUT_MS;
2072
- let timeout = null;
2073
- try {
2074
- await Promise.race([stopPromise, new Promise((_, reject) => {
2075
- timeout = setTimeout(() => {
2076
- reject(/* @__PURE__ */ new Error(`gateway client stop timed out after ${timeoutMs}ms`));
2077
- }, timeoutMs);
2078
- timeout.unref?.();
2079
- })]);
2080
- } finally {
2081
- if (timeout) clearTimeout(timeout);
2082
- }
2083
- }
2084
- beginStop() {
2085
- this.closed = true;
2086
- this.pendingDeviceTokenRetry = false;
2087
- this.deviceTokenRetryBudgetUsed = false;
2088
- this.pendingConnectErrorDetailCode = null;
2089
- if (this.tickTimer) {
2090
- clearInterval(this.tickTimer);
2091
- this.tickTimer = null;
2092
- }
2093
- if (this.connectTimer) {
2094
- clearTimeout(this.connectTimer);
2095
- this.connectTimer = null;
2096
- }
2097
- if (this.pendingStop) {
2098
- this.flushPendingErrors(/* @__PURE__ */ new Error("gateway client stopped"));
2099
- return this.pendingStop.promise;
2100
- }
2101
- const ws = this.ws;
2102
- this.ws = null;
2103
- if (ws) {
2104
- const stopPromise = this.createPendingStop(ws);
2105
- ws.close();
2106
- setTimeout(() => {
2107
- try {
2108
- ws.terminate();
2109
- } catch {}
2110
- this.resolvePendingStop(ws);
2111
- }, FORCE_STOP_TERMINATE_GRACE_MS).unref?.();
2112
- this.flushPendingErrors(/* @__PURE__ */ new Error("gateway client stopped"));
2113
- return stopPromise;
2114
- }
2115
- this.flushPendingErrors(/* @__PURE__ */ new Error("gateway client stopped"));
2116
- return null;
2117
- }
2118
- createPendingStop(ws) {
2119
- if (this.pendingStop?.ws === ws) return this.pendingStop.promise;
2120
- let resolve;
2121
- const promise = new Promise((res) => {
2122
- resolve = res;
2123
- });
2124
- this.pendingStop = {
2125
- ws,
2126
- promise,
2127
- resolve
2128
- };
2129
- return promise;
2130
- }
2131
- resolvePendingStop(ws) {
2132
- if (this.pendingStop?.ws !== ws) return;
2133
- const { resolve } = this.pendingStop;
2134
- this.pendingStop = null;
2135
- resolve();
2136
- }
2137
- sendConnect() {
2138
- if (this.connectSent) return;
2139
- const nonce = this.connectNonce?.trim() ?? "";
2140
- if (!nonce) {
2141
- this.opts.onConnectError?.(/* @__PURE__ */ new Error("gateway connect challenge missing nonce"));
2142
- this.ws?.close(1008, "connect challenge missing nonce");
2143
- return;
2144
- }
2145
- this.connectSent = true;
2146
- if (this.connectTimer) {
2147
- clearTimeout(this.connectTimer);
2148
- this.connectTimer = null;
2149
- }
2150
- const role = this.opts.role ?? "operator";
2151
- const { authToken, authBootstrapToken, authDeviceToken, authPassword, signatureToken, resolvedDeviceToken, storedToken } = this.selectConnectAuth(role);
2152
- if (this.pendingDeviceTokenRetry && authDeviceToken) this.pendingDeviceTokenRetry = false;
2153
- const auth = authToken || authBootstrapToken || authPassword || resolvedDeviceToken ? {
2154
- token: authToken,
2155
- bootstrapToken: authBootstrapToken,
2156
- deviceToken: authDeviceToken ?? resolvedDeviceToken,
2157
- password: authPassword
2158
- } : void 0;
2159
- const signedAtMs = Date.now();
2160
- const scopes = this.opts.scopes ?? ["operator.admin"];
2161
- const platform = this.opts.platform ?? process.platform;
2162
- const device = (() => {
2163
- if (!this.opts.deviceIdentity) return;
2164
- const payload = buildDeviceAuthPayloadV3({
2165
- deviceId: this.opts.deviceIdentity.deviceId,
2166
- clientId: this.opts.clientName ?? GATEWAY_CLIENT_NAMES.GATEWAY_CLIENT,
2167
- clientMode: this.opts.mode ?? GATEWAY_CLIENT_MODES.BACKEND,
2168
- role,
2169
- scopes,
2170
- signedAtMs,
2171
- token: signatureToken ?? null,
2172
- nonce,
2173
- platform,
2174
- deviceFamily: this.opts.deviceFamily
2175
- });
2176
- const signature = signDevicePayload(this.opts.deviceIdentity.privateKeyPem, payload);
2177
- return {
2178
- id: this.opts.deviceIdentity.deviceId,
2179
- publicKey: publicKeyRawBase64UrlFromPem(this.opts.deviceIdentity.publicKeyPem),
2180
- signature,
2181
- signedAt: signedAtMs,
2182
- nonce
2183
- };
2184
- })();
2185
- const params = {
2186
- minProtocol: this.opts.minProtocol ?? 3,
2187
- maxProtocol: this.opts.maxProtocol ?? 3,
2188
- client: {
2189
- id: this.opts.clientName ?? GATEWAY_CLIENT_NAMES.GATEWAY_CLIENT,
2190
- displayName: this.opts.clientDisplayName,
2191
- version: this.opts.clientVersion ?? VERSION,
2192
- platform,
2193
- deviceFamily: this.opts.deviceFamily,
2194
- mode: this.opts.mode ?? GATEWAY_CLIENT_MODES.BACKEND,
2195
- instanceId: this.opts.instanceId
2196
- },
2197
- caps: Array.isArray(this.opts.caps) ? this.opts.caps : [],
2198
- commands: Array.isArray(this.opts.commands) ? this.opts.commands : void 0,
2199
- permissions: this.opts.permissions && typeof this.opts.permissions === "object" ? this.opts.permissions : void 0,
2200
- pathEnv: this.opts.pathEnv,
2201
- auth,
2202
- role,
2203
- scopes,
2204
- device
2205
- };
2206
- this.request("connect", params).then((helloOk) => {
2207
- this.pendingDeviceTokenRetry = false;
2208
- this.deviceTokenRetryBudgetUsed = false;
2209
- this.pendingConnectErrorDetailCode = null;
2210
- const authInfo = helloOk?.auth;
2211
- if (authInfo?.deviceToken && this.opts.deviceIdentity) storeDeviceAuthToken({
2212
- deviceId: this.opts.deviceIdentity.deviceId,
2213
- role: authInfo.role ?? role,
2214
- token: authInfo.deviceToken,
2215
- scopes: authInfo.scopes ?? []
2216
- });
2217
- this.backoffMs = 1e3;
2218
- this.tickIntervalMs = typeof helloOk.policy?.tickIntervalMs === "number" ? helloOk.policy.tickIntervalMs : 3e4;
2219
- this.lastTick = Date.now();
2220
- this.startTickWatch();
2221
- this.opts.onHelloOk?.(helloOk);
2222
- }).catch((err) => {
2223
- this.pendingConnectErrorDetailCode = err instanceof GatewayClientRequestError ? readConnectErrorDetailCode(err.details) : null;
2224
- if (this.shouldRetryWithStoredDeviceToken({
2225
- error: err,
2226
- explicitGatewayToken: this.opts.token?.trim() || void 0,
2227
- resolvedDeviceToken,
2228
- storedToken: storedToken ?? void 0
2229
- })) {
2230
- this.pendingDeviceTokenRetry = true;
2231
- this.deviceTokenRetryBudgetUsed = true;
2232
- this.backoffMs = Math.min(this.backoffMs, 250);
2233
- }
2234
- this.opts.onConnectError?.(err instanceof Error ? err : new Error(String(err)));
2235
- const msg = `gateway connect failed: ${String(err)}`;
2236
- if (this.opts.mode === GATEWAY_CLIENT_MODES.PROBE) logDebug(msg);
2237
- else logError(msg);
2238
- this.ws?.close(1008, "connect failed");
2239
- });
2240
- }
2241
- shouldPauseReconnectAfterAuthFailure(detailCode) {
2242
- if (!detailCode) return false;
2243
- if (detailCode === ConnectErrorDetailCodes.AUTH_TOKEN_MISSING || detailCode === ConnectErrorDetailCodes.AUTH_BOOTSTRAP_TOKEN_INVALID || detailCode === ConnectErrorDetailCodes.AUTH_PASSWORD_MISSING || detailCode === ConnectErrorDetailCodes.AUTH_PASSWORD_MISMATCH || detailCode === ConnectErrorDetailCodes.AUTH_RATE_LIMITED || detailCode === ConnectErrorDetailCodes.PAIRING_REQUIRED || detailCode === ConnectErrorDetailCodes.CONTROL_UI_DEVICE_IDENTITY_REQUIRED || detailCode === ConnectErrorDetailCodes.DEVICE_IDENTITY_REQUIRED) return true;
2244
- if (detailCode !== ConnectErrorDetailCodes.AUTH_TOKEN_MISMATCH) return false;
2245
- if (this.pendingDeviceTokenRetry) return false;
2246
- if (!this.isTrustedDeviceRetryEndpoint()) return true;
2247
- return this.deviceTokenRetryBudgetUsed;
2248
- }
2249
- shouldRetryWithStoredDeviceToken(params) {
2250
- if (this.deviceTokenRetryBudgetUsed) return false;
2251
- if (params.resolvedDeviceToken) return false;
2252
- if (!params.explicitGatewayToken || !params.storedToken) return false;
2253
- if (!this.isTrustedDeviceRetryEndpoint()) return false;
2254
- if (!(params.error instanceof GatewayClientRequestError)) return false;
2255
- const detailCode = readConnectErrorDetailCode(params.error.details);
2256
- const advice = readConnectErrorRecoveryAdvice(params.error.details);
2257
- const retryWithDeviceTokenRecommended = advice.recommendedNextStep === "retry_with_device_token";
2258
- return advice.canRetryWithDeviceToken === true || retryWithDeviceTokenRecommended || detailCode === ConnectErrorDetailCodes.AUTH_TOKEN_MISMATCH;
2259
- }
2260
- isTrustedDeviceRetryEndpoint() {
2261
- const rawUrl = this.opts.url ?? "ws://127.0.0.1:28789";
2262
- try {
2263
- const parsed = new URL(rawUrl);
2264
- const protocol = parsed.protocol === "https:" ? "wss:" : parsed.protocol === "http:" ? "ws:" : parsed.protocol;
2265
- if (isLoopbackHost(parsed.hostname)) return true;
2266
- return protocol === "wss:" && Boolean(this.opts.tlsFingerprint?.trim());
2267
- } catch {
2268
- return false;
2269
- }
2270
- }
2271
- selectConnectAuth(role) {
2272
- const explicitGatewayToken = this.opts.token?.trim() || void 0;
2273
- const explicitBootstrapToken = this.opts.bootstrapToken?.trim() || void 0;
2274
- const explicitDeviceToken = this.opts.deviceToken?.trim() || void 0;
2275
- const authPassword = this.opts.password?.trim() || void 0;
2276
- const storedToken = this.opts.deviceIdentity ? loadDeviceAuthToken({
2277
- deviceId: this.opts.deviceIdentity.deviceId,
2278
- role
2279
- })?.token : null;
2280
- const shouldUseDeviceRetryToken = this.pendingDeviceTokenRetry && !explicitDeviceToken && Boolean(explicitGatewayToken) && Boolean(storedToken) && this.isTrustedDeviceRetryEndpoint();
2281
- const resolvedDeviceToken = explicitDeviceToken ?? (shouldUseDeviceRetryToken || !(explicitGatewayToken || authPassword) && (!explicitBootstrapToken || Boolean(storedToken)) ? storedToken ?? void 0 : void 0);
2282
- const authToken = explicitGatewayToken ?? resolvedDeviceToken;
2283
- const authBootstrapToken = !explicitGatewayToken && !resolvedDeviceToken ? explicitBootstrapToken : void 0;
2284
- return {
2285
- authToken,
2286
- authBootstrapToken,
2287
- authDeviceToken: shouldUseDeviceRetryToken ? storedToken ?? void 0 : void 0,
2288
- authPassword,
2289
- signatureToken: authToken ?? authBootstrapToken ?? void 0,
2290
- resolvedDeviceToken,
2291
- storedToken: storedToken ?? void 0
2292
- };
2293
- }
2294
- handleMessage(raw) {
2295
- try {
2296
- const parsed = JSON.parse(raw);
2297
- if (validateEventFrame(parsed)) {
2298
- const evt = parsed;
2299
- if (evt.event === "connect.challenge") {
2300
- const payload = evt.payload;
2301
- const nonce = payload && typeof payload.nonce === "string" ? payload.nonce : null;
2302
- if (!nonce || nonce.trim().length === 0) {
2303
- this.opts.onConnectError?.(/* @__PURE__ */ new Error("gateway connect challenge missing nonce"));
2304
- this.ws?.close(1008, "connect challenge missing nonce");
2305
- return;
2306
- }
2307
- this.connectNonce = nonce.trim();
2308
- this.sendConnect();
2309
- return;
2310
- }
2311
- const seq = typeof evt.seq === "number" ? evt.seq : null;
2312
- if (seq !== null) {
2313
- if (this.lastSeq !== null && seq > this.lastSeq + 1) this.opts.onGap?.({
2314
- expected: this.lastSeq + 1,
2315
- received: seq
2316
- });
2317
- this.lastSeq = seq;
2318
- }
2319
- if (evt.event === "tick") this.lastTick = Date.now();
2320
- this.opts.onEvent?.(evt);
2321
- return;
2322
- }
2323
- if (validateResponseFrame(parsed)) {
2324
- const pending = this.pending.get(parsed.id);
2325
- if (!pending) return;
2326
- const status = parsed.payload?.status;
2327
- if (pending.expectFinal && status === "accepted") return;
2328
- this.pending.delete(parsed.id);
2329
- if (pending.timeout) clearTimeout(pending.timeout);
2330
- if (parsed.ok) pending.resolve(parsed.payload);
2331
- else pending.reject(new GatewayClientRequestError({
2332
- code: parsed.error?.code,
2333
- message: parsed.error?.message ?? "unknown error",
2334
- details: parsed.error?.details
2335
- }));
2336
- }
2337
- } catch (err) {
2338
- logDebug(`gateway client parse error: ${String(err)}`);
2339
- }
2340
- }
2341
- queueConnect() {
2342
- this.connectNonce = null;
2343
- this.connectSent = false;
2344
- const rawConnectDelayMs = this.opts.connectDelayMs;
2345
- const connectChallengeTimeoutMs = typeof rawConnectDelayMs === "number" && Number.isFinite(rawConnectDelayMs) ? Math.max(250, Math.min(1e4, rawConnectDelayMs)) : 2e3;
2346
- if (this.connectTimer) clearTimeout(this.connectTimer);
2347
- this.connectTimer = setTimeout(() => {
2348
- if (this.connectSent || this.ws?.readyState !== WebSocket.OPEN) return;
2349
- this.opts.onConnectError?.(/* @__PURE__ */ new Error("gateway connect challenge timeout"));
2350
- this.ws?.close(1008, "connect challenge timeout");
2351
- }, connectChallengeTimeoutMs);
2352
- }
2353
- scheduleReconnect() {
2354
- if (this.closed) return;
2355
- if (this.tickTimer) {
2356
- clearInterval(this.tickTimer);
2357
- this.tickTimer = null;
2358
- }
2359
- const delay = this.backoffMs;
2360
- this.backoffMs = Math.min(this.backoffMs * 2, 3e4);
2361
- setTimeout(() => this.start(), delay).unref();
2362
- }
2363
- flushPendingErrors(err) {
2364
- for (const [, p] of this.pending) {
2365
- if (p.timeout) clearTimeout(p.timeout);
2366
- p.reject(err);
2367
- }
2368
- this.pending.clear();
2369
- }
2370
- startTickWatch() {
2371
- if (this.tickTimer) clearInterval(this.tickTimer);
2372
- const rawMinInterval = this.opts.tickWatchMinIntervalMs;
2373
- const minInterval = typeof rawMinInterval === "number" && Number.isFinite(rawMinInterval) ? Math.max(1, Math.min(3e4, rawMinInterval)) : 1e3;
2374
- const interval = Math.max(this.tickIntervalMs, minInterval);
2375
- this.tickTimer = setInterval(() => {
2376
- if (this.closed) return;
2377
- if (!this.lastTick) return;
2378
- if (Date.now() - this.lastTick > this.tickIntervalMs * 2) this.ws?.close(4e3, "tick timeout");
2379
- }, interval);
2380
- }
2381
- validateTlsFingerprint() {
2382
- if (!this.opts.tlsFingerprint || !this.ws) return null;
2383
- const expected = normalizeFingerprint(this.opts.tlsFingerprint);
2384
- if (!expected) return /* @__PURE__ */ new Error("gateway tls fingerprint missing");
2385
- const socket = this.ws._socket;
2386
- if (!socket || typeof socket.getPeerCertificate !== "function") return /* @__PURE__ */ new Error("gateway tls fingerprint unavailable");
2387
- const fingerprint = normalizeFingerprint(socket.getPeerCertificate()?.fingerprint256 ?? "");
2388
- if (!fingerprint) return /* @__PURE__ */ new Error("gateway tls fingerprint unavailable");
2389
- if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
2390
- return null;
2391
- }
2392
- async request(method, params, opts) {
2393
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
2394
- const id = randomUUID();
2395
- const frame = {
2396
- type: "req",
2397
- id,
2398
- method,
2399
- params
2400
- };
2401
- if (!validateRequestFrame(frame)) throw new Error(`invalid request frame: ${JSON.stringify(validateRequestFrame.errors, null, 2)}`);
2402
- const expectFinal = opts?.expectFinal === true;
2403
- const timeoutMs = opts?.timeoutMs === null ? null : typeof opts?.timeoutMs === "number" && Number.isFinite(opts.timeoutMs) ? Math.max(1, Math.min(Math.floor(opts.timeoutMs), 2147483647)) : expectFinal ? null : this.requestTimeoutMs;
2404
- const p = new Promise((resolve, reject) => {
2405
- const timeout = timeoutMs === null ? null : setTimeout(() => {
2406
- this.pending.delete(id);
2407
- reject(/* @__PURE__ */ new Error(`gateway request timeout for ${method}`));
2408
- }, timeoutMs);
2409
- this.pending.set(id, {
2410
- resolve: (value) => resolve(value),
2411
- reject,
2412
- expectFinal,
2413
- timeout
2414
- });
2415
- });
2416
- this.ws.send(JSON.stringify(frame));
2417
- return p;
2418
- }
2419
- };
2420
- //#endregion
2421
- //#region src/gateway/method-scopes.ts
2422
- const ADMIN_SCOPE = "operator.admin";
2423
- const READ_SCOPE = "operator.read";
2424
- const WRITE_SCOPE = "operator.write";
2425
- const APPROVALS_SCOPE = "operator.approvals";
2426
- const PAIRING_SCOPE = "operator.pairing";
2427
- const CLI_DEFAULT_OPERATOR_SCOPES = [
2428
- ADMIN_SCOPE,
2429
- READ_SCOPE,
2430
- WRITE_SCOPE,
2431
- APPROVALS_SCOPE,
2432
- PAIRING_SCOPE
2433
- ];
2434
- const NODE_ROLE_METHODS = new Set([
2435
- "node.invoke.result",
2436
- "node.event",
2437
- "node.pending.drain",
2438
- "node.canvas.capability.refresh",
2439
- "node.pending.pull",
2440
- "node.pending.ack",
2441
- "skills.bins"
2442
- ]);
2443
- const METHOD_SCOPE_GROUPS = {
2444
- [APPROVALS_SCOPE]: [
2445
- "exec.approval.request",
2446
- "exec.approval.waitDecision",
2447
- "exec.approval.resolve"
2448
- ],
2449
- [PAIRING_SCOPE]: [
2450
- "node.pair.request",
2451
- "node.pair.list",
2452
- "node.pair.approve",
2453
- "node.pair.reject",
2454
- "node.pair.verify",
2455
- "device.pair.list",
2456
- "device.pair.approve",
2457
- "device.pair.reject",
2458
- "device.pair.remove",
2459
- "device.token.rotate",
2460
- "device.token.revoke",
2461
- "node.rename"
2462
- ],
2463
- [READ_SCOPE]: [
2464
- "health",
2465
- "doctor.memory.status",
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
- "agents.list",
2476
- "agent.identity.get",
2477
- "skills.status",
2478
- "voicewake.get",
2479
- "sessions.list",
2480
- "sessions.get",
2481
- "sessions.preview",
2482
- "sessions.resolve",
2483
- "sessions.usage",
2484
- "sessions.usage.timeseries",
2485
- "sessions.usage.logs",
2486
- "cron.list",
2487
- "cron.status",
2488
- "cron.runs",
2489
- "gateway.identity.get",
2490
- "system-presence",
2491
- "last-heartbeat",
2492
- "node.list",
2493
- "node.describe",
2494
- "chat.history",
2495
- "config.get",
2496
- "config.schema.lookup",
2497
- "talk.config",
2498
- "agents.files.list",
2499
- "agents.files.get"
2500
- ],
2501
- [WRITE_SCOPE]: [
2502
- "send",
2503
- "poll",
2504
- "agent",
2505
- "agent.wait",
2506
- "wake",
2507
- "talk.mode",
2508
- "tts.enable",
2509
- "tts.disable",
2510
- "tts.convert",
2511
- "tts.setProvider",
2512
- "voicewake.set",
2513
- "node.invoke",
2514
- "chat.send",
2515
- "chat.abort",
2516
- "browser.request",
2517
- "push.test",
2518
- "node.pending.enqueue"
2519
- ],
2520
- [ADMIN_SCOPE]: [
2521
- "channels.logout",
2522
- "agents.create",
2523
- "agents.update",
2524
- "agents.delete",
2525
- "skills.install",
2526
- "skills.update",
2527
- "secrets.reload",
2528
- "secrets.resolve",
2529
- "cron.add",
2530
- "cron.update",
2531
- "cron.remove",
2532
- "cron.run",
2533
- "sessions.patch",
2534
- "sessions.reset",
2535
- "sessions.delete",
2536
- "sessions.compact",
2537
- "connect",
2538
- "chat.inject",
2539
- "web.login.start",
2540
- "web.login.wait",
2541
- "set-heartbeats",
2542
- "system-event",
2543
- "agents.files.set"
2544
- ]
2545
- };
2546
- const ADMIN_METHOD_PREFIXES = [
2547
- "exec.approvals.",
2548
- "config.",
2549
- "wizard.",
2550
- "update."
2551
- ];
2552
- const METHOD_SCOPE_BY_NAME = new Map(Object.entries(METHOD_SCOPE_GROUPS).flatMap(([scope, methods]) => methods.map((method) => [method, scope])));
2553
- function resolveScopedMethod(method) {
2554
- const explicitScope = METHOD_SCOPE_BY_NAME.get(method);
2555
- if (explicitScope) return explicitScope;
2556
- if (ADMIN_METHOD_PREFIXES.some((prefix) => method.startsWith(prefix))) return ADMIN_SCOPE;
2557
- }
2558
- function isNodeRoleMethod(method) {
2559
- return NODE_ROLE_METHODS.has(method);
2560
- }
2561
- function resolveRequiredOperatorScopeForMethod(method) {
2562
- return resolveScopedMethod(method);
2563
- }
2564
- function resolveLeastPrivilegeOperatorScopesForMethod(method) {
2565
- const requiredScope = resolveRequiredOperatorScopeForMethod(method);
2566
- if (requiredScope) return [requiredScope];
2567
- return [];
2568
- }
2569
- function authorizeOperatorScopesForMethod(method, scopes) {
2570
- if (scopes.includes("operator.admin")) return { allowed: true };
2571
- const requiredScope = resolveRequiredOperatorScopeForMethod(method) ?? "operator.admin";
2572
- if (requiredScope === "operator.read") {
2573
- if (scopes.includes("operator.read") || scopes.includes("operator.write")) return { allowed: true };
2574
- return {
2575
- allowed: false,
2576
- missingScope: READ_SCOPE
2577
- };
2578
- }
2579
- if (scopes.includes(requiredScope)) return { allowed: true };
2580
- return {
2581
- allowed: false,
2582
- missingScope: requiredScope
2583
- };
2584
- }
2585
- //#endregion
2586
- export { validateExecApprovalsNodeSetParams as $, buildDeviceAuthPayloadV3 as $t, validateConfigPatchParams as A, validateSessionsUsageParams as At, validateCronRunsParams as B, validateWebLoginStartParams as Bt, validateChannelsStatusParams as C, validateSessionsCompactParams as Ct, validateChatSendParams as D, validateSessionsPreviewParams as Dt, validateChatInjectParams as E, validateSessionsPatchParams as Et, validateConnectParams as F, validateTalkConfigParams as Ft, validateDevicePairRejectParams as G, validateWizardStatusParams as Gt, validateCronUpdateParams as H, validateWizardCancelParams as Ht, validateCronAddParams as I, validateTalkModeParams as It, validateDeviceTokenRotateParams as J, parseSessionLabel as Jt, validateDevicePairRemoveParams as K, ErrorCodes as Kt, validateCronListParams as L, validateToolsCatalogParams as Lt, validateConfigSchemaLookupResult as M, validateSkillsInstallParams as Mt, validateConfigSchemaParams as N, validateSkillsStatusParams as Nt, validateConfigApplyParams as O, validateSessionsResetParams as Ot, validateConfigSetParams as P, validateSkillsUpdateParams as Pt, validateExecApprovalsNodeGetParams as Q, buildDeviceAuthPayload as Qt, validateCronRemoveParams as R, validateUpdateRunParams as Rt, validateChannelsLogoutParams as S, validateSendParams as St, validateChatHistoryParams as T, validateSessionsListParams as Tt, validateDevicePairApproveParams as U, validateWizardNextParams as Ut, validateCronStatusParams as V, validateWebLoginWaitParams as Vt, validateDevicePairListParams as W, validateWizardStartParams as Wt, validateExecApprovalResolveParams as X, resolveAuthConnectErrorDetailCode as Xt, validateExecApprovalRequestParams as Y, ConnectErrorDetailCodes as Yt, validateExecApprovalsGetParams as Z, resolveDeviceAuthConnectErrorDetailCode as Zt, validateAgentsFilesGetParams as _, validatePollParams as _t, READ_SCOPE as a, signDevicePayload as an, validateNodeInvokeParams as at, validateAgentsListParams as b, validateSecretsResolveParams as bt, isNodeRoleMethod as c, hasInterSessionUserProvenance as cn, validateNodePairApproveParams as ct, formatValidationErrors as d, validateNodePairRequestParams as dt, normalizeFingerprint as en, validateExecApprovalsSetParams as et, validateAgentIdentityParams as f, validateNodePairVerifyParams as ft, validateAgentsDeleteParams as g, validateNodeRenameParams as gt, validateAgentsCreateParams as h, validateNodePendingEnqueueParams as ht, PAIRING_SCOPE as i, publicKeyRawBase64UrlFromPem as in, validateNodeEventParams as it, validateConfigSchemaLookupParams as j, validateSkillsBinsParams as jt, validateConfigGetParams as k, validateSessionsResolveParams as kt, resolveLeastPrivilegeOperatorScopesForMethod as l, normalizeInputProvenance as ln, validateNodePairListParams as lt, validateAgentWaitParams as m, validateNodePendingDrainParams as mt, APPROVALS_SCOPE as n, loadOrCreateDeviceIdentity as nn, validateModelsListParams as nt, WRITE_SCOPE as o, verifyDeviceSignature as on, validateNodeInvokeResultParams as ot, validateAgentParams as p, validateNodePendingAckParams as pt, validateDeviceTokenRevokeParams as q, errorShape as qt, CLI_DEFAULT_OPERATOR_SCOPES as r, normalizeDevicePublicKeyBase64Url as rn, validateNodeDescribeParams as rt, authorizeOperatorScopesForMethod as s, applyInputProvenanceToUserMessage as sn, validateNodeListParams as st, ADMIN_SCOPE as t, deriveDeviceIdFromPublicKey as tn, validateLogsTailParams as tt, GatewayClient as u, validateNodePairRejectParams as ut, validateAgentsFilesListParams as v, validatePushTestParams as vt, validateChatAbortParams as w, validateSessionsDeleteParams as wt, validateAgentsUpdateParams as x, validateSecretsResolveResult as xt, validateAgentsFilesSetParams as y, validateRequestFrame as yt, validateCronRunParams as z, validateWakeParams as zt };